JavaCard中SDA和DDA之间的区别?

时间:2015-10-08 11:59:36

标签: java encryption applet rsa javacard

我有一个小程序(您可以在那里查看JavaCard applet is not working with RSA encryption)。 Applet在构造函数中生成RSA公钥和私钥,并使用APDU命令加密某些​​字节数组。

Applet使用KeyBuilder.LENGTH_RSA_2048在提供卡的文档中生成公钥和私钥,卡片令人遗憾,JavaCard仅在DDA中支持2048位密钥长度。

所以问题是什么是DDA和SDA。他们之间的差异?主要问题是:如何在这种模式下安装(或运行?)applet?

我发现了什么: 更新1 :SDA - 静态数据身份验证 DDA - 动态数据认证

2 个答案:

答案 0 :(得分:2)

所以问题是:

  什么是DDA和SDA。他们之间的差异?

SDA - SDA确保ICC数据的真实性。在SDA之后,确保来自ICC的数据是真实的并且没有任何人改变。 但SDA并不能保证ICC数据的独特性。你可以看到SDA图就像,

SDA FLOW:

在这里你可以看到两个RSA对正在SDA期间使用,
(1) - IssuerRSA

(2) - CA_RSA

此图非常具有描述性,可以清楚地了解SDA的流程。您还可以查看EMV BOOK 2以获取有关SDA的更多说明。而DDA流程就像,

DDA FLOW

在这里你可以看到3个RSA对在DDA中使用,

1 - IssuerRSA

2- CA_RSA

3 - ICC RSA(所有卡中唯一的新RSA密钥,每张卡在卡的个性化过程中生成此RSA对,因此每张卡的RSA对将不同)

SDA保证卡上的数据有效,因为我们信任签署数据的高级证书颁发机构。但攻击者可以记录卡会话并构建一个新的虚拟卡,因为这里使用的是相同的数据。

但是在DDA流程中 - 我们可以说它正在检查SDA +通过终端向卡片提供随机数据以进行签名,这里这部分使卡片无法克隆,因为每个会话使用不同的随机数,因此记录卡会话将无法工作下一次卡片会议。

希望它有所帮助,您可以阅读SDADDAGemalto

答案 1 :(得分:1)

DDA意味着Cipher.ALG_RSA_NOPAD算法(有时称为原始RSA CKM_RSA_X_509 ) - 正如@ Hai-Binh LE所说,看看进入EMV Book 2(可能是附件B2)。

您正在实例化一个不用于DDA的Cipher.ALG_RSA_PKCS1,因此该卡不支持

可以通过检查CryptoException原因代码的CryptoException.NO_SUCH_ALGORITHM来验证这一点。