hyd*_*yda 18 encryption rsa public-key-encryption
使用2048位密钥时使用的是什么是RSA加密输出大小(使用pkcs1padding).是否总是256字节独立于输入大小?我如何计算其他关键尺寸?
i_t*_*uro 16
是的,确实如此.
在输出尺寸 应该总是等于大小Modulus(键的一部分),那么:
2048 bit Modulus -> 2048 bit output
1024 bit Modulus -> 1024 bit output
...
Run Code Online (Sandbox Code Playgroud)
如果不是,则存在大量针对RSA的攻击,请参阅此处以获取有关该基础的基本信息.
因此,为了保证在加密输入时输出是2048 bit均匀的,比方说,必须始终应用填充!7
RSAEP(RSA 加密原语)的输出(作为整数)始终在 0 和 n 之间:
如果消息代表m不在0和n-1之间,则输出消息代表超出范围并停止。
令 c = m^e mod n。
输出 C.
当然c是一个数字。因此,您必须将其转换为字节才能使用。唯一已知的c是,它比n的较大值要小m。即使很大,也可能会c小几个字节m。
您提到了PKCS1Padding ,它是RSAES-PKCS1-V1_5-ENCRYPT加密方案的一部分。填充将确保它m始终很大且随机;RSA 加密的安全性要求。
c您会发现其中指定了编码:
...
步骤4:将密文代表c转换为长度为k个八位字节的密文C:C= I2OSP(c,k)
...
其中 k 是模数的大小,以八位位组(字节)为单位。
所以是的,答案始终是k模数的大小(以字节为单位)。仅仅是因为标准要求这样做。它是一个编码为无符号大端数字的值,并根据需要添加了尽可能多的零字节前缀。
笔记:
模数大小定义密钥大小。因此 RSA 加密的输出与密钥大小相同:ceil(keySize / 8.0)使用浮点数或(keySize + 8 - 1) / 8使用整数。
具有 OAEP 填充的 RSA 使用相同的技术,因此答案对于 OAEP 也是正确的(以及大多数其他不太知名的方案,例如 RSA-KEM)。
许多执行“原始”RSA(只是消息与公共指数的模幂)的库例程仍然执行 I2OSP 函数 - 但最好检查以确保。