【问题标题】:PBEWITHSHA256AND256BITAES-CBC-BC on Android : number of iterations for keygeneration and cipher?Android 上的 PBEWITHSHA256AND256BITAES-CBC-BC:密钥生成和密码的迭代次数?
【发布时间】:2015-10-19 08:32:42
【问题描述】:

我将 PBEWITHSHA256AND256BITAES-CBC-BC 与 BouncyCastle 一起使用。

public static String algorithm = "PBEWITHSHA256AND256BITAES-CBC-BC";

我已经用这个方法生成秘钥了:

private void generateSK(char[] passPhrase, byte[] salt) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidAlgorithmParameterException, InvalidKeyException {
    pbeParamSpecKey = new PBEParameterSpec(salt,1000);
    PBEKeySpec pbeKeySpec = new PBEKeySpec(passPhrase);
    SecretKeyFactory secretKeyFactory;

    secretKeyFactory = SecretKeyFactory.getInstance(algorithm);
    secretKey = secretKeyFactory.generateSecret(pbeKeySpec);
}

然后生成一个 Cipher 对象(用于加密或解密):

protected Cipher getCipher(int mode) {
    try {
        Cipher cipher = Cipher.getInstance(algorithm);
        cipher.init(mode, secretKey, pbeParamSpecKey);

        return cipher;
    }catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

pbeParamSpecKey 需要相同吗?生成密钥的迭代次数和生成 Cipher 对象的迭代次数有多少“重要”(就安全性而言)?它们可以不同吗?

【问题讨论】:

    标签: java android security aes pbkdf2


    【解决方案1】:

    pbeParamSpecKey 需要相同吗?生成密钥的迭代次数和生成 Cipher 对象的迭代次数有多“重要”(就安全性而言)?

    这是一个您需要自己回答的难题。一般的指导是,尽可能大而不让用户太烦,但现在 1000 次迭代有点低。

    接下来您需要做的是尝试在您的用户组可能拥有的不同设备上对您的应用程序进行基准测试。然后,您可以相应地进行微调。

    也许您可以稍微重新设计您的应用程序,以便在空闲阶段在后台进行密钥派生,因此可能需要更长的时间。但是,这可能会引入其他问题,例如保持派生密钥安全且不可泄漏。

    它们可以不同吗?

    AES 是一种对称分组密码,因此需要相同 密钥进行加密和解密。要生成 same 密钥,您需要为 PBKDF2 使用 same 密码、salt 和迭代次数。

    【讨论】:

    • 谢谢。我将在后台应用您对密钥生成的建议。还有一件事我不明白。当我初始化密码时,我同时传递了密钥(之前生成的)和 PBEKeySpec,但是你说它使用最后一个参数来生成密钥。使用已经生成的密钥初始化密码的代码应该如何?我简单地尝试过: cipher.init(mode, secretKey);但它每次也会生成一个 IV(如果我传递参数,IV 是由它们生成的)并且我会避免为每个加密数据存储另一个值(IV)。
    • 我没用过BouncyCastle,所以不知道你是否真的需要用pbeParamSpecKey初始化密码对象。也许您可以尝试只保留该调用的前两个参数,看看是否有任何变化。
    • 我使用 SecretKeySpec 完成了它,现在它可以按我的意愿工作了!我使用了很多迭代(100000)来生成密钥,然后 cipher.init 非常快。当然我会在后台做第一步!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2021-01-01
    • 2011-11-20
    • 2017-03-29
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多