注:作者离成为一名密码学家还差得远,请读者对准确性持怀疑态度。
私钥镜像用于检测双花支付。
在Monero中,资金总是发送到一个一次性的公钥p,与之相关的一次性私钥x特定于未使用的输出(output)。
由于输出(output)只能使用一次(在重过程中),因此与之相关的私钥也只能使用一次。
因此,特定的私钥镜像i出现在区块链上意味着相关的输出已经被花费,并且不允许随后的尝试。
整个方案是必要的,因为Monero使用环签名,这使得不可能知道到底是谁签署了交易。这就是为什么比特币类型的双花在这里是行不通的。
定义
I = x*Hp(P)
其中:
- I -私钥镜像 (或者 "密钥镜像" )
- x - 用于解锁未花费的输出(output)的一次性私钥
- P -未花费输出的一次性公钥
- Hp() - 接受EC点作为参数的哈希函数
P 值来自:
P = xG
G为 edwards25519 的基点. 用xG代替P,我们得到:
I = x*Hp(xG)
密钥镜像I私钥x的单向函数。
参考
- StackExchange answer
- Another SE answer
- Critical bug regarding key image verification that was once present in Monero