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应用程序中存储/使用机密密钥的可能性.我发现Nikolay Elenkov的博客对这个主题非常有帮助,我学到了很多关于Android密钥库和一些基于硬件的实现的知识.
我仍然对安全性和用户体验方面有一些疑问.
根据我的理解,在这种配置中,从用户密码(加上盐以防止彩虹表攻击)导出(使用PBKDF2)主密钥并用于加密秘密.据我所知,密码是用于锁定屏幕的密码.
在非root用户手机上,只有用户'keystore'能够读/写加密文件,每当应用程序想要访问文件时,都必须调用keystore守护进程,该守护进程检查其UID是否有权访问该文件(授权存储在sqlite数据库中).
但仍有一些我无法弄清楚的细节:
至于基于硬件的实现,SoC制造商似乎提供符合[Global Platform TEE][2](可信执行环境)的嵌入式受信任应用程序和API的解决方案,使Google能够提供其密钥库的硬件支持实现.因此,可以在TEE中存储密钥,在TEE内部请求创建RSA密钥对,并使用存储在TEE内的密钥来签名或检查数据.这样,人们就可以使用密钥进行基本的加密操作,而无需离开TEE.
如果我做对了,那么Google密钥库守护程序使用与软件实现中相同的机制来提供对这些密钥的访问控制.唯一的区别是使用了对存储在TEE中的密钥的引用而不是加密密钥本身.
如果之前说明的所有内容都是正确的,我想在root用户手机上可以修改权限数据库,以便具有任意UID的应用程序可以使用存储在TEE中的任何密钥签署数据.我对吗 ?
谢谢你的时间!
我想将秘密数据存储在我的应用程序的私钥库中.
但是,当我正在编写代码来执行此操作时,Android Studio警告说KeyPairGeneratorSpec.Builder(context)需要API级别18,而我的目标是14.:-(
如何在Android API级别14到17的应用程序中存储秘密数据?
这发生在 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 对话框之外的其他地方被覆盖?
我下载了Telegram的新版本.运行时,此错误显示:
Keystore file D\Telegram-master\TMessagesProj\config\release.keystore not found for signing config 'debug'.
Run Code Online (Sandbox Code Playgroud)
如何解决?
我使用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.
任何示例代码都会有很大帮助.
我的应用程序仅针对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) 我将 AES 解密密钥存储在 AndroidKeyStore 中以解密来自 SQLiteDB 的数据。不幸的是,有时我很少收到此错误(任何 android 设备和任何 API)。
我想知道这个错误到底是什么意思。
javax.crypto.BadPaddingException: error:1e000065:Cipher functions:OPENSSL_internal:BAD_DECRYPT.
我在哪里可以找到这些清单error:*?
我正在尝试创建应用程序链接,但应用程序链接助手在生成 assetlinks.json 时不断在步骤 3(关联网站)中抛出以下错误。
尝试获取密钥库文件的 sha-256 指纹时发生错误。请确保您的密钥库文件正确。
我已经尝试了这两个选项,但出现了相同的错误:
我错过了什么吗?我在 Android Studio Arctic Fox | 2020.3.1 Patch 3 有没有办法在不使用App links Assistant的情况下创建JSON文件?
我是 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) android-keystore ×10
android ×8
keystore ×3
gradle ×2
aes ×1
applinks ×1
encryption ×1
flutter ×1
java ×1
rsa ×1
secret-key ×1
security ×1
telegram ×1