(57)【特許請求の範囲】
【請求項１】
コンピュータを、
バイナリデータを圧縮する圧縮手段、
複数のバイナリデータを結合させる結合手段、
該コンピュータに入力されたメッセージを前記圧縮手段により圧縮した圧縮メッセージから、一部データを抜き落として欠落圧縮メッセージと欠落データとを生成する抜落手段、
セッション鍵を用いて共通鍵暗号化アルゴリズムによって前記欠落圧縮メッセージを暗号メッセージに暗号化する共通鍵暗号化手段、
前記欠落データと前記セッション鍵を前記結合手段により結合させ、公開鍵を用いて公開鍵暗号化アルゴリズムによって暗号ブロックに暗号化する公開鍵暗号化手段、
前記暗号メッセージと前記暗号ブロックを前記結合手段により結合させてハイブリッド暗号メッセージを生成するハイブリッド暗号化手段、
として機能させ、前記入力されたメッセージを暗号化するプログラム。
【請求項２】
請求項１に記載のプログラムにより生成されたハイブリッド暗号メッセージを前記入力されたメッセージに復号化するプログラムであって、
コンピュータを、
前記圧縮手段により圧縮されたバイナリデータを解凍する解凍手段、
前記結合手段により結合されたバイナリデータを前記複数のバイナリデータに分解する分解手段、
前記ハイブリッド暗号メッセージを前記分解手段により前記暗号メッセージと前記暗号ブロックに分解するハイブリッド復号化手段、
前記暗号ブロックを非公開鍵を用いて非公開鍵復号化アルゴリズムによって復号化し、前記分解手段により前記欠落データと前記セッション鍵に分解する非公開鍵復号化手段、
前記セッション鍵を用いて、共通鍵復号化アルゴリズムによって前記暗号メッセージを前記欠落圧縮メッセージに復号化する共通鍵復号化手段、
前記欠落圧縮メッセージに前記欠落データを埋め込んで前記圧縮メッセージを復元化する埋込み手段、
として機能させ、前記圧縮メッセージを前記解凍手段により解凍して前記入力されたメッセージに復号化するプログラム。
【請求項３】
バイナリデータを圧縮する圧縮手段と、
複数のバイナリデータを結合させる結合手段と、
を備える、メッセージを暗号化する装置であって、
該装置に入力されたメッセージを前記圧縮手段により圧縮した圧縮メッセージから、一部データを抜き落として欠落圧縮メッセージと欠落データとを生成する抜落手段と、
セッション鍵を用いて共通鍵暗号化アルゴリズムによって前記欠落圧縮メッセージを暗号メッセージに暗号化する共通鍵暗号化手段と、
前記欠落データと前記セッション鍵を前記結合手段により結合させ、公開鍵を用いて公開鍵暗号化アルゴリズムによって暗号ブロックに暗号化する公開鍵暗号化手段と、
前記暗号メッセージと前記暗号ブロックを前記結合手段により結合させてハイブリッド暗号メッセージを生成するハイブリッド暗号化手段と、
からなるメッセージを暗号化する装置。
【請求項４】
前記圧縮手段により圧縮されたバイナリデータを解凍する解凍手段と、
前記結合手段により結合されたバイナリデータを前記複数のバイナリデータに分解する分解手段と、
を備える、請求項３に記載の装置により生成されたハイブリッド暗号メッセージを前記入力されたメッセージに復号化する装置であって、
前記ハイブリッド暗号メッセージを前記分解手段により前記暗号メッセージと前記暗号ブロックに分解するハイブリッド復号化手段と、
前記暗号ブロックを非公開鍵を用いて非公開鍵復号化アルゴリズムによって復号化し、前記分解手段により前記欠落データと前記セッション鍵に分解する非公開鍵復号化手段と、
前記セッション鍵を用いて、共通鍵復号化アルゴリズムによって前記暗号メッセージを前記欠落圧縮メッセージに復号化する共通鍵復号化手段と、
前記欠落圧縮メッセージに前記欠落データを埋め込んで前記圧縮メッセージを復元化する埋込み手段と、
を備え、前記圧縮メッセージを前記解凍手段により解凍して前記入力されたメッセージに復号化する装置。
【請求項５】
バイナリデータを圧縮する圧縮手段と、
複数のバイナリデータを結合させる結合手段と、
を備えたコンピュータを用いてメッセージを暗号化する方法であって、
前記コンピュータの抜落手段が、該コンピュータに入力されたメッセージを前記圧縮手段により圧縮した圧縮メッセージから、一部データを抜き落として欠落圧縮メッセージと欠落データとを生成する抜落ステップと、
前記コンピュータの共通鍵暗号化手段が、セッション鍵を用いて共通鍵暗号化アルゴリズムによって前記欠落圧縮メッセージを暗号メッセージに暗号化する共通鍵暗号化ステップと、
前記コンピュータの公開鍵暗号化手段が、前記欠落データと前記セッション鍵を前記結合手段により結合させ、公開鍵を用いて公開鍵暗号化アルゴリズムによって暗号ブロックに暗号化する公開鍵暗号化ステップと、
前記コンピュータのハイブリッド暗号化手段が、前記暗号メッセージと前記暗号ブロックを前記結合手段により結合させてハイブリッド暗号メッセージを生成するハイブリッド暗号化ステップと、
を含む、前記入力されたメッセージを暗号化する方法。
【請求項６】
前記圧縮手段により圧縮されたバイナリデータを解凍する解凍手段と、
前記結合手段により結合されたバイナリデータを前記複数のバイナリデータに分解する分解手段と、
を備えたコンピュータを用いて、請求項５に記載の方法により生成されたハイブリッド暗号メッセージを前記入力されたメッセージに復号化する方法であって、前記ハイブリッド暗号メッセージを前記分解手段により前記暗号メッセージと前記暗号ブロックに分解するハイブリッド復号化ステップと、
前記暗号ブロックを非公開鍵を用いて非公開鍵復号化アルゴリズムによって復号化し、前記分解手段により前記欠落データと前記セッション鍵に分解する非公開鍵復号化ステップと、
前記セッション鍵を用いて、共通鍵復号化アルゴリズムによって前記暗号メッセージを前記欠落圧縮メッセージに復号化する共通鍵復号化ステップと、
前記欠落圧縮メッセージに前記欠落データを埋め込んで前記圧縮メッセージを復元化する埋込みステップと、
を含み、前記圧縮メッセージを前記解凍手段により解凍して前記入力されたメッセージに復号化する方法。
【請求項７】
請求項１又は２に記載されたプログラムを記録した、コンピュータ読み取り可能な記録媒体。
【請求項８】
請求項５に記載のメッセージを暗号化する方法により、メッセージを暗号化して暗号メッセージを生成するステップ、
前記暗号メッセージを電気通信回線を通して送信するステップ、
受信した前記暗号メッセージを、請求項６に記載のメッセージを復号化する方法により前記メッセージに復号化するステップ、
を含む、メッセージの送受信を、機密保持性のない電気通信回線において安全に行なう方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
メッセージを送信者から受信者に送付する通信を、機密保持性のない電気通信回線において安全に実行するための方法に関する。更に詳しくは、メッセージを暗号化アルゴリズムにより暗号化し、第三者の攻撃からメッセージを防御するための暗号化プログラムに関する。
【０００２】
【従来の技術】
暗号の歴史において、共通鍵暗号方式は、数世紀にわたって使用されてきた。共通鍵暗号方式とは、例えば古典的にはメッセージの送信者と受信者のみがメッセージの入った箱の共通の鍵を持ち、途中で第三者にメッセージを見られるのを防ぐ通信方法である。コンピューターネットワークの発達した現在では、この共通鍵暗号方式は秘密メールの通信などにも用いられている。
【０００３】
この場合、メッセージ中の文字は一般に８ビットの２進数によって表現され、従ってメッセージ文も２進数で表される。そして同じく２進数である共通鍵を使って、暗号化アルゴリズムによって暗号化される。即ち共通鍵から抽出される情報を用いて、置換、換字等の組合わせである暗号化アルゴリズムに従って暗号メッセージを生成する。
【０００４】
一般的な暗号化方法においては、２進数である鍵の長さ（以下「鍵長」という）が長いほど暗号文の解読は困難となるが、共通鍵暗号化方式では、比較的短い鍵長で暗号を設計することができる。これが共通鍵が長年にわたって使用されてきた理由であり、事実、軍事や諜報、その他ビジネス界等において広く用いられてきた。しかし一方で、安全な鍵配送にはコストがかかりすぎる等の問題もあった。
【０００５】
１９７０年代に登場した公開鍵暗号方式は、暗号化アルゴリズムが数学的関数に基づいており、その数学的処理により各ユ−ザごとに関連した２種類の鍵を作成する。そのうち一方を非公開鍵として保護し、他方を公開鍵として公開してもよい。メッセージの発信者は公開鍵によりメッセージを暗号化し、受信者は、受信者のみが保有する非公開鍵によりメッセージを復号化する。従って共通鍵方式のように鍵を通信相手に渡す必要がなくなり、公開鍵暗号方式は上記の共通鍵暗号方式の問題点を解決した。更にそのアルゴリズムの性質から、電子署名とよばれる論理的な署名も実現する事ができた。
【０００６】
しかし、第三者の鍵破りの攻撃から通信内容を守り得る高い強度の鍵を得るためには、公開鍵、非公開鍵は、共通鍵暗号方式よりも長い鍵長にする必要がある。そのため、計算量が大きくなり、共通鍵暗号方式と比べると暗号化／復号化処理がかなり遅くなってしまう。
【０００７】
この問題は、ハイブリッド方式と呼ばれる共通鍵暗号方式と公開鍵暗号方式を組合わせて使用する方法で解決される。この方式では、まず、共通鍵暗号方式では配送しなければならない鍵を公開鍵暗号によって暗号化する。そしてこの暗号化された共通鍵と、共通鍵によって暗号化されたメッセージの両方を相手に送信する。
【０００８】
この共通鍵暗号化のときに用いる共通鍵は、一度きりで使い捨てにするランダム鍵であり、セッション鍵と呼ばれる。共通鍵暗号を単体で用いる場合は、同じ鍵を複数回にわたって利用せざるを得なかったため、鍵を特定する攻撃法が有効であった。しかし、このセッション鍵を用いれば、以前に攻撃した暗号文の解読化情報を次の攻撃に利用することができなくなる。
【０００９】
このハイブリッド方式で、公開鍵暗号で暗号化されるのは鍵のみであるので、公開鍵暗号の暗号化／復号化処理の速度の遅さが全体の処理速度に殆ど影響を与えることはない。更にセッション鍵については、暗号文を送る度に更新できるため、共通鍵暗号方式における共通鍵をも強化することとなる。
【００１０】
ＰＧＰ（Ｐｒｅｔｔｙ  Ｇｏｏｄ  Ｐｒｉｖａｃｙ）は、このハイブリッド方式を採用したハイブリッド暗号の代表的な応用例である。ＰＧＰでは、メッセージは圧縮アルゴリズムで圧縮されていてもよいことになっており、メッセージを圧縮することで共通鍵暗号の安全性はさらに向上する。これは、圧縮された暗号文は元のメッセージよりも冗長性が減り、攻撃がさらに困難となるためである。更に暗号文が圧縮されることによって、電子メール送信／受信の速度を高速化するという目的もある。
【００１１】
ＰＧＰでは、圧縮アルゴリズムとしてＺＩＰ、ＺＬＩＢのいずれかを使用する。これらは、Ｌａｍｐｅｌ−Ｚｉｖの開発した圧縮アルゴリズムＬＺ７７を応用したＤｅｆｌａｔｅ圧縮アルゴリズムを利用している。
【００１２】
また、ＰＧＰでは暗号メールとして利用するために、ｒａｄｉｘ−６４変換を用いる。ＡＳＣＩＩ  Ａｒｍｏｒとも呼ばれるこの変換方式は、暗号文であるバイナリデータをＡＳＣＩＩ文字列に変換して表現する。実際には６ｂｉｔｓの値を８ｂｉｔｓのＡＳＣＩＩ文字列に変換するため、情報量は約１．３３倍に拡大するが、圧縮アルゴリズムを用いることでその影響を回避している。
【００１３】
ここでＰＧＰの暗号化アルゴリズムを図６に示す。この図６において、Ｚは圧縮手段を、‖は結合手段を、Ｅｓは共通鍵暗号化手段を、Ｅｐは公開鍵暗号化手段を、Ｒ64はｒａｄｉｘ−６４変換を、また実線はメッセージの流れを，点線は鍵の作用をそれぞれ表し、括弧は括弧内のブロックが省略可能であることを表している。
【００１４】
このような従来のハイブリッド方式は、一見すると公開鍵暗号が破られなければ安全であるように思われる。それはセッション鍵がその都度ランダムな数を使って生成されるためである。即ち、仮にある暗号文を共通鍵暗号について攻撃し、そのとき用いたセッション鍵が判明しても、そのメッセージが解読されるだけであり、そのセッション鍵はそれ以降の暗号文への攻撃の参考にすることができない。従って、結局公開鍵暗号への攻撃が成功しない限り、常に完全な解読ができるわけではないのである。
【００１５】
しかし、共通鍵暗号への攻撃は鍵の総当り以外の方法が発見されたり、またはもっと高速に鍵の総当りができるようになれば、攻撃の時間を一気に短縮できる可能性がある。更に、従来のハイブリッド暗号では公開鍵暗号がセッション鍵しか保護しないため、セッション鍵により共通鍵暗号で暗号化している暗号文を解読さえしてしまえば目的であるメッセージが全て得られてしまう。従ってハイブリッド暗号の暗号文を防御するにあたって、共通鍵暗号への攻撃は無視できない。
【００１６】
【発明が解決しようとする課題】
本発明に係るハイブリッド方式の強化方法は、この共通鍵暗号部のメッセージと暗号文の完全１対１対応の関係を修正し、共通鍵暗号への攻撃を完全無効化することを目的とする。
【００１７】
【課題を解決するための手段】
本発明に係る入力されたメッセージを暗号化するプログラムは、コンピュータを、バイナリデータを圧縮アルゴリズムによって圧縮する圧縮手段、複数のバイナリデータを結合させて新たなバイナリデータを生成する結合手段、コンピュータに入力されてバイナリデータ化されたメッセージを前記圧縮手段により圧縮して生成した圧縮メッセージから、欠落データを抜き落として欠落圧縮メッセージと欠落データとする抜落手段、前記欠落圧縮メッセージにセッション鍵を用いて共通鍵暗号化アルゴリズムによって暗号メッセージを生成する共通鍵暗号化手段、前記欠落データと前記セッション鍵のバイナリデータを前記結合手段により結合させ、公開鍵を用いて公開鍵暗号化アルゴリズムによって暗号ブロックを生成する公開鍵暗号化手段、前記暗号メッセージと前記暗号ブロックのバイナリデータを前記結合手段により結合させてハイブリッド暗号メッセージを生成するハイブリッド暗号化手段、として機能させ得る。
【００１８】
本発明に係る前記ハイブリッド暗号メッセージを復号化するプログラムは、コンピュータを、前記圧縮手段により圧縮されたバイナリデータを解凍アルゴリズムによって解凍する解凍手段、前記結合手段により結合された前記新たなバイナリデータを前記複数のバイナリデータに分解する分解手段、前記ハイブリッド暗号化手段により生成されたハイブリッド暗号メッセージを前記分解手段により前記暗号メッセージと前記暗号ブロックの２つのバイナリデータに分解するハイブリッド復号化手段、前記暗号ブロックを非公開鍵を用いて非公開鍵復号化アルゴリズムによって復号化し、前記分解手段により前記欠落データと前記セッション鍵のバイナリデータに分解する非公開鍵復号化手段、前記非公開鍵復号化手段により得られた前記セッション鍵を用いて、共通鍵復号化アルゴリズムによって前記暗号メッセージを前記欠落圧縮メッセージに復号化する共通鍵復号化手段、前記欠落圧縮メッセージに前記欠落データを埋め込んで前記圧縮メッセージを復元化する埋込み手段、として機能させ、前記圧縮メッセージを前記解凍手段により解凍して前記入力されたメッセージに復号化する。
【００１９】
本発明に係る入力されたメッセージを暗号化する装置は、バイナリデータを圧縮アルゴリズムによって圧縮する圧縮手段と、複数のバイナリデータを結合させて新たなバイナリデータを生成する結合手段と、を備える、メッセージを暗号化する装置であって、該装置に入力されてバイナリデータ化されたメッセージを前記圧縮手段により圧縮して生成した圧縮メッセージから、欠落データを抜き落として欠落圧縮メッセージと欠落データとする抜落手段と、前記欠落圧縮メッセージからセッション鍵を用いて共通鍵暗号化アルゴリズムによって暗号メッセージを生成する共通鍵暗号化手段と、前記欠落データと前記セッション鍵のバイナリデータを前記結合手段により結合させ、公開鍵を用いて公開鍵暗号化アルゴリズムによって暗号ブロックを生成する公開鍵暗号化手段と、前記暗号メッセージと前記暗号ブロックのバイナリデータを前記結合手段により結合させてハイブリッド暗号メッセージを生成するハイブリッド暗号化手段と、からなる。
【００２０】
本発明に係る前記ハイブリッド暗号メッセージを復号化する装置は、前記圧縮手段により圧縮されたバイナリデータを解凍アルゴリズムによって解凍する解凍手段と、前記結合手段により結合された前記新たなバイナリデータを前記複数のバイナリデータに分解する分解手段と、を備える、暗号化されたメッセージを復号化する装置であって、前記ハイブリッド暗号化手段により生成されたハイブリッド暗号メッセージを前記分解手段により前記暗号メッセージと前記暗号ブロックの２つのバイナリデータに分解するハイブリッド復号化手段と、前記暗号ブロックを非公開鍵を用いて非公開鍵復号化アルゴリズムによって復号化し、前記分解手段により前記欠落データと前記セッション鍵のバイナリデータに分解する非公開鍵復号化手段と、前記非公開鍵復号化手段により得られた前記セッション鍵を用いて、共通鍵復号化アルゴリズムによって前記暗号メッセージを前記欠落圧縮メッセージに復号化する共通鍵復号化手段と、前記欠落圧縮メッセージに前記欠落データを埋め込んで前記圧縮メッセージを復元化する埋込み手段と、を備え、前記圧縮メッセージを前記解凍手段により解凍して前記入力されたメッセージに復号化し得る。
【００２１】
本発明に係る入力されたメッセージを暗号化する方法は、バイナリデータを圧縮アルゴリズムによって圧縮する圧縮手段と、複数のバイナリデータを結合させて新たなバイナリデータを生成する結合手段と、を備えたコンピュータを用いてバイナリーデータとなっているメッセージを暗号化する方法であって、前記コンピュータの抜落手段が、該コンピュータに入力されてバイナリデータ化されたメッセージを前記圧縮手段により圧縮して生成した圧縮メッセージから、欠落データを抜き落として欠落圧縮メッセージと欠落データとする抜落ステップと、前記コンピュータの共通鍵暗号化手段が、前記欠落圧縮メッセージにセッション鍵を用いて共通鍵暗号化アルゴリズムによって暗号メッセージを生成する共通鍵暗号化ステップと、前記コンピュータの公開鍵暗号化手段が、前記欠落データと前記セッション鍵のバイナリデータを前記結合手段により結合させ、公開鍵を用いて公開鍵暗号化アルゴリズムによって暗号ブロックを生成する公開鍵暗号化ステップと、前記コンピュータのハイブリッド暗号化手段が、前記暗号メッセージと前記暗号ブロックのバイナリデータを前記結合手段により結合させてハイブリッド暗号メッセージを生成するハイブリッド暗号化ステップと、を含む。
【００２２】
本発明に係る前記ハイブリッド暗号メッセージを復号化する方法は、前記圧縮手段により圧縮されたバイナリデータを解凍アルゴリズムによって解凍する解凍手段と、前記結合手段により結合された前記新たなバイナリデータを前記複数のバイナリデータに分解する分解手段と、を備えたコンピュータを用いて暗号化されたメッセージを復号化する方法であって、前記ハイブリッド暗号化手段により生成されたハイブリッド暗号メッセージを前記分解手段により前記暗号メッセージと前記暗号ブロックの２つのバイナリデータに分解するハイブリッド復号化ステップと、前記暗号ブロックを非公開鍵を用いて非公開鍵復号化アルゴリズムによって復号化し、前記分解手段により前記欠落データと前記セッション鍵のバイナリデータに分解する非公開鍵復号化ステップと、前記非公開鍵復号化ステップにおいて得られた前記セッション鍵を用いて、共通鍵復号アルゴリズムによって前記暗号メッセージを前記欠落圧縮メッセージに復号化する共通鍵復号化ステップと、前記欠落圧縮メッセージに前記欠落データを埋め込んで前記圧縮メッセージを復元化する埋込みステップと、を含み、前記圧縮メッセージを前記解凍手段により解凍して前記入力されたメッセージを復号化し得る。
【００２３】
本発明に係るコンピュータ読み取り可能な記録媒体は、少なくとも前記暗号化又は復号化プログラムを記録している。
【００２４】
本発明に係る、メッセージの送受信を機密保持性のない電気通信回線において安全に行なう方法は、前記記メッセージを暗号化する方法により、メッセージを暗号化して暗号メッセージを生成するステップ、前記暗号メッセージを電気通信回線を通して送信するステップ、受信した前記暗号メッセージを、前記メッセージを復号化する方法により前記メッセージに復号化するステップ、を含んでいる。
【００２５】
【発明の実施の形態】
本発明の提案する新しいハイブリッド暗号は、共通鍵暗号方式で暗号化されるべき圧縮されたメッセージの情報から、その一部を抜落手段により抜き落とす作業を従来のハイブリッド暗号に追加して、セッション鍵と共にその抜き落とした情報を公開鍵暗号で暗号化するというものである。
【００２６】
従って、たとえ共通鍵暗号が破られてもメッセージの情報が得られない設計にする。基本的な発想は共通鍵暗号で暗号化されるメッセージの情報を減らし、その分を公開鍵暗号で暗号化するというものである。しかし、更に安全性を高めるため、本発明のハイブリッド暗号の実施例においては、以下に説明する公開鍵暗号のブロックの構造とＤｅｆｌａｔｅ圧縮の構造の性質を最大限に活用する。
【００２７】
本発明の実施態様において、新しいハイブリッド暗号を実装する際に使用するアルゴリズムは例えば以下の通りである。
（１）公開鍵暗号化アルゴリズム；ＰＫＣＳ＃１（ｐｕｂｌｉｃ−ｋｅｙ−ｃｒｙｐｔｏｇｒａｐｈｙ−ｓｐｅｃｉｆｉｃａｔｉｏｎｓ）で定義されたＲＳＡ（Ｒｉｖｅｓｔ−Ｓｈａｍｉｒ−Ａｄｌｅｍａｎ；１０２４ｂｉｔｓ）
（２）共通鍵暗号化アルゴリズム；ＡＥＳ［Ａｄｖａｎｃｅｄ−Ｅｎｃｒｙｐｔｉｏｎ−Ｓｔａｎｄａｒｄ］ＣＢＣモード（１２８ｂｉｔｓ）
（３）圧縮アルゴリズム        ；ＧＺＩＰ（デフォルト仕様）
【００２８】
上記（１）のＲＳＡは、以下に説明する本発明の実施態様において公開鍵暗号化手段として用いられ、（２）のＡＥＳ  ＣＢＣモードは共通鍵暗号化手段として、（３）のＧＺＩＰは圧縮手段としてそれぞれ用いられる。また、本実施態様において、結合手段は２つのバイナリデータを単純に結合させる手段である。
【００２９】
即ち、本発明の実施態様における新しいハイブリッド暗号のアルゴリズムは、コンピュータに入力されたメッセージを▲１▼バイナリデータに変換し、▲２▼バイナリデータに変換された当該メッセージを上記圧縮手段（ＧＺＩＰ）により圧縮して圧縮メッセージを生成し、▲３▼当該圧縮メッセージから抜落手段によりデータを抜き落として欠落圧縮メッセージと欠落データを生成する。この抜落手段によりデータを抜き落とす方法については以下の実施態様にて詳説される。続いて▲４▼上記欠落圧縮メッセージに上記セッション鍵を用いる共通鍵暗号化手段（ＡＥＳ  ＣＢＣモード）によって暗号メッセージを生成し、▲５▼上記欠落データと上記セッション鍵のバイナリデータを上記結合手段により結合させ、公開鍵を用いて公開鍵暗号化手段（ＲＳＡ）によって暗号ブロックを生成する。最後に▲６▼上記暗号メッセージと上記暗号ブロックのバイナリデータを前記結合手段により結合させるハイブリッド暗号化手段によりハイブリッド暗号メッセージを生成する。
【００３０】
また、本発明の実施態様として上記アルゴリズムにより暗号化されたハイブリッド暗号メッセージを復号化して、元のメッセージを得るための解凍アルゴリズムは以下の通りである。まず、▲１▼上記暗号化アルゴリズムにより生成されたハイブリッド暗号メッセージを、分解手段を用いたハイブリッド復号化手段により上記暗号メッセージと上記暗号ブロックの２つのバイナリデータに分解する。以下に詳説するように、上記暗号化の際に上記暗号メッセージの長さの情報は上記暗号ブロックに復元情報として埋め込まれるため、上記ハイブリッド復号化手段により上記▲１▼の分解が可能となる。次に▲２▼上記暗号ブロックを上記ＲＳＡの非公開鍵を用いた非公開鍵復号化手段によって復号化し、上記欠落データと上記セッション鍵（１２８ｂｉｔｓ）のバイナリデータに分解し、▲３▼得られたセッション鍵を用いて、共通鍵復号化手段（ＡＥＳ  ＣＢＣモード）によって上記暗号メッセージを上記欠落圧縮メッセージに復号化する。続いて▲４▼上記埋め込まれた復元情報に基づく埋込み手段により、欠落圧縮メッセージに上記欠落データを埋め込んで前記圧縮メッセージを復元化し、▲５▼上記圧縮メッセージを解凍手段により解凍して前記メッセージを復号化する。ここで解凍手段は、下記の実施態様で採用する上記圧縮アルゴリズム（ＧＺＩＰ）の解凍アルゴリズムを用いる。
【００３１】
また、上述のような暗号化、復号化アルゴリズムをプログラム化して記録媒体に記録させたり、当該記録媒体から上記プログラムをコンピュータ等に読み込ませて暗号化・復号化装置として用いることもできる。そしてメッセージを暗号化、復号化することにより、送受信を機密保持性のない電気通信回線において安全に行なうことができる。
【００３２】
まず、新しいハイブリッド暗号を提案するために、ＰＧＰでも使用されているＲＳＡ  Ｌａｂｏｒａｔｏｒｉｅｓによって定義された上記ＰＫＣＳ＃１［Ｐｕｂｌｉｃ  Ｋｅｙ  Ｃｒｙｐｔｏｇｒａｐｈｙ  Ｓｔａｎｄａｒｄｓ］の公開鍵暗号の暗号化フォーマットを説明する。
【００３３】
公開鍵暗号の暗号化フォーマット
ＲＳＡのなどの公開鍵暗号方式では、メッセージをＢｉｇ−ｅｎｄｉａｎ記法の多倍長整数として扱い、主に多倍長整数のべき乗剰余計算を行う。多倍長整数といっても実際は鍵長によって制限されるので、メッセージは鍵長である、べき乗剰余計算における法ｎの値以下のバイト数で分割しなければならない。つまり、公開鍵暗号方式も共通鍵暗号方式と同じいわゆるブロック暗号である。
【００３４】
また解読をより困難にするため、公開鍵暗号の１ブロックは解読防止のためのパディングと呼ばれるランダムなバイナリデータで埋められている。例えば公開鍵暗号で１０２４ｂｉｔｓの鍵長のものを使用し、共通鍵暗号のセッション鍵で１２８ｂｉｔｓの鍵長のものを使用した場合、８００ｂｉｔｓ以上もの情報がパディングとなる。
【００３５】
ＰＧＰの場合は、公開鍵暗号でセッション鍵を暗号化するときには、さらに複数の共通鍵アルゴリズムを選択できるＩＤ値として１バイトを与える。ここで、ＰＧＰが公開鍵暗号のブロックに与える１２８ｂｉｔｓのセッション鍵のデータフォーマットは例えば以下のように表される。
Ｄ＝ＡＲＧ‖ＫＥＹ          （１）
Ｄ    ：ＰＧＰが公開鍵暗号でセッション鍵を暗号化するためのデータ（１３６ｂｉｔｓ）
ＡＲＧ：共通鍵暗号化アルゴリズムのＩＤ値（８ｂｉｔｓ）
‖    ：バイナリデータの結合
ＫＥＹ：セッション鍵（１２８ｂｉｔｓ）
【００３６】
この式（１）に示したデータＤを公開鍵ブロックのデータとする。ここで、ＰＧＰの１２８ｂｉｔｓのセッション鍵を暗号化する場合の１０２４ｂｉｔｓの公開鍵暗号の１ブロックの構造を式（２）に示す。
【００３７】
ＥＢ＝００‖ＢＴ‖ＰＳ‖００‖Ｄ          （２）
ＥＢ  ：公開鍵暗号の１ブロック（１０２４ｂｉｔｓ）
００  ：１バイトの値（０）
‖    ：バイナリデータの結合
ＢＴ  ：ブロックタイプ（送信者の公開鍵で暗号化するこの場合の値は０２）
ＰＳ  ：パディング文字列（８６４ｂｉｔｓ）
Ｄ    ：共通鍵暗号化アルゴリズムＩＤ値とセッション鍵（１３６ｂｉｔｓ）
【００３８】
本発明のハイブリッド暗号は、上記ＰＫＣＳ＃１で定義される公開鍵暗号ブロックのパディング部分を、最小で８バイトまで小さくできるという性質を活用する。そして上述のメッセージから抜き落とした情報は、その伸縮可能なパディング部が小さくなることで得られるスペースを用いて公開鍵暗号ブロックに埋め込まれてゆくことになる。
【００３９】
次に、共通鍵暗号を解読してもメッセージに復元できないようにするためにメッセージのデータを抜き落とす方法は、Ｄｅｆｌａｔｅ圧縮アルゴリズムの性質を利用する。それは、下記の３種類のそれぞれのブロックにおけるヘッダ情報、終端値を表す値、更にそれらの周辺の情報を抜き落とすという方法である（抜落手段）。そこで、ＺＩＰ、ＺＬＩＢ、Ｇｚｉｐなどの圧縮アルゴリズムに使用されているＤｅｆｌａｔｅ圧縮のフォーマットを以下に説明する。
【００４０】
Ｄｅｆｌａｔｅ圧縮のフォーマット
Ｄｅｆｌａｔｅ圧縮とは、ＬＺ７７圧縮アルゴリズムとＨｕｆｆｍａｎ符号化アルゴリズムの併用によりデータを圧縮する完全復元可能ないわゆる可逆圧縮である。
【００４１】
ＬＺ７７圧縮では、入力されたデータストリームを１バイト文字列として扱い、文字列を先頭から読んで行く。そして同じ文字列が再度登場した場合に、ポインタ情報と置きかえることで情報圧縮する。ここでそのポインタ情報とは、現在位置から戻る距離（ｄｉｓｔａｎｃｅ）と、戻った位置から復元する長さ（ｌｅｎｇｔｈ）である。但し、長さは置き換えに対して有効となるためには、３以上であることが必要である。
【００４２】
Ｄｅｆｌａｔｅ圧縮では、長さは最大で２５６バイト、距離は１から最大３２キロバイト前までならば、重複した文字列への参照を行うことができる。ここでＬＺ７７圧縮の簡単な例を示す。
【００４３】
・圧縮可能データ
ｖｖｖｖｖ
Ｂｌａｈ  ｂｌａｈ  ｂｌａｈ！
・ＬＺ７７圧縮データ
Ｂｌａｈ  ｂ［Ｌ＝１３，Ｄ＝５］！
【００４４】
またＨｕｆｆｍａｎ符号化とは、出現頻度の多い文字に少ないビット数の文字を割り当てて、元のデータストリームをバイナリデータとして出力する圧縮法である。ここでＨｕｆｆｍａｎ符号は、出力がバイナリデータであるにも拘わらず、符号語を一意に復元できるいわゆる瞬時符号である。そして異なる文字に対し異なる符号を与える方式では、平均符号長を最小にできるという特徴がある。
【００４５】
Ｈｕｆｆｍａｎ符号化には、一般的な文章に現れる文字の出現頻度などからＨｕｆｆｍａｎ符号を前もって準備しておく静的な方法と、その文章の出現頻度を調べた上でＨｕｆｆｍａｎ符号を割り与える動的な方法がある。
【００４６】
従って動的なＨｕｆｆｍａｎ符号化では、復元する時のために元の文字とＨｕｆｆｍａｎ符号との対応表であるＨｕｆｆｍａｎ  Ｔａｂｌｅをバイナリデータに付加する必要がある。
【００４７】
入力データが小さい場合、上記Ｈｕｆｆｍａｎ  Ｔａｂｌｅが動的Ｈｕｆｆｍａｎ符号圧縮ブロックの圧縮率が悪くなる原因となる。よって、通常Ｈｕｆｆｍａｎ符号化のアルゴリズムは、動的なＨｕｆｆｍａｎ符号化を行った出力と、静的Ｈｕｆｆｍａｎ符号化を行って得られる出力を比べて、情報量の小さいほうを採用する。
【００４８】
Ｄｅｆｌａｔｅ圧縮では、ＬＺ７７圧縮を行った後でＨｕｆｆｍａｎ符号化を行う。そのため、リテラル（ｌｉｔｅｒａｌ）と呼ばれる１バイト文字だけでなく、ＬＺ７７圧縮における長さと距離の表現もＨｕｆｆｍａｎ符号化する。
【００４９】
また、高い圧縮率を得るためＨｕｆｆｍａｎ符号の符号長は最大１５ｂｉｔｓで制限する。更に動的なＨｕｆｆｍａｎ符号化を行った場合は、Ｈｕｆｆｍａｎ
ＴａｂｌｅをもＨｕｆｆｍａｎ符号化している。
【００５０】
ここで、文字の出現頻度が与えられたときのＨｕｆｆｍａｎ符号化の簡単な例を表１に示す。
【００５１】
【表１】
0003650611.tif 000002
【００５２】
Ｄｅｆｌａｔｅ圧縮において圧縮されたデータは、１つもしくは複数のブロックから構成される。ブロックは非圧縮ブロック、静的Ｈｕｆｆｍａｎ符号圧縮ブロック、動的Ｈｕｆｆｍａｎ符号圧縮ブロックの３種類がある。
【００５３】
静的Ｈｕｆｆｍａｎ符号圧縮ブロックは予めＨｕｆｆｍａｎ  Ｔａｂｌｅを用意しており、ブロックにヘッダ情報を付加しない。しかし、動的Ｈｕｆｆｍａｎ符号圧縮ブロックは出現頻度に応じてＨｕｆｆｍａｎ符号を与えるため、ブロックにＨｕｆｆｍａｎ  Ｔａｂｌｅをヘッダ情報として付加しなければならない。
【００５４】
ブロックの大きさは、非圧縮ブロックが６５、５３５バイト以下に制限されているが、２種類のＨｕｆｆｍａｎ符号圧縮ブロックでは、任意の大きさになっている。
【００５５】
また、非圧縮ブロックには、ヘッダ情報としてブロック長を付加するが、２種類のＨｕｆｆｍａｎ符号圧縮ブロックにはブロック長をヘッダ情報として与えない。そのため、上記２種類のＨｕｆｆｍａｎ符号圧縮ブロックの終わりには終端値が必要である。
【００５６】
この終端値を使用するのは、２種類のＨｕｆｆｍａｎ符号圧縮ブロックがバイト単位で構成されている訳ではないので、通常は前のブロックの終端値と次のブロックの先頭の情報が同じ１バイト中に現れるためでもある。
【００５７】
しかし、Ｄｅｆｌａｔｅ圧縮の出力はバイト単位であるため、最後のブロックが終わった直後の位置から、０が連続するｂｉｔ列を与えて調整している。ブロックの先頭の３ビットは、それが最後のブロックであるのかという情報と上記３種類のうちのどのブロックであるのかという情報を示している。
【００５８】
ここで、Ｄｅｆｌａｔｅ圧縮の３種類のブロックの構造を図２から図４に示す。
【００５９】
次に、上記動的Ｈｕｆｆｍａｎ符号圧縮ブロックのＨｕｆｆｍａｎ  Ｔａｂｌｅは、本発明の提案する新しいハイブリッド暗号のアルゴリズムにおいて重要な要素であるため、以下詳説することとする。
【００６０】
まず、リテラルとブロックの終端値さらにＬＺ７７圧縮における長さ及び距離の表現方法を説明する。
【００６１】
リテラルと終端値及び長さは一連の値が与えられ、これらは一つのＨｕｆｆｍａｎ  Ｔａｂｌｅでまとめられて圧縮される。値は０から２８５まで用意し、このうち１バイトを超える値は終端値（２５６）と、長さ（２５７から２８５）の値として割り当てられる。長さを示す値は、直後に追加ｂｉｔを与えて実際の長さを表現する。この追加ｂｉｔは、Ｈｕｆｆｍａｎ符号圧縮とは独立に存在する。
ここで、Ｄｅｆｌａｔｅ圧縮におけるリテラル／終端値の表現方法を表２に示す。
【００６２】
【表２】
0003650611.tif 000003
【００６３】
また、ＬＺ７７圧縮における距離を表現するのは０から２９までの値で、長さのときと同様に追加ｂｉｔを与えることで実際の距離を表す。そして、距離は別のＨｕｆｆｍａｎ  Ｔａｂｌｅを用いて圧縮される。ここで、Ｄｅｆｌａｔｅ圧縮における長さ／距離の表現方法を表３と表４に示す。
【００６４】
【表３】
0003650611.tif 000004
【００６５】
【表４】
0003650611.tif 000005
【００６６】
更に、動的Ｈｕｆｆｍａｎ符号圧縮ブロックで与えられるＨｕｆｆｍａｎ符号は、辞書順に割り与えている。辞書順で符号を与えることで、動的Ｈｕｆｆｍａｎ符号を復元するための情報は、符号長を与えるのみで良くなる。
【００６７】
つまり、リテラル／長さのＨｕｆｆｍａｎ  Ｔａｂｌｅと距離のＨｕｆｆｍａｎ  Ｔａｂｌｅは、０から最大値までのＨｕｆｆｍａｎ符号の符号長の連続として構成できる。Ｄｅｆｌａｔｅ圧縮では、この方法を用いてＨｕｆｆｍａｎ  Ｔａｂｌｅの情報量を小さくしている。
【００６８】
ここで、辞書順ならば符号長を与えただけでＨｕｆｆｍａｎ符号が得られるという簡単な例を表５に示す。簡単にするため、入力データはＡからＩまでのアルファベットのみで構成されているものとした。
【００６９】
【表５】
0003650611.tif 000006
【００７０】
符号長の最大値は１５であるが、通常リテラル／長さのためのＨｕｆｆｍａｎＴａｂｌｅにおいて符号長０が連続するため、更に１６から１８までの値を追加して、符号長の連続を表現する。ここで、符号長の表現方法を表６で示す。
【００７１】
【表６】
0003650611.tif 000007
【００７２】
そして、更に高い圧縮率を得るために、リテラル／長さと距離のための２つのＨｕｆｆｍａｎ  Ｔａｂｌｅは、さらにＨｕｆｆｍａｎ符号で圧縮されている。つまり、１９種類の符号長表現のためのＨｕｆｆｍａｎ符号を作成し、３ｂｉｔｓの値でその符号長を表現して、その３ｂｉｔｓの連続を符号長表現のためのＨｕｆｆｍａｎ  Ｔａｂｌｅとする。
【００７３】
符号長表現のためのＨｕｆｆｍａｎ  Ｔａｂｌｅだけは、他の２つのＨｕｆｆｍａｎ  Ｔａｂｌｅとは違い、０から最大値までの昇順のオーダーではなく、出現頻度を想定して作成されたオーダーの連続になっている。
【００７４】
符号長表現のためのＨｕｆｆｍａｎ  Ｔａｂｌｅのオーダーは、（１６、１７、１８、０、８、７、９、６、１０、５、１１、４、１２、３、１３、２、1４、１、１５）の順であり、このオーダーで３ｂｉｔｓ列を構成する。
【００７５】
これら３種類のＨｕｆｆｍａｎ  Ｔａｂｌｅは、すべての値が登録されている訳ではない。Ｈｕｆｆｍａｎ  Ｔａｂｌｅの値は、それぞれのオーダーに従って、その値が使用されている確率が低くなってゆく。
【００７６】
そこで、Ｈｕｆｆｍａｎ  Ｔａｂｌｅは、図４のなかで示したヘッダ情報にある、ＨＬＩＴ／ＨＤＩＳＴ／ＨＣＬＥＮで得られる値から、その値で示される個数より後ろのオーダーの値をすべて０とみなして、その部分の情報をカットしている。
【００７７】
Ｄｅｆｌａｔｅ圧縮の出力は、Ｌｉｔｔｌｅ−ｅｎｄｉａｎで表現されている。しかし、Ｈｕｆｆｍａｎ符号だけは処理の高速化のために、与えられた符号を逆向きで出力する。
【００７８】
以上のように、動的Ｈｕｆｆｍａｎ符号圧縮ブロックは、非常に高い圧縮率を得られる構造になっている。従ってＤｅｆｌａｔｅ圧縮は、大きな入力データを与えられた場合、通常では動的Ｈｕｆｆｍａｎ符号圧縮ブロックを選択することは明らかである。
【００７９】
そこで本発明では、共通鍵暗号を解読してもメッセージに復元できないようにするため、上述のようなＤｅｆｌａｔｅ圧縮アルゴリズムの性質を利用して、情報の抜き落しを行なう。即ち、上記３種類のそれぞれのブロックにおけるヘッダ情報、終端値を表す値さらにそれらの周辺の情報を抜き落とす方法を採用する（抜落手段）。
【００８０】
圧縮されたメッセージの復元を困難にするためには、ヘッダ情報を抜き落とすのが最も効果的である。これは、Ｄｅｆｌａｔｅ圧縮において動的Ｈｕｆｆｍａｎ符号圧縮ブロックが選択されるのが最も自然であり、かつ動的Ｈｕｆｆｍａｎ符号圧縮ブロックにおけるヘッダ情報であるＨｕｆｆｍａｎ  Ｔａｂｌｅが無ければ、メッセージへの復元がまず不可能であるためである。
【００８１】
終端値や周辺の情報も抜き出すが、これは動的Ｈｕｆｆｍａｎ符号圧縮ブロックにおいてＨｕｆｆｍａｎ  Ｔａｂｌｅのない状態で攻撃を受けた場合に有効となる。これらの作業により、共通鍵暗号で暗号化するデータをほぼ完全なランダムバイナリデータとすることができる。
【００８２】
また、ヘッダ情報や終端値などはバイナリデータであるが、抜き落とす情報はバイト単位で行う。これは、公開鍵暗号のパディング部がバイト単位であるためであり、更にハイブリッド暗号の暗号化／復号化処理の高速化のためでもある。
【００８３】
ここで、公開鍵暗号のブロックの個数は複数であってもよい。高々数回公開鍵暗号の暗号化処理が追加した程度で、それほど極端に暗号化／復号化処理の速度は落ちないと期待されるからである。又、ブロック毎の僅かの情報すら渡さないという高度な安全性を追求するために、Ｄｅｆｌａｔｅ圧縮で生成した全てのブロックにおいて抜き落とす情報量を十分に確保するためでもある。
【００８４】
最後に、抜き取る情報量は公開鍵暗号のブロック数が確定し、抜き落とす情報量の上限が決定したあとで、このハイブリッド暗号は、抜き落とす情報量をある程度ランダムにするという作業を行う。
【００８５】
つまり、抜き落とす情報を上限一杯に抜き落とさないようにするのである。この作業を行うことで、さらに解読が困難になることが期待される。
【００８６】
ここで新しいハイブリッド暗号のアルゴリズムを図１に示し、以下に上記アルゴリズムを効率良く実装する実施例について説明し、実施例の実効性について検討する。尚図１中、Ｚは圧縮手段を、Ｍは抜落手段を、‖は結合手段を、Ｅｓは共通鍵暗号化手段を、Ｅｐは公開鍵暗号化手段を、Ｒ64はｒａｄｉｘ−６４変換を、また実線はメッセージの流れを，点線は鍵の作用をそれぞれ表す。
【００８７】
（Ａ）  ＰＧＰでは、パケット方式を用いて各部品の属性や長さ、更に使用したアルゴリズムなどを識別している。しかし、本発明のハイブリッド暗号では、
１．共通鍵暗号部から正しいセッション鍵を用いて復号化したものすらランダムなバイナリデータであるよう設計すべきである。
２．公開鍵で保護できる情報量の上限値をできるだけ大きくとれるよう設計すべきである。
【００８８】
以上の理由から、あえて識別子を用いるパケット方式は採用せず、アルゴリズムも選別しないことにする。
【００８９】
このようにしても本発明のハイブリッド暗号の暗号文は、ＲＳＡで暗号化する公開鍵暗号の部分が１乃至複数個と、ＡＥＳで暗号化する共通鍵暗号の部分で構成されるので、その識別にはそれぞれ別々にＡＳＣＩＩ  Ａｒｍｏｕｒをかけることで識別の問題は解決できる。
【００９０】
また、公開鍵暗号の１ブロックのなかで数種類のデータを暗号化することになるため、そのデータの識別が必要だが、公開鍵暗号のブロックに渡すデータのフォーマットを定義することで、その識別子は必要なくなる。そのデータフォーマットは以下に式（３）、（４）において示す。
【００９１】
次に、ＰＧＰは圧縮アルゴリズムを必ずしも使用しなくてもよいという仕様だが、本発明のハイブリッド暗号では、必ず使用しなければならない。どんな小さなメッセージでも、必ずＧｚｉｐがＨｕｆｆｍａｎ符号化されたどちらかのブロックを選択するからである。
【００９２】
また、ＰＧＰのＤｅｆｌａｔｅ圧縮は、ＬＺ７７圧縮における移動窓の大きさにあたるバッファ値がデフォルト仕様の１／４とかなり小さくしているが、この制限は圧縮率がかなり悪くなるため採用しないこととする。
【００９３】
最後に、抜き落とす情報を得るためには、Ｄｅｆｌａｔｅ圧縮された各ブロックについて、出力のどこからヘッダ情報で、どこに終端値があるのかという情報が必要である。しかし、Ｈｕｆｆｍａｎ符号化された出力をもう一度走査して、ブロックの終端を検知しなければならないのでは、２度手間となり、暗号化／復号化処理の速度が遅くなる。
【００９４】
これについては、予めＤｅｆｌａｔｅ圧縮する際の返り値として、各ブロックの大きさも出力として与える機能をＧｚｉｐに追加することで解決することができる。
【００９５】
（Ｂ）公開鍵暗号を複数回使用することについて
本実施例で使用するＲＳＡは、１０２４ｂｉｔｓの鍵長しかない。しかし、Ｄｅｆｌａｔｅ圧縮されるデータにおいて、使用される文字の種類やその出現頻度、更にＬＺ７７圧縮の出力結果などにもよるが、動的Ｈｕｆｆｍａｎ符号圧縮ブロックのヘッダ情報は、大きなときには７００ｂｉｔｓ以上になる。
【００９６】
また、メッセージの情報量が大きい場合、ＲＳＡの公開鍵暗号ブロックを１個とすると、Ｄｅｆｌａｔｅ圧縮によって得られた各ブロックの１ブロック当りの抜き落とす情報量が小さくなってしまう。Ｄｅｆｌａｔｅ圧縮の出力には複数のブロックが用いられるためである。
【００９７】
従って、本実施例ではＲＳＡがそれぞれのブロックについて常に十分な情報量を保護するために、Ｄｅｆｌａｔｅ圧縮のブロックが複数個生成された場合は、ブロックの個数だけＲＳＡの公開鍵暗号ブロックを作成することが望ましい。
【００９８】
しかし、公開鍵暗号の複数回使用は、ハイブリッド暗号の暗号化／復号化処理の速度にそれほど大きな影響を与えない。それは、Ｄｅｆｌａｔｅ圧縮ではどこでブロックを複数に分ければ効果的なのかを３２キロｂｉｔｓ毎に判断しているためである。例えば電子メールで交換するテキストデータの情報量で考えても、ブロック数は多くても高々３個程度であり、また相当巨大な入力データでも、出力は１０ブロック以上にならないのである。
【００９９】
（Ｃ）Ｄｅｆｌａｔｅ圧縮されたメッセージを抜き落とす作業について
ＲＳＡを１０２４ｂｉｔｓで使用した場合、９３６ｂｉｔｓ（１１７バイト）が１ブロックのデータとして扱える最大値である。しかし、復号化のときの復元情報に使用するために４バイトを使用するため、抜き落とすデータの最大値は１１３バイトになる。
【０１００】
更に、抜き落とす情報量をある程度ランダムにするという設計にするため、実装したアルゴリズムでは、最大値１１３バイトの約半分である５７から１１３に収まる乱数を生成して、その値を公開鍵暗号の１ブロック毎の抜き落とすバイト数としてよい。但し、最初の公開鍵暗号のブロックはセッション鍵を付加する分の１６バイト（１２８ｂｉｔｓ）だけ更に短くしておく必要がある。
【０１０１】
また、共通鍵暗号が暗号化したデータをランダムなバイナリデータに見せるため、そのデータは、ヘッダ情報と終端値を落とされた各ブロックの残りをそのまま結合したものとする。従って、復号化するには抜き落とした情報を正確に埋めるための復元情報が必要となる。
【０１０２】
これは、抜き落とされて残ったブロックの長さをその情報とする方法で解決できる。そしてその残ったブロックの長さが何バイトであるかの情報は、符号無し整数４バイト値として与え、その値はＬｉｔｔｌｅ−ｅｎｄｉａｎにされて、公開鍵暗号のブロックに渡すデータの先頭に付加してよい。
【０１０３】
ここで、ブロックの残りの長さを４バイトで表現するのは、符号無し整数２バイトでは、６５５３５バイトまでしか表せないが、４バイトならば、約５１２メガバイトまで表せるためである。即ち、Ｄｅｆｌａｔｅ圧縮のブロック長が高々３２キロｂｉｔｓ（４０９６バイト）の整数倍であることを考えれば、残ったブロックの長さは５１２メガバイトまでの値で十分に収まるためである。
【０１０４】
（Ｄ）  公開鍵暗号の1ブロックにおいて、識別子を使用せずに各データを識別するための方法について
その識別方法とは、終端値及びその周辺の情報を表すフッタ情報を１０バイトで固定するという制限を加えることである。そうすることで、ヘッダ情報に抜き落とすバイト数の残り全てを与えられていれば、ヘッダ情報は復号化のとき正確にフッタ情報と識別することができるようになる。
【０１０５】
従って、公開鍵暗号のブロックに渡すデータフォーマットは残ったブロックの長さ４バイトの値、ブロックのヘッダ情報そして１０バイトのフッタ情報（最初の公開鍵ブロックならばさらに１６バイトのセッション鍵）と続くデータストリームとして構成することができる。
【０１０６】
ここで、抜き落とす量をランダムに選択した結果が仮に７２０ｂｉｔｓだった場合の最初の公開鍵暗号のブロックに渡すデータフォーマットを式（３）に示し、２番目以降の公開鍵暗号のブロックに渡すデータフォーマットを式（４）に示す。
【０１０７】
Ｄ＝ＬＥＮＧＴＨ‖ＨＥＡＤＥＲ‖ＦＯＯＴＥＲ‖ＫＥＹ          （３）
Ｄ          ：最初の公開鍵暗号ブロックに与えるデータ（７２０ｂｉｔｓ）
ＬＥＮＧＴＨ：抜き落とされて残ったＤｅｆｌａｔｅ圧縮ブロックの長さ（３２ｂｉｔｓ）
‖          ：バイナリデータの結合
ＨＥＡＤＥＲ：Ｄｅｆｌａｔｅ圧縮ブロックのヘッダ情報（４８０ｂｉｔｓ）
ＦＯＯＴＥＲ：Ｄｅｆｌａｔｅ圧縮ブロックの終端値を含む情報（８０ｂｉｔｓ）
ＫＥＹ      ：セッション鍵（１２８ｂｉｔｓ）
【０１０８】
Ｄ＝ＬＥＮＧＴＨ‖ＨＥＡＤＥＲ‖ＦＯＯＴＥＲ            （４）
Ｄ      ：２番目以降の公開鍵暗号ブロックに与えるデータ（７２０ｂｉｔｓ）
‖      ：バイナリデータの結合
ＬＥＮＧＴＨ：抜き落とされて残ったＤｅｆｌａｔｅ圧縮ブロックの長さ（３２ｂｉｔｓ）
ＨＥＡＤＥＲ：Ｄｅｆｌａｔｅ圧縮ブロックのヘッダ情報（６０８ｂｉｔｓ）
ＦＯＯＴＥＲ：Ｄｅｆｌａｔｅ圧縮ブロックの終端値を含む情報（８０ｂｉｔｓ）
【０１０９】
上記本発明のハイブリッド暗号が処理されてゆく例を図５に示す。なお、この例ではＤｅｆｌａｔｅ圧縮が３ブロックを出力した場合である。
【０１１０】
（Ｅ）  公開鍵暗号の構成方法について
上記実施例では公開鍵暗号ブロックをＤｅｆｌａｔｅ圧縮ブロックの数だけ作成したが、公開鍵暗号ブロックの鍵長をを十分大きくして、１ブロックで保護してもよい。
【０１１１】
既存のハイブリッド暗号で現在使用されているものは、１０２４ｂｉｔｓから４０９６ｂｉｔｓ程度の鍵長である。しかし、この程度の鍵長の公開鍵暗号の攻撃に必要な計算量は、共通鍵暗号を総当り攻撃してセッション鍵を見つけるまでの計算量よりもかなり小さいものである。
【０１１２】
ＲＳＡの攻撃に必要なおよその計算量は試算されているため、それを考慮して既存の公開鍵暗号の将来を考えると、公開鍵の鍵の長さは最低でも８１９２ｂｉｔｓ以上の長さのものが好ましい。
【０１１３】
次に、本実施例では公開鍵暗号としてＲＳＡを用いたが、公開鍵のアルゴリズムは本発明のハイブリッド暗号の本質には影響せず、Ｅｌｇａｍａｌ、楕円曲線暗号等であっても良い。
【０１１４】
従って、従来の公開鍵暗号の役割を楕円曲線暗号、量子暗号などの次世代の暗号へと置き換えることにより、上記の公開鍵暗号の鍵長肥大の問題も解決される。そして、本発明のハイブリッド暗号の信頼性はさらに向上することになる。
【０１１５】
例えば量子暗号に本発明のメッセージ抜落しアルゴリズムを加えることにより、従来の量子暗号方式以上の信頼性が得られることになる。量子暗号は鍵配送にのみ使用されるため、安全な通信を共通鍵（セッション鍵）のみで確保する従来のハイブリッド暗号と同方式と見ることもできるからである。
【０１１６】
（Ｆ）  共通鍵暗号の構成方法について
上述の公開鍵暗号と同様、本発明のハイブリッド暗号方式では共通鍵暗号のアルゴリズムにも影響を受けることがない。上記のように本発明に係るハイブリッド暗号における共通鍵暗号部への攻撃は、仮にセッション鍵が正しいものでも得られるデータがほぼ完全なランダムバイナリデータであるため、共通鍵暗号のアルゴリズムに拘わらず、総当りによるセッション鍵の特定が必要となる。
【０１１７】
そして、セッション鍵を特定してから、さらに抜き落とした情報やその位置を特定しなければならない。結局公開鍵暗号で暗号化した全てのデータを総当りするしかないのである。
【０１１８】
従って、本発明の提案するハイブリッド暗号を用いれば、共通鍵暗号暗号で全く保護しないメッセージの送信も可能である。公開鍵暗号として強度が十分なものを選択すれば、二重に鍵をかける必要を省いても安全にメッセージを送信可能なのである。
【０１１９】
（Ｇ）圧縮アルゴリズムについて
圧縮アルゴリズムとしては、圧縮することで復元する時に歪が発生しないアルゴリズムを必ず使用する必要がある。
【０１２０】
上記実施例で使用したＤｅｆｌａｔｅ圧縮では、Ｈｕｆｆｍａｎ符号が用いられている。この場合メッセージの出現頻度を必要とすることが重要な要素となっている。
【０１２１】
従って、Ｈｕｆｆｍａｎ符号に代えて算術符号を使用してもよい。算術符号とは生起確率を０以上１未満の小数で表現し、それを用いて全体を符号化する圧縮アルゴリズムであり、小数をそのまま符合として用いる性質をもつ。
【０１２２】
Ｈｕｆｆｍａｎ符号をこの算術符号に置き換えた場合、本発明のハイブリッド暗号はさらに信頼性が高まる。
【０１２３】
算術符号が本ハイブリッド暗号と相性が非常によいのは、Ｈｕｆｆｍａｎ符号よりもさらに高速で、高い圧縮率が得られるとされていることもあるが、算術符号には、元の文字が特定のｂｉｔ文字として与えられるわけではないという特徴があるためである。
【０１２４】
この特徴を利用することで、共通鍵暗号で暗号化されるバイナリデータのランダム化に更に踏み込むことができる。
【０１２５】
【発明の効果】
上述したように、本発明に係るハイブリッド暗号における共通鍵暗号部への攻撃は、仮にセッション鍵が正しいものでも得られるデータがほぼ完全なランダムバイナリデータとなっている。しかも共通鍵は１度きり使い捨てのランダムなセッション鍵であるため、まずは共通鍵暗号のアルゴリズムとは無関係に、総当りによるセッション鍵の特定が必要となる。
【０１２６】
そして、セッション鍵を特定できても、更に抜き落とした情報やその位置を特定しなければならない。即ち、上述のように結局公開鍵暗号で暗号化した全てのデータを総当りするしかないのである。
【０１２７】
また、共通鍵暗号部への攻撃に必要な計算量は、桁違いに大きくなっている。従来のハイブリッド暗号ならば共通鍵暗号の総当り攻撃は、常に２１２８種類（最大でも２２５６種類）のセッション鍵の検索であった。しかし、実施例のハイブリッド暗号の場合、公開鍵暗号がｎブロック生成された場合を考えると、共通鍵暗号部の総当り攻撃数は下式の回数にも上る。
【０１２８】
【数１】
0003650611.tif 000008
【０１２９】
更に、このハイブリッド暗号には、公開鍵暗号の鍵長が長くなるに従って、抜き落とせるバイト量が飛躍的に大きくなるという利点がある。従って抜き落しによって更に共通鍵暗号部への攻撃は困難となる。
【０１３０】
以上のことから、ハイブリッド暗号における共通鍵暗号攻撃の無効化は実現されている。
【０１３１】
また、共通鍵暗号で暗号化する情報落ちのバイナリデータすら解読できないため、共通鍵暗号の開発は、少なくとも本ハイブリッド暗号のためにはもう必要無いということもできる。上記のように本発明のハイブリッド暗号アルゴリズムを用いれば、共通鍵で保護しないメッセージ送信も可能である。
【０１３２】
ただし、１２８ｂｉｔｓ以上の共通鍵暗号で保護する場合は、総当り攻撃などの通常に考えうる攻撃に対して十分に強力であり、ランダム化のために使用しても非常に効果的である。
【０１３３】
以上より明らかなように、本発明に係るハイブリッド暗号は、従来のハイブリッド方式の暗号化アルゴリズムを堅持して安易に共通鍵の鍵長を単純に伸ばしたものよりも遥かに優れた方式である。
【図面の簡単な説明】
【図１】本発明のハイブリッド暗号化のブロック図。図中Ｚは圧縮手段を、Ｍは抜落手段を、‖は結合手段を、Ｅｓは共通鍵暗号化手段を、Ｅｐは公開鍵暗号化手段を、Ｒ64はｒａｄｉｘ−６４変換を、それぞれ表す。
【図２】本発明のＤｅｆｌａｔｅ圧縮における非圧縮ブロック。
【図３】本発明のＤｅｆｌａｔｅ圧縮における静的Ｈｕｆｆｍａｎ符号圧縮ブロック。
【図４】本発明のＤｅｆｌａｔｅ圧縮における動的Ｈｕｆｆｍａｎ符号圧縮ブロック。
【図５】ハイブリッド暗号の処理の流れ図。
【図６】ＰＧＰのブロック図。
【図１】
0003650611.tif 000009
【図２】
0003650611.tif 000010
【図３】
0003650611.tif 000011
【図４】
0003650611.tif 000012
【図５】
0003650611.tif 000013
【図６】
0003650611.tif 000014