如何解决ECC曲线25519钥匙链
我正在尝试使用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())
解决方法
Apple的旧核心加密库CommonCrypto
不支持像curve25519
这样的现代曲线,坦率地说,这是一团糟,杂乱无章的密码,甚至在实际的曲线方程式上都不清楚使用。
此外,尽管CryptoKit
支持curve25519
进行密钥交换,但是它仍然受到限制,例如,您不能使用“ Secure Enclave”来生成curve25519
密钥,只能使用{{1} },尽管所有金融机构似乎都喜欢它,但它很可能是借壳的(只看曲线系数)。
最终,P-256
私钥只是一个大(curve25519
)数字(尽管在使用前已“钳制”),所以如果您只需要生成密钥,则可以使用{ {1}}。
但是,如果我怀疑您想对2^256
做一些SecRandomCopyBytes
KEX或X25519
签名,则只需使用EdDSA
。它是25519
的goto库,在libsodium
中有一个really great接口,该接口由原始NaCl
的作者Swift
编写,我已经使用了它,并且这很棒。 它还支持iOS 12 +。
在libsodium
中为swift-sodium
生成密钥很简单:
libsodium
然后您可以手动将其存储在KeyChain中。
如果需要进一步的帮助,请大声喊叫,使用curve25519
是个不错的选择。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。