如何在 Android Native Code 中使用 Keystore?

Pho*_*qui 5 java-native-interface android keystore pycrypto

我需要加密一些由 C++ 编写的 android 本机服务创建的文件。我必须使用密钥库,但我不知道如何使用。有任何图书馆或文件吗?

Mic*_*zuk 5

我知道该线程很旧,但也许将来会对某人有所帮助。下面的提示是指 Android Keystore v3 和 v4(分别是 Oreo 和 Pie)。

基本上,HAL密钥库(如所描述的在这里)被包裹在密钥库服务。服务 API 模仿 IKeymasterDevice.hal 中描述的接口。您可以使用密钥的字符串别名代替 blob(例如“mySecretKey”)。该服务将密钥块(原始密钥材料 + 密钥参数)存储到文件系统。默认位置是 /data/misc/keystore/user_0/<uid>_<key_alias>。

Keystore 服务也是检查请求进程是否允许使用密钥的层(基于进程 uid)。

与密钥库服务的通信是通过绑定器接口 (IPC) 完成的。您可能想在此处阅读更多相关信息。

AOSP在此处包含参考客户端实现。

示例用法可以在此处的股票 CLI 中找到

AOSP 带有基于软件的密钥库实现,可在此处找到。默认情况下,AOSP 版本上的密钥块未加密。

请注意,库存 keystore_cli_v2 不提供对密钥导入的支持。如果您计划离线加密数据(例如 pycrypto),则必须对其进行扩展。如果您打算这样做,请记住 keystore_client_impl.cpp 链接到 libkeystore_binder.so 而不是 keystore_cli_v2。

对于非对称密钥密码,您可以使用 API 导出公钥组件。