HTTPS的协议需求与密钥交换过程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTPS的协议需求与密钥交换过程相关的知识,希望对你有一定的参考价值。
参考技术A搞这么个协议是为了干嘛,这个协议需要具备什么样的特性。前三点非常重要,也是HTTPS协议的主要作用。
1. 对内容进行加密
建立一个信息安全通道,来保证数据传输的安全。
SSL/TLS协议进行加解密,且通常采用的非对称加密算法为RSA。
公钥加密,私钥解密。
2. 能够进行身份认证
确认对方的真实性。
证书由 受信任 的 数字证书认证机构 (Certificate Authority, CA)所颁发的,就认为对方是真的。
比如,12306官网的购票入口采用https协议,但其证书是由默认不受信任的CA所颁发的,这个机构叫SRCA,呵呵呵。
你也可以手动添加它为受信任的,但是至少默认是不受信任的。因此,在默认情况下,Chrome会认为这不是真正的12306官网的购票入口,返回错误为:
虽然它确实是真的,但是谁让它是个野鸡CA呢。
3. 能保证数据完整性
防止内容被第三方冒充或者篡改。
数字摘要是采用单项Hash函数将需要加密的明文“摘要”成一串固定长度(128位)的密文,这一串密文又称为 数字指纹 (fingerprint),它有固定的长度,而且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致。“数字摘要“是https能确保数据完整性和防篡改的根本原因。
所以只要对内容稍有改动,算出来的指纹就和原来的指纹不一样了,这样就可以知道内容已经被篡改过,不可信了。
4. 需要具备兼容性
基于兼容性的考虑,可以得出的结论是:
5. 需要具备可扩展性
前面说了,HTTPS 相当于是“HTTP over SSL”。
如果 SSL 这个协议在“可扩展性”方面的设计足够牛逼,那么它除了能跟 HTTP 搭配,还能够跟其它的应用层协议搭配。岂不美哉?
现在看来,当初设计 SSL 的人确实比较牛。如今的 SSL/TLS 可以跟很多常用的应用层协议(比如:FTP、SMTP、POP、Telnet)搭配,来强化这些应用层协议的安全性。
6. 需要考虑性能
为了确保性能,SSL 的设计者至少要考虑如下几点:
一些问题,答疑解惑。
风险就是:中间人攻击。
第1步(这是“一次性”的准备工作) 网站方面首先要花一笔银子,在某个 CA 那里购买一个数字证书。该证书通常会对应几个文件:其中一个文件包含公钥,还有一个文件包含私钥。此处的“私钥”,相当于“方案2”里面的 k1;而“公钥”类似于“方案2”里面的 k2。网站方面必须在 Web 服务器上部署这两个文件。所谓的“公钥”,顾名思义就是可以公开的 key;而所谓的“私钥”就是私密的 key。其实前面已经说过了,这里再唠叨一下:“非对称加密算法”从数学上确保了——即使你知道某个公钥,也很难(不是不可能,是很难)根据此公钥推导出对应的私钥。
第2步 当浏览器访问该网站,Web 服务器首先把包含公钥的证书发送给浏览器。
第3步 浏览器验证网站发过来的证书。如果发现其中有诈,浏览器会提示“CA 证书安全警告”。由于有了这一步,就大大降低了(注意:是“大大降低”,而不是“彻底消除”)前面提到的“中间人攻击”的风险。为啥浏览器能发现 CA 证书是否有诈?因为正经的 CA 证书,都是来自某个权威的 CA。如果某个 CA 足够权威,那么主流的操作系统(或浏览器)会内置该 CA 的“根证书”。(比如 Windows 中就内置了几十个权威 CA 的根证书)因此,浏览器就可以利用系统内置的根证书,来判断网站发过来的 CA 证书是不是某个 CA 颁发的。(关于“根证书”和“证书信任链”的概念,请参见《 数字证书及CA的扫盲介绍 》)
第4步 如果网站发过来的 CA 证书没有问题,那么浏览器就从该 CA 证书中提取出“公钥”。然后浏览器随机生成一个“对称加密的密钥”(以下称为 k)。用 CA 证书的公钥加密 k,得到密文 k\'浏览器把 k\' 发送给网站。
第5步 网站收到浏览器发过来的 k\',用服务器上的私钥进行解密,得到 k。至此,浏览器和网站都拥有 k,“密钥交换”大功告成啦。
总结:
1.client和server之间,首先通过CA证书的公钥/密钥同步 对称密钥 ,之后信息的传输用 对称密钥 进行加解密。
2.client不会再顺便接受一个公钥了,这个公钥必须是CA认证的才行。所以这时中间人截获了CA证书的公钥就没毛用了,就算cilent用证书公钥加密一个k,然后发送给它,它也没办法解开,因为它没CA证书的私钥。
3.所以突破口就在CA证书上了。
背景知识、协议的需求、设计的难点
https://program-think.blogspot.com/2014/11/https-ssl-tls-1.html
数字证书与认证机构CA
https://program-think.blogspot.com/2010/02/introduce-digital-certificate-and-ca.html
非对称VS对称,身份认证
https://program-think.blogspot.com/2014/11/https-ssl-tls-2.html
详解https是如何确保安全的
http://www.wxtlife.com/2016/03/27/%E8%AF%A6%E8%A7%A3https%E6%98%AF%E5%A6%82%E4%BD%95%E7%A1%AE%E4%BF%9D%E5%AE%89%E5%85%A8%E7%9A%84%EF%BC%9F/
相关异常javax.net.ssl.SSLHandshakeException:
http://www.jianshu.com/p/7c1bc2daef8d
Diffie-Hellman 密钥交换&ElGamal协议的安全密钥交换
参考技术A在整数中, 离散对数 是一种基于同余运算和原根的一种对数运算。而在实数中对数的定义 是指对于给定的 a 和 b ,有一个数 x ,使得 = a 。相同地在任何群 G 中可为所有整数 k 定义一个幂数为 ,而 离散对数 是 指使得 = a的 整数 k 。
离散对数在一些特殊情况下可以快速计算。然而,通常没有具非常效率的方法来计算它们。公钥密码学中几个重要算法的基础,是假设寻找离散对数的问题解,在仔细选择过的群中,并不存在有效率的求解算法。
Diffie-Hellman是一种建立密钥的方法,而不是加密方法。然而,它所产生的密钥可用于加密、进一步的密钥管理或任何其它的加密方式。Diffie-Hellman密钥交换算法及其优化首次发表的公开密钥算法出现在Diffie和Hellman的论文中,这篇影响深远的论文奠定了公开密钥密码编码学。
这种密钥交换技术的目的在于使得两个用户安全地交换一个秘密密钥以便用于以后的报文加密. Diffie-Hellman密钥交换算法的有效性依赖于计算离散对数的难度 。
From WIKI:
最简单,最早提出的这个协议使用一个质数 p 的整数模n乘法群)以及其原根 g 。下面展示这个算法,绿色表示非秘密信息, 红色粗体 表示秘密信息
爱丽丝和鲍伯就同时协商出群元素 ,它可以被用作共享秘密。 和 因为群乘法交换的。
爱丽丝和鲍伯最终都得到了同样的值,因为在模p下 和 相等。 注意a, b 和 是秘密的。 其他所有的值 – p, g, , 以及 – 都可以在公共信道上传递。 一旦爱丽丝和鲍伯得出了公共秘密,他们就可以把它用作对称密钥,以进行双方的加密通讯,因为这个密钥只有他们才能得到。
1984年,T.Elgamal提出了一种基于离散对数的公开密钥体制,是一个基于迪菲-赫尔曼密钥交换的非对称加密算法。ElGamal密码体系应用于一些技术标准中,如数字签名标准(DSS)和S/MIME电子邮件标准。与Diffie-Hellman一样,ElGamal的系统用户也是共同选择一个素数q, 是q的素跟。
ElGamal加密算法由三部分组成:密钥生成、加密和解密。
密钥生成步骤如下:
其他用户可以通过Alice的公钥进行加密。
用Alice的公钥 向她加密一条消息 m的加密算法工作方式如下:
Alice利用自己的私钥进行解密。
如果信息必须分组,然后以加密的密钥块序列发送,那么每个分块要有唯一的x(私钥)。如果x用于多个分块,则利用信息的分块 ,攻击者会计算出其他块。
ElGamal的安全性是基于计算离散对数的困难性之上。
[1]维基百科编者. 迪菲-赫尔曼密钥交换[G/OL]. 维基百科, 2018(20180503)[2018-05-03]. https://zh.wikipedia.org/w/index.php?title=%E8%BF%AA%E8%8F%B2-%E8%B5%AB%E7%88%BE%E6%9B%BC%E5%AF%86%E9%91%B0%E4%BA%A4%E6%8F%9B&oldid=49408565 .
[2]《密码编码学与网络安全 原理与实践》(第6版)斯托林斯著
[3]维基百科编者. ElGamal加密算法[G/OL]. 维基百科, 2016(20161214)[2016-12-14]. https://zh.wikipedia.org/w/index.php?title=ElGamal%E5%8A%A0%E5%AF%86%E7%AE%97%E6%B3%95&oldid=42453545 .
以上是关于HTTPS的协议需求与密钥交换过程的主要内容,如果未能解决你的问题,请参考以下文章