TLS 协议分析 (一) 设计目标及历史
TLS 协议分析 (一) 设计目标及历史
最近发现密码学很有意思,刚好还和工作有点关系,就研究了一下,本文是其中一部分笔记和一些思考。
密码学理论艰深,概念繁多,本人知识水平有限,错误难免,如果您发现错误,请务必指出,非常感谢!
本文目标:
学习鉴赏 TLS 协议的设计,透彻理解原理和重点细节
跟进一下密码学应用领域的历史和进展
整理现代加密通信协议设计的一般思路
本文有门槛,读者需要对现代密码学有清晰而系统的理解,本文最后的参考文献里有一些很不错的学习资料。
目录 :
一 . TLS 协议的设计目标:
1. 密码学的方法论
密码学和软件开发不同,软件开发是工程,是手艺,造轮子是写代码的一大乐趣。软件开发中常常有各种权衡,一般难有明确的对错,一般还用建筑来比拟软件的结构,设计的优雅被高度重视。
密码学就不一样了。[密码学是科学,不是工程] 见 http://www.daemonology.net/blog/2013-06-17-crypto-science-not-engineering.html ,有严格的技术规范,严禁没有经过学术训练者随意创造。要求严谨的理论建模,严密的数学证明。很少有需要权衡的地方,正确就是正确,错误就是错误。又由于密码学过去在军事上的重要价值,各国政府一直投入大量人力物力财力,不断深入强化己方的算法,破解对手的算法,所以密码学就是一种残酷的军备竞赛。
密码学有很多的陷阱(下文会介绍几个),设计使用密码学的协议或者软件,是极其容易出错,高风险的专业活动,单纯的码农背景是做不了的。本着不作死就不会死 的伟大理念,首先推荐读者尽可能使用 TLS 这种标准化,开源,广泛使用,久经考验,高性能的协议。本文也只是整理一点粗浅的科普常识,读完这篇文章,并不能使读者具有设计足够安全的密码学协议的能力。
密码学经过几十年的军备竞赛式发展,已经发展出大量巧妙而狡猾的攻击方法,我们使用的算法,都是在所有已知的攻击方法下都无法攻破的,由于我们大多数码农并没有精力去了解最前沿的攻击方法,所以我们其实并没有能力去评价一个加密算法,更没有能力自己发明算法。所以最好跟着业界的主流技术走,肯定不会有大错。
现代密码学近 20 年进展迅猛,现在搞现代密码学研究的主要都是数学家,在这个领域里面以一个码农的知识背景,已经很难理解最前沿的东西,连正确使用加密算法都是要谨慎谨慎再谨慎的。一个码农,能了解密码学基本概念,跟进密码学的最新应用趋势,并正确配置部署 TLS 这种协议,就很不错了。
密码学算法很难被正确地使用,各种细节非常容易出错。
例如:
1.大多数码农都听说过 aes,可是大多数都不了解细节,比如:aes 应该用哪种模式?应该用哪种 padding?IV/nonce 应该取多少 bit?IV/nonce 应该怎么生成? key size 应该选多大?key 应该怎么生成?应不应该加 MAC?MAC 算法的选择?MAC 和加密应该怎么组合?
2.大多数知道 RSA 的码农分不清 RSASSA-PKCS1-v1_5 ,RSAES-OAEP 和 RSASSA-PSS
3.更多错误参见 [这个 stackoverflow 问答,强烈推荐仔细阅读] 见 http://security.stackexchange.com/questions/2202/lessons-learned-and-misconceptions-regarding-encryption-and-cryptology
密码学算法很难被正确地实现(代码实现过程中会引入很多漏洞,比如 HeartBleed,比如各种随机数生成器的 bug,时间侧通道攻击漏洞)
不能一知半解,绝对不能在一知半解的情况下就动手设计密码学协议。犹如“盲人骑瞎马,夜班临深池”。
不能闭门造车,密码学相关协议和代码一定要开源,采用大集市式的开发,接受 peer review,被越多的人 review,出漏洞的可能越小(所以应该尽可能使用开源组件)
2. TLS 的设计目标
TLS 的设计目标是构建一个安全传输层(Transport Layer Security ),在基于连接的传输层(如 tcp)之上提供:
密码学安全(1). 保密, message privacy (保密通过加密 encryption 实现,所有信息都加密传输,第三方无法窃听 )(2). 完整性, message integrity( 通过 MAC 校验机制,一旦被篡改,通信双方会立刻发现 )(3). 认证, mutual authentication (双方认证,双方都可以配备证书,防止身份被冒充 )
互操作,通用性 ( 根据公开的 rfc,任何符合 rfc 的软件实现都可以互操作,不受限于任何专利技术)
可扩展性 ( 通过扩展机制 tls_ext 可以添加功能,有大量的新功能,都是通过扩展添加的)
高效率 (通过 session cache,恰当部署 cache 之后,tls 的效率很高)
请认准这几个目标,在后文中,会逐一实现。
3. TLS 的历史
1995: SSL 2.0, 由 Netscape 提出,这个版本由于设计缺陷,并不安全,很快被发现有严重漏洞,已经废弃。
1996: SSL 3.0. 写成 RFC,开始流行。目前(2015 年)已经不安全,必须禁用。
1999: TLS 1.0. 互联网标准化组织 ISOC 接替 NetScape 公司,发布了 SSL 的升级版 TLS 1.0 版.
2006: TLS 1.1. 作为 RFC 4346 发布。主要 fix 了 CBC 模式相关的如 BEAST 攻击等漏洞
2008: TLS 1.2. 作为 RFC 5246 发布 。增进安全性。目前(2015 年)应该主要部署的版本,请确保你使用的是这个版本
2015 之后: TLS 1.3,还在制订中,支持 0-rtt,大幅增进安全性,砍掉了 aead 之外的加密方式
由于 SSL 的 2 个版本都已经退出历史舞台了,所以本文后面只用 TLS 这个名字。读者应该明白,一般所说的 SSL 就是 TLS。
余下内容请见后续文章。
本文转自微信后台团队,如有侵犯,请联系我们立即删除
OpenIMgithub 开源地址:
https://github.com/OpenIMSDK/Open-IM-Server
OpenIM 官网 : https://www.rentsoft.cn
**OpenIM 官方论坛: **https://forum.rentsoft.cn/
更多技术文章:
开源 OpenIM:高性能、可伸缩、易扩展的即时通讯架构https://forum.rentsoft.cn/thread/3
【OpenIM 原创】简单轻松入门 一文讲解 WebRTC 实现 1 对 1 音视频通信原理https://forum.rentsoft.cn/thread/4
【OpenIM 原创】开源 OpenIM:轻量、高效、实时、可靠、低成本的消息模型https://forum.rentsoft.cn/thread/1
评论