PDFファイルやアプリケーション,デバイスドライバーなどにデジタル署名をするときに,マイナンバーカードに保存されている署名用証明書と署名用秘密鍵を利用することが出来るようだ。
マイナンバーカードは日本の行政機関の「地方公共団体情報システム機構」が第三者として発行している証明書が保存されていて,それは住民票などのデータを元にしているので本人確認として信頼出来る証明書となっている。
日本国民であればマイナンバーカードは無料で取得することが出来て既に大方の日本人が持っている。また,マイナンバーカードに保存されている電子証明書は無料で利用できるので,公的に有効で信頼性が高いデジタル署名をする時には利用しやすい。
マイナンバーカードには2種類の電子証明書が保存されている。
この署名用電子証明書と秘密鍵を,PDFファイルやアプリケーション,デバイスドライバー等のデジタル署名時に使用できる。
マイナンバーカードで注意することとして,マイナンバーカードの有効期限とは別にマイナンバーカードに保存されている電子証明書には有効期限があり,その有効期限は発行日から5年間となっている。
有効期限が過ぎた場合は,役所の窓口に行って証明書の再発行をする必要がある。
また住所や氏名が変更になった場合,署名用電子証明書は自動で失効してしまうので,14日以内にマイナンバーカードの記載事項の変更と電子証明書の再発行をする必要がある。
マイナンバーカードを使って,PDFファイルやアプリケーションにデジタル署名することを試してみた。
PDFファイルは文書を電子化してファイルにしたもので,アプリケーションやOS,ハードウェアなどに依存しない電子文書ファイル。
WEBページ上の文書やソフトウエアの説明書など,広く公開・頒布する形で多く利用されている。また,公的に使用する文書等でも標準的に使われている。
マイナンバーカードの署名用電子証明書を使ってこのようなPDFファイルにデジタル署名をする方法には,いくつか方法がある。
デジタル署名時に必要な機器として,PCと接続してマイナンバーカードの読み取りをするためにICカードリーダーが必要になる。
デジタル署名をする時にマイナンバーカードをICカードリーダーにセットしながら署名する必要があるから。
これはちょっと面倒なのだが,マイナンバーカードには署名用秘密鍵が格納されているが読み出すことは出来なくなっている。デジタル署名する時に秘密鍵が必要になるのだが,マイナンバーカード内で秘密鍵を使って暗号化処理をしてもらう必要があるので,これはしょうがない。
Adobe Acrobat(有償版*1の32bit版。Acrobat Readerではない)でマイナンバーカードを使ってデジタル署名をする場合,法務局の登記・供託オンライン申請システムが配布しているPDF署名プラグインが使用出来る。
Adobe Acrobatには,7日間は無料で使用可能な体験版があるようだ。
Adobe Acrobatをインストール後,PDF署名プラグインをダウンロードして,ダブルクリックしてインストールする。
このプラグインが動作するのは32bit版Adobe Acrobatのみのようなので注意する。特に更新時に32bit版から64bit版になってしまうこともある。
Adobe Acrobat Pro(32bit版) Adobe Acrobat Standard(32bit版)
Adobe Acrobatは購入していないので,実際に動作を確認していない。
PDFファイルを見るときに標準ツールなAdobe Acrobat Reader(無料版)では,上記のPDF署名プラグインは動作しない。
代わりにOpenSCを使用するとマイナンバーカードを使ってAcrobat Readerで,デジタル署名することが出来る。
準備は以下のようにする。
C:\Program Files\OpenSC Project\OpenSC\pkcs11\opensc-pkcs11.dll
名前: ts.ssl.com url: http://ts.ssl.com
署名したいPDFファイルをAdcrobat Readerで開いて,メニューから「証明書を使用」をクリックする。
デジタル署名をクリックし,署名をしたい場所をドラッグすると署名に使う証明書の選択画面が表示されるので,PKCS#11がある照明書にマークをして続行をクリックする。
これでPDFファイルにデジタル署名を行うことが出来た。署名のデザインは好みに設定できる。
無料で使用できるJPKI PDF SIGNERを使用して,PDFファイルに後からデジタル署名(マイナンバーカードの署名用電子証明書)することが出来る。
このアプリでデジタル署名したPDFファイルは,法人登記手続きにも使用することが出来るそうだ。
使用するには,地方公共団体情報システム機構のJPKI利用者ソフトが必要になる。
JPKI利用者ソフト(地方公共団体情報システム機構)を,PDFファイルにデジタル署名をする時に利用することが出来る。
JPKI利用者ソフトはここからダウンロードして,PCにインストールする。
このJPKI利用者ソフトは,以下のことが行える。
JPKI PDF SIGNERは,ここからインストーラーがダウンロードできる。
zipファイルを任意のディレクトリに解凍して,インストーラーを実行する。
PDFファイルに署名するには以下の手順で行う。
JSignPDFはPDFファイルにデジタル署名をすることが出来るフリーソフト。
マイナンバーカードの署名用証明書と秘密鍵を使ってデジタル署名する場合は,マイナンバーカードを読み取るためOpenSCが必要となる。
OpenSCはクロスプラットフォームで動作する,ICカード用のツール・ライブラリ。PKCS#11とPKCS#15に対応している。
主にICカード/ICカードリーダーとアプリケーション間で動作するミドルウェアとして使用される。
またWEBブラウザや電子メールクライアント等で利用したり,OpenSSLやNSSなどの暗号化ライブラリ・プログラムのバックエンドとしても利用することが出来る。
日本の人がマイナンバーカードに対応するようにカードドライバーを開発されたおかげで,バージョン0.17.0以降,マイナンバーカードに対応している。
OpenSCのインストールはここからインストーラーをダウンロードして,ファイルをダブルクリックしてインストールする。利用するアプリケーションが64bit版ならOpenSCも64bit版をインストールする。
インストール後,OpenSC\toolsディレクトリを実行pathに追加しておく。
その後動作確認として,マイナンバーカードから署名用電子証明書をファイルとして保存してみる。
コマンドプロンプトを起動して,pkcs11-toolコマンドで署名用電子証明書をcertificate.derファイルに保存してみる。--slot-index 1で署名用電子証明書を指定している。0だと認証用の電子証明書になる。
> pkcs11-tool --login --slot-index 1 --read-object --type cert --label "Digital Signature Certificate" --output-file certificate.der
これがうまく行けば,OpenSCのインストールは問題ない。
JSignPdfはここのDownloadをクリックするとインストーラーがダウンロード出来る。
ダウンロードしたファイルをダブルクリックで,任意のディレクトリにインストールできる。
JSignPdfをインストールしたディレクトリにあるconf\conf.propertiesファイルを編集する。
pkcs11config.path=conf/pkcs11.cfg
コメントを外してpkcs11.cfgが使えるようにする。
JSignPdfをインストールしたディレクトリにあるconf/pkcs11.cfgファイルを以下の内容で編集する。
name=OpenSC-PKCS11 library="C:\\Program Files\\OpenSC Project\\OpenSC\\pkcs11\\opensc-pkcs11.dll" slot=1
OpenSCのライブラリが参照できるように設定している。
PDFファイルにデジタル署名をしてみる。
http://ts.ssl.com
その後,Sign Itボタンをクリックすると署名が追加されたPDFファイルが作成される。
コマンドプロンプトでPDFファイルにデジタル署名する場合は,
> java -jar Java/JSignPdf.jar -kst PKCS11 -ksp 署名用の暗証番号 -ts http://ts.ssl.com 署名したいpdfファイル名.pdf
とすると,デジタル署名された署名したいpdfファイル名_sigined.pdfファイルが作成される。
マイナンバーカードの署名用電子証明書と秘密鍵でデジタル署名した場合,そのデジタル署名の検証をするためには,日本の公的個人認証サービス(JPKI)を信頼できる認証局として扱う必要がある。
Acrobat ReaderなどのPDF表示アプリケーションには,PDFファイルに付与されている電子署名を検証する機能がある。
しかしAcrobat Readerのデフォルト設定だと,すべてのデジタル署名を検証出来るように設定されていない。
公的個人認証サービス(JPKI)で配布されているしている認証局(CA)の自己署名証明書が証明書ストアに登録されていない状態だと,Acrobat Readerで署名されたPDFを開くと,
少なくとも 1つの署名に問題があります。
というメッセージが表示される。これが表示される場合は,まだデジタル署名を検証出来ていないことを意味する。
なので公的個人認証サービス(JPKI)で配布されている認証局(CA)の自己署名証明書を証明書ストアの「信頼されたルート証明書」に登録して,デジタル署名を検証出来るようにする必要がある。
ここではAcrobat Readerでマイナンバーカードによる署名を検証する方法を説明する。
他のPDF表示アプリケーションでも,同様の手順で設定をすることができると思う。
まず,公的個人認証サービス(JPKI)が配布している認証局(CA)の自己署名証明書を以下のサイトから手に入れる。
署名用認証局の運営に関する情報サイトから,有効期間の新しい署名用認証局の自己署名証明書(CER ・ 2KB)をダウンロードする。
4年ごとに新しい有効期間が設定された証明書が公開されていくようだ。
最新の証明書は,署名用認証局の自己署名証明書(有効期間 2019 年 9 月 15 日~2029 年 9 月 14 日)(CER ・ 2KB)だった。
署名用認証局の自己署名証明書(有効期間2023年7月16日~2033年7月15日)(CER・2KB)になっている。
ダウンロードしたCA署名証明書ファイルを証明書ストアに登録する方法として,
の2つの方法がある。
Acrobat Readerには,専用のCA証明書ストアがある。ここにCA証明書を登録することで,Acrobat Readerでデジタル署名を検証出来るようになる。
これで,Acrobat ReaderへのCA自己署名証明書の登録ができた。
以後,マイナンバーカードでデジタル署名されたPDFファイルをAcrobat Readerで開くと,
「署名済みであり、 すべての署名が有効です。」
と表示される。
Acrobat ReaderにCA自己署名証明書を登録した場合は,他のアプリケーションではデジタル署名の検証は出来ない。
Windowsの証明書ストアにCA署名証明書を登録すると,ほとんどのアプリケーションでデジタル署名の検証を行えるようになる。
これで,Windowsの証明書ストアにCA自己署名証明書が登録ができた。
Windowsの証明書ストアにCA自己署名証明書を登録しただけでは,Acrobat Readerでデジタル署名を検証出来るようにはならない。
これは,Acrobat Readerのデフォルト設定では,デジタル署名を検証するのにWindowsの証明書ストアを参照するように設定されていないため。
以下のようにして,Windowsの証明書ストアを参照するように設定する。
これで,Acrobat ReaderでもWindowsの証明書ストアを参照して,デジタル署名を検証出来るようになる。
以後,マイナンバーカードを使ってデジタル署名されたPDFファイルを開くと,
署名済みであり、 すべての署名が有効です。
と表示される。
MicrosoftのAuthenticodeは,アプリケーション(exe, msi, cab)や共有ライブラリ(dll),デバイスドライバー(sys, cat)なんかにデジタル署名して,それを検証することで安全性を高めるシステム。
Windowsではアプリケーションの実行時やデバイスドライバー使用時にそのデジタル署名をチェックして,場合によっては実行をブロックしたり警告のダイアログを表示したりしている。
通常はMicrosoftや第三者認証局からコード署名用の電子証明書を取得(有料)して,それを使ってデジタル署名をする。
マイナンバーカードには署名用の電子証明書が保存されている。用途仕様には特に規制が無いようなので,多くの場面でデジタル署名に利用できると思われる。
試しに署名ツールを使って,マイナンバーカードの署名用電子証明書と署名用秘密鍵で,実行ファイルにデジタル署名をしてみた。
Windowsでデジタル署名を行う場合は,Windows Driver Kitにあるsigntoolを使うのだが,マイナンバーカードにアクセスしてデジタル署名する方法がわからなかった。-cspオプションや-kcオプションなどを使えば出来そうなのだが・・・
しょうがないのでsigntoolの代替えツールとして,無料で使用できるosslsigncodeツールを見つけた。
osslsigncodeはOpenSSLとcurlライブラリを利用してデジタル署名することが出来るツールで,マルチプラットフォームで動作する。~
このツールをWindowsマシンへインストールするには,osslsigncodeのReleaseからWindows用のosslsigncode-2.7-windows-x64-static-vs.zipとpkcs11.dllをダウンロードして,実行pathが通ったディレクトリにosslsigncode.exeとpkcs11.dllをコピーすればいいようだ。
MSYS2・MinGW-w64環境がある場合は,パッケージ管理ツールpacmanでインストール出来る。
$ pacman -S mingw-w64-x86_64-osslsigncode mingw-w64-i686-osslsigncode
osslsigncodeはOpenSCのPKCS#11モジュールを使用できるようなので,これでマイナンバーカードにアクセス出来るはず。
準備として,マイナンバーカードから読み出した署名用の電子証明書certificate.derファイルを,osslsigncodeで使用できるようにpemファイルのcertificate.pemに変換しておく。
> openssl x509 -in certificate.der -inform DER -out certificate.pem -outform PEM
試しにtest.exeという実行ファイルを用意して,マイナンバーカードの署名用電子証明書のcertificate.pemとマイナンバーカードに入っている秘密鍵を使ってデジタル署名してみる。
osslsigncodeコマンドで-pkcs11moduleでOpenSCのモジュールを指定して,-pkcs11engineオプションでpkcs11.dllを指定して,マイナンバーカードにアクセス出来るようにする。-h sha256オプションでダイジェストアルゴリズムを,-key 1:2オプションで署名用の秘密鍵を指定する。マイナンバーカードには秘密鍵が2個あるので,オプション指定しないと利用者証明用の秘密鍵が使われてしまうので注意する。もしオプション指定しないで暗証番号を3回間違えると,マイナンバーカードがロックされてしまう。
タイムスタンプも付けたほうが良いと思うので,DigiCertのタイムスタンプサーバを指定してみた。
ICカードリーダーをPCに接続してマイナンバーカードをセットして,コマンドプロンプトから以下のコマンドを実行した。
> osslsigncode sign -certs certificate.pem -pkcs11module "C:\Program Files\OpenSC Project\OpenSC\pkcs11\opensc-pkcs11.dll" -pkcs11engine "C:\WinApl\exe\pkcs11.dll" -key 1:2 -h sha256 -t http://timestamp.digicert.com -in test.exe -out test_signed.exe Engine "pkcs11" set. Enter PKCS#11 token PIN for JPKI (Digital Signature PIN): xxxxxxxxxxx Enter PKCS#11 key PIN for Digital Signature Key: xxxxxxxxxxx Succeeded
署名用の暗証番号を2度入力する。Succeededって表示されたので,これでデジタル署名出来たようだ。
Windowsのエクスプローラーでtest_signed.exeを右クリックしてプロパティを開くと,デジタル署名されているのが確認できた。
Windowsがデジタル署名を検証することが出来るように,認証局(CA)の署名証明書を証明書ストアに登録しておく必要がある。(もしくは,マイナンバーカードから認証局(CA)の署名証明書を書き出して証明書ストアに登録する。)
このようにして,自分のマイナンバーカードを使って信頼性があるデジタル署名を無料で行える。
新しくコメントをつける