2017-05-15 10 views
3

私はJavaで証明書を確認する方法を知っていますが、私はJavaカードAPIの制限のためにJavaカードでそれを行う方法を知らない(java.io /他のクラスなし、javacard API + Object + Throwableのみが許可されています)。Java Cardで証明書の有効性を確認する方法は?

証明書用のjavacard互換ライブラリが見つかりませんでした。私は何かが欠けていたか?

証明書がCAによって署名されていることと、証明書の有効性を確認する必要があることを確認する必要があります。

答えて

6

通常、証明書を検証することは、スマートカードにとっては難しい作業です。これらの証明書は、サイズが2キロバイトを超えることがよくあります。それは汎用PCのためのピーナッツですが、ハイエンドカードはたいてい8KバイトのRAMしか搭載しないスマートカード用ではありません。それは、OS、暗号コプロセッサ、APDUバッファ、そしてもちろんあなたのアプレットの間で共有されています。

別の問題があります。通常、スマートカードにはクロックが含まれていません。これは、証明書が正当な期間内であることを確認するのは難しいことです。基本的に時間を守る信頼できる方法が必要です。

証明書の検証では、CRLまたはOCSPを使用して証明書のステータスを確認することがよくあります。あなたが理解しているように、OCSPルックアップの実行やCRLの解析だけでも、そのような限定されたプラットフォームでは容易ではありません。

スマートにプログラムすると、の証明書でCAのの署名が確実に確認できます。しかし、一般的にはCard Verifiable Certificates (CVC's or CV-certificates)が使用されます。これらは、スマートカード内で解析するのが簡単な、鐘や笛の少ない「平坦化された」証明書です。

新しい証明済み証明書の開始日を使用すると、日付の一部を使用することができますratchet証明書自体の日付を使用して時計が更新されます。ただし、新しい証明書がしばらく検証されていなければ、古い証明書を検出することはできません。 CV証明書は一般にCRLを使用しないため、各証明書を信頼する必要があります。また、一部の証明書が侵害された場合にブラックリストに登録する必要があります。

Java Card Connected Editionではもう少しサポートされる可能性がありますが、接続されたエディションがめったに見つからないため、これはまったく役に立ちません。 CVCのため


元の仕様はISO/IEC 7816-8 standard: Identification cards — Integrated circuit cards — Part 8: Commands and mechanisms for security operationsに見出すことができ、この規格は有料ソフトであること& B.注附属書。

ICAO eMRTDとBSI TR 03110のドキュメントでもこの種の証明書が定義されています。したがって、フリーウェアが好きな人は、証明書の仕様をベースにする方がよいでしょう。

関連する問題