数字签名:报文的发送方用一个哈希函数从报文文本中生成报文摘要(散列值)。发送方用自己的私人密钥对这个散列值进行加密。然后,这个加密后的散列值将作为报文的附件和报文一起发送给报文的接收方。报文的接收方首先用与发送方一样的哈希函数从接收到的原始报文中计算出报文摘要,接着再用发送方的公用密钥来对报文附加的数字签名进行解密。如果两个散列值相同、那么接收方就能确认该数字签名是发送方的。数字签名有两种功效:一是能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。二是数字签名能确定消息的完整性。因为数字签名的特点是它代表了文件的特征,文件如果发生改变,数字签名的值也将发生变化。不同的文件将得到不同的数字签名。 一次数字签名涉及到一个哈希函数、发送者的公钥、发送者的私钥。总体来说,数字签名就是用发送方公钥证明报文是对方发送的。因为只有这个公钥带入运算才能证明报文的正确性。这个公钥就相当于发送方的身份证。因此需要证书证明这个公钥的合法性。
安全证书:CA中心发行包含CA签名的数字证书,用于证明某用户拥有某个公钥。 CA是证书的签发机构,它是PKI的核心。CA是负责签发证书、认证证书、管理已颁发证书的机关。如果用户想得到一份属于自己的证书,他应先向 CA 提出申请。在 CA 判明申请者的身份后,便为他分配一个公钥,并且 CA 将该公钥与申请者的身份信息绑在一起,并为之签字后,便形成证书发给申请者。如果一个用户想鉴别另一个证书的真伪,他就用 CA 的公钥对那个证书上的签字进行验证,一旦验证通过,该证书就被认为是有效的。
双方通信认证过程:
现在看加密过程. 以加密邮件为例. Alice 发加密邮件给 Bob.1a. Alice 从 Bob那里或从PKI服务器得到 Bob的公匙2a. Alice 用 Bob的公匙加密邮件, 发送给 Bob3a. Bob 受到加密邮件, 用自己的私匙解密.其他人如果截获加密邮件, 由于没有 Bob的私匙, 无法解密邮件.
具体过程(http://zhang1206.javaeye.com/blog/725144)
如果客户A想和银行B通信,他首先必须从数据库中取得银行B的证书,然后对它进行验证。如果他们使用相同的CA(证书认证中心),事情就很简单,客户A 只需验证银行B证书上CA的签名。如果他们使用不同的CA,问题就较为复杂。客户A必须从CA的树形结构底部开始,从底层CA往上层CA查询,一直追踪到 同一个CA为止,找出共同的信任CA。目前个人获取网上银行安全证书的途径都是通过银行申请,所以双方肯定采用同一证书认证中心颁发的证书。
现在假设客户A向银行B传送数字信息,为了保证信息传送的真实性、完整性和不可否认性,需要对要传送的信息进行数字加密和数字签名,其传送过程如下: 1)客户A准备好要传送的数字信息(明文)。 2)客户A对数字信息进行哈希(hash)运算,得到一个信息摘要。 3)客户A用自己的私钥(SK)对信息摘要进行加密得到客户A的数字签名,并将其附在数字信息上。 4)客户A随机产生一个加密密钥(DES密钥),并用此密钥对要发送的信息进行加密,形成密文。 5)客户A用B的公钥(PK)对刚才随机产生的加密密钥进行加密,将加密后的DES密钥连同密文一起传送给乙。 6)银行B收到客户A传送过来的密文和加过密的DES密钥,先用自己的私钥(SK)对加密的DES密钥进行解密,得到DES密钥。 7)银行B然后用DES密钥对收到的密文进行解密,得到明文的数字信息,然后将DES密钥抛弃(即DES密钥作废)。 8)银行B用A的公钥对客户A的数字签名进行解密,得到信息摘要。银行B用相同的hash算法对收到的明文再进行一次hash运算,得到一个新的信息摘要。 9)银行B将收到的信息摘要和新产生的信息摘要进行比较,如果一致,说明收到的信息没有被修改过。 数字证书原理2007-03-15 10:49 数字证书是网络通讯中标志通讯各方身份信息的一系列数据,它提供了在互联网上验证通信各方身份的方法,它是权威机构-CA认证机构,又称为证书授权(Certificate Authority)中心发行。 数字证书是经证书管理中心数字签名的包含公开密钥、拥有者信息以及公开密钥的文件。证书的格式遵循ITUTX.509国际标准。X.509数字证书通常包含以下内容: 1.证书的版本信息。 2.证书的序列号,每个证书都有唯一的证书序列号。 3.证书所使用的签名算法。 4.证书的发行机构名称,命名规则一般采用X.500格式。 5.证书的有效期,通用的证书一般采用UTC时间格式,它的计时范围为1950-2049。 6.证书所有人的名称,命名规则一般采用X.500格式。 7.证书所有人的公开密钥。 8.证书发行者对证书的签名。 数字证书采用公钥体制,即利用一对互相匹配的密钥进行加密、解密。每个客户可以设定特定的仅为本人所知的私有密钥(私钥),用它进行数据解密和签名;同时设定一把公共密钥(公钥)并由本人公开,发送方使用接收方的公钥对数据加密,而接收方则使用自己的私钥解密,这样信息就可以安全无误地到达目的地了。 数字加密是一个不可逆过程,即只有使用私有密钥才能解密。在公开密钥密码体制中,常用的是RSA体制。其数学原理是将一个大数分解成两个质数的乘积,加密和解密用的是两个不同的密钥。即使已知明文、密文和加密密钥(公开密钥),在计算上想要推导出解密密钥(私密密钥)是不可能的。按现在的计算机技术水平,要破解目前采用的1024位RSA密钥,需要上千年的计算时间。 公开密钥体系解决了密钥发布的管理问题,客户可以公开公开密钥,而保留私有密钥。使用者可以使用接收方的公开密钥对发送的信息进行加密,安全地传送到对方,然后由接收方使用自己的私有密钥进行解密。 客户可以采用自己的私钥对信息加以处理,由于密钥仅为本人所有,这样就产生了别人无法生成的文件,也就形成了数字签名。采用数字签名,能够确认以下两点: (1)保证信息是由签名者自己签名发送的,签名者不能否认或难以否认。 (2)保证信息自签发后到收到为止未曾做过任何修改,签发的文件是真实文件。 数字签名具体做法如下: 1)将报文按双方约定的HASH算法计算得到一个固定位数的报文摘要。在数学上保证,只要改动报文中任何一位,重新计算出的报文摘要值就会与原先的值不相符。这样就保证了报文的不可更改性。 2)将该报文摘要值发送者的私人密钥加密,然后连同原报文一起发送给接收者,产生的报文称数字签名。 3)接收方收到数字签名后,用同样的HASH算法对报文计算摘要值,然后与用发送者公开密钥进行解密解开的报文摘要值相比较,如果相等则说明报文确实来自所谓的发送者。 如果所有用户都由同一CA为其签署证书,则这一CA就必须取得所有用户的信任。用户证书除了能放在目录中供他人访问外,还可以由用户直接把证书发给其他用户。用户B得到用户A的证书后,可相信用户A的公钥加密的消息不会被他人获悉,还相信用户A的私钥签署的消息是不可全国伪造的。 非对称加密最初可能是为了解决密匙保管与交换难题. 非对称加密过程中用一个密匙加密只能用另一个密匙解密. 由此解决了密匙交换难题: 公匙随意发放; 保管也大为简化: 保护好私匙就可以了. PKI 之所以成为或 "称为" 体系, 是包括了实施中所必需的公匙管理: 认证, 发放, 收回, 查询等.
现在看加密过程. 以加密邮件为例. Alice 发加密邮件给 Bob.1a. Alice 从 Bob那里或从PKI服务器得到 Bob的公匙2a. Alice 用 Bob的公匙加密邮件, 发送给 Bob3a. Bob 受到加密邮件, 用自己的私匙解密.其他人如果截获加密邮件, 由于没有 Bob的私匙, 无法解密邮件.
签名过程则是非对称加密的另一用法1b. Alice 在用 Bob的公匙加密邮件前先对邮件产生摘要Ha.2b. Alice 用自己的私匙加密邮件摘要, 连同加密邮件(2a)发送给 Bob3b. Bob 将加密邮件摘要用Alice的公匙解密得到解密的邮件摘要Ha. (公匙可以从 Aliceb那里或从PKI服务器得到), 并用自己的私匙解密邮件(3a).4b. Bob 对解密的邮件产生摘要Hb, 与(3b)解密的邮件摘要Ha比较.如果无误, 则可确认: 1) 该邮件由Alice 发出, 因为只有Alice 有自己的私匙; 2)邮件在传递过程中未遭篡改, 因为邮件摘要比较结果一致.另外, 因为只有Alice 有自己的私匙, Alice 无法否认该邮件由自己发出.
如果 PKI Service Provider 用 RootCA 对 Alice 的公匙做签名操作, 由于RootCA的公匙可以公开获得, 对 Alice 的公匙进行核实(4b)即可确认该公匙为 Alice 所有. 在解密的邮件中看到对方的证书信息是因为对方对邮件不但加密并且签名, 对方的公匙已经含有有关信息. 既是签名, 当然要你看到才对.
总结:用对方的公匙加密, 用自己的私匙解密用自己的私匙签名, 用对方的公匙核实