文書に署名する人と、それを確かめる人が同じしくみの中に
このモジュールは 4 つの署名の経路をまとめて用意します。IC カードまたは USB トークンによる適格電子署名、携帯電話回線を使うモバイル署名、画面上に描く手書き署名、ファイルから読み込む手書き署名の画像です。署名した文書はすべて台帳に記録され、検証コードで後から照会できます。
- 署名鍵はブラウザーに渡りません適格署名は、利用者自身の端末で動くローカル署名サービスを通じて行います。カードの PIN と秘密鍵が端末の外へ出ることはなく、サーバー側へ渡るのは署名済みの成果物だけです。
- 署名の記録は文書に結び付きます署名の出来事はすべて台帳に書き込みます。署名者、文書の表題、文書の種別、署名の方式、署名した時刻、ファイルの SHA-256 ダイジェスト、そして 16 文字の検証コードが残ります。
対応する署名の方式
以下の 4 つを、モジュールの中で別々のタブとして用意しています。この一覧にない署名の方式は、このモジュールにはありません。
適格電子署名
IC カードまたは USB トークンによる署名です。ローカル署名サービスが機器を見つけ、証明書を読み取り、PIN を確認し、署名済みの成果物を作ります。ダイジェストのアルゴリズムは SHA-256 です。
モバイル署名
携帯電話回線に結び付いたモバイル署名の基盤を使う署名です。番号の契約を照会し、署名の要求が携帯電話に届き、承認を待つあいだ処理の状態を問い合わせます。
描いた手書き署名
マウス、ペン、タッチ画面で描く署名です。ペンの色を選べ、描き直しもできます。結果は利用者の既定の署名として PNG で保存します。
読み込んだ手書き署名
手元にある署名の画像をファイルから読み込みます。PNG と JPEG に対応し、最大 5 MB です。画像はサーバー側で 600×200 の枠に収まるよう縮小し、PNG に変換します。
署名の形式
形式は、署名するファイルの種類に応じて選びます。モジュールが拡張子を見て適切なものを選びます。
| 形式 | 対象となる文書 | 選ばれ方 |
|---|---|---|
| PAdES-BES | PDF 文書 | 拡張子が .pdf のとき自動で選ばれます。書き出した報告書はこの形式で署名します。 |
| XAdES-BES | XML 文書 | 拡張子が .xml のとき自動で選ばれます。 |
| CAdES-BES | その他のファイル | PDF と XML 以外のすべてのファイルで使う既定の形式です。 |
3 つの形式のいずれでも、ダイジェストのアルゴリズムは SHA-256 です。署名済みの成果物は、署名した元のファイルとは別の文書として取り出します。元のファイルは変更しません。
適格電子署名の流れ
6 つの手順はそれぞれ独立した状態として画面に現れます。いまどの手順を待っているのか、どこで止まったのかが読み取れます。
- サービスの確認まず通信を、次に端末で動くローカル署名サービスを確認します。サービスが動いていなければ、起動用のリンクと再試行のボタンを画面に表示します。
- 機器の検出接続された IC カードリーダーと USB トークンを並べます。機器がなければカードの挿入を促す警告を出し、複数あれば切り替えられます。
- 証明書の読み取り選んだ機器の証明書を読み取ります。証明書の名義人、識別番号、発行機関、有効期間、機器の型式が画面に表示されます。
- PIN の確認PIN は数字のみで、最大 8 文字。欄への貼り付けはできません。Caps Lock が入っていると警告が出ます。入力した値は、必要に応じて表示できます。
- 署名進行状況の表示は 3 つの段階を示します。PIN の確認、署名、完了です。署名の要求は最大 30 秒まで待ち、結果が届かなければエラーとして返ります。
- 結果と記録署名済みの成果物を作り、署名の出来事を台帳に書き込みます。最初の署名の後、その機器に結び付けて PIN を保存するかを尋ねます。断ることもできます。
モバイル署名の流れ
モバイル署名は非同期に動きます。要求を送り、携帯電話で承認し、システムは結果を問い合わせながら待ちます。
- 契約の照会入力された番号がモバイル署名の契約回線かを照会します。契約がなければ、流れは始まる前に止まり、その理由を画面に示します。
- 署名の要求携帯電話に表示される説明文とともに要求を送ります。利用者は自分の画面で、どの文書を承認しようとしているかを読めます。
- 処理番号要求が非同期に受け付けられると処理番号が返り、画面は「携帯電話での承認をお待ちください」の状態に移ります。
- 状態の問い合わせ結果は 3 秒ごとに問い合わせ、最大 90 秒まで待ちます。時間が尽きると処理は時間切れで終わり、最初からやり直します。
- 結果3 つの結果を別々に扱います。署名済み、利用者による取り消し、時間切れです。PDF に署名した場合は、署名を文書に埋め込んだ署名済みの写しを作ります。
現場で起きる場面
署名が一度で終わることはまれである、という前提でこのモジュールを作りました。8 つの場面をひとつずつ扱います。
PIN の保存
利用者の同意がある場合、PIN を端末の製造番号に結び付けて保存します。次回の署名では欄が空でなくなり、保存した PIN は 1 手順で削除できます。
PIN の誤り
誤った PIN を入力すると、残りの試行回数とともに警告を表示します。最後の 1 回では警告をさらに強く示します。
ロックされたカード
PIN がロックされると画面は警告の状態に移り、再試行のボタンは無効になり、カードのロック解除の方法を説明します。
Caps Lock の警告
Caps Lock が入っているあいだ、PIN の欄の横に警告の印と短い説明を表示します。試行回数を無駄にする前に、打ち間違いを防ぎます。
カードが抜かれた
接続された機器を 5 秒ごとに確認します。処理の途中でカードが抜かれた場合、画面は機器の検出に戻り、接続が失われたことを示します。
2 つ目のタブの制御
同じブラウザーの 2 つ目のタブで署名が始まると、もう一方のタブを一時的に止めます。1 台の機器が同時に 2 つの要求に応じることを防ぎます。
証明書の期限
証明書の期限まで 30 日を切ると警告を、7 日を切るか期限が過ぎると重大な警告を出します。期限切れの証明書では署名を開始できません。
機器の一時的な不具合
カードとの通信が一時的に切れるような過渡的な誤りでは、利用者にエラーを見せずに 2 回まで再試行します。それでも続く場合は、エラーコードとともに記録します。
署名台帳と検証
署名済みの文書を取り出した後も、誰が何にいつ署名したかを照会できます。
- 台帳の記録署名の出来事はすべて、署名した利用者、組織、文書の種別、文書の表題、署名の方式、署名した時刻、IP アドレス、ブラウザーの情報とともに記録します。
- ファイルのダイジェスト文書の SHA-256 ダイジェストを記録します。同じダイジェストで照会すると、その文書が属する署名の記録が見つかります。
- 検証コード記録ごとに、4 つの区切りからなる 16 文字の検証コードを作ります。コードには、見分けのつきにくい文字と数字は使いません。
- QR コードによる検証書き出した文書には、検証用のアドレスを含む QR コードを印字します。読み取ると、その記録が有効かを照会できます。
- 台帳の一覧署名の記録は、文書の種別、署名の方式、利用者で絞り込めます。文書の表題と検証コードから探せます。
電子署名でサインインする
同じ基盤を、文書への署名だけでなく本人確認にも使えるように用意しています。
証明書によるサインイン
署名用の証明書から取り出した識別番号またはメールアドレスを、利用者の記録と照合します。一致しなければ、セッションは開きません。
モバイル署名によるサインイン
サインインの要求が携帯電話に届き、承認するとセッションが開きます。署名されないか取り消された場合、サインインは拒否されます。
セッションのクッキー
確認が終わると、セッションのトークンはサーバーだけが読めるクッキーで発行され、限られた時間だけ有効です。
よくあるご質問
署名の方式、準備、検証について最もよくいただく 5 つの質問です。