首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么是DUKPT密钥派生函数?

什么是DUKPT密钥派生函数?
EN

Security用户
提问于 2012-03-30 19:47:59
回答 3查看 21K关注 0票数 13

我的任务是解密从加密读卡器获得的密文。读卡器采用DUKPT(每次事务导出唯一密钥)方案和3 3DES加密。我对3 3DES加密没有任何问题,因为它是由众所周知的库(如BouncyCastle和Java )实现的常见算法。

在此之前,我从来没有遇到过DUKPT,所以我是一个完整的新手。

根据我到目前为止所读到的,DUKPT使用了基于基本派生密钥(BDK)的密钥派生机制,它基本上是特定事务的共享密钥和密钥序列号。在读卡器的情况下,每次我刷卡(即使是用同一张卡),密码文本将是不同的,KSN将是不同的。了解BDK、KSN、加密算法(在本例中是3 3DES)和密码文本,如何根据这些信息导出事务的密钥?我可以想象有某种关键的派生函数,对吗?

EN

回答 3

Security用户

发布于 2012-03-31 03:54:07

它基本上是这样工作的:服务器有一个主密钥( BDK),每个客户端设备都有一个唯一的序列号和一个计数器(组合起来就是KSN)。

要设置一个新设备,您可以使用主密钥( BDK,Yoav的答案中的链接中描述的过程)加密KSN,然后得到一个新的密钥( IPEK)。这有点像你需要两个人(服务器和客户端)用两个密钥( BDK和KSN)来打开一个包含另一个密钥的金库。另一个密钥是IPEK,是您在设备本身上安装的。

客户端设备使用IPEK生成未来密钥表,然后丢弃IPEK。因此,客户端设备现在有它的原始序列号、计数器(合并为KSN)和未来密钥列表。

为了加密数据,客户端设备从列表中获取第一个未来密钥,并将其用作加密密钥。然后,它发送加密的数据,它是KSN (包含计数器)到服务器。

在服务器端,服务器知道自己的秘密( BDK),现在拥有clent设备的KSN。服务器使用这两个密钥来生成IPEK (再次打开那个金库)。使用IPEK,服务器可以重新创建未来密钥表,并知道客户端提供的计数器(KSN的最后5个字符),它知道表中要使用哪个键。

至于所有的技术细节,我建议看看Andy的博客(链接在Yoav的答案中),也许可以得到一份ANSIX9.24的副本,它有完整的规范。

票数 15
EN

Security用户

发布于 2012-03-30 21:01:44

在网上找不到很多资源,但我想应该在某个地方详细说明一下。然而,我发现的是这种对派生过程的描述

如果我正确理解了这一点,派生函数的工作原理大致如下:

  1. KSN使用某种形式的填充进行规范化。
  2. 然后,规范化的KSN将使用BDK加密。
  3. 此过程的输出是事务的派生键。

希望我没有误导你。这可能值得更熟悉实际规范的人回答。

票数 10
EN

Security用户

发布于 2012-04-19 05:30:45

关于如何创建未来密钥的细节是相当可怕的,但它们包含在ANSI规范中。规范在网上还没有正式发布,但是如果你在谷歌上搜索“百度ansi x9.24”,你会得到2004年版本的链接(当前是2009年)。在百度(谷歌的中文答案)网站上读到它是令人不快的,但ANSI想要收取的140美元更令人不快。在投资了目前版本的规范(在和百度玩了几天之后),我可以证明这个过程一点也不明显。

票数 5
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/13309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档