我试图使用 SecKeyCopyKeyExchangeResult 函数从我的本地私钥获取共享密钥并接收服务器的公钥。共享密钥已成功生成,我能够使用 AES 加密解密传入的消息 不久前,服务器开发人员决定将 KDF 添加到密钥生成流程中。我开始研究如何在 iOS 端做到这一点,并发现有一个特殊的参数static let sharedInfo: SecKeyKeyExchangeParameter 要说文档很差,什么都不说......只有我发现的是标题中的这个描述
@constant kSecKeyKeyExchangeParameterSharedInfo 包含 CFDataRef 以及 KDF(密钥派生函数)的附加共享信息。
如果有人处理过这个问题,请帮忙。服务器使用此参数在 scala 上生成 KDF
private def concatWithKdf(secretKey: SecretKey) = {
val bytes = new Array[Byte](SECRET_KEY_LENGTH)
val digest = new SHA256Digest();
val kdf1BytesGenerator = new KDF1BytesGenerator(digest)
kdf1BytesGenerator.init(new KDFParameters(secretKey.getEncoded, null))
kdf1BytesGenerator.generateBytes(bytes, 0, bytes.length)
new SecretKeySpec(bytes, secretKey.getAlgorithm)
}
iOS端代码
var keyExchangeError: Unmanaged<CFError>?
let dict = [SecKeyKeyExchangeParameter.requestedSize.rawValue : 32,
SecKeyKeyExchangeParameter.sharedInfo.rawValue : ???]
let secret = SecKeyCopyKeyExchangeResult(privateOwn,
SecKeyAlgorithm.ecdhKeyExchangeStandard,
publicTheir,
dict as CFDictionary,
&keyExchangeError)