I. Giới thiệu
Thuật toán RSA được Ron Rivest, Adi Shamir và Len Adleman mô tả lần đầu tiên vào năm 1977 tại Học viện Công nghệ Massachusetts (MIT). Tên của thuật toán lấy từ 3 chữ cái đầu của tên 3 tác giả. Đây là thuật toán đầu tiên phù hợp với việc tạo ra chữ ký điện tử đồng thời với việc mã hóa. Nó đánh dấu một sự tiến bộ vượt bậc của lĩnh vực mật mã học trong việc sử dụng khóa công cộng. RSA đang được sử dụng phổ biến trong thương mại điện tử và được cho là đảm bảo an toàn với điều kiện độ dài khóa đủ lớn. Thuật toán RSA được MIT đăng ký bằng ang chế tại Hoa Kỳ vào năm 1983 (Số đăng ký 4,405,829). Bằng ang chế này hết hạn vào ngày 21 tháng 9 năm 2000. Tuy nhiên, do thuật toán đã được công bố trước khi có đăng ký bảo hộ nên sự bảo hộ hầu như không có giá trị bên ngoài Hoa Kỳ. Ngoài ra, nếu như công trình của Clifford Cocks đã được công bố trước đó thì bằng ang chế RSA đã không thể được đăng ký. Thuật toán dựa trên độ khó của bài toán phân tích một số thành nhân tử.
Thuật toán vận chuyển khóa RSA-KEM là một cơ chế một chiều (lưu trữ và chuyển tiếp) để vận chuyển dữ liệu khóa đến người nhận bằng khóa chung RSA của người nhận. (“KEM” là viết tắt của “cơ chế đóng gói khóa”). Thuật toán vận chuyển khóa RSA-KEM dưới nhiều hình thức khác nhau đang được áp dụng trong một số tiêu chuẩn dự thảo cũng như trong Tiêu chuẩn quốc gia Mỹ (ANS) X9.44 [ANS-X9.44]. Nó cũng đã được đề xuất bởi các Đề án mới về Chữ ký, Tính toàn vẹn và Mã hóa (NESSIE) của Châu Âu [NESSIE].
RSA-KEM là một cơ chế đóng gói khóa phổ biến kết hợp hoán vị bẫy bẫy RSA với chức năng phái sinh chính (KDF). Thông thường các chi tiết của KDF được xem là trực giao với cấu trúc RSA-KEM và bằng chứng RSA-KEM về mô hình bảo mật của KDF như một lời tiên tri ngẫu nhiên. Trong bài báo này, chúng tôi trình bày một KDF dựa trên AES đã được thiết kế rõ ang để chúng tôi có thể thu hút các quan điểm hiện tại về hành vi lý tưởng của AES khi chứng minh tính bảo mật của RSA-KEM. Do đó, giả sử rằng mã hóa với AES cung cấp hoán vị các khối đầu vào 128 bit được chọn ngẫu nhiên cho mỗi khóa k, tính bảo mật của RSA-KEM đối với các cuộc tấn công mã hóa được chọn có thể liên quan đến độ cứng của đảo ngược RSA.
II. Đặc điểm của Thuật toán chữ ký số dựa trên đường cong Elliptic
Mật mã lai ghép tổng quát
Khi thiết kế mật mã phi đối xứng hiệu quả, một cách tiếp cận hữu ích là thiết kế mật mã lai ghép, ở đó có thể sử dụng kỹ thuật mật mã phi đối xứng để mã hóa khóa bí mật, khóa bí mật này sau đó được sử dụng để mã thông báo, sử dụng kỹ thuật mật mã đối xứng. Điều này mô tả một dạng mật mã lai đặc biệt, được gọi là mật mã lai ghép tổng quát. Mật mã lai ghép tổng quát được xây dựng từ hai “khối kiến tạo” mức thấp hơn: cơ chế bọc khóa và cơ chế bọc dữ liệu.
* Cơ chế bọc khóa
Các cơ chế đóng gói khóa (KEM) là một lớp các kỹ thuật mã hóa được thiết kế để bảo mật vật liệu khóa mật mã đối xứng để truyền bằng thuật toán không đối xứng (khóa công khai). Trong thực tế, các hệ thống khóa công khai là vụng về để sử dụng trong việc truyền các tin nhắn dài. Thay vào đó, chúng thường được sử dụng để trao đổi các khóa đối xứng, tương đối ngắn. Khóa đối xứng sau đó được sử dụng để mã hóa tin nhắn dài hơn.
Cách tiếp cận truyền thống để gửi khóa đối xứng với các hệ thống khóa chung là trước tiên tạo một khóa đối xứng ngẫu nhiên và sau đó mã hóa nó bằng thuật toán khóa chung đã chọn. Người nhận sau đó giải mã thông điệp khóa chung để khôi phục khóa đối xứng. Vì khóa đối xứng thường ngắn, nên việc đệm được yêu cầu để bảo mật hoàn toàn và bằng chứng bảo mật cho các sơ đồ đệm thường không đầy đủ. KEM đơn giản hóa quy trình bằng cách tạo một phần tử ngẫu nhiên trong nhóm hữu hạn bên dưới hệ thống khóa chung và lấy khóa đối xứng bằng cách băm phần tử đó, loại bỏ nhu cầu đệm.
Cơ chế bọc khóa KEM bao gồm ba thuật toán:
- Thuật toán tạo khóa KEM.KeyGen(), với đầu ra là cặp khóa công khai/khóa riêng (PK,pk). Cấu trúc củaPK và pk phụ thuộc vào lược đồ cụ thể.
- Thuật toán mã hóa KEM.Encrypt(PK,opt), nhận đầu vào là khóa công khai PK và tùy chọn mật mã opt, đầu ra là cặp khóa mật/bản mã (K, C0). K và C0 là các xâu bộ tám.
- Thuật toán giải mã KEM.Decrypt (pk,C0) với đầu vào là khóa riêng pk và bản mã C0, đầu ra là khóa bí mật K, K và C0 là các xâu bộ tám.
Cơ chế bọc khóa cũng xác định một số nguyên dương KEM.KeyLen - độ dài khóa bí mật là đầu ra củaKEM.Encrypt và KEM.Decrypt. Cơ chế bọc khóa cần thỏa mãn tính đúng đắn, tương tự tính đúng đắn của mật mã phi đối xứng: với bất kỳ cặp khóa công khai/khóa riêng (PK,pk), bất kỳ đầu ra (K, C0) của thuật toán mã hóa với đầu vào (PK,opt), bản mã C0 có thể được giải mã nhờ pk để thu được K. Yêu cầu này có thể được giảm nhẹ, bởi vậy nói chung chỉ nó chỉ giữ một phần không đáng kể cặp khóa công khai/bí mật.
Ngoài ra, cơ chế bọc khóa còn phải thỏa mãn tính chất sau đây. Tập hợp tất cả các đầu ra - các bản mã có thể - của thuật toán mã hóa là tập con của tập ứng cử viên các xâu bộ tám (có thể phụ thuộc vào khóa công khai), sao cho tập ứng cử viên này là phi tiền tố và các phần tử của tập này dễ dàng được nhận dạng (hoặc cho trước khóa công khai hoặc khóa riêng).
Các cơ chế bọc khóa được phép là: ECIES – KEM; PSEC – KEM; ACE - KEM và RSA – KEM. Để thuận tiện, các mật mã lai ghép tổng quát tương ứng được xây dựng từ các cơ chế bọc khóa trên thông qua cấu trúc lai.
Nói một cách khác, cơ chế bọc khóa làm việc tương tự như mật mã phi đối xứng, ngoại trừ một điều là thuật toán mã hóa không nhận đầu vào nào khác ngoài khóa công khai của người nhận: thay vì nhận đầu vào là thông báo và tạo ra bản mã, thuật toán mã hóa tạo ra cặp khóa bí mật/bản mã (K, C0), ở đây K là xâu bộ tám có độ dài xác định và C0 là mã hóa của K, như vậy thuật toán giải mã áp dụng vào C0 và đưa ra K.
Luôn luôn có thể sử dụng mật mã phi đối xứng (với độ dài bản rõ cố định hay độ dài bản rõ bị giới hạn) để tạo ra xâu bộ tám ngẫu nhiên K và sau đó mã hóa nó bằng khóa công khai của người nhận (và tùy chọn nào đó để thu được C0). Tuy nhiên, cũng có thể thiết kế cơ chế bọc khóa theo cách khác hiệu quả hơn.
RSAES là họ các mã phi đối xứng với độ dài bản rõ bị hạn chế, được tham số hóa bởi các tham số hệ thống sau:
- RSAKeyGen: Thuật toán tạo khóa RSA
- REM: cơ chế mã hóa RSA
Bất kỳ một tổ hợp các tham số hệ thống nào cũng được phép với các hạn chế sau:
- Độ dài tính bằng octet của đầu ra n của RSAKeyGen() phải luôn luôn lớn hơn REM.Bound.
* Tạo khóa
Thuật toán RSAES.KeyGen không có đầu vào, chạy như sau:
a) Tính (n, e,d) = RSAKeyGen().
b) Khóa công khai đầu ra PK:
- n: số nguyên dương.
- e: số nguyên dương.
c) Đưa ra khóa riêng pk:
- n: số nguyên đương.
- d: số nguyên dương.
RSAES là mật mã phi đối xứng với độ dài bản rõ bị hạn chế. Đối với khóa công khai cho trước PK = (n, e), giá trị của RSAES.MaxMsgLen(PK) là (n) – REM. Bound.
* Mã hóa:
Thuật toán RSAES.Encrypt nhận đầu vào;
- Khóa công khai, gồm số nguyên dương n và số nguyên dương e,
- Nhãn L,
- Bản rõ M với độ dài lớn nhất (n) – REM.Bound, và
- Không có tùy chọn mật mã.
Thuật toán chạy như sau:
a) Đặt E = REM.Encode(M, L, (n)).
b) Đặt C = RSATransform(E, e, n).
c) Đưa ra C.
* Giải mã:
Thuật toán RSAES.Decrypt nhận đầu vào:
- Khóa riêng, gồm số nguyên dương n và số nguyên dương e,
- Nhãn L, và
- Bản mã C.
Thuật toán chạy như sau:
a) Đặt E = RSATransform (C,d,n); chú ý rằng bước này cũng có thể thất bại.
b) Đặt M = REM. Decode(E,L); chú ý rằng bước này cũng có thể thất bại.
c) Đưa ra M.
RSA-KEM
RSA – KEM là họ các cơ chế bọc khóa, được tham số hóa bởi các tham số hệ thống sau đây:
- RSAKeyGen: Thuật toán tạo khóa RSA
- KDF: hàm dẫn xuất khóa
- KeyLen: số nguyên dương.
Giá trị của RSA – KEM.KeyLen được xác định bằng giá trị của tham số hệ thống Keylen.
* Tạo khóa:
Thuật toán RSA – KEM.KeyGen không có đầu vào, chạy như sau:
a) Tính (n,e,d) = RSAKeyGen().
b) Đưa ra khóa công khai PK:
- n: số nguyên dương.
- e: số nguyên dương.
c) Đưa ra khóa riêng pk:
- n: số nguyên dương.
- d: số nguyên dương.
* Mã hóa:
Thuật toán mã hóa RSA – KEM.Encrypt nhận đầu vào là:
- Khóa công khai, bao gồm các số nguyên dương n và e, và
- Không có tùy chọn mật mã.
Thuật toán chạy như sau:
a) Tạo số ngẫu nhiên r Î [0..n).
b) Đặt R = I2OSP(r, (n)).
c) Đặt C0 = RSATransform(R, e,n).
d) Tính K = KDF(R,KeyLen).
e) Đưa ra là bản rõ C0 và khóa bí mật K.
* Giải mã:
Thuật toán RSA – KEM.Decrypt nhận đầu vào:
- Khóa mật gồm các số nguyên dương n và d
- Bản mã C0.
Thuật toán chạy như sau:
a) Đặt R = RSATransform(C0, d, n); chú ý rằng bước này cũng có thể thất bại.
b) Tính K = KDF(R, KeyLen).
c) Đầu ra là khóa bí mật K.
Tính an toàn của RSA-KEM
Có thể chứng minh tính an toàn của lược đồ này theo mô hình dự đoán ngẫu nhiên, nơi các tham số hệ thống KDF được mô hình hóa dưới dạng dự đoán ngẫu nhiên và giả thiết bài toán ngược RSA là bài toán khó.
Cụ thể hơn, với bất kỳ thuật toán tạo khóa RSAKeyGen, sao cho đầu ra (n,e,d) luôn luôn thỏa mãn điều kiện n ≥ nBound, và với mỗi kẻ tấn công A, RSA – KEM[t,q] ta có:
AdvRSA-KEM (A) ≤ AdvRSAKeyGen (A’) + q/nBound.
ở đây,
- A’ là kẻ tấn công RSAKeyGen[t’] với t’ ≈ t.
Bất đẳng thức này không tính đến khả năng của biến cố RSAKeyGen tạo ra khóa RSA “tồi” với xác suất khác không. Trong trường hợp này, đơn giản là cần bổ sung xác suất này (giả thiết là không đáng kể) vào vế phải của bất đẳng thức trên. Ngoài ra, trong mô hình đa bản rõ được định nghĩa, tính an toàn của RSA-KEM nói chung không suy giảm do tính tự quy dẫn ngẫu nhiên của bài toán ngược RSA.
III. Ứng dụng
Trong thực tế, với những lợi thế về mặt bảo mật, an toàn, dễ triển khai trên hệ thống mạng không an toàn, chứng thực số được ứng dụng rất nhiều, cụ thể là trong việc mã hóa, chống giả mạo, xác thực, chống chối bỏ nguồn gốc, bảo mật phần mềm, bảo mật website. RSA-KEM được thiết kế như một cơ chế đóng gói khóa thuần túy và phù hợp hơn với khung công tác mã hóa lai. 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 Bắt buộc áp dụng tiêu chuẩn RSA-KEM (Rivest-Shamir-Adleman – KEM (Key Encapsulation Mechanism) Key Transport Algorithm) 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
1. Use of the RSA-KEM Key Transport Algorithm in the Cryptographic Message Syntax (CMS) https://tools.ietf.org/html/rfc5990.
2. Tiêu chuẩn quốc gia TCVN 11367-2:2016 ISO/IEC 18033-2:2006 Công nghệ thông tin – Các kỹ thuật an toàn – Thuật toán mã hóa – Phần 2: Mật mã phi đối xứng.
Nguyễn Thị Thu Trang