写点什么

TLS 协议分析 (一) 设计目标及历史

用户头像
OpenIM
关注
发布于: 2 小时前

TLS 协议分析 (一) 设计目标及历史


最近发现密码学很有意思,刚好还和工作有点关系,就研究了一下,本文是其中一部分笔记和一些思考。


密码学理论艰深,概念繁多,本人知识水平有限,错误难免,如果您发现错误,请务必指出,非常感谢!


本文目标:


  1. 学习鉴赏 TLS 协议的设计,透彻理解原理和重点细节

  2. 跟进一下密码学应用领域的历史和进展

  3. 整理现代加密通信协议设计的一般思路


本文有门槛,读者需要对现代密码学有清晰而系统的理解,本文最后的参考文献里有一些很不错的学习资料。


目录 :


TLS协议分析 与 现代加密通信协议设计一 . TLS协议的设计目标:1. 密码学的方法论2. TLS的设计目标3. TLS的历史二. TLS协议的原理1. 自顶向下,分层抽象2. TLS CipherSuite3. 协议分层4. record 协议4.1. SecurityParameters4.2. record层分段4.3. record层的密码学保护4.4. record层的密码学保护--MAC4.5. record层的密码学保护--stream cipher4.6. record层的密码学保护-- CBC block cipher4.7. record层的密码学保护-- AEAD cipher4.8. record层的密码学保护-- Key扩展5. handshake 协议5.1.handshake的总体流程5.2. handshake 协议外层结构5.3. handshake -- ClientHello,ServerHello,HelloRequest5.4. handshake -- Server Certificate5.5. handshake -- Server Key Exchange5.6. handshake -- Certificate Request5.7. handshake -- Server Hello Done5.8. handshake -- Client Certificate5.9. handshake -- Client Key Exchange5.9.1. RSA 加密的 Premaster Secret 消息5.9.2. 客户端 Diffie-Hellman 公钥5.9.3 客户端 EC Diffie-Hellman 公钥5.10. handshake -- Cerificate Verify5.11. handshake -- Finished5.12. handshake -- NewSessionTicket6. ChangeCipherSpec 协议7. Alert 协议8. application data协议9. TLS协议的安全分析9.1. 认证和密钥交换 的安全性9.2. 版本回退攻击9.3. 针对握手过程的攻击9.4. 针对 Resuming Sessions 的攻击9.5. 针对应用数据保护的攻击9.6. 显式 IV的安全性9.7. 加密和MAC组合模式的安全性9.8. DOS 攻击下的安全性9.9.Session Ticket 的安全分析10. TLS扩展:11. TLS的配套:PKI体系11.1. X.509 证书11.2.现有PKI体系暴露出的问题11. TLS协议历史上出现过的漏洞,密码学常见陷阱11.1. TLS的漏洞12.1. TLS的漏洞12.2. 密码学常见陷阱13. 下一代TLS: TLS 1.3三. TLS协议的代码实现四. TLS协议的部署与优化五. 更多的加密通信协议case:QUIC,iMessage,TextSecure, otr, ios HomeKit,libsodium1. QUIC2. apple ios iMessage3. apple ios HomeKit4. TextSecure5. otr 协议6. libsodium/NaCL 等六. TLS协议给我们的启发 -- 现代加密通信协议设计七. 附录:密码学基础概念八. 参考文献:1. TLS/SSL 相关RFC及标准2. 协议分析文章3. 实际部署调优相关4. 密码学相关5. 相关开源项目
复制代码

一 . 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. 密码学安全(1). 保密, message privacy (保密通过加密 encryption 实现,所有信息都加密传输,第三方无法窃听 )(2). 完整性, message integrity( 通过 MAC 校验机制,一旦被篡改,通信双方会立刻发现 )(3). 认证, mutual authentication (双方认证,双方都可以配备证书,防止身份被冒充 )

  2. 互操作,通用性 ( 根据公开的 rfc,任何符合 rfc 的软件实现都可以互操作,不受限于任何专利技术)

  3. 可扩展性 ( 通过扩展机制 tls_ext 可以添加功能,有大量的新功能,都是通过扩展添加的)

  4. 高效率 (通过 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

用户头像

OpenIM

关注

还未添加个人签名 2021.08.30 加入

还未添加个人简介

评论

发布
暂无评论
TLS协议分析 (一) 设计目标及历史