HÀM DẪN XUẤT KHÓA
Khóa là một tham số đặc biệt quan trọng trong các hệ thống mật mã. Viện tiêu chuẩn và Công nghệ quốc gia Hoa Kì (NIST) đã đưa ra định nghĩa về khóa [1], đó là “Một tham số được sử dụng với thuật toán mật mã mà xác định hoạt động của nó theo cách mà một thực thể biết khóa có thể tái tạo hoặc đảo ngược hoạt động, trong khi đối với thực thể không biết khóa thì không thể”. Khóa cần phải được giữ bí mật và đáp ứng các yêu cầu an toàn về kích thước, độ ngẫu nhiên, phân bố đều,…để đảm bảo kẻ tấn công không thể tìm ra.
Người dùng hệ thống thường sử dụng mật khẩu dễ nhớ, không đủ dài và không đảm bảo tính ngẫu nhiên nên cần sử dụng các KDF [2] để tạo ra các mật khẩu mới thỏa mãn các yêu cầu của khóa mật mã. Trong bài báo này, chúng tôi sẽ giới thiệu một số tiêu chuẩn trong nước và quốc tế sử dụng các KDF giúp người dùng có thể tham chiếu để lựa chọn phù hợp cho mục đích sử dụng của mình.
Mục tiêu của các KDF là từ đầu vào chưa đủ ngẫu nhiên tạo ra khóa mật mã mạnh, tức là các khóa giả ngẫu nhiên mà không thể phân biệt được với một xâu các kí tự ngẫu nhiên phân bố đều, có độ dài được xác định bởi sức mạnh tính toán trên thực tế [2]. Ngoài ra các KDF cũng có thể được dùng để lưu trữ các mật khẩu một cách an toàn.
Hình 1 Mô hình thực hiện của KDF
Mô hình thực hiện của các KDF (Hình 1) gồm:
- Mật khẩu/khóa yếu: Là khóa đầu vào cần được giữ bí mật, KDF sẽ chuyển nó thành khóa mật mã mạnh.
- Salt/Nonce: Là dữ liệu đầu vào ngẫu nhiên bổ sung được KDF xử lí cùng với mật khẩu.
- Số lần lặp: Là số lần thực thi cần thiết để tạo ra khóa dẫn xuất, nó cũng quyết định mức độ an toàn chống lại tấn công vét cạn của KDF.
- Chiều dài khóa dẫn xuất: Đây là chiều dài của đầu ra, nó phụ thuộc vào ứng dụng cụ thể và các yêu cầu an toàn.
MỘT SỐ TIÊU CHUẨN CÁC HÀM DẪN XUẤT KHÓA
Tiêu chuẩn quốc gia TCVN 11367-2:2016
Năm 2016 Việt Nam đã đưa ra tiêu chuẩn 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ật mã – Phần 2: Mật mã phi đối xứng dựa trên bộ tiêu chuẩn ISO/IEC 18033-2:2006. TCVN 11367-2:2016 [3,4] đưa ra định nghĩa về hàm dẫn xuất khóa là một hàm KDF(x,l) nhận đầu vào là xâu bộ tám x và số nguyên l≥0, đầu ra là xâu bộ tám có độ dài l. Ngoài ra TCVN 11367-2:2016 cũng quy định về các hàm dẫn xuất khóa được phép sử dụng là KDF1 và KDF2.
KDF1 là họ các hàm dẫn xuất khóa được tham số hóa bởi hàm băm Hash. Với xâu bộ tám x và số nguyên không âm l, KDF(x,l) được xác định cho l bộ tám đầu tiên của xâu Hash.eval(x||I2OSP(0,4)||… ||Hash.eval(x|| I2OSP(k-1,4). Hàm này sẽ thất bại khi và chỉ khi k>232 hoặc khi |x|+4>Hash.MaxIputLen.
KDF2 là họ các dẫn xuất khóa được tham số bởi bàm băm Hash. Với xâu bộ tám x và số nguyên không âm l, KDF2 (x,l) được xác định như là bộ tám đầu tiên của xâu: Hash.eval (x||I2OSP(1,4)||...||Hash. eval(x||I2OSP(k,4)). Hàm này sẽ thất bại khi và chỉ khi k>232 hoặc khi |x|+4>Hash.MaxIputLen.
Thông tư số 96/2023/TT-BQP
Cuối năm 2023, Bộ Quốc Phòng đưa ra thông tư số 96/2023/TT-BQP [5] về việc ban hành “Quy chuẩn kỹ thuật quốc gia về đặc tính kỹ thuật mật mã sử dụng trong các sản phẩm mật mã dân sự thuộc nhóm sản phẩm bảo mật dữ liệu lưu giữ”. Thông tư này quy định mức giới hạn các đặc tính kĩ thuật mật mã của các sản phẩm bảo mật dữ liệu lưu giữ phục vụ bảo vệ thông tin không thuộc phạm vi bí mật nhà nước. Trong đó, thông tư đưa ra một số quy định về hai KDF được phép sử dụng, đó là PBKDF2 và Argon2. Cả hai KDF này đều có thời hạn sử dụng tới năm 2027.
NIST Special Publication 800-132
NIST Special Publication 800-132 [6] chỉ định một họ các hàm dẫn xuất khóa dựa trên mật khẩu (PBKDF) giúp tạo ra các mật khẩu mới đảm bảo an toàn từ mật khẩu dễ nhớ của người dùng. Mỗi PBKDF trong họ các hàm dẫn xuất khóa được xác định bằng cách lựa chọn một hàm giả ngẫu nhiên (Pseudorandom Function - PRF) và một số lần lặp cố định C. Đầu vào để thực thi PBKDF là một mật khẩu P, giá trị Salt S và một giá trị kLen (dài ít nhất 112 bit) biểu thị độ dài mong muốn của MK (Master Key – là chuỗi khóa đầu ra của hàm thực thi của PBKDF) dưới dạng bit.
mk= PBKDF(PRF,C)(P,S,kLen)
- Salt: Toàn bộ hoặc một phần của Salt phải được sinh ra bằng cách sử dụng một bộ sinh bit ngẫu nhiên được chấp thuận. Một phần của Salt được sinh ngẫu nhiên phải có chiều dài ít nhất 128 bit. Mục đích của Salt là để cho phép sinh một tập lớn các khóa tương ứng với mỗi mật khẩu với một số lần lặp cố định. Với một mật khẩu đã cho, số khóa có thể sinh ra xấp xỉ 2sLen trong đó sLen là độ dài bit của Salt. Do đó việc sử dụng Salt khiến cho kẻ tấn công gặp khó khăn trong việc sinh ra một bảng các khóa kết quả, thậm chí với một tập con nhỏ các mật khẩu có thể xảy ra nhất.
- Số lần lặp: Là giá trị được cố định xác định số lần PRF lặp để sinh ra một khối MK. C phải được lựa chọn càng lớn càng tốt miễn là người dùng chấp nhận được thời gian cần thiết để sinh khóa bằng mật khẩu đã nhập vào. Vì khả năng máy người dùng khác nhau nên C cũng thay đổi tương ứng. Khuyến nghị C tối thiểu là 1000, hoặc cũng có thể lên tới 10000000.
Mục đích của C là tăng lượng tính toán cần thiết để dẫn xuất ra một khóa từ mật khẩu, điều này làm tăng đáng kể khối lượng công việc của các cuộc tấn công từ điển. Sử dụng PBKDF mà yêu cầu C lần lặp để dẫn xuất ra một khóa làm tăng chi phí tính toán để thực hiện một cuộc tấn công từ điển đối với mật khẩu với t bit entropy từ 2t phép toán lên thành 〖C×2t phép toán và do đó gây khó khăn cho các cuộc tấn công từ điển và vét cạn. Tuy nhiên, lượng tính toán cần thiết để dẫn xuất ra khóa của người dùng hợp pháp cũng tăng theo số lần lặp. Người dùng có thể nhận thấy sự gia tăng này. C lớn khiến các cuộc tấn công mất nhiều chi phí hơn nhưng cũng làm giảm hiệu suất của người dùng có thẩm quyền. C nên được thiết lập ở mức cao nhất có thể chấp nhận được đối với môi trường đồng thời vẫn duy trì hiệu suất chấp nhận được.
NIST SP 800-135
NIST SP 800-135 [7] cung cấp các yêu cầu an toàn đối với các KDF cụ thể của ứng dụng hiện có. Các KDF của IKEv1 được chấp nhận khi thỏa mãn các điều kiện sau:
- Các KDF của IKEv1 được thực hiện trong phạm vi của giao thức IKEv1
- PRF là một PRF dựa trên HMAC
- HMAC và hàm băm HASH là các thuật toán được NIST chấp thuận và được dùng như chỉ định tương ứng trong FIPS 198-1 và 180-3.
IKEv2 sử dụng HMAC như bước trích xuất ngẫu nhiên của E-E KDF (trích xuất ngẫu nhiên và mở rộng khóa). Các KDF của IKEv2 mà phù hợp với SP 800-56C được chấp nhận khi sử dụng chúng với một hàm HMAC được chấp thuận bằng cách sử dụng hàm băm được chấp thuận.
Trong TLS phiên bản 1.0 và 1.1, đầu vào của HMAC-MD5/HMAC-SHA-1 PRF được gọi là premaster secret có một số giá trị không phải bí mật và đầu ra là master secret; PRF đóng vai trò là bước trích xuất ngẫu nhiên trong E-E KDF. Sau đó, master secret được nhập vào HMAC-MD5/HMAC-SHA1 PRF với các giá trị không phải bí mật khác để dẫn xuất ra khóa cho các hàm mật mã; trong trường hợp này, PRF đóng vai trò là bước mở rộng khóa trong E-E KDF.
TLS 1.0 và 1.1 sử dụng một PRF và nó hoạt động như bước trích xuất ngẫu nhiên trong E-E KDF. Các KDF của TLS 1.0 và 1.1 được chấp nhận khi thỏa mãn các điều kiện sau:
- Các KDF của TLS 1.0 và 1.1 được thực hiện trong phạm vi của giao thức TLS
- SHA-1 và HMAC như được chỉ định tương ứng trong FIPS 180-3 và 198-1
Trong TLS phiên bản 1.2, HMAC-SHA-256 PRF thay thế cho HMAC-MD5/HMAC-SHA-1 PRF ở phiên bản 1.0 và 1.1 và HMAC-SHA-256 PRF thay thế cho HMAC-MD5/HMAC-SHA1 PRF trong phiên bản 1.0 và 1.1. HMAC-SHA-256 PRF là P_SHA256. PRF này được sử dụng thay cho PRF trong TLS 1.0 và 1.1 và là (P_MD5 ⊕ P_SHA-1). Trong TLS 1.2, ngoài P_SHA256, bất kỳ P_HASH nào có hàm băm mạnh hơn, chẳng hạn như SHA-384 hoặc SHA-512 (trong FIPS 180-3), đều có thể được sử dụng làm PRF.
TLS 1.2 KDF là KDF được chấp thuận khi đáp ứng các điều kiện sau:
- TLS 1.2 KDF được thực hiện trong phạm vi của giao thức TLS.
- HMAC được chỉ định trong FIPS 198-1.
- P_HASH sử dụng SHA-256, SHA-384 hoặc SHA-512.
KẾT LUẬN
Rõ ràng tính ngẫu nhiên của các khóa mật mã là điều thực sự cần thiết đối với việc đảm bảo an toàn của các ứng dụng mật mã. Các KDF đóng vai trò thiết yếu trong việc biến các mật khẩu dễ nhớ của người dùng hoặc các khóa bí mật chưa đảm bảo an toàn thành những khóa mật mã mạnh để các khóa dẫn xuất này đáp ứng được yêu cầu cho các hệ thống mật mã khác nhau. Bài viết đã đưa ra các tiêu chuẩn của cả quốc tế và trong nước bao gồm những khuyến nghị cần thiết cho các KDF giúp người dùng có thể hiểu hơn về cơ chế thực hiện của các KDF cũng như có được sự tin cậy đối với các khóa dẫn xuất được tạo ra.
TÀI LIỆU THAM KHẢO [1]. Josh Lake, “What is a key derivation function (KDF)? A comprehensive guide”, 2023, https://www.comparitech.com/blog/information-security/key-derivation-function-kdf/. [2]. “Hàm dẫn xuất khóa - một thành phần quan trọng của mật mã ứng dụng”, Tạp chí An toàn thông tin, 2010, https://m.antoanthongtin.gov.vn/gp-mat-ma/ham-dan-xuat-khoa---motthanh-phan-quan-trong-cua-mat-ma-ung-dung-100278. [3]. TCVN 11367-2:2016 (ISO/IEC 18033-2), Tiêu chuẩn quốc gia, 2016. [4]. “Giới thiệu tiêu chuẩn TCVN 11367-2:2016”, Tạp chí An toàn thông tin, 2023 https://antoanthongtin.gov.vn/mat-ma-dansu/gioi-thieu-tieu-chuan-tcvn-11367-22016-109532 [5]. Thông tư số 96/2023/TT-BQP, Bộ Quốc Phòng, 2023. [6]. NIST Special Publication 800-132, 2010. |