我正在尝试使用Curve25519上的KeyChain创建iOS键。不幸的是,我知道CryptoKit的存在,这对于iOS 12来说是不可用的。是否有一种方法可以创建Curve25519键pre,可能是在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())发布于 2020-10-23 08:09:13
苹果的老核心密码库CommonCrypto不支持像curve25519这样的现代曲线,坦率地说,它完全是一团糟,到处都是不安全的密码,它们甚至不清楚实际使用的曲线方程。
此外,尽管CryptoKit支持curve25519进行密钥交换,但它仍然是有限的,例如,你不能使用“安全飞地”来生成curve25519密钥,只有P-256,这可能是反向的(看看曲线系数),尽管所有的金融机构似乎都很喜欢它。
最终,curve25519私钥只是一个很大的(2^256)数字(虽然它在使用前是“夹紧”的),所以如果您只需要生成密钥,就可以使用SecRandomCopyBytes来完成这个任务。
不过,如我所怀疑的那样,如果您想在X25519上执行一些KEX或EdDSA签名,那么只需使用libsodium即可。它是NaCl的goto库,在Swift中有一个真的很棒接口,它是由最初的libsodium作者编写的,名为swift-sodium,我使用过它,它很棒。也支持iOS 12+.
在libsodium中为curve25519生成密钥非常简单,如:
import Sodium
let sodium = Sodium()
let curve25519KeyPair = sodium.box.keyPair()
let privateKey = curve25519KeyPair!.secretKey
let publicKey = curve25519KeyPair!.publicKey然后,您可以手动存储在KeyChain中。
如果你需要更多的帮助,可以大声喊一声,并选择使用25519。
https://stackoverflow.com/questions/64477036
复制相似问题