我正在研究区块链,并且一直专注于允许身份验证的加密协议。公钥和私钥的数字签名似乎很可靠,我专注于ED25519算法。但是在某些地方,有人说不公开公钥,因为通过公钥和签名,它将公开可以导出私钥。有人说量子计算机可以轻松地完成这项任务。

起初,我认为使用比特币地址的原因是使公钥“易于阅读”。但是我看到有些安全点具有公钥哈希。

所以我有一些疑问:


公开它真的有风险吗密钥没有经过任何处理?
如果是的话,还有什么选择?
例如,比特币如何使用公钥哈希而不是公钥本身来验证交易签名? (毕竟,将sha256哈希值反向还原为原始值是“不可能的”)


评论

我认为,如果量子计算完全过时,比特币将无法以当前形式生存。没有QC,公开密钥当然是可以的。不,没有公钥您将无法验证。

我们是否有替代方案来实现可抵抗量子计算的安全协议?还是仅仅是“现在不值得思考”的情况?

去年12月,NIST发出了征集关于评估后量子算法的标准的提案。我们距离拥有广泛接受的算法还差几年。 csrc.nist.gov/groups/ST/post-quantum-crypto/documents/…

在子弹3上:ECDSA可以将签名中的公钥恢复到少数候选者之内,而比特币会添加一些位以在这些候选者中进行选择,然后验证地址很简单;参见crypto.stackexchange.com/questions/18105/…

一般而言,您似乎对密码学了解甚少,我建议您不要担心后量子密码学。专注于现代密码学的基础

#1 楼

从密码学的角度来看,可以公开一个公开密钥以揭示其价值。涉及公钥/私钥对的密码学中最基本的假设是,公钥的值是公钥。因此,它的名称。

对手不能更改公钥非常重要。必须避免任何允许更改的公开内容!

此外,公钥具有很高的特征;因此,为了保持不可追踪性(匿名),您可能不想透露自己的公钥。但是,这可能还不够:除非设计签名方案以防止这种情况发生,否则揭示一个人的签名可能允许可追溯性(对于某些系统,甚至可以从签名中重建公钥)。正确的是,不公开公钥会使对手失去足够强大的对手可以用来查找(等效)私钥并破坏系统的信息。但是我们需要一个公钥才能公开,以便可以公开检查使用所有者的私钥所做的签名。得出一个结论,即不要泄露公开密钥,就像在说要对银行安全室的位置保密:这是设计所排除的一种假设,因为这会使设计不符合预期的目的。 />是的,可用于密码分析的假想量子计算机将允许对手攻击我们现在(以及在区块链中)使用的那种已知公钥。另一方面,


目前,可用的量子计算机对密码分析的作用不如可用的光剑闯入银行的安全室。
有合理的理由担心我们使用的签名系统,对于使用这种可以用于密码分析的假设量子计算机的攻击者,一些签名与攻击者的公钥一样好。


更新:关于


例如,比特币如何使用公钥哈希而不是公钥本身来验证交易签名?


它获取公钥,通过对哈希进行散列并与之进行比较来对其进行验证(或拒绝)。受信任的公共密钥哈希,然后根据已验证的公共密钥来验证交易签名。有关更多信息,请参见indiscreteLogarithm的答案。

评论


$ \ begingroup $
好答案!我试图了解基于散列的签名,有一些有趣的观点,它似乎可以有效地抵御“假设的量子攻击”,但对于处理当今(以及太空)现有的经典计算却效率不高。我正在寻找一种方法,以确保假定用户在保留“产生其身份的秘密”方面有良好的做法,没有人可以克隆其身份。在这种情况下,在当前情况下,似乎公钥协议是完美的。
$ \ endgroup $
– VictorFrança
17年6月18日在15:42

$ \ begingroup $
@fgrieu已集成到其他答案中。订单由于Anthony的修改而更改,因此我点击了错误的订单。要么,要么系统搞砸了:)
$ \ endgroup $
–马腾·博德威斯♦
17年6月18日在17:15

$ \ begingroup $
由于某种原因,这个问题中最有趣的部分被忽略了:“比特币如何通过公钥哈希而不是公钥本身来验证交易签名?”
$ \ endgroup $
–shal
17年12月31日在9:30

$ \ begingroup $
@shal:我试图塞住那个洞
$ \ endgroup $
–fgrieu♦
17年12月31日在10:27

$ \ begingroup $
@fgrieu我建议您更改有关签名的比特币验证过程的最后编辑。您所描述的内容在理论上是可行的,但并不是实现比特币协议的方式。请参阅我的答案以获取更多详细信息。
$ \ endgroup $
–离散对数
18年1月1日在20:47

#2 楼

量子计算的出现,在实验室QC之外真正可用,实际上将成为依赖Shor's Algorithm等人的离散对数问题难度的任何加密的终结。这并不是说所有基于模数的加密方案都将消失,可能仅仅是基于非对称公钥/私钥的方案。

那,QC并不是魔术,即使它们在理论上有其局限性。强大的计算能力,并且使用QC来发现Sophie Germain素数是如此之大,以至于甚至使QC不切实际都容易得多。即使事实并非如此,也存在其他类型的算法,例如

来自军事背景,我会说,任何时候只要您可以剥夺敌人的信息,那么您就应该这样做;如果出于其他原因,除了迫使他们尽力(读“花钱”)去发现这个秘密,无论这些知识最终是多么平凡或无用。发现公钥(如果已保守秘密)所花费的金钱就是他们不必破坏该密钥或破坏下一个密钥的金钱。

评论


$ \ begingroup $
空格不能格式化,输入Enter可以换行。但是,两次输入会很好地将您的答案分成几部分,您的答案确实需要一些答案-以便您以后知道任何帖子-当然欢迎使用加密技术:)
$ \ endgroup $
–马腾·博德威斯♦
17年6月18日在17:00



$ \ begingroup $
问题是:在公共密钥协议中,我们使用签名作为身份证明(真实性),谁想要验证此公共密钥证明。在封闭和受控的情况下,可以保证只有“验证器”具有公共密钥。但是,在一个只有一个人可以签名但每个人都可以选择验证签名的系统中,如何使公钥保密?我看不到任何实用的形式。
$ \ endgroup $
– VictorFrança
17年6月18日在17:26

#3 楼

总的来说,公开密钥是可以公开的。但是,在某些情况下,知道公钥会打开进一步的攻击媒介。例如,如果两方通信,他们通常会首先进行一些密钥交换,并且仅在加密通道上进行身份验证。如果公钥系统存在某些弱点,例如密钥生成中的随机性较差,则可以使用魔术(量子)分解算法或此类方法来揭示公钥,这将允许进行脱机攻击。如果我们有一个纯文本/密文对或一个纯文本和签名,我们也许可以发起离线攻击,但是在某些情况下很难获得这样的对,例如,在上述情况下,
所有这些都是针对假设攻击的保护(也许是随机的,这可能是合理的),但是如果您不必这样做,则无需向攻击者提供任何东西。

另一方面,广泛发布您的公钥可以防止其他攻击。例如说服某人使用了错误的公钥。我们看到https向这个方向发展。证书透明性可能会大大提高安全性。

#4 楼

您的大多数问题已包含在其他答案中,因此,我将集中讨论其余问题:


例如,比特币如何使用公钥哈希而不是公共密钥来验证交易签名?钥匙本身? (毕竟,将sha256哈希值反向转换为原始值是“不可能的”)。


在比特币Wiki中对此进行了简要描述。基本上,每个比特币交易都有一个或几个输入,这些输入是所消费硬币的来源,因此每个输入都对应于当前交易者在其中接收硬币的先前交易的输出。

对于每个输入,都有一定的条件必须满足(在所谓的脚本中定义),以证明花费者对这些硬币的所有权(即证明它们拥有所述过去交易的目的地地址)。通常,这是通过提供一个




来完成的,该公钥经过散列后会产生嵌入在脚本中的目标地址(...),并且
签名以显示与刚刚提供的公钥相对应的私钥的证据。




如您所见,在消费硬币时,涉及的公钥(基本上是用户)地址)必须公开,并且从那时起就容易受到针对椭圆曲线离散对数问题的攻击(例如,通过量子计算机)。这是强烈建议(通常在钱包中自动实现)不要重复使用地址进行多次交易的原因之一。

#5 楼

假设对手有一台量子计算机。如果对手有时间在变得无关紧要之前对公钥运行它,那么每个量子前的公钥签名方案都会被破坏。如果对手没有时间在变得无关紧要之前没有时间在公钥上运行该怎么办?例如,在比特币中,交易(几乎)是一条签名的声明,内容为


请发送0.042 BTC到其SHA-256哈希为0x2ef20003e34f7113dfbb26b37e7544a657208aa4f11ffda8781d75e1bda23a09的公钥。真诚的,pubkey 0x40e0cb242a51f749b028a4a3c0895000dc5c3bea58ab7d344e5d0a611529ef04。


只要您只使用一次公钥,对手只有在网络接受交易尝试进行任何其他交易之前的时间。交易的发送者将来伪造签名是无关紧要的。如果对手想要由交易的接收者伪造签名,他们还必须撤消SHA-256,这是一个相当困难的问题。对手可以尝试并行化计算,但是如果盗窃是所有有争议的问题(可能并非如此;错误的归因或其他各种方式可能对对手有价值),那么并行化的计算就不会花费更多比0.042 BTC浪费钱还多。这也只是一个键的故事。如果对手同时破坏许多钥匙会怎样?碰巧的是,Pollard的$ \ rho $算法同时破解许多密钥的速度比独立破解许多密钥的速度快。 (我不确定Shor的多目标故事是什么。)

现在考虑一个超出比特币的假设应用程序,在该应用程序中,只有选定的验证者才可以学习公钥,合法方希望验证者验证身份。如果对手甚至没有看到公钥怎么办?对手能否从签名或签名集合中恢复公钥,从而用量子计算机破坏密码系统? (当然,即使答案是否定的,也不能排除量子对手在不恢复公钥的情况下伪造签名的能力,但是从直观上看,这似乎不太可能,我暂时不会解决这个扩展的问题。) br />
在ECDSA中曲线$ E / \ mathbb F_p $上,在消息$ m \ in \ {0,1 \中,在公钥$ A \ in E(\ mathbb F_p)$下签名。 } ^ * $是一对$ r \ in \ mathbb F_p $和$ s \ in \ mathbb Z / \ ell \ mathbb Z $,其中$ \ ell = \ #E(\ mathbb F_p)$,满足等式$$ r = x([H(m)\,s ^ {-1}] B + [rs ^ {-1}] A),$$其中$ B \ in E(\ mathbb F_p)$是标准基点。 \ mathbb Z / \ ell \ mathbb Z $中$ a \的知识,使得$ A = [a] B $使得给定均匀随机$ r $的$ s $易于求解。但是,我们也可以求解公钥-不是唯一的,而是足够接近以伪造签名的可能性很小:通过在$ x(R)= r $中找到点$ R \ in x ^ {-1}(r)$ ,因此$ R \ in \ pm [H(m)\,s ^ {-1}] B + [rs ^ {-1}] A $,我们可以计算$$ A \ in [r ^ {-1 } s](R \ pm [H(m)\,s ^ {-1}] B),$$等,因此从单个签名中很容易恢复验证签名的两个公钥之一。然后,使用量子计算机的对手可以使用Shor算法解决椭圆曲线离散对数问题。因此ECDSA不能针对这种威胁模型提供安全性。

那Ed25519呢?消息$ m \ in \ {0,1 \} ^ * $在公钥$ A \ in E(\ mathbb F_p)$下的Ed25519签名是对$ R \ in E(\ mathbb F_p)$和$ s \ in \ mathbb Z / \ ell \ mathbb Z $,使得$$ [s] B = R + [H(\下划线R \ mathbin \ Vert \下划线A \ mathbin \ Vert m)] A。$$如果我们有$ \下划线A $(点$ A $的编码),那么我们可以恢复$$ A = [H(\下划线R \ mathbin \ Vert \下划线A \ mathbin \ Vert m)^ {-1} ]([s] B-R),$$,但这是个问题。这是否意味着Ed25519提供了针对此威胁模型的安全性?我不知道!这需要进一步分析。

RSA-FDH这样的RSA签名呢?消息$ m $上的公钥$ n $下的RSA-FDH签名是元素$ s \ in \ mathbb Z / n \ mathbb Z $,这样$ s ^ 3 \ equiv H(m)pmod n $ ,其中$ H \冒号\ {0,1 \} ^ * \ to \ mathbb Z / n \ mathbb Z $是统一的随机函数。如果拥有量子计算机的对手知道了$ n $,他们可以使用Shor算法对其进行分解。

现在,单个签名不会显示$ n $。有了签名语料库,对手就可以解决德军坦克问题,以区分$ n_0 $以下的签名与$ n_1 $以下的签名,并对签名者进行匿名处理-这不能保证对手可以足够精确地学习$ n $以应用Shor算法或雇用Don Coppersmith找出它的出色变体,但也不排除它。

如果我们选择第一个$ s_i = H(m,i)^ d \ bmod n $为$ i = 0、1、2,\ dots $使得$ s_i \ bmod n <2 ^ {\ lfloor \ lg n会怎样呢? \ rfloor} $通过拒绝采样?这不应大大降低基础签名方案的安全性:如果在给定签名方案涵盖$ \ mathbb Z / n \ mathbb Z $的所有元素的情况下,对手可以以不可忽略的概率计算立方根,那么他们很可能可以计算立方根在给定的签​​名方案仅覆盖$ 2 ^ {\ lfloor \ lg n \ rfloor} $以下的元素的情况下,最坏的概率大约只有一半。 (Caveat开发人员:我只是互联网上的一个食尸鬼,我绝对不是您的密码专家……而这个初稿是完全错误的。)

评论


$ \ begingroup $
Nitpick:比特币地址不仅是SHA256,而且是RIPEMD160(SHA256(pubkey_encoding))。而且一个txn(通常?几乎总是?)具有多个输出,至少一个到与输入相同的所有者拥有的地址,但正如Indiscrete所指出的那样,建议不要使用相同的地址。当然,这些不会影响您论点的实质。
$ \ endgroup $
–dave_thompson_085
18年1月1日,0:41

$ \ begingroup $
@ dave_thompson_085是的,这就是我为什么说“非常近似”的原因!
$ \ endgroup $
–吱吱作响的s骨
18年1月1日在15:57