首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ECC Curve25519 KeyChain

ECC Curve25519 KeyChain
EN

Stack Overflow用户
提问于 2020-10-22 07:11:08
回答 1查看 1.1K关注 0票数 3

我正在尝试使用Curve25519上的KeyChain创建iOS键。不幸的是,我知道CryptoKit的存在,这对于iOS 12来说是不可用的。是否有一种方法可以创建Curve25519键pre,可能是在KeyChain中生成它时缺少的一个参数?下面的代码将只生成P-256键。

代码语言:javascript
复制
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())
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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生成密钥非常简单,如:

代码语言:javascript
复制
import Sodium

let sodium = Sodium()
let curve25519KeyPair = sodium.box.keyPair()
let privateKey = curve25519KeyPair!.secretKey
let publicKey = curve25519KeyPair!.publicKey

然后,您可以手动存储在KeyChain中。

如果你需要更多的帮助,可以大声喊一声,并选择使用25519

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64477036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档