DUKPT - 接收方如何验证交易计数器?

信息安全 密码学
2021-09-03 11:36:38

关于这份文件,我有一个问题:

ANSI X9.24,零售金融服务对称密钥管理第 1 部分:使用对称技术

在第 41 页的“方法:DUKPT(每次交易派生的唯一密钥)”一章中,它说,接收方应验证 SMID 中发起者的交易计数器是否已增加。

其他消息来源说,HSM(接收者)除了基本派生密钥之外不存储任何状态:可以通过密钥集标识符(包含在 SMID 中)查找基本派生密钥。因此,接收方 (HSM) 能够在不保留发起方的任何状态的情况下进行解密。我非常理解这一点。

但是在验证事务计数器时,除了跟踪发起者(表或映射)的每个密钥序列号 (KSN) 的事务计数器之外,我无法想象任何其他方法 - 也就是说,HSM 中保留了一些状态,但是不应保持任何状态。

尽管文档包含解释文档中描述的方法的实现的伪代码,但没有提示如何验证事务计数器。

这实际上是如何实现的,或者在不跟踪状态的情况下如何实现这一点的基本思想是什么?

(这个问题发布在stackoverflow上,没有回答,但建议在这里提问)

3个回答

我的回答可能有点晚了,但是您最初的问题对我来说非常清楚,我确切地知道您的意思。

KSN 通常由接收主机存储,以跟踪事务计数器。因此,对于每个事务,主机通过检查 KSN 中的事务计数器是否高于主机处理先前事务时的值来验证发送设备没有使用先前使用的密钥。然而,对于某些事务类型,主机可能具有接受同一组 DUKPT 密钥以用于多个请求/响应对的逻辑。例如技术逆转。

Brg

阿恩

我不确定我是否正确理解了你的问题,所以首先让我解释一下我对你的问题的理解,然后再给出答案。

您基本上是在询问接收 HSM 框如何保持无状态但能够验证 PED(Pin Entry Device)是否使用从 BDK 派生的正确序列密钥。

如果这是正确的,那么答案如下: BDK 用于生成一次性密钥,这是用于加密的实际密钥。计数器作为 KSN 的一部分发送,因此接收 HSM 可以根据 PED 发送的计数器和第一个密钥(存储在 HSM 中并从 BDK 派生)计算使用的正确密钥。你可以把它看成一个链条。

考虑函数s(key),它为您提供在 key 之后使用的下一个(后继)

双方都知道第一个密钥k1 现在 PED 将事务计数器t发送到 HSM。并且 hsm 可以通过以k1作为初始输入递归地应用s函数t来计算所使用的密钥。根据实现,可以存储密钥以避免执行多余的计算。

通常,在应用程序主机数据库的数据表中为每个 PED 保留一条记录,如果下一个计数器值小于最后一个计数器值的值,则在该记录中设置一个字段以跟踪从 PED 接收的最后一个计数器然后可以在数据库中采取适当的行动。DUKPT 事务计数器是明确的,因此 HSM 无需对此进行验证,只有主机应用程序需要一个逻辑来验证事务计数器