2011年6月6日星期一

网络公证算法

***版权声明***
本文遵守创作共用-署名=BYC协议,转载请注明作者@goldengrape以及作者的BitCoin账户15EkPSgJ4khi9tXfJWDr61Jge3T6WWWXP3

***研究背景***
网络上发布的文本,很容易被转载甚至被盗用,虽然目前来说盗用也就盗用了,大家也没什么办法,但是终将有一天正义会得到伸张。在侵权算账的那一天,要提供首先的证据就是认定文本的作者和发布时间。从某种意义上来说,发布时间是最重要的证据。

但是网络文本的发布时间是记录在服务器上的,单一的服务器时间都是可以修改的。首发的论坛、blog、微博的服务器时间都是可以篡改的。更糟糕的情况是,你恰好要和你所使用的服务商打官司,你原创的文本在人家的服务器上,打官司之前就因为不可抗力被404了。

***问题提出***
如何为网络电子文档提供公证,公证其内容和发布时间,使发布内容和时间无法被篡改。

***解决方案***
利用BitCoin网络,将需要公证的信息加入到BitCoin的交易信息中去。目前所知,BitCoin的p2p网络会记录且仅记录每一笔交易的时间、转出帐户、转入帐户和金额,这个记录会存入p2p网络中的各个计算机之中,一开始至少是6台计算机,才会确认这一交易,随着时间的延长,整个参与BitCoin的p2p网络内的计算机之中都会有此记录。要改变记录是不可能的。

在BitCoin交易中被记录的有且只有交易的时间、转出帐户、转入帐户和金额。交易时间是我们需要的结果,剩下的三个信息中需要与发布内容相关。不失一般性,我们以@chenxiaoqin进行的史上第一次网络公证为例:

***公证的过程***
0. 被公证文本是字符串:“ I, @chenxiaoqino, have finished my math homework of 6/5/2011. The answer of the first question is A.”,这孩子居然把史上第一句可以被网络公证的话来用来声明他做了暑假作业。
1. 对需要被公证的文本进行散列计算,目前使用的是MD5算法。得到16进制的MD5结果:1e53a5f4ac58af0b8c7d4ec3934eb1a6
2. 将16进制的MD5字符串转换为10进制数字字符串,并且补齐至39位:040311166495400756674970027450971369894
3. 拆分成6个值
a=1.00403111
b=0.16649540
c=0.20756674
d=0.39700274
e=0.45097136
f=0.59894
其中小数点后第一位分别是0-5,是来标记这六个值的顺序的。
4. 将这6个值作为转账金额,从BitCoin一个账户转账到另一个账户。

***公证的查询与验证***
0. 假定今后某日@chenxiaoqin需要向法庭或其他什么人提出这个声明作为证据那么他需要提供被公证的文本“ I, @chenxiaoqino, have finished my math homework of 6/5/2011. The answer of the first question is A.”
1. 法庭或第三方根据被公正文本计算MD5值,并且转换成10进制数字串,按照原来的规则拆分成6个数字
a=1.00403111
b=0.16649540
c=0.20756674
d=0.39700274
e=0.45097136
f=0.59894
3. 法庭利用这6个数字,在BitCoin的交易记录中查询,记录如下:http://blockexplorer.com/address/12yZC6hFpzw82f7CvJaFJCndCfWXEDe3jp 发现含有这一组数字的交易发生在2011年6月5日。于是可以认定这一声明是在这一时间发生过。

***存在的问题***
1. 由于BitCoin的规定限制,网络公证并不是免费的。每一笔转账是要付转账费用的,当前是每笔0.01BTC,相当于人民币6~7元
2. 占用资金,Sum(a:f)高达2.82BTC,相当于人民币300元,整个转账需要耗费越1小时左右,这200元就要被冻结一小时。

算法的改进:
拆分数字成:
a=0..00403111
b=0.16649540
c=0.20756674
d=0.03970027
e=0.04450971
f=0.05369894
其中a-c中小数点第一位和d-f中小数点后第1和2位是作为序号标明的,那么
0.0aaaaaaa+0.1bbbbbbb+0.2ccccccc+0.03ddddd+0.04eeeeee+0.05ffffff每次公证占用的资金最多不超过0.74999994BTC

***网络公证商店***
ver=alpha,顾客属性Geek
0. 有顾客进入,需要公证,顾客自行计算所需公证文档的MD5值,被公证文档可以是文本、程序源代码、扫描文稿等等,只要能算出MD5的东西都可以。如果必要,顾客可以在被公正文档中加入自己的数字签名,将MD5值与作者的数字签名关联在一起。
1. 顾客提交需要被公正的MD5值,支付2BTC
2. 公证商店留下1.007BTC作为佣金,其中0.007作为转账所需支付的费用
3. 公证商店依据MD5值,计算出6个转账金额。逐一转账返还给顾客
4. 公证商店转账剩余的BTC,交易完成
5. 公证商店向顾客出具公证记录以及说明

***讨论***
网络公证的核心在于将被公证文本的特征记录在不同的计算机之中,任何单一的,或者从属于一个集团的计算机都是不可靠的,记录有可能被篡改。所以需要将特征值记录在不受个人和组织p2p网络之中,而这个记录需要广泛的传播,目前看BitCoin网络是最为符合上述特征的。在特征值有效的情况下,公证的有效性与BitCoin货币的安全性等价。

***下一步***
我们需要能够吸引geek的前端设计
我们需要服务器

***参考***
@goldengrape和@chenxiaoqin完成了核心算法的设定

@yegle在算法形成过程中有所贡献

首次网络公证的记录在:http://blog.cxqn.info/?p=356
BitCoin网络的介绍参考BitCoin官方网站:http://bitcoin.org

Posted via email from goldengrape's posterous