RSA暗号体験入門

目次 | 第1章 | 第2章 | 第3章 | 第4章

第4章 認証技術

 ここまで秘匿機能としての狭義の暗号技術について説明しましたが, ここでは広義の暗号技術において秘匿機能と対をなす認証技術について説明します。
 認証とは,人あるいは物が正しい(偽造されていない)ものかどうかを検証する作業のことです。 この認証は暗号技術の中でも最も基本的な技術の一つです。 認証技術としては,通信相手の正当性を認証する相手認証やデータの正当性の認証を行う ディジタル署名などがあります。


4.1 相手認証

 相手認証とは通信相手の正当性を認証するための手法ですが,それにはパスワード方 式が現在最も広く使われています。パスワード方式とは,利用者(証明者)がセンターにア クセスする際に,秘密に保持するパスワードをセンター(検証者)に送信することで利用 者の正当性を証明する方式です。 インターネットやパソコン通信などのネットワークに接続する際にはこの方法が利用されることが 一般的です。
 しかし,ネットワークを経由してパスワードが送られることは,盗聴の危険などを伴うので, 安全性において問題があります。 そのため,暗号・認証機能を使って安全に相手認証を行うことができる手法が要求されます。 例えば,以下のような方法が考えられています。
これら以外に,次に述べるディジタル署名方式を利用した相手認証方式なども有効です。


4.2 ディジタル署名

 ディジタル署名(電子署名,電子印鑑)とは,データの正当性の認証を行うための方式 です。これは公開鍵暗号方式を利用することによって実現されます(ただし信頼できる機 関があれば秘密鍵暗号方式でも実現可能です)。
 コンピュータネットワーク上でデータを送る際に,自分が確かにデータを送った本人で あることを相手に証明したい場合があります。このような場合に,もし自分の印鑑のパターン 情報をそのデータに付加すればどうでしょうか。こうすれば,データを受信した人は,デー タに付加されている送り主の印鑑パターンから,それが確かに本人の印鑑パターンである ことを確認することはできます。
 しかし,それが本当に本人が付加したものであるという証明にはなりません。しかも,そ の方法では受信者あるいは盗聴者はその印鑑パターンを他のデータに自由に付加すること が可能です。さらに,受信者や盗聴者はその印鑑パターンを自由に偽造することも可能 です。そのため,そのデータが途中で悪意を持つ者によって改ざんされていないことを 証明する方法が要求されるのです。このような要求に応える技術がディジタル署名です。
 以上のことから,ディジタル署名は,実際の物理的な署名と同様に,データの正しい作 成者(あるいは送信者)とデータの正当性(データが改ざんされていないこと)を証明す るためのもので,本人しか作成できないものでなければなりません。しかも,その署名の正 当性は誰にでも検証できるものでなければなりません。
 このようなディジタル署名を実現するためには,公開鍵暗号の原理を利用すればよいのです。 つまり,署名文を作成できるのが秘密鍵(署名鍵)を持っているユーザだけであることを 利用します。公開鍵(検証鍵)は公開されているので,検証は誰にでもできます。


4.2.1 ディジタル署名の作成と検証

 では,ディジタル署名の作成から検証までの一連の流れを以下に示します。
  1. 送信者(ディジタル署名をする人)は,公開鍵暗号方式に従い予め公開鍵と秘密鍵 を作成しておく。そして,秘密鍵を自分だけの秘密にし,公開鍵だけを受信者に公 開する。
  2. 送信者は署名したい平文データMを秘密鍵で暗号化する。これにより作成された暗 号文Sがディジタル署名です。
  3. 送信者は元の平文データMにディジタル署名Sを付加して送る。
  4. 受信者は平文データMとディジタル署名Sを受け取る。
  5. 受信者は送信者から知らされている公開鍵でディジタル署名Sを復号化する。その 結果をmとする。
  6. もしMとmが一致すれば,平文データMと送信者(署名者)の正当性が証明される。 逆に,もしMとmが一致しなければ,平文データMまたはディジタル署名Sが改ざんされ たことが分かる。
 このような公開鍵暗号を利用したディジタル署名の信頼性を証明するためには, 上の手順6が必ず成り立つことを示せばよいです。 これは,署名文を作成できるのが秘密鍵を持っている送信者だけであることから 簡単に示すことができます。
 仮に平文データMが改ざんされていた(M’とする)としても, 公開鍵で復号化してM’と一致し得る偽のディジタル署名S’をM’から作成できるのは, 秘密鍵を持つ真の送信者だけです。 つまり,悪意を持つ者が平文データMを改ざんしたとしても, 公開鍵で復号化したときに偽の平文データM’と一致するような偽のディジタル署名S’を 作ることは不可能です。 したがって,手順6は必ず成り立つのです。 ただし,秘密鍵(署名鍵)を知られてしまえば,それは当然成り立たなくなります。
 また,公開鍵(検証鍵)は公開されていても正当であることが保証されていなければなりません。 そのためには,信頼できる機関が公開鍵に署名を施しておけばよいのです。


4.2.2 ハッシュ関数によるデータ圧縮

 実際にディジタル署名を利用する場合には,ハッシュ関数と呼ばれる一方向 性関数であるデータ圧縮関数を併用します。その方法を簡単に説明すると次の通りです。
  1. まず,平文Mをハッシュ関数Hにより基本単位の長さ以下H(M)まで圧縮する。
  2. ディジタル署名するときは,このH(M)に対して秘密鍵で暗号化(署名)し, それを平文Mとともに送る。
  3. そして,受信者は受け取った平文Mをハッシュ関数Hで圧縮し,それと署名を検証する。
この手法は平文Mが鍵(係数n)の長さよりも長い場合に使われます。 ただし,ここでは詳述はしません。

 ディジタル署名を実現する方式としては,例えば,素因数分解に基づくRSA署名方式やESIGN署名や フィアット・シャミア署名,離散対数に基づくエルガマル署名やDSA署名やシュノア署名, 楕円離散対数に基づく楕円エルガマル署名や楕円DSA署名や楕円シュノア署名などがあります。
 以下では,これらの中からRSA署名方式を取り上げて説明します。


4.3 RSA署名方式

 ここでは,ディジタル署名の中で最も広く使われているRSA暗号方式を利用したRSA署名方式について 説明します。 RSA暗号では最初に公開鍵を使って暗号化し,それを秘密鍵を使って復号化しました。 それに対し,RSA署名では最初に秘密鍵を使って署名を作成し,公開鍵を使ってその署名を検証します。


4.3.1 RSA署名の原理

 ディジタル署名の手順は,4.2.1で示した通りですが,RSA署名を行う際はこ れにRSA暗号の原理を適用します。以下にその手順を示します。ただし,平文Mが鍵の長さn よりも短い場合を想定し,ハッシュ関数によるデータ圧縮は行わないものとします。

・公開鍵と秘密鍵を作成する

 まず,RSA署名での公開鍵と秘密鍵を作成しますが,それはRSA暗号での作成方法と 同じです。つまり,以下の手順に従えばよいです。
  1. 2つの大きな素数p,qを選択する。
  2. n=pqとφ(n)=(p−1)(q−1)を計算する。このnを係数と呼ぶ。
  3. gcd(e,φ(n))=1の関係をもつ乱数e(公開指数)を選択する。 この公開指数eと係数nが公開鍵(e,n)となる。
  4. de=1 mod φ(n)となるd(秘密指数)を計算する。 この秘密指数dと係数nが秘密鍵(d,n)となる。
  5. 公開鍵(e,n)を公開する。p,q,dは誰にも知られないようにしておく。

・文書に署名を付加する

 文書Mに対してディジタル署名Sを作成するためには,秘密鍵を使って次の計算を施します。
    S=M^d mod n ・・・・・・・・・・(1)
ここで作成された署名Sを,元の文書Mに付加します。

・署名を検証する

 元の文書Mに付加されている署名Sを検証するためには,公開鍵を使って次の計算を施す。
    m=S^e mod n ・・・・・・・・・・(2)
もしこのmが元の文書Mと一致すれば,署名Sは正しく,文書Mと署名者の正当性が証明されます。 逆に,もしmが元の文書Mと一致しなければ,署名Sは正しくないので,文書Mまたは 署名者が正しくない事が分かります。


4.3.2 RSA署名の実行例

 以下に,鍵の作成から署名作成,署名検証までの一連の流れの例を示します。 ただし,分かりやすくするために安全でない鍵を使うものとします。
 AさんはBさんにネットワークを介して契約書M(その内容は簡単のため数値化されているとして 10000であるとします)にディジタル署名を付けて送りたいとします。 ここですでに,Aさんは署名用の秘密鍵(13543,16637)を,Bさんはそれに対応する検証用の公開鍵 (4567,16637)をそれぞれ持ち合わせています (2.3で作成したため)。
 Aさんは,上述した署名作成の式(1)を使って,契約書M(内容は10000)に対する ディジタル署名Sを作成します。
    S=10000^13543 mod 16637=468
そして,契約書Mにこの署名Sを付加し(10000,468),EメールでBさんに送る。
 Aさんから送られた契約書Mとその署名Sを受け取ったBさんは,早速上述した署名検証の式(2) を使って,署名S(内容は468)の検証を行います。
    m=468^4567 mod 16637=10000
これは確かに元の契約書Mの内容と一致するので,契約書の内容と契約者の正当性は確かめられます。
 以上のように,AさんはBさんにネットワークを介して契約書の内容を保証することができるのです。



目次 | 第1章 | 第2章 | 第3章 | 第4章

CyberSyndrome - The Proxy Search Engine