iOS使用x963DerivedSymmetricKey创建密封盒对称密钥的参数含义咨询
CryptoKit中
x963DerivedSymmetricKey参数的正确用法 1. outputByteCount:生成对称密钥的字节长度
这个参数的值完全取决于你后续要使用的加密算法对密钥长度的要求,没有固定值:
- 如果用AES-128加密/解密,需要传入16(因为128位=16字节)
- 用AES-256则传32,AES-192传24
- 用ChaChaPoly的话,固定传32(对应256位密钥)
- 做HMAC的话,推荐和哈希算法的输出长度匹配:比如HMAC-SHA256传32,HMAC-SHA1传20
你看到的示例里传16,是因为它要生成AES-128的密钥,这个是合理的,并非错误。
2. sharedInfo:密钥派生的上下文绑定信息
这个参数的核心作用是让派生的密钥绑定到特定场景,避免同一个共享密钥在不同业务场景下生成相同的对称密钥(提升安全性)。正确使用要注意两点:
- 通信的双方(比如Alice和Bob)必须传入完全相同的
sharedInfo值,否则各自生成的对称密钥会不一样,无法正常解密 - 这个值可以是任意字节数据,比如:
- 自定义的协议标识(比如
"com.yourapp.chat.encryption.v1"转成字节) - 会话ID、用户ID这类能区分当前加密场景的数据
- 甚至是其中一方的公钥(就像你看到的示例那样)——这种做法是把派生密钥和当前的密钥交换会话绑定,也是合规的,不算错误,只是可读性不如明确的场景标识
- 自定义的协议标识(比如
关键提醒
不管你选择什么作为sharedInfo,一定要确保Alice和Bob用的是完全一样的内容,差一个字节都会导致密钥不匹配。
内容的提问来源于stack exchange,提问作者sudoExclamationExclamation
相关产品推荐
相关产品推荐

