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

密码学实践艰深,概念繁多,自己常识程度无限,谬误不免,如果您发现错误,请务必指出,非常感谢!

本文指标:

  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/bl... ,有严格的技术规范,严禁没有通过学术训练者随便发明。要求谨严的实践建模,紧密的数学证实。很少有须要衡量的中央,正确就是正确,谬误就是谬误。又因为密码学过来在军事上的重要价值,各国政府始终投入大量人力物力财力,不断深入强化己方的算法,破解对手的算法,所以密码学就是一种残暴的军备竞赛。

  • 密码学有很多的陷阱(下文会介绍几个),设计应用密码学的协定或者软件,是极其容易出错,高风险的业余流动,单纯的码农背景是做不了的。本着不作死就不会死 的平凡理念,首先举荐读者尽可能应用 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...
  • 密码学算法很难被正确地实现(代码实现过程中会引入很多破绽,比方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/...

OpenIM官网 : https://www.rentsoft.cn

OpenIM官方论坛: https://forum.rentsoft.cn/

更多技术文章:

开源OpenIM:高性能、可伸缩、易扩大的即时通讯架构
https://forum.rentsoft.cn/thr...

【OpenIM原创】简略轻松入门 一文解说WebRTC实现1对1音视频通信原理
https://forum.rentsoft.cn/thr...

【OpenIM原创】开源OpenIM:轻量、高效、实时、牢靠、低成本的音讯模型
https://forum.rentsoft.cn/thr...