请教 Crypto 和算法达人一个有趣的问题

2015-04-01 00:58:00 +08:00
 HowardMei
目前文件防篡改,可以通过GPG私钥签名,然后别人通过公钥来验证,电子文档水印不知道什么原理。

有没有这样一种自包含的文件校验机制:
假设一个文件A,用一种对计算时点敏感的指纹算法FT[假设每次计算必须通过公共网络校验真正时间点],生成该文件以时间戳S为基的内容特征指纹X=FT(A,S0),使得A+X这个新文件的指纹Y=FT(A+X,S1),可用于文件完整性校验Check(X,Y),还可反向求解出唯一正确的S0=GT(Y,S1) ,也就是说发布该文件和它的指纹X后,无论更改文件内容A,或更改指纹内容X,或更改A后用FT重新生成X达到同步更改A+X的目的,由于指纹算法FT和GT本身是计算时点敏感的,会使得校验无法通过,且能算出更改的时间戳S2。

对比:目前的Checksum机制,发布文件A,同时发布MD5值X供校验,如果随后更改A成为A2,会和X不匹配,但只要原作者再生成新的MD5值X2,清除原来X就行了,人们根本无从知晓A+X悄悄变成了A2+X2,因为生成MD5的算法对计算时点并不敏感。另有Bitstamp用Bitcoin的Blockchain记录曾经算过的文件指纹,但算法本身并不随时间演化。

请问这样的不依赖Blockchain的自包含指纹算法有吗?或者不可能有吗?
1680 次点击
所在节点    问与答
7 条回复
SoloCompany
2015-04-01 03:13:02 +08:00
只要算法是公开,就容易证明没可能,这也是公私钥系统存在的必要性所在,如果你的算法对时间敏感,打个比方,互联网有个时钟种子发生器生成不可篡改的时间戳,那只不过是然这个后面的时钟发生器系统成为另一种ca签名机制而已,你完全可以简单设计算法

签名= 内容发布时间+sign(发布时间,内容md5,时间系统私钥)

关键是,时间系统的私钥没有任何人掌握,要有一个ca中心负责签名而已

只不过是把gpg的个人私钥换成一个ca系统的私钥而已,毫无差别
SoloCompany
2015-04-01 03:15:56 +08:00
真正去中心化的,参考各种虚拟货币系统是怎么设计就好了
jybox
2015-04-01 07:45:17 +08:00
这个问题的关键是「时间」是独立于计算机世界之外的一个变量,必须要由外部来定义时间。

简而言之有两种方案,一种是使用一些机构提供的时间证明服务,即你发给它一段数据,它用数字签名签上当时的时间。一般靠谱的机构都是收钱的,不收钱的通常不是很靠谱,国内的比如 http://www.tsa.cn/

另一种方案是就是把这段数据嵌入到一个链状的 P2P 网络中,比如比特币网络,我有写过一篇日志来讨论这个话题: https://jysperm.me/2013/12/1443/
jybox
2015-04-01 07:50:06 +08:00
我上面的日志是一年多以前写的,刚刚发现似乎已经有很多人把这个过程自动化了,比如 https://www.btproof.com/
cfan8
2015-04-01 10:06:16 +08:00
比特币在技术上的创新之处就是提供了一种证明时间先后的办法

@jybox 说的非常清楚了,楼主可以多了解
HowardMei
2015-04-01 16:09:18 +08:00
@SoloCompany 算法公开的是没错,我在幻想有一种活的算法,即便公开了,但因为它本身是时变的,所以不需要root ca xD

@jybox 日志写得不错,挺清楚,但它利用了Bitcoin Blockchain,需要Proof of work,而且交易的时效性不佳,作为电子合同来讲聊甚于无

@cfan8 比特币本身的交易合同不是按时间锁定的,而是按工作量扩散锁定,时间精度不够
SoloCompany
2015-04-01 17:11:43 +08:00
@HowardMei 怎么可能会有这样的独立算法,注意我强调的是 [独立] 两个字。这个和热寂定律差不多。封闭系统是不可能的。

非独立系统那就是上面讨论的这些了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/180718

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX