比特币开发系列 - 密钥即财产
区块链是一个巨大的数据库,每个人都可以查看并提交新的交易。交易建立了财产的转移,并且无论转移涉及的资产是什么,财产都严格绑定到 密钥(keys) 上。
如果我们将领域限制在比特币的核心业务,即数字货币,密钥使我们能够花费我们持有的资金。我们丢失家里的钥匙,就无法进入。我们丢失比特币的密钥,就会丢失比特币。就是这么简单。比特币也可以共享,就像共同拥有的银行账户一样。在这种情况下,所有共同所有者(或者只有一些特权所有者)必须同意花费资金,否则交易将无法进行。
在过去几年中,我们看到银行账户从特定国家的坐标系统转移到标准的IBAN(国际银行账号)。IBAN是一个长长的,主要是数字的字符串,与整个银行网络中的唯一银行账户相关联。我们分享我们的IBAN以接收他人的钱,同时我们可以确保透露IBAN不会损害我们的账户凭据。
比特币通过公钥密码学(PKC)实现了这一点。我们被给予 私钥(秘密密钥)来管理和花费我们的资金,但我们分享公钥(非秘密密钥)来生成能够接收资金的端点。同时,公钥可以在一定程度上说服他人这笔钱是我们的。在处理有价值的数字资产时,这是一种广泛使用的技术。使其几乎无法破解的原因是,通过拥有私钥,我们能够推导出公钥,而反之则是不可行的,就像单向函数一样。
比特币密钥属于椭圆曲线 (EC)的领域。不涉及技术细节 ,EC 数学之所以被选择,是因为它以安全且非常高效的方式实现了 PKC 的目的。以下是比特币需要 PKC 的任务:
如果你对密码学稍有了解,你可能已经注意到两个缺失的功能:加密和解密。事实上,区块链没有加密,因此 PKC 仅用于签名。
签名是一种验证数字消息(读取一串字节)的手段,因为消息接收者随后能够验证签名的作者。不对称性在于私钥生成签名,而公钥验证签名。所有这些如何与数字货币相关?通过签名,我们同意花费一定金额的资金。通过验证我们的签名,第三方可以确认那笔钱是我们的并批准交易。
让我们稍微更实际一点。假设所有各方都同意:
接下来是我们简化的消息签名过程:
digest = H(message)
signature = ec_sign(C, digest, private_key)
其中生成的签名只是一串字节。另一方面,当向第三方发送我们的消息时,我们还附上上述签名和我们的公钥。接收者现在可以验证签名:
digest = H(message)
is_auth = ec_verify(C, digest, signature, public_key)
如果验证成功,则消息是真实的。ec_* 函数涉及复杂的 EC 数学,我不会深入探讨。不要害怕,即使不是加密大师也能处理区块链。毕竟,在我们解剖交易之前,这甚至不会那么清晰。
你已经了解到区块链交易建立了财产的转移 - 无论是货币还是任何其他资产 - 并且数字财产与加密密钥绑定。比特币依赖于椭圆曲线密码学,这是一系列尖端的公钥密码学算法。签名证明了数字财产。
在下一篇文章中,你将在代码中练习一些 EC 加密。如果你喜欢这篇文章,请分享。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!