我正在尝试使用iOS上的KeyChain创建Curve25519键。不幸的是,我知道CryptoKit的存在,但不适用于iOS12。有没有办法在CryptoKit之前创建Curve25519密钥,也许是在KeyChain中生成它时缺少的参数?以下代码将仅生成P-256密钥。
let attributes: [String: Any] = [
String(kSecClass): kSecClassKey,
String(kSecAttrKeyType): kSecAttrKeyTypeECSECPrimeRandom,
String(kSecAttrKeySizeInBits): 256
]
var error: Unmanaged<CFError>?
let privateKey = SecKeyCreateRandomKey(attributes as CFDictionary, &error)
print(privateKey ?? error!.takeUnretainedValue())
苹果的旧核心加密库CommonCrypto
不支持现代曲线curve25519
,坦率地说,这是一团糟,杂乱无章的密码,甚至在使用的实际曲线方程式上都不清晰。
此外,尽管CryptoKit
支持curve25519
密钥交换,但是它仍然很有限,例如,尽管所有金融机构似乎都很喜欢,但是您不能使用“ Secure Enclave”来生成curve25519
密钥P-256
,它很可能是后门的(只看曲线系数)。它。
最终,curve25519
私钥只是一个大(2^256
)数字(尽管在使用前已“钳制”),因此,如果只需要生成密钥,则可以使用来完成SecRandomCopyBytes
。
不过,如果我怀疑您想做一些X25519
KEX或EdDSA
签名25519
,请使用libsodium
。它是的goto库NaCl
,它有一个非常好的接口,它Swift
是由原始libsodium
作者编写的,名为swift-sodium
,我已经用过了,它很棒。它还支持iOS 12+。
在libsodium
for中生成密钥curve25519
非常简单:
import Sodium
let sodium = Sodium()
let curve25519KeyPair = sodium.box.keyPair()
let privateKey = curve25519KeyPair!.secretKey
let publicKey = curve25519KeyPair!.publicKey
然后,您可以手动将其存储在KeyChain中。
如果需要进一步的帮助,请大喊大叫,并使用进行选择25519
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句