|
|
目前的比特币客户端只具有ECC加密算法中的签名功能,在支付环节确实可以解决无需第三方信任的功能。但是现实应用的场景中,在实际支付之前,有可能会有签订合同的过程。订立合同时,要约是必不可少的,有没有可能无需第三方认证,在确保要约内容的保密的前提下,既能确认要约内容的真实性,又能确认该要约确实是从合同当事人中的一方向另一方发起的呢?
借助Elliptic curve Diffie?Hellman密钥交换算法和对称密钥加密算法(比如AES256)可以实现这一点。
原理:
(0)A有私钥da和公钥Qa;B有私钥db和公钥Qb; A与B相互将自己的公钥(Qa、Qb)告知对方;
(1)A用自己的私钥da和B的公钥Qb相乘,得到(Xk, Yk),(Xk, Yk) = da * Qb,A将Xk作为对称式加密的密钥将要约文本进行加密:M = AES256_enc(text, Xk)。A将密文M发给B。
(2)B用自己的私钥db和A的公钥Qa相乘也能得到(Xk, Yk)。 (Xk, Yk) = db * Qa(因为Q = dG; da * Qb = da * (db * G) = db * (da * G) = db * Qa)。B用Xk作为对称式加密的密钥将要约文本进行解密得到要约的明文:text = AES256_dec(M, Xk)。
这种方法一是保证了要约内容在传输时是加密的,无法被他人非法窃取(假设用的是AES256,目前没有已知算法可以破解),同时,由于Xk必须通过A使用本人的私钥和B的公钥来计算,那么可以确定该要约必然是有A本人认可并主动向B发出的。 那么,当B收到从A发来的加密要约时,无需第三方认证,该数据本身已经证明了要约必然来自于A且确实是发给B的。
比特币的客户端中如果能集成这种加密功能,那么在未来交易处理合同纠纷时,能够直接出示无需第三方认证的证据。
PS:这一想法是刚刚想到的,放在这里先讨论一下,如果可行,稍后我附上一个具体实现的示例代码。
chehw2015.4.28 |
|