为什么3是Android platform.key接受的唯一公开指数?

时间:2011-12-21 10:44:27

标签: android rsa

我正在建立一个Android系统。

我有一个现有密钥对,公共指数为F4(65537)。

我尝试将它用作platform.key(我有pk8和x509)。

在构建过程中,在我的密钥对上调用DumpPublicKey。

此时,密钥被拒绝,因为公共指数不是3.(我检查了DumpPublicKey的代码,它正是它的作用:与3比较,否则拒绝)

这是堆栈跟踪:

java.lang.Exception: Public exponent should be 3 but is 65537.
    at com.android.dumpkey.DumpPublicKey.check(DumpPublicKey.java:75)
    at com.android.dumpkey.DumpPublicKey.main(DumpPublicKey.java:151)

这是否意味着我必须使用

生成新密钥对
openssl genrsa -3 ...

还是有什么办法可以继续使用我的钥匙?

另外,为什么公共指数是3而不是F4是如此重要?

提前致谢

1 个答案:

答案 0 :(得分:1)

看起来像com.android.dumpkey.DumpPublicKey中的一个错误。 将RSA密钥的公共指数限制为3只是非常愚蠢。 这样做只会使实现错误更有可能产生灾难性后果, 如果底层库未正确实现。

据我所知,Android使用的是Bouncycastle,它是一个加密库 没有仔细实施。

使用标准指数2 ^ 16 + 1,非常合理,避免了很多潜力 小指数的问题。