即,原始数据的任何一个加密结果都是该散列函数的一个碰撞。
卧槽似乎是很没用的散列算法呢Orz
当然,加密算法要足够强难以被解密,散列算法在原始数据不同时也难以找到碰撞。
这个问题的原因是
《区块链是否能够根除比特币》 http://v2ex.com/append/topic/183109
发送方向接收方发送一串下载数据后,接收方不能直接解密,但可以确认是原始下载数据而不是骗人用的随机字符串。然后发送方向接收方支付,然后接收方回传解密密钥,同时将密钥写入区块链。这是在两个互不信任的节点中建立信任机制的方式。
1
ryd994 2015-04-12 22:17:56 +08:00
这个这么做:
原文hash+加密数据hash 简单拼接,验证的时候验证其中之一………… 好吧严肃的: 先问问你为什么需要这样的函数?你在做什么?要实现什么功能? |
2
c742435 OP @ryd994
整个的下载/支付流程是这样的: 0:接收方有种子,也就是有原始数据散列值。 1:发送方将原始数据用上述加密算法加密后发给接收方。同时,将加密数据的常规散列值(比如MD5)用同样的密码加密写入区块链(所有人都能看到) 2:接收方收到加密数据后,确认是原始数据的加密副本。则将加密数据的常规散列值写入区块链。 发送方确定加密数据的常规散列值正确后,发出支付请求。此时,所有人都知道,接收方成功接收的发送方的数据。 接收方支付成功后,发送方将密码写入区块链。所有人都可以用该密码解密1中的加密数据常规散列值加密结果,确认是2中的加密数据常规散列值。如果正确,说明发送方正确的传送了解密密码。此时,发送方可以被认为是积攒了一些信用。 |
3
c742435 OP 卧槽才发现帖子正文中的引用标题错到离谱……不能修改也是醉了。。。
|
4
simonlei 2015-04-12 22:41:17 +08:00 2
请参考『同态加密』算法。
同态加密是一种加密形式,它允许人们对密文进行特定的代数运算得到仍然是加密的结果,将其解密所得到的结果与对明文进行同样的运算结果一样。换言之,这项技术令人们可以在加密的数据中进行诸如检索、比较等操作,得出正确的结果,而在整个处理过程中无需对数据进行解密。其意义在于,真正从根本上解决将数据及其操作委托给第三方时的保密问题,例如对于各种云计算的应用。 |
5
li2150 2015-04-13 21:53:48 +08:00
有点没看明白,只对第一句话做点评论。
如果是足够强的加密算法,加密后的结果应该是准随机的。所以“原始数据的任何一个加密结果都是该散列函数的一个碰撞”等价于“任何一组随机数据都是该散列函数的一个碰撞”。 除非加密算法和散列函数共享同一个key?不过这样应该不是楼主的本意吧。 抛砖引玉,求指正。 |