Encryption RSA加密输出大小

Encryption RSA加密输出大小,encryption,rsa,public-key-encryption,Encryption,Rsa,Public Key Encryption,使用2048位密钥和PKCS1P时,RSA加密输出大小是多少 是否总是256字节,与输入大小无关 如何计算其他键的大小?是的,是的 输出大小应始终等于模数的大小(键的一部分),因此: 如果不是,则存在大量针对RSA的攻击,请参阅以获取有关该攻击的基本信息 因此,为了保证输出是2048位,即使要加密的输入是7,也必须始终应用填充普通RSA的输出大小(使用一些填充方案,但不是)始终是密钥大小。原因是,对于某些公钥n的结果是某个整数c,其0的输出(作为整数)始终在0和n之间: 如果消息代表m不在0和n

使用2048位密钥和PKCS1P时,RSA加密输出大小是多少

是否总是256字节,与输入大小无关


如何计算其他键的大小?

是的,是的

输出大小应始终等于
模数的大小(键的一部分),因此:

如果不是,则存在大量针对RSA的攻击,请参阅以获取有关该攻击的基本信息


因此,为了保证输出是
2048位
,即使要加密的输入是
7
,也必须始终应用填充

普通RSA的输出大小(使用一些填充方案,但不是)始终是密钥大小。原因是,对于某些公钥
n
的结果是某个整数
c
,其
0的输出(作为整数)始终在0和n之间:

  • 如果消息代表m不在0和n-1之间,则输出 消息代表超出范围并停止

  • 设c=m^e模n

  • 输出c

  • 当然,
    c
    是一个数字。因此,必须将其转换为字节才能使用。关于
    c
    已知的唯一一点是,对于
    m
    的大值,它小于
    n
    。可能是
    c
    小了几个字节,即使
    m
    很大


    您已经提到,这是加密方案的一部分。填充将确保
    m
    始终较大且随机;RSA加密的安全要求

    您会发现
    c
    的编码在其中指定:

    步骤4:将密文代表c转换为 长度k八位字节:C=

    其中k是模数的大小,单位为八位字节(字节)

    所以,答案总是
    k
    ,模数的大小,以字节为单位。只是因为标准要求这样做。它是一个编码为无符号大端数字的值,前缀为所需的尽可能多的零字节


    注:

    • 模数大小定义键大小。因此,RSA加密的输出与密钥大小相同:
      ceil(keySize/8.0)
      使用浮点数或
      (keySize+8-1)/8
      使用整数

    • 使用OAEP填充的RSA使用相同的技术,因此答案对于OAEP也是正确的(以及大多数其他不太为人所知的方案,如RSA-KEM)

    • 许多执行“原始”RSA(只是消息与公共指数的模幂)的库例程仍然执行I2OSP函数,但最好检查以确保


    你注意到256*8=2048吗?@Perseids。是的,但我不确定输出总是256字节。是吗?From:“RSA_size()返回RSA模数大小(以字节为单位)。它可用于确定必须为RSA加密值分配多少内存。”(消息大小取决于模数大小)。情况稍微复杂一些。有点迂腐,我可以说,如果模数对于它的位大小来说很小(比如说它从100位开始),那么你就有机会得到一个实际上比模数短一点的密文。但更重要的是,不是大的输入值,而是声音填充方案使RSA安全。例如,如果您使用小指数(例如3),则可与任何确定性填充方案一起使用。输出与模数相同的原因是,它明确地适合模数的大小。这不是因为应用了填充。即使应用了填充,模幂运算也会产生介于零和模之间的随机值,并且该值的编码字节数可能少于模。看看为什么结果仍然与模量大小相同。这个答案不能解释为什么结果与以字节为单位的模数大小相同。如果不确定,请阅读标准!它们的可读性通常比人们预期的要高得多。要使用二进制逻辑获得最终的缓冲区大小:
    needed=(size+(keySize>>3)-1)和((keySize>>3)-1))
    为什么要使用移位来模糊计算?为什么不让编译器来解决呢?可读性无疑对这种计算更为重要。为什么要使用浮点数来计算它呢?浮点数的定义是不精确的?这只是为了演示另一种方法,仅此而已:)。
    2048 bit Modulus -> 2048 bit output
    1024 bit Modulus -> 1024 bit output
    ...