2012-03-09 40 views
5

PKCS#12 là một cách thuận tiện để gộp cùng một khóa riêng tư với chứng chỉ X.509 tương ứng của nó thành một định dạng tệp đơn tiêu chuẩn. Tuy nhiên, đặc điểm kỹ thuật đã được RSALabs xuất bản vào năm 1999 và chỉ sử dụng RC4, RC2 và TripleDES cho mã hóa đối xứng. Có bất kỳ phần mở rộng bán tiêu chuẩn phổ biến nào cho lược đồ thêm nhiều thuật toán mã hóa hoặc các hàm dẫn xuất quan trọng khác không? OpenSSL là tài liệu để thực hiện hỗ trợ cho AES và Camellia, nhưng việc tìm kiếm một tiêu chuẩn tương ứng sẽ chuyển sang trống, vì vậy đây có vẻ là một cái gì đó thực hiện cụ thể cho OpenSSL. Có ai đã ghi lại mô-đun ASN.1 và mã giả cho các phần mở rộng này không?Có bất kỳ tiện ích mở rộng đã xuất bản nào cho PKCS # 12 không?

Trả lời

3

PKCS # 12 sử dụng khối xây dựng từ các tiêu chuẩn khác.

Chế độ mã hóa được khuyến nghị dựa trên mã hóa dựa trên mật khẩu từ PKCS # 5 (PBES2). Điều này đã được mở rộng với sự hỗ trợ cho SHA-2 và AES trong PKCS#5 v.2.1.

Khi OpenSSL sử dụng AES nó có phải nó như thế này:

684 30 806:      SEQUENCE { 
688 30 802:      SEQUENCE { 
692 06 11:       OBJECT IDENTIFIER 
      :       pkcs-12-pkcs-8ShroudedKeyBag (1 2 840 113549 1 12 10 1 2) 
705 A0 723:       [0] { 
709 30 719:       SEQUENCE { 
713 30 73:        SEQUENCE { 
715 06 9:        OBJECT IDENTIFIER 
      :         pkcs5PBES2 (1 2 840 113549 1 5 13) 
726 30 60:        SEQUENCE { 
728 30 27:         SEQUENCE { 
730 06 9:         OBJECT IDENTIFIER 
      :          pkcs5PBKDF2 (1 2 840 113549 1 
5 12) 
741 30 14:         SEQUENCE { 
743 04 8:          OCTET STRING 
      :     BA 6B 5B B3 47 27 C9 73 
753 02 2:          INTEGER 2048 
      :          } 
      :         } 
757 30 29:         SEQUENCE { 
759 06 9:         OBJECT IDENTIFIER 
      :          aes128-CBC (2 16 840 1 101 3 4 1 2) 
770 04 16:         OCTET STRING 
      :     0F 79 79 0A D3 EC C0 3E 20 B8 51 85 2F 2B 6C 29 
      :         } 
      :         } 
      :        } 

Theo như tôi có thể đọc các nguồn, OpenSSL mã hóa mật khẩu như ASCII chứ không phải là zero-chấm dứt UTF-16 khi sử dụng PKCS # 5 PBES2 .

+0

Vâng, không chính xác. PKCS # 12 sử dụng PBKDF được chỉ định trong phụ lục B.2 và khác với PBKDF1 của PBKDF2 của PKCS # 5 ở một số khía cạnh. Ví dụ, không giống như PKCS # 5 PBKDF1, nó có tính năng kéo dài khóa, không giống PKCS # 5 PBKDF2, nó sử dụng một băm lặp thay vì xor tổng các đầu ra HMAC, và không giống như cả hai định dạng muối và mật khẩu theo cách khác thường. –

+0

Để cụ thể hơn: Phụ lục BCS PK # 12 B.1 quy định rằng mật khẩu nên được xem là BMPStrings thay vì OctetStrings đơn giản. Điều này có nghĩa rằng nếu một số nhận dạng thuật toán PKCS # 5 sẽ gặp phải trong trường định danh thuật toán mã hóa của tệp PKCS # 12, sẽ không xác định được liệu mật khẩu có nên được coi là một BMPString hay không. Do đó, các quy tắc xử lý sẽ vẫn phải được xác định bên ngoài để được rõ ràng. –

+1

@ Henrick Hellström: Theo như tôi nhớ, PBKDF trong phụ lục B.2 chỉ dành cho khả năng tương thích ngược với định dạng cũ của Microsoft. Nếu bạn đọc ghi chú ở trang 13, bạn sẽ nhận thấy rằng bạn nên sử dụng các cơ chế PKCS # 5. –

Các vấn đề liên quan