《密码学:一文读懂常用加密技术原理及其逻辑与应用方法》一文一经发布后,后台收到了许多私信,承蒙喜爱,这篇文章将主要对后台收到的高频问题予以统一回应。
问题一: 在讨论加密解密的过程中,常常在同一语境下同时出现SSL、TLS,请问两者的差异是什么?
答:在HTTPS协议中,网站与服务器通过非对称加密的方式实现Security,这一过程是一套独立于http协议的流程,被称为安全套接字层,也即Secure Socket Layer,即SSL。如下:
从示意图中不难发现,这个密钥协商的过程如同tcp一样,经历了三次握手,被称为SSL握手。
而从1994年到1996年,SSL分别经历了1.0,2.0和3.0的版本升级。在3.0级基础上,互联网工程事务组(IETF)决定将其标准化,最终于1999年以TLS为称呼发布。日常生活中,我们可以见到SSL和TLS间的混用,因为TLS1.0可以被视作SSL的3.1版本。
此后,TLS也经历了1.0、1.1、1.2和1.3的版本升级,对安全细节予以了改善。例如在TLS1.2版本中,淘汰了两种哈希函数(MD5/SHA-1)而用SHA-256取而代之。
问题二: 如何防止第三方机构CA机构不作恶?CT是什么?
答:CA(Certificate Authority)机构颁发证书,以实现对数字签名所发布的公钥进行权威的认证。因此,证书颁发机构(CA)必须是可信的。
在如何防止第三方机构CA机构不作恶问题上,《密码学:一文读懂常用加密技术原理及其逻辑与应用方法》一文中提到,对于认证机构的公钥,一般由其它的认证机构施加数字签名,从而对认证机构的公钥进行验证,即生成一张认证机构的公钥证书,这样的关系可以迭代好几层,以杜绝中间人假冒认证机构CA。最高一层的认证机构被称为根CA,RCA会对自己的公钥进行数字签名,即自签名,也会在RCA间互相签名。
在此基础上,我们进一步观察,还能发现,成为CA机构的门槛较高,例如Google、Microsoft、中国互联网信息中心、中国金融认证中心、Symantec、digicert、GlobalSign等等。这些机构原则上没有颁发非法或错误证书的动机。
实际上,除去思考CA机构能否作恶意外,我们还需要关注的问题有很多,例如CA机构有没有可能被黑客入侵呢?CA机构的办事员有没有可能犯错/作恶呢?
显然,CA机构的可信信问题面临巨大挑战。在棱镜门事件后,证书透明(Cetificate Transparence,CT)方案被提出。其核心逻辑是:
在加入CT的安全体系下,要求CA机构每次颁发证书时,要向日志服务器提交证书详情,日志服务器负责记录并向CA返回SCT数据,CA将SCT加入到证书扩展中,一并颁发给站点服务器。在TLS握手时,浏览器检测证书是否有SCT信息,并向日志服务器核验(日志服务器有自己的公私密钥,SCT中包含其私钥签名的数据,浏览器使用日志服务器的公钥,对SCT信息中的签名进行验签来确定真实性)。
换言之,证书透明(Cetificate Transparence,CT)方案通过加入一层监管者,以确保CA证书的透明性。
从2018年开始,由Crome和Safari浏览器牵头,各家浏览器强制执行证书中的CT检查,换言之,不携带SCT信息的证书将被标注为不安全,如此,所有的CA机构便被强制加入了监管体系。
那么如何保障日志服务器不作恶呢?实际上,日志服务器利用《密码学:一文读懂常用加密技术原理及其逻辑与应用方法》一文中提到的哈希函数的碰撞抗碰撞性(Collision Resistance)特性,通过默克尔树(Merkle Tree)来防止篡改——换言之,日志服务器成为了一个只能添加信息的“账本”系统。monitor/监管者(域名拥有者、CA机构)通过周期性查询可以检测是否存在可疑的证书颁发记录。
至此,本文也就进入尾声了。希望本文能够起到抛砖引玉之效,也欢迎大家的批评交流。
如果您有任何疑问或者好的建议,期待你的留言、评论与关注!