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.1VERSIONS 1.0–1.3............................................................................... 5 1.2VERSION 1.4........................................................................................... 5 1.3VERSION 1.5........................................................................................... 5 1.4VERSION 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 5. ENCRYPTION SCHEMES .................................................................................... 11 5.1 PBES1 ................................................................................................................. 12 5.1.1 Encryption operation......................................................................................... 12 5.1.2 Decryption operation.......................................................................................... 13 5.2 PBES2 .................................................................................................................. 14 5.2.1 Encryption operation.......................................................................................... 14 5.2.2 Decryption operation......................................................................................... 15 6. MESSAGE AUTHENTICATION SCHEMES....................................................... 15 6.1 PBMAC1.............................................................................................................. 15 6.1.1 MAC generation ................................................................................................ 15 6.1.2 MAC verification............................................................................................... 16 7. CÁC QUY ĐỊNH ................................................................................................ 17 7.1 PBKDF1............................................................................................................... 17 7.2 PBKDF2............................................................................................................... 17 7.3 PBES1 ................................................................................................................. 19 7.4 PBES2 ................................................................................................................. 19 7.5 PBMAC1............................................................................................................. 20
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠOTRƯỜ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
Trang 2Mụ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
5 ENCRYPTION SCHEMES 11
5.1 PBES1 12
5.1.1 Encryption operation 12
5.1.2 Decryption operation 13
Trang 35.2 PBES2 14
5.2.1 Encryption operation 14
5.2.2 Decryption operation 15
6 MESSAGE AUTHENTICATION SCHEMES 15
6.1 PBMAC1 15
6.1.1 MAC generation 15
6.1.2 MAC verification 16
7 CÁC QUY ĐỊNH 17
7.1 PBKDF1 17
7.2 PBKDF2 17
7.3 PBES1 19
7.4 PBES2 19
7.5 PBMAC1 20
Trang 4Danh mục các ký hiệu,các chữ viết tắt:
C ciphertext, an octet string
c iteration count, a positive integer
DK derived key, an octet string
dkLen length in octets of derived key, a positive integer
EM encoded message, an octet string
Hash underlying hash function
hLen length in octets of pseudorandom function output, a positive integer
l length in blocks of derived key, a positive integer
IV vector khởi tạo, chuỗi octet
K encryption key, chuỗi octet
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
Trang 51- 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 'sPublic-Key Cryptography Standards ra mắt vào tháng Hai và tháng Ba năm 1991.1.2-VERSION 1.4:
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ậtkhẩ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ư được mô tả bởi Morris và Thompson để bảo vệ các bảng mật khẩu, là kết hợp một mậtkhẩu với Salt để sản xuất một khoá Salt này có thể được xem như là một chỉ mục vào một tập lớn của các khóa nguồn gốc từ mật khẩu, và không cần phải được giữ bí mật.Mặc dù nó có thể bị sử dụng để tái tạo bản mã có thể xây dựng một bảng của các
Trang 6khóa có thể như vậy sẽ rất khó khăn, vì sẽ có nhiều các khóa có thể cho mỗi mật khẩu.Điều này sẽ hạn chế việc tìm kiếm thông qua mật mã riêng biệt cho mỗi Salt.Thêm cách tiếp cận dựa trên mã hoá mật khẩu là xây dựng các kỹ thuật khóa dẫn xuất tương đối phức tạp Do đó làm tăng chi phí dò tìm đầy đủ Một cách để làm điều này
là đưa một số lặp (iteration count) trong các kỹ thuật dẫn xuất chính Cho biết số lần
để chuyển đổi một số chức năng cơ bản của các khóa được dẫn xuất.Một số lần lặp khiêm tốn, khoảng 1000, không có khả năng là một gánh nặng cho các bên hợp pháp khi tính toán một khóa, nhưng sẽ là một gánh nặng lớn cho kẻ dò tìm
Số “Salt” và iteration count tạo cơ sở cho việc mã hóa mật khẩu PKCS # 5 v1.5.Và thông qua cho hoạt động mã hoá khác nhau Như vậy, khóa dẫn xuất dựa trên mật khẩu như được định nghĩa ở đây là một hàm của một mật khẩu, Salt, và đếm một lặp,nơi hai số lượng sau này không cần phải được giữ bí mật
Từ một Hàm khóa dẫn xuất dựa trên mật khẩu ,đơn giản để xác định mã hóa dựa trên mật khẩu và cơ chế xác thực thông điệp Như trong PKCS # 5 v1.5 các cơ chế dựa trên mã hóa mật khẩu ở đây được dựa trên một cơ sở, thông thường mã hóa cơ chế, nơi mà các khóa cho các cơ chế thông thường có nguồn gốc từ mật khẩu Tương tự như vậy, thông báo mật khẩu dựa trên chế thẩm định dựa trên một cơ chế cơ bản thông thường
Nó được mong đợi rằng hàm khóa dẫn xuất dựa trên mật khẩu có thể tìm thấy các áp dụng khác hơn là chỉ việc mã hóa và chứng thực thông điệp ở đây
3 - SALT VÀ ITERATION COUNT (SỐ LẶP):
3.1 - SALT: ITERATION COUNT
Salt dùng để tạo lượng lớn khóa dựa trên mật khẩu nhận.Một khóa cá nhân trong số đóđược chọn bằng cách áp dụng KDF(key derivation function)
DK = KDF (P, S)
+DK(derived key)
+P (Password)
Trang 7+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:
Trang 8+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 tạo ra ngẫu nhiên và không cần phải được kiểm tra cho một định dạng cụ thể của bên nhận Nó phải có chiều dài ít nhất 64 bits
+Cách khác để bảo vệ chống lại các cuộc tấn công như vậy Salt nên chứa dữ liệu phân biệt rõ ràng giữa các hoạt động và độ dài khóa khác nhau,thêm một phần ngẫu nhiên dài ít nhất 64 bits và dữ liệu này nên được kiểm tra hoặc tái tạo lại bởi bên nhận Salt
Ví dụ, các salt có thể có thông tin bổ sung chuỗi octet xác định liệu các khóa xuất phát là cho việc mã hóa, cho tin nhắn chứng thực, hoặc cho một số hoạt động khác
3.2 - ITERATION COUNT:
Số ngẫu nhiên tăng chi phí tạo khóa từ mật khẩu, do đó cũng tăng sự khó khăn cho việc tấn công Đối với các phương pháp này,cần tối thiểu là 1000 lần lặp Điều này sẽ làm tăng chi phí tìm kiếm đáng kể, mà không có một tác động đáng kể trong chi phí phát sinh các khóa cá nhân
4 - KEY DERIVATION FUNCTIONS:
Một key derivation function (KDF) tạo ra một khóa dẫn xuất từ một khóa cơ bản vàcác thông số khác.Trong PBKDF (password-based key derivation function) khóa cơ bản là một mật khẩu và tham số khác là một salt và iteration count Các ứng dụng chính của các PBKDF xác định ở đây là các cơ chế mã hóa tại mục 5 và cơ chế xác thực thông điệp của tại mục 6.Các ứng dụng khác tất nhiên có thể, vì thế mà định nghĩa độc lập của các hàm Hai hàm được xác định trong phần này: PBKDF1 và PBKDF2 PBKDF dùng cho các ứng dụng mới; PBKDF1 được bao gồm chỉ để tương thích với các ứng dụng hiện có, và khuyến cáo không được dung cho các ứng dụng mới
Một ứng dụng điển hình của các hàm khóa dẫn xuất được xác định ở đây có thể bao gồm các bước sau:
1 Chọn một Salt S và đếm iteration count c
Trang 92 Chọn một chiều dài octet cho khóa dẫn xuất, dkLen.
3 Áp dụng các KDF để các mật khẩu, các Salt, số lặp c và
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ẫnxuấ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 MD5and 20 hoặc SHA-1
Output: DK khóa dẫn xuất, a dkLen-chuỗi octet
Trang 10VD hàm giả HMAC-SHA-1
PBKDF2 (P, S, c, dkLen)
Input: P password, một chuỗi octet
hLen biểu thị chiều dài octet của hàm giả ngẫu nhiên
S salt, một chuỗi octet
c iteration count, số nguyên dương
dkLen định chiều dài trong các octet của khóa dẫn xuất, số nguyên
dương,nhiều nhất là (2^32 – 1) × hLen
Output: DK , a dkLen-octet string
Các bước:
1 Nếu dkLen > (2^32 – 1) × hLen, xuất “derived key too long” và dừng
2 Giả sử L là số các khối hLen-octet trong khóa nguồn, làm tròn lên và cho r làm số của các octets trong khối cuối cùng:
Trang 11INT (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
Trang 12mộ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.
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
2 Áp dụng KDF PBKDF cho password P,Salt S,và số lặp c để tạo khóa nguồn chiều dài 16 octets:
Trang 13Chuỗi đệm PS bao gồm 8-(||M|| mod 8) octets mỗi octet có giá trị 8-(||M|| mod 8) Chuỗi đệm PS sẽ đáp ứng sau:
6 Xuất bảng mã C
5.1.2 - Decryption operation:
Các hoạt động giải mã cho PBES1 bao gồm các bước sau đây, giải mã bản mã C theo một mật khẩu P để phục hồi thông điệp M:
1 Obtain the eight-octet salt S and the iteration count c
2 Áp dụng KDF PBKDF cho password P, salt S, và số lặp c để tạo khóa nguồn DK dài 16 octets:
Trang 144 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:
Trang 155.2.2 - Decryption operation:
Giải mã bản mã C theo mật khẩu P để phục hồi thông điệp M:
1 Thu được Salt S
6 Xuất thông điệp phục hồi M
6 - MESSAGE AUTHENTICATION SCHEMES:
Một cơ chế xác thực thông điệp bao gồm một MAC(message authentication code) tạo hoạt động và hoạt động xác minh MAC,nơi mà các MAC tạo hoạt động phát sinh một mã xác thực thông điệp từ một thong điệp dưới dạng khóa.Và hoạt động xác minhMAC xác minh mã xác thực thông điệp dưới cùng một khóa
Trong một cơ chế xác thực thong điệp dựa trên mật khẩu ,khóa là một mật khẩu.Cơ chế giới thiệu ở đây là PBMAC1
6.1- PBMAC1:
PBMAC1 kết hợp một KDF dựa vào mật khẩu, như là PBKDF2 cho phiên bản PKCS#5, với một thiết kế chứng thực thông điệp cơ sở Độ dài khóa và các tham số khác cho thiết kế chứng thực thông điệp cơ sở phụ thuộc vào thiết kế
6.1.1- MAC generation:
Trang 16Hoạt động phát sinh MAC cho PBMAC1 gồm các bước sau, xử lý một thông điệp
M với mật khẩu P để sinh ra mã chứng thực thông điệp T, áp dụng một hàm dẫn xuất 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:
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:
Trang 177.2- PBKDF2:
Các đối tượng định danh id-PBKDF2 xác định các KDF cho PBKDF2
id-PBKDF2 OBJECT IDENTIFIER ::= {pkcs-5 12}
Các thông số liên quan đến lĩnh vực OID này trong một AlgorithmIdentifier sẽ cócác loại PKDF2-params :
PBKDF2-params ::= SEQUENCE {
salt CHOICE {
specified OCTET STRING,
otherSource AlgorithmIdentifier {{PBKDF2-SaltSources}
},
iterationCount INTEGER (1 MAX),
keyLength INTEGER (1 MAX) OPTIONAL,
prf AlgorithmIdentifier {{PBKDF2-PRFs}} DEFAULT
algid-hmacWithSHA1 }
Các lĩnh vực kiểu PKDF2-params có ý nghĩa sau đây:
Trang 18Salt quy định giá trị Salt, hoặc nguồn gốc của giá trị Salt Nó có sẽ là một chuỗi octethoặc một thuật toán ID với một OID trong PBKDF2 cài đặt SaltSources, cái là dành cho các phiên bản tương lai của PKCS # 5.
Cách tiếp cận nguồn Salt là nhằm chỉ ra làm thế nào giá trị Salt là được tạo ra như là một Hàm của tham số trong các thuật toán ID , ứng dụng dữ liệu, hoặc cả hai
Ví dụ, nó có thể chỉ ra rằng giá trị Salt tạo ra từ các mã hóa của một cấu trúc mà quy định cụ thể thông tin chi tiết về các khóa dẫn xuất Một sốcác thông tin có thể tiến hành ở nơi khác, ví dụ như, trong thuật toán mã hóa ID.Tuy nhiên, các cơ sở này đượchoãn lại đến một phiên bản tương lai của PKCS # 5.Trong phiên bản này, một ứng dụng có thể đạt được những lợi ích được đề cập bởi lựa chọn một giải thích đặc biệt của giá trị Salt trong các giải pháp thay thế xác định
PBKDF2-SaltSources THUẬT TOÁN-nhận dạng:: = { }
iterationCount quy định các tính lặp đi lặp lại Các tính lặp đi lặp lại tối đa
cho phép phụ thuộc vào việc thực hiện Người ta cho rằng triển khai thực hiện nhiều 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ácchiề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}} ::=