5. Bố cục Luận văn
2.1.2. Hàm giải mã RSAES-OAEP
Các lựa chọn: Hash là hàm băm (hLen ký hiệu độ dài theo byte của đầu ra hàm băm.
MGF là hàm sinh mặt nạ.
Đầu vào: K là khoá riêng RSA của người nhận (k ký hiệu độ dài theo byte của RSA-modulo n).
C là bản mã cần được giải mã, chuỗi byte có độ dài k, với k 2hLen + 2.
L là nhãn tùy chọn liên quan đến thông báo, giá trị mặc định của L là chuỗi rỗng nếu không được cung cấp. Đầu ra: M thông báo, một chuỗi byte có độ dài mLen với mLen
k – 2hLen -2
Lỗi: “Lỗi giải mã”
Các bƣớc:
Bước 1) Kiểm tra độ dài:
a. Nếu độ dài của L lớn hơn giới hạn đầu vào cho hàm băm (261-1 byte đối với SHA-1), thì cho ra “Lỗi giải mã” và dừng.
b. Nếu độ dài của bản mã C không là k byte, cho ra “Lỗi giải mã” và dừng.
c. Nếu k < 2hLen + 2, cho ra “Lỗi giải mã” và dừng.
Bước 2) Giải mã RSA:
a. Chuyển bản mã C thành số nguyên biểu diễn bản mã c: c = OS2IP(C). b. Áp dụng RSADP vào khoá riêng RSA K và biểu diễn bản mã c để tạo ra số nguyên biểu diễn thông báo m: m = RSADP(K, c). Nếu RSADP cho ra “biểu diễn bản mã ở ngoài miền” (có nghĩa rằng c n), ra “lỗi giải mã” và dừng.
c. Chuyển biểu diễn thông báo m thành thông báo EM có k byte: EM = I2OSP(m, k).
a. Giả sử lHash được lấy như trong quá trình chuẩn bị dữ liệu EME- OAEP.
b. Phân tách thông báo EM thành một byte duy nhất Y, chuỗi byte maskedSeed có độ dài hLen, chuỗi byte maskedDB có độ dài k-hLen-1 như sau:
EM = Y || maskedSeed || maskedDB.
c. Đặt seedMask = MGF(maskedDB, hLen). d. Đặt seed = maskedSeed seedMask. e. Đặt dbMask = MGF(seed, k –hLen-1). f. Đặt DB = maskedDB dbMask.
g. Phân tách DB thành chuỗi byte lHash‟ có độ dài hLen, chuỗi đệm PS (có thể rỗng) bao gồm các byte với giá trị hexa 0x00 và thông báo M: DB = lHash‟||PS|| 0x01|| M. Nếu không có byte có giá trị hexa bằng 0x01 phân tách giữa PS và M, nếu lHash không bằng lHash‟, hoặc nếu Y không bằng zero thì cho ra “lỗi giải mã” và dừng.
Bước 4) Cho ra thông báo M