如果两个人想检查他们是否拥有相同的(比如 256 位)私钥,那么通过潜在的公共渠道共享第一个比如 8 个字符的风险有多大?
攻击者能否恢复比这些字符更多的信息,和/或攻击者在给定这 8 个字符的情况下破解密钥的速度有多快?
如果两个人想检查他们是否拥有相同的(比如 256 位)私钥,那么通过潜在的公共渠道共享第一个比如 8 个字符的风险有多大?
攻击者能否恢复比这些字符更多的信息,和/或攻击者在给定这 8 个字符的情况下破解密钥的速度有多快?
提供私钥的任何部分都会降低其安全性,至少在一定程度上是因为它为攻击者提供了更小的潜在密钥空间来探索。
我不明白你想要达到什么目的。两个人要检查他们是否持有相同的信息,唯一需要做的就是交换一个哈希值。
如果您正在设计一个协议并且担心重放攻击,您可以通过使用 HMAC 执行质询响应来防范它。
编辑:
正如DW 有见地的回答中所建议的评论和解释的那样,我需要强调的是,对您的私钥安全性的影响将很大程度上取决于您使用的是什么算法。在最坏的情况下,只泄露私钥的一小部分将完全破坏该密钥的安全性。
对于某些非对称(公钥)密码系统来说,泄露部分私钥可能是灾难性的。确切的风险级别取决于您使用的密码系统。一些例子:
如果您使用 e=3 的 RSA 作为公钥,那么泄露 1/4 的私钥(d 的低 1/4 位)就足以让攻击者重建整个私钥。例如,如果您使用 2048 位 RSA,并且您泄露了私钥的 512 个最低有效位,那么攻击者可以恢复您的其余私钥。这一结果归功于 Boneh、Durfee 和 Frankel。文献中还有其他类似的结果(例如,关于最高有效位、位的随机子集等)。
使用 DSA,如果在每个签名中使用的 nonce 中泄漏了一些位(对于各种签名),这足以恢复私钥。例如,如果您可以观察到 4000 个签名中每个签名中使用的 5 位秘密随机数,则足以恢复 384 位 ECDSA 私钥。这并不完全揭示私钥(它揭示了签名期间生成的其他一些秘密值),但它是相似的。
我意识到其他答案都说没问题。这些答案可能是假设您使用的是对称密钥密码系统。对于大多数对称密钥密码系统,如果您泄露了部分密钥,但仍有足够多的密钥未泄露,那么它们可能仍然是安全的。当谈到非对称密码系统时,情况就不同了。其他答案似乎是假设暴力破解(穷尽所有可能的私钥)是对密码系统的最佳攻击。对于许多非对称密码系统,这个假设是不准确的。
给定这 8 个字符,攻击者破解密钥的速度能快多少?
如果不知道我们在谈论什么样的密钥以及它与什么算法一起使用,就很难回答。
在密钥完全随机的对称加密的情况下(理解每个位在密钥的全局不确定性中所占的比例相等),那么它主要取决于“1 char”在二进制数据方面代表什么。通常,通过显示n bits
,您可以有效地将可能键的数量减少至少2^n
.
1 character = (0 or 1) = 1 bit
: 8 个字符表示减少因子2^8 = 256
.1 character = 4 bits
: 8 个字符表示缩减因子2^32 = 4294967296
.1 character = 6 bits
: 8 个字符表示缩减因子2^48 = 281474976710656
.根据您的加密算法的可能(当前或未来)弱点,哪个 - 根据披露信息的数量 - 可能(或可能不会)用作破解密钥的杠杆。
另请注意,在密钥不是完全随机的非对称加密的情况下(例如 RSA 中的素数模数和指数),泄露n bits
实际上可能会泄露更多有用的信息,并可能导致灾难性的安全损失。
但真正的问题是:
为什么会有人需要这样做?
这种方法不仅会带来潜在的安全漏洞,而且可靠性似乎不符合您的目的,那么剩下的 248 位呢?
您描述的方法只是一个非常简单的哈希函数,它是完全连续的(对完整性检查非常不利)和部分可逆(对安全目的非常不利)。
如果您真的需要这样做,请使用安全且广泛可用的加密哈希函数,例如SHA -256,它会生成比“第一个8 个字符”。
如果您使用非对称加密,则永远不需要共享私钥的任何部分(甚至是哈希),而是使用公钥。
我想说它的范围从“不重要,但有点愚蠢”到“灾难性”,具体取决于“8 个字符”的含义以及使用的算法。
如果将“8 个字符”读取为字面上的 64 位,那么您将密钥大小减少 64 位(如果假设“char”为 base-64 编码字符,那么它只会是 48 位)。
假设“私钥”实际上是指对称算法(不太可能?),这可能是可以容忍的,因为 192 位远非暴力破解的可能。但话又说回来,为什么首先使用 256 位密钥?
假设“私钥,256 位”意味着您使用某种椭圆曲线加密(对于对称密码,“私有”没有什么意义,因为所有密钥都是私有的,而对于 RSA 等人来说,256 位太小而无用) ,您将安全级别从略低于 128 位(目前不可行)降低到略低于 96 位。这是……嗯,不完全可行,但几乎可行。考虑到量子计算还没有完全实现,但已经在路上,“不完全,但几乎”有点灾难性。
毕竟,一个人计划的是最坏的情况,而不是最好的情况。
这是灾难性的,因为这样做绝对是 100% 不必要的。
如果两方共享一个密钥,一个非常明显的确保它是相同密钥的方法是加密一个足够长(比散列输出长)的随机位模式,让另一方解密该位模式,然后发回一个安全的位模式的散列(比如 SHA-256、SHA3 等等)。
第一方可以将其与在原始随机模式上计算散列的结果进行简单的比较。
任何时候都不会传输私钥(或其中的一部分),甚至是所述密钥的散列(这可能非常不可能,但可能会被反转或提供对其中一部分的提示),并且因为有更多随机输入位比输出位,不可能确定从散列值散列的原始位模式,并使用它来获得加密的角度。
攻击者只能看到一个随机位模式,他需要知道(未知)密钥才能获得原始位模式,以及另一个未知位模式的哈希,该位模式可能是许多位模式之一(无法知道哪个位模式) )。