Hash函数

比特币系统中采用的hash函数是SHA256。hash函数具有hiding和puzzle friendly性质。

  • hiding是指,已知hash的结果但不能反推出原数据。
  • puzzle friendly是指,hash的结果具有不可预测性。

        而若想对hash之前的数据进行修改,同时hash的结果不变(人为地制造“哈希碰撞”),只有用穷举的方法,即遍历所有可能的输入数据,找到一个hash值与原hash结果相同的输入数据。但是,以目前的计算速度,根本不现实。(因为SHA256生成的digest(摘要)结果为256位,因此digest有2的256次方种可能性)

非对称加密

        首先,什么是对称加密
        对称加密是指,每个人都只有一个秘钥,当需要给他人发送信息时,就用自己的秘钥将信息进行加密,而接收消息的人再用发送者的秘钥进行解密。但是,网络传输明文是不安全的(容易被截获),我们显然不能将自己的秘钥在网络上进行明文传输。因此,对称加密的安全性不高。

        而非对称加密是指,每个人都有一个密钥对(公钥和私钥),公钥是公之于众的,私钥是自己保存的,只有自己知道。且公钥和私钥是成对的,由一个秘钥生成函数同时生成,私钥可以推出公钥,但公钥不可以推出私钥。
        可以理解为,公钥就相当于银行账号,私钥相当于账号的密码。其使用原理是,用公钥加密的数据只有相应的私钥才能够解密。
        假设有两个人A和B,当A要给B发送信息时,A就用B的公钥对信息进行加密并发送给B,B接收到信息时,用自己的私钥对信息进行解密。而B要给A回复一个信息时,就用A的公钥对信息进行加密并发送给A,A接收到信息时,就用自己的私钥对信息进行解密。
        从而,私钥只用保存在用户本地,而不需要进行网络传输,这样就保证了安全性。

数字签名算法

        对于数字签名算法,其过程和加密过程“相反”。可以用来解决下面场景中的问题。
        同样是A和B两个人,A要给B发送一条信息,B收到消息后,却无法得知是否真的是A发送过来的,因为有可能是别人冒名顶替的。
        而在数字签名体系中,A要给B发送一条信息,首先用自己的私钥对该信息生成一个数字签名,然后将信息和数字签名同时发送给B。B接收到信息后,用A的公钥对数字签名进行验证,若验证成功,则证明该数据确实是A发送过来的。

        常用的数字签名算法有RSA、ECDSA、DSA等

注:想要产生安全的密钥对,必须要有好的随机源。

最后更新: 2019年03月19日 14:19

原始链接: http://yoursite.com/2019/03/15/比特币系统中的密码学原理/