Sinh khóa Mã hóa RC4 CryptoAPI

Một phần của tài liệu Thám mật khẩu các file word (Trang 53 - 54)

Khóa mã dùng cho Mã hóa Văn bản RC4 CryptoAPI phải được sinh theo kỹ thuật sau.

Cho H() là thuật toán băm được xác định bởi trường

EncryptionHeader.AlgIDHash, và dấu "+" thể hiện sự móc nối. Mật khẩu phải được cung cấp như một chuỗi các ký tự Unicode.

Giới hạn độ dài mật khẩu và các ký tự dùng cho mật khẩu phụ thuộc việc thực hiện. Trừ khi có quy định khác, thì độ dài mật khẩu tối đa phải là 255 ký tự Unicode.

Băm mật khẩu được sinh như sau: H0 = H(salt + password)

Salt phải được sinh một cách ngẫu nhiên và có kích thước 16 byte. Salt phải được lưu trong trường EncryptionVerifier.Salt. Lưu ý rằng băm không được phép lặp.

Sau khi thu được băm, khóa mã phải được sinh bằng cách dùng dữ liệu băm và số của block được cung cấp bởi ứng dụng. Thuật toán mã hóa phải được định rõ trong trường EncryptionHeader.AlgID.

Phương thức được dùng để sinh dữ liệu băm chính là đầu vào của thuật toán dò khóa như sau:

54 Hfinal = H(H0 + block)

Số của block phải là giá trị không dấu 32 bit được cung cấp bởi ứng dụng. Cho keyLength là độ dài khóa, bằng bit, được chỉ rõ bởi trường KeySize

trong Header của mã hóa CryptoAPI RC4.

Các bit keyLength đầu tiên của Hfinal phải được xem xét kỹ khóa mã đã nhận được, tối thiểu keyLength phải có độ dài chính xác là 40 bit. Băm SHA-1 có độ dài 160 bit, và độ dài khóa RC4 tối đa là 128 bit; vì vậy, keyLength phải nhỏ hơn hoặc bằng 128 bit. Nếu keyLength chính xác là 40 bit thì khóa mã phải kết hợp 40 bit đầu tiên của Hfinal và 88 bit 0 để tạo thành một khóa 128 bit.

Một phần của tài liệu Thám mật khẩu các file word (Trang 53 - 54)