Mã hóa RC4 CryptoAPI Văn bản Office

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

Các kho và luồng được mã hóa bởi Mã hóa RC4 CryptoAPI Văn bản Office được chỉ rõ cho ứng dụng thích hợp. Các tiểu mục dưới đây sẽ trình bày về các cấu trúc và các phương thức sinh khóa được dùng bởi ứng dụng.

2.2.5.1. Header của Mã hóa RC4 CryptoAPI

Cấu trúc header sử dụng cho Mã hóa RC4 CryptoAPI được chỉ rõ như trong hình 2.10. 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 20 1 2 3 4 5 6 7 8 9 30 1 EncryptionVersionInfo EncryptionHeader.Flags EncryptionHeaderSize EncryptionHeader (biến) … EncryptionVerifier (biến) …

Hình 2.10. Cấu trúc header của Mã hóa RC4 CryptoAPI

EncryptionVersionInfo (4 byte): Cấu trúc Version chỉ định phiên bản mã hóa được dùng để tạo văn bản và phiên bản mã hóa được yêu cầu để mở văn bản.

Version.vMajor phải là 0x0002, 0x0003 hoặc 0x0004 và Version.vMinor phải là 0x0002.

EncryptionHeader.Flags (4 byte): Bản sao của Flags được lưu lại trong cấu trúc EncryptionHeader mà đã được lưu lại trong luồng này.

EncryptionHeaderSize (4 byte): Số nguyên không dấu chỉ định kích thước, bằng byte, của cấu trúc EncryptionHeader.

EncryptionHeader (biến): Cấu trúc EncryptionHeader được dùng để mã hóa cấu trúc. Giá trị phải được thiết lập theo như mô tả trong bảng 2.12.

Trường Giá trị

Flags Bit fCryptoAPI phải được thiết lập. Bit fDocProps phải được thiết lập nếu các thuộc tính của văn bản không được mã hóa.

SizeExtra Phải là 0x00000000.

AlgID Phải là 0x00006801 (mã hóa RC4).

AlgIDHash Phải là 0x00008004 (SHA-1).

KeySize Phải lớn hơn hoăc bằng các bit 0x00000028 và nhỏ hơn hoặc bằng các bit 0x00000080, trong gia số của 8 bit. Nếu thiết lập thành 0x00000000, nó phải được hiểu như các bit 0x00000028. Nó phải phù hợp với nhà cung cấp dịch vụ mã hóa (CSP) đã chọn.

34

ProviderType Phải là 0x00000001.

Reserved1 Chưa định nghĩa và được bỏ qua.

Reserved2 Phải là 0x00000000 và được bỏ qua.

CSPName Phải được thiết lập thành tên một CSP đã được công nhận hỗ trợ các thuật toán RC4 và SHA-1 với độ dài khóa phù hợp với giá trị trường

KeySize.

Bảng 2.12. Báng giá trị các trường của EncyptionHeader (Mã hóa RC4 CryptoAPI)

EncryptionVerifier (biến): Cấu trúc EncryptionVerifier.

2.2.5.2. Cấu trúc EncryptedStreamDescriptor RC4 CryptoAPI

Cấu trúc EncryptedStreamDescriptor RC4 CryptoAPI chỉ định thông tin về các luồng và kho đã mã hóa được chứa cùng một luồng mã hóa giản lược RC4 CryptoAPI. Nó được thể hiện như hình 2.11 sau đây:

0 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 20 1 2 3 4 5 6 7 8 9 30 1 StreamOffset StreamSize Chặn NameSize A B Không sử dụng Reserved2 StreamName (biến) …

Hình 2.11. Cấu trúc EncryptedStreamDescriptor RC4 CryptoAPI

StreamOffset (4 byte): Số nguyên không dấu chỉ định offset, bằng byte, cùng với luồng sơ lược nơi luồng đã mã hóa được ghi lại.

StreamSize (4 byte): Số nguyên không dấu chỉ định kích thước, bằng byte, của luồng đã mã hóa.

Block (2 byte): Số nguyên không dấu chỉ định số của block được dùng để tìm khóa mã cho luồng đã mã hóa này.

NameSize (1 byte): Số nguyên không dấu chỉ định số ký tự được dùng bởi trường StreamName, không bao gồm ký tự NULL ở tận cùng. (adsbygoogle = window.adsbygoogle || []).push({});

A-fStream (1 bit): Giá trị phải là 1 nếu dữ liệu mã hóa là một luồng. Nó phải là 0 nếu dữ liệu mã hóa là một kho.

B-Reserved1 (1 bit): Giá trị phải là 0 và được bỏ qua.

Unused (6 bit): Giá trị bỏ qua.

Reserved2 (4 byte): Giá trị bỏ qua.

StreamName (biến): Chuỗi ký tự Unicode tận cùng là null chỉ định tên của luồng (hoặc kho) được lưu cùng với luồng mã hóa giản lược.

35

2.2.5.3. Luồng mã hóa giản lược RC4 CryptoAPI

Khi Mã hóa RC4 CryptoAPI được sử dụng, một luồng mã hóa giản lược có thể được tạo ra. Tên của luồng phải được chỉ rõ bởi ứng dụng. Nếu luồng mã hóa giản lược được đưa ra, thì luồng \0x05DocumentSummaryInformation cũng phải được đưa ra và không chứa thuộc tính nào. Luồng \0x05SummaryInformation

không được phép đưa ra.

Luồng phải có định dạng như hình 2.12 dưới đây.

0 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 20 1 2 3 4 5 6 7 8 9 30 1 StreamDescriptorArrayOffset StreamDescriptorArraySize EncryptedStreamData (biến) … EncryptedStreamDescriptorCount EncryptedStreamDescriptorArray (biến) …

Hình 2.12. Luồng mã hóa giản lược RC4 CryptoAPI

StreamDescriptorArrayOffset (4 byte): Số nguyên không dấu chỉ định offset cùng với luồng mã hóa giản lược nơi cấu trúc

EncryptedStramDescriptorCount được tìm thấy.

StreamDescriptorArraySize (4 byte): Số nguyên không dấu chỉ định số các byte được dùng bởi cấu trúc EncryptedStreamDescriptorArray.

EncryptedStreamData (biến): Một hoặc nhiều luồng đã mã hóa được lưu cùng với luồng mã hóa giản lược.

EncryptedStreamDescriptorCount (4 byte): Số nguyên không dấu đã mã hóa chỉ định tổng số các cấu trúc EncryptedStreamDescriptor.

EncryptedStreamDescriptorArray (biến): Một hoặc nhiều cấu trúc

EncryptedStreamDescriptor mà chỉ định các offset và tên của các luồng và các kho đã mã hóa được chứa cùng với luồng mã hóa giản lược.

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