RSA算法的填充模式

2022-09-01 13:15:47

一. 简介

RSA算法的常见的表现模式是多少位,例如1024、2048、4096等,这些并不是公钥或私钥的位数,而是模长。先简单介绍下RSA算法的密钥生成过程:

  1. 给定两个大素数p、q,令 n = p*q;
  2. 给定一个数e,使得e和φ(n)互质,则存在d,使得 e*d = 1 (mod φ(n)),d即是e对同余数φ(n)的模反元素;
  3. 以上的 e,d分别是公钥和私钥,给出的通常会带有n,如公钥是(e, n),私钥是(d, n)。
  4. 加解密过程,给定明文数字M(< n,加密时通常是字符串,转成大整数即可),加密:M^e % n = C,
    解密:C^d % n = M。

对加密的内容长度要求小于n,如果包含填充模式,则加密内容长度与填充内容长度的和要小于n,否则就会需要分组加密。

二. RSA的填充方式

RSA加密常用的填充模式有三种:RSA_NO_PADDING,RSA_PKCS1_PADDING, RSA_PKCS1_OAEP_PADDING。RSA算法也是一个块加密算法( block cipher algorithm),总是在一个固定长度的块上进行操作,分组的长度是跟公私钥模长有关的。RSA算法的填充是在每个分组前面填充的,而对称加密算法是在最后一个分组的后面进行填充。

2.1 RSA_NO_PADDING

填充时会在分组内容的前面填充0,直到内容的位数和模数相同,例如2048位的RSA,需要填充至256字节。

2.2 RSA_PKCS1_PADDING

RSA算法在运算时需要将数据填充至分组长度(与RSA密钥模长相等)。
PAD方式如下:
EM = 0x00 || BT || PS || 0x00 || T,其中BT为The block type块类型,PS为The padding string填充字符串,T为明文,填充串PS的长度最少为8个字节,这是RSA操作的一种安全措施。
EM = 0x00 || 0x02 || PS || 0x00 || M
PS : pad with random data, length : Len(EM) - 3 - Len(M)
BT(The block type块类型):
BT=00 or 01 (私钥运算时),BT=02 (公钥运算时)
PS(The padding string填充字符串):
BT=00,PS由00组成;
BT=01,PS由FF组成;
BT=02,PS由伪随机生成,且非零;

所以,由上可知,RSA_PKCS1_PADDING对应的加密分组内容最大为 (模数/8 - 11)。

2.3 RSA_PKCS1_OAEP_PADDING

RSA_PKCS1_OAEP_PADDING填充模式没有使用过, 他是PKCS#1推出的新的填充方式,安全性是最高的,和前面RSA_PKCS1_PADDING的区别就是加密前的编码方式不一样。

参考:

RSA默认填充方式说明

  • 作者:Denny_Chen_
  • 原文链接:https://blog.csdn.net/Denny_Chen_/article/details/117396720
    更新时间:2022-09-01 13:15:47