容易记住数据的指纹?

时间:2010-08-27 19:37:48

标签: hash visualization fingerprint

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

  • 将SHA1哈希分成4位的部分,并将它们用作贝塞尔样条曲线的坐标。绘制样条曲线并将该图片用作指纹。
  • 使用SHA1哈希作为某些分形算法的输入。对于给定的输入,结果必须是唯一的,即输出在一半的时间内不能是实心方形。
  • 将SHA1哈希映射到单词列表中的条目(用于拼写检查程序或密码列表)。这将创建一个由真实单词组成的密码。
  • 使用其他大型数据集(如Google地图)(将SHA1哈希映射到地图坐标并使用地图区域作为指纹),而不是单词列表。

还有其他想法吗?我确信这已经以某种形式实施。

4 个答案:

答案 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

您还可以使用复合指纹来提高可记忆性,例如一个或多个依赖于关键字的图像后面(或之前)的英语单词。

要生成图片,您可以使用IdenticonWavatarMonsterIDRobo Hash等内容。

示例:

  

enter image description here   enter image description here

     

enter image description here   enter image description here

     

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中用于可视化的原因。