PKCS#5 : Chuẩn mã hóa dựa trên password




[TEXT]

PKCS #5 trình bày các định nghĩa, chương trình để sử dụng cho việc mã hóa thông điệp dựa trên

password. Nó có thể ứng dụng vào việc mã hóa thông điệp hoặc xác thực người dùng

SALT: Thành phần ngẫu nhiên được thêm vào nhằm làm tăng độ phức tạp của password.

DK = KDF (P, S)

DK : Derived Key (khóa được tạo ra)
KDF: Key Derivation Function (hàm tạo khóa)
P : Password
S : Salt
- Lợi ích của Salt:
- Gỉam khả năng bị tấn công kiểu “từ điển”. Nếu Salt có độ dài là 64 bit thì sẽ tạo ra được
264 khóa (DK) cho mỗi password.
- Tránh tình trạng một khóa được sử dụng 2 lần. Nếu Salt có độ dài là 64 bit thì xác xuất
hai key bị trùng nhau là không đáng kể, cho tới sau khi chúng ta tạo ra 232 khóa. Do đó
Salt có thể được cáp dụng và một vài kĩ thuật mã hóa và xác thực.
- Hạn chế của Salt
Nếu Salt không được tạo ngẫu nhiên, trong trường hợp đó. Nếu người tấn công tạo ra một
key (pass + salt) và lây được (salt)… thì từ đó người tấn công có thể lấy được pass của
các user trong 1 hệ thống bằng cách tấn công kiểu từ điển (do lúc này salt đã bị phát hiện,
khóa đã giảm đi độ phức tạp). (Chém gió @@)
- Khuyến cáo khi lựa chọn Salt
+ Nếu không có sự liên quan qua lại giữa việc sử dụng nhìu key giống nhau với một kĩ
thuật mã hóa và xác nhận dựa trên password-based cho một password, thì SALT có thể
tạo ra ngẫu nhiên và không cần kiểm tra sự ngang hàng bởi bên nhận SALT.
+ Mặt khác, SALT nên chứa dữ liệu rõ ràng phân biệt với các hoạt động khác với chiều
dài khác nhau, cộng thêm vào phần giá trị ngẫu nhiên với 64bit, và phần dữ liệu đó cần
được kiểm tra hoặc xác minh bởi bên nhận SALT. Ví dụ, SALT có thể thêm vào một
chuỗi không ngẫu nhiên chỉ ra kết quả của derived key. Với lựa chọn đó, SALT có thể
mã hóa cấu trúc chỉ rõ những thông tin, chi tiết về derived key, chẳng hạn như kĩ thuật mã
hóa hoặc xác thực và một số trình tự với các keys derived khác nhau từ password.
INTERATION COUNT
Số lần lặp lại, cơ chế này là một sự đánh đổi giữa thời gian tao ra key và độ phức tạp của key.
Việc mã hóa(chính xác hơn là số lần băm) sẽ được lặp lại n lần (theo PKCS #5 thì n nhỏ nhất nên
là 1000) thì độ phức tạp của việc tấn công sẽ tăng lên… key sẽ khó bị bẻ gãy hơn.
KEY DERIVATION FUNCTIONS
Một KDF tạo ra DK từ một base key và các tham số khác. Ở Password –based key derivation
functions. Password là base key còn các tham số khác là Interation count, salt. Hai dạng KDF
trong PKCS 5 là PBKDF1(dùng cho các ứng dụng đang tồn tại) và PBKDF 2(dùng cho các ứng
dụng mới)
Một ứng dụng sử dụng KDF thường gồm các bước sau
+ Chọn Salt (S) và một interation count (c)
+ Chọn độ dài của DK (dkLen)
+ Dùng KDF( PBKDF1 hoặc PBKDF2) với Password, S, C , dkLen để tạo ra DK
+ Xuất DK
PBKDF1: sử dụng một hàm băm (SHA-1, MD2 hoặc MD5) để tạo ra DK.
PBKDF1 (P, S, c, dkLen)
Options: Hash underlying hash function

Input: P password, an octet stringS salt, an eight-octet string

c iteration count, a positive integer

dkLen intended length in octets of derived key, a positive integer, at most

16 for MD2 or MD5 and 20 for SHA-1

Output: DK derived key, a dkLen-octet string

Steps:
1. If dkLen > 16 for MD2 and MD5, or dkLen > 20 for SHA-1, output “derived
key too long” and stop.
2. Apply the underlying hash function Hash for c iterations to the concatenation of
the password P and the salt S, then extract the first dkLen octets to produce a
derived key DK:
T1 = Hash (P || S) , ( || nối chuỗi)
T2 = Hash (T1) ,
Tc = Hash (Tc-1) ,
DK = Tc<0..dkLen-1> .
3. Output the derived key DK.
PBKDF2: sử dụng hàm tạo số ngẫu nhiên để tạo DK
PBKDF2 (P, S, c, dkLen)
Options: PRF underlying pseudorandom function (hLen denotes the length in
octets of the pseudorandom function output)
Input: P password, an octet string
S salt, an octet string
c iteration count, a positive integer
dkLen intended length in octets of the derived key, a positive integer, at
most (232 – 1) × hLen
Output: DK derived key, a dkLen-octet string
Steps:
1. If dkLen > (232 – 1) × hLen, output “derived key too long” and stop.
2. Let l be the number of hLen-octet blocks in the derived key, rounding up, and
let r be the number of octets in the last block:
3. For each block of the derived key apply the function F defined below to the
password P, the salt S, the iteration count c, and the block index to compute the
block:
T1 = F (P, S, c, 1) ,
T2 = F (P, S, c, 2) ,
Tl = F (P, S, c, l) ,
where the function F is defined as the exclusive-or sum of the first c iterates of the
underlying pseudorandom function PRF applied to the password P and the
concatenation of the salt S and the block index i:
F (P, S, c, i) = U1 \xor U2 \xor ⋅⋅⋅ \xor Uc
where
U1 = PRF (P, S || INT (i)) ,
U2 = PRF (P, U1) ,
Uc = PRF (P, Uc-1) .
Here, INT (i) is a four-octet encoding of the integer i, most significant octet first.
4. Concatenate the blocks and extract the first dkLen octets to produce a derived
key DK:
DK = T1 || T2 || ⋅⋅⋅ || Tl<0..r-1> .
5. Output the derived key DK.
Pseudorandom function: dùng trong PBKDF2 là HMAC-SHA1, HMAC-SHA224, HMACSHA256, HMAC-SHA384 và HMAC- SHA512
- MAC: message authentication code là một mảnh thông tin để chứng thực thông điệp.
- Thuật toán MAC, đôi khi được gọi là keyed (cryptographic) hash function có input là khóa bí
mật và độ dài bất kì của thông điệp cần chứng thực và đầu ra là MAC. Giá trị MAC bảo vệ tính
toàn vẹn và xác thực của thông điệp bằng cách cho phép người kiểm tra xác định bất kì thay đổi
nào đối với nội dung thông điệp.
-HMAC: hash based message authentication code là một cấu trúc tính toán message
authentication code bao gồm hàm chia nhỏ kết hợp với một khóa bí mật. với bất kì một MAC nào
cũng có thể bảo đảm tính toàn vẹn và xác thực của thông điệp. Bất kì hàm chia nhỏ nào(MD5,
SHA-1) cũng có thể dùng trong tính toán HMAC, kết quả thuật toán MAC là HMAC-MD5 hoặc
HMAC-SHA1 tùy thuộc vào hàm chia nhỏ sử dụng.
ENCRYPTION SCHEMES: (KẾ HOẠCH MÃ HÓA)
Một Encryption Scheme(chương trình mã hóa), bao gồm một hoạt động mã hóa và một hoạt động
giải mã, nơi mà các hoạt động mã hóa tạo ra một bản mã từ một thông điệp theo một key, và hoạt động
giải mã phục hồi các thông điệp từ bản mã theo cùng một key đó. Trong chương trình mã hóa passwordbased, key chính là một password. Một ứng dụng điển hình của một chương trình mã hóa mật khẩu là một
phương thức bảo vệ private-key, đó là một message có chứa thông tin private-key, như trong PKCS # 8.
Các chương trình mã hóa định nghĩa ở đây là các thuật toán mã hóa phù hợp trong bối cảnh đó.
Hai chương trình trong phần này là: PBES1 và PBES2.
-PBES2 được khuyến khích cho các ứng dụng mới.
- PBES1 chỉ được bao gồm khả năng tương thích với ứng dụng hiện tại, và không được
khuyến cáo cho các ứng dụng mới.
PBES1 kết hợp các chức năng PBKDF1 với một thuật toán mã hóa khối cơ bản, bao gồm DES hoặc
RC2TM trong chế độ CBC. PBES1 tương thích với các chương trình mã hóa trong PKCS # 5 v1.5.
PBES1 được khuyến cáo chỉ cho khả năng tương thích với các ứng dụng hiện có, kể từ khi nó hỗ trợ chỉ
có hai chương trình mã hóa cơ bản, trong đó có một kích thước chính (56 hoặc 64 bit) có thể không đủ
lớn cho một số ứng dụng.
1) PBES1
1.1 Hoạt động mã hóa PBES1 :
Các hoạt động mã hóa cho PBES1 bao gồm các bước sau đây:(mã hóa một thông điệp M theo
mật khẩu P để tạo ra một Ciphertext C)
B1: Chọn SALT 8 octet S và iteration count c.
B2: Áp dụng PBKDF1 với mật khẩu P, SALT S, và tính iteration c để tạo ra một derived key DK chiều
dài 16 octet:
DK = PBKDF1 (P, S, c, 16).
B3: Riêng derived key DK có nguồn gốc từ phím mã hóa key K bao gồm 8 octet đầu tiên của DK và một
véc tơ khởi tạo IV bao gồm tám octet tiếp theo:
K = DK <0 .. 7,
IV = DK <8 .. 15.
B4: Kết nối M và một chuỗi padding PS để tạo thành một thông điệp mã hóa EM:
EM = M | | PS,
chuỗi padding PS bao gồm 8-( | | M | | mod 8) octet với giá trị 8 -(| | M | | mod 8). Chuỗi padding PS sẽ
đáp ứng một trong các trạng thái sau:
PS = 01 - | | M | | mod 8 = 7;
PS = 02 02 - | | M | | mod 8 = 6;
...
PS = 08 08 08 08 08 08 08 08 - | | M | | mod 8 = 0.
Chiều dài octet của thông điệp mã hóa sẽ là một bội số của 8 và nó sẽ có thể nhận được thông điệp M rõ
ràng từ thông điệp mã hóa. (Quy tắc này padding được lấy từ RFC 1423 [3]).
B5: Encrypt Message EM được mã hóa với thuật toán mã hóa khối cơ bản (DES hoặc RC2)
trong chế độ khối chuỗi mật mã theo key K mã hóa với khởi tạo vector IV để tạo ra các bản mã C. Đối với
DES, key K sẽ được xem xét như là một 64-bit mã hóa của một khóa DES 56-bit với các bit chẵn lẻ được
bỏ qua (xem [9]). Đối với RC2, "effective key bits" sẽ là 64 bit.
B6: Xuất ra các ciphertext C.
SALT S và iteration count c có thể được chuyển tải đến các bên thực hiện giải mã trong bảng giá trị
AlgorithmIdentifier sau:
pbeWithMD2AndDES-CBC OBJECT IDENTIFIER ::= {pkcs-5 1}
pbeWithMD2AndRC2-CBC OBJECT IDENTIFIER ::= {pkcs-5 4}
pbeWithMD5AndDES-CBC OBJECT IDENTIFIER ::= {pkcs-5 3}
pbeWithMD5AndRC2-CBC OBJECT IDENTIFIER ::= {pkcs-5 6}
pbeWithSHA1AndDES-CBC OBJECT IDENTIFIER ::= {pkcs-5 10}
pbeWithSHA1AndRC2-CBC OBJECT IDENTIFIER ::= {pkcs-5 11}
1.2 Hoạt động giải mã PBES1 :
Các hoạt động giải mã cho PBES1 bao gồm các bước sau đây: ( giải mã một bản mã C theo mật khẩu P
để khôi phục một message M)
B1: Chọn tám octet SALT S và tính iteration c.
B2: Áp dụng các chức năng chính của key PBKDF1 tạo ra mật khẩu P, SALT S, và iteration count c để
tạo ra derived key DK chiều dài 16 octet:
DK = PBKDF1 (P, S, c, 16).
B3: Riêng derived key DK trong phím mã hóa key K bao gồm 8 octet đầu tiên của DK và một véc tơ khởi
tạo IV bao gồm tám octet tiếp theo:
K = DK <0 .. 7,
IV = DK <8 .. 15.
B4: Giải mã bản mã C với các thuật toán mã hóa khối cơ bản (DES hoặc RC2) trong chế độ khối mật mã
dưới sự giải mã key K với khởi tạo vector IV để khôi phục một thông điệp mã hóa EM. Nếu chiều dài
octet của bản mã C không phải là một bội số của tám, đầu ra "giải mã lỗi" và dừng lại.
B5: Riêng các thông điệp EM đã được mã hóa vào một message M và một chuỗi padding PS:
EM = M || PS,
chuỗi padding PS bao gồm một số octet psLen với mỗi giá trị psLen, psLen là giữa 1 và 8. Nếu nó không
phải là thông điệp EM được mã hóa theo cách này, đầu ra "giải mã lỗi" và dừng lại.
B6: Đầu ra nhận được thông điệp M.
2)PBES2:
PBES2 kết hợp một password-based key derivation function, đó là PBKDF2 cho phiên bản này
của PKCS # 5, với một chương trình mã hóa cơ bản. Chiều dài chính và bất kỳ các thông số khác cho các
chương trình mã hóa cơ bản phụ thuộc vào PBES2. PBES2 được khuyến khích cho các ứng dụng mới.
2.1 Hoạt động mã hóa PBES2:
Các hoạt động mã hóa cho PBES2 bao gồm các bước sau đây: (mã hóa một thông điệp M theo
mật khẩu P để tạo ra một bản mã C, áp dụng một key được chọn chức năng gốc KDF và một chương trình
được lựa chọn mã hóa cơ bản)
B1: Chọn một SALT S và một iteration count c .
B2: Chọn chiều dài trong octet, dkLen, cho derived key cho chương trình mã hóa.
B3: Áp dụng các key chức năng gốc được chọn để tạo mật khẩu P, SALT S, và iteration count c để tạo ra
một derived key DK có chiều dài octet là dkLen:
DK = KDF (P, S, c, dkLen).
B4: Mã hóa thông điệp M với các chương trình mã hóa cơ bản thuộc derivded key DK để tạo ra một
ciphertext C. (Bước này có thể liên quan đến lựa chọn các thông số chẳng hạn như một vector khởi tạo và
padding, tùy thuộc vào chương trình cơ bản.)
B5: Xuất ra các Ciphertext C.
SALT S, iteration count c , chiều dài key dkLen, và nhận dạng cho chức năng phím gốc và mã hóa các
chương trình cơ bản có thể được chuyển cho bên thực hiện giải mã trong giá trị AlgorithmIdentifier.
2.2 Hoạt động giải mã PBES2:
Các hoạt động giải mã cho PBES2 bao gồm các bước sau đây: ( giải mã một bản mã C theo mật
khẩu P để khôi phục một message M)
Lấy SALT S cho quá trình hoạt động.
B1: Lấy iteration count c cho các key derivation function.
B2: Lấy chiều dài key trong octet, dkLen, cho chương trình mã hóa derived key .
B3: Áp dụng các chức năng gốc của key được chọn để mật khẩu P, SALT S, và iteration count c để tạo ra
một derived key DK với chiều dài octet dkLen:
DK = KDF (P, S, c, dkLen).
B4: Giải mã ciphertext C với chương trình mã hóa cơ bản theo derived key DK để khôi phục một thông
điệp M. Nếu kết quả chức năng giải mã đầu ra là "Giải mã lỗi”, sau đó đầu ra là " giải mã lỗi "và dừng lại.
B5: Xuất ra message M
MESSAGE AUTHENTICATION SCHEME :
Một chương trình message authentication code bao gồm một tiến trình tạo ra một MAC (message
authentication code) và tiến trình xác nhận MAC. MAC tạo ra thông điệp xác nhận từ một thông điệp
theo một key, và tiến trình xác nhận MAC kiểm tra lại mã xác minh thông điệp theo cùng key đó. Trong
một Password-Based Message Authentication Scheme, Key chính là một password.
Một chương trình xác nhận trong mục này là: PBMAC1..
1. PBMAC1:
PBMAC1 kết hợp với một password-based key derivation function (PBKDF), là PBKDF2 cho
phiên bản PKCS # 5, với một chương trình xác nhận thông điệp cơ bản. Chiều dài của khóa và bất kỳ các
thông số khác cho chương trình xác thực thông điệp cơ bản phụ thuộc vào chương trình này.
1.1 Hoạt động tạo ra PBMAC1 :
Quá trình tạo ra MAC cho PBMAC1 bao gồm các bước sau: (xử lý một thông điệp M theo một
mật khẩu P để tạo ra một mã xác thực thông điệp T, áp dụng chọn một Key derivation function KDF và
lựa chọn một chương trình xác nhận thông điệp bên dưới)
B1: Chọn một SALT S và một count c iteration.
B2: Chọn một chiều dài khóa trong lớp Octet, dkLen, cho phím có chức năng xác thực thông điệp.
B3: Áp dụng chọn hàm dẫn xuất các mật khẩu P, SALT S, và iteration count c để tạo ra một khóa
DK có chiều dài octet dkLen:
DK = KDF (P, S, c, dkLen).
B4: Xử lý thông điệp M với các chương trình xác thực thông điệp bên dưới derived key DK để tạo
ra một mã xác thực thông điệp T.
B5: Kết quả là Mã xác thực thông điệp T.
SALT S, iteration count c, chiều dài key dkLen, và xác định cho key derivation function
chương trình xác thực thông điệp cơ bản được kiểm tra bên trong giá trị AlgorithmIdentifier (xem Phụ
lục A.5).\
1.2 Hoạt động xác minh PBMAC1:
Quá trình xác minh MAC cho PBMAC1 bao gồm các bước sau đây, xử lý một thông điệp M theo
mật khẩu P để xác minh một mã xác thực thông điệp T:
B1: Lấy SALT S và iteration count c.
B2: Lấy chiều dài khóa trong lớp Octet, dkLen, cho derived key của chương trình xác thực thông
điệp.
B3: Áp dụng hàm dẫn xuất chọn các mật khẩu P, SALT S, và iteration count c để tạo ra khóa DK
có chiều dài dkLen lớp Octet:
DK = KDF (P, S, c, dkLen) .
B4: Xử lý thông điệp M với các chương trình xác thực thông điệp theo phím DK để kiểm tra mã
xác thực thông điệp T.
B5: Mã xác thực thông điệp xác nhận, output “chính xác”, nếu khác thì đầu ra "Không chính xác."

Đăng nhận xét Blogger

 
Top