加密是区块链的关键,密码学可以保障区块链内数据传输和方案的安全。按照密码体制分类,密码加密主要分为对称加密和非对称加密两大类。接下来,主要讲解这两者的原理与区别。
————————
个人技术公众号:解决方案工程师
欢迎同领域的朋友关注、相互交流。
————————
一、对称加密
1、原理
通信双方使用同一个密钥,使用加密算法配合上密钥来加密,解密时使用加密过程的完全逆过程配合密钥来进行解密。
2、例子
原始字符:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密码字符:BCDEFGHIJKLMNOPQRSTUVWXYZA
原始书信:I love you
加密书信:J mpwf zpv
解读后:I love you
这里的算法就是每个字符采用后一位的字符替换,密钥就是原始的英文字母表。
3、常见算法
DES(56位密钥,密钥太短被逐渐被弃用)。
AES(128位、192位、256位密钥,现在最流行)密钥长、增加破解的难度和成本。
4、缺点
因为加密和解密都用的相同的密钥,如果密钥再传输过程中被截获,那么信息很容易就会被破解甚至伪造身份(如网络通信过程中,A和B是两个不认识的用户要通信,那么A要把密钥先传给B再开始通信,这样B在接收密钥的过程中可能被第三方劫持从而造成密钥的泄露,第三方取到密钥后便可以破解加密信息)。
5、破解思路
拿到一组或多组原文-密文对,设法找到一个密钥,这个密钥可以将这些原文-密文对中的原文加密为密文,以及将密文解密为原文的组合,即为成功破解。
6、反破解
让破解者找不到穷举法(暴力破解法,可以理解为一个一个尝试)更有效的破解手段,并且穷举法的破解时间足够长(例如数千年,那么认为不可破解)。
二、非对称加密
1、原理
使用公钥对数据进行加密得到密文;使用私钥对数据进行解密得到原数据,加密解密用的算法相同。不能使用同一密钥加密和解密数据,私钥必须保持私有。
公钥私钥互相是可解的(所以可以用于数字签名技术,但双方不能替换,因为公钥是要暴露出去的,是可以被劫获的)。
2、例子
用私钥加密的数据只能用公钥解密,这里举例为了理解方便,我们使用的加密算法为简单的加法。
原数据:110 → 公钥是加4,私钥是加6。
加密数据:554 (再经私钥加密,即每个数加6,得到111110)
解密数据:111110 → 去掉每个的第一位,得出原数据110(注意:溢出是满足非对称加密一个很重要的条件)。
3、数字签名验证
由于私钥和公钥互相可解,因此非对称加密还可以应用于数字签名技术(主要是为了验证数据的来源,也就是要确定是我给你发的数据而不是别人给你发的数据,防止数据被篡改被伪造)。
发送方用自身私钥加密,接收方获取签名数据后用发送方的公钥解密(验证)获取原数据,然后用获取的原数据和发送来的原数据比对是否一致,一致则证明数据是从目标发送过来的。
通常会将原数据做hash处理后再加密,降低原数据签名后的数据大小(例如你要传10G大小的文件,那么原数据10G,作为比对的签名数据难道也要放10G吗?不能这么做,非常消耗流量和速度。所以直接对文件的hash值进行签名,最后比对hash值即可)。
在这里,为什么签名验证可以证明数据的来源是安全的(也就是是我发的而不是别人伪发或伪造的)?
我们假设一个模拟场景:
伪造方换原数据 → 签名数据验证以后的Hash和伪造数据的Hash不相同,验证失败。
伪造方换原数据和签名数据 → 公钥验证后的数据和被换数据的Hash不符,验证失败。
(因为签名数据是用的换数据方自身私钥签名的,只有与其对应的公钥可以还原回原Hash值,但此时用的还是原数据方的公钥去做的验证,所以公钥解密后得到的并不是伪造数据的Hash值。)
综上:信息是没有被伪造可能的。
4、加密解密、签名验证的配合使用(开发中常见的使用方式)
使用非对称加密通信,可以在不可信网络上将双方的公钥传给对方,然后在发消息前分别对消息使用对方的公钥来加密和使用自身的私钥来签名,做到不可信网络上的可靠密钥传播及加密通信。
A和B通信,首先B要把自己的公钥发给A,A用B自己的公钥加密数据传给B,B再用自己的私钥解密。
也就是说,A和B只传输了各自的公钥、密文,而没有传输各自的私钥。
5、优点
可以在不安全网络上传输密钥,公钥别人拿到也没用,因为他没有私钥无法解数据,而私钥又不会传给别人只是自身持有,没有泄露的风险。
6、缺点
计算复杂,因此性能相比对称加密差很多。
7、常见算法
RSA(可用于加密和签名)。
DSA(仅用于签名,但速度更快)。
8、破解思路
和对称加密不同之处在于,非对称加密的公钥很容易获得,因此制造原文-密文对是没有困难的事所以,非对称加密破解的关键只在于,如何找到找到正确的私钥,可以解密所有经过公钥加密过的密文。找到这样的私钥即为成功破解由于非对称加密的自身特性,怎样通过公钥来推断出私钥通常是一种思路(例如RSA),但往往最佳手段依然是穷举法,只是和对称加密破解的区别在于,对称加密破解是不断尝试自己的新密钥是否可以将拿到的原文-密文对进行加密和解密,而非对称加密是不断尝试自己的新私钥。
三、加密算法的选择
1、非对称加密算法的运行速度比对称加密算法的速度慢很多,当我们需要加密大量的数据时,建议采用对称加密算法,提高加解密速度。
2、对称加密算法不能实现签名,因此签名只能非对称算法。
3、对称加密算法的密钥管理是一个复杂的过程,密钥的管理直接决定着他的安全性,因此当数据量很小时,我们可以考虑采用非对称加密算法。
4、可以采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据。
5、密钥越长,运行的速度就越慢,应该根据的我们实际需要的安全级别来选择,一般来说,RSA建议采用1024位的数字,ECC建议采用160位,AES采用128为即可。