加密算法、公钥、私钥、数字签名与CA

文章目录

  • 一、对称加密算法
  • 二、非对称加密算法
    • 1、RSA算法
      • 1.1、双向加解密的各自用途
      • 1.2、可逆与不可逆
      • 1.3、RSA秘钥长度
  • 三、数字签名(Digital Sign)
    • 1、为什么要签名
    • 2、怎么签名
  • 四、CA(Certificate Authority 证书颁发机构)
    • 1、为什么需要CA
    • 2、如何从CA获取A的证书
    • 3、安装证书
  • 四、消失的U盾
  • 五、参考文章

一、对称加密算法

  秘钥、可逆、逆算法
  一开始加解密过程,都是对称加密算法,对称的意思是加密和解密是相反(对称)的过程。
  我们假设A希望从B处通过加密得到一串信息
  B选择一种加密规则r和秘钥,甚至没有秘钥,对信息m进行加密
  A使用r规则的逆规则R,如果加密使用秘钥,则须使用相同的秘钥,对信息进行解密
对称加密算法有如下的缺点:

  1. 任意一端逻辑泄露,就可以破解消息,尤其是多人传输消息的时候,端越多风险越大。
  2. 另外,假设一对多发送消息,可能不希望其它消息接收方能破译消息,所以发往每个消息接收者的秘钥要有所不同,使得秘钥管理变得繁琐。
  3. 在开放的互联网中,如何通过公共途径把秘钥安全送达到对方手中也是个问题。

二、非对称加密算法

  为了解决对称加密算法的这些问题,发明了非对称加密,非对称,简单说就是钥匙和锁是一组,但是根据锁无法推测出钥匙的形状,而对称加密算法,能够根据锁反推测出钥匙的形状(算法),如果再获取到秘钥(钥匙)就能解密,所以不够安全。做法是生成一组公钥和私钥,消息接收方保存私钥(就一份,自己收好,不传播,所以安全性高),公钥给消息发送方,可以有很多发送方 。消息发送方将消息使用加密算法进行加密接收方使用私钥进行解密才能得到报文。

1、RSA算法

  生成公钥私钥最常用的叫做RSA算法,是由创建这个算法的三个人的首字母组成的,其中的逻辑看不懂,感兴趣的可以百度搜,总之很多密码学算法都是利用某些数学难题,使加密算法难以破解。
这个算法有两个特点:1、非对称加密 2、可逆。

1.1、双向加解密的各自用途

  RSA是可以双向加解密的,但是用于加解密的时候,只会有公钥加密,私钥解密。试想如果私钥加密,公钥是公开的,,,那不是谁都能破译消息。
  私钥加密,公钥解密用于另一种场景,那就是数字签名,用此来证明这个报文确实是我发出去的,内容就是这个内容。
注意这两种场景的方向。

1.2、可逆与不可逆

  可逆就是加密完还可以解密,假设目的用来传输报文,必须使用可逆算法保证对方能解开。解密需要钥匙(私钥)。
不可逆,密文无法转成明文,所以不可逆算法不需要钥匙(也有钥匙,我们这个时候管它叫做“”)。但是相同的明文一定会得到相同的结果(未必),如果报文发生变化,内容一定会发生变化,报文不发生变化,密文也一定不会发生变化。所以可以用于验证内容是否一致。
  不可逆的加密算法,大部分是Hash算法中的,比如MD5、SHA1、Bcrypt

1.3、RSA秘钥长度

  长度越长,越难破解。目前已经破解到了700+位的,推荐使用1024位,甚至2048位来确保安全。

三、数字签名(Digital Sign)

1、为什么要签名

  在纸质文件上,会有盖章、签字,用来标识这个文档是被认可的,是有效的。在纸质的文件上,文件是很难被篡改的(复印,PS,伪造公章,伪造签名这些手法总有瑕疵)。而电子档的文件内容被改掉之后是看不出来的,发送发发出一份文件,中途被人修改了内容,继续发出去,怎么证明是发错了,还是被人改了,甚至是接收方收到之后自己改动了的。
  用百度百科的话说就是:
–保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖发生。

2、怎么签名

  将文档进行Hash,得到H(有的文章把这个叫做指纹),然后将H使用私钥加密,得到的就叫做数字签名,然后将【报文+数字签名】发给接收方。
  这里面有两个关键点,一个是Hash算法。Hash算法是对文档进行摘要,相同的文档得到的Hash值一定相同,对文档稍作修改,就会得到不同的Hash值。然后Hash算法的实现有很多种,接收方要和发送方要约定,采用相同的Hash算法,采用什么样的Hash算法完全可以公开。
  另一个关键点就是使用私钥加密,这样证明签名是发送方签发的,如果不加密,攻击者可以将内容改了,然后将Hash也顺便改了。
  网上有的文章说需要对报文也使用私钥加密,因为公钥是放出来的,加密的意义不是那么大。如果一定要加密,应该双向加密,报文使用接收方的公钥进行加密,Hash的结果使用发送方的私钥进行加密。这种意义没有那么大。

四、CA(Certificate Authority 证书颁发机构)

1、为什么需要CA

  在非对称加密中,因为私钥只有一份,由发送者自己负责私钥的安全,我们假定私钥是绝对安全的。而公钥是不安全的,公钥的使用者并没有意识/责任/能力保证公钥的安全。
  在数字签名场景中,私钥持有者为发送方,公钥持有者为接收方。假设攻击者知道了接收方公钥的位置与使用的Hash算法,使用自己的公钥将接收方的公钥替换,然后自己伪造一份报文,使用Hash算法得到指纹,将指纹用自己的私钥加密,形成假的”数字签名“,连同报文一起发送给接收方。接收方此时能够验证数字签名,认为这是一份有效力的报文。
  这样问题变成了如何保证公钥的安全。
  为了保证公钥的安全,出现了Certificate Authority(证书颁发机构),证书颁发机构存在的目的,作为权威第三方,它用来对公钥进行合法性检验。
  具体的验证方法是

  1. CA自己也有公钥、私钥。
  2. 发送方A去CA申请证书,将公钥和个人信息发送给CA,申请“数字证书”。
  3. CA验证A确实是申请者主体,给A制作一份“数字证书”,内容大约如下:
Issuer(签发机构) : SecureTrust CA 
Subject(公钥所属主体) : ABC Company
Valid from(有效期开始) : 某个日期
Valid to(有效期至): 某个日期
Public Key(A的公钥) : 一串很长的数字
...其它信息

证书会包含证书主体信息和算法+指纹
为了保证主体信息没有被篡改,对主体内容进行Hash生成指纹,然后将指纹加密,将算法和指纹密文也放到证书中。
5. 接收方,在使用A的公钥时
  1) 使用CA的公钥来解密指纹的密文,得到指纹
  2) 对主体进行Hash,得到的结果和指纹比对,如果相同,则认为证书没有被篡改
  3) 从证书中取出A的公钥来使用

  现在问题变成了如何保证CA公钥的安全。。
  CA的公钥存内置(焊接)在操作系统/浏览器中,操作系统/浏览器不允许修改这个公钥,由他们来保证CA公钥的安全。假设真的被篡改了,,,
  CA的产生就是觉得公钥不安全,就往上上升,使用CA来保证公钥的安全。所以归根到底公钥并不是绝对的安全,好比贷款买房,银行认定个人不安全,要找个担保公司。担保公司也有可能有跑路的一天。虽然一般来讲,CA比担保公司要靠谱的多。。。

2、如何从CA获取A的证书

  如果你使用的网页/工具需要证书,浏览器会提示下载的,自动下载安装,或者提前下载安装好引导安装。

3、安装证书

证书可以从机构申请,或者自己制作。。。操作系统有一系列权威CA的列表,会验证证书颁发者是否是权威机构,如果是权威机构会直接安装。如果不是,会提示风险,,这个时候需要你做出判断,如果你什么都管直接continue,那。。。
加密算法、公钥、私钥、数字签名与CA_第1张图片

四、消失的U盾

我们以前去银行开卡,每次还要花钱买个U盾(U key),U盾可以插入电脑、手机,在进行大额转账时必须使用U盾,现在都不会让人办这些了。
ukey是什么

  1. 去银行办完业务,银行工作人员拿一个空白ukey,买下
  2. 工作人员录入用户信息,让我们决定一个6位ukey密码(PIN Personal Identify Number),使用ukey生成用户公钥、私钥。
  3. 将用户信息,用户公钥,保存到银行内部的PKI(Public Key Infrastructure)平台。
  4. 服务器生成公钥、私钥对,将私钥自己保存,将服务器公钥生成证书,将CA证书保存到ukey
  5. 烧录完毕,带走,此时ukey有密码,有用户私钥,CA证书(服务器公钥)
  6. 需要使用时,插入ukey
  7. 输入PIN,解锁
  8. 如果没有安装CA证书,按提示安装CA证书,,,银行的CA证书一般都不在权威CA的可信列表中,所以装在U盾里让人有信心点下一步。
  9. 发送消息时,使用双向加密的方式。
  10. 其实个人好像也有个证书,,,来保证客户端是安全有效的,这一步不添加进来讲了。
      大额转账前必须要插U盾。输入PIN,安装证书什么的,太麻烦。现在移动支付大行其道,短信验证,指纹验证,人脸识别,这些手段不仅方便,安全性也不弱,逐渐淘汰了U盾。

五、参考文章

https://www.v2ex.com/t/177909
https://www.zhihu.com/question/24294477

你可能感兴趣的:(网络)