【中亚国际博览会】当我们收到别人的比特币转账时,需要给对方的看似混乱的字符串就是比特币地址。那么,它背后的基本原理是什么呢?为什么不直接用地址代替公钥接收比特币?为什么每次转账都是用一个地址换一个新地址的最佳做法?
基本原理
先说地址的基本原理,地址是怎么产生的,为什么地址里的钱可以用私钥转移。
通过多步操作从私钥获得地址。比特币采用椭圆曲线加密,私钥随机选取。私钥可以通过椭圆曲线密码算法计算公钥,公钥的地址通过两次哈希得到。所有计算步骤的算法都是公开的、单向的。从地址推导出公钥很难,从公钥推导出私钥也很难。
注意,密码学语境中的“难”是指理论上可以实现,实际上不可能实现。当然,比特币地址也分不同的类型,常见的有两种:一种是Pay-to-PubKeyHash (P2PKH),即公钥哈希地址。另一个是Pay-to-ScriptHash (P2SH),这是脚本地址。在后续的讨论中,我们都集中在第一种情况。
比特币的基本转账原理是用私钥签署交易授权转账。如果我想把和我地址相关的比特币转给你,我只需要向全网证明我是地址对应的私钥持有人。
每次转账,我都把公钥和这次转账的数字签名公布到全网。而公钥和数字签名可以让整个网络相信我确实持有私钥,而不会暴露私钥。私钥可以计算公钥,地址是公钥的哈希,所以私钥和地址的联系很明显。
这是比特币地址的基本原理。
为什么按地址而不是公钥收钱?
现在,我们来思考这个问题。比特币系统为什么要发明地址而不是直接用公钥收款?
这个地址会让我们的货币更安全。当我们收到比特币的时候,唯一需要接触到网络的就是我们的地址。注意,公钥是不能根据地址倒序的,所以如果我的地址只支付一次,那么其他人就不会知道我的公钥。
虽然当代密码学可以在认为根据公钥很难计算出私钥的基础上运行,但毕竟公钥和私钥之间有明确的数学关系,所以用公钥获得私钥所需的计算能力会大大降低。所以用地址代替公钥来收钱会让系统更安全。假设未来计算机会突飞猛进的发展,比特币使用的椭圆曲线密码会被破解,地址里的硬币就很难被窃取。
为什么地址只使用一次
比特币地址设计的初衷是让每个人每次使用后都可以更改,这也是为什么很多钱包软件每次都会为我们生成不同的地址。
首先,如果我使用地址转账,那么我需要签署交易并公布公钥。根据前面的讨论,公钥暴露会降低比特币地址的安全性。同时,更重要的是,如果数字签名不是离线完成的,很有可能私钥本身并不完全安全可信。
其次,用同一个地址收钱甚至不止一次都不好,因为会降低隐私。比特币的所有交易数据都是公开可追溯的。一旦我们在某次交易中泄露了我们的物理信息,坏人就可以确认这个地址是谁的。坏人可以直接在这个地址查询总余额,可能会带来人身安全问题。
简而言之,最佳实践是每个地址只使用一次。如果涉及变更,您可以设置一个特殊的变更地址。
摘要
关于比特币地址的原理和注意事项就说到这里吧。需要记住的关键信息是:第一,可以根据私钥计算出地址,所以可以用私钥转出地址中的货币。
第二,地址不会暴露公钥。一旦公开密钥暴露,这个地址的安全性就会降低。
第三,同一个地址的重复使用会降低安全性和私密性,所以每次使用都必须更换地址。