http协议:五 (2)对称加密和非对称加密

1、加密算法的核心思想是“把一个小秘密(密钥)转化为一个大秘密(密文消息)”,守住了小秘密,也就守住了大秘密;

2、对称加密只使用一个密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换,常用的有 AES 和 ChaCha20;

3、非对称加密使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,解决了密钥交换问题但速度慢,常用的有 RSA 和 ECC;

4、把对称加密和非对称加密结合起来就得到了“又好又快”的混合加密,也就是 TLS 里使用的加密方式。

5、简单来说,SSL 就是通信双方通过非对称加密协商出一个用于对称加密的密钥

6、混合加密:用非对称加密,加密对称加密的私钥。对称加密的私钥又是会话级的随机数=一次会话一个私钥。就算别人baoli破解也只是破解了一个会话

  关于混合加密,会话密钥应该不是通过网络传输的,而是两端独立生成的:
  非对称加密进行前,两端已经交换了各自生成的一个随机数
  非对称加密传输了客户端生成的另一个随机数
  两端根据这三个随机数生成会话密钥

7、加密的分组模式:拿ECB来举例子,假设使用aes128,密钥长度是16字节,那么就把明文按16字节分组,然后每个分组用密钥加密其他的cbc、ofb等的方法类似,但细节不同,例如cbc增加了初始向量

  分组模式:DES和AES都属于分组密码,它们只能加密固定长度的明文。如果需要加密任意长度的明文,就需要对分组密码进行迭代,而分组密码的迭代方法就称为分组密码的“模式”。
  主要模式:
  ECB模式:Electronic Code Book mode(电子密码本模式)
  CBC模式:Cipher Block Chaining mode(密码分组链接模式)(推荐使用)
  CFB模式:Cipher FeedBack mode(密文反馈模式)
  OFB模式:Output FeedBack mode(输出反馈模式)
  CTR模式:CounTeR mode(计数器模式)(推荐使用)

8、只是一般习惯上的说法是公钥加密私钥解密,私钥签名公钥验签。

 

 

补充

01严格来说对称加密算法还可以分为块加密算法(block cipher)和流加密算法(stream cipher),DES、AES等属于块加密而RC4、ChaCha20属寸沉川登。

02 ECC虽然定义了公钥和私钥,但不能直接实现密钥交换和身份认证,需要搭配DH、DSA等算法,形成专门的ECDHE、ECDSA。RSA 比较特殊,本身即支持密钥交换也支持身份认证。

03 比特币、以太坊等区块链技术里也用到了ECC,它们选择的曲线是secp256k1。

04由于密码学界普遍不信任NIST 和 NSA,怀疑secp 系列曲线有潜在的弱点,所以研究出了“x25519”,它的名字来源于曲线方程里的参数“21255 -19”。另有一个更高强度的曲线“x448”,参数是“2^440-2L么4一' o

05 在Linux上可以使用OpelnSSL的命令行工具来测试算法的加解密速度,例如“opensslspeed aes""openssl speed rsa2048”等。

06 TLS1.2要求必须实现TLSRSA_WITH_AES_128_CBC_SHA, TLS1.3要求必须实现TLS_并且因为前向安全AES_128_GCM_SHA256的原因废除了DH和RSA密钥交换算法。

07github或者公司自己的gitlab等这种代码托管平台,应该和u盾的原理类似。需要事先在自己电脑生成一对公私钥,然后把公钥保存到gitlab上,这样你pull代码的时候,你用私钥签名,gitlab那边用公钥解密,就能确认你 是你了用的是sshkeygen,然后把公钥给GitHub,这样用私钥来标识自己的身份。

08 关于混合加密流程
1. 客户端发送请求索要公钥
2. 服务端返回公钥和加密方法 比如 RSA
3. 客户端通过 RSA+公钥+随机会话密钥
4. 服务端通过私钥解密,拿到密钥。然后后面就用这个密钥进行通信了

5.非对称密钥的有效期比较长,通常是几个月或者几年,而会话密钥的有效期很短,通常是一次一密

 

问题

1、加密算法中“密钥”的名字很形象,你能试着用现实中的锁和钥匙来比喻一下吗?

2、在混合加密中用到了公钥加密,因为只能由私钥解密。那么反过来,私钥加密后任何人都可以用公钥解密,这有什么用呢?

回复:

因为私钥只能由一个人秘密持有,所以它加密的数据谁都可以解密,没有私密性,但这就是它的价值所在,可以证明这个数据就是私钥持有人发布的,可以用来做身份认证。

 

3、非对称加密为什么慢,非对称加密除了慢外还有什么缺点?

回复:

非对称加密基于大数运算,比如大素数或者椭圆曲线,是复杂的数学难题,所以消耗计算量,运算速度慢。除了慢,可能还有一个缺点就是需要更多的位数,相同强度的对称密钥要比非对称密钥短

对称密钥一般都128位、256位,而rsa一般要2048位,不过椭圆曲线的会短一点。

 

4、在实际传输过程中,大家(包括其他人)怎么知道双方通信用的哪个公钥,是传输过程公开的,大家都可以获取看到的吗?如果大家都知道了,用私钥加密的内容都能被别人用公钥解密,这部分内容是不是不安全?

回复:

公钥的传输必须使用证书,把公钥和持有者身份绑在一起,否则就会有信任问题,容易被别人冒充。私钥加密的作用是签名,实现身份认证而不是数据保密,签名是公开的,所以不存在安全问题。

 

5、对称加密为啥会有密钥交换的过程,对称加密就一个密钥,客户端服务端各保存一份就可以了,为啥要传输交换呢?

回复:

关键是“如何各保存一份”,两边加密通信必须要使用相同的密钥才行,不交换如何才能保持一致呢?而且简单的一对一还好说,现实情况是网站要面对成千上万的用户,如何与这么多的客户端保持一致?还有,如果总使用一个密钥,就很容易被破解,风险高,需要定期更换,最好是一次一密。所以,为了安全起见,每次通信前双方都要交换密钥,这样就实现了“各保存一份”,用完就扔掉,下次重新交换。

 

6、 非对称加密 是一个有公钥一个有私钥,还是都有公私钥?

回复:

取决于是双向认证还是单向认证。
如果是单向认证,也就是目前大多数的用法,只发送服务器的公钥,验证服务器的身份。
如果是双向认证,那么服务器和客户端都要发送各自的公钥,互相验证对方的身份,一个常见的场景就是网银的U盾。

posted @ 2021-08-31 16:32  血染星辰  阅读(867)  评论(0编辑  收藏  举报