对称密码、非对称密码、散列算法与PKIgit
密码学要解决的问题:机密性、完整性、身份验证(抗抵赖性):算法
1、对称密码:安全
对称密码技术:发件人和收件人使用其共同拥有的单个密钥 ,这种密钥既用于加密,也用于解密,叫作机密密钥(也称为对称密钥或会话密钥)。网络
可以提供信息机密性(没有密钥信息不能被解密)、完整性(被改变的信息不能被解密)的服务。并发
对称式密码学又称:单钥密码学、秘密密钥密码学、会话密钥密码学、私钥密码学、共享秘钥密码学ide
常见的对称式加密技术:函数
DES(数据加密标准):分组式加密,算法源于Lucifer,做为NIST对称式加密标准;64位(有效位56位、校验8位),分组算法加密
3DES:128位,分组算法spa
IDEA(国际数据加密算法):128位,比DES快,分组算法3d
Blowfish:32-448位,算法公开,分组算法
RC4:流密码,密钥长度可变
RC5:分组密码,密钥长度可变,最大2048位
Rijndael:128位/196位/256位
AES(高级加密标准):DES升级版,算法出自Rinjindael
对称密码的优势:
用户只需记忆一个密钥,就可用于加密、解密;
与非对称加密方法相比,加密解密的计算量小,速度快,简单易用,适合于对海量数据进行加密处理 。
对称密码的缺点:
若是密钥交换不安全,密钥的安全性就会丧失。特别是在电子商务环境下,当客户是未知的、不可信的实体时,如何使客户安全地得到密钥就成为一大难题。
若是用户较多状况下的密钥管理问题。N*(N-1)/2
若是密钥多个用户被共享,不能提供抗抵赖性
例如:
假设Alice和Bob是认识的,两人为了保证通讯消息不被其它人截取,预先约定了一个密码,用来加密在他们之间传送的消息,这样即便有人截取了消息没有密码也没法知道消息的内容。由此便实现了机密性。
可是,以上的实现过程存在如下问题:
1):若是Alice和Bob是在互联网中彼此不认识的,那么Alice该如何和Bob协商(或者说传送)共享密钥(密码)?
2):若是Alice要和100我的通讯,他须要记住多少个密码?和1000个、10000我的......通讯呢?
3):若是Alice和其它人通讯使用了和Bob相同的密码,那么如何知道这个消息必定是来自Bob呢?
由此就引入了非对称密码。
2、非对称密码:
使用一对密钥:一个用于加密信息,另外一个则用于解密信息。
两个密钥之间存在着相互依存关系:即用其中任一个密钥加密的信息只能用另外一个密钥进行解密。
其中加密密钥不一样于解密密钥,公钥加密私钥解密,反之也可私钥加密公钥解密。
密钥依据性质划分,将其中的一个向外界公开,称为公钥;另外一个则本身保留,称为私钥。公钥(Public key)经常使用于数据加密(用对方公钥加密)或签名验证(用对方公钥解密),私钥(Private key)经常使用于数据解密(发送方用接收方公钥加密)或数字签名(用本身私钥加密)。
机密性、完整性、抗抵赖性
常见的非对称式加密技术:
Diffie-Hellman :最先产生,计算离散对数,是一种密钥交换协定算法,不加密、不产生数字签名。
第一个非对称密钥协商算法,重点解决密钥分发问题
基于“有限域上的离散对数计算困难”的难题
通讯双方在不可信的网络上交换他们彼此的公钥,再在各自的系统上生成相同的对称密钥。
最初的Diffie-Hellman算法容易遭受到中间人***,应对这种***的方法是在接受某人的公钥前进行身份验证。
不提供加密、数字签名功能。
RSA:大素数分解,可加密,可签名
EI Gamal :离散对数,可加密,可签名,最慢
椭圆曲线:计算离散对数,功能与RSA类似,更快
DSA:EI的变种,离散对数,不加密,可签名,比RSA慢
背包:背包算法,可加密,可签名,已淘汰
DSS:数字签名标准
以下:
首先,Alice为了保证消息的机密性,用Bob的公钥加密了数据,这样就只能用Bob的私钥解密消息,因此只有Bob才能看到消息。
这当然实现了机密性,然而Bob如何验证消息是来自Alice呢,由于任何人均可以获得Bob的公钥。由此就有了下面这种方式:
Alice为了向Bob证实消息确实是她发的,就用本身的私钥加密消息而后发送给Bob,Bob用Alice的公钥解密了消息,因而知道了消息的确是Alice发的,由于只有用Alice私钥加密的消息才能用她的公钥解密。
这样便实现了身份验证,然而任何人均可以用Alice的公钥来解密消息,这样机密性又无从保证了,因而又有了下面这种方式:
Alice先用本身的私钥加密数据(实现身份验证),而后再用Bob的公钥再次加密刚才加密过的消息密文(实现机密性),而后发送给Bob,Bob先用本身的私钥解密,再用Alice的公钥解密,如此便实现了机密性和身份验证。
然而,非对称算法自己就耗资源,运算速度慢,此处还加密了两次,对于批量数据是绝对不可接受的,有没有更好的办法呢?由此又引入了下面的混合加密:
3、混合加密
混合加密简单的说就是用非对称算法交换对称秘钥,用对称密钥加密数据。
以下:
Alice先随机生成一个会话密钥,而后用这个会话密钥加密消息,再用Bob的公钥加密会话密钥,而后把消息密文和会话密钥密文(数字信封)都发送给Bob,Bob收到消息先用本身的私钥解密数字信封,获得会话秘钥,再用会话密钥解密消息密文。
注意,这里不能实现身份验证,Alice没法向Bob证实消息是本身发的。
4、散列算法(哈希函数、单向加密)
消息完整性:
有不少协议使用校验位和循环冗余校验(Cyclic Redundancy Check,CRC)函数来检测位流从一台计算机传送到另外一台计算机时是否被更改。但校验位和循环冗余校验一般只能检测出无心的更改。
若是消息被***者截获,在更改以后从新计算校验值,这样接收方永远也不会知道位流被篡改。为了实现这种保护,须要采用散列算法来检测有意或无心的对数据的未受权更改。
Hash(哈希)函数(也称为散列函数):输入能够是任何长度消息,经过一个单向的运算产生一个定长的输出。这个输出被称之为Hash值(散列值,也被称为哈希摘要),其具备如下特色:
Hash值应是不可预测的。
Hash函数是单向函数,不可逆。
Hash函数具备肯定性(惟一性),对于输入X应该老是产生相同的输出Y。
寻找任何(x,y)对使得H(x)=H(y),在计算上不可行(强无碰撞,抗“生日***”)
对任何给定分组x,寻找不等于x的y,使得H(y)=H(x),在计算上不可行(弱无碰撞)
散列的种类:
MD2:128位,比MD四、MD5慢
MD4:128
MD5:128,比MD4复杂
HAVAL算法:可变,MD5变种
SHA安全散列:SHA-1 160位,SHA-256 256位,SHA-384,SHA-512;
Tiger:192位,比MD五、SHA-1快
RIPEMD-160:160位,MD四、MD5的替代
以下:
Alice使用散列算法对消息计算出消息摘要1,而后把消息摘要1附在消息明文后面一并发送给Bob,Bob收到消息后使用相同的散列算法对消息明文计算出消息摘要2,而后和消息摘要1比较,若是相同则表示消息未遭到篡改。
但简单的这样作并不能实现真正的完整性,假若有人在中间截获消息修改后从新计算消息摘要附在后面,Bob依然认为消息未遭到篡改。同时也不能实现身份验证,因而便有了数字签名:
数字签名:
数字签名是指用户用本身的私钥对原始数据的哈希摘要(Hash digest)进行加密所得的数据。
信息接收者使用信息发送者的公钥对附在原始信息后的数字签名进行解密后得到哈希摘要。经过与本身用收到的原始数据产生的哈希摘要对照,以确认如下两点:
信息是由签名者发送的(身份验证、不可抵赖性)
信息自签发后到收到为止不曾信得过任何修改(完整性)
数字签名标准 :
在1991年,NIST提议了一个为数字签名标准(Digital Signature Standard,DSS)的联邦标准 FIPS 186( 使用SHA),它最近一次更新实在2013年,做为FIPS 186-4被发布,包括了DSA、RSA、ECC
DSS有两种建立签名的方法DSA和RSA。与RSA不一样,DSA只能用于数字签名,而且比RSA慢,RSA可以用于数字签名、加密以及密钥分发。
以下:
Alice用散列算法计算出消息摘要,而后用本身的私钥加密消息摘要(数字签名),而后将消息明文和数字签名一块儿发送给Bob,Bob收到消息用Alice 的公钥解密数字签名获得原消息摘要(验证了Alice的身份),用相同的散列算法对消息计算消息摘要,而后将两个消息摘要进行比较,若是消息摘要相同则表示消息没有遭到篡改。
注意:这里假若有第三者Tom进行中间人***,他能够篡改消息,也能够从新计算消息摘要,可是Tom却没有Alice的私钥来加密消息摘要,此时若是Tom用本身的私钥加密消息摘要,当Bob收到消息后用Alice的公钥将没法解密数字签名获得消息摘要原文。
综上,不能算法的不一样功能:
从上面能够看出,在这些实现过程当中,公钥相当重要,那么咱们又如何验证用户的公钥,就像本文的例子中,Alice如何获得Bob的公钥,获得公钥后又如何验证这个公钥就是Bob的?此时就须要一个双方都信任的第三方机构,由此引入PKI:
5、公钥基础设施(PKI)
PKI是由软件、通讯协议、数据格式、安全策略等用于使用、管理、控制公钥密码体制的一套系统。它主要有三个目的:发布公钥/证书,证实绑定公钥的实体,提供一个公钥有效性的验证。
PKI提供基本服务:
机密性
完整性
访问控制
真实性
不能否认性
数字证书:
PKI技术采用证书管理公钥,经过第三方的可信任机构认证中心CA (Certificate Authority),把用户的公钥和用户的其余标识信息(如名称、email、×××号等)捆绑在一块儿,在Internet网上验证用户的身份。
公钥证书是以数字方式签名的声明,它将公钥的值与持有相应私钥的主体(我的、设备和服务)的身份绑定在一块儿。经过在证书上签名,CA能够核实与证书上公钥相应的私钥为证书所指定的主体所拥有。
数字证书的格式是由CCITT X.509国际标准所规定的,它包含了如下几点:
证书拥有者的姓名
证书拥有者的公钥
公钥的有效期
颁发数字证书的单位
数字证书的序列号(Serial number)
CA的名称,并用CA的数字签名签署该证书
CA所遵循的用来肯定证书主体身份策略的标识符
在证书中标识的密钥对(公钥及相关的私钥)的用法
证书废止列表(CRL)的位置
ITU-T X.509并不是证书的唯一格式。例如,Pretty Good Privacy (PGP)安全电子邮件是依赖PGP所独有的一种证书。
CA:
负责发放和管理数字证书的权威机构
具体功能:
接收验证RA转发来的最终用户数字证书的申请。
肯定是否接受最终用户数字证书的申请-证书的审批。
生成密钥对和证书
向申请者颁发证书
为签发的证书提供组织与责任的权威公证
接收最终用户数字证书的查询、撤销。
产生和发布证书废止列表(CRL)
密钥管理(密钥备份、密钥恢复、密钥更新)
数字证书的归档。
密钥归档
历史数据归档。
简单的说,PKI实现的功能就是用一个你们都信任的机构CA给用户颁发一个数字证书,证书中包含用户的公钥(这个公钥能够是用户本身生成的提交给CA的也能够是CA生成发给用户的)及相关身份信息。以本文的Alice和Bob为例,Alice为了向Bob证实本身是Alice和某个公钥是本身的,她便向一个Alice和Bob都信任的CA机构申请证书,Alice先本身生成了一对密钥对(私钥和公钥),把本身的私钥保存在本身电脑上,而后把公钥给CA申请证书,CA接受申请因而给Alice颁发了一个数字证书,证书中包含了Alice的那个公钥以及其它身份信息,固然,CA会计算这些信息的消息摘要并用本身的私钥加密消息摘要(数字签名)一并附在Alice的证书上,以此来证实这个证书就是CA本身颁发的。Bob获得Alice 的证书后用CA的证书(自签署的)中的公钥来解密消息摘要,这样就确认Alice的证书是CA发的,证书中的信息未遭到篡改,同时也获得了Alice的公钥。