Hash 易于记忆的数据指纹?

Hash 易于记忆的数据指纹?,hash,visualization,fingerprint,Hash,Visualization,Fingerprint,我需要为RSA密钥创建指纹,用户可以记住或至少容易识别。我想到了以下想法: 将SHA1散列分解为部分,例如4位,并将它们用作贝塞尔样条曲线的坐标。绘制样条线并将该图片用作指纹 使用SHA1散列作为某些分形算法的输入。对于给定的输入,结果必须是唯一的,即输出不能是一半时间的实心正方形 将SHA1哈希映射到单词列表中的条目(在拼写检查或密码列表中使用)。这将创建一个由真实单词组成的密码短语 不要使用单词列表,而是使用其他一些大型数据集,如谷歌地图(将SHA1哈希映射到地图坐标,并将地图区域用作指纹

我需要为RSA密钥创建指纹,用户可以记住或至少容易识别。我想到了以下想法:

  • 将SHA1散列分解为部分,例如4位,并将它们用作贝塞尔样条曲线的坐标。绘制样条线并将该图片用作指纹
  • 使用SHA1散列作为某些分形算法的输入。对于给定的输入,结果必须是唯一的,即输出不能是一半时间的实心正方形
  • 将SHA1哈希映射到单词列表中的条目(在拼写检查或密码列表中使用)。这将创建一个由真实单词组成的密码短语
  • 不要使用单词列表,而是使用其他一些大型数据集,如谷歌地图(将SHA1哈希映射到地图坐标,并将地图区域用作指纹)
还有其他想法吗?我确信这已经以某种形式实现了。

包含类似的内容,名称为“visual host key”。试试这个:

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.     |
|                 |
|                 |
|                 |
+-----------------+
或者像这样:

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

显然,这是从中描述的技术中得到启发的。OpenSSH是开源的,具有类似BSD的许可证,因此您可以简单地重用他们的代码(它似乎在文件中,function
key\u fingerprint\u randomart()
)。

我发现了一种叫做random art的东西,它可以从散列生成图像。有一个Python实现可供下载:

还有一篇关于使用随机艺术进行身份验证的论文:

从1999年开始;我不知道是否对此做了进一步的研究。

您的第一个建议(每四个字节绘制一条样条线的路径,然后使用填充)正是我在中用于可视化的建议。

对于第3项(单词列表中的条目),请参见RFC-1751-人类可读128位键的约定,注意到

S/Key的作者设计了一个系统,可以一次性使用64位 密码便于人们输入

他们的想法是把密码转换成一串小密码 英语单词。英语单词对人们来说更容易理解 记住和打字。S/Key的作者以 2048个英语单词的词典,长度从1到4个不等 人物。可能会覆盖64位密钥(2^64)所覆盖的空间 从这本词典(2^66)中删去六个单词,还有空间 对等例如,十六进制值的S/Key一次性密码:

    EB33 F77E E73D 4053
将成为以下六个英语单词:

    TIDE ITCH SLOW REIN RULE MOT
您还可以使用复合指纹来提高记忆性,例如由一个或多个键相关图像跟随(或跟随)的英语单词

要生成图像,可以使用、或

例如:

潮水止痒

勒令运动


如果您仅限于ASCII输出,那么这是值得研究的。