rsa数字签名与hash/md5数字摘要

来源:互联网 发布:网络电视ssid怎么设置 编辑:程序博客网 时间:2024/05/21 10:37

 因为数字摘要的长度比较短,减少了传输的数据量;而且根据相同的明文会生成相同的数字摘要,从而用来验证数据的完整性

 

“数字签名”一般的做法是:A先计算出文件M的HASH码,再对HASH码进行加密(这个步骤就是签名),再把M(文件M不要加密,第三方可以查阅)和加密后的HASH码传送给B,B再用A的公钥来解密刚才得到的加密HASH码,如果能解密,那就说明这个文件是A发的,具有法律效应。再计算出得到的文件M的HASH码,再和刚才解密出来的HASH码比较(这个步骤叫验证签名),如果一致就说明文件M在传输过程中没有被修改。

 

工作原理:

数字签名原理中定义的是对原文做数字摘要和签名并传输原文,在很多场合传输的原文是要求保密的,要求对原文进行加密的数字签名方法如何实现?这里就要涉及到“数字信封”的概念。“电子信封”基本原理是将原文用对称密钥加密传输,而将对称密钥用收方公钥加密发送给对方。收方收到电子信封,用自己的私钥解密信封,取出对称密钥解密得原文。其详细过程如下:
(1) 发方A将原文信息进行哈希运算,得一哈希值即数字摘要MD;
(2) 发方A用自己的私钥PVA,采用非对称RSA算法,对数字摘要MD进行加密,即得数字签名DS;
(3) 发方A用对称算法DES的对称密钥SK对原文信息、数字签名SD及发方A证书的公钥PBA采用对称算法加密,得加密信息E;
(4) 发方用收方B的公钥PBB,采用RSA算法对对称密钥SK加密,形成数字信封DE,就好像将对称密钥SK装到了一个用收方公钥加密的信封里;
(5) 发方A将加密信息E和数字信封DE一起发送给收方B;
(6) 收方B接受到数字信封DE后,首先用自己的私钥PVB解密数字信封,取出对称密钥SK;
(7) 收方B用对称密钥SK通过DES算法解密加密信息E,还原出原文信息、数字签名SD及发方A证书的公钥PBA;
(8) 收方B验证数字签名,先用发方A的公钥解密数字签名得数字摘要MD;
(9) 收方B同时将原文信息用同样的哈希运算,求得一个新的数字摘要MD’;
(10)将两个数字摘要MD和MD’进行比较,验证原文是否被修改。如果二者相等,说明数据没有被篡改,是保密传输的,签名是真实的;否则拒绝该签名。
这样就做到了敏感信息在数字签名的传输中不被篡改,未经认证和授权的人,看不见原数据,起到了在数字签名传输中对敏感数据的保密作用。

 

 

 

-------------------------------------------

在认证过程中加入随机数认证是比较普遍的解决方案,接下来我把详细过程写一下,参考的是marauroa,一个开源网游服务器代码。

1,客户端发送LoginRequestKeyMessage,告诉服务器自己准备登陆,并期望得到公钥。

2,服务器收到LoginRequestKeyMessage后,发送公钥key给客户端。

3,客户端保存公钥key后随机生成一个大整数,并将hash后的值clientNonce发给服务端。

4,服务端收到clientNonce,并随机生成一个大整数,然后照样将它hash后的值serverNonce发给客户端。

5,客户端收到serverNonce,此时此刻,客户端和服务端都有了一致的【clientNonce,serverNonce】且这对值每次登陆都不一样,因为都是由随机大整数hash而来。

好了,一切准备就绪,接下来就是客户端对输入密码的加密发送了,首先XOR(clientNonce,serverNonce),异或后的值存入b1。

然后XOR(b1,hash(password)),异或后的值存入b2。

然后用公钥加密b2,得到cryptedPassword后发送给服务器。

6,服务器收到cryptedPassword,嗯,【clientNonce,serverNonce】知道,私钥知道,怎么得到hash(password)应该很简单了吧,然后就是查询数据库验证,OK。

 

原创粉丝点击