如何为KeyPair生成生成确定性SecureRandom?

时间:2018-06-14 14:30:27

标签: java android cryptography

我需要根据用户输入的密码生成KeyPair。

我想在Java(Android)中实现如下:

  1. 用户输入密码
  2. 密钥派生函数(例如,PBKDF2)用于生成种子
  3. Seed用于PseudoRandomNumberGenerator(PRNG),它基于种子生成确定性值
  4. KeyPairGenerator使用PseudoRandomNumberGenerator生成非对称KeyPair。
  5. 另见https://crypto.stackexchange.com/a/1665

    我的问题在第3步和第4步。要使用随机源初始化KeyPairGenerator,请使用SecureRandom。有可能seed SecureRandom,但这不会使SecureRandom可预测哪种是预期的行为。

    我找到了不同的建议来解决这个问题:

    1. 使用" SHA1PRNG"作为SecureRandom的算法
      • 在较旧的Android设备上,SHA1PRNG的实现被破坏,只使用setSeed中的种子。
      • - >不同平台的实现方式不同,因此无法使用。
    2. Wrapper围绕着不同的PRNG,它扩展了SecureRandom
      1. 扩展SecureRandom
      2. 覆盖所有方法并将其指向不同的PRNG。
        • 我可以使用PRNG实现吗?
        • 我看了一下org.spongycastle.crypto.prng包。是吗?可以使用SP800SecureRandomBuilder构建确定性SecureRandom吗?
    3. 一般来说,在Android上实现KeyPair生成的确定性SecureRandom的最佳方法是什么?

0 个答案:

没有答案