gop*_*her 8 encryption android elliptic-curve kotlin
我需要使用 NIST P-256 椭圆曲线来加密和解密数据。现在我已经生成了密钥对,但是我如何使用它们来加密和解密呢?
官网只说了如何使用这个ec密钥对进行签名/验证,但是我想知道如何使用这个ec密钥对进行加密/解密。
网站:https : //developer.android.com/reference/android/security/keystore/KeyGenParameterSpec#example : -nist-p-256-ec-key-pair-for-signingverification-using-ecdsa
生成 NIST P-256 密钥对代码:
val kpg: KeyPairGenerator = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_EC, "AndroidKeyStore")
val parameterSpec =
KeyGenParameterSpec.Builder("container", KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT)
.setAlgorithmParameterSpec(ECGenParameterSpec("secp256r1"))
.setDigests(KeyProperties.DIGEST_SHA256, KeyProperties.DIGEST_SHA384, KeyProperties.DIGEST_SHA512)
.build()
kpg.initialize(parameterSpec)
val keyPair = kpg.generateKeyPair()
val ecPublicKey = keyPair.public as ECPublicKey
val ecPrivateKey = keyPair.private as ECPrivateKey
Run Code Online (Sandbox Code Playgroud)
AndroidKeyStore 目前不支持使用 EC 密钥加密或解密,仅支持使用 RSA 密钥。
要使用 EC 密钥进行加密,您需要使用 ECDH 加上密钥派生函数 (KDF) 来计算可用于数据的共享对称密钥,或者使用在内部执行此操作的 ECIES。但是 AndroidKeyStore 从 Android 10 开始不支持任何一种操作模式。也许在 Android 11 中。
现在,您可以使用具有适当填充模式(推荐使用 OAEP)的 RSA 来加密您的对称密钥,也可以使用本机 Java 加密提供程序。不幸的是,这不会使用安全硬件来生成、存储或使用密钥,而是会在您的应用程序的进程空间中执行所有这些操作。这里有一个例子在这里。
(就其价值而言,我是拥有 AndroidKeyStore 的 Google 工程师。几年来我一直计划添加 ECDH 支持,但它总是被其他被认为具有更高优先级的功能抢占先机。我会得到尽管如此。)
| 归档时间: |
|
| 查看次数: |
3025 次 |
| 最近记录: |