Sinh PasswordKeyEncryptor (Mã hóa nhanh)

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

Với mã hóa nhanh, thành tố XML mã hóa khóa mật khẩu phải được tạo như sau:

saltSize: Thiết lập thuộc tính này thành số các byte được dùng bởi dạng nhị phân của thuộc tính saltValue. Nó phải phù hợp với kiểu SaltSize.

51

blockSize: Thiết lập thuộc tính này thành số các byte cần để chứa một block đã mã hóa của dữ liệu, đã định nghĩa bởi cipherAlgorithm. Nó phải phù hợp với kiểuBlockSize.

keyBits: Thiết lập thuộc tính này thành số các bit cần để chứa khóa mã, đã định nghĩa bởi thành tố cipherAlgorithm. Nó phải phù hợp với kiểu KeyBits.

hashSize: Thiết lập thuộc tính này thành số các byte cần để chứa đầu ra của thuật toán băm đã định nghĩa bởi thành tố hashAlgorithm. Nó phải phù hợp với kiểu HashSize.

cipherAlgorithm: Thiết lập thuộc tính này thành một chuỗi ký tự chứa thuật toán mật mã dùng để mã hóa encryptedVerifierHashInput,

encryptedVerifierHashValueencryptedKeyValue. Nó phải phù hợp với kiểu

CipherAlgorithm.

cipherChaining: Thiết lập thuộc tính này thành chế độ móc nối mật mã dùng để mã hóa encryptedVerifierHashInput, encryptedVerifierHashValue

encryptedKeyValue. Nó phải phù hợp với kiểu CipherChaining.

hashAlgorithm: Thiết lập thuộc tính này thành thuật toán băm dùng để lấy khóa mã từ mật khẩu và nó cũng dùng để thu encryptedVerifierHashValue. Nó phải phù hợp với kiểu HashAlgorithm.

saltValue: Thiết lập thuộc tính này thành mã base 64, sinh một cách ngẫu nhiên mảng các byte. Nó phải phù hợp với kiểu SaltValue. Số các byte được yêu cầu bởi dạng giải mã của thành tố này phải là saltSize.

spinCount: Thiết lập thuộc tính này thành số lần lặp băm mật khẩu khi tạo khóa được sử dụng để mã hóa encryptedVerifierHashInput,

encryptedVerifierHashValueencryptedKeyValue. Nó phải phù hợp với kiểu

SpinCount.

encryptedVerifierHashInput: Thuộc tính này phải được sinh theo các bước sau:

1. Sinh ngẫu nhiên một mảng với các byte được dùng chỉ định bởi thuộc tính saltSize.

2. Sinh một khóa mã bằng mật khẩu người dung cung cấp, mảng các byte nhị phân dùng để tạo thuộc tính saltSize, và một mảng các byte

blockKey bao gồm các byte sau: 0xfe, 0xa7, 0xd2, 0x76, 0x3b, 0x4b, 0x9e và 0x79.

3. Mã hóa mảng ngẫu nhiên các byte được sinh ở bước 1 bằng cách dùng dạng nhị phân của thuộc tính saltValue như một vectơ khởi tạo, đã nêu ở mục 4.1.5. Nếu mảng các byte không phải là bội số nguyên của các byte blockSize, thì đệm mảng với 0x00 để thành bội số nguyên tiếp theo của các byte blockSize.

52

4. Sử dụng base 64 để mã hóa kết quả ở bước 3.

encryptedVerifierHashValue: Thuộc tính này phải được sinh theo các bước sau:

1. Thu thập giá trị băm của mảng các byte ngẫu nhiên được sinh ở bước 1 của các bước sinh encryptedVerifierHashInput.

2. Sinh một khóa mã như đã nêu ở mục 4.1.4 bằng mật khẩu do người dùng cung cấp, mảng các byte nhị phân dùng để tạo thuộc tính

saltValue, và một mảng byte blockKey bao gồm các byte sau: 0xd7, 0xaa, 0x0f, 0x6d, 0x30, 0x61, 0x34 và 0x4e.

3. Mã hóa giá trị băm thu được ở bước 1 bằng cách dùng dạng nhị phân của thuộc tính saltValue như một vectơ khởi tạo như đã nêu ở mục 4.1.5. Nếu hashSize không phải là bội số nguyên của các byte

blockSize, thì đệm giá trị băm với 0x00 để thành một bội số nguyên của các byte blockSize.

4. Sử dụng base 64 để mã hóa kết quả ở bước 3.

encryptedKeyValue: Thuộc tính này phải được sinh theo các bước sau: 1. Sinh một mảng ngẫu nhiên các byte mà có cùng kích thước như đã chỉ (adsbygoogle = window.adsbygoogle || []).push({});

ra bởi thuộc tính Encryptor.KeyData.keyBits của thành tố cha. 2. Sinh một khóa mã như đã nêu ở mục 4.1.4, sử dụng mật khẩu do

người dùng cung cấp, mảng các byte nhị phân dùng để tạo thuộc tính

saltValue, và một mảng byte blockKey bao gồm các byte sau: 0x14, 0x6e, 0x0b, 0xe7, 0xab, 0xac, 0xd0 và 0xd6.

3. Mã hóa mảng ngẫu nhiên các byte được sinh ở bước 1 bằng cách dùng dạng nhị phân của thuộc tính saltValue như một vectơ khởi tạo, đã nêu ở mục 4.1.5. Nếu mảng các byte không phải là bội số nguyên của các byte blockSize, thì đệm mảng với 0x00 để thành một bội số nguyên của các byte blockSize.

4. Sử dụng base 64 để mã hóa kết quả ở bước 3.

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