【问题标题】:Questions about RSA padding algorithm关于RSA填充算法的问题
【发布时间】:2013-05-14 07:19:49
【问题描述】:

所以我有这个 JavaScript 加密库,我将用于 chrome 扩展,在 RSA 中加密文本字符串,然后将其发送到我的服务器,但是我注意到它使用 PKCS#1(类型 2)填充来填充数据.

我只是想知道这种填充算法对于 RSA 加密文本和通过未加密的 HTTP 连接发送是否足够安全。

这是执行填充的函数:

    // PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint
    function pkcs1pad2(s,n) {
      if(n < s.length + 11) {
        alert("Message too long for RSA");
        return null;
      }
      var ba = new Array();
      var i = s.length - 1;
      while(i >= 0 && n > 0) {ba[--n] = s.charCodeAt(i--);};
      ba[--n] = 0;
      var rng = new SecureRandom();
      var x = new Array();
      while(n > 2) { // random non-zero pad
        x[0] = 0;
        while(x[0] == 0) rng.nextBytes(x);
        ba[--n] = x[0];
      }
      ba[--n] = 2;
      ba[--n] = 0;
      return new BigInteger(ba);
    } 

此算法的安全性如何?只要密钥很大(在这种情况下为 4096 位),RSA 中使用的填充是否重要?

此填充是否被视为 PKCS#1 1.5?

谢谢。

【问题讨论】:

    标签: javascript security encryption rsa


    【解决方案1】:

    是的,它看起来像 PKCS#1 填充。你想听到什么关于它的“安全”?是的,它是安全的。而且它仍然在 PKI 中使用。但是,如果您怀疑安全性,您可以使用 OAEP。但是,大多数情况下问题不在算法方面。

    【讨论】:

    • 感谢您的回复。我只是想知道这个填充是否有任何弱点,它会让攻击者很容易以某种方式解密它,我知道这完全取决于攻击者的动机和拦截数据的人。我也知道它被拦截的几率可能很小,而且我也知道 RSA 使用 4096 位密钥是安全的。我只是不确定 PKCS#1 是否有弱点。如果 OAEP 在 Javascript 中可用,我会使用它,但 PKCS#1 可能会很好地满足我的需要。像 facebook 这样的地方使用什么样的填充来交换密钥?
    • Facebook 不使用任何特定的密钥交换算法,它的安全性基于 TLS/SSL,而 TLS/SSL 使用 Diffie-Hellman 密钥交换。
    • 如果你想要 JS 中的 OAEP,你可以使用 forge:github.com/digitalbazaar/forge#rsa
    猜你喜欢
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 2011-05-12
    相关资源
    最近更新 更多