0

我正在考虑散列敏感 ID 数据的小块,但一旦被混淆,我需要保持数据块的完整唯一性。

所以,我想出了加密一些公开的输入数据(比如 128 位零)的想法,并使用我想要混淆的数据作为密钥/密码,然后将其丢弃,从而保护原始数据免受永远被发现。

我已经了解散列算法,但我的问题是我需要保持完全的唯一性(一般来说是输入到输出的1:1 映射),同时仍然无法检索实际输入。散列无法提供此功能,因为在此过程中会丢失信息。

数据一旦“加密”就没有必要被检索。从那时起,它只能用作 ID 号。

实际的 GUID/UUID 在这里不合适,因为我需要手动控制每个标识符的标识符。ID 不能是未知的或任意生成的数据。


编辑:为了明确这些标识符是由什么组成的:

  • (未加密) 64 位时间戳
  • ID 生成计数器(每个文件类型一个计数)
  • 随机数据(使多个加密密钥不同)
  • MAC 地址(或者如果不可用,设置最高位 + 随机数字)
  • 其他 PC 特定信息(来自注册表)

整个内容加起来应该是 192 位,但加密部分的内容大小可能会有所不同(这绝不是最终规范)。


鉴于:

  • 静态 IV 值
  • 任意 128 位密钥
  • 静态 128 位输入

在给定相同的输入和 IV 值的情况下,AES 密钥的处理方式是否会导致1:1 key<---->output映射?

4

1 回答 1

4

不。抽象地说,AES 是一系列排列,您可以使用密钥选择一个随机排列。对于其中一种排列(即在给定的 AES 密钥下进行加密),您不会遇到冲突,因为排列是双射的。

但是,对于两种不同的排列(即在不同的 AES 密钥下进行加密,这就是您所拥有的),无法保证不会发生冲突。事实上,由于生日悖论,碰撞的可能性可能比你想象的要高。

如果您的 ID 很短(< 1024 位),您可以对它们进行 RSA 加密,这样就可以满足您的需求。你只需要忘记私钥。

于 2012-07-16T21:11:01.663 回答