CryptoNote交易详解
CryptoNote协议是继承了比特币系统的思想,利用环签名技术达到支付的匿名性。Bytecoin和Monero系统都是基于CN协议的。
以下是本人在研究CN协议的交易结构时的一些个人理解,与君共享。
BTC的模型是UTXO模型,其中每一个UTXO都有一个地址,对应一个用户的身份。通常情况下每个用户只有一个对公私钥匙对(实际上是地址/私钥对),所以其上的BTC是可追踪的。
CN的交易模型与BTC一样都是UTXO模型。在CN协议中,每一笔TXO(类似于BTC中的UTXO)都有一个一次性公钥OTPK(one-time public key)对应接收者。那么如何对应接收者,与OTPK的生成过程有关,OTPK需要发送者Bob选取一个随机数r、接收者Carol的两个公钥(接收者具有两对公私钥对),其中随机数r为了一次性公钥的随机性和不可重复性,r通过Carol的一个公钥交换成密文的形式R,交换给了Carol,实际上这一步是一个Diffie-Hellman密钥交换过程。Carol接收到r的密文形式R,结合自己的两个私钥,得到一次性私钥OTSK(one-time secret key),与TXO的OTPK对应。另外,将输出的数额amount字段值添加到交易中,这样就完成的了一笔交易的一个UTXO的数据构造。当然,像BTC一样,一笔交易可以有多个输出。多个输出都这样处理。
以上完成了一笔交易的一个输出的构建UTXO,下面是交易的输入。BTC中交易的输入是多个UTXO,如上所属,一个UTXO会对应一个公钥地址,发送者需要用自己的私钥作签名。这样才可以开启这个UTXO。同样,在CN协议中,TXO的OTPK对应的OTSK来作签名来开启这个TXO。为了匿名地花掉这个TXO_0,发送者需要添加一些额外的TXO组成一个TXO集合来迷惑追踪者。假设额外添加了3个TXO,分别是TXO_1,TXO_2,TXO_3,这三个交易可以是链上已经存在的任意交易。迷惑的结果是,系统只知道Bob花出去的TXO只是这4个其中之一(这里先不考虑数额amount字段对于匿名性的影响)。具体地,如上所述,每个TXO都具有amount和OTPK字段,并且Bob已经恢复出一次性私钥OTSK,Bob额外将一次性密钥OTK的密钥镜像KI(key image)加入到这四个TXO共同组成的TXO集合中,运用环签名方案作一个环签名缀加到交易的最末尾,对应这个TXO集合。当然,像BTC一样,一笔交易可以有多个输入。多个输入都像这样处理。
到这里,可以总结下CN协议中一笔交易的数据结构。如同BTC,CN协议的一笔交易中包含
(1)多个TXO集合(TXO+KI)列表;
(2)一段或者多段额外数据Extra,用来传递前书的随机数r的密文;
(3)交易输出列表,(数额amount+一次性公钥OTPK);
(4)多个环签名的数据,于(1)中的TXO集合一一对应。
在以上(2)中,可以一段额外数据,因为即使这段数据完全相同也不会影响安全性。
用户钱包需要时刻观察已经确认的交易,观察其中的Extra字段的R,计算出一个比对公钥P’,并于交易输出字段的的OTPK比较,若相同,将这个比交易的TXO记录在自己的钱包本地。
OTPK 是如何产生的的
OTSK应该是carol产生的吧