如果之前已经回答过这个问题,我深表歉意,但我找不到任何东西。这个问题的灵感来自对 SO 上另一个与安全相关的问题的评论:
具体评论如下(已接受答案的第六条评论):
...其次,更重要的是,这将只返回十六进制字符 - 即 0-9 和 AF。它永远不会返回高于 F 的字母。当可能存在(并且几乎可以肯定存在)许多其他有效字符时,您将输出减少到仅 16 个可能的字符。
– AgentConundrum 2012 年 10 月 14 日 17:19
这让我开始思考。假设我有一些任意系列的字节,每个字节随机分布在 2^(8) 上。让这个键是 A。现在假设我将 A 转换为它的十六进制字符串表示,键 B(例如 0xde 0xad 0xbe 0xef => "deadbee f")。
有些事情是显而易见的:
- 长度(B)= 2 长度(A)
- B 中的符号限制为 2^(4) 个离散值,而 A 中的符号范围超过 2^(8)
- A 和 B 代表相同的“数量”,只是使用不同的编码。
我的怀疑是,在这个例子中,这两个密钥最终会同样安全(否则每个密码破解工具只会将一种表示转换为另一种表示以进行更快的攻击)。然而,在这个人为的例子之外,我怀疑有一个重要的安全道德可以从中删除。尤其是在选择随机源时。
所以,简而言之,从安全的角度来看,哪个更可取:更长的密钥或值覆盖更多离散符号的密钥?
我对这背后的理论真的很感兴趣,所以对于任何能够提供结论背后的数学/证据的人来说,额外的金星(或者至少是我不朽的钦佩)。