技术 › 密钥与地址
私钥
花费私钥 b、查看私钥 a 及其对应的公钥 B 和 A
简而言之
门罗币钱包就是一对标量:b(花费私钥)和 a = Hs(b)(查看私钥)。它们的公钥版本为:B = b·G 和 A = a·G。地址就是把 B 和 A 写在一起。
花费私钥
花费私钥 b 是一个模 l 的随机标量。在经典格式中,25 个单词的助记词就是 b,只是用单词写出来而已。生成方法:
- 取 32 个随机字节(为了分布均匀也可以更多);
- 按小端序把它们读作一个数;
- 对
l取模(sc_reduce32)。
花费私钥有两个用途:计算一次性输出的私钥(用于签名花费)和计算 key image。
查看私钥
查看私钥本可以是一个独立的随机数,但标准钱包会从花费私钥派生它:
a = Hs(b) = Keccak256(b) mod l
这就是为什么一个助记词就足以恢复两把私钥。查看私钥用于扫描区块链:对于每笔交易,钱包计算共享秘密 8·a·R,并检查某个输出是否发给自己(详见一次性地址)。
公钥
B = b·G A = a·G
两个曲线上的点,各 32 字节。它们不是秘密:你的地址就是由它们构成的。
谁能做什么
| 你拥有 | 你可以 | 你不能 |
|---|---|---|
A, B(地址) | 向这个钱包转账 | 看到任何东西 |
a, B(只读钱包) | 找到收到的输出及其金额 | 花费;可靠地看到支出 |
a, b | 一切 | —— |
Carrot 带来的变化
有了 Carrot,密钥层级会更深:分别有用于“查看收入”、“查看全部”、“生成 key image”的独立密钥。对于现有钱包,a 和 b 照常可用。