ICカードの電子署名について
こんにちは。開発部の野村です。
平成28年1月から個人番号カードの交付が始まりました。すでにお持ちになっている方も多いと思います。ご存知のとおり、個人番号カードには公的個人認証サービスの電子証明書が格納されていますので、個人番号カードを利用して電子署名が可能です。
これを踏まえて、今回はICカードを使った電子署名がどのように行われているかを、簡単に紹介したいと思います。
個人番号カードは、媒体としてICカードが採用されています。ICカードにはIC チップが埋め込まれており、ICカード自体で、情報の記録や演算処理ができるようになっています。このICカードの機能を利用することで、電子署名の際にはICカードに記録された秘密鍵情報(実印相当)を外部に出すことなく、カード内部で署名データの作成ができます。そのため、PKCS#12のようなファイルベースの証明書よりも安全な運用が可能と考えられています。
このようなICカードがもつ署名データ作成等の機能を、外部の署名アプリケーションが利用できるようにするため、ICカードのドライバには、様々なコマンドが用意されています。ただ、このドライバが用意するコマンドは、基本的にICカード毎に異なりますので、署名アプリケーションがコマンドをそのまま利用した場合は、対応するICカードが増えるたびに、新しいプログラムを作成する必要があります。これでは署名アプリケーションの開発に多大な時間が必要となりますし、ICカードベンダーとしても、カード普及への大きな障害となってしまいます。
これを解決するのがPKCS#11とCryptoAPIのCSPです。PKCS#11はRSA Security社によって、CryptoAPIはMicrosoft 社によって策定されたもので、簡単に言えば、どちらもICカードに格納された証明書を外部のプログラムから利用するための標準インターフェースを定めた規約です。
多くのICカードベンダは、ICカードのドライバと一緒に、これらの規約に準拠したライブラリも提供してくれています。ICカードベンダが用意するライブラリは、外部の署名アプリケーションとICカードのドライバとのブリッジとして動作します。そのため、署名アプリケーションは、これらの標準インターフェースに対応しておけば、ICカード毎に新しいプログラムを作成する必要はなくなります。
こうしてみると、標準インターフェースに対応した署名アプリケーションであれば、全てのICカードへに対応しているように見えますが、落とし穴もあります。
PKCS#11とCryptoAPIは規約を定めているだけで、提供するライブラリが全てのインターフェースをサポートするかどうか、どのような実装にするかは、作成者であるICカードベンダーに任されています。そのため、ICカードによっては外部アプリケーションから上手く使用できない可能性があるのです。
現在、弊社では個人番号カードの動作検証を行っております。検証が終わり次第、電子認証キットや権、表のバージョンアップを予定しておりますので、ご期待下さい。