デジタル証明書

【図解/公開鍵暗号】デジタル署名の仕組み~盗聴や改竄への保証,電子契約について~

デジタル署名とは

2020年9月、河野太郎大臣が「行政手続きでの不要なハンコ廃止」を要求し話題になりました。

契約書や決裁書など、重要な書類を偉い人が「承認」する際に、その人が印鑑を押す、というのが今までの文化でしたが、コロナウィルスがトリガーとなり、デジタル化に拍車がかかってきています。

デジタル署名とは、ある電子データに対して、印鑑を押す行為に似ています。その結果、承認した内容の「改竄検知」、確かに承認したという「否認防止」を実現することができます。

以下に印鑑とデジタル署名との比較を示します。

印鑑の場合、比較的改竄が易しいですが (書類本文に何かしらを書き加えられ、意図しない内容に変えられたり、、、)、デジタル署名だと改竄は難しいので比較的安全です。(印鑑に組み合わせて封書+封緘印を使えば似た効果が期待できますが (厳密には本文を見られていないことの証明)。)

デジタル署名の種類と仕組み ~ハッシュ関数と公開鍵暗号~

デジタル署名は「ハッシュ関数」と「署名用の公開鍵暗号方式」を組み合わせたものになります。

ハッシュ関数は一方向関数とも呼ばれ、以下の特徴があります。

  • あるデータから、一定サイズのデータを生成する関数である。元データはどんなに大きくても、比較的小さい特定サイズのデータが生成される。
  • 生成されるデータは、元データが 1 bit 変わるだけでも全然違うものになる。
  • 生成されたデータは、元データには戻せない
「元に戻せない」という性質から、ハッシュ関数は暗号化するものにはなりません。(暗号化と呼ぶためには、復号できることが必須であるため。)

また、署名用の公開鍵暗号方式としては以下の特徴があります。

  • 「秘密鍵」と「公開鍵」がペアで存在する
  • 「秘密鍵」と「あるデータ」をインプットとして「署名データ」をアウトプットすることができる
  • 「公開鍵」と「署名データ」を使って、「あるデータ」が改竄されていないことを検証できる
公開鍵暗号方式には「データ秘匿のための暗号化」「認証のための署名」「共通鍵生成のための鍵交換」と大きく3つの用途がありますが、今回はあくまで「認証のための署名」に対しての説明となります。
RSA 系アルゴリズムの場合は「どちらか一方で暗号化したとき、もう一方で復号できる」という性質を利用し「秘密鍵で暗号化≒署名」「公開鍵で復号≒検証」を行いますが、DSA系 (ECDSA/EdDSA) アルゴリズムの場合は、暗号化/復号するのではなく、あくまで「秘密鍵で署名」「公開鍵で検証」を行うだけの、署名専用アルゴリズムになります。(秘密鍵で生成したデータは公開鍵では元通りになりません。なのでハッシュ関数と同様、これも厳密には暗号方式と呼べない気もしますが、分類的には公開鍵暗号方式とされています。)

これらを組み合わせ、以下のようにデジタル署名を行います。簡単のため、RSA による署名/検証手順を示します。(DSA 系の場合は検証の仕組みが少し複雑になります。)

第三者の盗聴への保証は?

デジタル署名については、盗聴に対する保証はありません。というよりも、必要がありません。

強いて言えば、秘密鍵だけが漏洩してはならないものですので、もし秘密鍵を生成したホストとは別のホストに移動する場合は、盗聴されないように移動させましょう。

例えばメール等のネットワークは使わず、USBメモリで移す、など。

使われるアルゴリズムの例

実装によりますが、例えば 2020 年 7 月 7 日に IPA が公開した「TLS 暗号設定ガイドライン」の4.3 章【表 17】では、以下の利用が推奨されています。

  • ハッシュ関数:SHA-256 , SHA-384 , SHA-1 (※)
  • 公開鍵暗号 (署名):ECDSA , RSASSA PKCS#1 v1.5 (RSA) , RSASSA-PSS (TLS1.3のみ)

ガイドラインにも注意書きがある通り、SHA-1 はすでに危殆化が騒がれており、「2020 年時点で HMAC-SHA1 の安全性については問題ないが、今後は推奨から外す可能性が高い」とされています。

また、SHA-512 や SHA3 も徐々に普及されてきていますのでそのうちガイドラインに含まれてくるでしょう。

また、公開鍵暗号については、OpenSSL や OpenSSH で実装が進んでいる EdDSA が含まれていません。ガイドラインでは「本ガイドラインでは利用を推奨しないものの、自らの責任において利用することは妨げない。」と慎重なスタンスを取っていますが、少ないビット長の割にセキュリティ強度が高く、こちらも今後が期待されます。

電子署名とデジタル署名の違い

IPA によると、デジタル署名 (Digital Signature) が「公開鍵暗号方式を利用したもので、メッセージの発信者の認証と改竄の検知が可能なものを指す」のに対し、電子署名 (Electronic Signature) は「各国によって様々な定義がされており、デジタル署名を含む広義の署名として用いられる」とあります。

引用:https://www.ipa.go.jp/security/pki/024.html

また、同じく IPA の違うページで以下のようにも記載されています。

実際の社会では、契約書を交わすときなどに、本人がその契約書の内容を確かめ、正しいと認めたことを証明するためにその契約書に署名・捺印を行います。簡単にいうと、これらの契約書と署名・捺印の仕組みを電子化したものが電子署名です。

引用:https://www.ipa.go.jp/about/mail/signature.html

つまり、以下のように考えられるでしょう。

  • デジタル署名 = 技術的な要素としての署名方法
  • 電子署名 = 技術要素をバックボーンとした、現実社会の利用に耐え得る実用的な署名方法

実際、1 つのデジタル署名では「秘密鍵が誰にも知られていないこと」を担保に「秘密鍵の保有者=データを承認した人」という扱いをしますが、その秘密鍵や公開鍵を「社会ルール上で正しいもの」と保証してくれる仕組みまでは用意されていません。(秘密鍵/公開鍵は自前の PC でいくらでも作成できるので。)

また、署名した内容が後々 A さんにとって不利になったときに、A さんが「これ僕の秘密鍵じゃない (=公開鍵も違う)」と言い出したら大変です。秘密鍵は誰にも知られてはいけないわけで、生成するのは必ず A さんなのですから、1 つのデジタル署名では否認防止ができません。

そこで、電子署名では「この公開鍵は A さんの秘密鍵と対となるものですよ」とお墨付きしてくれる第三者機関「認証局」が必要です。

これも結局、A さんの公開鍵を認証局のデジタル署名によって認証局が承認することになるのですが、A さんが1人で「僕を信用しろ」と言うよりも、公的に信頼された機関が信用を保証してくれるので全然訳が違います。

認証局は A さんの公開鍵を、認証局の秘密鍵を使ってデジタル署名し、電子署名用のデジタル証明書に仕上げます。

この状態で署名を使い始めれば、後々 A さんが知らないと言い出しても認証局が『だってあなたこれで公開鍵を登録してますよね?』と言ってくれる訳です。

実は印鑑の世界でも同じ話があります。その辺で買った印鑑が社会ルール上でいきなり認められるわけではありません。役所に「印鑑登録」をしてもらうことでお墨付きをもらうのです。

印鑑登録と電子署名用のデジタル証明書の比較を以下に示します。

このモデルは SSL/TLS で使うデジタル証明書の公開鍵にお墨付きをしてくれる「ルート認証局」と全く同じです。

【図解】よく分かるデジタル証明書(SSL証明書)の仕組み 〜https通信フロー,発行手順,CSR,自己署名(オレオレ)証明書,ルート証明書,中間証明書の必要性や扱いについて〜
前提知識 デジタル証明書 (電子証明書) の理解のためにはまず RSA 公開鍵・...

なお、電子署名の具体的な認証局にはどのようなものがあるでしょうか。

例えば「電子政府の総合窓口 e-Gov (イーガブ)」では帝国データバンクやセコムトラストシステムズなどを認証局として案内しています。

デジタル署名とデジタル証明書の違い

デジタル署名は前述の通り、「RSA や DSA といった技術的な要素としての署名方法」であり、前提は「秘密鍵は署名を行ったホスト (PC/サーバ等) に存在しているが、その秘密鍵を保有 (管理) している人物/組織を保証する第三者は誰もいない」というものです。これを単体で適用しても、何か問題が発生したときの社会上の責任が曖昧になります。

これに対し、デジタル証明書は技術要素の「デジタル署名」を多段に利用して、秘密鍵を保有する人物を認証局が保証する仕組みの一要素」であり、前提は「ルート認証局は自分も通信相手も信頼している」ことです。

認証局は人物・組織を確認した上でデジタル署名を使ってデジタル証明書を発行します。

なお、「ルート認証局を信頼する」というのは例えばWindowsの場合は「信頼されたルート証明機関」にそのルート認証局の証明書(ルート証明書)が存在している状態です。以下の方法で自分がどのルート認証局を信頼しているかを確認できます。

【図解/Windows】ルート証明書のインストール方法と確認方法
デジタル証明書の確認 Windows でデジタル証明書のエラーが出た際、クライア...

電子署名と電子サインの違い

電子署名と似た言葉に、「電子サイン」というものがあります。

電子サインについては JIIMA (公益社団法人日本文書情報マネジメント協会) が 2019 年 5 月に公開した「電子契約活用ガイドライン Ver.1.0」では以下のように記載されています。

一般的には、「電子サイン」はサインを行う際に第三者認証までは行わないため導入しやすく、電磁的記録 (電子文書等) の確認や承認などのプロセスで幅広く利用される傾向があり、「電子署名」は、第三者による本人認証や高度な暗号技術要素が加わるため、重要性の高い厳格な契約の締結で利用される傾向があります。

なので、例えば Adobe Acrobat Reader の「入力と署名」を使ったサインは「電子サイン」に分類されるでしょう。

電子契約とは

電子契約とは、紙の契約書を使わず、電子データのみで契約を取り交わす手法です。

前述の JIIMA (公益社団法人日本文書情報マネジメント協会) の「電子契約活用ガイドライン Ver.1.0」では以下のように定義されています。

電子的に作成した契約書を、インターネットなどの通信回線を用いて契約の相手方へ開示し、契約内容への合意の意思表示として、契約当事者の電子署名を付与することにより契約の締結を行うもの。

書面契約と電子契約の比較

書面契約と電子契約の比較を以下に示します。

書面契約電子契約
署名方法印鑑を押印データのハッシュ値を秘密鍵で暗号化
署名対象紙の契約書電子の契約書 (PDF等)
署名の確認印影を目視公開鍵で復号しハッシュ値を検証
保管書棚などディスク内

タイムスタンプ技術

電子署名には「誰が」「どのようなデータを」承認したのかは分かりますが、「いつ」という情報の技術的証明が抜けています。(例えばサイン時に悪意をもって PC やサーバの時刻をずらしたとしたら。。。)

それを客観的、技術的に保証する仕組みが『タイムスタンプ技術』です。

タイムスタンプ技術では外部の TSA (Time Stamping Authroty : 時刻認証局) から、「いつ」その文書をサインしたかを保証してもらいます。TSA 事業を行うためには、日本データ通信協会から認定される必要があります。

TSA 認定事業者一覧

タイムスタンプの実装方法はいくつかあります。例えば RFC3161 で定義されている、デジタル署名技術を使った「タイムスタンププロトコル」があり、セイコーソリューションズ社ではこれを使っているようです。(FAQ 参照)

長期署名

電子署名法施工規則第6条4項によると、電子証明書の有効期間は「5年を超えない日」までとされており、電子署名の期限も当然その日までです。

これは主に技術進歩による暗号技術の危殆化を見据えてのことになりますが、一方で契約書の長期保管の需要もあるでしょう。そのようなケースにおいては「長期署名」という仕組みが使えます。

これは、電子署名の期限が切れる前に、検証資材など全てを含めて新たなタイムスタンプ署名を行う方式です。

RFC5126 では CMS (Cryptographic Message Syntax) として様々なフォーマットを規定しており、その中で長期署名に対応した「ES-X Long」といったフォーマットも用意されています。

このように危殆化したアルゴリズムを最新のアルゴリズムで包むことにより、長期にわたって改竄検知、否認防止を保証することができます。

コメント

タイトルとURLをコピーしました