JavaCard 中 SDA 和 DDA 的区别?

Differents between SDA and DDA in JavaCard?

我有一个小程序(你可以在那里看一下)。 Applet 在构造函数中生成 RSA public 和私钥,并使用 APDU 命令加密一些字节数组。

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

所以问题是什么是 DDA 和 SDA。它们之间的区别?主要问题是:如何在此模式下安装(或运行?)小程序?

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

DDA 意味着 Cipher.ALG_RSA_NOPAD 算法(有时称为 raw RSACKM_RSA_X_509)- - 正如@Hai-Binh LE 指出的那样,查看 EMV Book 2(可能是附件 B2)。

您正在实例化未用于 DDA 的 Cipher.ALG_RSA_PKCS1,因此 可能 不受卡支持。

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

所以问题是:

what is DDA and SDA. Differences between them?

SDA - SDA确保ICC数据的真实性。在 SDA 之后,可以确定来自 ICC 的数据是真实的并且没有被任何人更改过。 但 SDA 不保证 ICC 数据的唯一性。你可以看到SDA的图是这样的,

在这里你可以看到在 SDA 期间使用了两个 RSA 对,
(1) - 发行人RSA

(2) - CA_RSA

这张图描述性很强,可以清楚地理解SDA的流程。您也可以查看 EMV BOOK 2 以获得更多关于 SDA 的描述。而 DDA 流程就像,

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

1 - 发行人RSA

2- CA_RSA

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

SDA 保证卡上的数据有效,因为我们信任签署数据的高级认证机构。但是攻击者可以记录卡会话并构建例如新的 virtuvel 卡,因为这里的所有会话都使用相同的数据。

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

希望对您有所帮助,您可以阅读更多SDA and DDA , Gemalto