デジタル署名とは|電子メールの暗号化(3)
- 著者:YAMANJO
- 公開日:2008年11月24日
- 最終更新日:2026年2月7日
デジタル署名(電子署名)とは何か、デジタル署名の仕組みと使い方について具体的に理解していきましょう。
デジタル署名とは
暗号通信が本当に安全なのかについては、前項で学習した8つの疑問を解消することによって証明しなければなりません。つまり、それができなければ本当に安全な通信とは言えないのです。
では、どのように証明するのかというと、ひとつの簡単な方法があるわけではなく、いくつかの方法を組み合わせて検証します。
もっともメジャーな証明方法のひとつが、
デジタル署名(電子署名)という方法です。
文字どおり、インターネット上で自分自身を証明する「署名(サイン)」のことです。
厳密に言えば、デジタル署名と電子署名は異なる概念で、電子署名が広範な概念であるのに対し、デジタル署名は電子署名の一方式であり、特定の技術を指します。
デジタル署名は、公開鍵暗号技術を用いて8つの疑問の一部を証明する仕組みですが、電子署名は、従来の署名や押印の代わりに電子的な方法で意思表示を行う仕組み全般を指す広い概念です。
つまり、電子署名のうち、公開鍵暗号を用いて信頼性を確保する技術がデジタル署名になります。
本項では、このデジタル署名について詳しく学習していきます。まず、デジタル署名の概要を理解しておきましょう。
紙の書類や契約書では、本人の筆跡で署名したり捺印することで、その書類や契約書が「本人のもの」であることを証明します。それと同じで、電子メールに自分の筆跡でサインしたり捺印するイメージです。電子メールに「デジタル署名」を付けて送信することで、本人であることを証明し「なりすまし」を防ぐことができます。
デジタル署名の仕組み自体は少々難解ですが、イメージは単純です。
なぜなら、
公開鍵暗号方式の通常の通信の流れを逆にしたもの
だからです。
どういうことかというと、
自分の秘密鍵で暗号化して相手に送信する
ということです。
前項と同様に「あなた」と「花子さん」が通信を行う場合を例にして、考えてみましょう。
通常、公開鍵暗号方式の通信は、花子さんの「公開鍵」で暗号化して花子さんに送信するというものでした。デジタル署名は、逆にあなたの「秘密鍵」で暗号化して送信します。

片方の鍵で暗号化したものは対のペアとなる鍵でしか復号化できないというのが公開鍵暗号方式の原則でした。「秘密鍵」で暗号化して送信してしまうとどうなるでしょうか?
公開している「公開鍵」で誰にでも復号化することが可能になる
ということになってしまいます。
しかし、この方法により証明できることがあります。
秘密鍵で送信してきたということは本人に間違いないということです。
なぜなら、秘密鍵は本人しか持ち得ないので、公開鍵で正しく復号化できれば本人に間違いないということになるからです。つまり、他人が手に入れることのできない秘密鍵で暗号化することは本人以外不可能なため、「なりすまし」が行われていないことになります。
このことによって、「花子さん」側からすると送信相手が「あなた」であることが証明され、また正しく復号化できたのであれば、「あなた」の公開鍵が「あなた」のもので間違いないということも証明されたことになります。
そしてさらに「あなた」は、送信の事実を「否認」できなくなります。
なぜなら、「あなた」の公開鍵で正しく復号化できたということは、送信者は秘密鍵を持っている「あなた」に間違いない、すなわち送信者は「あなた」しかいないという証明がなされたことになるからです。
このようにデジタル署名には、
送信者が本人である証明、公開鍵が本人のものである証明、否認防止
という3つの認証機能があります。(もうひとつ大きな機能がありますが後述します)
さて、とはいうものの公開鍵で誰にでも復号化できるのであれば、暗号化通信を行う意味がないようにも思われます。暗号文の内容が誰に見られても良いものでなければならないからです。
また、一体どこが「署名」なのでしょうか?通常の公開鍵暗号方式の流れを逆にしただけです。
その理由は、デジタル署名の場合、本文を暗号化して送信するわけではなく、本文とは別の暗号文を作成しているからです。この別の暗号文がデジタル署名になります。
つまり、デジタル署名は、あくまで送信者の素性を証明することが目的であり、機密情報を送信するわけではありません。多くの場合、本文はそのまま平文で送り、その本文とは別の暗号文であるデジタル署名を添付します。
デジタル署名による証明の後に相手から本当の暗号文を送ってもらう
というのが一連の流れになります。
多くの場合は、デジタル署名と一緒に公開鍵を付けて相手に送信し、本人確認のあと、その公開鍵で暗号文を送ってもらいます。現在では、同時並行的に処理されることが多いですが、暗号通信の前提として流れを理解しておきましょう。
メッセージダイジェストとは
では何を暗号化するのかというと、
メッセージダイジェスト(またはハッシュ値)と呼ばれるデータを暗号化します。
メッセージダイジェスト(ハッシュ値)とは、
本文より「ハッシュ関数」という一方向関数を用いて抽出したビット列
のことを言います。
イメージが少々難しいですが、ハッシュ関数を用いると、入力データ(本文)の長さに関係なく、一定の長さのビット列が生成されます。例えば128ビットや256ビットといった固定長のビット列になります。
コンピュータからするとメール本文も0と1のビット列に変わりありません。文章が長くなるとビット列が長くなるだけのことです。このビット列全体をハッシュ関数に当てはめ、一定の長さのビット列に変換します。
一定の長さというのは、ハッシュ関数のアルゴリズム(詳しくは後述します)によって異なりますが、128ビットや256ビットといった決まった長さのビット列(ビット長)に変換されるということです。
例えば「あ」という一文字からでも128ビットのビット列が生成されます。短い文章でも長い文章でも、またテキストだけでなく画像やプログラムなどのファイルでも、同じように固定長のハッシュ値が生成されます。

図のとおり、コンピュータの処理的には2進数のビット列ですが、ハッシュ値は「0~F」の16進数で表されます。(2進数と16進数については、その他の基礎知識編 2進数と10進数と16進数 を参照してください)
16進数は4ビットで1文字を表現する(0~1111=0~F)ので、例えば、128ビットを生成するハッシュ関数で32文字、256ビットを生成するハッシュ関数で64文字の16進数となります。
こうして、生成された一定の長さの16進数(ビット列)を「メッセージダイジェスト」または「ハッシュ値」と言います。他にも「フィンガープリント(指紋)」などと呼ばれる場合もあります。
そもそも、なぜハッシュ関数を用いてメッセージダイジェスト(ハッシュ値)を作成するのかということですが、ハッシュ関数とメッセージダイジェストには次のような特徴があるからです。
1.メッセージダイジェストから、もとのデータ(原文等)は復元、推測が困難
2.入力データが1ビットでも異なれば、生成されるハッシュ値は大きく異なる(雪崩効果)
3.同じハッシュ値を持つ異なるデータ(衝突)を作成することは極めて困難
という特徴です。
原文が同じ場合は、常に同じメッセージダイジェストが生成されます。しかし、1文字でも(1ビットでも)異なる原文からは、異なるメッセージダイジェストが生成されます。また、原文のデータ量に関わらず固定のビット列に変換されるので、コンパクトに収まるというメリットもあります。
このように暗号に近い特徴があるため、デジタル署名だけでなく、タイプスタンプと呼ばれる時刻証明や暗号資産のブロックチェーン(取引記録)など、様々なところで利用されています。(ブロックチェーンについては、Web3.0とは で詳しく学習します)
ハッシュアルゴリズムとは
ハッシュ関数によって生成されるビット列は、そのハッシュ関数の「アルゴリズム」によって異なると説明しましたが、アルゴリズムとは「手順やルール」といった意味で、計算手順や処理手順を意味します。
つまり、ハッシュアルゴリズムとはハッシュ関数の「種類」のことです。
現在の主なハッシュアルゴリズムは、以下のとおりです。
| 名称 | ビット長 | 詳細 |
|---|---|---|
| MD5 (エムディーファイブ) |
128 | 16進数で32文字。 衝突攻撃が実証されており、安全性が破られているため現在は推奨されていない。 |
| SHA-1 (シャー ワン) |
160 | 16進数で40文字。 長年標準的に使用されてきたが、衝突攻撃が実証され、現在はSHA-2への移行が進んでいる。 |
| SHA-2 (シャー ツー) |
224、256、384、512 | 256ビットなら16進数で64文字。 現在の標準規格。SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256の6つの種類があり、SHA-256がもっとも利用されている。 |
| SHA-3 (シャー スリー) |
224、256、384、512 | SHA-2とは異なる構造を持つ次世代の標準アルゴリズム。 SHA-2がまだ安全であり、SHA-2が広く実装済みのため、あまり移行は進んでいない。 |
ハッシュ関数の場合も、暗号アルゴリズムと同様にビット長が長いほど理論上の安全性は高まります。ただし、アルゴリズムの設計自体に脆弱性がある場合は、ビット長が十分であっても安全とは限りません。
一般にビット長が長いほど計算量は増える傾向があり、処理負荷も高くなります。そのため、時代や計算能力の向上に応じて推奨されるアルゴリズムは変化してきました。
古いアルゴリズムでは、異なるデータから同一のハッシュ値が生成される「衝突」を人工的に作り出せることが確認されています。これを利用した衝突攻撃が実証されているため、MD5やSHA-1は現在推奨されていません。
ただし、ハッシュ値から原文を復号化できる容易な方法が発見されたというわけではなく、基本的にハッシュ値だけから原文を復元することはできません。(同じハッシュ値をもつ別のデータを生成することが可能なだけで、同じハッシュ値をもつ原文を自由に作成できるわけではない)
しかし脆弱性がある以上、推奨されている適切なアルゴリズムを使用することが求められます。現在では「SHA-2(SHA-256)」がもっとも利用されています。SHAは「Secure Hash Algorithm」の略になります。
デジタル署名の目的
ハッシュ関数によって生成されたメッセージダイジェストは、先述のとおり、秘密鍵で暗号化して本文に添付されることになります。
つまり、秘密鍵で暗号化されたメッセージダイジェストが「デジタル署名」ということになります。イメージとしては、書類にサインや押印するように、本文に添付するイメージになります。

デジタル署名によって、送信者が本人である証明、公開鍵が本人のものである証明、否認防止が可能になると学習しましたが、じつは、メッセージダイジェストの特徴を利用することによって、さらにもうひとつ大きな証明をすることが可能になります。
それは、
本文の「改ざん」も検証することができる
ということです。
同様に「あなた」と「花子さん」の通信を例にしてみましょう。
流れとしては、メッセージダイジェストを送信者の秘密鍵で暗号化し、「暗号化したメッセージダイジェスト」と「本文」と「公開鍵」の3点セットを「花子さん」に送ります。
そして「花子さん」は「あなた」の公開鍵でメッセージダイジェストを復号化します。
次に「花子さん」は、平文の本文からハッシュ関数を用いて新たにメッセージダイジェストを作成します。同じデータからは同じハッシュ値が生成されるはずなので、生成したメッセージダイジェストと復号化したメッセージダイジェストを比較して一致すれば、改ざんされていないということになります。

もし、本文がわずかでも改ざんされていたら、2つのメッセージダイジェストは一致しません。
このように、デジタル署名には「改ざん検知」の機能が加わることとなります。
送信者が本人である証明、公開鍵が本人のものである証明、否認防止、改ざん防止(検知)
という4つの認証機能を持つことになります。
デジタル署名という名称から、本人確認だけに用いるイメージがありますが、このように多くの仕事をやってくれています。デジタル署名によって受信者に送信者の正当性(真正性)を証明し、デジタル署名とセットで送付した公開鍵で、受信者に情報を送ってもらうようにすれば安全な通信が確立します。
はたしてそうでしょうか?
気づいた方はさすがです。じつはデジタル署名だけでは、8つの疑問はまったく解消できないのです。
公開鍵暗号方式によって「盗聴」を防止し、デジタル署名によって「改ざん」と「否認」が防止できることを学習しました。しかし、デジタル署名だけでは、一番防止しなければならない「なりすまし」を完全に防止することができないのです。
どんなケースが考えられるかというと、
本文とデジタル署名と公開鍵の3点すべてを「なりすまし」によって差し替えられた場合
は見事に攻略されてしまうのです。
例えば「あなた」が「花子さん」にデジタル署名付きのメールを送る際に、悪意のある第三者「吉良さん」が、通信経路の途中で「あなた」のメールをすべて奪い取って差し替えるケースです。
デジタル署名は「あなた」の秘密鍵で暗号化されているため、悪意ある第三者の「吉良さん」は、「あなた」の公開鍵で復号化することが可能です。本文は平文のため、デジタル署名を復号化してもあまり意味はありませんが、「吉良さん」が本文を改ざんし、改ざんした本文からメッセージダイジェストを生成したらどうでしょうか?この場合は「吉良さんの秘密鍵」でデジタル署名をしています。
つまり、これですべての差し替えが可能になるのです。改ざんした本文と、それから生成したデジタル署名、「吉良さん」の公開鍵を3点セットで差し替えて「花子さん」に送信します。
「花子さん」が受け取るのは、「吉良さんの本文」「吉良さんのデジタル署名」「吉良さんの公開鍵」になりますが、「花子さん」がメッセージダイジェストを比較すると完全に一致してしまいます。

「花子さん」からすると、送信者は「あなた」であることに疑いようがなく、「吉良さん」は見事になりすましが成功します。
したがって、
デジタル署名だけでは、本人であることを証明できない
のです。
ではどうすればいいのかというと、他の仕組みと組み合せることになります。ポイントは「公開鍵」です。公開鍵が誰のものであるのか(誰が作成した鍵なのか)を証明することができればすべての問題が解決します。
どうしてそれを証明できればすべて解決するのか考えてみてください。詳しくは次項で学習します。
更新履歴
- 2008年11月24日
- ページを公開。
- 2009年5月22日
- ページをXHTML1.0とCSS2.1で、Web標準化。レイアウト変更。
- 2018年1月30日
- ページをSSL化によりHTTPSに対応。
- 2026年2月7日
- 内容修正。
著者プロフィール
YAMANJO(やまんじょ)
- 経歴
- 岡山県出身、1980年生まれ(申年)の♂です。現在、総合病院で電子カルテなどの情報システム担当SEとして勤務。医療情報学が専門ですが、ネットワーク保守からプリンタの紙詰まり、救急車の運転手までこなしています。
- 医療情報技師、日本DMAT隊員。ITパスポート、シスアドなど、資格もろもろ。
- 趣味は近所の大衆居酒屋で飲むこと、作曲(ボカロP)、ダイビング。
- 関連リンク
- 詳細なプロフィールはこちら
- 作成したボカロ曲などはYoutubeへ
- X(Twitter)
