CHƯƠNG VII Phân tích sâu về phương thức bảo mật của 1Password và Keepass
7.1.2. Đi sâu về các Khóa và cách user truy cập vào vault
Việc sử dụng các thuật toán mã hóa mạnh tới đâu cũng không quan trọng nếu như các khóa được sử dụng để mã hóa không đủ mạnh. Trong phần dưỡi đây sẽ nói rõ hơn về cách các khóa được dẫn xuất, tạo ra, và xử lý.
● Tạo khóa
Các khóa được tạo ở phía Client ra nhờ sử dụng Cryptographically Secure Pseudo-Random Number Generators (CSPRNGS) - Dữ liệu giả ngẫu nhiên đủ an toàn.
Cặp khóa công khai/bí mật được tạo ra bằng việc sử dụng WebCrypto (cung cấp các tính năng mã hóa/giải mã đủ an toàn ngay trên trình duyệt) để tạo khóa như một RSA-OAEP được đệm vào trong việc tạo khóa với thuật toán RSA với độ dài modun là 2048 bit và có số mũ là 65537.
[RSAES-OAEP = RSA mã hóa lược đồ - Padding tối ưu mã hóa không đối xứng] Về phần Secret Key thì được tạo ra ngẫu nhiên bên phía Client. Lược đồ tạo mật khẩu sẽ đảm bảo các kí tự được chọn hoàn toàn biệt lập và có xác suất giống các Secret Key khác là rất thấp. Các ký tự trong Secret Key được tạo ra trong tập sau {2-9, A-H, J- N, P-T, V-Z}.
[Trong tương lai thì 1Password sẽ sử dụng thuật toán sinh chữ ký số dựa trên đường cong Eliptic (Elliptic Curve Digital Signature Algorithm)]
● Dẫn xuất khóa
Dẫn xuất cặp khóa từ 2 dữ kiện mật
1Password sử dụng 2-SKD để tránh cho Master Password của người dùng có thể bị bẻ khóa bởi tấn công brute-force.
Một khóa sử dụng cho việc giải mã dữ liệu còn cái còn lại sử dụng cho việc xác thực. Cái khóa dùng cho việc giải mã mật khẩu thật được gọi là MUK - Master Unlock
Key (thực tế nó chính là khóa bí mật - private key) và khóa còn lại được sử dụng để xác
thực kết nối tới cloud servers sử dụng giao thức Secure Remote Password được gọi là
SRP-x.
Quá trình dẫn xuất 2 khóa này là như nhau nhưng chúng chứa các salts khác nhau trong hàm dẫn xuất khóa.
Tóm lại, trong hàm dẫn xuất khóa thì 2 dữ kiện mật được dùng để dẫn xuất khóa là Master Password và Secret Key. Còn các dữ kiện công khai là salts, thuật toán và email người dùng.
Hàm dẫn xuất khóa hoạt động theo 3 bước sau: 1. Tạo salt
2. Dẫn xuất khóa từ Master Password 3. Trộn vào trong Secret Key
Salt được tạo ngẫu nhiên khi tạo tài khoản, nó được lưu trữ trên Server ( và được tải về phí Client). Tuy nhiên thì nó chưa được sử dụng ngay. Đầu tiên chúng được gắn vào email của người dùng và ràng buộc khóa cuối cùng (final key) với email của người dùng.
Ràng buộc trên sử dụng hàm dẫn xuất khóa HMAC-HKDF. HKDF có 3 tham số chính đó là key, salt và info. Trong đó, key chính là salt đã được lưu, trong khi salt chính là email của người dùng. Info là PBES2g-HS256 (là một thuật toán đặc biệt được sử dụng). Bất cứ sự thay đổi nào trong 3 tham số này đều ảnh hưởng tới salt và khóa được tạo ra sau đó.
[HKDF là hàm dẫn xuất khóa đơn giản dựa trên Mã xác thực thông điệp băm -HMAC(Trong mật mã học, HMAC là một loại Xác thực thông điệp dựa trên hàm băm bao gồm 1 hàm băm và 1 khóa bí mật, giống với MAC dùng để kiểm tra đồng thời tính toàn vẹn và xác thực của thông điệp )]
Salt của password được dẫn xuất bởi HKDF sau đó được sử dụng như salt cho hàm PBKDF2 để chuyển đổi mật khẩu người dùng sang khóa 256-bit. Hàm này sẽ được gọi đi gọi lại trong 100,000 lần, nhưng số lần lặp này không được mã hóa cứng trong hệ thống, và có thể thay đổi khi tăng tốc độ tính toán lên.
[PBKDF2 là một thuật toán được sử dụng để tạo ra các khóa. Khóa kết quả được tạo ra (HMAC) có thể được dùng để lưu trữ mật khẩu một cách an toàn.]
Một khi mật khẩu được chuyển sang khóa, chúng ta sẽ trộn chúng với Secret Key. Key có cùng sẽ có dạng như sau:
Sơ đồ cách MUK được tạo ra
MUK sau đó được sử dụng để truy cập vào kho mật khẩu của bạn.
Tất cả các thành phần của quá trình trên được gọi từ rất nhiều nơi. Như email thì được để trong bảng accounts, trong khi đó salt, thuật toán hay các vòng lặp được đặt từ đầu vào đầu tiên trong bảng các tập khóa, còn key được lưu trữ trong hệ thống của người dùng. Tất nhiên, Master Password được nhập bởi chính người dùng và nó năm duy nhất trong đầu người đó.
Đối với khóa xác thực SRP-X cũng sử dụng tương tự quá trình như trên, có một thay đổi nhỏ là nó sẽ sử dụng salt khác và một thuật toán khác có tên là SRPg-4096.
Tổng thể quá trình của toàn bộ quá trình dẫn xuất khóa như sau:
[Đây chỉ là “bề nổi của tảng băng chìm” của việc giải mã mật khẩu truy cập vào kho dữ liệu của người dùng sử dụng trên 1 Master Password mà thôi. Vì kho lưu trữ gọi
được sử dụng để mã hóa 1 hay nhiều Vaults. Nếu Client được kết nối nhiều hơn 1 tài khoản thì các tập khóa mới sẽ được tạo cho tất cả các tài khoản đó. ]