2010-08-27 19 views
8

我需要爲用戶可以記住或至少容易識別的RSA密鑰創建指紋。下面的想法已經浮現在腦海中:容易記住數據的指紋?

  • 將SHA1哈希分解成4比特的部分並將它們用作貝塞爾樣條的座標。繪製樣條線並將該圖片用作指紋。
  • 使用SHA1哈希作爲一些分形算法的輸入。對於一個給定的輸入結果將需要是唯一的,即輸出不能是一半時間的實數平方。
  • 將SHA1哈希映射到單詞列表中的條目(如在拼寫檢查程序或密碼列表中使用的)。這將創建一個由真實單詞組成的密碼。
  • 相反的單詞列表,使用一些其他的大型數據集的像谷歌地圖(地圖SHA1哈希到地圖座標,使用地圖區域(一個或多個)指紋)

任何其他的想法?我確信這是以某種形式實施的。

回答

5

OpenSSH包含類似的東西,名稱爲「可視主機密鑰」。試試這個:

ssh -o VisualHostKey=yes somesshhost 

其中somesshhost是一臺運行SSH服務器的機器。它會打印出服務器密鑰的「指紋」,同時在十六進制,並作爲ASCII藝術圖像可能是這樣的:

+--[ RSA 2048]----+ 
| .+   | 
| + o   | 
| o o +   | 
| + o +   | 
| . o E S  | 
| + * .   | 
| X o .  | 
| . * o   | 
| .o .   | 
+-----------------+ 

或者這樣:

+--[ RSA 1024]----+ 
|  .*BB+ | 
|  . .++o | 
|  = oo. | 
|  . =o+.. | 
|  So+.. | 
|  ..E.  | 
|     | 
|     | 
|     | 
+-----------------+ 

顯然,這受到this article中描述的技術的啓發。 OpenSSH是開源的,具有類似BSD的許可證,所以很可能您可以簡單地重用他們的代碼(它似乎在key.c文件中,功能key_fingerprint_randomart())。

+0

如果僅限於ASCII輸出,這值得研究。 – ApplesOranges 2010-09-12 00:33:11

0

您的第一個建議(繪製每四個字節樣條的路徑,然後使用nonzero fill rule填充)正是我在hashblot中用於可視化的內容。

2

對於項目3,見RFC-1751(單詞列表項) - 一項公約爲人類可讀128位,其中指出,

作者S /密鑰設計了一個系統,使64位一次性密碼 易於人們進入。

他們的想法是將密碼轉換成一個小字符串 英文單詞。英語單詞對於 記住和鍵入的人來說要容易得多。 S/Key的作者開始使用一個包含2048個英文單詞的 字典,長度範圍從1到4個 個字符。由64位密鑰(2^64)覆蓋的空間可由本字典(2^66)中的六個字覆蓋 ,剩餘空間爲 奇偶校驗。例如,十六進制值的S /密鑰一次性密碼:

EB33 F77E E73D 4053 

將成爲以下六個英文單詞:

TIDE ITCH SLOW REIN RULE MOT 

你也可以使用複合指紋,以提高記憶性,就像英文單詞跟隨(或先於)一個或多個與密鑰相關的圖像一樣。

爲了生成圖像,您可以使用諸如Identicon,Wavatar,MonsterIDRoboHash之類的東西。

實施例:

enter image description here enter image description here

enter image description here enter image description here

TIDE ITCH SLOW

REIN RULE MOT