公開金鑰指紋檢視原始碼討論檢視歷史
在公開密鑰加密中,公開密鑰指紋(簡稱:公鑰指紋)是用於標識較長公共密鑰字節的短序列。指紋通過應用加密散列函數[1] 到一個公共密鑰來實現。由於指紋較比生成它們的密鑰短得多,因此可以用來簡化某些密鑰的管理任務。
安全性
公鑰指紋主要的安全威脅是原像攻擊,攻擊者構造一個密鑰對,與受害者可生成的指紋相匹配,即可能偽裝成受害者;某些系統的第二個威脅是碰撞攻擊|Collision attack,這可能允許攻擊者否認他所創造的簽名,或導致其他混淆。
在指紋長度必須不惜一切代價最小化的情況下,在技術上,如使用散列擴展可提升安全性。
創建公鑰指紋
生成公鑰指紋的概括步驟如下:
- 公鑰(以及任選的一些額外數據)被編碼成一個字節序列,以確保同一指紋以後在相同情況下可以創建,因此編碼必須是確定的,並且任何附加的數據必須與公鑰一同存放。附加數據通常是使用此公鑰的人應該知道的信息,如:密鑰持有人的身份(此情況下,X.509信任固定的指紋,且所述附加數據包括一個X.509自簽名證書)。
- 在前面步驟中產生的數據被散列加密,如使用SHA家族。
- 如果需要,散列函數的輸出可以縮短,以提供更方便管理的指紋。
產生的短指紋可用於驗證一個很長的公共密鑰。例如,一個典型RSA密鑰的長度會在2048位以上,SHA的指紋卻只有128-512位。
當指紋被顯示時,通常被編碼成十六進制字符串。然後,這些字符串格式化成可讀性字符組。例如,如一個128位的SSH指紋將被顯示為:
43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8