问题描述
我正在尝试使用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,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)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)