RSA-PSS đã đƣợc thêm vào phiên bản 2.1 của PKCS #1: RSA Cryptography Standard, nó đã đƣợc công bố bởi RSA Laboratories vào tháng 6 năm 2002. Tài liệu này đã đƣợc công bố lại là IETF RFC 3447.
Lƣợc đồ chữ ký số này đã đƣợc khuyến cáo bởi dự án NESSIE của châu Âu, nó cũng nhận đƣợc đánh giá đồng tình bởi dự án CRYPTREC của Nhật Bản. RSA-PSS cũng có ở trong phiên bản dự thảo (gần nhƣ cuối) của IEEE P1363a. Một lƣợc đồ đồng hành cung cấp khả năng “khôi phục văn bản” cũng đƣợc đƣa vào chuẩn quốc tế ISO/IEC 9796-2:2002.
RSA Laboratories cũng khuyến khích chuyển dần sang dùng RSA-PSS nhƣ là các chuẩn khác nhƣ: SHA-256 hay AES. RSA Laboratories hoan nghênh các đề nghị cho
các tổ chức khác nhằm khuyến khích lƣợc đồ mới RSA-PSS.
3.1.4 Một số nhận xét về lƣợc đồ ký RSA-PSS
Mục “9.7 RSA-PSS” trong tài liệu CD18 của dự án số IST-2000-12324 của NESSIE nhận xét về lƣợc đồ RSA-PSS nhƣ sau :
Không có một kẻ hở nào được tìm thấy trong chứng minh độ an toàn, nó cho một suy dẫn hiệu quả. RSA-PSS dựa vào bài toán RSA đã được nghiên cứu kỹ và cho phép kiểm tra chữ ký nhanh. Nó đã được lựa chọn.
Trang 68 báo cáo tổng kết của CRYPTREC 2003 có viết về độ an toàn của RSA-PSS nhƣ sau:
PSS là lược đồ mã hoá chữ ký số được đề xuất bởi Bellare và Rogaway. Bằng cách thêm một số thành phần các số ngẫu nhiên vào văn bản sẽ được ký, các lược đồ chữ ký tất định giống như chữ ký RSA có sinh ra các chữ ký khác nhau. RSA-PSS không chỉ thay đổi lược đồ chữ ký tất định thành xác suất mà còn cho phép độ an toàn của nó là chứng minh được trong mô hình tiên đoán ngẫu nhiên .[14]
Đối với độ dài salt, một số tài liệu cho rằng kích thƣớc 30-bit là đủ để đảm bảo độ an toàn mặc dù kích thƣớc salt 180-bit là cần thiết trong kỹ thuật chứng minh trƣớc đây.
3.2 Định nghĩa lƣợc đồ ký PSS2000 3.2.1 Lƣợc đồ ký điện tử PSS96
Lƣợc đồ ký PSS96 bao gồm một phép toán mã hóa PSS96-ENCODE và một phép toán xác minh PSS96-VERIFY đƣợc tham số hóa bởi hai số nguyên dƣơng kr và
kh thỏa mãn kr+kh ≤ k -1, trong đó k là độ dài bit của modun phép toán xác minh RSA,
kr là độ dài bit của muối, một phần tử đƣợc sinh ngẫu nhiên trong quá trình mã hóa. PSS96 dựa trên sự kết hợp giữa hai hàm
Hàm h : {0, 1}* {0, 1} kh và hàm g : {0, 1}kh {0, 1}kg
Trong đó kg = k -1 -kh . Kết quả hàm g trả về che giấu muối trong thông điệp đƣợc mã hóa. Vì vậy g thƣờng đƣợc xem nhƣ là hàm sinh mặt nạ. Chúng ta xem g và
h nhƣ là hàm băm. Trong tài liệu này mỗi khi nhắc đến h(m) nghĩa là nói đến việc băm chuỗi m.
Cho một tập hữu hạn S, chọn ngẫu nhiên một phần tử s từ tập S (ký hiệu là s S). Phép toán mã hóa và phép toán xác minh PSS96 thực hiện nhƣ sau
Phép toán ký đầy đủ RSA-PSS96-SIGN có đầu vào là thông điệp M, tính
y = PSS96-ENCODE(M), trả về x = f-1(y), trong đó f chính là phép toán xác minh của hệ mật mã RSA. Phép toán xác minh RSA-PSS96-VERIFY có đầu vào là thông điệp
M và chữ ký x, tính y = f(x), sau đó xác minh kết quả trả về bằng cách áp dụng thuật toán PSS96-VERIFY(M, y)
3.2.2 Lƣợc đồ ký điện tử PSS2000
PSS96-VERIFY(M,y)
(1) Viết y = b || r* || w ; (| b |=1, | r*| = kg , |w | =kh )
(2) Nếu b =1 trả về kết quả bằng 0 và dừng quá trình xác minh (3) Viết g(w) r*= || r ; (| |=kg-kr , |r|=kr)
(4) Nếu h(M|| r) =w & = trả về kết quả bằng 1 ngƣợc lại bằng 0 PSS96-ENCODE(M)
(1) r ; /* Sinh ngẫu nhiên số r có độ dài bit là kr*/. (2) w ← h(M || r) ; /* Phép toán || là phép nối hai dãy bit */. (3) r* =g(w) ( || r ); /* Phép là phép toán XOR bit */. (4) Return y = 0 || r* || w ;
Phép toán lập mã PSS2000 dựa trên PSS96, đƣợc đƣa vào trong bản thảo của IEEE P1363a và PKCS #v2.1, đã đƣợc gửi tới NESSIE và dự án CRYPTREC Nhật Bản. Những đặc tính mới của phiên bản PSS2000 so với PSS96 nhƣ sau :
1. Thay vì tính toán băm M||r, ngƣời ta tính toán chỉ băm một mình M , bƣớc tiếp tính toán băm 0u
||h(M)||r, trong đó u là một số nguyên ( chỉ định hiện tại u =64). Sự thay đổi này tƣơng đƣơng với việc thay thế đầu vào là M trong PSS96-ENCODE bằng 0u ||h(M). Chuỗi 0u đƣợc thêm vào thích hợp với phép toán lập mã cho phép khôi phục lại thông điệp ban đầu.
2. Thông điệp đƣợc mã hóa bới PSS2000 có chín hoăc mƣời một bit cố định, trong khi đó chỉ có một bit đầu tiên đƣợc cố định trong lƣợc đồ PSS96. Ở lƣợc đồ PSS2000, bit đầu tiên là bit 0 và tám bit cuối cùng có giá trị hexa là bc hoặc cc; trong trƣờng hợp nhận giá trị là cc thì thành phần kế tiếp tám bit cuối cùng lập thành một định danh băm. Các bit cố định thêm vào này tƣơng thích với lƣợc đồ chữ ký nguyên thủy Rabin-Williams IFSP-RW trong IEEE std 1363-2000. Sự thay đổi này tƣơng đƣơng với việc thay thế đầu ra là y thành y||bc và định nghĩa lại kg =k -1 - kh
3. Phần tử r* đƣợc định nghĩa bằng g(w) ( ||1||r). Phần tử phân định 1 quan trọng đối với lƣợc đồ RSA-PSS-R cho phép khôi phục lại thông điệp. Đáng chú ý là ngƣời gửi và ngƣời nhận không cần phải đồng ý trƣớc với nhau về độ dài bit của muối. Độ dài này tính toán đƣợc từ r* g(w).
Điều này không ảnh hƣởng đến tính an toàn của lƣợc đồ. Chúng ta sẽ chứng minh rằng thật khó thám mã một chữ ký khi mà độ dài muối không đƣợc thông báo bởi ngƣời ký.
Lƣợc đồ PSS2000 bao gồm một phép toán lập mã PSS2000-ENCODE và một phép toán xác minh PSS2000-VERIFY. Để thuận tiện chúng ta xét giá trị băm của thông điệp M là H=h(M) làm đầu vào thay vì thông điệp M. Đặt E là một chuỗi bit cố định có độ dài bit kE, trong đó kE là số nguyên thỏa mãn rằng kr + kh + kE k -1. Cụ thể E là chuỗi bc = 10111100 hoặc chuỗi HID||cc, trong đó HID là một bộ tám, do đó kE = 8 hoặc
16. Các ký hiệu đƣợc sử dụng nhƣ trong lƣợc đồ RSA-PSS96, ngoại trừ kg đƣợc định nghĩa lại bằng k -1 – kh - kE
Phép toán ký đầy đủ RSA-PSS2000-SIGN nhận thông điệp M làm đầu vào, tính
H=h(M) và y = PSS2000-ENCODE(H) và trả về giá trị x =f--1(y).
3.2.3 Lƣợc đồ tổng quát hóa
Mục này chúng ta phân tích tính an toàn của lƣợc đồ RSA-PSS2000 từ những khía cạnh khác nhau. Để có thể nghiên cứu một cách tổng quát, chúng ta giới thiệu một lƣợc đồ lập mã GenPSS-ENCODE tổng quát mà lƣợc đồ PSS2000-ENCODE là một trƣờng hợp cụ thể của lƣợc đồ này. Thay vì có một độ dài muối cố định, chúng ta chấp nhận các độ dài muối đƣợc nhặt ra từ một tập hợp số nguyên không rỗng Ksig.
Tƣơng tự thế phép toán xác minh GenPSS-VERIFY chấp nhận các độ dài của muối từ PSS2000-ENCODE(H)
(1) r ; /* Sinh ngẫu nhiên số r có độ dài bit là kr*/. (2) w ← h(0u ||H||r) ; /* Phép toán || là phép nối hai dãy bit */. (3) r* =g(w) ( ||1||r ); /* Phép là phép toán XOR bit */. (4) Return y = 0 || r* || w ||E;
PSS2000-VERIFY(H,y)
(1) Viết y = b || r* || w||E’ ; (| b |=1, | r*| = kg , |w | =kh, |E’ | =kE )
(2) Nếu b =1 hoặc E ≠ E’trả về kết quả bằng 0 và dừng quá trình xác minh (3) Viết g(w) r*= || r ; (| |=kg-kr , |r|=kr)
(4) Nếu h(0u || H|| r) =w & = ||1trả về kết quả bằng 1 ngƣợc lại bằng 0
một tập hợp số nguyên không rỗng Kver. Theo cách này chúng ta có thể nghiên cứu hai vấn đề sau đây:
1. Kẻ giả mạo cố gắng tạo ra một chữ ký với một độ dài muối không đƣợc cung cấp bởi ngƣời ký. Điều này tƣơng ứng với trƣờng hợp Kver\Ksig khác rỗng. 2. Kẻ giả mạo cố gắng tạo ra một chữ ký với một độ dài muối thuộc tập hợp độ
dài muối đƣợc cung cấp bởi ngƣời ký. Điều này tƣơng ứng với trƣờng hợp
Ksig\Kver khác rỗng. Đặt K = Ksig Kver
PSS2000-ENCODE bao gồm hai phép toán độn đơn giản, một phép toán biến đổi (H, r) thành 0u||H || r và một phép toán biến đổi r thành ||1||r.
Để có một số điều chỉnh nhỏ các phép toán và đơn giản hóa các ký hiệu, chúng ta giới thiệu hai hàm ánh xạ:
: {0, 1}K→{0, 1}* : {0, 1}K→
Hàm có đầu vào là (H, r) (một giá trị và một muối). có đầu vào là muối r. Chúng ta giả sử rằng , dễ dàng tính ngƣợc, nghĩa là dễ dàng tính đƣợc giá trị r từ (r), và cũng tƣơng tự đối với .
3.2.4 Định nghĩa lƣợc đồ RSA-GENPSS
Sử dụng hệ thống ký hiệu giống nhƣ trong lƣợc đồ PSS2000-ENCODE. Các tham số đầu cho lƣợc đồ này là chuỗi H có độ dài bit kh và độ dài bit của muối đƣợc chọn từ tập Ksig là k0
Tham số đầu vào cho GENPSS-VERIFY là chuỗi H có độ dài kh , một chuỗi y có độ dài k – 1, và một muối có độ dài k0 đƣợc chọn từ tâp hợp Kver.
GenPSS-Verify (H, y, k0) được tiến hành theo các bước sau:
Mục đích của chúng ta là định nghĩa hai lƣợc đồ ký dựa trên phƣơng pháp lập mã GENPSS. Một lƣợc đồ thông thƣờng RSA-GENPSS và một lƣợc đồ ”rút gọn ” RSA- PSS-REDUCED. Lƣợc đồ thông thƣờng là lƣợc đồ tổng quá hóa trực tiếp của RSA- PSS2000, trong khi đó lƣợc đồ rút gọn nhận giá trị băm của thông điệp đƣợc ký làm tham số đầu vào thay vì chính thông điệp đó. Mục đích của việc giới thiệu lƣợc đồ rút gọn là cho phép chúng ta đƣa ra chứng minh tính an toàn của lƣợc đồ RSA-GENPSS sau hai bƣớc.
1. Bƣớc thứ nhất chúng ta diễn đạt tính an toàn của RSA-GENPSS dƣới dạng RSA-GENPSS-REDUCED.
2. Bƣớc thứ hai chúng ta biến đổi những chứng minh tính an toàn cho lƣợc đồ (1) Viết y dƣới dạng
y= b || r*||w ||E’ (|b| = 1,|r*|=kg , |w|=kh , |E’| = kE)
(2) Nếu b = 1 hoặc E # E’ cho ra là 0 và dừng kết thúc quá trình xác minh.
(3) Nếu có thể thì viết g (w) r* =(r) với | r|=k0, ngƣợc lại cho ra là 0 và dừng quá trình xác minh
(4) Nếu h((H,r)) = w thì cho ra là 1, ngƣợc lại cho ra là 0.
GENPSS- ENCODE(H,k0) (1) rR {0,1}k0 (2) w h((H,r)) (3) r* g(w)(r) (4) Return y = 0 ||r*||w||E
REDUCED. Kết hợp hai bƣớc này chúng ta có đƣợc một bằng chứng cho lƣợc đồ RSA-GENPSS.
Chúng ta đã định nghĩa RSA-GENPSS-REDUCED(Ksig, Kver). Tham số đầu vào cho phép toán ký của lƣợc đồ ký thu gọn RSA-GENPSS-REDUCED_SIGN là một chuỗi có độ dài kh và một muối có độ dài k0.
Phép toán ký RSA-GenPSS-Reduced-Sign(H, k0) đƣợc thực hiện nhƣ sau
Tham số đầu vào cho phép toán xác minh của lƣợc đồ ký thu gọn RSA-GENPSS- REDUCED_VERIFY là một chuỗi có độ dài kh, một chữ ký x và một muối có độ dài k0. Phép toán ký RSA-GenPSS-Reduced-Verify(H, x, k0) đƣợc thực hiện nhƣ sau
Phép toán ký và xác minh chính của lƣợc đồ RSA-GENPSS-SIGN và RSA-GENPSS- VERIFY nhận chuỗi M có độ dài bất kỳ làm đầu vào thay vì chuỗi H có độ dài kh.
(1) y GenPSS-Encode(H,k0) (2) x f -1(y) (3) Cho ra kết quả là x. (1) y f(x) (2) b GenPSS-Verify(H,y,k0) (3) Cho ra kết quả là b RSA-GENPSS-SIGN(M,k0) (1) H h(M) (2) x RSA-GenPSS-REDUCED-SIGN(H,k0)
3.2.5 Các mô hình an toàn
Chúng ta muốn định nghĩa các mô hình an toàn cho RSA-GENPSS và RSA- GENPSS-REDUCED. Trong mỗi một mô hình này ngƣời giả mạo biết khóa công khai và đƣợc cho phép truy cập vào oracle ký và hai oracle băm mô phỏng g và h. Mô hình có các tham số đầu vào là qsig, qhash và t. Tham số qsìg là giới hạn trên số các yêu cầu tới oracle ký, qhash là giới hạn trên tổng số các yêu cầu tới oracle băm. Cuối cùng t là giới hạn trên về độ phức tạp của phép giả mạo (gồm thời gian thực hiện và kích thƣớc mô tả).
Mục đích của kẻ giả mạo là xây dựng một cặp (M, x), trong đó x là chữ ký hợp lệ của
M. Dĩ nhiên x không phải là đáp ứng của yêu cầu ký có đầu vào M, tuy nhiên có thể x
đáp ứng yêu cầu của phép toán ký với một tham số đầu vào khác và có thể có những yêu cầu ký khác với đầu vào là M. Lược đồ ký (t, qsig, qhash, )-an toàn nếu như không có hoạt động giả mạo nào với độ phức tạp t và xác suất thành công là thực hiện được tối đa qsig phép toán ký và qhash hàm băm.[5]
Trƣớc tiên chúng ta định nghĩa một mô hình an toàn cho RSA-GENPSS-REDUCED. Ngƣời giả mạo biết khóa công khai và đƣợc cho phép truy cập tới oracle ký và hai oralce ngẫu nhiên độc lập mô phỏng g và h tƣơng ứng. Oralce đáp ứng ngẫu nhiên các
RSA-GENPSS-VERIFY(M,x,k0) (1) H h(M)
(2) x RSA-GenPSS-REDUCED-VERIFY(H,x,k0) (3) Cho ra kết quả là b
phân bổ đều từ một tập hợp cố định và độc lập với các đáp ứng khác. Để tính h(x), ngƣời giả mạo gửi x tới oracle h, h yêu cầu x = (H,r), trong đó |H| = kh và | r|Ksig
Kver. Để tính g(w), ngƣời giả mạo gửi w đến hàm băm g và g yêu cầu |w|=kh.
Thứ hai, chúng ta định nghĩa một mô hình an toàn cho RSA-GENPSS. Mô hình này tƣơng tự mô hình RSA-GENPSS-REDUCED. Một lần nữa chúng ta có oralce ký và hai oracle ngẫu nhiên cho g và h. Miền đối với g tƣơng tự nhƣ trên, trong khi oracle h
chấp nhận các tham số đầu vào có độ dài bất kỳ. Tuy nhiên ở mô hình này có sự phụ thuộc giữa hai oracle. Cụ thể trong đặc tả dự thảo gần đây của RSA-PSS2000, g(w)
đƣợc định nghĩa bằng kg = k – 1 - kh - kE bit đầu tiên của chuỗi
h(0(w))|| h(1(w))|| h(2(w))||… (1)
Ở đây i(w) = w|| (i)32, trong đó (i)32 là biểu diễn của i ở dạng 32 bit low-endian. Nói một cách cụ thể có những tƣong tác giữa h và g. Những tƣong tác này không xuất hiện trong lƣợc đồ rút gọn. Vì thế trong lƣợc đồ RSA-PSS2000 độ dài bit của (H,r) bằng
u +kh+ kr. Do u = 64 nên không bao giờ xảy ra trƣờng hợp (H,r) = |1(w)| = kh+32. Chúng ta giả sử rằng kẻ giả mạo của lƣợc đồ RSA-GENPSS đƣa ra một chữ ký (M, x), thì kẻ giả mạo phải gửi tất cả yêu cầu h-oracle và g-oracle cần thiết để xác minh x.
3.2.6 Một số xem xét về vấn đề lƣu trữ
Một nhân tố quan trọng làm giảm tính an toàn là một phép toán giả mạo oracle ngẫu nhiên, chẳng hạn nhƣ là một thuật toán mô phỏng các oracle ngẫu nhiên. Không thể ngăn chặn ngƣời giả mạo gửi một yêu cầu oracle bất kỳ hơn một lần. Do các đáp ứng và các yêu cầu phải đồng nhất với nhau nên phép toán giả mạo phải lƣu toàn bộ lịch sử các yêu cầu và đáp ứng . Đây là một vấn đề bởi vì đầu vào của hàm h trong lƣợc đồ RSA-GENPSS có độ dài tùy ý. Do đó các yêu cầu lƣu trữ đối với phép toán giả mạo có lẽ không thể thực hiện đƣợc, trong khi đó ngƣời giả mạo có những cách thức nhất định để xây dựng các yêu cầu mà không cần phải lƣu trữ chúng.
Có những cách thức để giải quyết vấn đề này. Cụ thể là sử dụng một hàm xác định đuợc chọn ngẫu nhiên từ tập hợp H rộng lớn, là một thể hiện của hdành cho các yêu cầu dài và sử dụng một thể hiện oracle ngẫu nhiên của h chỉ dành cho các yêu cầu ngắn. Giả sử việc tìm ra xung đột trong một hàm đƣợc chọn ngẫu nhiên từ tập H là khó, chúng ta có đƣợc sự bớt an toàn với giới hạn về các yêu lƣu trữ đối với hoạt động giả mạo hợp lý. Tuy nhiên cách tiếp cận này cũng đã yêu cầu một vài định nghĩa mang tính kỹ thuật. Hơn nữa xác suất để ngƣời giả mạo tìm ra một xung đột sẽ không chỉ còn phụ thuộc vào số lƣợng các yêu cầu mà còn phụ thuộc vào thời gian thực hiện và