Monero 名词解释
Monero(XMR) 是一个安全,隐私和不可追踪的加密货币。通过使用密码学中一种特殊的方法,门罗确保了所有交易保持 100% 的不可关联和不可追溯性(unlinkability and untraceability)。
- Unlinkability: 对于任意的两笔交易,无法证明这两笔交易是发送给同一个人。
- Monero中实现这种特性使用了Stealth Public Address,每次发送方发送XMR时都会发送到随机生成的这个地址,称之为Stealth Public Address。
- Untraceability: 一笔交易中的inputs中有很多其他交易的output,无法证明真正花出去的是到底是哪一个output。
- Monero中实现不可追踪性,采用环形签名(Ring Signature)。
-
view key: Monero中有一个public view key 和private view key。
- public view key 用于生成一次性的stealth public address(隐匿的公开地址),XMR将会通过这个地址发送给接受者。
- private view key 用于接收者扫描区块链来找到发送给他们的资金。
-
spend key:也有public spend key和private spend key。
- public spend key帮助发送方参与环交易(ring transaction) ,并且验证密钥镜像(key image)的签名。
- private spend key 帮助创建密钥镜像,密钥镜像使得发送方能够发送交易。
Monero地址
Monero地址是一个95个字符的字符串,分别由public spend key 和public view key构成。下图是地址生成的图解。
注意: 所有的Monero地址都是以4开头。
Stealth Public Address
-
Stealth Public Address:如果 Alice 要给 Bob 发送门罗币,除了 Alice,应该没人任何人知道 Bob 就是这笔钱的接收者。为了做到不可追踪性,Alice利用Bob的public view key 和public send key来随机生成一个一次性的公钥地址,叫做Stealth public Address 。假设Bob的view key的公私钥对是 , spend key 的公私钥对是 , 其中 , G是一个密码学常数,的生成过程如下:
-
随机产一个 是G的一个素数阶。
-
令 是Monero中使用的Keccak哈希算法。
-
生成的Stealth public Address 即为P。
-
现在对P进行如下的推导:
Alice告诉Bob这笔转账所在的区块号和交易号,Bob利用R、private view key a 和 private spend key b计算 找到交易中的所有output,然后寻找相应的output中是否存在某个输出地址为P,如果存在,则可以证明Alice确实给Bob转账了.
注意: 对于其他人来说,由于不知道Bob的private view key 和private spend key,其他人无法知晓Alice给Bob转账的地址是哪里。
Key Image
Key Image:Alice 和 Bob之间的转账只有他们两个人知道,那么作为验证交易的矿工,如何确保Alice不会把同一个UTXO消费2次呢?这里就需要用到Key Image,定义如下:
*
是Alice 的private spend key, H()是哈希函数。
对于对于相同的UTXO,其地址为P,Alice 的private spend key 也是唯一的,因此Alice第二次花费的时候提供生成的Key Image也是相同的,每一笔消费矿工都会记录相应的Key Image,再次出现相同的Key Image时,矿工就会拒绝这笔交易,这就可以防止双花。
需要说明的是,这里的P不是指Alice发给Bob时生成的stealth address, 而是Alice花费的UTXO所在的地址,因为对于同一个UTXO,其地址P不会变化,Alice的private spend key也不变。因此对应于同一个UTXO,有唯一的Key Image
思考: Key Image的生成最终是乘法得到的,这就感觉有个问题,如果其他人花费自己的UTXO时生成和Alice相同的Key Image的时候,但是此时如果Alice并没有花费P中的XMR,那么岂不是把Alice的位于P地址中的XMR给冻结了吗? 另外,如果Alice给出的Key Image不合法,即Alice根本不给出UTXO真正的Key Image,矿工如何判断Key Image的合法性呢?
Ring Signature
Ring Signature: Monero中为了保护发送方的隐私,使用了环形签名,Alice 在给 Bob发送XMR的时候,除了给出花费的UTXO 的真实地址P之外,还会将Monero区块链中其他与P地址中余额相同的UTXO也添加到交易的inputs中,形成一个集合 。
Alice会将这个集合S作为交易中的inputs一起发布出去,这样对于外界来说(尤其是矿工和Bob),他们无从知晓Alice具体花费了S集合中的哪一个UTXO,这样就保护了Alice的隐私。其他被Alice添加进来用于迷惑其他人的UTXO称之为mixins,又叫chaff output或者 decoy output,Alice添加mixins的时候,并不需要得到其他用户的同意,Alice自行决定添加的mixins的数目。Monero中使用Ring Signature的主要目的就是实现untraceabity。
Ring Confidential Transactions
Ring Confidential Transactions: 2017年1月10日Monero中正式使用了RingCTs。而在此之前,Monero中假如Alice需要向Bob转12.5个XMR,则需要将自己的UTXO分别发送至三个地址,分别转账10XMR、2XMR和0.5XMR,这是因为Monero中要求转账的XMR格式为 的格式。使用了RingCTs之后,在区块链上隐藏了交易数额,这时候Alice挑选mixins的时候,不用考虑mixins的XMR的余额,提升了交易的隐私性。