数字签名算法RSA

RSA

RSA数字签名算法源于RSA公钥密码算法的思想,将RSA公钥密码算法按照数字签名的方式运用。RSA数字签名算法是迄今为止应用最为广泛的数字签名算法。 RSA数字签名算法的实现如RSA加密算法一致。RSA数字签名算法主要可分为MD系列和SHA系列。

MD系列主要包括:MD2withRSA和MD5withRSA。
SHA系列主要包括:SHA1withRSA,SHA224withRSA,SHA256withRSA,SHA384withRSA,SHA512withRSA。
Java 6提供了MD2withRSA,MD5withRSA,SHA1withRSA支持,其他四中SHA算法第三方加密组建包Bouncy Castle提供支持。

签名过程:

过程:

1)消息发送者产生一个密钥对(私钥+公钥),然后将公钥发送给消息接收者

2)消息发送者使用消息摘要算法对原文进行加密(加密后的密文称作摘要)

3)消息发送者将上述的摘要使用私钥加密得到密文–这个过程就被称作签名处理,得到的密文就被称作签名(注意,这个签名是名词)

4)消息发送者将原文与密文发给消息接收者

5)消息接收者使用公钥对密文(即签名)进行解密,得到摘要值content1

6)消息接收者使用与消息发送者相同的消息摘要算法对原文进行加密,得到摘要值content2

7)比较content1是不是与content2相等,若相等,则说明消息没有被篡改(消息完整性),也说明消息却是来源于上述的消息发送方(因为其他人是无法伪造签名的,这就完成了“抗否认性”和“认证消息来源”)

RSA算法原理

找出两个"很大"的质数:P & Q
N = P * Q
M = (P - 1) * (Q - 1)
找出整数E,E与M互质,即除了1之外,没有其他公约数
找出整数D,使得E*D除以M余1,即 (E * D) % M = 1
经过上述准备工作之后,可以得到:

E是公钥,负责加密
D是私钥,负责解密
N负责公钥和私钥之间的联系
加密算法,假定对X进行加密
(X ^ E) % N = Y
根据费尔马小定义,根据以下公式可以完成解密操作
(Y ^ D) % N = X
RSA本身算法的核心思想还是比较简单的,加密、解密算法的区别也只是在乘方取模部分使用的数字有所区别而已

当然,实际运用要比示例代码复杂得多,由于RSA算法的公钥私钥的长度(模长度)要到1024位甚至2048位才能保证安全, 因此,P、Q、E的选取,公钥、私钥的生成,加密、解密模指数运算都有一定的计算程序,需要依托计算机高速运算来完成。

公开密钥的好处

简单 就是一些乘除而已
可靠 可以保证产生的密文是统计独立,并且分布均匀的,也就是说:
不论给出多少份明文和对应的密文,也无法根据已知的明文和密文的对应关系,破译出下一份密文
N和E可以公开给任何人加密使用,但是只有掌握密钥D的人才可以解密,即使加密者自己也无法解密
灵活 可以产生很多的公钥E和私钥D的组合给不同的加密者

测试数据说明
P = 11;
Q = 13;
N = 143;
M = 120;

E = 89;
D = 209;
提示:本示例程序仅用于演示,N的数值只有143,能够加密的字符范围有限。

应该是私钥加密,公钥解密的。

你可能感兴趣的:(密码学,linux)