前言
这篇文章将会讲解比特币的加密原理。比特币之所以这么安全,就是因为它的加密机制。
1.对称加密和非对称加密
-
对称加密
以前加密用的都是对称加密,就是用相同的密码对原文进行加密和解密。常见的有AES、DES等,优点是效率高。但由于加密方和解密方都需要秘钥,因此秘钥在传送过程中容易泄露出去。 -
非对称加密
后来科学家发明了非对称加密。常见的有RSA、椭圆曲线等。非对称加密有两把秘钥,分为公钥个私钥。私钥是随机生成的,而公钥是私钥推导出来的。公钥能不能推出私钥呢?以目前的计算机算力,很难。非对称加密是用公钥进行加密,私钥进行解密,公钥可以暴露出去。具体就是加密方用解密方的公钥进行加密,解密方用自己的私钥进行解密。因为整个过程不需要传递私钥,只需要将公钥暴露出去,而公钥不能解密,因此就解决了秘钥传输不安全问题。- 缺点:非对称加密能保证内容不会泄露出去,但不能保证内容不被篡改。另外加密效率比较低。
举个例子:A给B发了一条消息被C截获了,C没有私钥,虽然不能看到内容,但他可以将内容修改成其他内容,然后再用B的公钥进行加密(因为公钥是公开的)。B收到后依然可以用私钥进行解密,但其实B无发确认内容是否被别人篡改。
2.哈希
哈希又称为散列,简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
特性
- 不可逆性。哈希具有单向性,几乎无法根据哈希运行的结果到推出原文。
- 无碰撞性。几乎不可能找到一个y值,使得y的哈希值等于x的哈希值。
3.数字签名
那么怎么保证原文没用被第三方篡改呢?答案就是数字签名。
这个类似于现实中的签名,就是在信息后面加上另一段内容,作为发送者的证明并证明信息没有被篡改。
如上图所示,
- 首先,发送方用接收方的公钥对信息进行加密。
- 发送方对原信息进行哈希运算得到一个结果(称为摘要),再用自己的私钥对摘要进行加密得到一个签名(这里用私钥加密得到的签名,可以用公钥进行解密,这里和之前的公钥加密私钥解密用的不是同一套算法)。
- 把密文和签名一起发送给接收方。
- 接收方首先用自己的私钥对密文进行解密得到原文,再对原文进行哈希运算得到摘要。
- 接收方用发送方的公钥对发送方的签名进行解密得到发送方签名前的摘要。
- 接收方把两次得到的摘要进行比对,如果是一样的,则证明原文没有被篡改,并且确实是发送方发送的。
分析:假设C截取信息,他想篡改内容。首先签名无法篡改,因为他没有发送方的私钥,如果用自己的私钥进行签名,那么接收方用发送方的公钥解密时是解不开的。所以他只能篡改密文。但接收方解出密文并进行哈希运算后得到的摘要必然和原来的摘要不同,而用发送方的公钥解密出签名得到的摘要肯定不会被篡改,所以两次摘要就会出现不一致,就能确认内容被篡改了。
小结
非对称加密和数字签名这一块稍微有点绕,不过你看懂了之后一定会说一句:中本聪666!!!
To be continued...