vlambda博客
学习文章列表

日日新 | 比特币中的0和1:非对称加密

可乐碎碎念


 
今天延续上篇的0和1,分享一下密码学中最基本的两个概念: 对称加密和非对称加密, 然后简单说一说非对称加密在比特币中的应用。
 
我也是在不断学习新知,如果有错误还请指正。我会试图用很简单很简单的例子解释加密的思想,预计阅读时间8分钟,希望大家读完都会有所收获。


什么是非对称加密


信息的加密和解密过程,我喜欢将它理解成施咒和解咒的过程。
 
举个例子,可乐给女神写了封情书,想通过猫头鹰寄给她。为了防止别人截获猫头鹰看到情书后嘲笑他,可乐就对情书施加了咒语key1 天王盖地虎 ,只有说对了 解咒的咒语 key2 ,才能看到情书。

对称加密,指的是加密与解密都是用相同的密码(即,解咒咒语也是天王盖地虎)。显而易见,这种方法比较危险,因为“提前说好解咒咒语”也是需要传递信息的, 如果可乐在偷偷告诉女神咒语时被听到了,那可乐的情书就会被看到了。


非对称加密,指的是加密和解密用的是不同的密码( key2  ≠ key1)。如果女神有一个只有自己知道的解咒咒语 key2 ,并公开宣布自己的施咒咒语key1,可乐就可以用key1来对情书加密然后传给女神。因为解咒咒语只有女神知道,所以就不会被别人看到情书了。这就是非对称加密。

日日新 | 比特币中的0和1:非对称加密


比如,女神的解咒咒语是“ 上山打老虎 ”,施咒咒语是“ 一二三四五 ”。她公开了她的施咒咒语,然后将解咒咒语自己藏好。任何人想给女神写情书,都可以用“一二三四五”来施咒,把情书传给女神,这样就完成了单向的安全的信息传递。
 
每个人都有自己的施咒咒语和解咒咒语,而且任何人都可以公开自己的施咒咒语,然后妥善将解咒咒语保管好。这样的话,就可以双向地传递信息了。


如何实现非对称加密

 
1. 异或 是一种基础的对称加密算法。异或指的是同0异1(如下图),其特点是连续两次异或可以得到自身,比如0先和1异或得到1,1和1再异或一次就可以得到初始的0. 这个特点就可以实现对称加密。

日日新 | 比特币中的0和1:非对称加密


比如下面的例子:需要加密的数据先用key1=00001进行施咒(做异或运算)得到加密后的数据01000;加密后的数据可以用key1进行解咒(做异或运算)得到需要加密的数据。这两个key是一样的,这就是对称加密。

日日新 | 比特币中的0和1:非对称加密



2. 乘法稍加修改,就是最简单的非对称加密算法。

比如下面这个简单的例子:需要加密的数字还是01001,首先转换成十进制,然后用key1=91进行施咒(相乘),得到加密后的数字819;加密后的数字可以用 key2=11 来解咒(相乘),得到9009,取后三位再转换为二进制,就得到了加密前的数字01001.

日日新 | 比特币中的0和1:非对称加密


 
背后的原理在于91乘以11等于1001,而任何一个三位数乘以1001,后三位都是不变的。

在非对称加密中,公开给全世界的施咒咒语叫做“公钥”,自己暗搓搓藏好的解咒咒语叫做 “私钥” 这个例子中“91”就是公钥,“11”就是私钥。 只知道公钥和加密后的数据,却不知道私钥,就无法得到加密前的数字。

注意: 公钥和私钥在加密解密方面是可以互换的,如果用公钥加密就要用私钥解密,如果使用私钥加密就要用公钥解密。比如可以用91做私钥,11做公钥,效果是一样的。


比特币中的非对称加密

 
比特币中的私钥,实际上就是一个256比特的二进制随机数。通过私钥可以经过一些复杂的算法(如椭圆曲线相乘)产生一个公钥,再通过公钥得到比特币地址,这个过程是单向的,也就是说通过私钥可以计算出公钥,反之则不行

日日新 | 比特币中的0和1:非对称加密


暂时先不考虑比特币地址的作用,只要记住每个人都有一个“公钥私钥对”,公钥是不能倒推出私钥的,就行了。我们主要来看看非对称加密在比特币中起的作用。

🌟 先说结论,私钥和公钥各有两个作用:
1. 公钥可以用来加密,私钥可以用来解密。
2. 私钥可以用来签名,公钥可以用来验证签名。

还是举刚刚的例子。可乐通过女神的公钥key1来加密自己的情书,然后传给女神,女神通过自己的私钥key2来解密,这就是私钥公钥的第一个作用:加密解密。

但是问题在于,女神看到情书怎么能知道这个情书确实是可乐发的呢?会不会是别人冒充可乐发的?聪明的可乐想了个办法,他用自己的私钥给情书再施一次咒,这样的话,女神拿到情书,首先要用可乐的公钥来解咒,这就验证了这个情书是可乐的,然后用自己的私钥解咒,这就保证了信息是安全的。

过程如下:

日日新 | 比特币中的0和1:非对称加密



这就是比特币中极为重要的 数字签名方案
每个人都有公钥私钥对,私钥用于签名,自己藏好;公钥用于验证签名,公之于众。

在交易中,付款者将交易信息先通过收款者的公钥加密,然后再用自己的私钥签名。这样的话,所有人都可以用付款者的公钥验证这笔交易的来源是正确的,而只有收款者才可以通过自己的私钥获得比特币,从而实现了 安全支付和身份认证

另外,数字签名还可以用来防止篡改。具体操作为:
1. 可乐先将一个单向不可逆的函数作用在情书上,得到情书的“摘要”
2. 可乐用自己的私钥对摘要进行加密,生成数字签名。
3. 可乐将情书和签名一起发出。
4. 女神用可乐的公钥将签名解密,得到可乐发过来的摘要
5. 女神用同一个单向不可逆函数作用于情书,得到新的摘要,如果这两个摘要是一样的,就证明情书没有被篡改过。



总结


1. 对称加密指加密和解密用的密码一样,非对称加密指用的密码不同。


2. 非对称加密中,公开给全世界的施咒咒语叫做“公钥”,自己暗搓搓藏好的解咒咒语叫做“私钥”


3. 公钥可以用来加密,私钥可以用来解密;私钥可以用来签名,公钥可以用来验证签名。



💖 特别鸣谢:

审稿人:区块链方向在读博士 车主

死乞白赖非要出演女神的人:加一


推荐阅读





-- The End --


如果有所收获,就点个在看吧 ❤️