4.3.1 Phép toán cơ sở RSASP1
RSASP1(K, m)
Đầu vào K là khóa bí mật RSA, K thuộc một trong các dạng sau - Một cặp (n, d)
- Bộ năm (p, q, dP, dQ, qInv) và một dãy bộ ba (ri, di, ti) i = 3...u, trong đó
p, q là hai thừa số nguyên tố của modulo n RSA dP là số mũ CRT của p, là một số nguyên dƣơng thoả
mãn e.dP1 (mod (p-1))
dQ là số mũ CRT của q, là một số nguyên dƣơng thoả mãn e.dQ1 (mod (q-1))
qInv là hệ số CRT, là một số nguyên dƣơng bé hơn p thoả mãn q.qInv 1 (mod p)
- m là biểu diễn thông điệp, là một số nguyên nằm giữa 0 và n -1
Đầu ra s là biểu diễn chữ ký , là số nguyên nằm giữa 0 và n-1
Lỗi “ biểu diễn thông điệp nằm ngoài giới hạn”
Giả thiết khoá bí mật K của RSA hợp lệ
Các bƣớc thực hiện:
1 . Nếu biểu diễn thông điệp m không nằm giữa 0 và n-1 thì đƣa ra thông báo “ biểu diễn thông điệp nằm ngoài giới hạn” và dừng lại
2. Tính toán chữ ký s
a. Nếu khoá K có dạng (n, d) thì đặt s = md mod n
b. Nếu K có dạng (p, q, dP, dQ, qInv) và (ri, di, ti), xử lý nhƣ sau i. Đặt s1 = mdPmod p và s2 = mdQmod q
ii. Nếu u > 2, đặt si = mdi mod ri i =3....u iii. Đặt h = (s1-s2).qInv (mod p)
iv. Nếu u>2 Đặt R= ri và for i =3 to u do 1. Đặt R =R.ri-1
2. Đặt h = (si -s).ti (mod ri) 3. Đặt s= s +R.h
3 . Đƣa ra chữ ký s.
4.3.2 Phép toán cơ sở RSAVP1
RSAVP1((n, e), s)
Đầu vào (n, e) là khóa công khai RSA của ngƣời ký
Đầu ra m là biểu diễn thông điệp , là số nguyên nằm giữa 0 và n-1
Lỗi “ biểu diễn chữ ký nằm ngoài giới hạn”
Giả thiết khoá công khai (n, e) của RSA hợp lệ
Các bƣớc thực hiện:
1 . Nếu biểu diễn chữ ký s không nằm giữa 0 và n-1 thì đƣa ra thông báo “ biểu diễn chữ
ký nằm ngoài giới hạn” và dừng lại 2. Đặt m = semod n
4. Trả về giá trị m
4.3.3 Phƣơng pháp định dạng cho cho chữ ký với phần nối thêm vào
1. Thao tác định dạng
Phƣơng pháp định dạng đƣợc tham số hoá bằng cách chọn: hàm băm (cố định với khoá RSA đã cho),
hàm tạo mặt nạ (cố định với khoá RSA đã cho), và độ dài phần phụ thêm (có thể thay đổi với khoá RSA đã cho).
Hình 4.1 Minh họa thao tác định dạng cho chữ ký nối thêm vào
2 M Hash salt mHash padding1 Hash salt padding2 M’ 1 H MGF maskedDB DB EM= 8emLen emBits 0 padding1 = (0x)00 00 00 00 00 00 00 00 padding2 = PS ||0x01
PS gồm emLen-sLen-hLen-2 zero octets
bc
dbMa sk
Công thức để tính EM:
((PD2||r) MGF(h(PD1||h(M)||r))) || h(PD1||h(M)||r)) || 0xbc EMSA-PSS-ENCODE (M, emBits)
Lựa chọn : h hàm băm (độ dài đầu ra của nó theo octets là hLen) MGF hàm tạo mặt nạ
sLen độ dài chủ định của phần phụ thêm theo octets
Đầu vào: M văn bản để mã hoá, là một chuỗi octet
emBits độ dài tối đa theo bit của số nguyên OS2IP (EM), ít nhất bằng 8hLen + 8sLen + 9
Đầu ra: EM văn bản đã đƣợc mã, đó là chuỗi octet có độ dài emLen = emBits/8
Thông báo lỗi: “lỗi định dạng”; “văn bản quá dài”
Các bƣớc:
1. Nếu độ dài của M là lớn hơn giới hạn đầu vào hàm băm là (261
-1) byte đối với SHA-1) thì đƣa ra thông báo “thông điệp quá dài” và dừng lại. 2. Đặt mHash=Hash(M), một xâu có độ dài hLen byte
3. Nếu emLen < sLen+hLen+2 thì đƣa ra thông báo “ Lỗi lập mã” và dừng lại
4. Sinh ra một xâu muối kiểu byte ngẫu nhiên có chiều dài sLen. Nếu sLen = 0 thì giá trị muối bằng rỗng
5. Đặt M’ = (0x)00 00 00 00 00 || mHash ||salt
M’ là một xâu có độ dài 8+sLen+hLen byte với phần khởi tạo là các byte bằng 0
M’ là một xâu có độ dài 8+sLen+hLen byte với phần khởi tạo là các byte bằng 0
7. Sinh một xâu kiểu byte PS bao gồm emLen – sLen –hLen -2 byte 0. Độ dài PS cũng có thể bằng 0.
8. Đặt DB = PS || 0x01||salt . DB là một xâu có chiều dài emLen-hLen-1 byte.
9. Đặt dbMask = MGF(H, emLen –hLen -1). 10. Đặt maskedDB = DBdbMask
11. Đặt 8emLen-emBits bit ngoài cùng bên trái của byte ngoài cùng bên trái maskedDB bằng 0.
12. Đặt EM = maskedDB||H||0xbc 13. Trả về giá trị EM.
2 Thao tác kiểm tra
EMSA-PSS-VERIFY(M, EM, emBits)
Chọn: Hàm băm Hash(hLen biểu thị độ dài byte của giá trị trả về của hàm băm) MGF là hàm sinh mặt nạ
sLen biểu thị độ dài dạng byte của muối
Input : M là thông điệp cần đƣợc mã hóa, là xâu dạng byte
emBits là độ dài bit lớn nhất của số nguyên OS2IP(EM), tối thiểu là 8hLen+8sLen+9
Output :EM là thông điệp đƣợc mã hóa, là một xâu dạng byte có chiều dài bằng
Các bƣớc thực hiện
1. Nếu độ dài của M là lớn hơn giới hạn đầu vào của của hàm băm là (261 -1 byte đối với SHA-1) thì đƣa ra thông báo “không phù hợp” và dừng lại. 2. Đặt mHash=Hash(M), một xâu dạng byte có độ dài hLen
3. Nếu emLen < sLen+hLen+2 thì đƣa ra thông báo “ Không phù hợp” và dừng lại
4. Nếu 8 byte tận cùng bên phải của EM không phải là giá trị hexa 0xbc thì đƣa ra thông báo “ Không phù hợp” và dừng lại
5. Đặt maskedDB là emLen-hLen -1byte tân cùng bên trái của EM là đặt H là hLen byte tiếp theo.
6. Nếu 8emLen-emBits bit tận cùng bên trái của byte tận cùng bên trái của trong maskedDB tất cả không bằng 0 thì đƣa ra thông báo “ Không phù hợp” và dừng lại
7. Đặt dbMask = MGF(H, emLen –hLen -1). 8. Đặt DB = maskedDBdbMask
9. Đặt 8emLen-emBits bit ngoài cùng bên trái của byte ngoài cùng bên trái
maskedDB bằng 0.
10. Nếu emLen – hLen –sLen -2 byte tận cùng bên trái của DB không bằng 0 hoặc nếu byte ở vị trí emLen-hLen –sLen – 1 (vị trí tận cùng bên trái bằng 1) không phải là giá trị hexa 0x01, thì đƣa ra thông báo “ Không hợp lệ” và dừng lại.
11. Đặt muối là sLen byte cuối cùng của DB. 12. Đặt M’ = (0x)00 00 00 00 00 || mHash ||salt M’ là một xâu có chiều dài 8+hLen+sLen byte với
13. Đặt H’ = Hash(M’) là một xâu có chiều dài hLen byte.
14. Nếu H=H’ thì đƣa ra thông báo “hợp lệ”, ngƣợc lại là “không hợp lệ”
3. Hàm tạo mặt nạ MGF dựa vào hàm băm
MGF(mgfSeed, maskLen)
Lựa chọn: h hàm băm (hLen ký hiệu độ dài đầu ra của hàm băm theo octet)
Đầu vào: mgfSeed mầm đƣợc dùng để tạo mặt nạ, là chuỗi octet
maskLen là độ dài chủ ý theo octet của mặt nạ, nhiều nhất là 232hLen
Đầu ra: mask mặt nạ, là chuỗi octet có độ dài maskLen
Thông báo lỗi: “mặt nạ quá dài”
Các bƣớc thực hiện:
1. Nếu maskLen > 232 hLen, cho ra thông báo lỗi “mặt nạ quá dài” và dừng lại 2. Lấy T là chuỗi octet rỗng
Với counter chạy từ 0 tới maskLen/hLen -1, thực hiện các bƣớc:
Chuyển counter thành một chuỗi octet C có độ dài 4 octet C = I2OSP (counter, 4)
Nối mầm mgfSeed với C, tính hàm băm của chuỗi này. Sau đó nối chuỗi octet T với giá trị băm vừa thu đƣợc
T = T || h(mgfSeed || C)
4.4 Lƣợc đồ ký với phần nối thêm vào
RSASSA-PSS kết hợp nguyên thuỷ RSASP1 và RSAVP1 với phƣơng pháp mã hóa EMSA-PSS. Nó tƣơng thích với lƣợc đồ IFSSA đƣợc xác định trong bản nháp P1363a., trong đó các nguyên thuỷ ký là IFSP-RSA1 và IFVP-RSA1 đƣợc xác định trong IEEE std 1363-2000 và phƣơng pháp mã hoá là EMSA4. EMSA4 phổ biến hơn EMSA-PSS vì nó thao tác với từng bit thay vì một byte. EMSA4 và EMSA-PSS đều bị giới hạn trong trƣờng các toán hạng cũng nhƣ giá trị băm và giá trị muối là xâu dài 1 byte.Chiều dài các thông điệp mà RSASSA-PSS có thể thực hiện không bị giới hạn hoặc ép buộc bởi số nguyên lớn, phụ thuộc vào hàm băm dựa vào phƣơng pháp mã hóa EMSA-PSS .
Giả sử rằng việc tính toán nghiệm của ethmodulo n là không thực hiện đƣợc và hàm băm, hàm sinh mặt nạ trong RSASSA-PSS có những đặc điểm thích hợp thì RSASSA- PSS cung cấp các lƣợc đồ ký an toàn. Tính đảm bảo là chứng minh đƣợc với nhận thức rằng độ khó của việc giả mạo chữ ký liên quan trực tiếp với độ khó của bài toán ngƣợc RSA, quy định rằng hàm sinh mặt nạ và hàm băm đƣợc xem nhƣ là hộp đen hoặc là các oracle ngẫu nhiên. Giới hạn trong việc chứng minh tính an toàn là “chặt”, có nghĩa rằng xác suất thành công và thời gian thực hiện dành cho phép giả mạo tốt nhất để chống lại RSASSA-PSS là rất gần giống với các tham số tƣơng ứng với bài toán ngƣợc RSA. Trái ngƣợc với lƣợc đồ ký RSASSA-PSS-PKCS1-v1_5, định danh hàm băm không đƣợc nhúng vào trong thông điệp đƣợc mã hóa theo phƣơng pháp EMSA-PSS, vì thế về mặt lý thuyết nó có thể đáp ứng đƣợc cho một phép giả mạo thực hiện thay thế một hàm băm khác thay vì hàm băm của ngƣời ký. Do đó nó đƣợc đề nghị rằng hàm sinh mặt nạ EMSA-PSS dựa trên hàm băm tƣơng tự. Theo cách này toàn bộ thông điệp đƣợc mã hóa sẽ phụ thuộc vào hàm băm và nó sẽ khó đối với đối thủ định thay thế một hàm băm khác cho hàm băm của ngƣời ký. Sự tƣơng thích hàm băm đáp ứng mục đích duy nhất là ngăn chặn khả năng thay thế hàm băm, và nó sẽ không cần thiết nếu sự thay thế hàm băm đuợc thực hiện theo cách khác. (ví dụ hàm kiểm tra chấp nhận duy nhất một hàm băm chỉ rõ).
RSASSA-PSS khác với lƣợc đồ ký dựa vào RSA ở chỗ nó theo xác suất hơn là dựa vào thuyết tất định, đƣợc kết hợp với một giá trị muối đƣợc sinh ngẫu nhiên. Giá trị muối làm tăng tính an toàn cho lƣợc đồ bởi vì tạo ra đƣợc một bằng chứng an toàn chặt hơn thuyết quyết định nhƣ Full Domain Hashing. Tuy nhiên tính ngẫu nhiên không phải then chốt đối với tính an toàn. Trong các tình huống mà việc sinh ngẫu nhiên là không thể, một giá trị muối cố định một dẫy số đƣợc sử dụng để thay thế với kết quả tính an toàn chứng minh đƣợc ngang bằng với bài toán FDH
Các thao tác tạo chữ ký số áp dụng một thao tác định khuôn dạng vào một thông điệp trƣớc khi nó đƣợc chuyển thành một biểu diễn thông điệp ở dạng số nguyên. Phép toán cơ sở RSASP1 đƣợc áp dụng vào biểu diễn thông điệp này để tạo ra chữ ký số. Đảo ngƣợc quá trình này, các thao tác kiểm tra chữ ký áp dụng một phép toán cơ sở RSAVP1 vào một chữ ký để khôi phục một biểu diễn thông điệp, sau đó nó đƣợc chuyển thành thông điệp đã đƣợc định dạng ở dạng chuỗi octet. Thao tác kiểm tra đƣợc áp dụng vào thông điệp ban đầu và thông điệp đã đƣợc định dạng để xác định xem chúng có tƣơng ứng nhau hay không
4.4.1 Thao tác sinh chữ ký
RSASSA-PSS-SIGN(K, M)
Đầu vào K là khóa bí mật RSA của ngƣời ký
M là thông điệp cần đƣợc ký, là một xâu kiểu byte
Đầu ra chữ ký S, một xâu kiểu byte có độ dài bằng k, trong đó k là chiều dài ở dạng byte của modulo n RSA .
Lỗi “ Thông điệp quá dài”, “ lỗi lập mã”
Các bƣớc thực hiện
1. Lập mã EMSA-PSS : áp dụng thao tác mã hoá EMSA-PSS đối với thông điệp M để đƣa ra thông điệp đƣợc mã hóa EM có độ dài (modBits1)/8 byte thoả
mãn độ dài bit của số nguyên OS2IP (EM) tối đa modBits-1, trong đó modBits là độ dài bit của modulo n RSA
EM = EMSA-PSS –ENCODE(M, modBits-1)
Chú ý rằng độ dài byte của EM sẽ nhỏ hơn k nếu modBits-1 chia hết cho 8 và bằng k trong trƣờng hợp ngƣợc lại Nếu đầu vào thao tác mã hoá là “thông điệp quá dài”, đầu ra là “thông điệp quá dài” và dừng lại.
2. Ký RSA:
a. Chuyển đổi thông điệp đƣợc mã hóa EM thành một biểu diễn thông điệp dƣới dạng số nguyên M
M = OS2IP(EM)
b. Áp dụng nguyên thuỷ ký RSASP1 với khoá ký bí mật RSA và thông điệp m để đƣa ra một biểu diễn chữ ký số nguyên s
s = RSASP1(K, m)
c. Chuyển đổi chữ ký s thành một chữ ký S có độ dài k S = I2OSP(s, k)
3. Trả về chữ ký S.
4.4.2 Thao tác kiểm tra chữ ký
RSASSA-PSS-VERIFY((n, e), M, S)
Đầu vào (n, e) là khóa công khai RSA của ngƣời ký
M là thông điệp mà chữ ký của nó cần phải đƣợc kiểm tra, là một xâu kiểu byte.
S là chữ ký phải đƣợc kiểm tra, một xâu kiểu byte có độ dài bằng k, trong đó k là chiều dài ở dạng byte của RSA modulo n.
Đầu ra “ chữ ký hợp lệ” hoặc “chữ ký không hợp lệ”.
Các bƣớc thực hiện
1.Kiểm tra chiều dài : Nếu chiều dài của chữ ký không phải là k byte, đƣa ra thông báo “ chữ ký không hợp lệ và dừng lại”
2.Kiểm tra RSA:
a. Chuyển đổi chữ ký S thành chữ ký s dƣới dạng số nguyên s = OS2IP(S)
b. Áp dụng nguyên thuỷ kiêm tra chữ ký RSAVP1 với khoá ký công khai RSA (n, e) và biểu diễn chữ ký s để đƣa ra một biểu diễn thông điệp m biểu diễn dƣới dạng số nguyên
m = RSAVP1((n, e), s)
nếu RSAVP1 thông báo “Biểu diễn chữ ký nằm ngoài giới hạn” thì quá trình kiểm tra chữ ký trả lời “chữ ký không hợp lệ” và dừng lại. c. Chuyển đổi biểu diễn thông điệp m thành thông điệp đƣợc mã hóa
EM có độ dài emLen = (modBits1)/8 byte EM = I2OSP(m, emLen)
Chú ý rằng độ dài byte của EM sẽ nhỏ hơn k nếu modBits-1 chia hết cho 8 và bằng k trong trƣờng hợp ngƣợc lại Nếu I2OSP thông báo
“số nguyên quá lớn “ thì trả lời “ chữ ký không hợp lệ” và dừng lại 3.Kiểm tra EMSA-PSS: Áp dụng thao tác kiểm tra EMSA-PSS đối với thông điệp
gốc và thông điệp đƣợc mã hoá EM để xác định xem chúng có bằng nhau Result = EMSA-PSS-VERIFY(M, EM, modBits-1)
4. Nếu Result =”consistent”, trả về “chữ ký hợp lệ”, ngƣợc lại đƣa ra chữ ký không hợp lệ.
4.5 Tiêu chuẩn tham số sử dụng trong chữ ký số RSA-PSS
Để sử dụng lƣợc đồ chữ ký số RSA-PSS an toàn cần phải tuân thủ các yêu cầu sau đây:
Cặp khoá RSA dùng để ký thì không đƣợc dùng cho mục đích khác (ví dụ mã thông điệp).
Hai số nguyên tố p và q, và số mũ bí mật d cần phải đƣợc giữ bí mật tránh việc bị truy cập bất hợp pháp, làm lộ hoặc sửa đổi. Modulo n và số mũ công khai e phải đƣợc công bố công khai.
Mỗi ngƣời sử dụng cần có modulo n riêng.
Độ dài của mođun n không đƣợc nhỏ hơn 1024 bit và phải đƣợc thay đổi theo thời gian nhƣ sau:
Thời gian sử dụng độ an toàn tối thiểu nlen tối thiểu
Tới năm 2010 80 1024
Tới năm 2020 112 2048
Sau 2020 128 3072
Trong đó, độ an toàn tối thiểu là một số nguyên biểu thị lƣợng tính toán cần thiết để phá hệ mã.
2 Yêu cầu đối với các khoá RSA
Số mũ công khai e cần phải đƣợc chọn với các ràng buộc sau: Số mũ công khai e cần đƣợc chọn trƣớc khi tạo số mũ bí mật d.
Số mũ công khai e cần phải là số nguyên dƣơng lẻ sao cho: 65, 537 e < 2nlen-2security_strength với nlen là độ dài của mođun n theo bit.
Chú ý rằng e có thể là giá trị bất kỳ mà thoả mãn ràng buộc 1(b); p và q sẽ đƣợc chọn (trong mục 2) sao cho e là nguyên tố cùng nhau với cả (p-1) và (q-1).
Hai số nguyên tố p và q đƣợc tạo ngẫu nhiên và giữ bí mật cần phải đƣợc chọn với các ràng buộc sau:
Mỗi một trong bốn số (p + 1), (p - 1) và (q + 1), (q - 1) cần phải có các nhân tử nguyên