Keychain
Keychain 是一种用于存储和管理私钥、证书以及敏感信息(如密码、API 密钥等)的安全容器。它常见于以下场景:
-
移动和桌面操作系统:
- macOS 和 iOS 提供内置的
Keychain Services,用于安全存储用户的凭证和密钥。 - Android 提供
Keystore,实现类似功能。
- macOS 和 iOS 提供内置的
-
功能:
- 存储私钥(Private Key)和证书(Certificate)。
- 提供加密和解密服务,而不暴露私钥。
- 保护敏感信息,防止未经授权的访问。
-
用途:
- 确保敏感信息只对授权应用程序或用户可用。
- 存储加密密钥或身份验证信息。
Certificate Chain(证书链)
Certificate Chain 是一个包含一系列证书的链条,用于验证目标证书(通常是一个服务器或用户证书)的可信度。
-
链的结构:
- 从目标证书(例如网站的 SSL/TLS 证书)开始。
- 包含一系列中间证书。
- 以可信的根证书(Root Certificate)结尾。
-
验证流程:
- 检查目标证书是否由可信的中间证书签发。
- 继续检查中间证书,直到找到受信任的根证书。
- 如果链中的所有证书都有效且根证书受信任,则目标证书被认为是可信的。
-
用途:
- 证书链确保数字证书的真实性,防止篡改或伪造。
- 常见于 HTTPS、TLS、代码签名和其他基于 PKI(公钥基础设施)的场景。
Certificate Chain 与 Keychain 的联系
-
证书链可以存储在 Keychain 中:
例如,系统的 Keychain 或 Android Keystore 通常存储用户的数字证书和其对应的私钥,其中包含证书链的一部分(目标证书和中间证书)。 -
互补关系:
Keychain是安全的存储工具,保护证书链中的私钥不被泄露。CertificateChain提供信任验证机制,确保目标证书和私钥的可信性。
KeyStore
Android Keystore 是 Android 平台提供的一种安全机制,用于生成、存储和管理加密密钥,确保敏感数据的安全性。主要有以下功能:
-
密钥存储:安全存储对称密钥(如 AES)、非对称密钥对(如 RSA、EC)、以及证书。
-
密钥保护:通过硬件(如 TEE 或 StrongBox)或软件层提供保护,密钥默认不可导出。
-
密钥管理:支持生成、存储、更新和删除密钥。
-
绑定设备:密钥与设备绑定,即使密钥被导出到其他设备也无法使用。
-
应用隔离:密钥与应用签名绑定,其他应用无法访问。
Android KeyStore 官方 可以从官方文档大致猜测,底层应该是通过控制Selinux权限控制不同的命名空间(有的Selinux域,会使用UID作为命名空间),这样就保证不同的应用在不同的命名空间,即达到应用隔离的目的。