マイナンバーカードを使ってデジタル署名をする anchor.png

PDFファイルやアプリケーション,デバイスドライバーなどにデジタル署名をするときに,マイナンバーカードに保存されている署名用証明書と署名用秘密鍵を利用することが出来るようだ。

マイナンバーカードは日本の行政機関の「地方公共団体情報システム機構」が第三者として発行している証明書が保存されていて,それは住民票などのデータを元にしているので本人確認として信頼出来る証明書となっている。

日本国民であればマイナンバーカードは無料で取得することが出来て既に大方の日本人が持っている。また,マイナンバーカードに保存されている電子証明書は無料で利用できるので,公的に有効で信頼性が高いデジタル署名をする時には利用しやすい。

マイナンバーカードには2種類の電子証明書が保存されている。

  • 利用者証明用電子証明書・認証局CA認証用証明書とその秘密鍵・公開鍵
    オンライン上の手続きなどで本人認証をする時に利用される証明書。
    ユーザー認証時にマイナンバーカードを使うことで,なりすましでないことを証明できる。
  • 署名用電子証明書・認証局CA署名証明書とその秘密鍵・公開鍵
    作成した電子文書に対してデジタル署名する時に使用する証明書。
    確定申告を行う時の電子申請などで,申告用ファイルにデジタル署名する時に主に使用されている。

この署名用電子証明書と秘密鍵を,PDFファイルやアプリケーション,デバイスドライバー等のデジタル署名時に使用できる。

マイナンバーカードで注意することとして,マイナンバーカードの有効期限とは別にマイナンバーカードに保存されている電子証明書には有効期限があり,その有効期限は発行日から5年間となっている。
有効期限が過ぎた場合は,役所の窓口に行って証明書の再発行をする必要がある。
また住所や氏名が変更になった場合,署名用電子証明書は自動で失効してしまうので,14日以内にマイナンバーカードの記載事項の変更と電子証明書の再発行をする必要がある。

マイナンバーカードを使って,PDFファイルやアプリケーションにデジタル署名することを試してみた。

Page Top

PDFファイルにデジタル署名をする方法 anchor.png

PDFファイルは文書を電子化してファイルにしたもので,アプリケーションやOS,ハードウェアなどに依存しない電子文書ファイル。
WEBページ上の文書やソフトウエアの説明書など,広く公開・頒布する形で多く利用されている。また,公的に使用する文書等でも標準的に使われている。

マイナンバーカードの署名用電子証明書を使ってこのようなPDFファイルにデジタル署名をする方法には,いくつか方法がある。

デジタル署名時に必要な機器として,PCと接続してマイナンバーカードの読み取りをするためにICカードリーダーが必要になる。
デジタル署名をする時にマイナンバーカードをICカードリーダーにセットしながら署名する必要があるから。

これはちょっと面倒なのだが,マイナンバーカードには署名用秘密鍵が格納されているが読み出すことは出来なくなっている。デジタル署名する時に秘密鍵が必要になるのだが,マイナンバーカード内で秘密鍵を使って暗号化処理をしてもらう必要があるので,これはしょうがない。

Page Top

Adobe AcrobatとPDF署名プラグインを使用する anchor.png

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は購入していないので,実際に動作を確認していない。

Page Top

Adobe Acrobat Reader(無料版)とOpenSCを使用する anchor.png

PDFファイルを見るときに標準ツールなAdobe Acrobat Reader(無料版)では,上記のPDF署名プラグインは動作しない。

代わりにOpenSCを使用するとマイナンバーカードを使ってAcrobat Readerで,デジタル署名することが出来る。

準備は以下のようにする。

  • Acrobat Readerをインストールする。
  • OpenSCをインストールする。
  • カードリーダーをPCに接続し,マイナンバーカードをセットする。
  • Acrobat Readerを起動する。
  • メニュー>環境設定>セキュリティ(拡張)で「起動時に保護モードを有効にする」のマークを外す。
    この設定にするとAcrobat ReaderはAppContainer内での保護された動作ではなくなる。
  • メニュー>環境設定>署名>IDと信頼済み証明書の詳細をクリック。
    「PCS#11モジュールおよびトークン」でモジュールを追加をクリックする。
    C:\Program Files\OpenSC Project\OpenSC\pkcs11\opensc-pkcs11.dll
    を選択する。
    追加後,利用するのは署名用証明書なのでサブメニューのOpenSC smartcard frameworkを選択して,Digital Signature PIN (JPK)でログインをして,署名用暗証番号を入力してログインしておく。
  • タイムスタンプサーバーの設定
    デジタル署名時にタイムスタンプを追加したいので,デフォルトで使用するタイムスタンプサーバーを設定する。
    メニュー>環境設定>セキュリティ>サーバーの設定の詳細ボタンをクリックしてタイムスタンプサーバーを選択して,
    名前: ts.ssl.com
    url:  http://ts.ssl.com
    のように,契約しているタイムスタンプ認証局があればそのURLを,なければ無料で利用できるタイムスタンプサーバーを設定しておく。
    これで,PDFファイルにデジタル署名する準備が出来た。

署名したいPDFファイルをAdcrobat Readerで開いて,メニューから「証明書を使用」をクリックする。
デジタル署名をクリックし,署名をしたい場所をドラッグすると署名に使う証明書の選択画面が表示されるので,PKCS#11がある照明書にマークをして続行をクリックする。

これでPDFファイルにデジタル署名を行うことが出来た。署名のデザインは好みに設定できる。

Page Top

JPKI PDF SIGNERとJPKI利用者ソフトを使用する anchor.png

無料で使用できるJPKI PDF SIGNERを使用して,PDFファイルに後からデジタル署名(マイナンバーカードの署名用電子証明書)することが出来る。
このアプリでデジタル署名したPDFファイルは,法人登記手続きにも使用することが出来るそうだ。

使用するには,地方公共団体情報システム機構のJPKI利用者ソフトが必要になる。

Page Top

JPKI利用者ソフトのインストール anchor.png

JPKI利用者ソフト(地方公共団体情報システム機構)を,PDFファイルにデジタル署名をする時に利用することが出来る。
JPKI利用者ソフトはここからダウンロードして,PCにインストールする。

このJPKI利用者ソフトは,以下のことが行える。

  • ICカードリーダーの動作確認。
  • マイナンバーカード内の署名用電子証明書の内容・有効性確認。
  • 失効申請を行う。
  • アプリケーションとマイナンバーカード間のミドルウェア機能。
    マイナンバーカードのAPIを使用して,アプリケーションがマイナンバーカードにアクセスできるようにする。
Page Top

JPKI PDF SIGNERでPDFファイルに署名する anchor.png

JPKI PDF SIGNERは,ここからインストーラーがダウンロードできる。
zipファイルを任意のディレクトリに解凍して,インストーラーを実行する。

PDFファイルに署名するには以下の手順で行う。

  • ICカードリーダーをPCに接続し,マイナンバーカードをセットする。
  • JPKI PDF SIGNERを起動する。
  • 右の+追加で印影の画像を登録できる。
    印影をPDFファイルに入れたい場合は,印影をスキャンした画像ファイルを指定する。
  • ファイル>開くでPDFファイルを選択する。
    PDFファイルが表示される。
  • 印影をクリックして,PDFファイルの好みの位置を指定する。
  • 署名用の暗証番号を聞かれるので入力する。
    この時,暗証番号を5回間違うと以後マイナンバーカードが使用できなくなるので注意する。
  • PDFファイルに署名が追加され,PDFファイルが作成される。
Page Top

JSignPdfとOpenSCを使用する anchor.png

JSignPDFはPDFファイルにデジタル署名をすることが出来るフリーソフト。

マイナンバーカードの署名用証明書と秘密鍵を使ってデジタル署名する場合は,マイナンバーカードを読み取るためOpenSCが必要となる。

Page Top

OpenSC anchor.png

OpenSCはクロスプラットフォームで動作する,ICカード用のツール・ライブラリ。PKCS#11PKCS#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のインストールは問題ない。

Page Top

JSignPDFのインストール anchor.png

JSignPdfはここのDownloadをクリックするとインストーラーがダウンロード出来る。
ダウンロードしたファイルをダブルクリックで,任意のディレクトリにインストールできる。

Page Top

JSignPdfでマイナンバーカードを使用する時の設定 anchor.png

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のライブラリが参照できるように設定している。

Page Top

JSignPdfでPDFファイルに署名する anchor.png

PDFファイルにデジタル署名をしてみる。

  • PCとICカードリーダーを接続して,マイナンバーカードをセットする。
  • JSignPdfを起動する。
  • キーストアタイプにPKCS11を選択する。
    マイナンバーカードをICカードリーダーにセットしておかないと,PKCS11はリストに表示されない。
  • キーストアパスワードに署名用の暗証番号を設定する。
    署名用の暗証番号を5回間違うと,以後マイナンバーカードが使用できなくなるので注意する。
  • 入力PDFファイルに,署名を追加したいPDFファイルを指定する。
  • 出力PDFファイルに,出力するPDFファイルを指定する。
  • TSA/OCSP/CRLをクリックして,TSA(タイムスタンプサーバー)を使うにマークする。
    TSL URLに,
    http://ts.ssl.com
    のように,契約しているタイムスタンプ認証局のURLか,無料で利用できるタイムスタンプサーバーを設定する。
  • 「署名を追加する」にマークする。
  • 「可視署名をする」にマークする。
    右の設定で,署名する場所と署名時に使用する画像と文字列等を設定出来るので,好みの署名になるように設定する。
    ただし,残念ながら日本語での文字列は正しく署名されない。
    可視署名をしない場合は,マークをしない。

その後,Sign Itボタンをクリックすると署名が追加されたPDFファイルが作成される。

コマンドプロンプトでPDFファイルにデジタル署名する場合は,

> java -jar Java/JSignPdf.jar -kst PKCS11 -ksp 署名用の暗証番号 -ts http://ts.ssl.com 署名したいpdfファイル名.pdf

とすると,デジタル署名された署名したいpdfファイル名_sigined.pdfファイルが作成される。

Page Top

PDFファイルのデジタル署名の検証 anchor.png

マイナンバーカードの署名用電子証明書と秘密鍵でデジタル署名した場合,そのデジタル署名の検証をするためには,日本の公的個人認証サービス(JPKI)を信頼できる認証局として扱う必要がある。

Acrobat ReaderなどのPDF表示アプリケーションには,PDFファイルに付与されている電子署名を検証する機能がある。
しかしAcrobat Readerのデフォルト設定だと,すべてのデジタル署名を検証出来るように設定されていない。

Page Top

認証局(CA)の証明書がインストールされていない場合 anchor.png

公的個人認証サービス(JPKI)で配布されているしている認証局(CA)の自己署名証明書が証明書ストアに登録されていない状態だと,Acrobat Readerで署名されたPDFを開くと,

少なくとも 1つの署名に問題があります。

というメッセージが表示される。これが表示される場合は,まだデジタル署名を検証出来ていないことを意味する。

なので公的個人認証サービス(JPKI)で配布されている認証局(CA)の自己署名証明書を証明書ストアの「信頼されたルート証明書」に登録して,デジタル署名を検証出来るようにする必要がある。

ここではAcrobat Readerでマイナンバーカードによる署名を検証する方法を説明する。
他のPDF表示アプリケーションでも,同様の手順で設定をすることができると思う。

Page Top

認証局(CA)の署名証明書をダウンロードする anchor.png

まず,公的個人認証サービス(JPKI)が配布している認証局(CA)の自己署名証明書を以下のサイトから手に入れる。

署名用認証局の運営に関する情報サイトから,有効期間の新しい署名用認証局の自己署名証明書(CER ・ 2KB)をダウンロードする。
4年ごとに新しい有効期間が設定された証明書が公開されていくようだ。
最新の証明書は,署名用認証局の自己署名証明書(有効期間 2019 年 9 月 15 日~2029 年 9 月 14 日)(CER ・ 2KB)だった。
署名用認証局の自己署名証明書(有効期間2023年7月16日~2033年7月15日)(CER・2KB)になっている。

ダウンロードしたCA署名証明書ファイルを証明書ストアに登録する方法として,

  • Acrobat Reader独自の証明書ストアに登録する。
  • Windowsの証明書ストアに登録する。

の2つの方法がある。

Page Top

Acrobat Reader独自の証明書ストアにCA署名証明書を登録する方法 anchor.png

Acrobat Readerには,専用のCA証明書ストアがある。ここにCA証明書を登録することで,Acrobat Readerでデジタル署名を検証出来るようになる。

  • Acrobat Readerを起動して,メニューバーから編集>環境設定...を選択する。
  • 左側の「署名」をクリックして,右側の「IDと信頼済み証明書」欄の詳細...をクリックする。
  • デジタルIDと信頼済み証明書の設定ウィンドウが開く。
    左側の「信頼済み証明書」をクリックして,右側の取り込みボタンをクリックする。
  • 取り込む連絡先の選択ウィンドウが開くので,参照ボタンをクリックしてダウンロードしたCA自己署名証明書ファイル(signca03.cer)を選択する。
  • CA自己署名証明書ファイル(signca03.cer)の内容が表示されるので,取り込みボタンをクリックする。
  • 取り込みの終了ダイアログが表示される。OKをクリック。
  • 証明書の一覧に,「名前=公的個人認証サービス、 証明書の発行者=JPKI」が追加されている。 この「公的個人認証サービス」を選択状態 にして信頼性を編集ボタンをクリックする。
  • 証明書の信頼性を編集ウィンドウが開くので,「この証明書を信頼済みのルートとして使用」にチェックを入れて,OKボタンをクリック。

これで,Acrobat ReaderへのCA自己署名証明書の登録ができた。

以後,マイナンバーカードでデジタル署名されたPDFファイルをAcrobat Readerで開くと,

「署名済みであり、 すべての署名が有効です。」

と表示される。

Acrobat ReaderにCA自己署名証明書を登録した場合は,他のアプリケーションではデジタル署名の検証は出来ない。

Page Top

WindowsにCA署名証明書を登録する方法 anchor.png

Windowsの証明書ストアにCA署名証明書を登録すると,ほとんどのアプリケーションでデジタル署名の検証を行えるようになる。

  • ダウンロードしたCA自己署名証明書(signca03.cer等)をダブルクリックして,開くをクリックする。
  • 証明書のインストール...をクリックして,次へをクリック。
  • 「証明書をすべて次のストアに配置する」を選択して,参照...をクリックする。
  • 「信頼されたルート証明機関」を選択してOKをクリックする。
  • 証明書ストアの表示を確認して,次へをクリック。
  • 完了をクリック。
  • セキュリティ警告が表示されるので,はいをクリック。
  • OKをクリックする。残っている証明書ウィンドウは閉じる。

これで,Windowsの証明書ストアにCA自己署名証明書が登録ができた。

Page Top

Acrobat ReaderのWindows統合を設定する anchor.png

Windowsの証明書ストアにCA自己署名証明書を登録しただけでは,Acrobat Readerでデジタル署名を検証出来るようにはならない。
これは,Acrobat Readerのデフォルト設定では,デジタル署名を検証するのにWindowsの証明書ストアを参照するように設定されていないため。

以下のようにして,Windowsの証明書ストアを参照するように設定する。

  • Acrobat Readerを起動して,メニューから編集>環境設定...を選択する。
  • 左側の分類で「署名」を選択して,右の検証欄にある詳細...ボタンをクリックする。
  • 署名検証の環境設定ウィンドウが開く。
  • Windows統合の欄にある「署名を検証」にチェックを入れて,OKをクリックする。

これで,Acrobat ReaderでもWindowsの証明書ストアを参照して,デジタル署名を検証出来るようになる。

以後,マイナンバーカードを使ってデジタル署名されたPDFファイルを開くと,

署名済みであり、 すべての署名が有効です。

と表示される。

Page Top

アプリケーションやデバイスドライバーなどにデジタル署名をする anchor.png

MicrosoftのAuthenticodeは,アプリケーション(exe, msi, cab)や共有ライブラリ(dll),デバイスドライバー(sys, cat)なんかにデジタル署名して,それを検証することで安全性を高めるシステム。
Windowsではアプリケーションの実行時やデバイスドライバー使用時にそのデジタル署名をチェックして,場合によっては実行をブロックしたり警告のダイアログを表示したりしている。

通常はMicrosoftや第三者認証局からコード署名用の電子証明書を取得(有料)して,それを使ってデジタル署名をする。

マイナンバーカードには署名用の電子証明書が保存されている。用途仕様には特に規制が無いようなので,多くの場面でデジタル署名に利用できると思われる。

試しに署名ツールを使って,マイナンバーカードの署名用電子証明書と署名用秘密鍵で,実行ファイルにデジタル署名をしてみた。

Page Top

osslsigncodeとOpenSCを使用してデジタル署名する anchor.png

Windowsでデジタル署名を行う場合は,Windows Driver Kitにあるsigntoolを使うのだが,マイナンバーカードにアクセスしてデジタル署名する方法がわからなかった。-cspオプションや-kcオプションなどを使えば出来そうなのだが・・・

しょうがないのでsigntoolの代替えツールとして,無料で使用できるosslsigncodeツールを見つけた。
osslsigncodeはOpenSSLとcurlライブラリを利用してデジタル署名することが出来るツールで,マルチプラットフォームで動作する。~

このツールをWindowsマシンへインストールするには,osslsigncodeのReleaseからWindows用のosslsigncode-2.7-windows-x64-static-vs.zippkcs11.dllをダウンロードして,実行pathが通ったディレクトリにosslsigncode.exeとpkcs11.dllをコピーすればいいようだ。

MSYS2・MinGW-w64環境がある場合は,パッケージ管理ツールpacmanでインストール出来る。

$ pacman -S mingw-w64-x86_64-osslsigncode mingw-w64-i686-osslsigncode

osslsigncodeOpenSCの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)の署名証明書を書き出して証明書ストアに登録する。)

このようにして,自分のマイナンバーカードを使って信頼性があるデジタル署名を無料で行える。


*1 サブスクリプションのみでPro版が1980円/月,Standard版が1518円/月と個人で購入するのは高価。

新しくコメントをつける

題名
ゲスト名
投稿本文
より詳細なコメント入力フォームへ

トップ   凍結 差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 82, today: 2, yesterday: 5
最終更新: 2024-03-06 (水) 15:11:59 (JST) (52d) by yuji