Android 秘钥库系统

利用 Android 密钥库系统,您可以在容器中存储加密密钥,从而提高从设备中提取密钥的难度。在密钥进入密钥库后,可以将它们用于加密操作,而密钥材料仍不可导出。此外,它提供了密钥使用的时间和方式限制措施,例如要求进行用户身份验证才能使用密钥,或者限制为只能在某些加密模式中使用。

安全功能

Android 密钥库系统可以保护密钥材料免遭未经授权的使用。首先,Android 密钥库可以防止从应用进程和 Android 设备中整体提取密钥材料,从而避免了在 Android 设备之外以未经授权的方式使用密钥材料。其次,Android 密钥库可以让应用指定密钥的授权使用方式,并在应用进程之外强制实施这些限制,从而避免了在 Android 设备上以未经授权的方式使用密钥材料。

提取防范

Android 密钥库密钥使用两项安全措施来避免密钥材料被提取:

        ·密钥材料永不进入应用进程。通过 Android 密钥库密钥执行加密操作时,应用会将待签署或验证的明文、密文和消息馈送到执行加密操作的系统进程。如果应用进程受攻击,攻击者也许能使用应用密钥,但无法提取密钥材料(例如,在 Android 设备以外使用)。

         ·您可以将密钥材料绑定至 Android 设备的安全硬件,例如可信执行环境 (TEE) 和安全元素 (SE)。为密钥启用此功能时,其密钥材料永远不会暴露于安全硬件之外。如果 Android 操作系统受到攻击或者攻击者可以读取设备内部存储空间,攻击者也许能在 Android 设备上使用应用的 Android 密钥库,但无法从设备上提取这些数据。只有设备的安全硬件支持密钥算法、区块模式、填充方案和密钥有权使用的摘要的特定组合时,才可启用此功能。要检查是否为密钥启用了此功能,请获取密钥的 KeyInfo 并检查 KeyInfo.isInsideSecurityHardware() 的返回值。

秘钥使用授权

为了避免在 Android 设备上以未经授权的方式使用密钥材料,在生成或导入密钥时 Android 密钥库会让应用指定密钥的授权使用方式。一旦生成或导入密钥,其授权将无法更改。然后,每次使用密钥时,都会由 Android 密钥库强制执行授权。这是一项高级安全功能,通常仅用于有以下要求的情形:在生成/导入密钥后(而不是之前或当中),应用进程受到攻击不会导致密钥以未经授权的方式使用。

支持的密钥使用授权可归为以下几个类别:

             ·加密:授权密钥算法、运算或目的(加密、解密、签署、验证)、填充方案、区块模式以及可与密钥搭配使用的摘要;

             ·时间有效性间隔:密钥获得使用授权的时间间隔;

             ·用户身份验证:密钥只能在用户最近进行身份验证时使用。

作为一项额外的安全措施,对于密钥材料位于安全硬件内部的密钥。某些密钥使用授权可能由安全硬件实施,具体取决于 Android 设备。加密和用户身份验证授权可能由安全硬件实施。由于安全硬件一般不具备独立的安全实时时钟,时间有效性间隔授权不可能由其实施。

硬件安全区检测

private boolean isInsideSecurityHardware(Stringalias){        try {KeyStoreks =KeyStore.getInstance("AndroidKeyStore");            ks.load(null);PrivateKeykey = (PrivateKey) ks.getKey(alias,null);KeyFactoryfactory =KeyFactory.getInstance(key.getAlgorithm(),"AndroidKeyStore");KeyInfokeyInfo = factory.getKeySpec(key,KeyInfo.class);if(keyInfo.isInsideSecureHardware()) {returntrue;            }        }catch (Exceptione){returnfalse;        }returnfalse;    }

检查秘钥材料是否存在

private boolean checkKeyStore(Stringalias) {        try {KeyStoreks =KeyStore.getInstance("AndroidKeyStore");            ks.load(null);KeyStore.Entryentry = ks.getEntry(alias, null);if(!(entry instanceofKeyStore.PrivateKeyEntry)) {Log.w(TAG,"Not an instance of a PrivateKeyEntry");returnfalse;            }        }catch (Exceptione) {returnfalse;        }return tr}

Google 提供的API在23以上是比较丰富的,android安全层级上了一个大台阶。小伙伴们可以研究下,物联网下安全是一个绕不过去的门槛。

原文地址 

更多相关文章

  1. 如何通过PC端连接Android设备进行adb调试
  2. Android Training - 支持不同的设备
  3. Android - 支持不同的设备

随机推荐

  1. 连接相关标签的最佳数据库设计
  2. 对所有表执行查询并在新表中填入数据
  3. MySql sqlstate代码大全(转载)
  4. mysql(一)工作原理&引擎
  5. mysql字符集设置
  6. mysql还原数据库
  7. Linux下数据库MYSQL忘记登录密码及更换密
  8. CentOS7 安装LAMP mysql8 php7.2
  9. MYSQL中动态行数据转列数据
  10. PHP入门书《PHP和MySQL Web开发》是第三