标签: android-keystore

如何创建具有无限有效性的Android密钥库RSA密钥?

以下是Google建议创建Android密钥库的方法:

keytool -genkey -v -keystore my-release-key.keystore -alias alias_name \
  -keyalg RSA -keysize 2048 -validity 10000
Run Code Online (Sandbox Code Playgroud)

虽然10000天似乎是永恒的,但27年可能比你想象的要快,并且RSA可能仍在使用中.
如果调整命令行参数现在有0.01%的机会在未来节省我的市场份额,我愿意这样做.

问题:如何尽可能长时间地建立这个有效期?

android rsa keystore android-keystore

13
推荐指数
2
解决办法
2万
查看次数

使用软件/硬件支持的Android Keystore以及可能的安全性/可用性缺陷

我目前正在研究在Android应用程序中存储/使用机密密钥的可能性.我发现Nikolay Elenkov的博客对这个主题非常有帮助,我学到了很多关于Android密钥库和一些基于硬件的实现的知识.

我仍然对安全性和用户体验方面有一些疑问.

软件密钥库

根据我的理解,在这种配置中,从用户密码(加上盐以防止彩虹表攻击)导出(使用PBKDF2)主密钥并用于加密秘密.据我所知,密码是用于锁定屏幕的密码.

在非root用户手机上,只有用户'keystore'能够读/写加密文件,每当应用程序想要访问文件时,都必须调用keystore守护进程,该守护进程检查其UID是否有权访问该文件(授权存储在sqlite数据库中).

但仍有一些我无法弄清楚的细节:

  • 使用密钥库是否强制使用受密码保护的锁定屏幕?
  • 每次需要访问加密密钥时,用户是否必须输入他/她的密码?
  • 鉴于它是一种纯软件机制,我认为只要密钥操作用于加密操作,密钥总是会在RAM中解密,对吧?

基于硬件的密钥库

至于基于硬件的实现,SoC制造商似乎提供符合[Global Platform TEE][2](可信执行环境)的嵌入式受信任应用程序和API的解决方案,使Google能够提供其密钥库的硬件支持实现.因此,可以在TEE中存储密钥,在TEE内部请求创建RSA密钥对,并使用存储在TEE内的密钥来签名或检查数据.这样,人们就可以使用密钥进行基本的加密操作,而无需离开TEE.

如果我做对了,那么Google密钥库守护程序使用与软件实现中相同的机制来提供对这些密钥的访问控制.唯一的区别是使用了对存储在TEE中的密钥的引用而不是加密密钥本身.

如果之前说明的所有内容都是正确的,我想在root用户手机上可以修改权限数据库,以便具有任意UID的应用程序可以使用存储在TEE中的任何密钥签署数据.我对吗 ?

谢谢你的时间!

security android android-keystore

12
推荐指数
1
解决办法
4978
查看次数

使用KeyPairGeneratorSpec的Android API级别<18?

我想将秘密数据存储在我的应用程序的私钥库中.

但是,当我正在编写代码来执行此操作时,Android Studio警告说KeyPairGeneratorSpec.Builder(context)需要API级别18,而我的目标是14.:-(

如何在Android API级别14到17的应用程序中存储秘密数据?

android android-keystore android-security

12
推荐指数
1
解决办法
2777
查看次数

无法解密安全内容条目:java.io.IOException:getSecretKey 失败:密码不是 ASCII

这发生在 Android Studio Beta 中。我记得曾经在其他版本中工作。现在,我要么在每次生成 apk 时生成一个新密钥,要么由于此错误而手动输入我的密码。我的密码是 ASCII。简单字符 A 到 Z 和 a 到 z。它需要钥匙就好了,但是下次我尝试构建时,这就是我得到的。

在输出中挖掘一个错误,我看到了这一点:

任务“:app:packageRelease”执行失败。

执行 com.android.build.gradle.tasks.PackageAndroidArtifact$IncrementalSplitterRunnable com.android.ide.common.signing.KeytoolException 时发生故障:无法从存储“C:\AndroidRelated\KeyStoreForCompanyA\KeyStore.jks”读取密钥 key0:密钥库密码不正确

我让它记住了我从构建到构建的密码。

请注意,如果我手动将其更改为我认为正确的内容,那么它将构建。可能只是 Android Studio Beta 中的一个错误,或者它是否在 Generate Signed Bundle 或 SDK 对话框之外的其他地方被覆盖?

android gradle android-keystore

12
推荐指数
3
解决办法
5580
查看次数

未找到用于签名配置'debug'的密钥库文件D\Telegram-master\TMessagesProj\config\release.keystore

我下载了Telegram的新版本.运行时,此错误显示:

Keystore file D\Telegram-master\TMessagesProj\config\release.keystore not found for signing config 'debug'.
Run Code Online (Sandbox Code Playgroud)

如何解决?

android android-keystore telegram

11
推荐指数
2
解决办法
1万
查看次数

Android:在KeyStore中存储SecretKey

我使用SecretKey加密应用程序中的敏感数据.目前我将我的SecretKey以Base64编码格式存储在DB或SharedPrefs中,这不是在根电话上存储Secret的安全位置.因此,我想将我的SecretKey移动到Android KeyStore.我面临的问题是当我尝试使用Google的示例代码时,它需要一个PrivateKey而不是SecretKey.我无法找到一种方法将我的SecretKey存储在KeyStore中并获取它以供以后使用.我试过这个:

private static void writeSecretKeyToKeystore(SecretKey secretKey, Context context) {
KeyStore keyStore = null;
try {
  keyStore = KeyStore.getInstance("AndroidKeyStore");
  keyStore.load(null);
  KeyStore.SecretKeyEntry secretKeyEntry = new KeyStore.SecretKeyEntry(secretKey);
  keyStore.setKeyEntry("Key", secretKeyEntry.getSecretKey().getEncoded(), null);
} catch (KeyStoreException e) {
  e.printStackTrace();
} catch (CertificateException e) {
  e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
  e.printStackTrace();
} catch (IOException e) {
  e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

当我尝试上面的代码时,它会抛出异常Operation not supported because encoding is unknown.

任何示例代码都会有很大帮助.

encryption android keystore secret-key android-keystore

11
推荐指数
1
解决办法
6948
查看次数

AndroidKeyStore KeyPairGenerator在少量设备上崩溃

我的应用程序仅针对Android 6.0+.在我的应用程序中,我AndroidKeyStore使用以下内容生成RSA密钥:

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
kpg.initialize(new KeyGenParameterSpec.Builder(
    "myKey", KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
    .setCertificateSubject(new X500Principal("CN=myKey"))
    .setDigests("SHA-1")
    .setEncryptionPaddings("OAEPPadding")
    .build());

KeyPair kp = kpg.generateKeyPair();
Run Code Online (Sandbox Code Playgroud)

这适用于我们测试过的20多种设备以及近100%的用户.

但是,有少量用户kpg.generateKeyPair()使用以下内容执行该应用程序时崩溃:

java.security.ProviderException: Failed to load generated key pair from keystore
at android.security.keystore.AndroidKeyStoreKeyPairGeneratorSpi.loadKeystoreKeyPair(AndroidKeyStoreKeyPairGeneratorSpi.java:518)
at android.security.keystore.AndroidKeyStoreKeyPairGeneratorSpi.generateKeyPair(AndroidKeyStoreKeyPairGeneratorSpi.java:470)
at java.security.KeyPairGenerator$Delegate.generateKeyPair(KeyPairGenerator.java:699)
at md5fb78b69c5ddbc157f4db38fd738139a6.MainApplication.n_onCreate(Native Method)
at md5fb78b69c5ddbc157f4db38fd738139a6.MainApplication.onCreate(MainApplication.java:34)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1025)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5448)
at android.app.ActivityThread.-wrap2(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1564)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6186)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
Caused by: java.security.UnrecoverableKeyException: Failed to obtain X.509 form of public key …
Run Code Online (Sandbox Code Playgroud)

java android keystore android-keystore

11
推荐指数
1
解决办法
1744
查看次数

javax.crypto.BadPaddingException:错误:1e000065:密码函数:OPENSSL_internal:BAD_DECRYPT

我将 AES 解密密钥存储在 AndroidKeyStore 中以解密来自 SQLiteDB 的数据。不幸的是,有时我很少收到此错误(任何 android 设备和任何 API)。

我想知道这个错误到底是什么意思。 javax.crypto.BadPaddingException: error:1e000065:Cipher functions:OPENSSL_internal:BAD_DECRYPT.

我在哪里可以找到这些清单error:*

aes android-keystore java-security-manager

11
推荐指数
1
解决办法
4397
查看次数

Android:尝试获取密钥库文件的 sha-256 指纹时发生错误

我正在尝试创建应用程序链接,但应用程序链接助手在生成 assetlinks.json 时不断在步骤 3(关联网站)中抛出以下错误。

尝试获取密钥库文件的 sha-256 指纹时发生错误。请确保您的密钥库文件正确。

在此输入图像描述

我已经尝试了这两个选项,但出现了相同的错误:

  1. 签名配置 - 调试
  2. 密钥库文件 - 从“构建”>“生成签名的 Bundle/Apk”>“Apk”>“新建”创建新的密钥库

我错过了什么吗?我在 Android Studio Arctic Fox | 2020.3.1 Patch 3 有没有办法在不使用App links Assistant的情况下创建JSON文件?

android android-keystore applinks android-app-signing

11
推荐指数
1
解决办法
6971
查看次数

Flutter Android Studio 错误:无法获取未知属性“keystoreProperty”

我是 flutter 新手,我正在尝试运行我的第一个项目,而不对演示应用程序的源代码进行任何更改。但我不断收到以下错误:

Launching lib\main.dart on SM A115F in release mode...
Running Gradle task 'assembleRelease'...

FAILURE: Build failed with an exception.

* Where:
Build file 'C:\Users\METRO\StudioProjects\helloworld\android\app\build.gradle' line: ??

* What went wrong:
A problem occurred evaluating project ':app'.
> Could not get unknown property 'keystoreProperties' for SigningConfig_Decorated{name=release, storeFile=null, storePassword=null, keyAlias=null, keyPassword=null, storeType=pkcs12, v1SigningEnabled=true, v2SigningEnabled=true, enableV1Signing=null, enableV2Signing=null, enableV3Signing=null, enableV4Signing=null} of type com.android.build.gradle.internal.dsl.SigningConfig.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get …
Run Code Online (Sandbox Code Playgroud)

gradle android-keystore android-studio flutter

11
推荐指数
2
解决办法
2万
查看次数