比特币的加密部分是利用密码学原理,主要用到哈希和签名这两个部分,这是密码学的重要组成部分。哈希又被叫做散列函数,是一种从任何一种数据中创建较小的数字“指纹”的方法。签名采用的是非对称加密方式,它能解决对称加密方式中无法将密钥发送给对方的问题。
哈希的性质
1.抗碰撞性
碰撞性是指哈希碰撞,哈希碰撞的产生机制是给定输入的x和y,经过哈希函数运算,输出的H(x)=H(y),就完成一次哈希碰撞,这是很常见的运算方法,不同的输入会映射到哈希表中的同一个位置,比特币的SHA-256算法有2的256次方个单位的空间,这是一个相当大的数字,在给定一个输入m的情况下,通过哈希运算得到H(m),但是很难通过人工方式找到另外一个输入m’,这就导致第二次哈希运算很难找到H(m)=H(m’)的关系,这就是矿工进行运算的内容。
2.隐蔽性
哈希函数单向不可逆,输入一个x,可以将其哈希值计算为H(x),但是通过这个映射关系不能反推出x,除非采用暴力破解的方式,这就对挖矿的设备算力提出了要求。隐蔽性的前提是输入的空间应当足够大,并且取值分布十分均匀。
3.谜题友好性
谜题友好性是指计算出来的哈希结果是不可预测的,输入某个x,想要哈希值H(x)在某个范围内,并没有什么简单的算法,只能由每个数依次尝试,这就是比特币挖矿的本质。比特币区块链中每一个区块都有区块头,区块头里面的2个域分别是随机数nonce和目标值target,矿工的任务就是不断尝试nonce,并且将其与区块头信息结合起来,共同作为输入值,计算出哈希值。
签名
在对称加密方式当中只有一个密钥,通信双方都使用这个密钥进行加密和解密,通信内容在网络当中以密文的方式传输,但是应该如何在网络中将密钥发送给对方是一个值得考虑的问题,非对称加密方式就解决了这一情况。非对称加密有一个成对的密钥,分别是公钥和私钥,公钥对外公开,私钥只有用户自己持有,这两个密钥用来互相加密和解密,解决了对称加密方式的问题。
1.加密
非对称加密方式和对称加密方式有所区别,不需要在网络当中传递密钥,进一步降低了加密和解密过程中存在的风险。通信过程中,双方的公钥都对外公开,传递信息时只需要使用公钥加密就可以。
2.签名
签名的作用是让别人相信这个内容确实是自己发送出去,发送方可以在发送之前使用私钥对内容进行加密,接收方可以用发送方的公钥验证这一内容是否合法。签名很好地解决了消息的发出者身份以及消息是否被篡改的问题,也是借助哈希算法实现,这是比特币加密的内部原理。