【发布时间】:2012-07-16 00:31:03
【问题描述】:
我正在考虑对敏感 ID 数据的小块进行散列处理,但我需要在被混淆后保持数据块作为一个整体的完全唯一性。
所以,我想出了加密一些公开输入数据(例如,128 位零)的想法,然后使用我想要混淆的数据作为密钥/密码,然后抛出,从而保护原始数据不被发现。
我已经了解散列算法,但我的问题是我需要保持完全唯一性(一般来说是1:1 映射输入到输出),而仍然无法检索实际输入。哈希无法提供此功能,因为在此过程中会丢失信息。
数据一旦“加密”就不必再检索了。以后只能作为身份证号码使用。
实际的 GUID/UUID 在这里不合适,因为我需要手动控制每个标识符的标识符。 ID 不能是未知或任意生成的数据。
编辑:明确什么这些标识符是由:
- (未加密) 64 位时间戳
- ID 生成计数器(每种文件类型计数一次)
- 随机数据(使多个加密密钥不同)
- MAC 地址(或者如果它不可用,设置最高位 + 随机数字)
- 其他 PC 特定信息(来自注册表)
整个内容加起来应为 192 位,但加密部分的内容大小可能会有所不同(这绝不是最终规范)。
鉴于:
- 静态 IV 值
- 任意 128 位密钥
- 静态 128 位输入
在给定相同的输入和 IV 值的情况下,AES 密钥的处理方式是否会导致 1:1 key<---->output 映射?
【问题讨论】:
-
您是否有证据支持使用敏感数据作为密钥而不是有效负载更安全的观点?
-
你的“敏感ID数据”来自什么样的数据空间?例如,如果您的 ID 数据是美国社会安全号码,那么其中只有十亿个,因此对于希望逆转您的混淆的攻击者而言,搜索空间非常小。
-
还有,为什么ID不能是“任意生成的数据”?为什么不能使用递增的数字?
-
不能单独使用递增的数字。数据将是 MAC 地址、其他一些特定于 pc 的信息、随机生成的位以及最后一个基于文件类型的递增计数器的组合。我希望能够生成每个文件类型和每个单独文件都不同的唯一 ID,并且一旦生成就不会更改。但我不希望 MAC 地址或其他 PC 特定数据暴露给所有人看。如果我在使用密钥数据加密其他内容后完全扔掉密钥数据,那么应该没有办法检索密钥,对吗?
-
另外,时间戳包含在另一个外部未加密的 64 位中。
标签: encryption cryptography aes uniqueidentifier