我有一个applet(你可以看一下JavaCard applet is not working with RSA encryption) . Applet在构造函数中生成RSA公钥和私钥,并使用APDU命令加密某些字节数组 .
Applet在文档中使用KeyBuilder.LENGTH_RSA_2048生成公钥和私钥,卡片令人遗憾,JavaCard仅在DDA中支持2048位密钥长度 .
所以问题是什么是DDA和SDA . 他们之间的差异?主要问题是:如何在这种模式下安装(或运行?)applet?
我发现了: Update 1 :SDA - 静态数据认证DDA - 动态数据认证
2 回答
所以问题是:
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通过终端向卡片提供随机数据以进行签名,这里这部分使卡片无法克隆,因为每个会话使用不同的随机数,因此记录卡片会话将无法在下一个卡片会话中工作 .
希望它有所帮助,你可以阅读SDA和DDA,Gemalto
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
原因代码来验证这一点 .