現: 2024-03-06 (水) 16:11:59 yuji ソース
Line 1: Line 1:
 +* マイナンバーカードを使ってデジタル署名をする [#z6640e5b]
 +PDFファイルや文書ファイル,アプリケーションやデバイスドライバーなどにデジタル署名をするときに,マイナンバーカードに保存されている署名用証明書と署名用秘密鍵を利用したい。~
 +[[マイナンバーカード>/マイナンバーカード]]には日本の行政機関の[[地方公共団体情報システム機構>https://www.j-lis.go.jp/]]が第三者として発行している証明書が保存されていて,それは住民票などのデータを元にしているので本人確認として信頼出来る証明書となっている。~
 +
 +日本国民であれば[[マイナンバーカード>/マイナンバーカード]]は無料で取得することが出来て,既に大方の日本人が持っている。~
 +また,マイナンバーカードに保存されている電子証明書は無料で利用できるので,公的に有効な信頼性が高いデジタル署名が必要な時には利用しやすい。~
 +
 +[[マイナンバーカード>/マイナンバーカード]]には2種類の電子証明書が保存されている。
 +- 利用者証明用電子証明書(認証局CA認証用証明書とその秘密鍵・公開鍵)~
 +オンライン上の手続きなどで本人認証をする時に利用される証明書。~
 +オンラインシステムを使用する時のユーザー認証時に,マイナンバーカードを使うことでなりすましでないことを証明できる。~
 +- 署名用電子証明書(認証局CA署名証明書とその秘密鍵・公開鍵)~
 +作成した電子文書に対して,デジタル署名する時に使用する証明書。~
 +確定申告を行う時の電子申請などで,申告用ファイルにデジタル署名する時に主に使用されている。~
 +
 +この署名用電子証明書と秘密鍵を,PDFファイルや電子文書,アプリケーションやデバイスドライバー等のデジタル署名時に使用できる。~
 +
 +マイナンバーカードで注意することとして,マイナンバーカードの有効期限とは別にマイナンバーカードに保存されている電子証明書には有効期限があり,その有効期限は発行日から''5年間''となっている。~
 +有効期限が過ぎた場合は,役所の窓口に行って証明書の再発行をする必要がある。~
 +また住所や氏名が変更になった場合,署名用電子証明書は自動で失効してしまうので,14日以内にマイナンバーカードの記載事項の変更と電子証明書の再発行をする必要がある。~
 +
 +マイナンバーカードを使って,PDFファイルやアプリケーションにデジタル署名することを試してみた。~
 +
 +* ICカードリーダーを用意する [#u3de91db]
 +デジタル署名時に必要な機器として,PCと接続してマイナンバーカードの読み取りをするために[[ICカードリーダー>https://amzn.to/42XkY7U]]が必要になる。~
 +
 +これはデジタル署名をする時に,マイナンバーカードをICカードリーダーにセットしながら署名する必要があるから。~
 +
 +これはちょっと面倒なのだが,マイナンバーカードには署名用秘密鍵が格納されているが,読み出すことは出来なくなっている。~
 +デジタル署名する時に秘密鍵が必要になるのだが,マイナンバーカード内で秘密鍵を使って暗号化処理をしてもらう必要があるので,これはしょうがない。~
 +
 +* PDFファイルにデジタル署名をする方法 [#x3eac900]
 +PDFファイルは文書を電子化してファイルにしたもので,アプリケーションやOS,ハードウェアなどに依存しない電子文書ファイル。~
 +WEBページ上の文書やソフトウエアの説明書など,広く公開・頒布する形で多く利用されている。また,公的に使用する文書等でも標準的に使われている。~
 +
 +マイナンバーカードの署名用電子証明書を使ってこのようなPDFファイルにデジタル署名をする方法には,いくつか方法がある。~
 +
 +** Adobe AcrobatとPDF署名プラグインを使用する [#nc2cd283]
 +[[Adobe Acrobat>https://www.adobe.com/jp/acrobat.html]](有償版((サブスクリプションのみでPro版が1980円/月,Standard版が1518円/月と個人で購入するのは高価。))の32bit版。Acrobat Readerではない)でマイナンバーカードを使ってデジタル署名をする場合,[[法務局の登記・供託オンライン申請システム>https://www.touki-kyoutaku-online.moj.go.jp/index.html]]が配布している[[PDF署名プラグイン>https://www.touki-kyoutaku-online.moj.go.jp/download_soft.html#PDFPlugin]]が使用出来る。~
 +
 +Adobe Acrobatには7日間は無料で使用可能な体験版があるようだ。~
 +
 +Adobe Acrobatをインストール後,登記・供託オンライン申請システムが配布している[[PDF署名プラグイン>https://www.touki-kyoutaku-online.moj.go.jp/download_soft.html#PDFPlugin]]をダウンロードして,ダブルクリックしてインストールする。
 +このプラグインが動作するのは''32bit版Adobe Acrobatのみ''のようなので注意する。~
 + Adobe Acrobat Pro(32bit版)
 + Adobe Acrobat Standard(32bit版)
 +
 +
 +''Adobe Acrobatは購入していないので,実際に動作を確認していない。''~
 +
 +** Adobe Acrobat Reader(無料版)とOpenSCを使用する [#s9b40e81]
 +PDFファイルを見るときによく使う[[Adobe Acrobat Reader>https://get.adobe.com/jp/reader/]](無料版)では,上記のPDF署名プラグインは動作しない。~
 +
 +代わりに[[OpenSC>./#cadbe07d]]を使用してマイナンバーカードを使って,Acrobat Readerでデジタル署名することが出来た。~
 +
 +準備は以下のようにする。~
 +- Acrobat Readerをインストールする。~
 +- [[OpenSC>./#cadbe07d]]をインストールする。~
 +- カードリーダーを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ファイルにデジタル署名を行うことが出来た。署名のデザインは好みに設定できる。~
 +
 +** JPKI PDF SIGNERとJPKI利用者ソフトを使用する [#v8903dac]
 +無料で使用できるデジタル署名ツールの[[JPKI PDF SIGNER:https://aoiro.app/jpki/]]を使用して,PDFファイルに後からデジタル署名(マイナンバーカードの署名用電子証明書)することが出来る。~
 +このアプリでデジタル署名したPDFファイルは,法人登記手続きにも使用することが出来るそうだ。~
 +
 +使用するには,[[地方公共団体情報システム機構>https://www.j-lis.go.jp]]が配布している''JPKI利用者ソフト''が必要になる。
 +
 +*** JPKI利用者ソフトのインストール [#b4994758]
 +地方公共団体情報システム機構が配布している[[JPKI利用者ソフト:https://www.jpki.go.jp/download/win.html]]を,PDFファイルにデジタル署名をする時に利用することが出来る。~
 +JPKI利用者ソフトは[[ここから>https://www.jpki.go.jp/download/index.html]]ダウンロードして,PCにインストールする。~
 +
 +このJPKI利用者ソフトは,以下のことが行える。~
 +- ICカードリーダーの動作確認。~
 +- マイナンバーカード内の署名用電子証明書の内容・有効性確認。~
 +- アプリケーションとマイナンバーカード間のミドルウェア機能。~
 +マイナンバーカードのAPIを使用して,アプリケーションがマイナンバーカードにアクセスできるようにする。~
 +- 失効申請を行う。~
 +
 +*** JPKI PDF SIGNERでPDFファイルに署名する [#yc78cc4c]
 +[[JPKI PDF SIGNER>https://github.com/hirukawa/jpki-pdf-signer/]]は,[[ここから>https://github.com/hirukawa/jpki-pdf-signer/releases/download/1.2.7/jpki-pdf-signer-1.2.7.zip]]インストーラーがダウンロードできる。~
 +zipファイルを任意のディレクトリに解凍して,インストーラーを実行する。
 +
 +PDFファイルに署名するには以下の手順で行う。~
 +- ICカードリーダーをPCに接続しマイナンバーカードをセットする。~
 +- JPKI PDF SIGNERを起動する。~
 +- 右の+追加で印影の画像を登録できる。~
 +印影をPDFファイルに入れたい場合は,印影をスキャンした画像ファイルを指定する。~
 +- ファイル>開くでPDFファイルを選択する。~
 +PDFファイルが表示される。~
 +- 印影をクリックして,PDFファイルの好みの位置を指定する。~
 +- 署名用の暗証番号を聞かれるので入力する。~
 +この時,暗証番号を5回間違うと以後マイナンバーカードが使用できなくなるので注意する。~
 +- PDFファイルに署名が追加され,PDFファイルが作成される。~
 +
 +** JSignPdfとOpenSCを使用する [#kc6447c6]
 +[[JSignPDF>https://intoolswetrust.github.io/jsignpdf/]]はPDFファイルにデジタル署名をすることが出来るフリーソフト。~
 +
 +マイナンバーカードの署名用証明書と秘密鍵を使ってデジタル署名する場合は,マイナンバーカードを読み取るため[[OpenSC>https://github.com/OpenSC/OpenSC/wiki]]が必要となる。~
 +
 +*** OpenSC [#cadbe07d]
 +[[OpenSC>https://github.com/OpenSC/OpenSC]]はクロスプラットフォームで動作する,ICカード用のツール・ライブラリ。[[PKCS#11>http://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/os/pkcs11-base-v2.40-os.html]]と[[PKCS#15>https://www.usenix.org/legacy/publications/library/proceedings/smartcard99/full_papers/nystrom/nystrom_html/index.html]]に対応している。~
 +主にICカード/ICカードリーダーとアプリケーション間で動作するミドルウェアとして使用される。~
 +
 +またWEBブラウザや電子メールクライアント等で利用したり,OpenSSLやNSSなどの暗号化ライブラリ・プログラムのバックエンドとしても利用することが出来る。~
 +
 +日本の人がマイナンバーカードに対応するようにカードドライバーを開発されたおかげで,バージョン0.17.0以降,マイナンバーカードに対応している。~
 +
 +OpenSCのインストールは[[ここから>https://github.com/OpenSC/OpenSC/releases]]インストーラーをダウンロードして,ファイルをダブルクリックしてインストールする。利用するアプリケーションが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のインストール [#ud5e2c25]
 +[[JSignPDF>https://intoolswetrust.github.io/jsignpdf/]]は[[ここの>https://intoolswetrust.github.io/jsignpdf/]]Downloadをクリックするとインストーラーがダウンロード出来る。~
 +ダウンロードしたファイルをダブルクリックで,任意のディレクトリにインストールできる。~
 +
 +*** JSignPdfでマイナンバーカードを使用する時の設定 [#f8a972bc]
 +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のライブラリが参照できるように設定している。~
 +
 +*** 可視署名時の文字化け対策 [#ffabfb46]
 +可視署名が文字化けする場合があるので,JSignPdfをインストールしたディレクトリにある以下のファイルを以下のように編集しておく。~
 +- ''JSignPdf.l4j.ini''ファイル~
 + # Launch4j runtime config
 + -Xms1g
 + -Xmx1g
 + --add-exports jdk.crypto.cryptoki/sun.security.pkcs11=ALL-UNNAMED
 + --add-exports jdk.crypto.cryptoki/sun.security.pkcs11.wrapper=ALL-UNNAMED
 + --add-exports java.base/sun.security.action=ALL-UNNAMED
 + --add-exports java.base/sun.security.rsa=ALL-UNNAMED
 + --add-opens java.base/sun.security.util=ALL-UNNAMED
 + -Djsignpdf.home="%EXEDIR%" -Dswing.useSystemFontSettings=false
 +- ''JSignPdfC.l4j.ini''ファイル~
 + # Launch4j runtime config
 + -Xms1g
 + -Xmx1g
 + --add-exports jdk.crypto.cryptoki/sun.security.pkcs11=ALL-UNNAMED
 + --add-exports jdk.crypto.cryptoki/sun.security.pkcs11.wrapper=ALL-UNNAMED
 + --add-exports java.base/sun.security.action=ALL-UNNAMED
 + --add-exports java.base/sun.security.rsa=ALL-UNNAMED
 + --add-opens java.base/sun.security.util=ALL-UNNAMED
 + -Djsignpdf.home="%EXEDIR%" -Dswing.useSystemFontSettings=false
 +- ''InstallCert.l4j.ini''ファイル。~
 + # Launch4j runtime config
 + -Xms1g
 + -Xmx1g
 + --add-exports jdk.crypto.cryptoki/sun.security.pkcs11=ALL-UNNAMED
 + --add-exports jdk.crypto.cryptoki/sun.security.pkcs11.wrapper=ALL-UNNAMED
 + --add-exports java.base/sun.security.action=ALL-UNNAMED
 + --add-exports java.base/sun.security.rsa=ALL-UNNAMED
 + --add-opens java.base/sun.security.util=ALL-UNNAMED
 + -Djsignpdf.home="%EXEDIR%" -Dswing.useSystemFontSettings=false
 +
 +*** JSignPdfでPDFファイルに署名する [#u028d888]
 +JSignPdfを使って,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''ファイルが作成される。~
 +
 +* PDFファイルのデジタル署名の検証 [#x98c6e1a]
 +マイナンバーカードの署名用電子証明書と秘密鍵でデジタル署名した場合,そのデジタル署名の検証をするためには,日本の''公的個人認証サービス(JPKI)''を信頼できる認証局として扱う必要がある。~
 +
 +Acrobat ReaderなどのPDF表示アプリケーションには,PDFファイルに付与されているデジタル署名を検証する機能がある。~
 +
 +しかしAcrobat Readerのデフォルト設定だと,すべてのデジタル署名を検証出来るように設定されていない。~
 +
 +** 認証局(CA)の証明書がインストールされていない場合 [#ef3a1fb2]
 +公的個人認証サービス(JPKI)で配布されているしている認証局(CA)の自己署名証明書が証明書ストアに登録されていない状態だと,Acrobat Readerで署名されたPDFを開くと,
 + 少なくとも 1つの署名に問題があります。
 +というメッセージが表示される。これが表示される場合は,まだ''デジタル署名を検証出来ていない''ことを意味する。~
 +
 +なので公的個人認証サービス(JPKI)で配布されている認証局(CA)の自己署名証明書を証明書ストアの「信頼されたルート証明書」に登録して,デジタル署名を検証出来るようにする必要がある。~
 +
 +ここではAcrobat Readerでマイナンバーカードによる署名を検証する方法を説明する。~
 +他のPDF表示アプリケーションでも,同様の手順で設定をすることができると思う。~
 +
 +** 認証局(CA)の署名証明書をダウンロードする [#b8eddc42]
 +まず,[[公的個人認証サービス(JPKI)>https://www.jpki.go.jp/]]が配布している認証局(CA)の自己署名証明書を以下のサイトから手に入れる。~
 +
 +[[署名用認証局の運営に関する情報>https://www.jpki.go.jp/ca/ca_rules3.html]]サイトから,有効期間の新しい署名用認証局の自己署名証明書(CER ・ 2KB)をダウンロードする。~
 +4年ごとに新しい有効期間が設定された証明書が公開されていくようだ。~
 +最新の証明書は,%%[[署名用認証局の自己署名証明書(有効期間 2019 年 9 月 15 日~2029 年 9 月 14 日)(CER ・ 2KB)>https://www.jpki.go.jp/ca/pdf/signca02.cer]]だった。%%~
 +[[署名用認証局の自己署名証明書(有効期間2023年7月16日~2033年7月15日)(CER・2KB)>https://www.jpki.go.jp/ca/pdf/signca03.cer]]になっている。~
 +
 +ダウンロードしたCA署名証明書ファイルを証明書ストアに登録する方法として,
 +- Acrobat Reader独自の証明書ストアに登録する。~
 +- Windowsの証明書ストアに登録する。~
 +
 +の2つの方法がある。
 +
 +*** Acrobat Reader独自の証明書ストアにCA署名証明書を登録する方法 [#n2b27b38]
 +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自己署名証明書を登録した場合は,他のアプリケーションではデジタル署名の検証は出来ない。''~
 +
 +*** WindowsにCA署名証明書を登録する方法 [#p95c2e75]
 +Windowsの証明書ストアにCA署名証明書を登録すると,ほとんどのアプリケーションでデジタル署名の検証を行えるようになる。~
 +
 +- ダウンロードしたCA自己署名証明書(signca03.cer等)をダブルクリックして,開くをクリックする。~
 +- 証明書のインストール...をクリックして,次へをクリック。~
 +- 「証明書をすべて次のストアに配置する」を選択して,参照...をクリックする。~
 +- 「信頼されたルート証明機関」を選択してOKをクリックする。~
 +- 証明書ストアの表示を確認して,次へをクリック。~
 +- 完了をクリック。~
 +- セキュリティ警告が表示されるので,はいをクリック。~
 +- OKをクリックする。残っている証明書ウィンドウは閉じる。~
 +
 +これで,Windowsの証明書ストアにCA自己署名証明書が登録ができた。~
 +
 +*** Acrobat ReaderのWindows統合を設定する [#u866a30e]
 +Windowsの証明書ストアにCA自己署名証明書を登録しただけでは,Acrobat Readerでデジタル署名を検証出来るようにはならない。~
 +これは,Acrobat Readerのデフォルト設定では,デジタル署名を検証するのにWindowsの証明書ストアを参照するように設定されていないため。~
 +
 +以下のようにして,Windowsの証明書ストアを参照するように設定する。~
 +- Acrobat Readerを起動して,メニューから編集>環境設定...を選択する。~
 +- 左側の分類で「署名」を選択して,右の検証欄にある詳細...ボタンをクリックする。~
 +- 署名検証の環境設定ウィンドウが開く。~
 +- Windows統合の欄にある「署名を検証」にチェックを入れて,OKをクリックする。~
 +
 +これで,Acrobat ReaderでもWindowsの証明書ストアを参照して,デジタル署名を検証出来るようになる。~
 +
 +以後,マイナンバーカードを使ってデジタル署名されたPDFファイルを開くと,
 + 署名済みであり、 すべての署名が有効です。
 +と表示される。~
 +
 +* アプリケーションやデバイスドライバーなどにデジタル署名をする [#d59fcd10]
 +[[MicrosoftのAuthenticode>https://learn.microsoft.com/ja-jp/windows/win32/seccrypto/time-stamping-authenticode-signatures]]は,アプリケーション(exe, msi, cab)や共有ライブラリ(dll),デバイスドライバー(sys, cat)なんかにデジタル署名して,それを検証することで安全性を高めるシステム。~
 +
 +最近のWindowsでは,アプリケーションの実行時やデバイスドライバー使用時にそのデジタル署名をチェックして,場合によっては実行をブロックしたり警告のダイアログを表示したりしている。~
 +
 +通常はMicrosoftや第三者認証局からコード署名用の電子証明書を取得(有料)して,それを使ってデジタル署名をする。~
 +
 +マイナンバーカードには署名用の電子証明書が保存されている。用途仕様には特に規制が無いようなので,多くの場面でデジタル署名に利用できると思われる。~
 +
 +試しに署名ツールを使って,マイナンバーカードの署名用電子証明書と署名用秘密鍵で,実行ファイルにデジタル署名をしてみた。~
 +
 +** Microsoft signtoolコマンドでデジタル署名する [#jb5ca441]
 +Windowsでデジタル署名を行う場合は,[[Windows Driver Kit>https://docs.microsoft.com/ja-jp/windows-hardware/drivers/download-the-wdk]]にある''signtool''を使うのだが,マイナンバーカードにアクセス(JPKI利用者ソフトやOpenSCを使って)してデジタル署名する方法がわからなかった。-cspオプションや-kcオプションなどを使えば出来そうなのだが・・・~
 +
 +** osslsigncodeとOpenSCを使用してデジタル署名する [#s51a9b62]
 +Microsoft signtoolの代替えツールとして,無料で使用できる[[osslsigncode>https://github.com/mtrojnar/osslsigncode]]ツールを見つけた。~
 +''osslsigncode''はOpenSSLとcurlライブラリを利用してデジタル署名することが出来るツールで,マルチプラットフォームで動作する。~
 +また,[[OpenSC>./#cadbe07d]]のPKCS#11モジュールを使用できるようなので,これでマイナンバーカードにアクセスしてデジタル署名出来るはず。~
 +
 +このツールをWindowsマシンへインストールするには,[[osslsigncodeのRelease>https://github.com/mtrojnar/osslsigncode/releases]]からWindows用の''osslsigncode-2.7-windows-x64-static-vs.zip''を,[[libp11のRelease>https://github.com/OpenSC/libp11/releases]]からWindows用の
 +''libp11-0.4.11-windows.zip''をダウンロードして,実行pathが通ったディレクトリにosslsigncode.exeとpkcs11.dllをコピーすればいいようだ。~
 +
 +[[MSYS2・MinGW-w64環境>/開発/toolchain/MinGW#xde2a8b1]]がある場合は,パッケージ管理ツールpacmanでインストール出来る。~
 + $ pacman -S mingw-w64-x86_64-osslsigncode mingw-w64-i686-osslsigncode
 +// $ pacman -S mingw-w64-x86_64-p11-kit mingw-w64-i686-p11-kit
 +
 +準備として,[[マイナンバーカードから読み出した>./#cadbe07d]]署名用の電子証明書''certificate.der''ファイルを,''osslsigncode''で使用できるようにpemファイルの''certificate.pem''に変換しておく。~
 + > openssl x509 -in certificate.der -inform DER -out certificate.pem -outform PEM
 +//マイナンバーカードから署名用の電子証明書をcertificate.pemファイルに直接書き出してもいいと思う。~
 +// > pkcs15-tool --verify-pin --auth-id 2 --read-certificate 2 > certificate.pem
 +
 +試しにtest.exeという実行ファイルを用意して,マイナンバーカードの署名用電子証明書の''certificate.pem''とマイナンバーカードに入っている''秘密鍵''を使ってデジタル署名してみる。~
 +
 +osslsigncodeコマンドで''-pkcs11module''でOpenSCのモジュールを指定して,''-pkcs11engine''オプションでpkcs11.dllを指定して,マイナンバーカードにアクセス出来るようにする。''-h sha256''オプションでダイジェストアルゴリズムを,''-key 1:2''オプションで署名用の秘密鍵を指定する。マイナンバーカードには秘密鍵が2個あるので,オプション指定しないと利用者証明用の秘密鍵が使われてしまうので注意する。もしオプション指定しないで暗証番号を3回間違えると,マイナンバーカードがロックされてしまう。~
 +
 +タイムスタンプも付けたほうが良いと思うので,DigiCertのタイムスタンプサーバを指定してみた。~
 +//http://ts.ssl.com/legacyも使えるかも。
 +
 +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)の署名証明書を証明書ストアに登録>./#b8eddc42]]しておく必要がある。(もしくは,マイナンバーカードから認証局(CA)の署名証明書を書き出して証明書ストアに登録する。)~
 +
 +このようにして,自分のマイナンバーカードを使って信頼性があるデジタル署名を無料で行えた。~
 +
 +* テキストファイルにデジタル署名する [#b96c2779]
 +テキストファイルにデジタル署名をしてみた。~
 +
 +テキストファイルを用意する。~
 + > echo 上野雄二です。 > test.txt
 +
 +OpenSCのpkcs15-cryptコマンドを使って,test.txtにマイナンバーカードの署名用の秘密鍵を使ってRSAで暗号化してデジタル署名したファイルを作成する。~
 + > pkcs15-crypt --sign --key 2 --pkcs1 --raw --input test.txt --output test.signed
 +--pkcs1オプションで署名対象をRSAで暗号化指定する。-key 2オプションで署名用の秘密鍵を指定する。(署名用暗証番号の入力が必要)~
 +
 +これで,test.txtファイルにマイナンバーカードの署名用秘密鍵を使ってデジタル署名したtest.signedファイルが作成された。~
 +
 +** デジタル署名を検証してみる [#seaa4943]
 +マイナンバーカードから署名用電子証明書を取り出す。署名用暗証番号の入力が必要。~
 + > pkcs15-tool --read-certificate 2 --verify-pin --auth-id 2 > user-signature.pem
 +保存されたuser-signature.pemファイルには暗証番号入力部分を促すメッセージが含まれているのでそれをテキストエディターなどで削除する。~
 +
 +その後,公開鍵を取り出す。~
 + > openssl x509 -noout -in user-signature.pem -pubkey > user-signature.pub
 +
 +公開鍵を使って署名を検証してみる。~
 + > openssl rsautl -verify -pubin -inkey user-signature.pub -in test.signed
 + 上野雄二です。
 +元のメッセージである「上野雄二です。」が出力されたので,test.signedファイルは署名用電子証明書の秘密鍵で署名したファイルであることが確認出来た。~
 +
 +ここでの例は短いテキスト文のtest.txtファイルで行ったが,ファイルが256byte(2048bit)を超えるとRSAでの署名は出来なくなる。~
 +なので一般的には,テキスト文のダイジェストとしてハッシュ値を計算して,そのダイジェストに対してデジタル署名を行っている。~
  

  • PC/デジタル署名とタイムスタンプ/マイナンバーカードを使ってデジタル署名 のバックアップ差分(No. All)
    • 現: 2024-03-06 (水) 16:11:59 yuji

トップ   差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 475, today: 1, yesterday: 1