2023年5月5日金曜日

Pkcs#11 API

 マイナンバーカード関連記事を見ていると、既存ツールを使って操作していることが多いいようだ。Pkcs#11 を呼びだすようなプログラムを作成する例はあまり見かけない。

1.  Pkcs#11を使う機会が少ないー>使う開発者が少ない

2.  Pkcs#11 の仕様は英語。しかし、人気がないので日本語化されない。

3. 既存ツールでなんとか間に合ってしまう

4. Windows では別のAPIが用意されている

などが理由ではなかろうか。

メーカ依存しないスマートカードを操作する標準 API なので、 マイナンバーカードのようなスマートカードをいじるには重宝するはずだ。ただし、保存するデータ(証明書、鍵)の詳細を知らなければならないため、ある程度本格的に取り組む必要がある。このデータの扱いが面倒なことが、既存ツールを使う理由の1つでもあろう。

メーカ依存しないAPIという位置づけだが、実際には細かな違いがあるようだ。プログラム本体を変更せずに、Pkcs11モジュールを差し替えただけで、別のスマートカードが操作できたことはない。Pkcs11仕様は緩いため、解釈によって実装は異なる。モジュール/スマートカード毎の対応が必要なことがある。

スマートカード(トークン)メーカは必要最小限のツールは添付するが、あとは pkcs11 モジュールを使ってユーザ自身でやりたいことを実現してね、という提供方法をしている。スマートカード(トークン)に詳しいユーザは自由で扱えるだろうが、それ以外では使いこなすまでかなり手間がかかる。リビッグでは、 スマートカードトークンmTokenをトークンをすぐに使えるように専用ツールを用意、トークン入手後すぐに使えるはずである。

マニュアル https://www.ribig.co.jp/mtoken/download/pki_util.pdf

FireFox はかなり前から Pkcs#11 を組み込んでいた。スマートカードを操作するためでなく、秘密鍵のファイルへの保存を Pkcs#11 でやっていた。その Pkcs#11 は受け取ったコマンドでスマートカード操作ではなくファイル操作をしていた。当初は秘密鍵をスマートカードに保存するつもりだったのだが、誰もがスマートカードを持っているわけではないため、ファイルをバックエンドとして使うことにしたのではないかと思う。

最近は AWS などでクラウドが Pkcs#11のバックエンドとして使われている。プログラムによるPkcs#11 APIを呼びだしが、ライブラリによりクラウドに対して行われる。ローカルに接続したスマートカードではなく、クラウド上のリモートコンピュータにコマンドが送られて、そのリモートコンピュータが処理した結果が返されるという仕組みである。この方法だと、秘密鍵が別ハードウェア(リモートコンピュータ)に置かれるため、スマートカードとセキュリティ的に同等になる。

Pkcs11では秘密鍵を格納した(仮想)デバイス(スマートカード、リモートコンピュータ、ファイル)から取り出さずに暗号/復号が行える。Pkcs11 はスマートカードを操作するのではなく、スマートカードの機能(秘密鍵のセキュアな管理)を操作する API というのが正確になるだろう。マイナンバーカードを操作するというとハッキングを連想させるかもしれないが、マイナンバーカード(スマートカード)本来の機能を呼びだしているにすぎない。その結果を悪用するとハッキングになる。

プログラムから見ると同じ API、つまり、同じように操作できるのだが、コマンドが送られる先が、ローカル接続のハードウェアであるとレガシーと呼ばれ、クラウドであると時流にのっていると最近では呼ばれる。これは、ローカルハードかクラウドかという問題になるため、別の記事で取り上げたい。



0 件のコメント:

コメントを投稿