区块链技术与应用(一、密码学原理)

Crypto_Currency

比特币的密码学原理,首先比特币呢他是一种最常见的加密货币,但其实呢加密货币他是不加密的,区块链上所有的交易都是共享的公开的包括账户的地址转账的金额都是公开的,比特币中他用到了密码学中的两个功能,一个是哈希,另外一个是签名,大家因该都很熟悉哈希函数的工作原理,密码学中用到的哈希函数被称为 Cryptographic hash function 他有两个重要的性质,一个叫Collision resistance (这个地方的Collision是指哈希碰撞)

哈希碰撞:如果有两个输入x≠y , 但是呢我们的哈希函数叫做H ,那么公式H(x)=H(y)那么这就叫做哈希碰撞,意思就是两个不同的输入算出来的哈希值是相等的

哈希碰撞呢是很常见的,像我们在使用哈希表的过程中就会遇到哈希碰撞,不同的输入可能会被映射到哈希表中的相同位置,一般来说呢哈希碰撞是不可避免的因为输入空间呢是远远大于输出空间的。

举个例子比如说我们有一个256位的哈希值,那么输出空间有多大呢?

答:所有哈希值的取值可能性就是256的256次方,输出空间就是这么大

但是输入空间就是无限大的,所以说他又任意可能的输入,按照葛农原理的话,必然会有两个输入映射到同一个输出的情况

所有这里的Collision 并不是说不会出现hash碰撞。

有些书上管这些性质 叫做 Collision free 那么这种说发很容易给人造成误解,就会理解为好像是碰撞不会发生,实际上碰撞是客观存在的,他的意思是什么呢?

是说没有什么高效的方法人为的去制造哈希碰撞

H(x)=H(y)

那么按上述说,我们给定一个X,没有什么好办法你能找到另外一个Y,使得他俩的哈希值恰好相等

意思就是说没有高效的方法,硬要找的话,可以用蛮力求解的方法,比如说这个x和这个y,然后我们遍历所有输入的可能性,然后查看哪个算出来哈希值正好相等 就叫brute_force 遍历所有输入可能取到的值,最后找到正好的哈希值是碰撞到一起的,但是如果这个输入空间比较大,比如对于一个哈希值是256位的话,用这种方法,在实际过程中是不可行的,因为他的工作量实在是太大了

那么Collision resistance的这个性质有什么用呢?

它可以用来对一个Mesage(m)求Digest,我们取他的哈希值,H(m)这个哈希值我们可以认为MesageDiges 用来检测对这个Mesage的篡改,比如说有人改这个Mesage的内容,他的哈希值就会发生变化,那么Collision resistance的性质就是说,找不到另外一个m' 使得H(m')取哈希值之后,和原来的哈希值H(m)恰好相等。

所以没有办法能够篡改内容而又不被检测出来

比如说有一个很大的文件,想把他存储到某个云存储服务上,想用的时候在下回来,那怎么知道当初上传的版本和下载的版本是一样的呢?这就可以用到这个哈希函数的Collision resistance,在上传这个文件之前先算一个哈希值出来,这个哈希值呢存在本地,将来下载之后呢,在算一个哈希值,和原来的哈希值比较一下,如果是一样的话,那么上传的这个文件没有被篡改,下载的还是当初的那个版本,这就是Collision resistance的一个用处

注意,没有哪个 哈希函数能够在数学上证明是Collision resistance,也就是上面所述的性质,从理论上是证不出来的,只能靠实践中的经验,有些哈希函数,经过长期的实践检验,世界上有那么多的密码学的专家,谁也没有能力找到人为制造的哈希碰撞的方法,所以呢我们就认为,这些哈希幻术就是Collision resistance 也就是说都是实践经验,也有一些哈希函数,以前我们认为是Collision resistance 但是后来大家找到了制造哈希碰撞的方法,其中有一个很著名的例子就是MD5 

MD5呢曾经是一个很流行的哈希函数,之前我们都认为他很安全,但是现在我们知道怎么认为做出哈希碰撞了

Hiding

Hiding哈希函数的计算过程,是单项的是不可逆的

给定一个输入X可以算出他的哈希值H(X),但是呢算出来H(x)没有办法反推出输入的X,

换句话说,就是从这个哈希值H(x)没有泄露,有关输入x的任何信息,这就是Hiding

当然我们可以想一想,也是有办法的,还是用那种蛮力的方法,我发输入X的所有取值遍历一遍,看看那个哈希值和这个相等,这样就知道我原来的输入是多少了,所有蛮力求解是一种办法

hiding这个性质成立的前提是,这个输入的空间要足够的大,使得这种蛮力求解的方法是不可行的,而且这个输入的分布要比较均匀,各种取值的可能性都是差不多的,如果这个输入的空间是很大的,但是呢绝大多数情况下取值都是集中在少数的几个值,那么也是比较容易破解的

那么Hiding这个性质有什么用呢?

他可以和这个Collision resistance的性质结合在一起用来实现digital commitment  

digital commitment  也可以叫做digital equivalent of a sealed envelope

我们说一下 现实中sealed envelope 是用作什么 ? 比如说 有一个人说它能预测股市,可以预测第二题哪些股票可以涨停,那么怎么证明这个人预测的是准确的呢,一种办法呢是一个人提前一天在电视台上公布,预测结果,我预测明天某某股票会涨停,第二题收盘之后呢?看一下这个股票是不是真的涨停了,就知道预测准不准了,这样做有什么问题么?

但是,如果你提前预知了,可能会影响股市,比如说这个人很有名气,本来股票不会涨停的,他这么公开预测

猜你喜欢

转载自blog.csdn.net/yuhui77268769/article/details/103087370