如何验证Java卡上的证书有效性?



我知道如何使用Java验证证书,但由于java卡API的限制,我不知道如何在java卡上执行此操作(没有其他 java.io/类,只有javacard API + Object + Throwable允许)。

我没有找到任何与javacard兼容的证书库。我错过了什么吗?

我需要验证证书是否由 CA 签名,以及我需要验证证书的有效性。

通常,验证证书对于智能卡来说是一项艰巨的工作。这些证书的大小通常大于 2KiB。虽然这对于通用PC来说是花生,但不适用于智能卡,其中高端卡通常只包含8 KiB的RAM。这是在操作系统、加密协处理器、APDU 缓冲区以及(当然还有您的小程序)之间共享的。

还有另一个问题:通常智能卡不包含时钟。这使得验证证书是否在有效期内成为一件棘手的事情;基本上,您需要一些值得信赖的时间来计时。

还有一个事实是,证书验证通常使用 CRL 或 OCSP 来检查证书的状态。您可能知道,对于这样一个有限的平台,执行 OCSP 查找甚至只是解析 CRL 并不容易。

如果您巧妙地对其进行编程,则验证证书上的 CA 签名当然是可能的。但通常使用卡可验证证书(CVC 或 CV 证书)。这些是"扁平化"证书,花里胡哨的东西更少,更容易在智能卡中解析。

通过使用较新的、经过验证的证书的开始日期,您可以使用某种日期棘轮,其中使用证书本身中的日期更新时钟。但请注意,如果新证书有一段时间未经过验证,您仍然无法检测到过期的证书。CV 证书通常不使用 CRL,因此您必须信任每个证书,或者如果某些证书遭到入侵,您可能需要将它们列入黑名单。

虽然Java Card Connected版本可能会有更多的支持,但我认为这根本无法帮助您,因为连接版本很少在野外被发现。


CVC的原始规范可以在ISO/IEC 7816-8标准中找到:身份证 - 集成电路卡 - 第8部分:安全操作的命令和机制,附录A和B。

ICAO eMRTD 和 BSI TR 03110 文件也定义了这些类型的证书,因此如果您更喜欢免费软件,最好基于此制定任何证书规格。

最新更新