我想使用AndroidKeyStore爲了保存一個RSA密鑰對只有三星設備與棒棒糖。 我知道默認的Android實現有一個錯誤(https://code.google.com/p/android/issues/detail?id=61989),但它似乎在三星棒棒糖設備上已修復。但我看到另外兩種奇怪的行爲。 的RSA密鑰對使用以下代碼創建的:AndroidKeyStore奇怪的行爲
KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(ctx)
.setAlias(ALIAS)
.setSubject(
new X500Principal(String.format("CN=%s, OU=%s", ALIAS,
ctx.getPackageName())))
.setSerialNumber(BigInteger.ONE).setStartDate(notBefore.getTime())
.setEndDate(notAfter.getTime()).build();
KeyPairGenerator kpGenerator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
kpGenerator.initialize(spec);
kpGenerator.generateKeyPair();
這是打開密鑰庫
KeyStore.PrivateKeyEntry keyEntry = (KeyStore.PrivateKeyEntry) ks.getEntry(ALIAS, null);
if (keyEntry != null) {
return (RSAPrivateKey) keyEntry.getPrivateKey();
}
問題N.1的代碼:在Android仿真器和一個的CyanogenMod 12.1設備密鑰存儲上在設備引導時解鎖,即使用戶沒有插入解鎖密碼 - 密碼 - 模式,我的測試應用程序可以訪問密鑰庫。在三星設備上,密鑰庫被鎖定,直到用戶第一次關閉鍵盤鎖。密鑰必須使用源自PIN或密碼的AES密鑰進行加密,且無需用戶交互,密鑰庫必須被鎖定
問題n.2:在所有設備上,即使未啓用安全鎖定屏幕,也可以插入密鑰對,而沒有任何警告,如操作系統的「您必須配置屏幕鎖定方法」。如上所述,密鑰必須加密,沒有屏幕鎖定,可能無法完成。
我的代碼有什麼問題?
什麼設備是「所有設備」(設備和操作系統版本)? Samsung設備是否啓用了KNOX? – Robert
「所有設備」的意思是所有三星設備與棒棒糖+一些三星與KK + LG與棒棒糖+模擬器與棒棒糖。諾克斯從未啓用 – Sarbyn