5. Bố cục Luận văn
2.1. Lược đồ mã RSA-OAEP
RSA-OAEP (RSA Encryption Scheme – Optimal Asymmetric Encryption Padding) được đưa ra bởi Bel-lare và Rogaway năm 1994. Mã hóa khóa công khai RSA-OAEP là sự kết hợp giữa phương pháp mã hóa của OAEP với mó húa RSA nguyờn thủy. RSA-OAEP sử dụng bản rừ làm đầu vào, chuyển chúng thành thông báo đã được mã hóa bằng OAEP và áp dụng RSAEP (RSA encryption primitive) để cho kết quả (dạng số nguyên) sử dụng một khóa công khai RSA. RSA-OAEP dùng cả hai khả năng bảo mật và được thiết kể cho việc mã hóa một thông báo ngắn – các khóa bí mật trong mật mã đối xứng.
2.1.1. Hàm mã hoá RSAES-OAEP
RSAES-OAEP-ENCRYPT((n, e), M,L)
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: (n, e) là khoá công khai RSA của người nhận (k ký hiệu độ dài theo byte của RSA modulo n).
M là thông báo được mã hóa, chuỗi byte có độ dài mLen với mLen 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: C bản mã, chuỗi byte có độ dài k.
Các lỗi: “thông báo quá dài”, “nhãn quá dài”.
Giả thiết: Khoá công khai RSA (n, e) là hợp lệ.
Các bước thực hiện:
Bước1) 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 “nhãn quá dài” và dừng.
b. Nếu mLen > k -2hLen-2 thì cho ra “thông báo quá dài” và dừng.
Bước 2) Chuẩn bị dữ liệu EME-OAEP :
a. Nếu L không được cung cấp thì L là chuỗi rỗng. Đặt lHash=Hash(L), chuỗi byte có độ dài hLen. Lưu ý, nếu L là chuỗi rỗng, giá trị lHash có biểu diễn hex sau cho các lựa chọn khác nhau của Hash:
SHA-1: (0x)da39a3ee 5e6b4b0d 3255bfef 95601890 afd80709
SHA-256: (0x)e3b0c442 98fc1c14 9afbf4c8 996fb924 27ae41e4 649b934c a495991b 7852b855
SHA-384: (0x)38b060a7 51ac9638 4cd9327e b1b1e36a 21fdb711 14be0743 4c0cc7bf 63f6e1da 274edebf e76f65fb d51ad2f1 4898b95b
SHA-512: (0x)cf83e135 7eefb8bd f1542850 d66d8007 d620e405 0b5715dc 83f4a921 d36ce9ce 47d0d13c 5d85f2b0 ff8318d2 877eec2f 63b931bd 47417a81 a538327a f927da3e
b. Sinh chuỗi byte PS chứa k-mLen-2hLen byte 0. Độ dài của PS có thể là 0.
c. Nối lHash, PS, một byte duy nhất với giá trị hexa 0x01 và thông báo M để tạo nên khối dữ liệu DB có độ dài k- hLen -1: DB = lHash || PS || 0x01 ||
M.
d. Sinh một chuỗi byte ngẫu nhiên seed có độ dài hLen.
e. Đặt dbMask = MGF(seed, k- hLen -1).
f. Đặt maskedDB = DB dbMask.
g. Đặt seedMask = MGF(maskedDB, hLen).
h. Đặt maskedSeed = seed seedMask.
i. Nối byte duy nhất với giá trị hexa 0x00, maskedSeed và maskedDB để tạo nên thông báo EM có độ dài k byte: EM = 0x00 || maskedSeed ||
maskedDB.
Bước 3) Mã hóa RSA:
a. Chuyển thông báo EM thành số nguyên biểu diễn thông báo m: m = OS2IP(EM)
b. Áp dụng RSAEP vào khoá công khai RSA (n, e) và biểu diễn thông báo m để tạo ra số nguyên biểu diễn bản mã c: c= RSAEP((n,e),m).
c. Chuyển biểu diễn bản mã c thành bản mã C có độ dài k byte: C = I2OSP(c, k)
Bước 4) Cho ra bản mã C.
Hình 2.1. Thuật toán mã hóa EME-OAEP
2.1.2. Hàm giải mã RSAES-OAEP RSAES-OAEP-DECRYPT(K, C,L)
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).
Bước 3) Xử lý EME-OAEP:
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
2.1.3. Yêu cầu tham số an toàn cho hệ mật RSA
Trong thực tế, không phải bộ tham số nào của hệ mật RSA cũng làm cho hệ mật này an toàn trước các tấn công thám mã nên việc đưa ra các yêu cầu về tham số để hệ mật RSA an toàn là một nội dung rất cần thiết.
Chuẩn TCVN 7635:2007: Là một chuẩn liên quan đến hệ mật RSA do Tiểu ban Kỹ thuật tiêu chuẩn TCVN/JTC 1/SC 27 “Các Kỹ thuật Mật mã”
biên soạn trên cơ sở dự thảo của Ban Cơ yếu Chính phủ, Tổng cục Tiêu chuẩn Đo lường chất lượng đề nghị, Bộ Khoa học và Công nghệ, được công bố vào năm 2007. Chuẩn liên quan đến các tham số cho hệ mật RSA được đánh số lại với chữ cái đầu là V như sau:
V1. Độ dài modulo N (nlen) không được nhỏ hơn 1024 và nên được thay đổi theo thời gian được trình bày trong bảng 2.3.
Bảng 2.1. Độ dài modulo của hệ mật RSA theo TCVN 7635:2007
Thời gian sử dụng Độ an toàn
(security_strength) nlen tối thiểu
Tới năm 2010 80 1024
Tới năm 2030 112 2048
Sau năm 2030 128 3072
V2. Số mũ công khai e phải được chọn với các ràng buộc sau:
a) Chọn trước khi tạo số mũ bí mật.
b) Là số nguyên dương lẻ sao cho 65537 e < 2nlen- 2security_strength.
V3. Hai số nguyên tố p, q phải được chọn với ràng buộc:
a) p-1 và q-1 phải nguyên tố cùng nhau với e.
b) Mỗi một trong bốn số p-1, p+1, q-1 và q+1 phải có ước nguyên tố lớn hơn 2security_strength+20.
c) 22nlen/2-1 p, q 2nlen/2-1.
V4. Số mũ bí mật d phải được chọn sau khi tạo p và q với các ràng buộc:
a) d > 2nlen/2.
b) d e-1 (mod lcm(p-1,q-1)).