使用AndroidKeyStore生成EC密钥对<;Api23
无法使用AndroidKeystore提供程序1使用AndroidKeyStore生成EC密钥对<;Api23,android,android-keystore,android-security,Android,Android Keystore,Android Security,无法使用AndroidKeystore提供程序1
val ecGenParameterSpec = ECGenParameterSpec("P-256")
val spec = KeyPairGeneratorSpec.Builder(context)
.setAlias(ALIAS)
.setSubject(X500Principal("CN=example"))
.setSerialNumber(BigInteger.ONE)
.setKeyType("EC")
.setAlgorithmParameterSpec(ecGenParameterSpec)
.setStartDate(start)
.setEndDate(end)
.build()
val keyGen = KeyPairGenerator.getInstance("RSA", androidKeyStoreProvider)
keyGen.initialize(spec, SecureRandom())
keyGen.generateKeyPair()
但是,我不断得到java.lang.UnsupportedOperationException:无法提取私钥值
在使用AndroidKeyStore生成EC密钥对的过程中,我是否做错了什么
或者我对KeyPairGenerator
的官方解释有误吗
下面是我试用过的其中一个设备(oneplus)的stacktrace。
我已经在api 21和22上的多个设备上进行了尝试
设备-华硕zenfone2(api21)、nexus 4(api22)、oneplus 1(api22)、redmi note2(api21)
更新
发现问题后,我在应用程序中使用Google
Security.insertProviderAt(Conscrypt.newProvider(), 1)
不知何故,当我在应用程序中使用Conscrypt提供程序时,AndroidKeyStore无法生成EC密钥对。
取消Conscrypt的使用似乎可以解决这个问题。我建议在棉花糖生产前(API级别23)的设备上避免使用AndroidKeyStore。在棉花糖出现之前,安卓钥匙库非常不可靠。有关详细信息,请参阅。从棉花糖开始就很好。。但是不要使用setEncryptionRequired(true)
,这样做没有任何用处,并且会导致一些问题
(我是拥有AndroidKeyStore的谷歌工程师。)我建议在棉花糖(API级别23)之前的设备上避免使用AndroidKeyStore。在棉花糖出现之前,安卓钥匙库非常不可靠。有关详细信息,请参阅。从棉花糖开始就很好。。但是不要使用setEncryptionRequired(true)
,这样做没有任何用处,并且会导致一些问题
(我是拥有AndroidKeyStore的谷歌工程师。)明白了,我又问了一个问题,但是TL:DR,我如何判断密钥是否在硬件(tee/se)中?明白了,我又问了一个问题,但是TL:DR,我如何判断密钥是否在硬件(tee/se)中?
Security.insertProviderAt(Conscrypt.newProvider(), 1)