当前位置: 首页 > 面试题库 >

如何安全地在Android中存储加密密钥?

明利
2023-03-14
问题内容

我想知道如何在Android中安全存储 加密密钥 吗?保护加密和秘密密钥的最佳方案是什么?


问题答案:

根据您的评论,您需要使用适用于当前Android版本和旧Android版本的本地密钥对数据进行加密

Android
Keystore
旨在生成和保护您的密钥。但是它不适用于18级以下的API级别,并且在API
23级之前有一些限制。

您将需要一个随机对称加密密钥,例如AES。AES密钥用于加密和解密您的数据。我将总结您的选项,以根据Android API级别安全地生成和存储它。

  • API级别 <18:不存在Android Keystore。向用户请求密码,从该密码派生一个加密密钥,缺点是您需要在应用程序启动时提示输入密码。加密密钥未存储在设备中。每次启动应用程序时使用密码计算一次

  • API级别 > = 18 <23:Android密钥库不提供AES支持。使用默认的密码提供程序(不使用AndroidKeystore)生成随机AES密钥。在Android Keystore中生成一个RSA密钥对,并使用RSA公钥对AES密钥进行加密。将加密的AES密钥存储到Android SharedPreferences中。应用程序启动时,使用RSA私钥解密AES密钥

  • API级别 > = 23:具有AES支持的Android Keystore。使用Android密钥库生成随机AES密钥。您可以直接使用它。

加密可以使用AES/CBC/PKCS7Padding算法。它还需要一个随机初始化向量(IV)来加密您的数据,但是它可以是公共的。

备择方案:

  • API级别 > 14:Android密钥链:KeyChain是系统范围的凭证存储。您可以安装带有可以由应用程序使用的私钥的证书。使用预安装的密钥来加密/解密您的AES密钥,如上面第二种情况所示。

  • 外部令牌 :受保护的密钥未存储在设备中。您可以使用包含私钥/公钥对的外部令牌,该令牌允许您加密AES密钥。可以使用蓝牙或NFC访问令牌



 类似资料:
  • 我在工作中被要求保护保存在Mysql数据库中的敏感数据。这个数据库包含几个表,其中一个表中的关键数据只能使用Django中的API来访问。对于这个API,只有一定数量的人可以访问它,因此他们将是唯一能够访问这个表中的数据的人。 因此,目前的问题是每个人都可以访问数据库和该表,因此我们决定使用AES在AES_ENCRYPT()和AES_DECRYPT()函数的帮助下加密该表中的所有数据(根据http

  • 问题内容: 我有一个Java属性对象,其中包含Web服务的身份验证信息。我需要对这些数据进行加密,但是我不知道该将加密密钥存储在何处才能保持安全。 关于加密和以安全方式检索数据的最佳实践是什么? 使用密钥库有什么好处吗? 问题答案: 您的问题很普遍。在Linux中,用户密码存储在纯文本文件中。尽管只存储了密码哈希,但是如果攻击者可以访问该文件,则使用脱机词典攻击可以很快发现一些密码。在这种情况下,

  • 我正在使用Xamarin android编写一个银行支付应用程序,该应用程序存储用户卡信息。我正在寻找一种安全可靠的存储数据的方法。我唯一发现的是下面的链接,该链接存储的帐户信息对我来说是无用的: https://developer.xamarin.com/recipes/cross-platform/xamarin-forms/general/store-credentials/

  • 在一个应用程序中,我使用Android密钥库。我已经为整个密钥库和每个密码条目设置了密码。因为这些密码是字符串,所以它们存储在代码的字符串成员中。 显然,如果我想发布应用程序,这是不安全的,因为潜在的攻击者可以反编译apk并获取密码,因为它是硬编码在应用程序中的。 我的问题是: 在上面的场景中:攻击者是否能够读取我的密钥库文件,或者(在无根手机上)该文件是否只能由我的应用程序访问,因此仅密码是不够

  • 在flutter应用程序中存储key.jks文件对于flutter应用程序发布是安全的吗? 存储库密码、keyPassword、keyAlias 我的key.properties文件:

  • 我将使用oAuth从谷歌获取邮件和联系人。我不想每次都要求用户登录以获取访问令牌和密码。据我所知,我需要将它们与应用程序一起存储在数据库或中。但我有点担心安全问题。我了解到,你可以加密和解密令牌,但攻击者只需反编译你的apk和类并获取加密密钥就很容易了 在Android中安全存储这些代币的最佳方法是什么?