避免 公钥和私钥重用 | Avoiding Key Reuse
交易中,交易的支付者和接收者会暴露自己使用 的公钥或者钱包地址。这使得任何一个人可以使用公开的区块链信息来跟踪一个人的过去和将来的相关交易。
如果多次重用相同公钥 ,或者使用比特币的钱包地址(公钥的哈希值)作为静态支付地址,其他人可以轻易的跟踪钱包所有者的消费习惯,拥有的比特币数量。
其实我们也可也避免陷入这种情况。如果每个公钥地址只使用两次,一次接受付款,一次花掉比特币,用户的金融隐私会得到有效保护。
或者更进一步,在接受付款或者创建找零钱包时,使用新的公钥或者唯一的钱包地址并且结合稍后讨论的其他技术(CoinJoin 或者merge avoidance)结合起来。这使得使用区块链信息来有效的跟踪某个用户的金融往来变得极其困难。
除了隐私性,避免重用公钥还有安全性的原因。防止根据公钥或者签名的对比从而构建私钥进行攻击(下面的这两种总结的更一般的假想攻击的情景)。
- 唯一(非重用)的P2PKH 和P2SH 地址保护了的第一种攻击。通过隐藏ECDSA 公钥直到第一次花掉钱包里的比特币。除非可以在一到两个小时,一个交易被区块链有效的保护需要的时间,重建私钥,否则攻击是十分无用且低效的。
- 唯一(非重用)私钥保护了第二种攻击。每个私钥仅生成一个签名,所以攻击者不会得到私钥的后续签名,来进行基于对比(私钥和签名)的攻击。现存的基于比较(私钥和签名)的攻击只在这种情况是可行的:当签名中使用了不充分的熵,或者通过某种手段,比如旁道攻击。,暴露了使用的熵。
处于安全性和金融隐私的原因,强烈建议开发应用时,避免重用公钥。并且尽可能的阻止用户使用重用地址。如果您的应用程序需要提供一个固定的付款URI,请参阅下面的bitcoin:
URI section 部分。