人类可读性的替代方案



我正在研究一个系统,该系统大量利用假名,以使研究人员可用来为关键隐私数据。这些假名应具有以下属性:

  1. 他们不应包含任何信息(例如创建时间,与其他假名的关系,编码数据,…(。
  2. 创建独特的假名应该很容易。
  3. 他们应该是人类可读。这意味着当大声朗读时,人类应该很容易比较,复制和理解。

我的第一个想法是使用UUID4。它们在(1(和(2(上相当不错,但在(3(上没有太多。

一种变体是用更宽的字母编码UUID,从而导致字符串较短(例如,请参见ShortUuid(。但是我不确定这是否真的可以提高可读性。

我目前正在研究的另一种方法是2005年的一篇论文,名为"患者标识符的最佳代码"。旨在完全解决我的问题。那里描述的算法创建了8个字符的假名,具有30位熵。我更希望使用更广泛的审查标准。

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

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

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

proquints

https://arxiv.org/html/0901.4016

https://github.com/dsw/proquint

a uuid4(128位(将转换为8个proquint。如果太多了,您可以取UUID4的最后64位(=只需随机64位(。这不会使它神奇地失去独特性;仅增加碰撞的可能性,这是不是从零开始的,并且您可以通过数学上估算出来以决定是否仍然可以出于您的目的。

在这里您可以读取

生成易于记住的可读性,莎士比亚和语法正确的句子

本文建议使用SHA-256哈希的前几个字符,与Git的作用类似。UUID通常基于SHA-1,因此这并不是那么不同。属性(2(和(3(之间的权衡是字符的数量。

d是数字的数量,您总共获得了2 ** (4 * d)标识符,但是第一次碰撞应在2 ** (2 * d)之后发生。

最大的问题实际上不是关于使用的标识符,而是您处理碰撞的方式。

最新更新