文/韩大楠
原文首发币乎
大家好,我是大楠呀!
这是「币圈小白进阶计划」的第十五篇,希望大家多多给出建议。
谢谢大家!
写在前面
最近大楠再看各种算法,共识看完了,现在轮到加密算法了,只想说,好难......
在此之前,大楠在币乎写的很多科普文了,虽然只有十几篇,但是现在渐渐地也能驾驭硬核文章了,虽然看这些书籍还是微微的困难,但现在来看这些硬核文章已经不觉得那么难了。
这似乎是个小进步,可以记录一下。
这篇文章写的只是区块链骨骼中的一部分——加密算法。加密算法包括非对称性加密算法、数字签名、数字摘要。
文章会写的比较硬,你或真心看不懂,但大楠也是在探索中,有些的东西也搞得不是很明白,所以,这可以作为小白进阶资料。
非对称性加密算法
什么是非对称性加密算法?
先说两个名词——公钥和私钥(钱包里你都见过私钥吧,那就不用多说了)。
公钥和私钥,是非对称加密通常在加密和解密过程中使用非对称性的密码。
公钥和私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。
它们是现代密码学分支非对称性加密里面的名词,通常都使用公钥加密,私钥解密,这种加密方法也称为公开密钥算法。
加密算法一般分为对称加密和非对称加密,区块链中主要应用非对称加密算法。
非对称密钥对的特点
一是用其中一个密钥(公钥或私钥)加密信息后,只有另一个对应的密钥才能解开。
二是公钥可向其他人公开,私钥则保密,其他人无法通过该公钥推算出相应的私钥。
为什么用非对称加密?
1 每个访问用户的秘钥相同。这种情况,服务器只要保存一个秘钥。除非你的网站用户是特定的内部用户,否则用户拿到秘钥就能对密文进行解密。
2 每个访问用户的秘钥不一样。这种情况,服务器需要保存大量秘钥。如果网站有上亿用户,则需要存储上亿的秘钥,维护成本巨大。
RSA算法
非对称加密算法中,最常见的就是RSA算法了。既能用于加密,也能用于数字签名,是目前最流行的公开密钥算法。
两个大质数相乘得到的大数难以被因式分解,RSA算法无法确定它的保密性如何。
我们通过一个例子来理解RSA算法。
A和B要进行通信,那A应该怎么生成公钥和私钥呢?
①选择两个质数。随机的就行哈,我们称为p和q,A选择两个质数,分别为71、73,我们姑且找到这两个比较简单的数字。
②计算p和q的乘积n。A把31和37相乘:n=71X73=5183。
n的长度就是密钥长度,5183写成二进制是1010000111111,一共13位,所以密钥就是13位,实际应用中,RSA密钥一般就是1024位,重要场合是2048位,但密钥还是越长越好。
③计算n的欧拉函数 φ(n)。
公式: φ(n)=(p-1)(q-1),A算出φ(5138)=70X72=5040
④选择一个整数e。
整数是随机选择的,条件就是1<e< φ(n),且e与φ(n)互为质数。
⑤计算e对于Φ(n)的模反元素d。
所谓“模反元素”就是指有一个整数d,可以使得e*d被φ(n)除的余数为1,即e*d≡1(mod φ(n))
这个式子等价于e*d -1 = kφ(n)
于是找到模反元素d,实质上就是对下面这个二元一次方程求解:e*x + φ(n)y = 1
已知e=17, φ(n)=5040,则17x + 5040y = 1。(这里需要使用扩展欧几里德算法)A算出一组整数解为(x, y)=(3375, -9),即d=2350。
6)产生公钥和私钥。
将n和e封装成公钥,n和d封装成私钥,在Alice的例子中,n=5083, e=17, d=2350,所以公钥就是(5083,17),私钥就是(5083,2350)。
到现在,所有的计算就完成了,公钥和私钥就算出来了,RSA算法过程其实还是很简单的,关键的就是找到两个足够大的质数。
破解RSA算法的关键就是计算n、p、q的值,给出两个很大的质数p、q,可以计算n,但知道n,去很难算出p、q,这需要你去不断尝试,去破解,这就是为什么当前RSA很难破解。
注:以上计算的数据,存在偏差,但流程是按照这样进行的。
椭圆曲线
在区块链中,常用的是椭圆曲线数字签名算法,这是利用椭圆曲线密码(ECC)对数字签名算法(DSA)的模拟。
椭圆曲线密码算法实现了数据加解密、数字签名和身份认证等功能。
相对于RSA算法,在实际的开发使用中,椭圆曲线加密使用得更广泛,比如比特币就是使用了椭圆曲线中的SECP256k1,可以提供128位的安全保护。
数字签名
数字签名就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。
数字签名了的文件的完整性是很容易验证的。
数字签名,可以保证收到的文件没有被篡改,也可以保证发送者的身份。因为私钥生产了数字签名,私钥是不公开的。
数字摘要
将任意长度的消息变成固定长度的短消息, 常用的加密算法包括 HASH 、HMAC等
一般流程:
1.被发送文件用密码散列函数(MD5,SHA,SM3)产生的摘要。
2.发送方用自己的私用密钥对摘要再加密,这就形成了数字签名。
3.将原文和加密的摘要同时传给对方。
4.对方用发送方的公共密钥对摘要解密,获取发送方生成的摘要,同时对收到的文件用SHA编码加密产生又一摘要。
5.将解密后的摘要和收到的文件在接收方重新加密产生的摘要相互对比。如两者一致,则说明传送过程中信息没有被破坏或篡改过。否则不然。
同理,B 如果要发送回执,就在循环执行上面的步骤。
小总结
数字摘要验证了原文是否被篡改、公钥私钥保证了数字摘要的安全性,两者配合使用安全性高,速度快。
写在后面
这篇就是硬核文系列之加密算法。很多东西你一定看不懂吧,说实话,有些玩意儿,我也看不懂,这属于区块链理论硬核文。
区块链理论硬核文包括共识算法、加密算法、其他算法等。算法是区块链技术的核心,看不懂没关系,在研究硬核文的同时,有些东西,你将会在不就的将来就会不期而遇,就像我现在遇到的这些硬核文一样。
你可能觉得技术层面的内容不需要知道,但这些内容会在你不经意间向你袭来,它熟悉的看着你,但是你却一脸懵逼的看着它,懂一些总要比不懂强很多。
以上就是大楠的小白科普第十五篇,你要是发现了什么不对的地方,要和大楠说啊,就在评论区,留言给我啦。
感谢大家啊!
大楠是谁?
一个很偶然撞进币乎的币圈小白,是个正在不断成长的大楠。
那你喜欢她么?
当然喜欢啦,大楠欢迎来撩哦。
微信:15222567477,加大楠也要备注的呢,就叫简书~
网友评论