AndroidKeyStore密钥存储
KeyStore简介
利⽤ Android KeyStore System,您可以在容器中存储加密密钥,从⽽提⾼从设备中提取密钥的难度。在密钥进⼊密钥库后,可以将它们⽤于加密操作,⽽密钥材料仍不可导出。此外,它提供了密钥使⽤的时间和⽅式限制措施,例如要求进⾏⽤户⾝份验证才能使⽤密钥,或者限制为只能在某些加密模式中使⽤。
密钥库系统由 KeyChain API 以及在 Android 4.3(API 级别 18)中引⼊的 Android 密钥库提供程序功能使⽤。本⽂说明了何时以及如何使⽤ Android 密钥库提供程序。
应⽤场景
1、 存储密匙:Android提供的这个KeyStore最⼤的作⽤就是不需要开发者去维护这个密匙的存储问题,相⽐起存储在⽤户的数据空间或者是外部存储器都更加安全。注意的是这个密匙随着⽤户清除数据或者卸载应⽤都会被清除掉。
2、得益于Android独⽴的⼀套密匙库系统,可以提⾼安全性
安全功能
Android 密钥库系统可以保护密钥材料免遭未经授权的使⽤。⾸先,Android 密钥库可以防⽌从应⽤进程和 Android 设备中整体提取密钥材料,从⽽避免了在 Android 设备之外以未经授权的⽅式使⽤密钥材料。其次,Android 密钥库可以让应⽤指定密钥的授权使⽤⽅式,并在应⽤进程之外强制实施这些限制,从⽽避免了在 Android 设备上以未经授权的⽅式使⽤密钥材料。
提取防范
Android 密钥库密钥使⽤两项安全措施来避免密钥材料被提取:
密钥材料永不进⼊应⽤进程。通过 Android 密钥库密钥执⾏加密操作时,应⽤会将待签署或验证的明⽂、密⽂和消息馈送到执⾏加密操作的系统进程。如果应⽤进程受攻击,攻击者也许能使⽤应⽤密钥,但⽆法提取密钥材料(例如,在 Android 设备以外使⽤)。
您可以将密钥材料绑定⾄ Android 设备的安全硬件,例如可信执⾏环境 (TEE) 和安全元素 (SE)。为密钥启⽤此功能时,其密钥材料永远不会暴露于安全硬件之外。如果 Android 操作系统受到攻击或者攻击者可以读取设备内部存储空间,攻击者也许能在 Android 设备上使⽤应⽤的Android 密钥库,但⽆法从设备上提取这些数据。只有设备的安全硬件⽀持密钥算法、区块模式、填充⽅案和密钥有权使⽤的摘要的特定组合时,才可启⽤此功能。要检查是否为密钥启⽤了此功能,请获取密钥的 KeyInfo 并检查 KeyInfo.isInsideSecurityHardware() 的返回值。
密钥使⽤授权
为了避免在 Android 设备上以未经授权的⽅式使⽤密钥材料,在⽣成或导⼊密钥时 Android 密钥库会让应⽤指定密钥的授权使⽤⽅式。⼀旦⽣成或导⼊密钥,其授权将⽆法更改。然后,每次使⽤密钥时,都会由 Android 密钥库强制执⾏授权。这是⼀项⾼级安全功能,通常仅⽤于有以下要求的情形:在⽣成/导⼊密钥后(⽽不是之前或当中),应⽤进程受到攻击不会导致密钥以未经授权的⽅式使⽤。
⽀持的密钥使⽤授权可归为以下⼏个类别:
加密:授权密钥算法、运算或⽬的(加密、解密、签署、验证)、填充⽅案、区块模式以及可与密钥搭配使⽤的摘要;
时间有效性间隔:密钥获得使⽤授权的时间间隔;
⽤户⾝份验证:密钥只能在⽤户最近进⾏⾝份验证时使⽤。请参阅要求进⾏⽤户⾝份验证才能使⽤密钥。
作为⼀项额外的安全措施,对于密钥材料位于安全硬件内部的密钥(请参阅 KeyInfo.isInsideSecurityHardware()),某些密钥使⽤授权可能由安全硬件实施,具体取决于 Android 设备。加密和⽤户⾝份验证授权可能由安全硬件实施。由于安全硬件⼀般不具备独⽴的安全实时时钟,
时间有效性间隔授权不可能由其实施。
安卓intent用法您可以使⽤ KeyInfo.isUserAuthenticationRequirementEnforcedBySecureHardware() 查询密钥的⽤户⾝份验证授权是否由安全硬件实
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论