我有一个小程序(您可以在那里查看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 - 动态数据认证
答案 0 :(得分:2)
所以问题是:
什么是DDA和SDA。他们之间的差异?
SDA - SDA确保ICC数据的真实性。在SDA之后,确保来自ICC的数据是真实的并且没有任何人改变。 但SDA并不能保证ICC数据的独特性。你可以看到SDA图就像,
在这里你可以看到两个RSA对正在SDA期间使用,
(1) - IssuerRSA
(2) - CA_RSA
此图非常具有描述性,可以清楚地了解SDA的流程。您还可以查看EMV BOOK 2以获取有关SDA的更多说明。而DDA流程就像,
在这里你可以看到3个RSA对在DDA中使用,
1 - IssuerRSA
2- CA_RSA
3 - ICC RSA(所有卡中唯一的新RSA密钥,每张卡在卡的个性化过程中生成此RSA对,因此每张卡的RSA对将不同)
SDA保证卡上的数据有效,因为我们信任签署数据的高级证书颁发机构。但攻击者可以记录卡会话并构建一个新的虚拟卡,因为这里使用的是相同的数据。
但是在DDA流程中 - 我们可以说它正在检查SDA +通过终端向卡片提供随机数据以进行签名,这里这部分使卡片无法克隆,因为每个会话使用不同的随机数,因此记录卡会话将无法工作下一次卡片会议。
答案 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
来验证这一点。