I. Tổng quan về PKCS #1
Cùng với sự phát triển của Internet, dịch vụ ứng dụng chữ ký số cũng ngày càng được sử dụng rộng rãi. Chính vì vậy, hiện nay trên thế giới đã có hơn 50 quốc gia ban hành Luật về chữ ký số. Ngoài ra còn có rất nhiều các tiêu chuẩn kỹ thuật liên quan đến chữ ký số, hạ tầng khóa công khai PKI,… của các tổ chức quốc tế như NIST, NARA, ETSI,…. Trong đó có: PKCS (Tiêu chuẩn mật mã khóa công khai - Public-Key Cryptography Standard) - do Phòng thí nghiệm RSA (Mỹ) ban hành - là một tập hợp các tiêu chuẩn để hoàn thiện hệ mật mã khóa công khai, được phát triển vào năm 1991. Nó được soạn bởi cơ quan bảo mật dữ liệu RSA, cùng hợp tác với liên hiệp các công ty kỹ thuật máy tính bao gồm Apple, Microsoft, DEC Lotus, Sun, và MIT.
PKCS đã được trích dẫn bởi OIW (OSI Implementor’s Workshop) như là một phương pháp để hoàn thiện các tiêu chuẩn OSI. Nó tương thích với PEM (Privacy Enhanced Mail) nhưng mở rộng ngoài PEM. Chẳng hạn nơi nào PEM chỉ có thể xử lý dữ liệu ASCII thì PKCS có thể xử lý dữ liệu nhị phân tốt tương đương. Ngoài ra PKCS cũng tương thích với tiêu chuẩn X.509 của CCITT.
Các tiêu chuẩn PKCS bao gồm: mã hóa RSA, đồng ý khóa Diffie – Hellman, mã hóa dựa trên mật khẩu (password), cấu trúc chứng thực mở rộng. PKCS bao gồm cả việc đặc tả giải thuật lẫn các tiêu chí chuẩn hoàn thiện độc lập giải thuật. Các giải thuật đặc tả đã hỗ trợ bao gồm: RSA, DES, và sự trao đổi khóa Diffie-Hellman. Nó cũng xác định cấu trúc cho chữ ký số, bì thư số (cho việc mã hóa) và sự chứng thực độc lập với giải thuật. Điều này cho phép một người nào đó hoàn thiện bất kỳ giải thuật mật mã sao cho phù hợp với cấu trúc tiêu chuẩn.
Trong đó, PKCS #1 là một trong những tiêu chuẩn được sử dụng nhiều nhất (thực tế) cho việc sử dụng RSA trong thế giới thực.
Đó là lý do chính đáng: PKCS #1 được cho là tốt, linh hoạt, dễ hiểu, đã tương đối ổn định trong hơn hai thập kỷ và thực tế vẫn an toàn ở dạng ban đầu, trái với một số cách sử dụng RSA được tiêu chuẩn hóa khác (như ISO/IEC 9796-1 lược đồ chữ ký, đã bị rút vì thiếu bảo mật trong cuộc tấn công tin nhắn đã chọn và lược đồ đầu tiên trong ISO/IEC 9796-2). Một nâng cấp lớn cho PKCS # 1, từ phiên bản 1.0 đến phiên bản 2.0, khoảng năm 1998, là giới thiệu các chế độ bổ sung với đối số bảo mật mạnh hơn và RSA đa nguyên tố.
Phiên bản 2.2 cập nhật danh sách các thuật toán băm được phép để căn chỉnh chúng với QUAN 180-4 , do đó thêm SHA-224,SHA-512/224 và SHA-512/256.
Những thay đổi đáng kể sau đây đã được thực hiện: Định danh đối tượng chosha224WithRSAEncoding, sha512-224WithRSAEncoding và sha512-256WithRSAEncoding đã được thêm vào; Phiên bản này tiếp tục hỗ trợ các chương trình trong phiên bản 2.1.
Các lược đồ được chỉ định trong tài liệu này bị giới hạn về phạm vi trong đó các hoạt động của chúng chỉ bao gồm các bước để xử lý dữ liệu bằng khóa công khai hoặc khóa riêng RSA và chúng không bao gồm các bước để lấy hoặc xác thực khóa. Do đó, ngoài các hoạt động của lược đồ, một ứng dụng thường sẽ bao gồm các hoạt động quản lý khóa mà theo đó các bên có thể chọn khóa công khai và khóa riêng cho hoạt động của chương trình.
Như trường hợp của các mã hóa nguyên thủy, các thông số kỹ thuật của các hoạt động chương trình giả định rằng các điều kiện nhất định được đáp ứng bởi các đầu vào, đặc biệt là các khóa công khai và khóa riêng của RSA là hợp lệ. Do đó, hành vi của việc triển khai là không xác định khi khóa không hợp lệ. Tác động của hành vi không xác định như vậy phụ thuộc vào ứng dụng. Các phương tiện có thể giải quyết xác thực khóa bao gồm xác nhận khóa rõ ràng của ứng dụng; xác nhận khóa trong cơ sở hạ tầng khóa công khai; và chuyển nhượng trách nhiệm pháp lý cho các hoạt động được thực hiện với khóa không hợp lệ cho bên đã tạo khóa.
Một cách thực hành mã hóa nói chung tốt là sử dụng một cặp khóa RSA nhất định chỉ trong một sơ đồ. Điều này tránh rủi ro rằng lỗ hổng trong một chương trình có thể làm tổn hại đến bảo mật của chương trình kia và có thể là điều cần thiết để duy trì bảo mật có thể chứng minh được. Trong khi RSAES-PKCS1-v1.5 (Phần 7.2) và RSASSA-PKCS1-v1_5 (Phần 8.2) theo truyền thống được sử dụng cùng nhau mà không có bất kỳ tương tác xấu nào được biết đến (thực sự, đây là mô hình được giới thiệu bởi PKCS # 1 v1.5), như vậy sử dụng kết hợp cặp khóa RSA KHÔNG ĐƯỢC KHUYẾN NGHỊ cho các ứng dụng mới.
II. Đặc điểm PKCS #1 v2.2
PKCS # 1 đã được cập nhật từ phiên bản 2.1 đến phiên bản 2.2 vào tháng 10 năm 2012 và được xuất bản vào tháng 2 năm 2013. Các thay đổi bao gồm:
- kết hợp erratas (cập nhật lần cuối năm 2005) lên PKCS # 1 v2.1 (cập nhật lần cuối năm 2002);
- băm bổ sung của gia đình SHA-2 , bao gồm SHA-512/256, SHA-224 và SHA-512/224;
- định danh thuật toán tương ứng;
- hằng số hex thử nghiệm tương ứng;
- tính khả dụng chỉ ở định dạng PDF với quyền sao chép bị vô hiệu hóa;
- cập nhật hợp pháp trên văn bản (vẫn còn giá trị nếu được thực hiện theo nghĩa đen, vì nó thuộc dạng "cho phép sao chép được cấp nếu" theo sau là một điều kiện sai độc lập với những gì máy photocopy làm);
- trong Mô-đun ASN: PKCS#1 đã được đổi thành PKCS#1 v2.2 và pkcs#1được đổi thành pkcs#1v2-2; trong phần IMPORTS (..) FROM NIST-SHA2 , modules(0) sha2(1) đã được đổi thành hashAlgs(2).
Phương pháp mã hóa
RSA là phương pháp mã hóa xác định (không có thành phần ngẫu nhiên) nên kẻ tấn công có thể thực hiện tấn công lựa chọn bản rõ bằng cách tạo ra một bảng tra giữa bản rõ và bản mã. Khi gặp một bản mã, kẻ tấn công sử dụng bảng tra để tìm ra bản rõ tương ứng.
Trên thực tế, ta thường gặp 2 vấn đề đầu khi gửi các bản tin ASCII ngắn với m là nhóm vài ký tự ASCII. Một đoạn tin chỉ có 1 ký tự NULL sẽ được gán giá trị m = 0 và cho ra bản mã là 0 bất kể giá trị của e và N. Tương tự, một ký tự ASCII khác, SOH, có giá trị 1 sẽ luôn cho ra bản mã là 1. Với các hệ thống dùng giá trị e nhỏ thì tất cả ký tự ASCII đều cho kết quả mã hóa không an toàn vì giá trị lớn nhất của m chỉ là 255 và (2553) nhỏ hơn giá trị n chấp nhận được. Những bản mã này sẽ dễ dàng bị phá mã.
Để tránh gặp phải những vấn đề trên, RSA trên thực tế thường bao gồm một hình thức chuyển đổi ngẫu nhiên hóa m trước khi mã hóa. Quá trình chuyển đổi này phải đảm bảo rằng m không rơi vào các giá trị không an toàn. Sau khi chuyển đổi, mỗi bản rõ khi mã hóa sẽ cho ra một trong số khả năng trong tập hợp bản mã.
Điều này làm giảm tính khả thi của phương pháp tấn công lựa chọn bản rõ (một bản rõ sẽ có thể tương ứng với nhiều bản mã tuỳ thuộc vào cách chuyển đổi). Một số tiêu chuẩn, chẳng hạn như PKCS, đã được thiết kế để chuyển đổi bản rõ trước khi mã hóa bằng RSA. Các phương pháp chuyển đổi này bổ sung thêm bít vào M. Các phương pháp chuyển đổi cần được thiết kế cẩn thận để tránh những dạng tấn công phức tạp tận dụng khả năng biết trước được cấu trúc của bản rõ.
Phiên bản ban đầu của PKCS dùng một phương pháp đặc ứng (ad-hoc) mà về sau được biết là không an toàn trước tấn công lựa chọn bản rõ thích ứng (adaptive chosen ciphertext attack). Các phương pháp chuyển đổi hiện đại sử dụng các kỹ thuật như chuyển đổi mã hóa bất đối xứng tối ưu (Optimal Asymmetric Encryption Padding - OAEP) để chống lại tấn công dạng này. Tiêu chuẩn PKCS còn được bổ sung các tính năng khác để đảm bảo an toàn cho chữ ký RSA (Probabilistic Signature Scheme for RSA - RSA-PSS).
Đối với mục đích của RFC 8017, sơ đồ mã hóa bao gồm hoạt động mã hóa và hoạt động giải mã, trong đó hoạt động mã hóa tạo ra một bản mã từ tin nhắn có khóa công khai RSA của người nhận và hoạt động giải mã phục hồi tin nhắn từ bản mã với người nhận khóa riêng RSA tương ứng.
Một sơ đồ mã hóa có thể được sử dụng trong nhiều ứng dụng. Một ứng dụng điển hình là một giao thức thiết lập khóa, trong đó thông điệp chứa tài liệu chính được gửi một cách ngẫu nhiên từ bên này sang bên khác. Chẳng hạn, PKCS # 7 [RFC2315] sử dụng một giao thức như vậy để phân phối khóa mã hóa nội dung từ người gửi đến người nhận; các lược đồ mã hóa được định nghĩa ở đây sẽ là các thuật toán mã hóa khóa phù hợp trong bối cảnh đó.
Các lược đồ mã hóa được đưa ra, tuân theo một mô hình chung tương tự như mô hình được sử dụng trong IEEE 1363, kết hợp các nguyên hàm mã hóa và giải mã với một phương thức mã hóa để mã hóa. Các hoạt động mã hóa áp dụng một hoạt động mã hóa tin nhắn cho một tin nhắn để tạo ra một tin nhắn được mã hóa, sau đó được chuyển đổi thành một đại diện tin nhắn số nguyên. Một gốc mã hóa được áp dụng cho đại diện thông báo để tạo ra bản mã. Đảo ngược điều này, các hoạt động giải mã áp dụng một nguyên hàm giải mã cho bản mã để phục hồi một đại diện thông báo, sau đó được chuyển đổi thành một tin nhắn được mã hóa chuỗi octet. Một hoạt động giải mã tin nhắn được áp dụng cho tin nhắn được mã hóa để khôi phục tin nhắn và xác minh tính chính xác của việc giải mã.
Hai sơ đồ mã hóa được đưa ra trong bài viết này: RSAES-OAEP và RSAES-PKCS#1. RSAES-OAEP BẮT BUỘC phải được hỗ trợ cho các ứng dụng mới; RSAES-PKCS#1 chỉ được bao gồm để tương thích với các ứng dụng hiện có.
RSAES-OAEP
RSAES-OAEP kết hợp các nguyên hàm RSAEP và RSADP với phương pháp mã hóa EME-OAEP. EME-OAEP dựa trên sơ đồ mã hóa bất đối xứng tối ưu của Bellare và Rogaway [OAEP].
Nó tương thích với Lược đồ mã hóa hệ số nguyên (IFES) được xác định trong IEEE 1363, trong đó các nguyên hàm mã hóa và giải mã là IFEP-RSA và IFDP-RSA và phương thức mã hóa tin nhắn là EME-OAEP. RSAES-OAEP có thể hoạt động trên các thông báo có độ dài lên tới k - 2hLen -2 octet, trong đó hLen là độ dài của đầu ra từ hàm băm cơ bản và k là độ dài tính bằng octet của mô đun RSA của người nhận.
Giả sử rằng tính toán gốc rễ modulo “n” là không khả thi và chức năng tạo mặt nạ trong RSAES-OAEP có các thuộc tính phù hợp, RSAES-OAEP an toàn về mặt ngữ nghĩa đối với các cuộc tấn công mã hóa được lựa chọn thích nghi. Sự đảm bảo này có thể chứng minh được theo nghĩa là khó khăn trong việc phá vỡ RSAES-OAEP có thể liên quan trực tiếp đến khó khăn trong việc đảo ngược chức năng RSA, với điều kiện là chức năng tạo mặt nạ được xem như một hộp đen hoặc ngẫu nhiên. Cả hoạt động mã hóa và giải mã của RSAES-OAEP đều lấy giá trị của nhãn L làm đầu vào. Trong phiên bản PKCS # 1 này, L là chuỗi rỗng.
RSAES-OAEP được tham số hóa bằng cách chọn hàm băm và hàm tạo mặt nạ. Lựa chọn này phải được sửa cho một khóa RSA nhất định.
RSAES-PKCS#1
RSAES-PKCS#1 kết hợp các nguyên hàm RSAEP và RSADP với phương thức mã hóa EME-PKCS#1. Nó tương đương về mặt toán học với sơ đồ mã hóa trong PKCS#1. RSAES-PKCS#1có thể hoạt động trên các thông điệp có độ dài lên tới k-11 octet (k là độ dài octet của mô đun RSA), mặc dù cần thận trọng để tránh các cuộc tấn công nhất định vào RSA có số mũ thấp do Coppersmith, Franklin, Patarin và Reiter khi các tin nhắn dài được mã hóa;
Theo nguyên tắc chung, việc sử dụng lược đồ này để mã hóa một thông điệp tùy ý, trái ngược với khóa được tạo ngẫu nhiên, KHÔNG ĐƯỢC KHUYẾN NGHỊ. Có thể tạo ra các bản mã RSAES-PKCS#1 hợp lệ mà không cần biết các bản rõ tương ứng, với xác suất thành công mức chấp nhận. Gần đây, người ta đã chứng minh rằng tính bảo mật của giao thức bắt tay SSL/TLS [RFC5246], sử dụng RSAES-PKCS#1 và các biện pháp đối phó nhất định, có thể liên quan đến một biến thể của RSA.
Bài viết này đã trình bày tổng quan về PKCS#1 trong mã hóa và giải mã bằng RSA. Tiêu chuẩn này được hỗ trợ trong tất cả các chuẩn mật mã RSA từ phiên bản 1.5 cho đến phiên bản mới nhất hiện nay là 2.2. Qua các phiên bản khác nhau của chuẩn mật mã RSA, đã có những sự điều chỉnh nhất định trong lược đồ PKCS #1. Tuy nhiên, lý do của những điều chỉnh này chưa được làm rõ, không thấy được nhắc đến trong chính chuẩn mật mã RSA và trong các RFC tương ứng.
III. Ứng dụng
Tiêu chuẩn PKCS#1 được ứng dụng rộng rãi trong nhiều lĩnh vực như chữ ký số, thương mại điện tử, bảo mật, xác thực… Trong Thông tư số 39/2017/TT-BTTTT ngày 15/12/2017 của Bộ trưởng Bộ Thông tin và Truyền thông Công bố Danh mục tiêu chuẩn kỹ thuật về ứng dụng công nghệ thông tin trong cơ quan nhà nước quy định Khuyến nghị áp dụng tiêu chuẩn PKCS#1 v2.2, là một trong những giải thuật mã hóa và được xếp vào nhóm Tiêu chuẩn về an toàn thông tin.
Tài liệu tham khảo
- https://tools.ietf.org/html/rfc8017#section-7.1.1
- https://www.emc.com/collateral/white-papers/h11300-pkcs-1v2-2-rsa-cryptography-standard-wp.pdf
Nguyễn Thị Thu Trang