2023年5月5日金曜日

ローカルハードウェア vs. クラウド

コンピュータリソースを オンプレミスからクラウドに移す流れの中で、従来、ローカル接続していたハードウェア(周辺機器)の一部も仮想化、実体をクラウドに置くようになった。

クラウドはコンピュータを仮想化して提供している。画面で構成を指定すればコンピュータが起動する。停止も画面から行う。クラウドのネットワーク構築も画面上でマウス/キーボードで行える。コンピュータ設置、OSインストール、ネットワーク設定、スイッチ、ルータの設置、ケーブル接続する作業をしたことがあれば、この仮想化がどれだけ便利か実感できる。

そのような実体験をしていると、なんでも仮想化してしまえば便利ではないか、という考えを抱くようになっても不思議ではない。実際にやってみると、それでうまくいってしまうようだ。

秘密鍵を保管する HSM(ハードウェアセキュリティモジュール)は、従来コンピュータに直接接続されたスマートカード(ハードウェア)に保管するしかなかった。現在は、クラウド化された HSM が利用できる。HSMを利用するプログラムは、HSMがどこにあっても関係なく操作できる。クラウド化された HSMは、 ユーザにとってハードウェアーを持っている必要はない。

弊社はソフトウェア保護ドングル( Matrix ) を扱っている。このドングルをクラウド化したものが vMatrix ( https://www.ribig.co.jp/vmatrix ) である。プログラムは Matrix APIを呼びだすが、APIはローカル接続の Matrixドングルを操作するのではなく、クラウドコンピュータとやり取りをする。原理は HSM クラウド化と同じ。

クラウド化したソリューションは、通常は問題なく動作する。問題はネットワークやクラウドコンピュータにトラブルが発生したときだ。ネットワーク/クラウドコンピュータのトラブルは発生するものとして、どれだけの期間継続するのかが問題になる。クラウドとは違うが、以前、サーバをレンタルしていた。ある日突然停止。どんなに長くても数時間で復旧すると思っていたが、最終的に3日ほどつかえなかった。国内にあると思っていたデータセンターが国外にあり、データセンタの火災が原因だった。何が起こるのか分からない。

不測の事態への対応方法はいろいろあろうが、ローカル接続のハードウェアでも動作するようにしておくことが最終的な解決方法ではないかと思う。となると、ローカル接続のハードウェアを常時使った方が良いことになる。


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



2023年5月4日木曜日

マイナンバーカードでWindowsアプリケーションにコード署名(Windows版)

Windows の 実行ファイルがアンチウィルスソフトによって感染していると誤検出されることがある。メジャーなアンチウィルスソフトは、実行ファイルにコード署名を見つけると誤検出しないようだ。

コード署名にはコード署名証明書が必要だ。有名どころのCAから取得すれば、コード署名するだけで、署名したEXEの出所は CA が証明してくれる。

独自CAを立てて、そのCAが発行した署名用証明書でコード署名するという手もあるが、”おれおれ”CAなので、署名したEXEの出所を自身で証明しているだけだ。コード署名した実行ファイルを渡す相手と直接やりとりがあり、相手が実行ファイルの出所がわかっていれば、特に実行ファイルの出所は問題にならないだろう。このような場合、”おれおれ”コード署名は、アンチウィルスソフトによって感染していると誤検出されること避ける目的だけに利用するときにはつかえるだろう。

”有名どころのCA”、”独自CA”の他に、マイナンバーカードの署名用証明書でコード署名する方法も可能なようだ。

マイナンバーカードでWindowsアプリケーションにコード署名をする

 https://qiita.com/binzume/items/3c09a7f2434e6c4478d9

JPKI 認証局(CA) が発行した個人がだれかを証明する証明書で、コード署名することになる。証明書内の個人情報(生年月日など)がコード署名した実行ファイルに含まれることになる。また、JPKI 認証局(CA) は事前に Windows の信頼されたルート証明機関には登録されていない。JPKI利用者ソフトなどをインストールすると登録される。

上の記事では Linux でコード署名。試してみると、カードリーダを Linux でうまく認識しない。やはり、ハードウェア接続がからんでくると、ほとんどの機種が対応しているのは Windows になる。そこで記事と同じ方法を Windows で試してみた。

結論からいうと Windows 64ビット版でいまくいった。osslsigncode は32ビット版としてビルドできなかった。

必要なバイナリを収めたZIPファイル

https://www.ribig.co.jp/personal/morikawa/myna-code-sign.zip

ZIPに含まれるPDFファイルに簡単な説明の記載がある。

感想としては、上の記事でのべられているのと同じになる。

マイナンバーカードの構造をしったり、どのように PKI 応用ができるか検証作業をするのが目的であれば、試してみる価値があると思う。