• 加密与安全:非对称加密算法 RSA 1024 公钥、秘钥、明文和密文长度


    RSA 1024 是指公钥及私钥分别是 1024bit,也就是 1024/8 = 128Bytes。

    RSA 原理

    RSA 算法密钥长度的选择是安全性和程序性能平衡的结果,密钥长度越长,安全性越好,加密解密所需时间越长。

    1、非对称加密算法中 1024bit 密钥的强度相当于对称加密算法 80bit 密钥的强度;


     
    2、密钥长度增长一倍,公钥操作所需时间增加约 4 倍,私钥操作所需时间增加约 8 倍,公私钥生成时间约增长 16 倍;
     
    3、明文长度

    一次能加密的明文长度与密钥长度成正比:

    len_in_byte(raw_data) = len_in_bit(key)/8 -11,如 1024bit 的密钥,一次能加密的内容长度为 1024/8 -11 = 117 byte。

    所以非对称加密一般都用于加密对称加密算法的密钥,而不是直接加密内容。

    注:

    明文长度小于等于密钥长度 128Bytes - 11 这个说法本身不太准确,会让人产生 RSA 1024 只能加密 117 字节长度明文的误解。

    实际上,RSA 算法本身要求加密内容也就是明文长度 m 必须满足 0<m<n,也就是说内容这个大整数不能超过 n,否则就出错。

    那么如果 m=0 是什么结果?

    普遍 RSA 加密器会直接返回全 0 结果,如果 m>n,运算就会出错。

    因此,RSA 实际可加密的明文长度最大也是 1024bits,但问题就来了:

    如果小于这个长度怎么办?

    就需要进行 padding,因为如果没有 padding 用户无法确分解密后内容的真实长度,字符串之类的内容问题还不大,以 0 作为结束符,便于区分。

    但对二进制数据就很难理解,因为不确定后面的 0 是内容还是内容结束符。

    只要用到 padding,那么就会占用实际的明文长度,我们一般使用的 padding 标准有 NoPPadding、OAEPPadding、PKCS1Padding 等。

    其中 PKCS#1 建议的 padding 就占用了 11 个字节,于是才有 117 字节的说法。

    如果大于这个长度怎么办?

    很多算法的 padding 往往是在后边的,但 PKCS 的 padding 则是在前面的,此为有意设计,有意的把第一个字节置 0 以确保 m 的值小于 n。

    这样,128字节(1024bits)- 11 字节正好是117字节,但对于 RSA 加密来讲,padding 也是参与加密的。

    所以,依然按照 RSA 1024 实际的明文只有 117 字节。

    关于 PKCS#1 padding 规范可参考:RFC2313 chapter 8.1。

    我们在把明文送给 RSA 加密器前,要确认这个值是不是大于 n,也就是如果接近 n 位长,那么需要先 padding 再分段加密。

    除非我们是“定长定量自己可控可理解”的加密则不需要 padding。

    4、秘文长度

    加密后密文的长度为密钥的长度,如密钥长度为 1024b(128Byte),最后生成的密文固定为 1024b(128Byte)

    密文长度就是给定符合条件的明文加密出来的结果位长,这个可以确定,加密后的密文位长跟密钥的位长度是相同的,因为加密公式:

    C=(P^e)%n

    所以,C 最大值就是 n-1,所以不可能超过 n 的位数。

    尽管可能小于 n 的位数,但从传输和存储角度,仍然是按照标准位长来进行的。

    因此,即使我们加密一字节的明文,运算出来的结果也要按照标准位长来使用。

    refer:

    https://blog.csdn.net/lvxiangan/article/details/45487943
    http://blog.sina.com.cn/s/blog_4fcd1ea301012o4q.html
    ————————————————
    版权声明:本文为CSDN博主「简一商业」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/liwei16611/article/details/83751851

  • 相关阅读:
    Spring框架(一)-----核心理解
    vi常用编辑
    Avue使用renren-fast-vue开源脚手架工程(一)
    sqlServer触发器调用JavaWeb接口
    Linux常用别名设置
    油猴+IDM不限速下载
    Nginx配置静态web项目
    消息中间件rabbitMQ
    springboot自定义starter
    Nginx配置微信小程序 文件验证
  • 原文地址:https://www.cnblogs.com/colder/p/12370175.html
Copyright © 2020-2023  润新知