SSL安全原理

对称密匙密码体制

  加密密匙和解密密匙使用的是相同的密码体制。

公式密码体制

  RSA密码体制是一种公钥密码体制,公钥公开,私钥保密,它的加密解密算法是公开的。 由公钥加密的内容可以并且只能由私钥进行解密,并且由私钥加密的内容可以并且只能由公钥进行解密。也就是说,RSA的这一对公钥、私钥都可以用来加密和解密,并且一方加密的内容可以由并且只能由对方进行解密。 

  使用不同的加密密匙与解密密匙。这种密码体制的产生是因为对称密匙密码体制的分配和数字签名的需求。

  在公钥密码体制中,加密密钥PK(public key,即公钥)是公开的,而解密密钥SK(secret key,即私钥)是需要保密的。假设A向B使用公钥密码体制发送消息,主要过程如下:

  1. 密钥对产生器产生接受者B的一对密钥,加密密钥PKb和解密密钥SKb。B将PKb公开,发送者所用的加密密匙PBk就是接收着B的公匙,他向公众公开,而B所用的解密密匙SKb就是接受者B的私钥,对其他人都保密
  2. 发送者A用B的公钥 PBk通过E运算对明文X加密,得出密文Y发送给B:Y=Epkb(X);
  3. 用自己的私钥SKb通过D运算进行解密,恢复出明文:Dskb(Y)=Dskb(Epkb(X))=X;
  4. 虽然计算机上很容易产生PKb和SKb,但从已知的PKb实际上不能导出SKb,即从PKb到SKb是“计算上不可能的”
  5. 虽然公钥可以用来加密,但不能用来解密:Dpkb(Epkb(X))!=X
  6. 先对X进行D运算和E运算或进行E运算和D运算结果是一样的:Epkb(Dskb(X))=Dskb(Epkb(X))=X

信息摘要

  将消息哈希转换成一个固定长度的值唯一的字符串。值唯一的意思是不同的消息转换的摘要是不同的,并且能够确保唯一。该过程不可逆,即不能通过摘要反推明文(似乎SHA1已经可以被破解了,SHA2还没有。一般认为不可破解,或者破解需要耗费太多时间,性价比低)。利用这一特性,可以验证消息的完整性。

数字签名

  作用:为了向“客户”证明自己是“服务器”, “服务器”把一个字符串(也就是信息摘要)用自己的私钥加密——即数字签名,把明文和加密后的密文一起发给“客户”。

  “客户”收到信息后,用自己持有的公钥解密密文,和明文进行对比,如果一致,说明信息的确是由服务器发过来的。因为由“服务器”用私钥加密后的内容,由并且只能由公钥进行解密,私钥只有“服务器”持有,所以如果解密出来的内容是能够对得上的,那说明信息一定是从“服务器”发过来的。

  RSA加密算法在这个通信过程中所起到的作用主要有两个:

  1. 因为私钥只有“服务器”拥有,因此“客户”可以通过判断对方是否有私钥来判断对方是否是“服务器”。——数字签名的应用
  2. 客户端通过RSA的掩护,安全的和服务器商量好一个对称加密算法和密钥来保证后面通信过程内容的安全。

数字签名的三个功能

  1. 接收者核实发送者对报文的签名,因为除了A外没有被人持有A的私钥,所以除了A外没有别人产生密文Dska(X)的能力,所以B相信报文X是A签名发送的——报文鉴别
  2. 接收者确信所收到的数据和发送者发送的完全一致而没有被篡改过,因为如果其他人篡改了报文,无法用A的私钥SKa对X进行加密,那么B对篡改的报文进行解密将会得到不可读的明文,就知道报文被篡改过,这可保证——报文的完整性
  3. 发送者事后不能对报文签名的抵赖,若A要想抵赖曾发送报文给B,B可把X及Dsk(X)出示进行给公证的第三者——不可否认

 

数字证书

  数字证书可以保证数字证书里的公钥确实是这个证书的所有者(Subject)的,或者证书可以用来确认对方的身份。也就是说,我们拿到一个数字证书,我们可以判断出这个数字证书到底是谁的

  1. Issuer (证书的发布机构):指出是什么机构发布的这个证书,也就是指明这个证书是哪个公司创建的(只是创建证书,不是指证书的使用者)。对于上面的这个证书来说,就是指"SecureTrust CA"这个机构。
  2. Valid from , Valid to (证书的有效期):也就是证书的有效时间,或者说证书的使用期限。 过了有效期限,证书就会作废,不能使用了。
  3.  Public key (公钥):这个我们在前面介绍公钥密码体制时介绍过,公钥是用来对消息进行加密的,第2章的例子中经常用到的。这个数字证书的公钥是2048位的,它的值可以在图的中间的那个对话框中看得到,是很长的一串数字。
  4. Subject (主题):这个证书是发布给谁的,或者说证书的所有者,一般是某个人或者某个公司名称、机构的名称、公司网站的网址等。 对于这里的证书来说,证书的所有者是Trustwave这个公司。
  5. Signature algorithm (签名所使用的算法):就是指的这个数字证书的数字签名所使用的加密算法,这样就可以使用证书发布机构的证书里面的公钥,根据这个算法对指纹进行解密。指纹的加密结果就是数字签名(第1.5节中解释过数字签名)。
  6. Thumbprint, Thumbprint algorithm (指纹(hash值)以及指纹算法(hash算法)):这个是用来保证证书的完整性的,也就是说确保证书没有被修改过,这东西的作用和2.7中说到的第3个问题类似。 其原理就是在发布证书时,发布者根据指纹算法(一个hash算法)计算整个证书的hash值(指纹)并和证书放在一起,使用者在打开证书时,自己也根据指纹算法计算一下证书的hash值(指纹),如果和刚开始的值对得上,就说明证书没有被修改过,因为证书的内容被修改后,根据证书的内容计算的出的hash值(指纹)是会变化的。 注意,这个指纹会使用"SecureTrust CA"这个证书机构的私钥用签名算法(Signature algorithm)加密后和证书放在一起。

 数字证书的应用

  假设我们公司"ABC Company"花了1000块钱,向一个证书发布机构"SecureTrust CA"为我们自己的公司"ABC Company"申请了一张证书,注意,这个证书发布机构"SecureTrust CA"是一个大家公认并被一些权威机构接受的证书发布机构,我们的操作系统里面已经安装了"SecureTrust CA"的证书。"SecureTrust CA"在给我们发布证书时,把Issuer,Public key,Subject,Valid from,Valid to等信息以明文的形式写到证书里面,然后用一个指纹算法计算出这些数字证书内容的一个指纹,并把指纹和指纹算法用自己的私钥进行加密,然后和证书的内容一起发布,同时"SecureTrust CA"还会给一个我们公司"ABC Company"的私钥给到我们。我们花了1000块钱买的这个证书的内容如下:

Issuer : SecureTrust CA
Subject : ABC Company
Valid from : 某个日期
Valid to: 某个日期
Public Key : 一串很长的数字
…… 其它的一些证书内容……
{证书的指纹和计算指纹所使用的指纹算法}[SecureTrust CA的私钥|RSA]//这个就是"SecureTrust CA"对这个证书的一个数字签名,表示这个证书确实是他发布的,有什么问题他会负责(收了我们1000块,
出了问题肯定要负责任的)

  我们"ABC Company"申请到这个证书后,我们把证书投入使用,我们在通信过程开始时会把证书发给对方,对方如何检查这个证书的确是合法的并且是我们"ABC Company"公司的证书呢?首先应用程序(对方通信用的程序,例如IE、OUTLook等)读取证书中的Issuer(发布机构)为"SecureTrust CA" ,然后会在操作系统中受信任的发布机构的证书中去找"SecureTrust CA"的证书,如果找不到,那说明证书的发布机构是个水货发布机构,证书可能有问题,程序会给出一个错误信息。 如果在系统中找到了"SecureTrust CA"的证书,那么应用程序就会从证书中取出"SecureTrust CA"的公钥,然后对我们"ABC Company"公司的证书里面的指纹和指纹算法用这个公钥进行解密,然后使用这个指纹算法计算"ABC Company"证书的指纹,将这个计算的指纹与放在证书中的指纹对比,如果一致,说明"ABC Company"的证书肯定没有被修改过并且证书是"SecureTrust CA" 发布的,证书中的公钥肯定是"ABC Company"的。对方然后就可以放心的使用这个公钥和我们"ABC Company"进行通信了。

对称加密密钥分配

  密钥分配中心(KDC),这是一个大家都信任的机构,其任务就是给需要进行秘密通信的用户临时分配一个会话密钥(仅使用一次),假设A和B都是KDC的登记用户,A和B在KDC登记时就已经在KDC上安装了各自和KDC进行通信的主密钥Ka和Kb,

  1. 用户A向密钥分配中心KDC发送时用明文,说明想和用户B通信,在明文中给出B在KDC登记的身份
  2. KDC用随机数产生“一次一密”的会话密钥Kab供A和B这次会话使用,然后向A发送回答报文,这个回答报文用A的密钥Ka加密,这个报文包含这次使用的Kab和请A传送给B的一个票据,该票据包括A和B在KDC登记的身份,以及这次会话将要使用的密钥Kab,票据用B的密钥Kb加密,A无法知道票据的内容,因为A没有B的密钥Kb
  3. 当B收到A传来的票据并用自己的密钥Kb解密后,知道A要和他通信,同时也知道KDC为这次和A通信所分配的会话密钥Kab,此后A和B就可以通信了。

通信过程

原文地址:https://www.cnblogs.com/tianzeng/p/10960225.html