我该如何在Android Native Code中使用密钥库?

5

我需要加密一些由C++编写的Android本地服务创建的文件。我必须使用Keystore,但我不知道如何使用。是否有任何库或文档可以帮助我?


Android Keystore设计上不会暴露私钥或秘密密钥的密钥材料(请参见https://developer.android.com/training/articles/keystore.html)。 - Jon Goodwin
@JonGoodwin 但是似乎你仍然可以调用 getPrivateKey() 来获取密钥,我错过了什么吗? - Scis
1个回答

6

虽然这篇帖子已经有些年头了,但或许它会在未来帮到某个人。以下提示适用于Android Keystore v3和v4(分别对应Oreo和Pie)。

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

Keystore服务还是检查请求进程是否有权使用密钥的层。

与keystore服务通信通过binder接口(IPC)进行。您可在此处阅读更多相关信息。

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

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

AOSP带有SW-based keystore实现,在这里可以找到。默认情况下,AOSP构建的keyblob未加密。

请注意,股票keystore_cli_v2不支持键导入。如果您计划离线加密数据(例如pycrypto),则必须扩展它。如果您计划这样做,请记住,keystore_client_impl.cpp链接到libkeystore_binder.so而不是keystore_cli_v2。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接