2009-12-23 169 views
2

使用Java Keytool實用程序構建密鑰存儲區時,密鑰的保護方式如何?我已經通讀了文檔,並且我意識到每個私鑰都有一個密鑰密碼,然後該商店有一個商店密碼。keytool如何保護密鑰?

但是用什麼機制來保護數據呢?它是一種加密密碼嗎?如果是這樣,算法是什麼?我特別關注keytool在構建JKS文件時如何進行保護。

回答

6

Sun的默認JKS密鑰庫使用專有算法,主要用於解決對標準算法的出口限制。該算法在這個類中實現,

sun.security.provider.KeyProtector 

的是算法的描述,

這是Sun專有的實現,導出算法旨在用於保護(或恢復明文版本時)的敏感鍵。該算法不是作爲通用密碼。這是密鑰保護算法的工作原理:p - 用戶密碼s - 隨機鹽x - xor密鑰P - 待保護密鑰Y - 受保護密鑰R - 存儲在密鑰存儲區中的內容步驟1:獲取用戶密碼,將一個隨機的鹽(固定大小)添加到它,然後對其進行散列:d1 = digest(p,s)將d1存儲在X中。步驟2:獲取用戶密碼,附加上一步的摘要結果並對其進行哈希處理: dn = digest(p,dn-1)。將dn存儲在X中(將其附加到先前存儲的摘要中)。重複此步驟,直到X的長度與私鑰P的長度相匹配。步驟3:XOR X和P,並將結果存儲在Y:Y = X XOR P.步驟4:存儲s,Y和摘要(p ,P)在結果緩衝區R中:R = s + Y + digest(p,P),其中「+」表示串聯。 (注意:摘要(p,P)存儲在結果緩衝區中,以便當密鑰恢復時,我們可以檢查恢復的密鑰是否確實與原始密鑰匹配。)R存儲在密鑰庫中。受保護的密鑰恢復如下:步驟1和步驟2與上述步驟相同,只是鹽不是隨機生成的,而是從步驟4的結果R(第一個長度(s)字節)中獲取。步驟3(異或操作)產生明文密鑰。然後連接密碼和恢復的密鑰,並與R的最後一個長度(digest(p,P))字節進行比較。如果它們匹配,恢復的密鑰的確與原始密鑰相同。

+0

這很完美!謝謝! – bethlakshmi 2009-12-24 14:48:36

2

使用的算法取決於您使用的密鑰庫(例如,它可能是智能卡)。

孫附帶的JDK創建一個軟令牌(在磁盤上的文件)的默認密鑰庫與three encryption options

  1. 默認:「JKS」的專用密鑰倉庫類型(格式)。不確定算法。

  2. 「JCEKS」,另一種專有的格式,使用3-DES

  3. 「PKCS12」,標準格式(OpenSSL的能讀它),具有多種選擇,但通常爲3-DES對私鑰和RC2-40證書。

在這三種情況下,您有(對稱,使用個人密碼)的私人數據進行加密,並通過加密摘要(使用密鑰庫密碼)保護整個密鑰存儲的完整性。