11 个版本 (4 个破坏性更新)
0.5.0 | 2024 年 7 月 25 日 |
---|---|
0.4.0 | 2024 年 6 月 4 日 |
0.3.3 | 2024 年 5 月 22 日 |
0.2.2 | 2024 年 5 月 8 日 |
0.1.1 | 2024 年 4 月 25 日 |
#707 在 密码学
每月 560 次下载
43KB
783 行
Android 和 iOS 的安全元素库
secure-env
是一个库,允许使用移动安全元素进行密钥生成和签名创建。
支持的目标
aarch64-apple-ios
aarch64-apple-ios-sim
x86_64-apple-ios
aarch64-linux-android
armv7-linux-androideabi
i686-linux-android
x86_64-linux-android
iOS
iOS 绑定是通过 security-framework 完成的。这是一个围绕 Apple 的 security.framework 的安全包装。
Android
Android 绑定是通过 jni-rs 完成的。曾讨论过通过 IPC (Binder) 或 HIDL 来实现,但最终选择了 jni,因为它更简单且文档齐全。
在这些绑定下面,它完全依赖于 KeyStore
。在密钥生成过程中,根据支持版本,将 setIsStrongBoxBacked
设置为确保密钥存储在硬件中。如果不支持,则回退到较低的安全级别 setUserPresenceRequired
。
注意:还需要进行一些额外的研究来确定
setUserPresenceRequired
提供的确切保证。如果这意味着 TEE,那么就很好。
额外设置
由于时间限制,目前需要一些额外的设置才能在 Android 上完全工作。这涉及到从 Rust 访问 JVM 指针。如果使用了 android_activity,请查看 android 示例。如果从这个库中使用了 React Native 上下文或原生 Android 应用,请在您的项目中包含以下内容
package id.animo;
public class SecureEnvironment {
static {
System.loadLibrary("secure_env");
}
public static native void set_env();
}
之后,您可以在调用库之前调用 SecureEnvironment.set_env
。之后一切应该都设置正确。
功能
ios | android | |
---|---|---|
生成密钥对 | ✅ | ✅ |
通过 ID 获取密钥对 | ✅ | ✅ |
获取公钥 | ✅ | ✅ |
签名 | ✅ | ✅ |
用法
添加依赖关系
cargo add secure-env
// src/main.rs
use secure_env::{SecureEnvironment, SecureEnvironmentOps, Key, KeyOps};
fn main() {
let key = SecureEnvironment::generate_keypair("my-key-id").unwrap();
let key_from_id = SecureEnvironment::get_keypair_by_id("my-key-id").unwrap();
let msg = b"Hello World!";
let public_key = key.get_public_key().unwrap();
let signature = key.sign(msg).unwrap();
assert!(public_key.len(), 33);
assert!(signature.len(), 64);
}
依赖关系
~2–15MB
~153K SLoC