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