背??景介绍最近在看《密码学与网络安全》相关的书。本文主要详细介绍著名的网络安全协议SSL。在开始介绍SSl之前,先介绍几个密码学的概念和相关知识。一、密码学的相关概念密码学(cryptography):目的是通过对信息进行编码使其不可读来达到安全的目的。纯文本:发件人、收件人和任何有权访问该邮件的人都可以理解的邮件。密文:明文消息经过某种方式编码后得到密文消息。加密:将明文消息转换为密文消息。解密:将密文消息转换为明文消息。算法:获取输入文本并生成输出文本。加密算法:发送方用于加密的算法。解密算法:接收方的解密算法。密钥(key):只有发送方和接收方才能理解的消息。对称密钥密码术:加密和解密使用相同的密钥。非对称密钥密码术:加密和解密使用不同的密钥。2.相关加密算法介绍DES算法即DataEncryptionStandard,也称为DataEncryptionAlgorithm。加密过程如下:在SSL中,采用分组DES、三重DES算法等加密算法对数据进行加密。当然也可以选择其他非DES的加密算法,视情况而定,后面会详细介绍。3.密钥交换算法在使用对称加密算法时,密钥交换是一个很大的问题,因此Diffie和Hellman提出了著名的Diffie-Hellman密钥交换算法。Diffie-Hellman密钥交换算法原理:(1)Alice和Bob确定两个大素数n和g,这两个数不需要保密(2)Alice选择另一个大随机数x,计算A如下:A=gxmodn(3)Alice发送A给Bob(4)Bob选择另一个大的随机数y,计算B如下:B=gymodn(5)Bob发送B给Alice(6)计算秘密keyK1如下:K1=Bxmodn(7)计算秘钥K2如下:K2=AymodnK1=K2,所以Alice和Bob可以用它来加解密RSA加密算法是基于数学事实两个大素数同相乘法很容易,但对结果进行因式分解很难。加密过程如下:(1)选择两个大质数P和Q(2)计算N=P*Q(3)选择一个公钥(加密密钥)E使得它不是(P-1)和(Q-1)的因子(4)选择私钥(解密密钥)D,满足以下条件:(D*E)mod(P-1)(Q-1)=1(5)加密时,明文PT计算密文CT如下:CT=PTEmodN(6)解密时,明文PT由密文CT计算如下:PT=CTDmodN这也是SSL中使用的一种密钥交换算法。3、哈希算法:主要用于验证数据的完整性,即确保消息在发送后和接收前未被篡改。SSL中使用的散列算法包括MD5和SHA-1。4.数字证书:数字证书实际上是一个很小的计算机文件。它的作用类似于我们的身份证和护照。它用于证明身份。在SSL中,数字证书用于证明一个人的身份,而不是伪造的。5、小结:在SSL中,密钥交换算法用于交换密钥;密钥用于加密数据;哈希算法用于验证数据的完整性,数字证书用于证明其身份。好了,下面开始介绍SSL协议。SSL简介:安全套接字层(SecureSocketLayer,SSL)协议是一种用于在Web浏览器和Web服务器之间安全地交换信息的协议,提供两种基本的安全服务:身份验证和机密性。SSL于1994年由Netscape开发,后来成为世界上最著名的网络安全机制。所有主流浏览器都支持SSL协议。目前有3个版本:2、3、3.1。最常用的版本是1995年发布的版本3。SSL协议的三个特点①保密性:在握手协议中定义了会话密钥后,所有消息都被加密。②身份验证:可选的客户端身份验证,和强制的服务器身份验证。③完整性:传输的消息包括消息完整性检查(使用MAC)。SSLSSL的位置介于应用层和TCP层之间。应用层数据不再直接传递给传输层,而是传递给SSL层。SSL层对从应用层接收到的数据进行加密,并添加自己的SSL标头。SSL工作原理握手协议(Handshakeprotocol)记录协议(Recordprotocol)警报协议(Alertprotocol)1.握手协议机器与服务器之间的一系列消息。SSL中最复杂的协议是握手协议。该协议允许服务器和客户端相互验证、协商加密和MAC算法以及密钥以保护在SSL记录中发送的数据。在应用程序的数据传输之前使用握手协议。每个握手协议包含以下3个字段(1)Type:表示10种消息类型中的一种(2)Length:表示消息的长度,单位为字节(3)Content:消息相关的参数握手协议的4个阶段1.1建立安全能力SSL握手的第一阶段启动逻辑连接并建立此连接的安全能力。首先,客户端向服务器发送客户端问候消息并等待服务器响应,然后服务器向客户端返回服务器问候消息以确认客户端问候消息中的信息。Clienthellomessage包含Version、Random、Sessionid、Ciphersuite、Compressionmethod等信息。ClientHello客户端发送一个CilentHello消息,包含以下内容:(1)客户端可以支持的最高SSL版本号(2)一个32字节的随机数,用于生成主密钥。(会介绍什么是mastersecret)(3)确定会话的会话ID。(4)客户端可以支持的密码套件列表。密码套件格式:每个套件都以“SSL”开头,后跟密钥交换算法。用“With”来分隔密钥交换算法、加密算法、哈希算法,例如:SSL_DHE_RSA_WITH_DES_CBC_SHA,意思是定义DHE_RSA(temporaryDiffie-HellManwithRSAdigitalsignature)作为密钥交换算法;将DES_CBC定义为加密算法;将SHA定义为哈希算法。(5)客户端可以支持的压缩算法列表。ServerHello服务器用ServerHello消息响应客户端,包括以下内容:(1)SSL版本号。取客户端支持的最高版本号和服务器支持的最高版本号中的较低者。(2)用于生成主密钥的32字节随机数。(一个给客户端,一个给服务器)(3)会话ID(4)从客户端的密码套件列表中选择的密码套件(5)从客户端的压缩方法列表中选择的压缩方法在这个阶段之后,客户端服务器知道以下内容:(1)SSL版本(2)密钥交换、消息认证和加密算法(3)压缩方法(4)与密钥生成相关的两个随机数。1.2服务器认证和密钥交换服务器开始SSL握手的第二阶段,是该阶段所有消息的唯一发送者,客户端是所有消息的唯一接收者。这个阶段分为4个步骤:(a)证书:服务器将数字证书连同根CA的整个链条发送给客户端,这样客户端就可以使用服务器证书中的服务器公钥对服务器进行认证。(b)服务器密钥交换(可选):这取决于密钥交换算法(c)证书请求:服务器可能会要求客户端验证自己。(d)服务端握手完成:第二阶段结束,第三阶段开始的信号这里我们重点关注服务端的验证和密钥交换。前面的(a)证书和(b)服务器密钥交换现阶段是基于密钥交换方法。SSL中有六种密钥交换算法:无效(无密钥交换)、RSA、匿名Diffie-Hellman、临时Diffie-Hellman、固定Diffie-Hellman、Fortezza。使用哪种密钥交换算法在客户端和服务端在第一阶段的协商中已经确定,如果在协商过程中确定使用RSA来交换密钥,则流程如下:在该方法中,服务端发送其第一条消息中的RSA加密/解密公钥证书。但是,由于初始主密钥是由客户端在下一阶段生成并发送的,因此第二条消息为空。请注意,公钥证书是从服务器到客户端验证的。当服务器收到提供的主密钥时,它会使用私钥对其进行解密。服务器拥有私钥证明服务器是它在第一条消息中发送的公钥证书中声明的实体。其他几种密钥交换算法在此不再介绍。参见BehrouzA.Forouzan的《密码学与网络安全》。1.3客户端认证和密钥交换:客户端发起SSL握手的第三阶段,是该阶段所有消息的唯一发送者,服务器是所有消息的唯一接收者。这个阶段分为3个步骤:(a)证书(可选):为了向服务器证明自己,客户端需要发送一个证书信息,这是可选的,可以在IIS中配置强制客户端证书认证。(b)客户端密钥交换(Pre-master-secret):这里客户端将预主密钥发送给服务器。请注意,服务器的公钥将用于加密。(c)证书验证(可选),签署预秘密和随机数以证明拥有(a)证书的公钥。下面也重点介绍RSA方法的客户端认证和密钥交换。在这种情况下,除非服务器在阶段II中明确请求,否则没有证书信息。客户端密钥交换方法包括在第二阶段接收由RSA公钥加密的初步主密钥。在第三阶段之后,客户端必须向服务器进行身份验证,并且客户端和服务器都知道初步主密钥。1.4完成客户端发起的SSL握手的第4阶段,使服务器结束。这个阶段分为4个步骤,前2条消息来自客户端,后2条??消息来自服务器。1.5密钥生成过程这样,握手协议就完成了。让我们看看什么是预主密钥以及主密钥是如何生成的。为了保证信息的完整性和机密性,SSL需要六个加密秘密:四个密钥和两个IV。为了信息的可信度,客户端需要一个密钥(HMAC),一个用于加密的密钥,一个用于数据包加密的IV,服务也是如此。SSL要求密钥是单向的,不同于其他方向的密钥。如果有一个方向的攻击,其他方向的攻击都没有效果。生成过程如下:2.记录协议记录协议在客户端和服务器握手成功后使用,即客户端和服务器相互识别并确定安全信息交换使用的算法后,进入SSL记录协议,记录协议提供了两个SSL连接。服务:(1)保密性:使用握手协议定义的密钥实现(2)完整性:握手协议定义MAC,用于保证消息的完整性,向对方发送告警消息。如果是致命错误,算法立即关闭SSL连接,双方先删除相关的会话号、秘密和密钥。每条告警信息一共2个字节,第一个字节表示错误类型,如果是告警,值为1,如果是致命错误,值为2;第二个字节指定实际的错误类型。综上所述,在SSL中,握手协议用于协商加密和MAC算法和密钥,握手协议用于对交换的数据进行加密和签名,告警协议用于定义如何解决数据传输过程中的问题.整个过程比较复杂,有不懂的地方和我描述的不好,欢迎指正!
