RSA加密算法和签名算法

RSA加密算法

RSA公钥加密体制包含以下3个算法:KeyGen(密钥生成算法),Encrypt(加密算法)以及Decrypt(解密算法)。算法

  • (PK, SK)\leftarrow KeyGen(\lambda)。密钥生成算法以安全常数\lambda做为输入,输出一个公钥PK,和一个私钥SK。安全常数用于肯定这个加密算法的安全性有多高,通常以加密算法使用的质数p的大小有关。\lambda越大,质数p通常越大,保证体制有更高的安全性。在RSA中,密钥生成算法以下:算法首先随机产生两个不一样大质数p和q,计算N=pq。随后,算法计算欧拉函数\varphi(N)=(p-1)(q-1)。接下来,算法随机选择一个小于\varphi(N)的整数e,并计算e关于\varphi(N)的模反元素d。最后,公钥为PK=(N, e),私钥为SK=(N, d)。
  • CT \leftarrow Encrypt(PK,M)。加密算法以公钥PK和待加密的消息M做为输入,输出密文CT。在RSA中,加密算法以下:算法直接输出密文为CT=M^e \bmod N
  • M \leftarrow Decrypt(SK,CT)。解密算法以私钥SK和密文CT做为输入,输出消息M。在RSA中,解密算法以下:算法直接输出明文为M=CT^d \bmod N。因为e和d在\varphi(N)下互逆,所以咱们有:CT^d=M^{ed}=M \bmod N

因此,从算法描述中咱们也能够看出:公钥用于对数据进行加密,私钥用于对数据进行解密。固然了,这个也能够很直观的理解:公钥就是公开的密钥,其公开了你们才能用它来加密数据。私钥是私有的密钥,谁有这个密钥才可以解密密文。不然你们都能看到私钥,就都能解密,那不就乱套了。安全

RSA签名算法

签名算法一样包含3个算法:KeyGen(密钥生成算法),Sign(签名算法),Verify(验证算法)。函数

  • (PK,SK) \leftarrow KeyGen(\lambda)。密钥生成算法一样以安全常数\lambda做为输入,输出一个公钥PK和一个私钥SK。在RSA签名中,密钥生成算法与加密算法彻底相同。
  • \sigma \leftarrow Sign(SK,M)。签名算法以私钥SK和待签名的消息M做为输入,输出签名\sigma。在RSA签名中,签名算法直接输出签名为\sigma = M^d \bmod N。注意,签名算法和RSA加密体制中的解密算法很是像。
  • b \leftarrow Verify(PK,\sigma,M)。验证算法以公钥PK,签名\sigma以及消息M做为输入,输出一个比特值b。b=1意味着验证经过。b=0意味着验证不经过。在RSA签名中,验证算法首先计算M'=\sigma^e \bmod N,随后对比M'与M,若是相等,则输出b=1,不然输出b=0。注意:验证算法和RSA加密体制中的加密算法很是像。

因此,在签名算法中,私钥用于对数据进行签名,公钥用于对签名进行验证。这也能够直观地进行理解:对一个文件签名,固然要用私钥,由于咱们但愿只有本身才能完成签字。验证过程固然但愿全部人都可以执行,你们看到签名都能经过验证证实确实是我本身签的。加密

参考:https://www.zhihu.com/question/25912483
相关文章
相关标签/搜索