RSA非对称加密算法,加密和签名

来源:互联网 发布:xquartz for mac 卸载 编辑:程序博客网 时间:2024/06/06 02:20

RAS算法:

1、用RSA算法生成一对密钥,公钥发放给外部客户,私钥自己保管;有以下应用场景:
     【公钥加密、私钥解密】或者【私钥签名、公钥验证】

2、非对称加解密的理解:

  • 小明想秘密给小英发送消息
  • 小英手里有一个盒子(public key),这个盒子只有小英手里的钥匙(private key)才打得开
  • 小英把盒子送给小明(分发公钥)
  • 小明写好消息放进盒子里,锁上盒子(公钥加密)
  • 小明把盒子寄给小英(密文传输)
  • 小英用手里的钥匙打开盒子,得到小明的消息(私钥解密)
  • 假设小刚劫持了盒子,因为没有小英的钥匙,他也打不开

3、当该用户发送文件时,用私钥签名,别人用他给的公钥验证签名,可以保证该信息是由他发送的。当该用户接受文件时,别人用他的公钥加密,他用私钥解密,可以保证该信息只能由他接收到,这里的签名和加密是不一样的,加密时,对方用公匙(接收方提供的)加密,接收方用自己的私匙解密,数字签名时,是公匙加密的一种逆用,用私匙加密,公匙解密,可以确认发送方身份,加密是为了防止数据被别人截取,重点在数据的安全性,防止被窃听,数字签名是为了身份认证,重点在核实用户身份的真实性,调用支付接口时,商户发信息给支付宝时,用自己的私钥做签名,以供支付宝验证商户的身份。


4.数字签名主要经过以下几个过程:

信息发送者使用一单向散列函数(HASH函数)对信息生成信息摘要;

信息发送者使用自己的私钥签名信息摘要;

信息发送者把信息本身和已签名的信息摘要一起发送出去;

信息接收者通过使用与信息发送者使用的同一个单向散列函数(HASH函数)对接收的信息本身生成新的信息摘要,再使用信息发送者的公钥对信息摘要进行验证,以确认信息发送者的身份和信息是否被修改过。

所以,一般的,数字签名=私钥加密(hash(原始数据)),如果原始数据比较短,也可以直接对原始数据进行私钥加密


5.证书的作用

非对称算法的公钥是公开的,为了公钥的安全,可以向权威的证书签发机构(ca)申请证书来保护公钥的安全(为公钥盖一个章,防止别人伪造)

以支付宝移动支付为例,调用pay函数时,要传支付信息(订单号,金额,卖家支付宝账号),同时对支付信息用商户的私钥签名(支付宝服务器用商户的公钥验证签名信息),把签名信息和支付信息一起组成字符串作为pay的入参,这样支付宝就可以用公钥解密出签名信息,与字符串中的支付信息做对比,达到验证的目的

但是,如果支付宝服务器被入侵,存放的商户公钥被黑客替换成他伪造的公钥,这样黑客就可以用自己的私钥签名并发送信息给支付宝(调用pay),比如可以把钱支付到他指定的账户中

为了解决这个问题,就可以用数字证书来保护公钥。当然支付宝服务器有其他办法去保护他得公钥,所以不一定需要ca。

更详细信息参考:http://blog.csdn.net/oscar999/article/details/9364101

0 0