我正在组装以 InitialiseSecureChannelRequest 开头的 SGP.22 GetBoundProfilePackage 响应,为此我获得了 90 00 成功代码。随后的 ConfigureISDPRequest 返回错误原因 8,这是一个 scp03t/BSP 安全错误。
scp03t(现在在 SGP.22 的 v3 中重新标记为 BSP)过程有几个步骤,ConfigureISDPRequest 需要加密和 MACing。错误代码不提供识别哪个步骤包含错误的方法。
第一步是使用之前生成的(用于 InitialiseSecureChannelRequest)smdpOtsk 私钥和 euiccOtpk 公钥生成 ShS 共享密钥。此 ECDH 程序在 NIST SP 800-56Ar3 第 5.7.1.2 节中定义:
我的 Golang 代码,参考了 this post 虽然我注意到我不认为它需要散列之后 - 这似乎是一个 TLS 东西:
calcedX, _ := euiccOtpk.Curve.ScalarMult(euiccOtpk.X, euiccOtpk.Y, smdpOtsk.D.Bytes())
这里我不清楚的是 NIST SP 800-56Ar3 步骤中的第 3 部分 - 使用附录 C.2 中定义的字段元素到字节字符串转换例程将 z 转换为 Z。
我已经将以下代码用于附录 C.2 中指定的字段元素到字节字符串转换,我的问题是这是否正确?
fixedBytes := make([]byte, 32)
calcedX.FillBytes(fixedBytes)
return fixedBytes