我正在使用(CryptoKit(来使用AES-GCM加密一些数据并对其进行身份验证。
然而,我想知道如何从纯文本密码生成AES-GCM密钥。通常,您会使用KDF
函数来实现这一点,比如PBKDF2。
在CryptoKit
中,有一个HKDF
类,它执行我想要的操作:https://developer.apple.com/documentation/cryptokit/hkdf
但是,我想知道DeriveKey函数使用了什么KDF算法。它使用PBKDF2吗?它使用bcrypt
吗?如果是,我如何指定设置,或者设置是自动确定的?
HKDF在RFC5869中定义。其意图是从一些加密安全的"密钥"生成密钥;键控材料";(IKM(。它不是为了扩展人工生成的密码。如第4节所述,香港发展基金的应用:
另一方面,预计一些应用程序不会能够使用HKDF";"照原样";由于特定的操作要求,或者将能够使用它,但没有计划一个重要的例子是密码学的推导来自低熵源的密钥,例如用户的密码。这个HKDF中的提取步骤可以集中现有的熵,但不能放大熵。在基于密码的KDF的情况下,主要目标是使用两种成分来减缓字典攻击:盐值,以及有意减慢密钥推导计算。香港发展基金自然适应盐的使用;然而该机制不属于本规范的一部分。感兴趣的应用程序在基于密码的KDF中,应该考虑是否(例如([PKCS5]比香港发展基金更能满足他们的需要。
我不认为CryptoKit提供任何类型的PBKDF(PBKDF2、scrypt、bcrypt、argon2(。这是一个非常有限的框架(我还没有找到一个有用的情况(。为此,您可能需要继续使用CommonCrypto,或者自己实现它(或者使用CryptoSwift之类的东西,我相信它实现了几个(。