区块链中主要用到了哈希算法和非对称加密。
1、哈希算法(hash)
哈希算法是一种数学函数算法。又叫散列算法,他是一种数据的映射关系。今天是6月6号,明天高考,先回忆一下什么是函数。
函数的定义:给定一个数集A,假设其中的元素为x。现对A中的元素x施加对应法则f,记作f(x),得到另一数集B。假设B中的元素为y。则y与x之间的等量关系可以用y=f(x)表示。我们把这个关系式就叫函数关系式,简称函数(摘自百度百科)
哈希就是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。假设固定长度是两位数,你不管给定什么值,经过哈希函数(哈希函数也是函数)的计算,结果也就是y只是10-99中的一个。这个y就是散列值。可以这么记h=HASH(X|z),z叫原像,h是哈希值,也叫数据指纹。可以用作摘要。z的可选数据集合构成X。
哈希算法有4个特性:
(1)原像不可逆。可以通过z推导出h,但是不能根据h推导z。他是单向的。
(2)难题友好型。如果要得到难题的答案,只有通过暴力枚举,没有更好的方法。假设我们知道h的值,我们不能根据h得到z,我们只能不断的用不同的z去hash,得到的结果和z比较。假设有多个原像的结果都是同一个哈希值,这多个原像就组成了X,
X的大小哈希算法的安全因子之一。
(3)发散性。对于任意的z,我们稍微改动一下z,例如z1,两者的哈希值完全不同。
(4)抗碰撞性。对于任意两个不同的z,那么他们对应的哈希值也不同。强抗碰撞性(Strong Collision-Resistant )找出任意两个不同的x,x' ,使得h(x)=h(x')是困难的(计算不可行);也有弱抗碰撞性(Weak Collision-Resistant )给你一个x,你无法找到另一个x'。x'的哈希值也是x的哈希值。
弱抗碰撞性:当给定某条消息的散列值时,单向散列函数必须确保要找到和该条消息具有相同散列值的另外一条消息是非常困难的。
强抗碰撞性:是指要找到散列值相同的两条不同的消息是非常困难的。
如果一个Hash函数是抗强碰撞的,那么同时也是抗弱碰撞的。
目前流行的hash算法有md5 sha-1和sha-2。MD5不具备强的抗碰撞性。目前使用较多的是sha-2.
区块链中的hash
2、非对称加密
对称加密在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。私钥是自己要保存好的,公钥是要公开的。常见的非对称加密有RSA、ECC等。
私钥都是由钱包来生成的,而不是人设定的。
根据私钥利用椭圆曲线加密算法生成公钥,公钥不能倒推得出私钥,不然相当于把私钥告诉别人。他俩具有一一对应的关系,通过公钥来求出私钥是非常困难的。
地址可由公钥经过哈希算法得到。公钥可以很容易生成地址,且一一对应。但是通过地址来求出公钥是非常困难的。地址相当于银行卡,用来发送和接收数字资产,可以随意公开出去的。