密码学和SSL简介


我们为什么需要研究网络安全呢? 目前数据在网络中传输面临以下的四种威胁:

   (1) 截获——从网络上窃听他人的通信内容。

   (2) 中断——有意中断他人在网络上的通信。

   (3) 篡改——故意篡改网络上传送的报文。

(4) 伪造——伪造信息在网络上传送。

为了防止数据被截获,需要将数据加解密;为了防止篡改和伪造信息,就需要数据加签名校验,这些都需要密码学的支撑。


密码学

密码学(cryptography)是研究如何隐密地传递信息的学科,是信息安全等相关议题,如认证、访问控制的核心。密码学的首要目的是隐藏信息的涵义,并不是隐藏信息的存在。

直到现代以前,密码学几乎专指加密(encryption)算法:将普通信息(明文plain text)转换成难以理解的资料(密文cipher text)的过程;解密(decryption)算法则是其相反的过程:由密文转换回明文;加解密包含了这两种算法,一般加密即同时指称加密(encrypt或encipher)与解密(decrypt或decipher)的技术。

加解密的具体运作由两部分决定:一个是算法,另一个是密钥。密钥是一个用于加解密算法的秘密参数,通常只有通讯者拥有。一般的数据加密模型如下图所示,用户A向B发送明文X,但通过加密算法E得到密文Y,Ke是加密密钥。接收端利用解密算法D运算和解密密钥解出明文X。根据加解密密钥是否相同,划分出两类密码体制:对称密钥密码体制和公开密钥体制(非对称)。


最古典的两个加密方法是:

移位式(Transposition cipher):将字母顺序重新排列,例如‘help me’变成‘ehplem’

替代式(substitution cipher):有系统地将一组字母换成其他字母或符号,例如‘fly at once’变成‘gmz bupodf’(每个字母用下一个字母取代)。

由古典加密法产生的密码文很容易泄漏关于明文的统计信息,用频率分析其实很容易被破解,本质上所有的加密方法仍然受到频率分析破密法的危害。实际上,适当的密码学机制(包含加解密法)应该保持安全,即使敌人知道了使用何种算法。对好的加密法来说,钥匙的秘密性理应足以保障资料的机密性。

现代的研究主要在分组密码block cipher)与流密码stream cipher)及其应用。分组密码取用明文的一个区块和钥匙,输出相同大小的密文区块。由于信息通常比单一区块还长,因此有了各种方式将连续的区块编织在一起。 DESAES是美国联邦政府核定的分组密码标准(AES将取代DES)。尽管将从标准上废除,DES依然很流行(3DES变形仍然相当安全),被使用在非常多的应用上。 流密码,相对于区块加密,制造一段任意长的钥匙原料,与明文依位元或字符结合,有点类似一次性密码本。输出的串流根据加密时的内部状态而定。在一些流密码上由钥匙控制状态的变化。RC4是相当有名的流密码。

消息摘要函数不一定使用到钥匙,但和许多重要的密码算法相关。它将输入数据输出成较短的固定长度摘要值,这个过程是单向的,逆向操作难以完成,而且碰撞(两个不同的输入产生相同的杂凑值)发生的机率非常小。常见的散列函数:MD5、SHA1以及SHA256。

对称密钥体制

对称密钥算法(Symmetric-key algorithm)又称为对称加密、私钥加密、共享密钥加密,是密码学中的一类加密算法。这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。实务上,这组密钥成为在两个或多个成员间的共同秘密,以便维持专属的通讯联系。与公开密钥加密相比,要求双方取得相同的密钥是对称密钥加密的主要缺点之一。但是对称加密的速度比公钥加密快很多,在很多场合都需要对称加密。常见的对称加密算法有DES、3DES、AES、Blowfish、IDEA、RC5、RC6。

公钥密码体制

公开钥匙密码学,简称公钥密码学,又称非对称钥匙密码学,相对于对称钥匙密码学,最大的特点在于加密和解密使用不同的钥匙。在对称钥匙密码学中,加密和解密使用相同的钥匙,也许对不同的信息使用不同的钥匙,但都面临钥匙管理的难题。由于每对通讯方都必须使用异于他组的钥匙,当网络成员的数量增加时,钥匙数量成二次方增加。更尴尬的难题是:当安全的通道不存在于双方时,如何建立一个共有的钥匙以利安全的通讯?如果有通道可以安全地建立钥匙,何不使用现有的通道。这个“鸡生蛋、蛋生鸡”的矛盾是长年以来密码学无法在真实世界应用的阻碍。

1976年,Whitfield DiffieMartin Hellman发表开创性的论文,提出公开钥匙密码学的概念:一对不同值但数学相关的钥匙,公开钥匙(公钥publickey)与私密钥匙(私钥privatekey or secret key)。在公钥系统中,由公开钥匙推算出配对的私密钥匙于计算上是不可行的。在公钥系统中,公钥可以随意流传,但私钥只有该人拥有。典型的用法是,其他人用公钥来加密给该接受者,接受者使用自己的私钥解密。

MITRon RivestAdi ShamirLen Adleman发明另一个公开钥匙系统,RSA,RSA目前被广泛使用,其他公钥系统还有DSA、Cramer-ShoupEl Gamal、以及椭圆曲线密码学等等。

公开钥匙算法大多基于计算复杂度上的难题,通常来自于数论。例如,RSA源于大整数因子分解问题;DSA源于离散对数问题。近年发展快速的椭圆曲线密码学则基于和椭圆曲线相关的数学难题,与离散对数相当。由于这些底层的问题多涉及模数乘法或指数运算,相对于分组密码需要更多计算资源。但是目前随着硬件技术的快速发展,原来无法有效破解的密码也不安全了。例如编号为 RSA-768 (768 bits, 232 digits)数也被成功分解。而且量子计算的潜在效应已经是部分密码学家的焦点。公开钥匙系统通常是复合式的,内含一个高效率的对称钥匙算法,用以加密信息,再以公开钥匙加密对称钥匙系统所使用的钥匙,以增进效率。

除了加密外,公开钥匙密码学最显著的成就是实现了数字签名。数字签名名副其实是普通签章的数字化,他们的特性都是某人可以轻易制造签章,但他人却难以仿冒。数字签名可以永久地与被签署信息结合,无法自信息上移除。数字签名大致包含两个算法:一个是签署,使用私密钥匙处理信息或信息的散列值而产生签章;另一个是验证,使用公开钥匙验证签章的真实性。RSADSA是两种最流行的数字签名机制。数字签名是公开钥匙基础建设public key infranstructures, PKI)以及许多网络安全机制(SSL/TLSVPNs等)的基础。

数字签名使用方法是将该报文摘要值用发送者的私人密钥加密,然后连同原报文一起发送给接收者,而产生的报文即称数字签名。接收方收到数字签名后,用同样的HASH算法对原报文计算出报文摘要值,然后与用发送者的公开密钥对数字签名进行解密解开的报文摘要值相比较。如相等则说明报文确实来自所称的发送者。

那为什么是对报文摘要进行加密,而不是对原报文进行加密呢?这是因为非对称加密算法(即RSA算法)非常耗时,被加密的报文越大,耗得时间越多,因此聪明的人类对其摘要进行加密,(因为报文摘要是要比原报文小得多),仍然能够起到同样的作用。这是为什么多了个报文摘要。

数字证书

数字证书,又称数字凭证、或电子凭证,是一种用于计算机的身份识别机制。数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名),这一行为表示身份认证机构已认定这个持证人。它能提供在Internet上进行身份验证的一种权威性电子文档,人们可以在互联网交往中用它来证明自己的身份和识别对方的身份。

数字证书可以从身份认证机构获得。理论上任何人都可以给你发个数字证书。换个说法就是给你发数字证书的那个人或机构对你的公钥进行加签。对PGP和GPG系统来说,就是如此,而不需要一个统一的身份认证机构。

数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。凭借数字证书文件,拥有人可向计算机系统认证自己的身份,从而访问或使用某一特定的计算机服务。

CA机构,又称为证书授证(Certificate Authority)中心,作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。CA中心为每个使用公开密钥的用户发放一个数字证书,数字证书的作用是证明证书中列出的用户合法拥有证书中列出的公开密钥。CA机构的数字签名使得攻击者不能伪造和篡改证书。它负责产生、分配并管理所有参与网上交易的个体所需的数字证书,因此是安全电子交易的核心环节。

它以数字证书为核心的加密技术(加密传输、数字签名、数字信封等安全技术)可以对网络上传输的信息进行加密和解密、数字签名和签名验证,确保网上传递信息的机密性、完整性及交易的不可抵赖性。

数字证书可用于:发送安全电子邮件、访问安全站点、网上证券交易、网上招标采购、网上办公、网上保险、网上税务、网上签约和网上银行等安全电子事务处理和安全电子交易活动。

颁发过程

数字证书颁发过程一般为:用户首先产生自己的密钥对,并将公共密钥及部分个人身份信息传送给认证中心。认证中心在核实身份后,将执行一些必要的步骤,以确信请求确实由用户发送而来,然后,认证中心将发给用户一个数字证书,该证书内包含用户的个人信息和他的公钥信息,同时还附有认证中心的签名信息。用户就可以使用自己的数字证书进行相关的各种活动。数字证书由独立的证书发行机构发布。数字证书各不相同,每种证书可提供不同级别的可信度。可以从证书发行机构获得您自己的数字证书。

工作原理

数字证书采用公钥体制,即利用一对互相匹配的密钥进行加密、解密。每个用户自己设定一把特定的仅为本人所知的私有密钥(私钥),用它进行解密和签名;同时设定一把公共密钥(公钥)并由本人公开,为一组用户所共享,用于加密和验证签名。当发送一份保密文件时,发送方使用接收方的公钥对数据加密,而接收方则使用自己的私钥解密,这样信息就可以安全无误地到达目的地了。通过数字的手段保证加密过程是一个不可逆过程,即只有用私有密钥才能解密。公开密钥技术解决了密钥发布的管理问题,商户可以公开其公开密钥,而保留其私有密钥。购物者可以用人人皆知的公开密钥对发送的信息进行加密,安全地传送给商户,然后由商户用自己的私有密钥进行解密。

用户也可以采用自己的私钥对信息加以处理,由于密钥仅为本人所有,这样就产生了别人无法生成的文件,也就形成了数字签名。采用数字签名,能够确认以下两点:

保证信息是由签名者自己签名发送的,签名者不能否认或难以否认

保证信息自签发后到收到为止未曾作过任何修改,签发的文件是真实文件。

分类

基于数字证书的应用角度分类,数字证书可以分为以下几种:

服务器证书(SSL证书)

服务器证书被安装于服务器设备上,用来证明服务器的身份和进行通信加密。服务器证书可以用来防止欺诈钓鱼站点。在服务器上安装服务器证书后,客户端浏览器可以与服务器证书建立SSL连接,在SSL连接上传输的任何数据都会被加密。同时浏览器会自动验证服务器证书是否有效,验证所访问的站点是否是假冒站点,服务器证书保护的站点多被用来进行密码登录、订单处理、网上银行交易等。全球知名的服务器证书品牌有Globlesign,Verisign,Thawte,Geotrust等。

电子邮件证书

电子邮件证书可以用来证明电子邮件发件人的真实性。它并不证明数字证书上面CN一项所标识的证书所有者姓名的真实性,它只证明邮件地址的真实性。收到具有有效电子签名的电子邮件,我们除了能相信邮件确实由指定邮箱发出外,还可以确信该邮件从被发出后没有被篡改过。另外,使用接收的邮件证书,我们还可以向接收方发送加密邮件。该加密邮件可以在非安全网络传输,只有接收方的持有者才可能打开该邮件。

客户端个人证书

客户端证书主要被用来进行身份验证和电子签名。安全的客户端证书我被存储于专用的usbkey中。存储于key中的证书不能被导出或复制,且key使用时需要输入key的保护密码。使用该证书需要物理上获得其存储介质usbkey,且需要知道key的保护密码,这也被称为双因子认证。这种认证手段是目前在internet最安全的身份认证手段之一。key的种类有多种,指纹识别、第三键确认,语音报读,以及带显示屏的专用usbkey和普通usbkey等。

目前的数字证书在广义上可分为:个人数字证书、单位数字证书、单位员工数字证书、服务器证书、VPN证书、WAP证书、代码签名证书和表单签名证书。

证书格式

目前数字证书的格式普遍采用的是X.509V3国际标准,一个标准的X.509数字证书包含以下一些内容:

u  证书的版本信息;

u  证书的序列号,每个证书都有一个唯一的证书序列号;

u  证书所使用的签名算法;

u  证书的发行机构名称,命名规则一般采用X.500格式;

u  证书的有效期,现在通用的证书一般采用UTC时间格式,它的计时范围为1950-2049;

u  证书所有人的名称,命名规则一般采用X.500格式;

u  证书所有人的公开密钥;

u  证书发行者对证书的签名

数字证书文件格式(cer和pfx)的区别:

1.带有私钥的证书由Public Key Cryptography Standards #12,PKCS#12标准定义,包含了公钥和私钥的二进制格式的证书形式,以pfx作为证书文件后缀名。

2.二进制编码的证书证书中没有私钥,DER编码二进制格式的证书文件,以cer作为证书文件后缀名。

3.Base64编码的证书证书中没有私钥,BASE64 编码格式的证书文件,也是以cer作为证书文件后缀名。

由定义可以看出,只有pfx格式的数字证书是包含有私钥的,cer格式的数字证书里面只有公钥没有私钥。

在pfx证书的导入过程中有一项是“标志此密钥是可导出的。这将您在稍候备份或传输密钥”。一般是不选中的,如果选中,别人就有机会备份你的密钥了。如果是不选中,其实密钥也导入了,只是不能再次被导出。这就保证了密钥的安全。

如果导入过程中没有选中这一项,做证书备份时“导出私钥”这一项是灰色的,不能选。只能导出cer格式的公钥。如果导入时选中该项,则在导出时“导出私钥”这一项就是可选的。

如果要导出私钥(pfx),是需要输入密码的,这个密码就是对私钥再次加密,这样就保证了私钥的安全,别人即使拿到了你的证书备份(pfx),不知道加密私钥的密码,也是无法导入证书的。相反,如果只是导入导出cer格式的证书,是不会提示你输入密码的。因为公钥一般来说是对外公开的,不用加密。

证书申请

一般来讲,用户要携带有关证件到各地的证书受理点,或者直接到证书发放机构即CA中心填写申请表并进行身份审核,审核通过后交纳一定费用就可以得到装有证书的相关介质(磁盘或Key)和一个写有密码口令的密码信封。

域名型的证书申请的时候,无须递交书面审查资料,仅需进行域名有效性验证,网上申请。而企业型证书需要进行严格的网站所有权的真实身份验证,证书标示企业组织机构详情,强化信任度。增强型证书除了进行严格的网站所有权的真实身份验证之外,还加入第三方验证,证书标示增强组织机构详情,强化信任度。

使用方法

用户在进行需要使用证书的网上操作时,必须准备好装有证书的存储介质。如果用户是在自己的计算机上进行操作,操作前必须先安装CA根证书。一般所访问的系统如果需要使用数字证书会自动弹出提示框要求安装根证书,用户直接选择确认即可;当然也可以直接登陆CA中心的网站,下载安装根证书。操作时,一般系统会自动提示用户出示数字证书或者插入证书介质(IC卡或Key),用户插入证书介质后系统将要求用户输入密码口令,此时用户需要输入申请证书时获得的密码信封中的密码,密码验证正确后系统将自动调用数字证书进行相关操作。使用后,用户应记住取出证书介质,并妥善保管。当然,根据不同系统数字证书会有不同的使用方式,但系统一般会有明确提示,用户使用起来都较为方便。

RSA算法

RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的,RSA就是他们三人姓氏开头字母拼在一起组成的。

对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。尽管如此,只有一些RSA算法的变种被证明为其安全性依赖于因数分解。假如有人找到一种快速因数分解的算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。但在分布式计算和量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战。

公钥与私钥的产生

假设Alice想要通过一个不可靠的媒体接收Bob的一条私人讯息。她可以用以下的方式来产生一个公钥和一个私钥:

随意选择两个大的质数p和q,p不等于q,计算N=pq。

根据欧拉函数,求得r= φ(N) = φ(p)φ(q) =(p-1)(q-1)

选择一个小于r的整数e,求得e关于模r的模反元素,命名为d。(模反元素存在,当且仅当e与r互质)

将p和q的记录销毁。

(N,e)是公钥,(N,d)是私钥。Alice将她的公钥(N,e)传给Bob,而将她的私钥(N,d)藏起来。

加密消息

假设Bob想给Alice送一个消息m,他知道Alice产生的N和e。他使用起先与Alice约好的格式将m转换为一个小于N的整数n,比如他可以将每一个字转换为这个字的Unicode码,然后将这些数字连在一起组成一个数字。假如他的信息非常长的话,他可以将这个信息分为几段,然后将每一段转换为n。用下面这个公式他可以将n加密为c:


计算c并不复杂。Bob算出c后就可以将它传递给Alice。

解密消息

Alice得到Bob的消息c后就可以利用她的密钥d来解码。她可以用以下这个公式来将c转换为n:

 

得到n后,她可以将原来的信息m重新复原。

解码的原理是:

以及ed ≡ 1 (modp-1)和ed ≡ 1 (modq-1)。由费马小定理可证明(因为p和q是质数)

 

这说明(因为p和q是不同的质数,所以p和q互质)


签名消息

RSA也可以用来为一个消息署名。假如甲想给乙传递一个署名的消息的话,那么她可以为她的消息计算一个散列值(Message digest),然后用她的密钥(private key)加密这个散列值并将这个“署名”加在消息的后面。这个消息只有用她的公钥才能被解密。乙获得这个消息后可以用甲的公钥解密这个散列值,然后将这个数据与他自己为这个消息计算的散列值相比较。假如两者相符的话,那么他就可以知道发信人持有甲的密钥,以及这个消息在传播路径上没有被篡改过。

安全

假设偷听者乙获得了甲的公钥N和e以及丙的加密消息c,但她无法直接获得甲的密钥d。要获得d,最简单的方法是将N分解为p和q,这样她可以得到同余方程d× e ≡ 1 (mod(p-1)(q-1))并解出d,然后代入解密公式

导出n(破密)。但至今为止还没有人找到一个多项式时间的算法来分解一个大的整数的因子,同时也还没有人能够证明这种算法不存在。至今为止也没有人能够证明对N进行因数分解是唯一的从c导出n的方法,但今天还没有找到比它更简单的方法。因此今天一般认为只要N足够大,那么黑客就没有办法了。

假如N的长度小于或等于256位,那么用一台个人电脑在几个小时内就可以分解它的因子了。1999年,数百台电脑合作分解了一个512位长的N。今天对N的要求是它至少要1024位长。典型的密钥长度:1997年后开发的系统,用户应使用1024位密钥,证书认证机构应用2048位或以上。

1994年彼得·秀尔(Peter Shor)证明一台量子计算机可以在多项式时间内进行因数分解。假如量子计算机有朝一日可以成为一种可行的技术的话,那么秀尔的算法可以淘汰RSA和相关的衍生算法。(即依赖于分解大整数困难性的加密算法)

假如有人能够找到一种有效的分解大整数的算法的话,或者假如量子计算机可行的话,那么在解密和制造更长的钥匙之间就会展开一场竞争。但从原理上来说RSA在这种情况下是不可靠的。

密钥生成

首先要使用概率算法来验证随机产生的大的整数是否质数,这样的算法比较快而且可以消除掉大多数非质数。假如有一个数通过了这个测试的话,那么要使用一个精确的测试来保证它的确是一个质数。除此之外这样找到的p和q还要满足一定的要求,首先它们不能太靠近,此外p-1或q-1的因子不能太小,否则的话N也可以被很快地分解。

此外寻找质数的算法不能给攻击者任何信息,这些质数是怎样找到的,尤其产生随机数的软件必须非常好。要求是随机和不可预测。这两个要求并不相同。一个随机过程可能可以产生一个不相关的数的系列,但假如有人能够预测出(或部分地预测出)这个系列的话,那么它就已经不可靠了。比如有一些非常好的随机数算法,但它们都已经被发表,因此它们不能被使用,因为假如一个攻击者可以猜出p和q一半的位的话,那么他们就已经可以轻而易举地推算出另一半。

此外密钥d必须足够大,1990年有人证明假如p大于q而小于2q(这是一个很经常的情况)而d<1/3 * N1/4,那么从N和e可以很有效地推算出d。此外e = 2永远不应该被使用。

速度

比起DES和其它对称算法来说,RSA要慢得多。实际上Bob一般使用一种对称算法来加密他的信息,然后用RSA来加密他的比较短的对称密码,然后将用RSA加密的对称密码和用对称算法加密的消息送给Alice。这样一来对随机数的要求就更高了,尤其对产生对称密码的要求非常高,因为否则的话可以越过RSA来直接攻击对称密码。

密钥分配

和其它加密过程一样,对RSA来说分配公钥的过程是非常重要的。分配公钥的过程必须能够抵挡一个从中取代的攻击。假设Eve交给Bob一个公钥,并使Bob相信这是Alice的公钥,并且她可以截下Alice和Bob之间的信息传递,那么她可以将她自己的公钥传给Bob,Bob以为这是Alice的公钥。Eve可以将所有Bob传递给Alice的消息截下来,将这个消息用她自己的密钥解密,读这个消息,然后将这个消息再用Alice的公钥加密后传给Alice。理论上Alice和Bob都不会发现Eve在偷听他们的消息。今天人们一般用数字认证来防止这样的攻击。

PKI

PKI(PublicKey Infrastructure),又称公开密钥基础设施简称公钥基础建设、公钥基础设施或公钥基础架构。密码学上,公开密钥基础建设借着数字证书认证机构(certificate authority,CA)将用户的个人身份跟公开密钥链结在一起,对每个凭证中心用户的身份必须是唯一的。链结关系通过注册和发布过程创建,取决于担保级别,链结关系可能由CA的各种软件或在人为监督下完成。PKI的确定链结关系的这一角色称为注册管理中心(Registration Authority,RA)。RA确保公开密钥和个人身份链结,可以防抵赖。可信赖的第三者(Trusted third party,TTP)也常被用来指凭证中心。PKI有时被错误地拿来代表公开密钥密码学或公开密钥算法,但它们本身并不需要CA参与。

时在网景(NetscapeCommunications Corporation )工作的Taher ElGamal等人发展出传输安全层(Transport Layer Security,SSL)协议,包含了密钥创建、服务器认证等,公开密钥基础建设的架构因此浮现。公开密钥基础建设最成功的地方是在政府部门,目前最大的公开密钥基础建设是美国防卫信息系统局 (Defense Information Systems Agency,DISA)的共同访问卡(Common access Cards)方案。

目的与机能

公开密钥基础建设的设置使得未联系的计算机用户可以提出认证,并使用公钥凭证内的公钥信息加密给对方。解密时,每个用户使用自己的私密密钥解密,该密钥通常被通行码保护。大致而言,公开密钥基础建设由客户端软件、服务器端软件、硬件、法律合约与保证、操作程序等组成。签署者的公钥凭证也可能被第三者使用,用来验证由该签署者签署的数字签章。

通常,公开密钥基础建设协助参与者对话以达成机密性、信息完整性、以及用户认证,而不用预先交换任何秘密信息。然而互通连成员间的公开密钥基础建设受制于许多现实问题,例如不确定的凭证撤销、凭证中心发布凭证的条件、司法单位规范与法律的变化、还有信任。

典型用途

大部分企业级的公钥基础建设系统,依赖由更高级级的凭证中心发布给低级凭证中心的凭证,而层层构筑而成的凭证链,来创建某个参与者的身份识别凭证的合法性。这产生了不只一个计算机且通常涵盖多个组织的凭证层次结构,涉及到多个来源软件间的合作。因此公开的标准对公钥基础建设相当重要。这个领域的标准化多由互联网工程工作小组(IETF)的PKIX工作群完成。

企业公钥基础建设通常和企业的数据库目录紧密结合,每个员工的公钥内嵌在凭证中,和人事数据一起存储。今日最先进的目录科技是轻量目录访问协议(Lightweight Directory Access Protocol,LDAP)。事实上,最常见的凭证格式X.509的前身X.500是用于LDAP的前置处理器的目录略图。

公开密钥基础建设软件

当铺设公开密钥基础建设时需要有合适的凭证中心软件,市面上有多个解决方案:

微软:在Windows2000 Server和Server 2003包含一个被集成进活动目录(Active Directory)的凭证中心软件。这不需要额外的版权费,是目前Windows平台上最流行的解案。

类Unix系统:自由软件OpenSSL和OpenCA,还有EJBCA。

NEWPKI:产生与控制用户公开密钥的自由软件。

Novell:提供Novell凭证服务器,集成进eDirectory。但是这个解案不敷重要的公开密钥基础建设计划。反而eDirectory的附加产品cv actPKIntegrated(第三厂商制作)更贴近实际。

Entrust:其产品EntrustAuthority是付费凭证中心解案中最流行的,被视为市面上强力的产品之一。

uPKI:为国人自行开发,营销海外。为智能卡加解密及凭证验证解决方案。

CyberTrust:这是Entrust最重要的竞争者,其产品是TrustedCA。

RSA Security:其解决方案Keon也很流行。

PKI 应用

安全性

网络服务面临的安全性议题有二:一是网络与设备上的安全议题,另一是信息的安全议题。 网络服务可以穿过传统的网络保护机制,同时网络服务也可以携带筹载物(payload),还可以与企业内部应用程序沟通,如此等于大开安全之门。因此在网络安全问题上,可能会面临假身份问题,以及利用无效的SQL语法、LDAP或是XPath作攻击,另外,攻击者也可以使用XML的阻断服务攻击(DoS)来瘫痪网络连接。另外,在内容安全议题上,由于传递的是XML明码,因此极易被有心人给窥视,因此网络服务也需对其传递内容进行保护,以免泄漏重要信息。

凭证应用风险规划

电子凭证主要目的为让网络交易双方创建信赖关系,其法律效力在于内含之数字签章,而非凭证本身;凭证只在确认此数字签章的正确性与用户身份真实性。电子凭证内含密码学技术,且由具公信力的CA所核发,其安全性不置可否。然而,若将凭证与其他应用一起使用,例如同时作为企业内部管理的功能,则必须考虑可能造成的风险。

SSL

安全套接层(SecureSockets Layer,SSL)是一种安全协议,在网景公司(Netscape)推出首版Web浏览器的同时提出,目的是为网络通信提供安全及数据完整性保障,SSL在传输层中对网络通信进行加密。

SSL采用公开密钥技术,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。它在服务器和客户机两端可同时被支持,目前已成为互联网上保密通讯的工业标准。现行的Web浏览器亦普遍将HTTP和SSL相结合,从而实现安全通信。此协议其继任者是TLS。

SSL协议的优势在于它是与应用层协议独立无关的。高层的应用层协议(例如:HTTP、FTP、Telnet等等)能透明的建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商以及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。

以下简要介绍SSL协议的工作方式。客户端要收发几个握手信号:

 

1.        发送一个“ClientHello”消息,内容包括:支持的协议版本,比如TLS1.0版,一个客户端生成的随机数(稍后用户生成“会话密钥”),支持的加密算法(如RSA公钥加密)和支持的压缩算法。

2.        然后收到一个“ServerHello”消息,内容包括:确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信,一个服务器生成的随机数,稍后用于生成"对话密钥",确认使用的加密方法,比如RSA公钥加密,服务器证书。

3.        当双方知道了连接参数,客户端与服务器交换证书(依靠被选择的公钥系统)。这些证书通常基于X.509,不过已有草案支持以OpenPGP为基础的证书。

4.        服务器请求客户端公钥。客户端有证书即双向身份认证,没证书时随机生成公钥。

5.        客户端与服务器通过公钥保密协商共同的主私钥(双方随机协商),这通过精心谨慎设计的伪随机数功能实现。结果可能使用Diffie-Hellman交换,或简化的公钥加密,双方各自用私钥解密。所有其他关键数据的加密均使用这个“主密钥”。

数据传输中记录层(Recordlayer)用于封装更高层的HTTP等协议。记录层数据可以被随意压缩、加密,与消息验证码压缩在一起。每个记录层包都有一个Content-Type段用以记录更上层用的协议。

TLS和SSL的差异

SSL(Secure Sockets Layer)是网景公司(Netscape)设计的主要用于Web的安全传输协议。这种协议在Web上获得了广泛的应用。IETF(www.ietf.org)将SSL作了标准化,即RFC2246,并将其称为TLS(Transport Layer Security),其最新版本是RFC 5246,版本1.2。从技术上讲,TLS1.0与SSL3.0的差异非常微小。

TLS

TLS利用密钥算法在互联网上提供端点身份认证与通讯保密,其基础是公钥基础设施(public key infrastructure,PKI)。不过在实现的典型例子中,只有网络服务者被可靠身份验证,而其客户端则不一定。这是因为公钥基础设施普遍商业运营,电子签名证书通常需要付费购买。协议的设计在某种程度上能够使主从架构应用程序通讯本身预防窃听、干扰(Tampering)和消息伪造。

TLS包含三个基本阶段:

对等协商支援的密钥算法

基于非对称密钥的信息传输加密和身份认证、基于PKI证书的身份认证

基于对称密钥的数据传输保密

TLS/SSL有多样的安全保护措施:

所有的记录层数据均被编号,用于消息验证码校验。

你可能感兴趣的:(网络安全)