一. SSL
安全套接字层(SSL, Secure Sockets Layer)是一种协议,支持服务通过网络进行通信而不损害安全性。它在客户端和服务器之间创建一个安全连接。然后通过该连接安全地发送任意数据量。
SSL最初是用来保障数据在互联网上安全传输的,主要用在Web领域,它是利用数据的加密技术保障数据在互联网上安全传输的,确保其传输过程中不至于被窃听或截听,甚至是即使在被窃听或截听的情况下数据也不会被破译。对于Web,SSL已被广泛地运用,保证Web浏览器与Web浏览器之间数据加密传输与身份认证等,目前很多企业都用到SSL,甚至许多反向代理服务器都有SSL功能。
安全套接字是用于服务器之上的一个加密系统,它可以确保在客户机与服务器之间传输的数据仍然是安全与隐秘的。要使服务器和客户机使用SSL进行安全的通信,服务器必须有两样东西:密钥对(Key pair)和证书(Certificate)。
密钥对:一个密钥对包括一个公钥和一个私钥。这两个密钥用来对消息进行加密和解密,以确保在因特网上传输时的隐秘性和机密性。
证书:用来进行身份验证或者身份确认。证书可以是自签(self-signed)证书,也可以是颁发(issued)证书。自签证书是为自己私有的Web网络创建的证书。颁发证书是认证中心(certificate authority, CA)或者证书签署者提供(颁发)给你的证书。
SSL的工作过程:SSL使用安全握手来初始化客户机与服务器之间的安全连接。在握手期间,客户机和服务器对它们将要为此会话使用的密钥及加密方法达成一致。客户机使用服务器证书验证服务器。握手之后,SSL被用来加密和解密HTTPS(组合SSL和HTTP的一个独特协议)请求和服务器响应中的所有信息,包括:(1)、客户机正在请求的URL;(2)、提交的表单的内容;(3)、访问授权信息(比如用户名和密码);(4)、所有在客户机与服务器之间发送的数据。
SSL及其继任者传输层安全(TransportLayer Security, TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。SSL用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上传输过程中不会被截取及窃听。
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持,如图1。SSL协议可分为两层:(1)、SSL记录协议(SSLRecord Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持;(2)、SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
图 1 SSL协议在TCP/IP模型中的位置
SSL协议功能主要有以下几点:(1)、SSL实际上是一种调和各种加密算法的策略,能调用各种加密算法的功能模块,对传输的真实数据进行加密,防止传输的数据被黑客截取,即使被截取,由于数据是被加密过的,所以也能保证数据在一定的时间内很难被破译,但是不能保证100%的安全,这是任何安全策略都不能做到的;(2)、SSL还能提供保护数据完整性策略,确保在传输中数据不被非法篡改,主要采用相关摘要算法来实现;(3)、SSL还具备认证功能,主要是可以认证客户端的合法性(相对于服务器而言)和服务器的合法性(相对于客户端),这种认证非常重要,很多的攻击都是黑客伪装成合法的对等方来攻击的,如中间人攻击技术。
SSL协议目前包括sslv2和sslv3两个版本。SSL协议是一种保证通信双方的信道安全传输的策略。它具备数据加密解密、身份认证及数据完整性保护的功能,当然,SSL也支持数据传输前被压缩功能,数据压缩的目的是减少网络传输负载。SSL由握手层来协商各种算法和密钥。
SSL提供服务:(1)、认证用户和服务器,确保数据发送到正确的客户机和服务器;(2)、加密数据以防止数据中途被窃取;(3)、维护数据的完整性,确保数据在传输过程中不被改变。
OpenSSL包含3个部分:密码算法库、SSL协议库、应用程序。OpenSSL源代码主要由以下一些组成:(1)、工具源码库,主要存放在/apps文件夹下,如果默认编译,则只编译成openssl(windows环境下编译成openssl.exe)可执行文件。其包含各种丰富的命令工具,并且各个源码可单独进行编译;(2)、范例源码在/demos目录下;(3)、测试源码主要在/test下;(4)、SSL库所有源代码都在/ssl文件目录下,包括SSL系列源码。各系列的版本基本都有客户端函数源码(*_clnt.c)、服务端函数源码(*_srvr.c)、还有通用函数源码(*_both.c)以及底层包源码(*_pkt.c)、方法函数源码(*_meth.c)等协议相关的各种密钥计算函数源码(*_enc.c);(5)、crypto源代码库是OpenSSL库最基础的代码库,包括如下内容:A、对称算法与非对称算法以及摘要算法封装crypto/evp目录下;B、crypto/hmac目录,实现基于对称算法的MAC;C、对称算法(crypto/aes、crypto/omp、crypto/bf、crypto/des和crypto/cast等目录);D、非对称算法(crypto/dh、crypto/ec、crypto/ecdh和crypto/dsa);E、密钥交换/认证算法(crypto/dh和crypto/krb5)以及摘要算法(crypto/md2、crypto/md4、crypto/md5和crypto/sha);F、队列(crypto/pqueue目录),实现队列数据结构,用于DTLS;G、随机数(crypto/rand目录),实现伪随机数生成,同时支持用户自定义随机数生成;H、x509数字证书(crypto/x509v3和crypto/x509),包含数字证书申请、数字证书以及CRL的构造、解析和签名验证等功能;I、asn.1 DER编码解码(crypto/asn1目录),包含基本asn1对象的编解码及数字证书请求、数字证书和CRL撤销列表及PKCS8等基本的编解码函数。这些函数是通过宏来实现的;J、抽象IO接口(BIO, crypto/bio),其目录下的函数对各种输入输出进行抽象封装,包括内存、文件、socket、标准输入输出和SSL协议;K、hash表(crypto/lhash目录),实现了散列表的数据结构。OpenSSL中很多数据结构都是以散列表来存放的;M、数字证书在线认证(crypto/ocsp目录),实现了ocsp协议的编解码以及证书有效性计算等功能;N、堆栈(crypto/stack目录),实现了堆栈数据结构;O、pkcs7消息语法(crypto/pkcs7目录),主要实现了构造和解析PKCS7消息;P、文件数据库(crypto/txt_db目录);Q、DSO(动态共享对象,crypto/dso目录),本目录下的文件主要抽象了各种平台的动态库加载函数,为用户提供统一接口;R、硬件引擎(crypto/engine目录),硬件引擎接口。用户如果要写自己的硬件引擎,必须实现它所规定的接口;S、PEM文件格式处理(crypto/pem),用于生成和读取各种PEM格式文件,包括各种密钥、数字证书请求、数字证书、PKCS7消息和PKCS8消息等;T、pkcsl2个人证书格式(crypto/pckcsl2目录),主要功能为实现证书的构造和解析功能;U、线程支持功能(crypto/threads),OpenSSL支持多线程,但是用户必须实现相关接口;V、错误处理功能(crypto/err目录),当程序出现错误时,OpenSSL能以堆栈的形式显示各个错误。本目录下只有基本的错误处理接口,具体的错误信息由各个模块提供;W、大数运算功能(crypto/bn目录),本目录下的文件实现了各种大数运算。这些大数运算主要用于非对称算法中密钥生成以及各种加解密操作。另外还为用户提供了大量辅助函数,比如内存与大数之间的相互转换;X、字符缓存操作功能(crypto/buffer目录),为字符操作提供内存缓冲区;Y、配置文件读取(crypto/conf目录),OpenSSL主要配置文件为OpenSSL.cnf。本目录下的函数实现了对这种格式配置文件的读取操作。
SSL协议的实现源代码位于OpenSSL的ssl目录下。SSL的所有实现中,都有客户端实现(_clnt.c)、服务端实现(_srvr.c)、加密实现(_enc.c)、记录协议实现(_pkt.c)、METHOD方法(_meth.c)、客户端服务端都用到的握手方法实现(_both.c),以及对外提供的函数实现(_lib.c)等。ssl.h文件,可以看到SSL的主要数据结构。包括SSL_CTX、SSL和SSL_SESSION。SSL_CTX主要功能为SSL握手阶段的环境准备、准备SSL握手阶段所需的证书、私有密钥、版本及其它选项。SSL的主要功能为准备SSL握手阶段与传送数据信息。SSL_SESSION数据结构则为了保存主密钥、会话ID、读写各种密钥等。SSL_CTX数据结构初始化在最先,紧接着是初始化SSL数据结构。
SSL记录层的实现是:首先对明文数据进行分片,每片有固定大小,其次将每个分片单独压缩,而不是放在一起进行压缩,然后对每一个压缩包进行MAC计算,并产生一个MAC值,之后对这个压缩包进行加密,最后将这个加密后的密文与MAC值放在一起用协议头进行封装,如图2。图2 SSL协议记录层实现过程图
SSL协议握手层实现是:(1)、client端向server端发送的第一个开始信息是hello单词以及SSL的版本号、client端支持的加密算法、一个client端自动生成的伪随机号等,向server端表示一个新会话连接的开始。(2)、server端根据client端发过来的信息判断是否接受这个新的会话,不需要就断开连接,client会继续发送hello建立会话,直到server接收这个会话连接或到自己放弃这个会话连接。如果server答应这个会话建立,则server在回应对方信息时将含有未来数据加密所必须的任何数据,如版本号、支持的加密算法、一个服务器端自动生成的伪随机数等;(3)、client端会依据收到的来自server端的数据产生主key,并使用server端的public key加密这个主key后,将加密过的key传给server,因为只有server有public key的另一把private key,所以只有真正的server能解密;(4)、server解密成功后,返回给client一个用主key认证的数据,以此数据让client端认证自己;(5)、如果是双认证模式,还要采取方式对另一边也进行认证;(6)、最后双方都要发送done或over信息表示握手结束,如图3。
图3 SSL协议握手层实现过程图
二. 加解密
加密技术是最常用的安全保密手段,利用技术手段把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原(解密)。
对数据加密的技术分为两类,即对称加密(私人密钥加密)和非对称加密(公开密钥加密)。对称加密以数据加密标准(DES,Data Encryption Standard)算法为典型代表,非对称加密通常以RSA(Rivest Shamir Adleman)算法为代表。对称加密的加密密钥和解密密钥相同,而非对称加密的加密密钥和解密密钥不同,加密密钥可以公开而解密密钥需要保密。
密码体制从原理上可分为两大类,即对称加密体制(也叫做单钥密码体制、秘密密码体制)和非对称加密体制(也叫做双钥密码体制、公开密码体制)。对称加密体制的基本特征是加密密钥与解密密钥相同。对称密码体制的保密性主要取决于密钥的保密性,与算法的保密性无关,即由密文和解密算法不可能得到明文。换句话说,算法无需保密,需保密的仅是密钥。由此,在对称加密体制中,存在的最重要的问题之一就是密钥的分发问题,也就是如何将密钥传送给需要它们的用户。与对称加密算法不同,非对称加密算法需要两个密钥,公开密钥和私有密钥。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫做非对称加密算法。非对称密码体制将加密运算和解密运算分离,通信双方无需事先交换密钥就可以建立保密通信。并且该体制采用密钥管理技术,大大减少了多用户通信所需的密钥量,节省了系统资源。
对称算法又可以分为两种:流加密算法和块加密算法。
流加密算法是将明文与一个密钥流进行XOR(逻辑异或)运算生成密文。将密文与相同的密钥流进行XOR运算即可还原成明文。流加密是以二进制的单个位为单位进行数据加密。流加密算法的关键在于密钥流必须是随机的,而且合法用户可以很容易再生该密钥流。流加密算法的密钥流是通过使用一个随机位发生器和一个短的密钥来产生密钥流,这个密钥由用户记住。流加密算法在当今应用不是很广泛,比较著名的有RC4和A5算法。
块加密算法是加密算法中应用最广泛的类型。块加密算法每次是对固定大小(如64位、128位、256位等)的位块进行加密。块加密算法将明文分成m个块,对每个块进行相同的变换,从而产生m个密文块。块的大小可以是任意数目,但一般都是2的N次方。如果明文的大小不是块大小的整数倍,解决这一问题的常见的方法对位不足的块用0进行填充,从而使得明文长度是块大小的整数倍。当然,这要求加密时能填充字符,解密时能够检测出填充字符。
对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥,如图4。
图4 对称密钥加密和解密过程
对称加密(也叫私钥加密):指加密和解密使用相同密钥的加密算法。有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的,所以也称这种加密算法为秘密密钥算法或单密钥算法。它要求发送方和接受方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄露密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信性至关重要。
对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。缺点是:交易双方都使用同样密钥,安全性得不到保证。此外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一密钥,这会使得发收信双方所拥有的钥匙数量呈几何级数增长,密钥管理成为用户的负担。
对称加密算法包括:DES、3DES、TDEA、Blowfish、RC5、IDEA、AES、CAST、RC2、RC4。
非对称加密算法(asymmetriccryptographic algorithm)又名“公开密钥加密算法”,非对称加密算法需要两个密钥,公开密钥(public key)和私有密钥(private key)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。
非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。另一方面,甲方可以使用乙方的公钥对机密信息进行签名后再发送给乙方;乙方再用自己的私钥对数据进行验签。甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。
非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要。非对称密码体制的特点:算法强度复杂、安全性依赖于算法与密钥,但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了。这样安全性就大了很多。非对称加密的缺点是加解密速度要远远慢于对称加密,在某些极端情况下,甚至能比对称加密慢上1000倍。
非对称加密工作原理:(1)、A要向B发送信息,A和B都有产生一对用于加密和解密的公钥和私钥;(2)、A的私钥保密,A的公钥告诉B;B的私钥保密,B的公钥告诉A;(3)、A要给B发送信息时,A用B的公钥加密信息,因为A知道B的公钥;(4)、A将这个信息发给B(已经用B的公钥加密信息);(5)、B收到这个消息后,B用自己的私钥解密A的信息。其它所有收到这个报文的人都无法解密,因为只有B才有B的私钥,如图5。图5 非对称加密和解密过程
非对称加密算法包括:RSA、Elgamal、背包算法、Rabin、DH、ECC(椭圆曲线加密算法)、DSA。
非对称加密算法与对称加密算法的区别:(1)、用于消息解密的密钥值与用于消息加密的密钥值不同;(2)、非对称加密算法比对称加密算法慢数千倍,但在保护通信安全方面,非对称加密算法却具有对称密码难以企及的优势。
三. 摘要算法
消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。消息摘要算法不存在密钥的管理与分发问题,适合于分布式网络相同上使用。现在,消息摘要算法主要应用在“数字签名”领域,作为对明文的摘要算法。
消息摘要算法的特点:消息摘要是把任意长度的输入柔和而产生长度固定的伪随机输入的算法。(1)、无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。例如应用MD5算法摘要的消息有128个比特位,用SHA-1算法摘要的消息最终有160个比特位的输出,SHA-1的变体可以产生192比特位和256比特位的消息摘要。一般认为,摘要的最终输出越长,该摘要算法就越安全。(2)、消息摘要看起来是”随机的”。这些比特看上去是胡乱的杂凑在一起的。可以用大量的输入来检验其输出是否相同,一般,不同的输入会有不同的输出,而且输出的摘要消息可以通过随机性检验。但是,一个摘要并不是真正随机的,因为用相同的算法对相同的消息求两次摘要,其结果必然相同;而若是真正随机的,则无论如何都是无法重现的。因此消息摘要是“伪随机的”。(3)、一般地,只要输入的消息不同,对其进行摘要以后产生的摘要消息也并不相同;但相同的输入必会产生相同的输出。这正是好的消息摘要算法所具有的性质:输入改变了,输出也就改变了;两条相似的消息的摘要确不相近,甚至会大相近庭。(4)、消息摘要函数是无陷门的单向函数,即只能进行正向的信息摘要,而无法从摘要中恢复出任何的消息,甚至根本就找不到任何与原信息相关的信息。当然,可以采用强力攻击的方法,即尝试每一个可能的信息,计算其摘要,看看是否与已有的摘要相同,如果这样做,最终肯定会恢复出摘要的消息。但实际上,要得到的信息可能是无穷个消息之一,所以这种强力攻击几乎是无效的。(5)、好的摘要算法,没有人能从中找到“碰撞”,虽然“碰撞”是肯定存在的。即对于给定的一个摘要,不可能找到一条信息使其摘要正好是给定的。或者说,无法找到两天消息,使它们的摘要相同。
一般地,把对一个信息的摘要称为该消息的指纹或数字签名。数字签名是保证信息的完整性和不可否认性的方法。数据的完整性是指信宿接收到的消息一定是信源发送的信息,而中间绝无任何更改;信息的不可否认性是指信源不能否认曾经发送过的信息。其实,通过数字签名还能实现对信源的身份识别(认证),即确定“信源”是否是信宿意定的通信伙伴。数字签名应该具有唯一性,即不同的消息的签名是不一样的;同时还应具有不可伪造性,即不可能找到另一个消息,使其签名与已有的消息的签名一样;还应具有不可逆性,即无法根据签名还原被签名的消息的任何信息。这些特征恰恰都是消息摘要算法的特征,所以消息摘要算法适合作为数字签名算法。
数字签名方案是一种以电子形式存储消息签名的方法。一个完整的数字签名方案应该由两部分组成:签名算法和验证算法。一般地说,任何一个公钥密码体制都可以单独地作为一种数字签名方案使用。如RSA作为数字签名方案使用时,可以定义如下:这种签名实际上就是用信源的私钥加密消息,加密后地消息即成了签体;而用对应地公钥进行验证,若公钥解密后的消息与原来的消息相同,则消息是完整的,否则消息不完整。它正好和公钥密码用于消息保密是相反的过程。因为只有信源才拥有自己地私钥,别人无法重新加密源消息,所以即使有人截获且更改了源消息,也无法重新生成签体,因为只有用信源的私钥才能形成正确地签体。同样信宿只要验证用信源的公钥解密的消息是否与明文消息相同,就可以知道消息是否被更改过,而且可以认证消息是否确实来自意定的信源,还可以使信源不能否认曾发送的消息。所以这样可以完成数字签名的功能。但这种方案过于单纯,它仅可以保证消息的完整性,而无法确保消息的保密性。而且这种方案要对所有的消息进行加密操作,这在消息的长度比较大时,效率是非常低的,主要原因在于公钥体制的加解密过程的低效性。所以这种方案一般不可取。
几乎所有的数字签名方案都要和快速高效的摘要算法(Hash函数)一起使用,当公钥算法与摘要算法结合起来使用时,便构成了一种有效地数字签名方案。这个过程是:首先用摘要算法对消息进行摘要,然后再把摘要值用信源的私钥加密;接收方先把接收的明文用同样的摘要算法摘要,形成“准签体”,然后再把准签体与用信源的公钥解密出的“签体”进行比较,如果相同就认为消息是完整的,否则消息不完整。这种方法使公钥加密只对消息摘要进行操作,因为一种摘要算法的摘要消息长度是固定的,而且都比较“短”(相对于消息而言),正好符合公钥加密的要求。这样效率得到了提高,而其安全性也未必因为使用摘要算法而减弱。
四. 数字签名
数字签名技术原理:为了确保数据传输的安全性,不得不采取一系列的安全技术,如加密技术、数字签名、身份认证、密钥管理、防火墙、安全协议等。其中数字签名就是实现网上交易安全的核心技术之一,它可以保证信息传输的保密性、数据交换的完整性、发送消息的不可否认性、交易者身份的确定性等。
数字签名主要的功能是:保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖发生。
数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送的公钥才能解密被加密的摘要信息,然后用Hash函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。
一个数字签名体制一般包含两个组成部分:签名算法(signaturealgorithm)和验证算法(verification algorithm)。签名算法用于对消息产生数字签名,它通常受一个签名密钥的控制,签名算法或者签名密钥是保密的,有签名者掌握;验证算法用于对消息的数字签名进行验证,根据签名是否有效验证算法能够给出该签名为“真”或者“假”的结论。验证算法通常也受一个验证密钥的控制,但验证算法和验证密钥应当是公开的,以便需要验证签名的人能够方便的验证。
数字签名在ISO7498-2标准中定义为:“附加在数据单元上的一些数据,或是对数据单元所作的密码变换,这种数据和变换允许数据单元的接收者用以确认数据单元来源和数据单元的完整性,并保护数据,防止被人(例如接收者)进行伪造”。
数字签名要实现的功能是我们平常的手写签名要实现功能的扩展。平常在书面文件上签名的主要作用有两点:一是因为对自己的签名本人难以否认,从而确定了文件已被自己签署这一事实;二是因为自己的签名不易被别人模仿,从而确定了文件是真的这一事实。采用数字签名,也能完成这些功能:(1)、确认信息是由签名者发送的;(2)、确认信息自签名后到收到为止,未被修改过;(3)、签名者无法否认信息是由自己发送的。
数字签名的技术基础是公钥密码技术。公钥密码技术又称为非对称加密技术,与之相对的是对称加密技术。对称加密技术是发送方和接收方使用相同的密钥进行加密/解密,双方必须确保这个共同密钥的安全性。其中加密变换使用的密钥和解密变换使用的密钥是完全相同的,此密钥必须以某种安全的方式告诉解密方。DES加密标准就是一种对称加密技术。
1976年,Diffie和Hellman提出了一个新的思想,即:不仅加密算法本身可以公开,就是加密用的密钥本身也可以公开。这就是公钥密码体制。其中使用的密钥被分解为一对:一把公钥和一把私钥。只要私钥保密就可以了,公钥可以发到因特网(如网站的黄页)等公开地方供别人查询和下载。
数字签名的实现方法:建立在公钥密码技术上的数字签名方法有很多,有RSA签名、DSA签名和椭圆曲线数字签名算法(ECDSA)等等,如图6。
图6 无保密机制的RSA签名过程
(1)、发送方采用某种摘要算法从报文中生成一个128位的散列值(称为报文摘要);(2)、发送方用RSA算法和自己的私钥对这个散列值进行加密,产生一个摘要密文,这就是发送方的数字签名;(3)、将这个加密后的数字签名作为报文的附件和报文一起发送给接收方;(4)、接收方从接收到的原始报文中采用相同的摘要算法计算出128位的散列值;(5)、报文的接收方用RSA算法和发送方的公钥对报文附件的数字签名进行解密;(6)、如果两个散列值相同,那么接收方就能确认报文是由发送方签名的。
最常用的摘要算法叫做MD5. MD5采用单向Hash函数将任意长度的“字节串”变换成一个128位的散列值,并且它是一个不可逆的字符串变换算法,换言之,即使看到MD5的算法描述和实现它的源代码,也无法将一个MD5的散列值变换回原始的字符串。这一个128位的散列值亦称为数字指纹,就像人的指纹一样,它就成为验证报文身份的“指纹”了。
数字签名是如何完成与手写签名类同的功能的呢?如果报文在网络传输过程中被修改,接收方收到此报文后,使用相同的摘要算法将计算出不同的报文摘要,这就保证了接收方可以判断报文自签名后到收到为止,是否被修改过。如果发送方A想让接收方误认为此报文是由发送方B签名发送的,由于发送方A不知道发送方B的私钥,所以接收方用发送方B的公钥对发送方A加密的报文摘要进行解密时,也将得出不同的报文摘要,这就保证了接收方可以判断报文是否是由指定的签名者发送。同时也可以看出,当两个散列值相同时,发送方A无法否认这个报文是他签名发送的。
在图6签名方案中,报文是以明文方式发生的。所以不具备保密功能。如果报文包含不能泄露的信息,就需要先进行加密,然后再进行传送。具有保密机制的RSA签名的整个过程如图7所示。图7 有保密机制的RSA签名过程
(1)、发送方选择一个对称加密算法(比如DES)和一个对称密钥对报文进行加密;(2)、发送方用接收方的公钥和RSA算法对第1步中的对称密钥进行加密,并且将加密后的对称密钥附加在密文中;(3)、发送方使用一个摘要算法从第2步的密文中得到报文摘要,然后用RSA算法和发送方的私钥对此报文摘要进行加密,这就是发送方的数字签名;(4)、将第3步得到的数字签名封装在第2步的密文后,并通过网络发送给接收方;(5)、接收方使用RSA算法和发送方的公钥对收到的数字签名进行解密,得到一个报文摘要;(6)、接收方使用相同的摘要算法,从接收到的报文密文中计算出一个报文摘要;(7)、如果第5步和第6步的报文摘要是相同的,就可以确认密文没有被篡改,并且是由指定的发送方签名发送的;(8)、接收方使用RSA算法和接收方的私钥解密出对称密钥;(9)、接收方使用对称加密算法(比如DES)和对称密钥对密文解密,得到原始报文。
五. 数字信封
数字信封(digital envelope)是将对称密钥通过非对称加密(即有公钥和私钥两个)的结果分发对称密钥的方法。
数字信封包含被加密的内容和被加密的用于加密该内容的密钥。虽然经常使用接收方的公钥来加密“加密密钥”,但这并不是必须的,也可以使用发送方和接收方预共享的对称密钥来加密。当接收方收到数字信封时,先用私钥或预共享密钥解密,得到“加密密钥”,再用该密钥解密密文,获得原文。数字信封技术使用两层加密体系。
数字信封是一种综合利用了对称加密技术和非对称加密技术两者的优点进行信息安全传输的一种技术。数字信封既发挥了对称加密算法速度快、安全性好的优点,又发挥了非对称加密算法密钥管理方便的优点。
数字信封是公钥密码体制在实际中的一个应用,是用加密技术来保证只有规定的特定收信人才能阅读通信的内容。
在数字信封中,信息发送方采用对称密钥来加密信息内容,然后将此对称密钥用接收方的公开密钥来加密(这部分称数字信封)之后,将它和加密后的信息一起发送给接收方,接收方先用相应的私有密钥打开数字信封,得到对称密钥,然后使用对称密钥解开加密信息。这种技术的安全性相当高。数字信封主要包括数字信封打包和数字信封拆解,数字信封打包是使用对方的公钥将加密密钥进行加密的过程,只有对方的私钥才能将加密后的数据(通信密钥)还原;数字信封拆解是使用私钥将加密过的数据解密的过程。
数字信封的功能类似于普通信封,普通信封在法律的的约束下保证只有收信人才能阅读信的内容;数字信封则采用密码技术保证了只有规定的接收人才能阅读信息的内容。数字信封中采用了对称密码体制和公钥密码体制。信息发送者首先利用随机产生的对称秘密加密信息,再利用接收方的公钥加密对称密码,被公钥加密后的对称密码被称之为数字信封。在传递信息时,信息接收方若要解密信息,必须先用自己的私钥解密数字信封,得到对称密码,才能利用对称密码解密所得到的信息。这样就保证了数据传输的真实性和完整性。
数字信封的加密原理为:在数据信封加密过程中,首先信息发送方要通过对称加密算法对需要发送的XML数据进行加密,然后将数据接收方公开的公钥对数据发送方中的对称加密算法进行加密,这个过程称为数字信封,然后将经过公钥加密后的密钥和经过对称加密后的XML数据一起发送给数据接收方,数据接收方首先会根据自己的私钥把经过公钥加密的密钥进行解密,得到对称加密密钥,然后在根据解密出的对称加密密钥对加密后的XML数据进行解密,还原XML数据。
数字信封具有高安全性,在数字信封加密的过程中,主要包含两个过程:数字信封打包与数字信封拆封。数字信封打包就是指用在加密过程中公开的公钥加密对称密钥的过程,在对称密钥加密后,只能通过数据接收方的私钥来对加密后的对称密钥进行解密。数字拆封过程是指:使用数据接收方来解密经过加密的对称加密密钥的过程,如图8。图8 数字信封操作过程
六. 数字证书
数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,其作用类似于司机的驾驶执照或日常生活中的身份证。它是由一个由权威机构----CA 机构,又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用来识别对方的身份。数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名,此外,数字证书只在特定的时间段内有效。
数字证书是一种权威性的电子文档,由权威公正的第三方机构,即CA(例如中国各地方的CA公司)中心签发的证书。
它以数字证书为核心的加密技术(加密传输、数字签名、数字信封等安全技术)可以对网络上传输的信息进行加密和解密、数字签名和签名验证,确保网上传递信息的机密性、完整性及交易的不可抵赖性。使用了数字证书,即使你发送的信息在网上被他人截获,甚至你丢失了个人的账户、密码等信息,仍可以保证你的账户、资金安全。
它能提供在Internet上进行身份验证的一种权威性电子文档,人们可以在互联网交往中用它来证明自己的身份和识别对方的身份。当然在数字证书认证的过程中证书认证中心(CA)作为权威的,公正的,可信赖的第三方,其作用是至关重要的。
数字证书可用于:发送安全电子邮件、访问安全站点、网上证券交易、网上招标采购、网上办公、网上保险、网上税务、网上签约和网上银行等安全电子事务处理和安全电子交易活动。
数字证书里存有很多数字和英文,当使用数字证书进行身份认证时,它将随机生成128位的身份码,每份数字证书都能生成相应但每次都不可能相同的数码,从而保证数据传输的保密性,即相当于生成一个复杂的密码。
数字证书绑定了公钥及其持有者的真实身份,它类似于现实生活中的居民身份证,所不同的是数字证书不再是纸质的证照,而是一段含有证书持有者身份信息并经过认证中心审核签发的电子数据,可以更加方便灵活地运用在电子商务和电子政务中。
数字证书颁发过程:用户首先产生自己的密钥对,并将公共密钥及部分个人身份信息传送给认证中心。认证中心在核实身份后,将执行一些必要的步骤,以确信请求确实由用户发送而来,然后,认证中心将发给用户一个数字证书,该证书内包含用户的个人信息和他的公钥信息,同时还附有认证中心的签名信息。用户就可以使用自己的数字证书进行相关的各种活动。数字证书由独立的证书发行机构发布。数字证书各不相同,每种证书可提供不同级别的可信度。可以从证书发行机构获得你自己的数字证书。
网络安全的四大要素:信息传输的保密性、数据交换的完整性、发送信息的不可否认性、交易者身份的确定性。
CA机构,又称为证书授权(CertificateAuthoority)中心,作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。CA中心为每个使用公开密钥的用户发放一个数字证书,数字证书的作用是证明证书中列出的用户合法拥有证书中列出的公开密钥。CA机构的数字签名使得攻击者不能伪造和篡改证书。它负责产生、分配并管理所有参与网上交易的个体所需的数字证书,因此是安全电子交易的核心环节。
数字证书工作原理:数字证书采用公钥体制,即利用一对互相匹配的密钥进行加密、解密。每个用户自己设定一把特定的仅为本人所知的私有密钥(私钥),用它进行解密和签名;同时设定一把公共密钥(公钥)并由本人公开,为一组用户所共享,用于加密和验证签名。当发送一份保密文件时,发送方使用接收方的公钥对数据加密,而接收方则使用自己的私钥解密,这样信息就可以安全无误地到达目的地了。通过数字的手段保证加密过程是一个不可逆过程,即只有用私有密钥才能解密。在公开密钥密码体制中,常用的一种是RSA体制。其数学原理是将一个大数分解成两个质数的乘积,加密和解密用的是两个不同的密钥。即使已知明文、密文和加密密钥(公开密钥),想要推导出解密密钥(私密密钥),在计算上是不可能的。
数字证书从应用角度分类:(1)、服务器证书(SSL证书):被安装于服务器设备上,用来证明服务器的身份和进行通信加密。服务器证书可以用来防止欺诈钓鱼站点。在服务器上安装服务器证书后,客户端浏览器可以与服务器证书建立SSL连接,在SSL连接上传输的任何数据都会被加密。同时,浏览器会自动验证服务器证书是否有效,验证所访问的站点是否是假冒站点,服务器证书保护的站点多被用来进行密码登录、订单处理、网上银行交易等。SSL证书主要用于服务器(应用)的数据传输链路加密和身份认证,绑定网站域名,不同的产品对于不同价值的数据和要求不同的身份认证。(2)、电子邮件证书:可以用来证明电子邮件发件人的真实性。它并不证明数字证书上面CN一项所标识的证书所有者姓名的真实性,它只证明邮件地址的真实性。收到具有有效电子签名的电子邮件,我们除了能相信邮件确实由指定邮箱发出外,还可以确信该邮件从被发出后没有被篡改过。另外,使用接收的邮件证书,我们还可以向接收方发送加密邮件。该加密邮件可以在非安全网络传输,只有接收方的持有者才可能打开该邮件。(3)、客户端个人证书:主要被用来进行身份验证和电子签名。安全的客户端证书被存储于专用的usbkey中。存储于key中的证书不能被导出或复制,且key使用时需要输入key的保护密码。使用该证书需要物理上获得其存储介质usbkey,且需要知道key的保护密码,这也被称为双因子认证。这种认证手段是目前internet最安全的身份认证手段之一。key的种类有多种,指纹识别、第三键确认,语音报读,以及带显示屏的专用usbkey和普通usbkey等。
数字证书在广义上可分为:个人数字证书、单位数字证书、单位员工数字证书、服务器证书、VPN证书、WAP证书、代码签名证书和表单签名证书。
数字证书格式:目前普遍采用的是X.509V3国际标准,一个标准的X.509数字证书包含以下一些内容:(1)、证书的版本信息;(2)、证书的序列号,每个证书都有一个唯一的证书序列号;(3)、证书所使用的签名算法;(4)、证书的发行机构名称,命名规则一般采用X.500格式;(5)、证书的有效期,现在通用的证书一般采用UTC时间格式,它的计时范围为1950-2049;(6)、证书所有人的名称,命名规则一般采用X.500格式;(7)、证书所有人的公开密钥;(8)、证书发行者对证书的签名。
目前国内有30家机构获得相关资质。
数字证书文件格式(cer和pfx)的区别:作为文件形式存在的证书一般由这几种格式:(1)、带有私钥的证书由public key cryptography standards#12,PKCS#12标准定义,包含了公钥和私钥的二进制格式的证书形式,以pfx作为证书文件后缀名;(2)、二进制编码的证书中没有私钥,DER编码二进制格式的证书文件,以cer作为证书文件后缀名;(3)、Base64编码的证书中没有私钥,BASE64编码格式的证书文件,也是以cer作为证书文件后缀名。由定义可以看出,只有pfx格式的数字证书是包含有私钥的,cer格式的数字证书里面只有公钥没有私钥。
证书申请:一般来讲,用户要携带有关证件到各地的证书受理点,或者直接到证书发放机构即CA中心填写申请表并进行身份审核,审核通过后交纳一定费用就可以得到装有证书的相关介质(磁盘或key)和一个写有密码口令的密码信封。域名型的证书申请的时候,无需递交书面审查资料,仅需进行域名有效性验证,网上申请。而企业型证书需要进行严格的网站所有权的真实身份验证,证书标示企业组织机构详情,强化信任度。增强型证书除了进行严格的网站所有权的真实身份验证之外,还加入第三方验证,证书标示增强组织机构详情,强化信任度。
数字证书使用方法:用户在进行需要使用证书的网上操作时,必须准备好装有证书的存储介质。如果用户是在自己的计算机上进行操作,操作前必须先安装CA根证书。一般所访问的系统如果需要使用数字证书会自动弹出提示框要求安装根证书,用户直接选择确认即可;当然也可以直接登录CA中心的网站,下载安装根证书。操作时,一般系统会自动提示用户出示数字证书或者插入证书介质(IC卡或key),用户插入证书介质后系统将要求用户输入密码口令,此时用户需要输入申请证书时获得的密码信封中的密码,密码验证正确后系统将自动调用数字证书进行相关操作。使用后,用户应记住取出证书介质,并妥善保管。当然,根据不同系统数字证书会有不同的使用方式,但系统一般会有明确提示,用户使用起来都较为方便。
数字证书的应用是广泛的,其中包括大家最为熟悉的用于网上银行的USBkey和部分使用数字证书的VIEID即网络身份证。
七. 数字时间戳
时间戳(timestamp),通常是一个字符序列,唯一地标识某一刻的时间。数字时间戳技术是数字签名技术一种变种的应用。
时间戳分类:(1)、自建时间戳:此类时间戳是通过时间接收设备(如GPS、CDMA、北斗卫星)来获取时间到时间戳服务器上,并通过时间戳服务器签发时间戳证书。此种时间戳可用来企业内部责任认定,在法庭认证时并不具备法律效力。因其在通过时间接收设备接收时间时存在被篡改的可能,故此不能作为法律依据。(2)、具有法律效力的时间戳:它是由我国中科院国家授时中心与北京联合信任技术服务有限公司负责建设的我国第三方可信时间戳认证服务。由国家授时中心负责时间的授时与守时检测。因其守时检测功能而保障时间戳证书中的时间的正确性和不被篡改。获取时间戳平台有”大众版权保护平台”,可与我国中科院国家授时中心时间同步。
时间戳组成:时间戳是一个经加密后形成的凭证文档,它包括三个部分:(1)、需加时间戳的文件的摘要;(2)、DTS(digital time stamp service,数字时间戳服务)收到文件的日期和时间;(3)、DTS的数字签名。
一般来说,时间戳产生的过程为:用户首先将需要加时间戳的文件用Hash编码加密形成摘要,然后将改摘要发送到DTS,DTS在加入了收到文件摘要的日期和时间信息后再对该文件加密(数字签名),然后送回用户。书面签署文件的时间是由签署人自己写上的,而数字时间戳则不然,它是由认证单位DTS来加的,以DTS收到文件的时间为依据。
以上大部分内容来自于网络整理!