GlobaPlatform SCP 03中的KDF和PRF

时间:2017-06-20 10:40:57

标签: javacard globalplatform

我想在javacard中实施Globalplatform SCP 03协议。主要问题是卡片中的KDF和PRF实现。我有三个问题:

  1. 在javacard中是否有KDF和PRF的开源实现?
  2. 我找到" RandomData.getInstance(RandomData.ALG_PSEUDO_RANDOM);"。在NIST sp 800-108中有3个和4个PRF功能输入,但我只能在javacard中设置一个RandomData参数(只有种子)。它是PRF的实施吗?
  3. PRF是否具有相同的输入,在不同的执行中产生相同的结果?如果答案为否,为什么卡和主机可以使用它生成相同的会话密钥?
  4. 非常感谢。

    穆赫辛

1 个答案:

答案 0 :(得分:2)

  

我想在javacard中实施Globalplatform SCP 03协议

这很好,但是你知道你已经可以通过Global Platform API使用安全消息传递通道了,对吧?因此,如果您希望在卡片个性化后使用相同的频道,则只能执行此操作。当然,您的特定卡可能仅支持旧的基于3DES的协议。

  

在javacard中是否有KDF和PRF的开源实现?

嗯,不是KDF,而是从PRF构建KDF并不难。 PRF的一些已经包括在内:任何MAC都是PRF,包括HMAC-SHA1。但是,GP SCP 03使用具有特定输入参数的AES CMAC作为KDF。

基本上,哈希函数或MAC是一个差的勒芒KDF,没有明确指定输入参数。但为此您阅读了全球平台规范。

  

我找到" RandomData.getInstance(RandomData.ALG_PSEUDO_RANDOM);"。在NIST sp 800-108中有3个和4个PRF功能输入,但我只能在javacard中设置一个RandomData参数(只有种子)。是PRF的实施吗?

不,播种的PRNG不是PRF,您只能添加种子信息到大多数实现,而不是完全重新播种PRNG。但同样,你需要一个特定的KDF:AES-CMAC,而不是任何一种用于SCP 03的KDF。

  

PRF是否具有相同的输入,在不同的执行中产生相同的结果?如果答案为否,为什么卡和主机可以使用它生成相同的会话密钥?

是的,当然它确实如此,只要它首先没有随机状态,就像随机数生成器一样。 非确定性 PRF将毫无用处。