Elea Notes.

词条 · 加密与分布式 · 入门

密钥对

一对数学上绑定的钥匙:私钥留着签名,公钥公开验签,且从公钥推不出私钥。

也称:密钥对、key pair、keypair、公私钥对、私钥、public key、private key

先看一个麻烦

你要向一千个陌生人证明”这条消息是我发的”。

用密码?那你得事先跟每个人商定一个密码,一千个人一千个密码,而且任何一个人泄露了密码,别人就能冒充你。

朴素办法:所有人共用一个密码

设一个大家都知道的密码。这样只需记一个。

但”所有人都知道”意味着所有人都能冒充你。共享密钥能证明”消息来自这个群体”,无法证明”来自你”。这个矛盾在对称密钥体系里无法解决。

机制:两把钥匙,功能不对称

密钥对的做法是让加锁和开锁用不同的钥匙:

私钥(private key)  只有你有        用来「签名」
   |
   | 单向数学关系,正向易算、反向不可行
   v
公钥(public key)   随便公开        用来「验签」

关键性质有两条:

  1. 私钥能生成一个签名,任何持有公钥的人都能验证它确实来自对应私钥。
  2. 从公钥无法反推出私钥。

于是那一千个陌生人只需拿到你的公钥(可以公开贴出来),就能各自验证你的签名。而没有私钥的人伪造不出通得过验证的签名。

回访:比特币里的”你有多少钱”

比特币没有账户,只有一堆被锁在公钥上的钱(见 UTXO)。所谓”你有 3 个币”,准确说法是”链上有一笔 3 个币的输出,锁在你的公钥上”。

花掉它的唯一方式是用对应私钥签名。这带来一个后果:私钥丢了,钱就永久消失。没有客服、没有找回流程、没有任何人能帮你——因为系统里根本不存在”你是这笔钱的主人”这个记录,只存在”能签出有效签名的人是主人”这个规则。

白皮书对此的表述一贯是 public key,从不说”账户”或”钱包”(wallet 在原文中 0 次)。

边界

密钥对不做加密(虽然某些体系可以)。比特币里密钥对只用来签名和验签,交易内容全部公开可见——链上没有任何加密数据。

“公钥就是地址”也不准确。比特币地址是公钥经过哈希再编码得到的,多了一层。