BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TINĐỀ TÀI:
PKCS #5 v2.0: Password-Based Cryptography Standard
Giáo viên hướng dẫn Sinh viên thực hiện
ThS.Phạm Xuân Khánh Hoàng Đặng Vĩnh Cường Mssv:07520040
Đinh Quốc Hòa Mssv:07520138
Lớp: KỸ THUẬT MÁY TÍNH 02
Hồ Chí Minh - 2011
1
Mục Lục
Trang
Trang bìa. ………… 1
Mục Lục 2
Danh mục các ký hiệu,các chữ viết tắt 4
1- LỊCH SỬ CÁC PHIÊN BẢN 5
1.1-VERSIONS 1.0–1.3 5
1.2-VERSION 1.4 5
1.3-VERSION 1.5 5
1.4-VERSION 2.0 5
2. SƠ LƯỢT 5
3. SALT VÀ ITERATION COUNT (SỐ LẶP) 6
3.1 SALT 6
3.2 ITERATION COUNT 8
4. KEY DERIVATION FUNCTIONS 8
4.1 PBKDF1 9
4.2 PBKDF2 10
KDF key derivation function
M message, chuỗi octet
P password, chuỗi octet
PRF underlying pseudorandom function
PS padding string, chuỗi octet
psLen length in octets of padding string, a positive integer
S salt, chuỗi octet
T message authentication code, an octet string
4
1- LỊCH SỬ CÁC PHIÊN BẢN:
1.1-VERSIONS 1.0–1.3:
Phiên bản 1,0-1,3 được phân phối cho người tham gia vào RSA Data Security, Inc 's
Public-Key Cryptography Standards ra mắt vào tháng Hai và tháng Ba năm 1991.
1.2-VERSION 1.4:
Phiên bản 1.4 ra mắt tháng 6 năm 1991.
1.3-VERSION 1.5:
Phiên bản 1.5 tích hợp một số thay đổi,cập nhật các tài liệu tham khảo.
1.4-VERSION 2.0:
Phiên bản 2.0 tích hợp những thay đổi chính trong cấu trúc tài liệu và giới thiệu cơ
chế mã hóa PBES2,cơ chế chứng thực thông điệp PBMAC1,khóa dẫn xuất chức năng
độc lập dựa trên mật khẩu (PBKDF) Phiên bản này vẫn tiếp tục hỗ trợ quá trình mã
hóa trong phiên bản 1.5.
2 - SƠ LƯỢT:
Trong nhiều ứng dụng của mật mã khoá công khai, người sử dụng bảo mật cuối
cùng phụ thuộc vào một hay nhiều giá trị văn bản bí mật hoặc mật khẩu. Kể từ khi mật
khẩu không trực tiếp áp dụng như một chìa khóa cho bất kỳ hệ thống mật mã thông
thường, tuy nhiên, một số hoạt động của mật khẩu là cần thiết để thực hiện các hoạt
động mã hóa với nó. Hơn nữa, như mật khẩu thường chọn từ một không gian tương
đối nhỏ, lưu ý đặc biệt là cần thiết trong các hoạt động đó để bảo vệ chống lại các
cuộc tấn công tìm kiếm. Một cách tiếp cận chung để mã hóa dựa trên mật khẩu, như
+DK(derived key)
+P (Password)
6
+S (Salt)
Điều này có 2 lợi ích:
+khó để tính toán lại tất cả các khóa tương ứng với một từ điển các mật khẩu, thậm
chí các khóa có khả năng nhất. Nếu Salt dài 64 bits sẽ có 2^64 khóa cho mỗi một mật
khẩu nên hạn chế được việc dò mật khẩu.
+Ít có khả năng cùng một khóa sẽ được lựa chọn hai lần.Nếu Salt dài 64 bits, xác suất
trường hợp trên rất nhỏ khi khoảng 2^32 khóa đã được tạo.
Trong mã hóa mật khẩu trên, bên mã hóa tin nhắn có thể được đảm bảo rằng
các quyền lợi này được thực hiện đơn giản bằng cách chọn một Salt lớn và đầy đủ
ngẫu nhiên khi phát sinh một khóa mã hóa từ mật khẩu. Một bên tạo ra một xác thực
mã thông điệp có thể được bảo đảm như vậy trong một kiểu tương tự.
P1 mã hóa một thông điệp ,P2 giải mã thông điệp hay mã thông điệp chứng thực,tuy
nhiên không thể đảm bảo chắc rằng Salt thực sự được cung cấp ngẫu nhiên bởi P1.
Salt có thể bị sao chép từ hoạt động dựa trên mật khẩu khác để khai thác các tương
tác giữa các bên dùng cùng khóa giống nhau. Giả sử 2 bên hợp pháp trao đổi thông
điệp được mã hóa với khóa mã hóa là khóa 80 bits được tạo từ mật khẩu chung với
salt.
Bên bất hợp pháp có thể lấy salt từ hoạt động mã hóa đó và gởi cho một trong các bên
hợp pháp như để dùng cho khóa 40 bits.Nếu một trong các bên tiết lộ kết quả giải mã
khóa 40 bits,bên bất hợp pháp có thể giải khóa 40 bits.Trong trường hợp khóa 40 bits
là nửa đầu của khóa 80 bits,bên bất hợp pháp có thể giải phần còn lại của khóa 80 bits
Để ngăn tấn công trên,tương tác giữa các bên dùng cùng khóa nên được phân tích cẩn
thận,hoặc salt nên chứa dữ liệu phân biệt rõ ràng giữa những hoạt động khác nhau.
Dựa vào đó có 2 cách lựa chọn Salt:
7
+Nếu không quan tâm về sự tương tác giữa nhiều bên sử dụng cùng một khóa với
mã hóa mật khẩu trên và kỹ thuật xác thực hỗ trợ việc cho mật khẩu, Salt có thể được
chiều dài khóa để sản xuất một khóa dẫn xuất.
4. Kết quả các khóa dẫn xuất.
Bất kỳ số lượng các khóa có thể thể phát sinh từ một mật khẩu bằng cách thay đổi các
Salt.
4.1- PBKDF1:
PBKDF1 áp dụng một hàm hash (MD2 , MD5 hoặc SHA-1 ), để chuyển các khóa.
Độ dài của khóa nguồn được giới hạn bởi chiều dài của hàm.
Với MD2(16 octets) ,MD5(16 octets) ,SHA-1(20 octets) tương thích với quá trình dẫn
xuất khóa trong PKCS # 5 v1.5.
PBKDF1 được khuyến cáo chỉ để tương thích với các áp dụng hiện có từ các các khóa
nó tạo ra có thể không đủ lớn cho một số áp dụng khác.
PBKDF1 (P, S, c, dkLen)
Input: P password, một chuỗi octet
S salt, 8 octets
c iteration count, số nguyên dương
dkLen độ dài khóa nguồn, số nguyên dương, ít nhất 16 bits cho MD2 hay MD5
and 20 hoặc SHA-1
Output: DK khóa dẫn xuất, a dkLen-chuỗi octet
Các bước:
1. If dkLen > 16 for MD2 and MD5, or dkLen > 20 for SHA-1, output “derived key
too long” and stop.
2. Áp dụng hàm Hash cho số lặp c để kết hợp password P và Salt S, sau đó rút
dkLen octets đầu tiên để làm khóa nguồn(DK).
T1 = Hash (P || S) ,
9
T2 = Hash (T1) ,
…
Tc = Hash (Tc-1) ,
DK = Tc<0 dkLen-1> .
3. Xuất DK.
U1 = PRF (P, S || INT (i)) ,
U2 = PRF (P, U1) ,
…
Uc = PRF (P, Uc-1) .
INT (i) là một mã hóa 4 octet của số nguyên i,octet đầu quan trọng nhất.
Ở đây, INT (i) là một mã hóa bốn octet của i nguyên, quan trọng nhất octet đầu tiên.
4. Ghép các khối và trích dkLen octet đầu tiên để tạo một khóa nguồn
DK = T1 | | T2 | | ⋅ ⋅ ⋅ | | Tl <0 r-1>.
5. Xuất DK.
5 - ENCRYPTION SCHEMES:
Một cơ chế mã hóa, trong môi trường đối xứng, bao gồm một hoạt động mã hóa và
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
trong khoá, và các hoạt động giải mã phục hồi các thông điệp từ bản mã theo cùng
11
một khóa. Trong một cơ chế mã hóa mật khẩu trên, khóa là một mật khẩu. Áp dụng
điển hình của cơ chế mã hóa dựa trên mật khẩu là công cụ bảo vệ khóa cá nhân,nơi
thông điệp chứa thông tin khóa cá nhân, như trong PKCS #8. Các chương trình mã
hóa được định nghĩa ở đây sẽ là thuật toán mã hóa phù hợp trong bối cảnh đó, hai
phương án được quy định trong phần này:. PBES1 và PBES2.
5.1- PBES1:
PBES1 kết hợp hàm PBKDF1 với một thuật toán mã hóa khối cơ bản là DES hay
RC2TM trong chế độ CBC . PBES1 tương thích với các cơ chế mã hóa trong PKCS #
5 v1.5.
PBES1 được khuyến cáo chỉ để tương thích với các ứng dụng hiện có, kể từ khi nó hỗ
trợ chỉ có hai cơ sở cơ chế mã hóa, mỗi trong số đó có một kích thước khóa (56 hoặc
64 bit) mà có thể không đủ lớn cho một số ứng dụng.
5.1.1- Encryption operation:
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 mật khẩu P để tạo một bản mã C:
1. Chọn Salt S 64 bits và số lăp c.
khởi tạo IV gồm 8 octets còn lại:
K = DK<0 7> ,
IV = DK<8 15> .
13
4. Giải mã ciphertext C với các thuật toán mã hóa khối cơ bản (DES hoặc RC2) trong
khối cơ yếu chuỗi chế độ theo K mã hóa khóa với vector khởi tạo IV để phục hồi một
thông báo được 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, xuất "giải mã lỗi" và dừng lại.
5. Tách thông điệp mã hóa EM thành một tin nhắn M và một chuỗi đệm PS:
EM = M | | PS,
nơi chuỗi đệm PS bao gồm một số octet psLen mỗi số có giá trị psLen, nơi psLen là từ
1 đến 8. Nếu không thể tách
tin mã hóa EM này, xuất đầu ra "lỗi giải mã" và dừng lại.
6. Output the recovered message M.
5.2 - PBES2:
PBES2 kết hợp PBKDF2 cho phiên bản này của PKCS # 5, với một cơ chế mã hóa
cơ bản (Phụ lục B.2). Chiều dài khóa và bất kỳ thông số khác cho các cơ sở cơ chế mã
hóa phụ thuộc vào cơ chế này.PBES2 được khuyến khích cho các ứng dụng mới.
5.2.1- Encryption operation:
Các hoạt động mã hóa cho PBES2 bao gồm các bước sau đây, mã hóa một
thong điệp M theo một mật khẩu P để tạo một bản mã C, áp dụng KDF được chọn và
cơ chế mã hóa được chọn:
1. Chọn một Salt S 64 bits và Số lặp c.
2. Chọn độ dài trong octet, dkLen, cho khóa dẫn xuất cho các cơ chế mã hóa cơ bản.
3. Áp dụng KDF
DK = KDF (P, S, c, dkLen).
4. Mã hóa thông điệp M với các cơ chế mã hóa cơ bản thuộc khóa dẫn xuất DK để tạo
ra một bản mã C.
5. Xuất các bản mã C.
Salt S,số lặp c, dkLen, và nhận dạng cho các KDF và các cơ chế mã hóa cơ bản có thể
KDF chọn trước và một thiết kế chứng thực thông điệp cơ sở chọn trước:
1.Chọn salt S và một số lặp c
2.Chọn một độ dài khóa kiểu octets, dkLen, dành cho khóa dẫn xuất cho thiết kế
chứng thực thông điệp cơ sở.
3.Dùng hàm dẫn xuất từ khóa đã chọn vào mật khẩu P, salt S, và số lặp c để sinh ra
một khóa dẫn xuất DK của độ dài dkLen octets:
DK = KDF (P, S, c, dkLen) .
4.Xử lý thông điệp M với thiết kế chứng thực thông điệp cơ với với khóa dẫn xuất DK
để sinh ra mã chứng thực thông điệp T.
5.Xuất ra mã chứng thực thông điệp T.
6.1.2 - MAC verification:
Hoạt động chứng thực MAC cho PBMAC1 gồm các bước sau, xử lý một thông điệp
M dưới mật khẩu P để sinh ra mã chứng thực thông điệp T:
1.Thu salt S và số lần lặp c.
2.Thu được độ dài khóa kiểu octets, dkLen, dành cho khóa dẫn xuất cho thiết kế
chứng thực thông điệp cơ sở.
3. Dùng hàm dẫn xuất khóa chọn trước vào mật khẩu P, salt S, và số lần lặp c để sinh
ra một khóa dẫn xuất Dk có đọ dài dkLen octets:
DK = KDF (P, S, c, dkLen) .
4. Xử lý thông điệp M với thiết kế chứng thực thông điệp cơ sở dưới khóa dẫn xuất
DK để xác thực mã chứng thực thông điệp T.
5. Nếu mã chứng thực thông điệp được xác nhận, xuất ra ”correct”, còn không thì xuất
ra ‘incorrect”.
16
7 – CÁC QUY ĐỊNH:
Phần này định nghĩa cú pháp cho các hàm dẫn xuất trọng điểm.
7.1- PBKDF1:
Không định danh đối tượng được đưa ra cho PBKDF1, như định danh đối tượng cho
PBES1 là có đủ cho các ứng dụng hiện có và PBKDF2 được khuyến khích cho các
ứng dụng mới.
cấu hình hơn nữa có thể hạn chế giới hạn.
keyLength, một trường tùy chọn, là chiều dài trong octet của khóa dẫn xuất. Các
chiều dài khóa tối đa cho phép phụ thuộc vào việc thực hiện, đó là dự kiến cấu hình có
thể tiếp tục thực hiện hạn chế giới hạn. Lĩnh vực này được cung cấp tiện lợi; các
chiều dài khóa mã hóa không được bảo vệ. Nếu có quan tâm về sự tương tác giữa các
hoạt động với độ dài khác nhau khóa cho một Salt nhất định các Salt nên phân biệt
giữa các độ dài khóa khác nhau.
PRF xác định các Hàm cơ bản giả ngẫu nhiên. Nó sẽ là một ID thuật toán với
một OID trong PBKDF2 cài đặt PRFs, đó cho phiên bản này của PKCS # 5 sẽ bao
gồm id-hmacWithSHA1 bất kỳ OIDs khác theo quy định của ứng dụng.
PBKDF2-PRFs ALGORITHM-IDENTIFIER ::=
{ {NULL IDENTIFIED BY id-hmacWithSHA1}, }
Các Hàm giả ngẫu nhiên mặc định là HMAC-SHA-1:
algid-hmacWithSHA1 AlgorithmIdentifier {{PBKDF2-PRFs}} ::=
18
{algorithm id-hmacWithSHA1, parameters NULL : NULL}
7.3 - PBES1:
định danh đối tượng khác nhau xác định các sơ đồ mã hóa PBES1 theo
với hàm băm trong KDF và khối mật mã cơ bản, như tóm tắt trong bảng 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}
Đối với mỗi OID, các lĩnh vực liên quan đến các thông số OID trong một
AlgorithmIdentifier sẽ có kiểu PBEParameter:
PBEParameter ::= SEQUENCE {
salt OCTET STRING (SIZE(8)),
iterationCount INTEGER }
Các trường messageAuthScheme xác định xác thực thông điệp cơ bản
sơ đồ. Nó sẽ là một ID thuật toán với một OID trong tập PBMAC1-MAC, có
nghĩa là trái với các ứng dụng
PBMAC1-MACs ALGORITHM-IDENTIFIER ::= { }
21