最終更新日:2002年11月27日
本章においては、PKI の基盤技術である「公開鍵暗号方式」を中心に、「共通鍵暗号方式」、「セキュアハッシュ関数」等、関連する技術要素について解説します。また、それらの技術要素を用いた「暗号化」、「デジタル署名」の機能について解説します。
暗号通信は、意図した特定の人物に対して、秘密に情報を送信したい場合に使用されます。単純な暗号の例としては、アルファベットの各文字を決められた数だけずらす換字暗号と呼ばれるものがあります(図 2-1)。
図 2-1 換字暗号
この例において、「アルファベットの各文字を決められた数だけずらす」という決まりをアルゴリズムと呼び、「3文字」という値を鍵とよびます。送信者と受信者の間で鍵を秘密にしておくことにより、情報を安全に送信することができます。
暗号化と復号に同じ鍵を用いる暗号方式を、共通鍵暗号方式 (Symmetric cryptography) [7] と呼びます。また、共通鍵暗号方式で使用する鍵を、共通鍵 (Symmetric Key) [8] と呼びます。
共通鍵暗号方式を用いたメッセージの交換方法を説明します(図 2-2)。
図 2-2 共通鍵暗号方式
メッセージの送信者である A さんは、以下の手順を行います。
(1) 共通鍵を生成します。
(2) 安全な方法を用いて、生成した共通鍵を B さんに送信します。
(3) 生成した共通鍵を使って、B さんに送信するメッセージ(平文)を暗号化します。
(4) 暗号化したメッセージ(暗号文)を B さんに送信します。
次に、受信者である B さんは、以下の手順を行います。
(5) A さんから暗号文を受信します。
(6) 事前に安全な方法で受領した共通鍵を使用して暗号文を平文に復号します。
仮に A さんが B さんに送信した暗号文が第三者に盗まれても、その第三者は共通鍵を持たないためにメッセージを復号できません。このようにして、メッセージを安全に送信することができます。
共通鍵暗号方式では、受信者が送信者に対して共通鍵を安全に送信しなければなりません。小さなコミュニティであれば手渡しなどで共通鍵を配布できますが、インターネットといった大規模で不特定多数の利用者が存在する場合は、共通鍵の配送が非常に困難になります。
このような鍵配送の問題を解決する画期的な方式として、公開鍵暗号方式が考案されました。公開鍵暗号方式については 2.2節において解説します。
共通鍵暗号方式を含む暗号は、「アルゴリズム」と「鍵」から構成されます。
「アルゴリズム」とは、平文をどのように暗号化するかを定めたものです。共通鍵暗号方式の代表的なアルゴリズムとしては、DES (Data Encryption Standard) などがあります。
「鍵」とは、暗号化や復号を行う際に用いる秘密のデータ(ビット列)です。鍵の長さは使用するアルゴリズムによって異なり、DES の場合は 56bitの長さの鍵 [9] が使用されます。
鍵を知らない第三者が暗号文を解読することを攻撃といいます。攻撃の手段として、想定される全ての鍵を順番に試していく総当り攻撃があります。近年のコンピュータの急速な発達により、総当り攻撃に必要とされる時間が短くなっています。1999年には、総当り攻撃によって DES 暗号を 22時間で解読したとの報告 [10] もあります。
総当り攻撃への対策としては、長い鍵を使用することで解読にかかる処理時間を増すことです。鍵が長いほど鍵の組み合わせ数が多くなるため、総当り攻撃に対する安全性が高まります。現在では、重要な情報を暗号化する際には、DES よりも長い鍵をもつ Triple-DES [11] などを使用することが推奨されています。
アルゴリズムによっては特定の攻撃法が存在する場合もあります。鍵が長くても、セキュリティホールが存在すると総当り攻撃以外の方法により容易に暗号を解読される恐れがあります。そのため、共通鍵暗号を使用する際には、アルゴリズムが広く知られていて、暗号 技術の専門家によって正しく評価されているものを選択しなければなりません。
共通鍵暗号方式を大別すると、ブロック暗号方式とストリーム暗号方式に分類されます。
ブロック暗号方式は、平文を一定の長さに分割してそれぞれを暗号化する方式です。平文を分割したものをブロック、分割する長さをブロック長と呼びます。ブロック暗号方式の代表的なものに DES、RC2、IDEA などがあります。
ストリーム暗号方式は、平文を分割せずに逐次(1〜数ビット毎)暗号化する方式です。代表的なものに、RC4 が存在します。
主な共通鍵暗号方式のアルゴリズムを示します(表 2-1)。
表 2-1 共通鍵暗号方式の種類
種別 |
鍵長 |
方式 |
概要 |
DES
|
56bit |
ブロック暗号 |
Data Encryption Standard の略です。 IBM が開発した共通鍵暗号アルゴリズムをもとに、1977年に NIST によって FIPS 標準として採用されました。DES は仕様が公開されています。 |
Triple-DES |
168bit |
ブロック暗号 |
DES の安全性を高めるために考案されたもので、DES を 3回繰り返します。3回とも別の鍵を使用する 3KEY方式と、1回目と 3回目に同じ鍵を使用する 2KEY方式があります。NIST によって FIPS 標準として採用されています。 |
IDEA
|
128bit |
ブロック暗号 |
International Data Encryption Algorithm の略です。 データを 64bits のブロックに区切るブロック暗号化方式で、線形解読法や差分解読法といった攻撃方法に対して、十分な強度を持つように設計されています。 Ascom-Tech 社によって開発され、特許が取得されています。 |
RC2 |
可変 (8〜1024bit) |
ブロック暗号 |
RSA 社によって開発されました。可変長の暗号鍵が使えるのが特徴です。 RFC2268 として仕様が公開されています。 差分解読法に対する耐性について問題が指摘されています。 |
RC4 |
可変 (40〜256bit) |
ストリーム暗号 |
RSA 社によって 1987年に開発されたストリーム暗号方式です。 仕様の詳細は公開されていません。 |
RC5 |
可変 (最大2048bit) |
ブロック暗号 |
RC2 の後継として、RSA 社によって開発されました。シンプルな実装となっており、高い計算能力を必要としません。 特許が申請されており、仕様が公開されています。 |
CAST-128 |
可変 (最大128bit) |
ブロック暗号 |
Entrust Technologies 社によって開発されました。 線形解読法に対して強い設計となっています。 RFC2144 として仕様が公開されています。 |
AES
|
可変 (128, 192, 256bit) |
ブロック暗号 |
Advanced Encryption Standard の略です。 NIST の次世代暗号標準。 DES の後継として NIST が公募し、2001年に、Rijndael 暗号方式が採用されました。 |
ブロック暗号方式において、分割したブロックに対して個別に暗号化を行うと、以下のような危険性が発生します。
(1) 特定のブロックのみが攻撃の対象となります。攻撃者は、暗号文の重要だと思われる箇所に絞って攻撃する可能性があります。一般に暗号文全体を解読するよりも、一部分のみを解読するほうが容易です。
(2) 同じ平文のブロックからは同じ暗号文が生成されるため、同じような文が続く文書では、攻撃者が原文を推測することが容易になります。
この危険性を回避するため、前のブロックの暗号結果を次のブロックの暗号化に使用することにより、各ブロックに相関関係を持たせるブロックチェイニングと呼ばれる方式が用いられます(表 2-2)。ブロックチェイニングでは、CBC (Cipher Block Chaining) モードが最もよく使用されます。
表 2-2 チェイニングモード
種別 |
説明 |
ECB |
分割した各ブロックに対して、それぞれ個別に暗号処理を行います。各ブロックに相関関係が無いため、特定のブロックだけを狙われる危険性があります。 |
CBC |
暗号処理が完了した直前のブロックと次のブロックとの排他的論理和 (XOR) をとり、この値に対して暗号処理を行います。各ブロックが連鎖的に暗号処理されるので、特定のブロックのみを攻撃することができません。ブロック内でビット・エラーが発生した場合、以降のブロックの暗号処理に影響を与えます。 |
CFB |
直前のブロックの暗号処理結果が、次のブロックの XOR をとる値としてフィードバックされます。ブロック内でビット・エラーが発生した場合、以降のブロックの暗号処理に影響を与えます。 |
OFB |
ブロックごとに乱数を生成し、これと対応するブロックの XOR をとる。前ブロックで生成された乱数を暗号化したものが、次ブロックで使用する乱数となる。ブロック内で発生したビット・エラーが、以降のブロックの暗号化に影響を与えません。 |
前のページ 目次 次のページ Copyright © 2002 Information-technology Promotion Agency, Japan. All rights reserved.