Sinh khóa Mã hóa Văn bản ECMA-376 (Mã hóa chuẩn)

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

Khóa mã cho Mã hóa Văn bản ECMA-376 phải được sinh bởi phương thức sau:

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

EncryptionHeader.AlgIDHash, Hn là dữ liệu băm lần thứ n, và dấu "+" thể hiện sự móc nối. Thuật toán băm này phải là SHA-1. Mật khẩu phải được cung cấp như một mảng các ký tự Unicode. Giới hạn độ dài của mật khẩu và độ dài các ký tự được sử dụng bởi mật khẩu phụ thuộc vào việc thực hiện. Băm mật khẩu ban đầu được sinh ra như sau:

- H0 = H(salt + password)

Salt phải được sinh ngẫu nhiên và có kích thước 16 byte. Salt phải được lưu trong trường EncryptionVerifier.Salt được chứa cùng luồng \EncryptionInfo. Băm lại bằng kỹ thuật sau:

- Hn = H(iterator + Hn-1)

Với iterator là giá trị không dấu 32-bit mà lúc đầu được thiết lập là 0x00000000 và sau đó tăng dần mỗi lần lặp cho đến khi thực hiện đủ 50000 lần. Giá trị của iterator mỗi lần lặp phải là 49999.

Sau đó dữ liệu băm cuối cùng được thu lại, khóa mã phải được sinh bằng việc dùng dữ liệu băm cuối cùng, và số block phải là 0x00000000. Thuật toán mã hóa phải được chỉ định trong trường EncryptionHeader.AlgID. Thuật toán mã hóa phải sử dụng chế độ ECB. Phương thức được sử dụng để sinh dữ liệu băm là đầu vào trong thuật toán xác định khóa như sau:

- Hfinal = H(Hn + block)

Phương thức xác định khóa mã được chỉ ra theo các bước sau:

1.Cho cbRequiredKeyLength bằng với kích thước, tính theo byte, của độ dài khóa yêu cầu cho thuật toán mã hóa thích hợp như đã chỉ rõ trong cấu trúc EncryptionHeader. Lưu ý rằng cbRequiredKeyLength

phải nhỏ hơn hoặc bằng 40.

2.Cho cbHash là số các byte đầu ra của thuật toán băm H.

3.Tạo bộ đệm 64 byte bằng cách lặp hằng số 0x36 64 lần. XOR Hfinal vào các byte cbHash đầu tiên của bộ đệm này, và tính toán băm của bộ đệm kết quả trả về 64 byte bằng cách sử dụng thuật toán băm H. Việc này sẽ sinh ra một giá trị băm của độ dài cbHash. Gọi giá trị trả về là X1. 4.Tạo bộ đệm 64 byte khác bằng cách lặp hằng số 0x5C 64 lần. XOR

49

của bộ đệm kết quả trả về 64 byte bằng cách sử dụng thuật toán băm H. Việc này sẽ sinh ra một giá trị băm của độ dài cbHash. Gọi giá trị trả về là X2.

5.Kết hợp X1X2 thành X3, từ đó sẽ sinh ra một giá trị bằng 2 lần độ dài của cbHash.

6.Cho keyDerived bằng các byte cbRequiredKeyLength đầu tiên của

X3.

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