我知道如何使用Java验证证书,但由于java卡API的限制,我不知道如何在Java卡上执行此操作(没有java.io/其他类,只有javacard API + Object + Throwable允许的)。
我没有找到任何兼容javacard的证书库。我错过了什么吗?
我需要验证证书是否由CA签署,以及我需要验证证书的有效性。
答案 0 :(得分:6)
通常,验证证书对于智能卡来说是一项艰苦的工作。这些证书的大小通常大于2KiB。虽然这是用于通用PC的花生,但它不适用于智能卡,其中高端卡通常仅包含8 KiB的RAM。这是在操作系统,加密协处理器和APDU缓冲区之间共享的 - 当然 - 你的小程序。
还有另一个问题:通常智能卡不包含时钟。这使得证明证书在有效期内是一件棘手的事情;基本上你需要一些值得信赖的时间来保持时间。
然后,证书验证通常使用CRL或OCSP来检查证书的状态。您可能已经理解,对于这样一个有限的平台,执行OCSP查找甚至只是解析CRL并不容易。
如果您巧妙地编程,则肯定可以通过证书验证CA的签名。但总的来说使用Card Verifiable Certificates (CVC's or CV-certificates)。这些是“扁平化”证书,具有更少的铃声和口哨声,更容易在智能卡中解析。
通过使用较新的,经过验证的证书的开始日期,您可以使用某种日期 ratchet ,其中使用证书本身中的日期更新时钟。但请注意,如果新证书暂时未经过验证,您仍然无法检测到过期证书。 CV证书通常不使用CRL,因此您必须要信任每个证书,否则您可能需要将某些证书列入黑名单。
尽管Java Card Connected版本可能会有更多的支持,但我认为这根本不会对你有所帮助,因为连接版本很少被发现。
CVC的原始规格可以在ISO/IEC 7816-8 standard: Identification cards — Integrated circuit cards — Part 8: Commands and mechanisms for security operations,附件A和附件中找到。 B.请注意,此标准是付费软件。
国际民航组织电子机读旅行证件和BSI TR 03110文件也定义了这些类型的证书,因此如果您更喜欢免费软件,最好根据这些证书制定。