在iOS上创建用于打开和关闭密封盒子的对称密钥时,x963DerivedSymmetricKey中的sharedInfo是什么?

问题描述 投票:0回答:1

我正在阅读此 Apple 文档并尝试应用它:

https://developer.apple.com/documentation/cryptokit/sharedsecret

它说:

共享密钥本身不适合作为对称加密密钥(SymmetricKey)。但是,您可以通过调用共享密钥的 hkdfDerivedSymmetricKey(using:salt:sharedInfo:outputByteCount:) 或 x963DerivedSymmetricKey(using:sharedInfo:outputByteCount:) 方法来使用它来生成密钥。在另一方执行相同操作后,你们双方共享一个对称密钥,该对称密钥适用于创建消息身份验证代码(如 HMAC),或用于使用 ChaChaPoly 或 AES 等密码打开和关闭密封盒子。

当我点击

x963DerivedSymmetricKey(using:sharedInfo:outputByteCount:)
的链接时:

https://developer.apple.com/documentation/cryptokit/sharedsecret/x963衍生对称密钥(使用:sharedinfo:outputbytecount:)

它说:

sharedInfo:用于密钥派生的共享信息。

outputByteCount:生成的对称密钥的长度(以字节为单位)。

我对这两个参数感到困惑。

sharedInfo
outputByteCount
到底应该传递什么?

我能找到的唯一例子在这里:

https://gist.github.com/mehmeteminkartal/e2d1ee56526dc032b7257aef80c40d16

但我认为这个例子可能不正确,因为它通过

bobPublicKey.rawRepresentation
sharedInfo
alice_key
bobs_key
。也不确定为什么它通过
16
outputByteCount

有人可以解释一下这些吗?

ios security cryptography aes aes-gcm
1个回答
0
投票

x963DerivedSymmetricKey
使用 ANSI X9.63 指定的标准执行密钥派生 (KDF)。

sharedInfo
是在密钥生成过程中添加的额外数据,以使生成的密钥唯一且特定于特定用途或会话。它可以包括正在使用的协议、会话标识符或目的字符串等详细信息。这确保了即使使用相同的共享密钥,派生密钥也是不同的并且针对特定上下文进行定制。

outputByteCount
参数确定派生密钥将具有的字节数。根据实现的不同,该参数可能受到限制(即基于所使用的底层哈希函数);我不确定它对 Swift 来说意味着什么。建议在此处设置一个反映您稍后要使用的对称密钥的数字:

// 32 bytes or 256 bits, safe for AES-256
let symmetricKey = try sharedSecret.x963DerivedSymmetricKey(
    using: SHA256.self,
    sharedInfo: Data(),
    outputByteCount: 32
)

// Or you can use the SymmetricKeySize
let symmetricKey = try sharedSecret.x963DerivedSymmetricKey(
    using: SHA256.self,
    sharedInfo: Data(),
    outputByteCount: SymmetricKeySize.bits256.bitCount / 8
)
© www.soinside.com 2019 - 2024. All rights reserved.