Skip to content

Latest commit

 

History

History
45 lines (38 loc) · 2.8 KB

加密.md

File metadata and controls

45 lines (38 loc) · 2.8 KB

加密

非对称加密

加密的历史

1. 初始的做法就是对明文按照一定的规则做变换。这个一定的规则就相当于一个秘钥。知道了这个密钥,就能破解密文。

  这个做法的问题有两个:第一个根据大量密文,很容易猜测出明文。第二个,如果需要多个人通讯,
  密钥需要存放多处,增加了丢失的风险

2. 为了解决上面的情况,发明了非对称加密

  就是有一对钥匙,一个密钥,一个公钥.用密钥加密的只能用公钥解密,用公钥加密的,只能用密钥解密
  
  这个怎么使用?现在假设A,B双方需要通讯,A有自己的密钥A0和公钥A1,B有自己的密钥B0和公钥B1.
  双方将公钥公布出去。A向B发消息的时候用B的.公钥加密获得密文B',这个B'现在即使被窃取,也只有B能解开。
  保证了密文的安全性,多方通讯也不需要将密钥多处存放。

 3. B怎么和A通讯呢?同样的B可以用A的公钥加密然后回信息给A。

 4. 现在双方的通讯消息不能被解密了,但是怎么保证消息被人替换或者篡改呢?比如有一个中间人C,
   将A发给B的消息替换成了自己的,这个时候C用B的公钥加密发给B,B还可能认为是A发来的消息,
   可能会回复一些敏感数据。(这个时候甚至可以附上C自己的公钥,让B用这个加密回消息)

数字签名

1. 数字签名的原理是A将密文t1做一个hash运算得到一个摘要z1,将z1和自己的一些信息i1一起用自己的私钥s1一起加密得到签名m1,
然后将密文t1和签名m1一起发送给对方B
2. B收到之后,用A的公钥PA将m1解密得到z1'和i1',这个时候对t1做hash运算得到的摘要z2和z1'做比较,如果不相同,则这条消息被修改了。
3. 所有数字签名的核心是用自己的私钥做加密,如果用谁的公钥解开了,那就证明对方是谁。
这个时候别人替换或者篡改都没可能了,篡改用hash保证的。

https加密流程

基础流程

  1. 客户端C向服务器S发起请求,发送给服务器端自己的公钥Cg
  2. 服务器端回给客户端自己的数字证书,里面包含自己的公钥Sg
  3. 客户端将自己的密码Cm(临时生成的)用Sg加密之后发送给对方。
  4. 服务器端收到Cm之后保存起来,后续的通讯全部用Cm加密进行
  5. 总结下来就是先用非堆成加密交换了密钥,后面用对称加密进行数据传输,主要是非对称加密运算量较大。

问题1:如果上面的第2部被人替换了公钥怎么办?那中间人就可以获取到你的密码了。

  1. 这个时候需要对方除了发送Sg过来之后还需要加上一个数字证书。数字证书是用的第三方的私钥加密的,必须用第三方的公钥来解开。解开之后确认里面的公钥和身份等想关信息
  2. 这个时候访问有些网站的时候提示不安全,因为使用的第三方公钥不是浏览器信任的。可能需要去第三方下载。
  3. 当然上面你的通讯流程都可以加上数字签名。 网上看的流程都没有详细说这个数字签名,如果有数字签名,那必须加上一个客户端的公钥给服务器啊

ssh加密流程

  1. 约等于和tpps一样,只是缺少了一个数字证书来验证,那这个时候需要访问者自己确认对方的公钥是否是正确的,有一个公钥指纹确认。

github使用公钥的作用是什么

  1. 就是讲临时生成的密钥用自己的私钥加密传给对方,让对方的公钥解开。能解开说明是正确的内容。获得正确的私钥。后面用这个来加密做就好了
  2. 我这个做法不对,这个密钥是服务器生成的传给客户端,然后客户端用一个私钥来加密数据。
  3. 在网上看有一些ssh在认证前有一些特殊的生成密钥的步骤。。搞不懂这里为什么要有这些。这个密钥让客户端临时生成就好了。