TOPサーバ構築・運用> デジタル署名のメカニズム
いまさら聞けないApache〜Webサーバ構築のキソ
いまさら聞けないApache〜Webサーバ構築のキソ

第6回:SSLの基本を押さえる

著者:ビーブレイクシステムズ  木下 喜雄   2007/11/14
前のページ  1  2  3  次のページ
デジタル署名のメカニズム

   デジタル署名とは「データの送り主が鍵の持ち主であること」「データが途中で改ざんされていないこと」のそれぞれを確認するためのメカニズムです。どのようなメカニズムでそれぞれ確認しているのか見ていきましょう。

データの送り主が鍵の持ち主であること

   暗号化のところで触れたように、公開暗号鍵方式は「公開鍵で暗号化したデータは、正しいペアの秘密鍵でなければ復号化できない」、あるいは「秘密鍵で暗号化したデータは、正しいペアの公開鍵でなければ復号化できない」という特徴があります。この特徴を利用すると「データの送り主が鍵の持ち主であること」を証明することができます。

   受け取ったデータを事前に取得した公開鍵で復号化できれば、正しいペアの秘密鍵で暗号化されたことの証明になるからです。


データが途中で改ざんされていないこと

   「データが途中で改ざんされていないこと」を確認するためには、一方向ハッシュ関数と呼ばれるアルゴリズムを用います。一方向ハッシュ関数とは、データを渡すと別のデータ(ハッシュ値)を生成する関数です。

   一方向ハッシュ関数には「生成されるハッシュ値は、元の値が1ビットでも変わると異なる値になる」「生成されたハッシュ値から元の値を逆算できない(一方向性)」「元のデータの長さに関係なく、生成されるハッシュ値の長さは一定」という特徴があります。

   Webサーバがデータのハッシュ値を計算し、クライアントに知らせておきます。受信者は受信データのハッシュ値を独自に計算し、Webサーバのハッシュ値と一致していれば改ざんされていないと判断できるのです。よく知られる一方向ハッシュ関数にはSHA-1やMD5などがあります。

   このようにして「データの送り主が鍵の持ち主であること」と「データが途中で改ざんされていないこと」を確認しています。


デジタル証明書

   しかし、OpenSSLなどを利用すれば誰でも自由に鍵ペアを生成することができます。そのため、正しい鍵ペアだから送り主が「本物」であるとはいい切れません。

   そこで登場するのが「デジタル証明書」です。デジタル証明書とは、認証局(CA)が発行する「身元保証つき公開鍵」のことです。通常の鍵ペアと異なる点は、公開鍵に認証局のデジタル署名が施されている点です。

   デジタル証明書には、Webサーバの公開鍵やデジタル署名の情報以外にも、鍵ペアが対応している暗号化アルゴリズム、証明書の有効期限といったさまざまな情報が記載されています。デジタル署証明書の記述形式には「X.509」という規格が決められています。

   これらの情報に対して認証局が一方向ハッシュ関数でハッシュ値を算出し、それを認証局自身の秘密鍵で暗号化(これがデジタル証明書本体)して、「デジタル署名データ」として添付します。

デジタル署名の流れとデジタル証明書のフォーマット
図2:デジタル署名の流れとデジタル証明書のフォーマット
(出展:独立行政法人 情報処理機構「http://www.ipa.go.jp/index.html」)
(画像をクリックすると別ウィンドウに拡大図を表示します)


認証局(CA)とは

   デジタル証明書の発行をする組織のことです。通常は民間企業が認証局になります。認証局は、鍵と証明書のライフサイクル管理したりデジタル証明書の発行を申請した人の正当性を審査したりします。

   インターネットでは、ユーザ数が膨大になるため1つの認証局ですべてのユーザをカバーすることはできません。そのため、複数の認証局を階層構造に分類し、頂点に立つ「ルート認証局」と、ルート認証局から認証を受けて稼動する「中間認証局」に分けられています。中間認証局は上位の認証局から「この認証局は信頼できる」という証のデジタル署名を受け、それを中間認証局が発行するデジタル証明書に付加します。

前のページ  1  2  3  次のページ


株式会社ビーブレイクシステムズ  木下 喜雄
著者プロフィール
株式会社ビーブレイクシステムズ  木下 喜雄
Javaスペシャリスト。前職ではCOBOL、Visual Basicを用いた大規模流通業向けシステム開発を行う。その現場で大規模システム構築時の開発効率の向上を目指してオブジェクト指向的な考え方を身につける。その後独学でJava言語を習得し、Java専業ベンダーであるビーブレイクシステムズに転職、現在は、Javaを用いた開発だけではなくお客様とのリアルコミュニケーションを実現できるマルチなエンジニアを目指し、日々奮闘中。


INDEX
第6回:SSLの基本を押さえる
  SSL(Secure Sockets Layer)とは?
デジタル署名のメカニズム
  SSLで暗号化通信をする際の動作内容