SSL/TLS协议


原文链接: SSL/TLS协议

精华
SSL/TLS协议

  1. HASH 消息摘要算法

消息摘要算法包括MD(Message Digest 消息摘要算法),SHA(Secure Hash Algorithm 安全散列算法)和MAC(Message authentication code消息验证码)三个系列。主要用于验证数据的完整性,密码加密等领域。
MD系列算法

MD系列算法包括MD,MD2,MD3,MD4,MD5。是一个不断优化改进的过程。MD5是输入不定长信息,输出固定长度128-bits的算法。基本方式为,求余、取余、调整长度、与链接变量进行循环运算。经过程序流程,生成四个32位数据,最后联合起来成为一个128-bits散列。 - 性能 - 安全性。 - MD5会产生Hash碰撞,不适用于SSL证书,数字签章。 - 彩虹表反查,可以轻松破解。加salt之后,会乐观点,取决于salt的长度。某些网站,轻松使用大数据,上百TB的硬盘,存储了大量组合的MD5值。

最好不要在密码校验的场景使用MD5。目前只适合校验数据完整性。
SHA系列算法

SHA系列包括五个算法,分别是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512,后4中并称为SHA2。 SHA是FIPS所认证的五种安全散列算法。这些算法之所以称作“安全”是基于以下两点(根据官方标准的描述): - 由消息摘要反推原输入消息,从计算理论上来说是很困难的。 - 想要找到两组不同的消息对应到相同的消息摘要,从计算理论上来说也是很困难的。任何对输入消息的变动,都有很高的概率导致其产生的消息摘要迥异。 SHA-1应用在很多安全领域,曾被视为MD5的后继者,不过现在安全性受到严重质疑。目前为止尚无对SHA2的有效攻击,不过SHA2的算法和HSA1基本相似。
MAC

MAC与MD和SHA不同,MAC是含有密钥的散列函数算法,我们也常把MAC称为HMAC。
慢Hash函数

一般网站在存储用户密码的时候,使用上述的散列算法进行散列后存储,在用户登录的时候,对用户输入的密码做散列,然后对比验证。如果网站密码泄露,被黑客获取,通过彩虹表可以轻松破解。为了应对破解的问题,有了3种新的慢Hash函数,所谓慢Hash,就是让签名的过程变得很慢,需要消耗更多地cpu和内存,使黑客建立彩虹表的成本变高。
目前主要有三种bcrypt,scrypt,PBKDF2。

  • PBKDF2(Password-Based Key Derivation Function)。PBKDF2简单而言就是将salted hash进行多次重复计算,这个次数是可选择的。如果计算一次所需要的时间是1微秒,那么计算1百万次就需要1秒钟。假如攻击一个密码所需的rainbow table有1千万条,建立所对应的rainbow table所需要的时间就是115天。这个代价足以让大部分的攻击者忘而生畏。
  • bcrypt。bcrypt是专门为密码存储而设计的算法,基于Blowfish加密算法变形而来,由Niels Provos和David Mazières发表于1999年的USENIX。 bcrypt最大的好处是有一个参数(work factor),可用于调整计算强度,而且work factor是包括在输出的摘要中的。随着攻击者计算能力的提高,使用者可以逐步增大work factor,而且不会影响已有用户的登陆。 bcrypt经过了很多安全专家的仔细分析,使用在以安全著称的OpenBSD中,一般认为它比PBKDF2更能承受随着计算能力加强而带来的风险。bcrypt也有广泛的函数库支持,因此使用这种方式存储密码会更安全。
  • scrypt。scrypt是由著名的FreeBSD黑客 Colin Percival为他的备份服务 Tarsnap开发的。 和上述两种方案不同,scrypt不仅计算所需时间长,而且占用的内存也多,使得并行计算多个摘要异常困难,因此利用rainbow table进行暴力攻击更加困难。scrypt没有在生产环境中大规模应用,并且缺乏仔细的审察和广泛的函数库支持。但是,scrypt在算法层面只要没有破绽,它的安全性应该高于PBKDF2和bcrypt。 涉及的问题: MD5,SHA-1,HMAC,bcrypt,scrypt,PBKDF2

对称加密算法:
涉及的问题: DES,3DES,Blowfish,IDEA,RC4,RC5,RC6,AES
高级加密标准AES的工作模式(ECB、CBC、CFB、OFB)

非对称加密算法:
涉及的问题:公钥,私钥,证书系统,RSA,ECC,E1 Gamal,DSA,Diffie–Hellman key exchange。

Base64编码
RSA/ECB/PKCS1Padding

1、对称密码体制
AES
对称密码体制是一种传统密码体制,也称为私钥密码体制。在对称加密系统中,加密和解密采用相同的密钥。因为加解密密钥相同,需要通信的双方必须选择和保存他们共同的密钥,各方必须信任对方不会将密钥泄密出去,这样就可以实现数据的机密性和完整性。对于具有n个用户的网络,需要n(n-1)/2个密钥,在用户群不是很大的情况下,对称加密系统是有效的。但是对于大型网络,当用户群很大,分布很广时,密钥的分配和保存就成了问题。对机密信息进行加密和验证随报文一起发送报文摘要(或散列值)来实现。比较典型的算法有DES(Data Encryption Standard数据加密标准)算法及其变形TripleDES(三重DES),GDES(广义DES);欧洲的IDEA;日本的FEAL N、RC5等。DES标准由美国国家标准局提出,主要应用于银行业的电子资金转帐(EFT)领域。DES的密钥长度为56bit。Triple DES使用两个独立的56bit密钥对交换的信息进行3次加密,从而使其有效长度达到112bit。RC2和RC4方法是RSA数据安全公司的对称加密专利算法,它们采用可变密钥长度的算法。通过规定不同的密钥长度,,C2和RC4能够提高或降低安全的程度。对称密码算法的优点是计算开销小,加密速度快,是目前用于信息加密的主要算法。它的局限性在于它存在着通信的贸易双方之间确保密钥安全交换的问题。此外,某一贸易方有几个贸易关系,他就要维护几个专用密钥。它也没法鉴别贸易发起方或贸易最终方,因为贸易的双方的密钥相同。另外,由于对称加密系统仅能用于对数据进行加解密处理,提供数据的机密性,不能用于数字签名。因而人们迫切需要寻找新的密码体制。

2、非对称密码体制
非对称密码体制也叫公钥加密技术,该技术就是针对私钥密码体制的缺陷被提出来的。在公钥加密系统中,加密和解密是相对独立的,加密和解密会使用两把不同的密钥,加密密钥(公开密钥)向公众公开,谁都可以使用,解密密钥(秘密密钥)只有解密人自己知道,非法使用者根据公开的加密密钥无法推算出解密密钥,顾其可称为公钥密码体制。如果一个人选择并公布了他的公钥,另外任何人都可以用这一公钥来加密传送给那个人的消息。私钥是秘密保存的,只有私钥的所有者才能利用私钥对密文进行解密。公钥密码体制的算法中最著名的代表是RSA系统,此外还有:背包密码、McEliece密码、Diffe_Hellman、 Rabin、零知识证明、椭圆曲线、EIGamal算法等。公钥密钥的密钥管理比较简单,并且可以方便的实现数字签名和验证。但算法复杂,加密数据的速率较低。公钥加密系统不存在对称加密系统中密钥的分配和保存问题,对于具有n个用户的网络,仅需要2n个密钥。公钥加密系统除了用于数据加密外,还可用于数字签名。公钥加密系统可提供以下功能:A、机密性(Confidentiality):保证非授权人员不能非法获取信息,通过数据加密来实现;B、确认(Authentication):保证对方属于所声称的实体,通过数字签名来实现;C、数据完整性(Data integrity):保证信息内容不被篡改,入侵者不可能用假消息代替合法消息,通过数字签名来实现;D、不可抵赖性(Nonrepudiation):发送者不可能事后否认他发送过消息,消息的接受者可以向中立的第三方证实所指的发送者确实发出了消息,通过数字签名来实现。可见公钥加密系统满足信息安全的所有主要目标。

SSL/TLS协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。

但是,这里有两个问题。
(1)如何保证公钥不被篡改?

解决方法:将公钥放在数字证书中。只要证书是可信的,公钥就是可信的。

(2)公钥加密计算量太大,如何减少耗用的时间?

解决方法:每一次对话(session),客户端和服务器端都生成一个"对话密钥"(session key),用它来加密信息。由于"对话密钥"是对称加密,所以运算速度非常快,而服务器公钥只用于加密"对话密钥"本身,这样就减少了加密运算的消耗时间。

因此,SSL/TLS协议的基本过程是这样的:

(1) 客户端向服务器端索要并验证公钥。
(2) 双方协商生成"对话密钥"。
(3) 双方采用"对话密钥"进行加密通信。

上面过程的前两步,又称为"握手阶段"(handshake)。

`