我需要为用户可以记忆或至少容易识别的RSA密钥创建指纹。我想到了以下想法:
还有其他想法吗?我确信这已经以某种形式实施。
答案 0 :(得分: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()
)。
答案 1 :(得分:2)
对于第3项(单词列表中的条目),请参阅 RFC-1751 - 人类可读 128位的约定 Keys ,注意到
S / Key 的作者设计了一个64位一次性系统 人们可以轻松输入密码。
他们的想法是将密码转换为一串小的密码 英语单词。英语单词对人们来说要容易得多 记住和打字。 S / Key的作者开始于 2048个英文单词的字典,长度从一到四 字符。可以覆盖由64位密钥(2 ^ 64)覆盖的空间 从这本词典中的六个单词(2 ^ 66)剩余空间 平价。例如,十六进制值的S / Key一次性密码:
EB33 F77E E73D 4053
将成为以下六个英文单词:
TIDE ITCH SLOW REIN RULE MOT
您还可以使用复合指纹来提高可记忆性,例如一个或多个依赖于关键字的图像后面(或之前)的英语单词。
要生成图片,您可以使用Identicon,Wavatar,MonsterID或Robo Hash等内容。
示例:
TIDE ITCH SLOW
REIN RULE MOT
答案 2 :(得分:0)
我找到了一种叫做随机艺术的东西,它从哈希中生成一个图像。有一个Python实现可供下载:http://www.random-art.org/about/
还有一篇关于使用随机艺术进行身份验证的论文:http://sparrow.ece.cmu.edu/~adrian/projects/validation/validation.pdf
从1999年开始;我不知道是否对此进行了进一步的研究。
答案 3 :(得分:0)
您的第一个建议(绘制每四个字节的样条线路径,然后使用nonzero fill rule填充)正是我在hashblot中用于可视化的原因。