Mật mã xác suất là một ý tƣởng đƣợc đề xuất bởi Goldwasser và Micali từ năm 1984, xuất phát từ yêu cầu giải quyết một vấn đề sau đây: Giả thiết ta có một hệ mật mã khoá công khai, và ta muốn lập mật mã cho bản rõ chỉ gồm một bit. Điều đó thƣờng gặp khi ta muốn bí mật truyền đi một thông tin chỉ có nội dung là có hoặc không, tức là một thông tin đặc biệt quan trọng nhƣng chỉ gồm một bit. Nếu ta dùng hệ mật mã công khai thƣờng, thì một bản mật mã đã đƣợc truyền đi sẽ là ek(0) hoặc ek(1), và khi lấy đƣợc bản mã truyền đi trên kênh truyền thông tin công cộng, chỉ cần so sánh bản mã nhận đƣợc đó với hai bản ek(0) và ek(1) đã đƣợc tính sẵn là đủ biết đƣợc thông tin mật đƣợc truyền đi là 0 hay 1. Các hệ mật khoá công khai sở dĩ có đƣợc tính bảo mật là vì từ thông tin bản mã khó lòng khai thác đƣợc thông tin gì về bản rõ, nhƣng rõ ràng điều đó không còn đƣợc đảm bảo nếu số các bản rõ là rất ít, chẳng hạn nhƣ khi các bản rõ có độ dài cực ngắn, hay trong trƣờng hợp trên, số các bản rõ chỉ là hai, cụ thể là 0 và 1.[2]
Mục đích của việc xây dựng mật mã xác suất là để đảm bảo không một thông tin nào về bản rõ có thể khai thác đƣợc (trong thời gian đa thức) từ bản mã; điều này đối với các hệ mật khoá công khai, có thể đƣợc thực hiện bằng cách tạo cho một bản rõ nhiều bản mã khác nhau theo cách ngẫu nhiên với việc sử dụng các số ngẫu nhiên trong tiến trình lập mã.
“PSS” ám chỉ tới lƣợc đồ chữ ký xác suất (Probabilistic Signature Scheme) khởi đầu bởi Mihir Bellare và Phillip Rogaway. Công trình của Bellare và Rogaway đã nâng mức trong cộng đồng nghiên cứu cho một lƣợc đồ chữ ký an toàn. Thực hành dựa trên hệ chữ ký RSA. RSA-PSS là một cập nhập kết quả của họ dành cho các chuẩn công
RSA-PSS gần đây đã đƣợc đƣa vào các công cụ phần mềm của hãng RSA Security là RSA BSAFE Crypto-C và Crypto-J toolkits.[10]
3.1.1 RSA-PSS hoạt động nhƣ thế nào ?
RSA-PSS, giống nhƣ hầu hết các lƣợc đồ chữ ký số, tuân theo kiểu mẫu “băm-rồi-ký’. Giả sử M là văn bản cần phải ký. Chữ ký đƣợc tính trên văn bản M theo 3 bƣớc:
1. Áp dụng hàm băm một chiều vào văn bản M để sinh ra giá trị băm mHash. 2. Biến đổi giá trị băm mHash thành văn bản đã mã hoá EM.
3. Áp dụng thành tố chữ ký vào văn bản đã mã hoá EM sử dụng khoá bí mật để sinh ra chữ ký S.
Điều đó có thể đƣợc biểu diễn ở dạng công thức nhƣ sau:
S = SigPrim (khoá bí mật, Transform (Hash (M)))
Ở đây, SigPrim ký hiệu thành tố chữ ký. Với hệ mật RSA, đó là công thức kinh điển:
S = EMd mod n với (n, d) là khoá bí mật, còn EM và S đƣợc xem nhƣ các số nguyên. Giả thiết rằng văn bản đã mã hoá có thể đƣợc khôi phục từ chữ ký, đó là trƣờng hợp cho các lƣợc đồ đƣợc mô tả ở đây, chữ ký đƣợc kiểm tra trong 3 bƣớc:
1. Áp dụng hàm băm một chiều vào văn bản để sinh ra giá trị băm mHash. 2. Áp dụng thành tố kiểm định vào chữ ký S để khôi phục văn bản đã mã hoá
EM.
3. Xác định xem văn bản đã mã hoá EM có là biến đổi hợp lệ của giá trị băm
mHash. (Nếu chỉ có một biến đổi hợp lệ cho mỗi giá trị băm, thì ngƣời ta có thể chỉ cần biến đổi mHash một lần và so sánh với EM; nhƣng nếu có hơn một biến đổi hợp lệ, thì quá trình xử lý tiếp là cần thiết).
Trong lƣợc đồ chữ ký PKCS #1 v1.5, thao tác Transform bao gồm một phép đệm cố định, giá trị băm đơn thuần đƣợc nối vào đầu bằng một chuỗi tiếp đầu ngữ có dạng 00 01 ff ff … ff ff 00 (theo dạng hex), sau đó là một chuỗi định ra hàm băm. Trong RSA-
PSS, thao tác Transform là ngẫu nhiên hơn nhiều. Thay cho một phép đệm cố định, lƣợc đồ sinh ra một giá trị “salt” ngẫu nhiên, sau đó áp dụng hàm băm và hàm sinh mặt nạ vào giá trị salt và giá trị băm để sinh ra văn bản mã hoá. Biến đổi đƣợc minh hoạ ở dƣới đây, bao gồm các bƣớc sau:
1. Sinh ra một giá trị ngẫu nhiên salt.
2. Nối phần đệm cố định, giá trị băm mHash và salt để tạo ra chuỗi M’. 3. Áp dụng hàm băm vào chuỗi M’ để tính ra giá trị băm H.
4. Nối phần đệm cố định và giá trị salt để tạo ra khối dữ liệu DB
5. Áp dụng hàm sinh mặt nạ vào chuỗi H để tính ra giá trị mặt nạ dbMask. 6. Áp dụng phép toán XOR đối với giá trị mặt nạ dbMask với khối dữ liệu DB
để tính xâu mặt nạ maskedDB
7. Nối maskedDB, giá trị băm H và phầm đệm cố định để tính ra văn bản mã hoá EM.
Để xác định xem văn bản đã mã hoá EM có phải là biến đổi hợp lệ của giá trị băm đã cho mHash, ngƣời ta đơn thuần làm ngƣợc các bƣớc từ 7 đến 4 nhằm khôi phục giá trị
salt và giá trị băm ban đầu H, sau đó lặp lại các bƣớc 2 và 3 để thấy rằng giá trị băm có đúng hay không.
Do có hàm băm và hàm sinh mặt nạ, văn bản đã đƣợc mã hoá EM hầu nhƣ hoàn toàn ngẫu nhiên đến mức không có một cấu trúc đặc biệt có thể phân biệt nó với chuỗi ngẫu nhiên có cùng độ dài với giả thiết rằng 2 hàm đƣợc xem nhƣ là các “hộp đen” (đó chính là “các tiên đoán ngẫu nhiên”). Chỉ có các phần không ngẫu nhiên là phần đệm bc ở cuối (đƣợc đƣa vào để tƣơng thích với các chuẩn khác) và có thể một số bit 0 ở đầu (khi EM đƣợc xem nhƣ là số nguyên modulo n). Thêm vào đó, phép biến đổi là đƣợc ngẫu nhiên hoá bởi vì giá trị salt ngẫu nhiên: có nhiều bản mã hoá có thể, cho nên có nhiều chữ ký có thể cho một văn bản đã cho M. Điều này giúp đỡ cho phân tích độ an toàn đƣợc mô tả về sau.
Hình 3.1. Minh hoạ hoạt động của lƣợc đồ ký RSA-PSS
3.1.2 Ƣu thế của RSA-PSS
Ƣu thế chính của RSA-PSS đối với lƣợc đồ chữ ký PKCS#1 v1.5 kinh điển ở chỗ các phƣơng pháp hiện đại về phân tích độ an toàn có thể liên hệ độ an toàn của nó với độ an toàn của bài toán RSA. Trong khi chƣa có tấn công nào đƣợc biết đối với lƣợc đồ kinh điển và việc giải bài toán RSA cơ sở (tức là phân tích modulus) là phƣơng pháp tốt nhất đƣợc biết để giả mạo chữ ký, thì không có một mối liên hệ nào giữa lƣợc đồ chữ ký số PKCS#1 v1.5 với bài toán RSA đƣợc chứng minh. RSA-PSS, ngƣợc lại, có một chứng minh nhƣ vậy nếu ngƣời ta mô hình hoá các hàm băm của nó nhƣ là các “tiên đoán ngẫu nhiên” nhƣ vẫn thƣờng đƣợc làm.
“an toàn chứng minh đƣợc”. Nếu một lƣợc đồ chữ ký không có chứng minh an toàn, thì có thể về mặt lý thuyết các chữ ký dễ bị giả mạo, trong khi bài toán nằm dƣới vẫn là khó giải. Mặc dù theo lý thuyết độ phức tạp không cho phép chúng ta chứng minh rằng bài toán cơ sở, tức là RSA, là chắc chắn khó giải, chúng ta sẽ có một sự tin tƣởng rằng nếu bài toán đó là thực sự khó giải, thì các chữ ký cũng khó giả mạo nhƣ vậy. RSA-PSS mang lại tin cậy cao độ vào việc thu gọn khoảng cách giữa giả thuyết bài toán RSA là khó giải và khẳng định rằng các chữ ký là khó giả mạo. Thực ra, RSA- PSS có một trong những khoảng cách nhỏ nhất nhƣ vậy trong số các kỹ thuật “an toàn chứng minh đƣợc” hiện thời; theo cách nói thông thƣờng, phép chứng minh cho độ an toàn của RSA-PSS là rất “chặt”. Việc ngẫu nhiên hoá trong lƣợc đồ chữ ký đóng một vai trò quan trọng trong việc đạt đƣợc tính chặt và là một trong những đóng góp cơ bản từ lƣợc đồ PSS của Bellare và Rogaway.
Một ƣu thế nữa của RSA-PSS là, do việc ngẫu nhiên hoá, kẻ tấn công không biết xem trƣớc văn bản đã đƣợc mã hoá EM nhƣ thế nào. Điều này làm cho các tấn công “phân tích lỗi” kiểu nhƣ đƣợc đề xuất bởi Bellcore một số năm trƣớc đây khó có thể thực hiện đƣợc (xem RSA Laboratories’ [14])
3.1.3 Các công trình chuẩn
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