清水理史の「イニシャルB」

マイナンバーカードによるPDFへの電子署名がどのように動作するのかを実験してみた

 給付金手続きでの利用やマイナポイント付与の効果によって、マイナンバーカードにあらためて注目が集まりつつある。

 今後、テレワークが当たり前になれば、電子契約などで身近に使う機会が増える可能性があるが、具体的な使い方を知っているという人はあまり多くないだろう。

 ハンコの代わりにPDFなどへ電子署名をするケースを想定し、何が必要で、どう操作すればいいのか、さらに電子署名にはどのような情報が含まれるのかを実験してみた。

筆者のマイナンバーカード

おことわり

 あらかじめお断りしておくが、今回の記事は、あくまでもマイナンバーカードによる電子証明書の使い方を実際に体験してみることを目的としている。

 このため、実際に法的な効力を持つ契約において、本稿で紹介する方法が実際にハンコの代わりに使えるとは限らない(法的要件を満たすかや、受け取ったときに電子証明書の有効性を確認できるかが課題だ)。

 実際にテレワーク環境での契約業務に使うのであれば、僚紙「窓の杜」にて掲載された以下の記事がとても参考になるので、こちらで紹介されているサービスの利用をお勧めしたい。

 また、基本4情報(氏名、住所、性別、生年月日)の個人情報について後半で触れるが、本稿でこの部分だけをことさら騒ぎ立てる意図もない。

 今回、取り上げるマイナンバーカード内の電子署名のうち「署名用電子証明書」の方には、基本4情報、シリアル番号、有効期限などが含まれている(ただし基本4情報は、4桁のパスワードで参照可能な利用者認証用電子証明書には含まれない)。

 そして、署名用電子証明書を使って電子署名したPDF文書からは、これらの情報を取り出すことができる。

 そもそも、署名用電子証明書で電子署名をする目的は、PDF文書が本人によって作成されていること(+改ざんされていないこと)を確認するためのものなので、そこに本人確認用の基本4情報が含まれるのは当然だ。

 もちろん、この点を意識せずに電子署名したPDFを外部に公開すれば、そこから住所や氏名などが第三者に知られる可能性はある。しかし、そもそも電子署名は契約書などで使われるものなので、情報を開示したい相手以外に公開することそのものが間違っている(それは文書管理に関わる別の問題だ)。

 電子署名は、本人確認のための電子情報(基本4情報)が含まれていることを十分に意識した上で使うべきだが、この点だけが切り取られて一人歩きし、誤解を生むような情報の伝わり方がされないことを強く願っている。

署名用電子証明書を使った本人確認

 さて、本題に入ろう。マイナンバーカードは、本人確認やポイントカードなどとして利用できるカードタイプの証明書だ。

 住民票の取得や税務関連の申告に利用するケースが多いが、今回、新型コロナウイルス感染症(COVID-19)による給付金を申請するのに、初めてオンラインで使ったという人も少なくないかと思われる。

 マイナンバーカードにはICチップが搭載されており、この中に「署名用電子証明書」と「利用者証明用電子証明書」の2つの証明書が格納されている。このうち前者を利用することで、文書が間違いなく本人によって作成されたものであることや、途中で改ざんされていないことが確認できるようになっている。

 詳しくは、総務省が公開している「マイナンバー制度とマイナンバーカード」のウェブページを参照して欲しいが、イメージとしては次のようになる。

マイナンバーカードには2つの証明書が格納されていて、このうちの署名用電子証明書を使って文書に電子署名できる。署名用電子証明書には基本4情報が記載されており、署名した人物が本人かどうかを確認できる
署名用電子証明書による電子署名のイメージ。元文書と暗号化した文書の2つを送信することで、文書が改ざんされていないかを検証できる。スライド2点の出典は「マイナンバーカードの安全性」(総務省)

 今回の実験では、この署名用電子証明書を使ってPDFへ電子署名をすると、署名したPDFにおいて電子署名がどうなっているのかを確認してみよう。

「Adobe Reader DC」無料版ではセキュリティ設定に注意

 マイナンバーカードを使ってPDFに電子署名をする最も確実な方法は、登記・供託オンライン申請システムで提供されているAdobe Acrobat用のPDF署名プラグインを利用する方法だ。この方法であれば、法的に有効なPDFへの電子署名を簡単に実施することができる。

 ただし、ここで提供されているPDF署名プラグインは、「Adobe Acrobat」の有料版にしか対応せず、「Adobe Reader DC」の無料版では動作しない。今回は実験が目的なので、オープンソースのスマートカード向けライブラリ「Open SC」を利用し、無料版であるAdobe Reader DCで電子署名ができるようにしてみた。

 この方法は無料で使えるのがメリットだが、1つ大きな欠点がある。Adobe Reader DCのセキュリティ設定で[AppContainerでの実行]をオフにする必要がある点だ。

 AppContainerは、隔離されたサンドボックスでアプリを実行するWindowsの機能だ。しかし、これがオンになっていると、Open SCとの通信ができない。このため、実験時は必ず[AppContainerでの実行]をオフにする必要がある。

「Adobe Reader DC」から「Open SC」経由でマイナンバーカードへアクセスするには、AppContainerでの実行を無効にする必要がある

 当然セキュリティレベルは下がるため、常用はお勧めできない。実験時のみオフにし、実験が終わったら再びオンにすることを忘れないようにして欲しい。

 なお、シンプルにPDFにマイナンバーカードで電子署名したいだけなら、「JPKI PDF SIGNER」というアプリを利用する手もある。

JPKI利用者ソフトで証明書を確認

 それでは、実際に実験を進めていこう。

 まずは、PCの環境を整える。すでに税務申告や給付金の申請にマイナンバーカードを使ったことがあるなら問題はないが、そうでない場合は、PCにカードリーダーを装着しておこう。今回はソニー製の「PaSoRi(パソリ) RC-S380」を使った。

 続いて、「JPKI利用者ソフト」をインストールする。この作業は必須ではないが、自分の証明書の情報を事前に確認できる上、後でPDFから取り出した電子署名を確認するときにも利用できるので、インストールしておくことをお勧めする。

「JPKI利用者ソフト」。高DPIディスプレイで利用する場合は、互換性で「システム(拡張)」を選択しないと表示が乱れるので注意

 アプリをダウンロードしてインストール後に、カードリーダーへマイナンバーカードをセットし、「自分の証明書」から「署名用電子証明書」を選択し、6桁以上で設定したパスワード(英字は大文字のみ!)を入力する。

 署名用電子証明書は、5回連続でパスワードを間違えると失効するので、分からない場合は無理に操作するのを避けよう。

 これで、署名用電子証明書の情報を確認できる。氏名、生年月日、性別、住所の基本4情報に加え、発行年月日や有効期間の満了日、発行者が表示される。

署名用電子証明書のパスワードは6桁以上の方。英字は大文字のみなので要注意。5回連続で間違えると無効になってしまう
JPKI利用者ソフトで確認できる署名用電子証明書。基本4情報(氏名、生年月日、性別、住所)が含まれる

 この情報を含んだ電子署名をすることで、署名付きの文書を受け取った側が、送信者が誰なのかを判断できることになる。

Adobe Reader DCを設定する

 それでは、この署名用電子証明書を使って、実際に電子署名をしてみよう。

1.「Open SC」のインストール

 まずは、Adobe Reader DCからスマートカードにアクセスするためのライブラリ「Open SC」をインストールする。

 64bit版と32bit版があるが、Adobe Reader DCから認識できるのは32bit版のみのため、Windowsが64bit環境でも32bit版のOpen SCをインストールする必要がある。

「Open SC」の32bit版をインストールする

 インストール後、次のコマンドを使うことで、カードリーダーに置いたマイナンバーカードを認識できるかを確認できる。念のため実行しておくといいだろう。

C:\Program Files (x86)\OpenSC Project\OpenSC\tools\pkcs15tool.exe --dump

2.Adobe Reader DCへのOpen SCモジュールの登録

 続いて、Adobe Reader DCにOpen SCのモジュールを登録する。ここでもAdobe Reade DCのセキュリティ設定が重要だ。標準設定ではモジュールの登録ができないので、メニューから[編集]を選択すると表示される[環境設定]で[セキュリティ(拡張)]を選び、[起動時に保護モードを有効にする]のチェックマークを外してオフに設定する。

いったん保護モードを無効にする

 その後再起動してから、[編集]メニューの[署名]で[IDと信頼済み証明書の詳細]を選び、[PKCS#11モジュールおよびトークン]へ「C:\Program Files (x86)\OpenSC Project\OpenSC\pkcs11\opensc-pkcs11.dll」を登録する。

Open SCをAdobe Reader DCに登録。[モジュールを追加]の項目がグレーアウトする場合は、保護モードが有効なので設定をやり直すか再起動をする

 これで設定は完了だ。このまま実行することもできるが、しばらく実験を繰り返す場合は、[セキュリティ(拡張)]の画面で[保護モード]は有効にしたまま、[AppContainerで実行]だけをオフにすればいい。

3.電子署名の実行

 ここまで準備ができたら、いよいよ電子署名を行ってみよう。

 カードリーダーへマイナンバーカードを設置した状態で、署名したいPDFファイルを開いてから、[ツール]メニューで[証明書]を選択し、[電子署名]ボタンをクリックする。

 すると、電子署名を挿入するエリアの選択が開始されるので、文書内の任意の場所をドラッグして範囲を指定する。

電子署名を挿入する範囲を選択する
カードリーダー経由でマイナンバーカードの署名にアクセスできる

 範囲の指定が完了すると、Adobe Reader DCとカードリーダーの間で通信が開始され、[デジタルIDで署名]画面に(PKCS#11 デバイス)が選択肢として表示される。これを選んだ状態で[続行]ボタンを押すと、電子署名の画面が表示される(表示されない場合は保護モードが無効なので、上記モジュール画面からのログインを試す)。

 せっかくなので、印影付きの電子署名を作成するといいだろう。次のような手順で印影をアップロードすれば、ハンコ入りの電子署名を作成できる。

署名用電子証明書のパスワードを入力すると署名ができる。印影を指定して表示をカスタマイズ可能。
  • [作成]をクリック
  • [画像]をクリック
  • [参照]から印影(PDF形式)をアップロード
  • 表示する情報を選択
  • プリセット名を指定して保存

 この電子署名を選択した状態で、マイナンバーカードの署名用電子署名のパスワード(6桁以上、英大文字のみ!)を入力し、「署名」をクリックすると、無事にPDFに自分の署名用電子証明書で電子署名ができることになる。

電子署名を確認する

 さて、この文書を受け取った側は、どのように本人を確認するだろうか? 電子署名されたPDFを確認してみよう。

 まず、証明書自体はなくても確認はできるが、署名の検証エラーを解消。マイナンバーカードによる署名の検証には、公的個人認証サービスで配布されている認証局(CA)自己署名証明書が必要だが、標準ではインストールされていないので、これを次のような手順で追加する。

  • 公的個人認証サービスポータルサイトの署名用認証局の運営に関する情報にアクセス
  • 署名用認証局の自己署名証明書(有効期間2019年9月15日~2029年9月14日)(2KBの.cerファイル)をダウンロード
  • Adobe Reader DCで、[編集]ー[環境設定]ー[署名]ー[IDと信頼済み証明書]を開く
  • ダウンロードした自己署名証明書を信頼済み証明書へ取り込み
  • 証明書を編集し、[この証明書を信頼済みのルートとして使用]をオンにする
署名されたPDFを開くと検証エラーが発生するので、認証局の自己署名証明書をインストールしておく

 上記の手順を終えたら、あらためてPDFを見てみよう。PDFの書面には、本人を確認できそうな情報は見当たらない。先ほど範囲指定した部分に印影付きの電子署名が表示され、署名者として証明書の発行日と端末番号から構成された番号と、日付としてタイムスタンプが表示される。

 今回は印影があるので誰が押したのかが分かりやすいが、ない場合もある。このため、これだけでは送信者が誰なのかは判断できない。

署名されたPDF文書。Adobe Reader DCの見た目だけでは、本人確認用の情報は見当たらない
[詳細]を表示しても、本人確認に使えそうな情報は見当たらない

 そこで、証明書の詳細を表示してみる。

 PDFの電子署名欄をクリックし、[署名のプロパティ]を選択する。ここでも、署名者として表示されるのは、発行日+端末識別番号の値のみだ。

 さらに[署名者の証明書を表示]をクリックする。

 [詳細]タブで、ようやくシリアル番号が確認できるが、まだ画面上で本人確認用の情報を見つけることはできない(実際にはX.509部分に格納されているが、16進数なので判別できない)。

 では、どのように基本4情報を参照するのかというと、証明書をファイルとして書き出し、冒頭で触れた「JPKI利用者ソフト」で読み込めばいい。

JPKI利用者ソフトから、[その他の証明書]でPDFからエクスポートした証明書を読み込むと本人確認用の情報が表示される

 JPKI利用者ソフトの[その他の証明書]から、PDFから書き出した証明書ファイル(.cer)を指定して読み込むと、署名用電子証明書に含まれる基本4情報を参照できる。これが、電子署名によって相手へ送られることで、送信者が本人であることを相手が確認できることになる。

 例えば、契約書の場合であれば、契約書内に自分の氏名、住所などの情報が申込者によって記入されているはずだ。この情報を、署名用電子証明書内の基本4情報を照らし合わせることで、本人であることを確認できるわけだ。

 もちろん、電子証明書そのものの有効性(期限切れや住所変更の有無などの確認)を確認しないと意味がない。ただ、それにはオンラインでの確認作業が必要で、そのためには民間利用手続きに従った申請と認可が必要になる(費用もかかる)。例えば、住宅ローンの申請などでは、銀行側がこうした認可を得て本人確認をすることになる。

実際に体験することをお勧めする

 以上、マイナンバーカードを使ったPDFへの電子署名を実際に試してみた。

 電子署名とは何で、どうやって署名をし、そこから本人確認がどのようになされるのかを自分自身で体験することで、その概要をつかめたことだろう。

 筆者自身も、その練習が今回ある程度できたし、相手にはどのような情報が渡るのかも確認できたので、今後、誰とどのような文書をやり取りするときに電子署名をすべきかが理解できたのは収穫だった。

 筆者の場合、書籍を出版するときの出版契約が、いまだに紙と実際の印鑑ベースなので、将来的に電子署名になったときなどに活用できそうだ。こうした事例も今後増えてくるだろう。

 最後に、繰り返しになるが、もちろん、署名用電子証明書に基本4情報が含まれることは重要で、利用時には必ず意識しておく必要がある。マイナンバーカードを使って署名した文書は、信頼できる相手以外に送信すべきでないことは覚えておくべきだろう。

清水 理史

製品レビューなど幅広く執筆しているが、実際に大手企業でネットワーク管理者をしていたこともあり、Windowsのネットワーク全般が得意ジャンル。最新刊「できる Windows 10 活用編」ほか多数の著書がある。