GlobalPlatformPro 如何做关键多元化

问题描述

我有一堆 GlobalPlatform 2.2.1 JavaCard,我(目前)使用 GlobalPlatformPro 管理它们。我想使用 gpp -lock PSK 之类的 PSK 锁定它们。

但是,我想为每张卡使用单独的 PSK,以便我可以根据持卡人的要求将 PSK 提供给持卡人(以便他们可以安装他们选择的小程序)。理想情况下,我会使用 key derivation algorithm 从主密钥和卡 UID(或 AID 或两者的组合等)的组合中派生 PSK。

我注意到 gpp 有 --lock-kdf 选项,但除了 --help 输出:“使用带有锁定键的 KDF”外,我找不到任何关于它的文档。

  • gpp 实际上是否能够实现这种类型的密钥多样化,例如像 AN10922Visa2,EMV-CPS..? 还是我应该为此使用不同/额外的工具?
  • 我能否像使用 -lock 一样使用 gpp -lock-kdf MASTERKEY,但可以提高每张卡使用不同密钥的安全性?
  • 我是否会像使用 gpp -key-kdf MASTERKEY 那样使用 -key 来管理卡片?
  • 如何在不影响其他卡的安全性的情况下,获取以这种方式锁定的卡的多样化 PSK 并提供给持卡人?

解决方法

在评论中的帮助和 gpp 有一个 wiki 的认识下,我开始能够回答一些问题:

GlobalPlatformPro,像大多数 GlobalPlatform 实现一样支持不同的密钥多样化算法(即 emv、visa2、kdf3)as documented here,例如

gpp -lock emv:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Warning: no keys given,defaulting to 404142434445464748494A4B4C4D4E4F
Looking at key version
YYYYYYYYYYYYYYYY locked with: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Keys were diversified with EMV and ZZZZZZZZZZZZZZZZZZZZ
Write this down,DO NOT FORGET/LOSE IT!

使用新语法,在 gpp 中使用多样化的密钥就像使用静态密钥一样,只是必须像 emv: 一样指定多样化算法

仍然是如何知道使用多样化主密钥锁定的单张卡的 PSK 的问题。 如果我错了,请纠正我,但这是不可能的,因为多样化的键不是静态的。请注意 emv-diversified 密钥在锁定和解锁过程中有何不同,以及如何使用为锁定生成的 enc/mac/dek-keys 进行解锁失败:

$ gpp -verbose -lock emv:$(cat master_key)
…
Warning: no keys given,defaulting to 404142434445464748494A4B4C4D4E4F
[INFO] GPSession - Using card master keys with version 0 for setting up session [MAC] 
[INFO] GPSession - Diversified card keys: ENC=404142434445464748494A4B4C4D4E4F (KCV: 8BAF47) MAC=404142434445464748494A4B4C4D4E4F (KCV: 8BAF47) DEK=404142434445464748494A4B4C4D4E4F (KCV: 8BAF47) for SCP02
…
A000000003000000 locked with: …
Keys were diversified with EMV and …
Write this down,DO NOT FORGET/LOSE IT!
$ gpp --unlock --key-enc 404142434445464748494A4B4C4D4E4F --key-mac 404142434445464748494A4B4C4D4E4F --key-dek 404142434445464748494A4B4C4D4E4F
Failed to open secure channel: Card cryptogram invalid!
…
$ gpp -verbose -unlock -key emv:$(cat master_key)
…
[INFO] GPSession - Using card master keys with version 0 for setting up session [MAC] 
[INFO] GPSession - Diversified card keys: ENC=89EF06C10723B737246259BE40B918C3 (KCV: 787239) MAC=49913E9A80E1B6128AF6C3AAEF0B6062 (KCV: D52C48) DEK=E63A8D78628F2E0FA6B4AC73669087DD (KCV: D1F762) for SCP02 with EMV
…
Default 404142434445464748494A4B4C4D4E4F set as key for …

显然,我的问题缺乏对此类密钥多样化如何运作的基本了解。为了实现我想要的,我想我要么必须自己“多样化”(在非全球平台意义上)静态密钥(例如使用 openssl -hmac),要么简单地生成每张卡随机密钥并将它们安全地保存在列表中/数据库。

我现在正在寻找以任何此类方式支持密钥管理的工具,我发现的一个候选工具是 pyresman,它显然可以管理/选择密钥并执行 GPshell scripts 但尚未更新四年。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...