我们有一个POS (Ingenico),使用DES3-CBC加密使用派生密钥。它发送加密数据,10字节大小的密钥序列号(KSN)。我尝试使用CKM_DES3_CBC_ENCRYPT_DATA
派生密钥,并使用DES3-CBC机制解密数据。然而,我得到了一些像这样的乱七八糟的数据:
\ufffd\u001dl\ufffdP\ufffdl\ufffd\ufffd\ufffd+\ufffd\ufffd[\ufffd\ufffdl\u0017\ufffd\ufffd\ufffd\u001f?E\ufffd[*\ufffdmd\u0014\u0009ay\ufffd\ufffd3\ufffd\ufffd
我不确定我是否使用正确的机制来派生密钥,或者甚至使用正确的机制来解密数据。
有人能帮我理解一下到底是怎么回事吗?有消息说我需要给KSN贴上垫子。
编辑:我在Github/PKCS上问了一个类似的问题
发布于 2020-02-25 19:34:19
我解决了问题。因此,对于那些正在寻找答案的人来说,你需要考虑一下你的HSM支持什么机械。我在代码中的每一个逻辑都是正确的。唯一的问题是我用来推导钥匙的机制是错误的。有几种机制可以用来派生密钥,这是很难理解的部分,因为它没有具体说明。正如问题中所述,我从CKM_DES3_CBC_ENCRYPT_DATA开始,但结果,我不得不使用CKM_DES2_DUKPT_DATA。这种机制在任何包装库中都没有定义,比如c# interlop pkcs11库或者我使用的那个golang库。因为这是供应商定义的机制,所以我必须自己定义它,并相应地使用它。
我希望这对将来的任何人都有帮助!
https://crypto.stackexchange.com/questions/77749
复制相似问题