UUID的人类可读替代方案

时间:2018-03-27 07:03:19

标签: standards uuid human-readable

我正在研究一种大量使用假名的系统,以便为研究人员提供隐私关键数据。这些假名应具有以下属性:

  1. 它们不应包含任何信息(例如创建时间,与其他假名,编码数据的关系......)。
  2. 创建独特的假名应该很容易。
  3. 他们应该是人类可读的。这意味着当大声朗读时,人们应该容易比较,复制和理解。
  4. 我的第一个想法是使用UUID4。它们在(1)和(2)上相当不错,但在(3)上却没有那么多。

    一种变体是使用更宽的字母表对UUID进行编码,从而产生更短的字符串(例如参见shortuuid)。但我不确定这是否真的提高了可读性。

    我目前正在研究的另一种方法是2005年的一篇题为"An optimal code for patient identifiers"的论文,旨在解决我的问题。这里描述的算法创建了具有30位熵的8字符假名。我更愿意使用更广泛审查的标准。

    然后还有git方法:只显示实际假名的前几个字符。但这意味着化名可能在一段时间后失去其独特性。

    所以我的问题是:人类可读的独特ID是否有任何广泛使用的标准?

4 个答案:

答案 0 :(得分:3)

不知道任何广泛使用的标准。这是一个非广泛使用的:

Proquints

https://arxiv.org/html/0901.4016

https://github.com/dsw/proquint

UUID4(128位)将被转换为8个proquints。如果这太多了,你可以取UUID4的最后64位(=只取64个随机位)。这并不会让它神奇地失去独特性;只增加碰撞的似然,一开始就是非零,你可以用数学方法估算它是否仍然可以用于你的目的。

答案 1 :(得分:0)

This article建议使用SHA-256哈希中的前几个字符,与git相似。 UUID通常基于SHA-1,因此并没有什么不同。属性(2)和(3)之间的权衡在于字符数。

使用d作为位数,您总共获得了2 ** (4 * d)个标识符,但是第一次冲突预计会在2 ** (2 * d)之后发生。

最大的问题实际上与您使用的标识符类型无关,而是如何处理冲突。

答案 2 :(得分:0)

上下文

  • 可读的UUID
  • 语言无关的算法
  • 寻找广泛使用的标准

问题

  • 指定一种用于生成“人类可读” UUID(HR-UUID)的算法
  • HR-UUID应该能够抵抗暴力猜测
  • 人类的进入和回忆应该简单明了且不容易出错
  • 具有1个已知的有效HR-UUID在统计上不应与猜测其他有效的HR-UUID

解决方案

  • 使用DiceWare password algorithm
  • 与该线程中提供的其他解决方案相反,此方法通过将问题重铸为密码生成问题来解决人类可读的UUID问题。
  • 与其他地方提供的BubbleBabble解决方案相比,Diceware允许您选择每个UUID中包含多少个元素,具体取决于您希望“滚动骰子”的次数...这意味着您可以选择每个UUID的熵
  • DiceWare密码算法解决了生成高熵密码短语的问题,尽管如此,人类仍然可以轻松输入和记住这些密码短语
  • 以下是Diceware“ UUID”的样本,每个样本均包含六个元素
    crabmeat-coach-properly-driving-yoga-ferret
    edition-mousy-fabric-budding-book-mortuary
    rickety-uncrown-earful-majority-sublet-evade

另请参见

答案 3 :(得分:0)

给你UUID Readable

生成易于记忆、可读的 UUID,即莎士比亚式和语法正确的句子