説明

暗号化装置、暗号復号装置、暗号化方法、暗号復号方法、及び、プログラム

【課題】ストリーム型の暗号化において、暗号鍵の個数を増やす等の、秘密保存すべき暗号化関連データ量を増加させることなしに、暗号文が解読される危険性を減少させる。
【解決手段】暗号化装置111は、暗号鍵を種に生成した乱数列の一部を用いて変換テーブルを作成し、平文にストリーム型の暗号化を施して得られた仮暗号文に対して、暗号化用換字部において前記変換テーブルを用いた換字を行って暗号文を生成する。暗号復号装置113は、前記変換テーブルから逆変換テーブルを作成し、暗号文に対して、復号用換字部において前記逆変換テーブルを用いた換字を行って仮暗号文を復元し、さらに、前記ストリーム型の暗号化に対応した復号により平文を生成する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストリーム型の暗号化及びその復号を安全に行うことを可能とする暗号化装置、暗号復号装置、暗号化方法、暗号復号方法、及び、プログラムに関する。
【背景技術】
【0002】
ある平文の意味を普段は隠しておきたい場合、該平文をそのままにしておくよりも、該平文にある所定の処理を施して暗号文として保存しておく方が安全である。その後、該平文が必要になったときには、該暗号文に対して、基本的には該所定の処理とは逆の処理を施せば、元の平文を復号することができる(例えば、特許文献1参照。)。
【特許文献1】特開平9−114373号公報
【0003】
暗号化方法には様々なものがあるが、疑似乱数列を利用した暗号化方法のひとつとして、ストリーム型の暗号化方法が知られている。
【0004】
かかるストリーム型の暗号化方法のうちでは、暗号鍵を種にして生成した疑似乱数列と平文との排他的論理和を暗号文とする方法が主流である。疑似乱数列は秘密鍵に依存したデータ列であるため、暗号鍵が分からなければ、暗号文から平文を復号することはできない。よって、原則的には、暗号鍵を秘密にすれば、安全性を確保することができる。
【0005】
かかる暗号化方法においては、1個の暗号鍵を用いて2個の平文を暗号化して2個の暗号文を生成した場合、かかる2個の暗号文同士の排他的論理和は、元の2個の平文同士の排他的論理和と等しくなる。つまり、暗号文を作成した者が暗号鍵を秘密に保ってあっても、他人が2個の暗号文を知れば、該他人は2個の平文同士の排他的論理和を導き出すことができる。
【0006】
確かに、論理的には、2個の平文同士の排他的論理和から元の2個の平文を導き出すことは不可能である。しかし、平文の内容にある程度の見当がつけば、経験則に基づき、かかる排他的論理和から元の2個の平文を両方とも復元する技法は種々知られている。例えば、元の平文が英文を意味するものであることが知られてしまった場合、英文に最も多く現れるアルファベットは「e」であるという経験則を糸口にして、最終的には平文全体が解読されてしまうことがある。
【0007】
このように、1個の暗号鍵を用いて複数の平文を暗号化すると、十分な安全性を確保することができない。そこで、ストリーム型の暗号化方法においては、暗号化処理を行うたびに(例えば1個の平文毎に)異なる暗号鍵を用いるのが一般的である。
【0008】
このようにすれば、確かに、暗号文の排他的論理和から平文の内容を解読されてしまう危険性は低下する。しかしそのかわり、暗号鍵が1個では済まなくなるので、暗号鍵を秘密に保つためのコストがかさむことになる。ここでコストとは例えば、暗号鍵を保存するために何らかの媒体を使用するのであれば、より多くの記憶容量が必要となることや、暗号鍵自体を通信回線や無線等により遠方に届ける場合に、暗号鍵が途中で盗まれないようにするためのいっそうの配慮が必要となることを意味する。
【0009】
このように、ストリーム型の暗号化方法においては、従来は、暗号鍵に関するコストを低く維持することと、安全性の確保と、が両立しないという問題点があった。
【発明の開示】
【発明が解決しようとする課題】
【0010】
本発明は、上記実情に鑑みてなされたもので、従来の一般的なストリーム型暗号化方法に、変換テーブルを用いた換字変換を付加することにより、安全性の確保と暗号鍵に関するコストの削減とを両立するような、暗号化装置、暗号復号装置、暗号化方法、暗号復号方法、及び、プログラムを提供することを目的とする。
【課題を解決するための手段】
【0011】
上記目的を達成するために、本発明の第1の観点に係る暗号化装置は、
0と1とがランダムに並ぶ疑似乱数列を暗号鍵から一意に生成する乱数列生成部と、
0からN(Nは、2の所定の単位ビット数乗−1、以降同じ。)までの整数と同じく0からNまでの整数との間のランダムな1対1の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する変換テーブル生成部と、
前記乱数列生成部が生成した前記疑似乱数列を用いて平文から仮暗号文を生成する第1の暗号化部と、
前記第1の暗号化部により生成された前記仮暗号文を前記所定の単位ビット数毎に区切り、区切られた各部を、前記変換テーブル生成部により生成された前記変換テーブルを用いて、該各部が表す整数に等しい変換テーブルインデックス番号を有する変換テーブル要素に置換することにより暗号文を生成する第2の暗号化部と、
を備える。
【0012】
従来の一般的なストリーム型暗号化方法により仮暗号文を生成した後に、該仮暗号文を変換テーブルを用いて換字変換する。このため、1個の暗号鍵を用いて2個の平文を暗号化して2個の暗号文を得た場合でも、暗号文同士の排他的論理和は、平文同士の排他的論理和とは一致しない。よって、暗号鍵を増やすことなく、つまり暗号鍵に関するコストを低く維持しつつ、安全性を確保することができる。
【0013】
前記第1の暗号化部は、前記乱数列生成部が生成した前記疑似乱数列と平文とを排他的論理和演算することにより仮暗号文を生成する、ことが望ましい。
【0014】
このようにすれば、演算効率の高い暗号化を行うことができる。
【0015】
前記所定の単位ビット数は、例えば、8ビットである。
【0016】
前記所定の単位ビット数を8ビット程度にしておけば、前記変換テーブルは28=256個もの数値の相互のランダムな対応関係を表すことになる。かかる大きな変換テーブルにより仮暗号文を暗号文に変換すれば、通常の用途の場合、変換テーブルの規模に起因する安全性は十分に確保されると期待される。また、特に、平文が、ひらがな、かたかな、アルファベット、数字等から構成される場合には、データの基本単位が1バイトすなわち8ビットであるから、8ビットずつ暗号化すると、半端なビットが生じず、効率がよい。
【0017】
前記乱数列生成部が生成した前記疑似乱数列の一部を切り出すことにより、各配列要素が前記所定の単位ビット数から構成され0からNまでの整数のいずれかをランダムに表し、該各配列要素が0からNまでの配列インデックス番号で識別される配列を生成する配列生成部をさらに備え、前記変換テーブル生成部は、0からNまでの整数と同じく0からNまでの整数との間の1対1の対応関係を初期テーブルインデックス番号と該初期テーブルインデックス番号を有する初期テーブル要素とで表現した初期テーブルに対して、各初期テーブルインデックス番号を有する初期テーブル要素と、該初期テーブルインデックス番号に等しい前記配列インデックス番号を有する前記配列要素に等しい初期テーブルインデックス番号を有する初期テーブル要素と、を入れ替える操作を施すことにより、0からNまでの整数と同じく0からNまでの整数との間のランダムな1対1の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する、ことが望ましい。
【0018】
暗号鍵に関するコストが削減できても、暗号化装置と暗号複合化装置との間で、固定の変換テーブルをあらかじめ取り決めておいたり、暗号化装置がいかなる変換テーブルを用いたかについての情報を暗号復号装置に伝達するようにしておいたりすると、今度は変換テーブルの内容の漏洩が懸念される。その点、暗号鍵を種に生成される疑似乱数列の一部を変換テーブルの生成に用いれば、暗号鍵さえ秘密に保っておけば変換テーブルの内容が漏洩することはないし、暗号復号装置に暗号鍵を入力すれば暗号装置において用いられた変換テーブルを復元することができるため該変換テーブルを伝達することも不要となる。
【0019】
前記配列生成部は、前記乱数列生成部が生成した疑似乱数列のうち、先頭から(2の前記所定の単位ビット数乗×前記所定の単位ビット数)個目までの疑似乱数を切り出すことにより前記配列を生成し、前記第1の暗号化部は、前記乱数列生成部が生成した疑似乱数列のうち、(2の前記所定の単位ビット数乗×前記所定の単位ビット数+1)個目以降の疑似乱数列を用いて、平文から仮暗号文を生成する、ことが望ましい。
【0020】
生成された疑似乱数列のうち、変換テーブルの生成に用いられる部分と、仮暗号文の生成に用いられる部分とを完全に分離しておけば、変換テーブルと仮暗号文との間に相関が生じないため、暗号文はいっそう解読されにくくなり、安全性が向上する。
【0021】
上記目的を達成するために、本発明の第2の観点に係る暗号復号装置は、
0と1とがランダムに並ぶ疑似乱数列を暗号鍵から一意に生成する乱数列生成部と、
暗号化に用いられた、0からN(Nは、2の所定の単位ビット数乗−1、以降同じ。)までの整数と同じく0からNまでの整数との間のランダムな1対1の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する変換テーブル生成部と、
前記変換テーブルに対して各前記変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とを入れ替える操作を施すことにより、逆変換テーブルインデックス番号と逆変換テーブル要素とを備えた逆変換テーブルを生成する逆変換テーブル生成部と、
暗号文を受け取って前記所定の単位ビット数毎に区切り、区切られた各部を、前記逆変換テーブル生成部により生成された前記逆変換テーブルを用いて、該各部が表す整数に等しい逆変換テーブルインデックス番号を有する逆変換テーブル要素に置換することにより仮暗号文を生成する第1の復号部と、
前記乱数列生成部が生成した疑似乱数列を用いて仮暗号文から平文を生成する第2の復号部と、
を備える。
【0022】
上記目的を達成するために、本発明の第3の観点に係る暗号化方法は、
0と1とがランダムに並ぶ疑似乱数列を暗号鍵から一意に生成する乱数列生成ステップと、
0からN(Nは、2の所定の単位ビット数乗−1、以降同じ。)までの整数と同じく0からNまでの整数との間のランダムな1対1の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する変換テーブル生成ステップと、
前記乱数列生成ステップにおいて生成された前記疑似乱数列を用いて平文から仮暗号文を生成する第1の暗号化ステップと、
前記第1の暗号化ステップにおいて生成された前記仮暗号文を前記所定の単位ビット数毎に区切り、区切られた各部を、前記変換テーブル生成ステップにおいて生成された前記変換テーブルを用いて、該各部が表す整数に等しい変換テーブルインデックス番号を有する変換テーブル要素に置換することにより暗号文を生成する第2の暗号化ステップと、
から構成される。
【0023】
上記目的を達成するために、本発明の第4の観点に係る暗号復号方法は、
0と1とがランダムに並ぶ疑似乱数列を暗号鍵から一意に生成する乱数列生成ステップと、
暗号化に用いられた、0からN(Nは、2の所定の単位ビット数乗−1、以降同じ。)までの整数と同じく0からNまでの整数との間のランダムな1対1の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する変換テーブル生成ステップと、
前記変換テーブルに対して各前記変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とを入れ替える操作を施すことにより、逆変換テーブルインデックス番号と逆変換テーブル要素とを備えた逆変換テーブルを生成する逆変換テーブル生成ステップと、
暗号文を受け取って前記所定の単位ビット数毎に区切り、区切られた各部を、前記逆変換テーブル生成ステップにおいて生成された前記逆変換テーブルを用いて、該各部が表す整数に等しい逆変換テーブルインデックス番号を有する逆変換テーブル要素に置換することにより仮暗号文を生成する第1の復号ステップと、
前記乱数列生成ステップにおいて生成された疑似乱数列を用いて仮暗号文から平文を生成する第2の復号ステップと、
から構成される。
【0024】
上記目的を達成するために、本発明の第5の観点に係るコンピュータプログラムは、
コンピュータに、
0と1とがランダムに並ぶ疑似乱数列を暗号鍵から一意に生成する乱数列生成ステップと、
0からN(Nは、2の所定の単位ビット数乗−1、以降同じ。)までの整数と同じく0からNまでの整数との間のランダムな1対1の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する変換テーブル生成ステップと、
前記乱数列生成ステップにおいて生成された前記疑似乱数列を用いて平文から仮暗号文を生成する第1の暗号化ステップと、
前記第1の暗号化ステップにおいて生成された前記仮暗号文を前記所定の単位ビット数毎に区切り、区切られた各部を、前記変換テーブル生成ステップにおいて生成された前記変換テーブルを用いて、該各部が表す整数に等しい変換テーブルインデックス番号を有する変換テーブル要素に置換することにより暗号文を生成する第2の暗号化ステップと、
を実行させる。
【0025】
上記目的を達成するために、本発明の第6の観点に係るコンピュータプログラムは、
コンピュータに、
0と1とがランダムに並ぶ疑似乱数列を暗号鍵から一意に生成する乱数列生成ステップと、
暗号化に用いられた、0からN(Nは、2の所定の単位ビット数乗−1、以降同じ。)までの整数と同じく0からNまでの整数との間のランダムな1対1の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する変換テーブル生成ステップと、
前記変換テーブルに対して各前記変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とを入れ替える操作を施すことにより、逆変換テーブルインデックス番号と逆変換テーブル要素とを備えた逆変換テーブルを生成する逆変換テーブル生成ステップと、
暗号文を受け取って前記所定の単位ビット数毎に区切り、区切られた各部を、前記逆変換テーブル生成ステップにおいて生成された前記逆変換テーブルを用いて、該各部が表す整数に等しい逆変換テーブルインデックス番号を有する逆変換テーブル要素に置換することにより仮暗号文を生成する第1の復号ステップと、
前記乱数列生成ステップにおいて生成された疑似乱数列を用いて仮暗号文から平文を生成する第2の復号ステップと、
を実行させる。
【発明の効果】
【0026】
本発明によれば、ストリーム型暗号化方法において、安全性の確保と暗号鍵に関するコストの削減とを両立することができる。
【発明を実施するための最良の形態】
【0027】
(簡単な具体例)
まず、本発明が解決しようとする課題、かかる課題を解決するための手段、及び、本発明の効果、の理解を容易にするために、ごく簡単な具体例について、実際にビット演算しつつ説明する。本発明の実施の形態の詳細については、図1に示す機能構成図や、図2〜図6に示す物理的構成図等を参照して、後に説明する。
【0028】
所定の単位ビット数uを、u=2とする。つまり、平文、乱数列、仮暗号文、及び、暗号文、は、2ビットを1単位として区切って扱われる。
【0029】
Aなる意味を有する、長さが3単位すなわち6ビットの平文PA=”10 11 01”と、Bなる意味を有する、長さが同じく3単位すなわち6ビットの平文PB=”11 11 00”と、の2個の平文を、1個の暗号鍵を種に生成された疑似乱数列により、続けて暗号化する場面を考える。ただし、ビット列は" "で囲んで表す。
【0030】
区切り識別用変数をmとすると、これらの平文の、単位長すなわち2ビットずつに区切られた各部を、
PA(m=0)="10"、PA (m=1)="11"、PA (m=2)="01"、
PB(m=0)="11"、PB (m=1)="11"、PB (m=2)="00"、
のように表すことができる。
【0031】
疑似乱数列として、暗号鍵を種にした生成の結果、"10 00 01 00 10 01 11 ・・・"が得られたとする。なお、得られた乱数列の長さは、平文よりも十分に長い。
【0032】
乱数識別用変数をnとすると、この乱数列を単位長すなわち2ビットずつに区切ることにより、乱数を、
R(n=0)="10"=2、R(n=1)="00"=0、R(n=2)="01"=1、R(n=3)="00"=0、
R(n=4)="10"、R(n=5)="01"、R(n=6)="11"、
のように表すことができる。
【0033】
従来の一般的なストリーム型の暗号化によれば、平文PAの暗号文C0Aと、平文PBの暗号文C0Bと、は、それぞれ、
COA
="R(n=0) R(n=1) R(n=2)" xor PA
="10 00 01" xor ”10 11 01”
="00 11 00"、
COB
="R(n=0) R(n=1) R(n=2)" xor PB
="10 00 01" xor ”11 11 00”
="01 11 01"、
となる。ただし、xorは排他的論理和演算を表す。
【0034】
ここで、暗号文のコード同士の排他的論理和をとると、
COA xor COB
="00 11 00" xor "01 11 01"
="01 00 01"、
となる。
【0035】
一方、平文のコード同士の排他的論理和をとると、
PA xor PB
="10 11 01" xor ”11 11 00”
="01 00 01"
となるから、COA xor COB= PA xor PBが成立する。つまり、暗号鍵が分からなくても、2個の暗号文に基づいて2個の平文の排他的論理和を求めることができるので、安全性が不十分である。これが、従来の一般的なストリーム型の暗号化方法の問題点である。
【0036】
本発明に係る暗号化においては、まず、2u=22=4個の要素から成るテーブル
T(0)、T(1)、T(2)、T(3)
を用意する。各要素の値は、例えば、該要素のインデックス番号と同じ値に初期化しておく。すなわち、
T(0)=0、T(1)=1、T(2)=2、T(3)=3
とし、これを、図7(a)に示すように、初期テーブルとする。
【0037】
そして、乱数列のうち、先頭の2u×u個=22×2個=8個のビットから得られる乱数
R(n=0)="10"=2、R(n=1)="00"=0、R(n=2)="01"=1、R(n=3)="00"=0、
を、初期テーブルから変換テーブルを作成するための配列として用いる。
【0038】
この配列を先頭から順に、配列インデックス番号に等しいテーブルインデックス番号を有するテーブル要素と、配列要素に等しいテーブルインデックス番号を有するテーブル要素との交換操作を意味するものと解釈して、初期テーブルを徐々に変化させていく。
【0039】
すなわち、R(n=0)=2だから、まず、T(n)とT(R(n))の値、すなわち、T(0)とT(2)の値を交換する(図7(b))。続いて、R(n=1)=0だから、T(1)とT(0)の値を交換する(図7(c))。続いて、R(n=2)=1だから、T(2)とT(1)の値を交換する(図7(d))。最後に、R(n=3)=0だから、T(3)とT(0)の値を交換して、変換テーブルを完成させる(図7(e))。すなわち、変換テーブルは、
T(0)=3、T(1)=0、T(2)=2、T(3)=1、
である。
【0040】
本発明に係る暗号化においては、まず準備段階として、上述の変換テーブルを参照せずに、仮暗号文を作成する。安全性を高めるため、変換テーブルと仮暗号文との間に相関関係が生じないよう、乱数列のうち、変換テーブルの作成のために使用された先頭部分は、もう使用しない。つまり、仮暗号文の作成にあたっては、(2u×u+1)ビット目以降=(22×2+1)ビット目以降=9ビット目以降、すなわちR(n=4)以降の部分を使用する。
【0041】
平文PAの仮暗号文CtmpAは、各区切りずつ、
CtmpA(m=0)
=R(n=4+m) xor PA(m=0)=R(n=4) xor PA(m=0)="10"xor"10"="00"、
CtmpA(m=1)
=R(n=4+m) xor PA(m=1)=R(n=5) xor PA(m=1)="01"xor"11"="10"、
CtmpA(m=2)
=R(n=4+m) xor PA(m=2)=R(n=6) xor PA(m=2)="11"xor"01"="10"、
のように求まるので、
CtmpA="001010"
となる。
【0042】
平文PBの仮暗号文CtmpBは、各区切りずつ、
CtmpB(m=0)
=R(n=4+m) xor PB(m=0)=R(n=4) xor PB(m=0)="10"xor"11"="01"、
CtmpB(m=1)
=R(n=4+m) xor PB(m=1)=R(n=5) xor PB(m=1)="01"xor"11"="10"、
CtmpB(m=2)
=R(n=4+m) xor PB(m=2)=R(n=6) xor PB(m=2)="11"xor"00"="11"、
のように求まるので、
CtmpB="011011"
となる。
【0043】
なお、ここでCtmpA xor CtmpBとPA xor PBを計算すると、いずれも"010001"という等しい値になり、従来技術の問題点が解消していない。これは、暗号化のために参照する乱数列の位置を4単位ビット数だけずらしただけだから、当然の帰結である。
【0044】
本発明に係る暗号化においては、この後、変換テーブルを用いて、平文PAの仮暗号文CtmpAから平文PAの暗号文CAを、平文PBの仮暗号文CtmpAから平文PBの暗号文CBを、それぞれ求めることに意義がある。
【0045】
上述のとおり、仮暗号文CtmpAの各区切りは、
CtmpA(m=0)="00"=0、CtmpA(m=1)="10"=2、CtmpA(m=2)="10"=2、
である。この仮暗号文の区切られた各部を、各部が表す整数に等しい変換テーブルインデックス番号を有する変換テーブル要素に置換することにより、平文PAの暗号文CAを求める。
【0046】
まず、CtmpA(m=0)=0なので、T(CtmpA(m=0))=T(0)=3より、CA(m=0)=3="11"である。続いて、CtmpA(m=1)=2なので、T(CtmpA(m=1))=T(2)=2より、CA(m=1)=2="10"である。続いて、CtmpA(m=2)=2なので、T(CtmpA(m=2))=T(2)=2より、CA(m=2)=2="10"である。よって、CA="CA(m=0) CA(m=1) CA(m=2)"="11 10 10"である。
【0047】
同様に、上述のとおり、仮暗号文CtmpBの各区切りは、
CtmpB(m=0)="01"=1、CtmpB(m=1)="10"=2、CtmpB(m=2)="11"=3、
である。
【0048】
まず、CtmpB(m=0)=1なので、T(CtmpB(m=0))=T(1)=0より、CB(m=0)=0="00"である。続いて、CtmpB(m=1)=2なので、T(CtmpB(m=1))=T(2)=2より、CB(m=1)=2="10"である。続いて、CtmpB(m=2)=3なので、T(CtmpB(m=2))=T(3)=1より、CB(m=2)=2="01"である。よって、CB="CB(m=0) CB(m=1) CB(m=2)"="00 10 01"である。
【0049】
このように変換テーブルを用いた処理を追加したので、従来技術の問題点が解決される。つまり、暗号文のコード同士の排他的論理和をとると、
CA xor CB="11 10 10" xor "00 10 01"="11 00 11"、
となるのに対して、平文のコード同士の排他的論理和は、既に示したとおり、
PA xor PB="01 00 01"、
となり、CA xor CBはPA xor PBと相違する。よって、従来の方法に比べて暗号が解読されにくくなり、安全性が高まったといえる。
【0050】
暗号文を復号する場合は、暗号化に用いたものと同じ暗号鍵を種にすることにより同じ乱数列を生成して、生成された乱数列に基づいて暗号化に用いたものと同じ変換テーブルを生成し、生成された変換テーブルのインデックス番号と要素とを入れ替えることにより逆変換テーブルを生成し、生成された逆変換テーブルにより暗号文から仮暗号文を生成し、暗号化の際に平文と乱数列とについて行った排他的論理和演算の逆算を仮暗号文に施すことにより、平文が復号される。
【0051】
なお、上に例示したとおり、本発明に係る方法に基づく暗号文の長さは、従来の一般的なストリーム型暗号化方法に基づく暗号文の長さと同じく、6ビットである。これは本発明の特徴のひとつである。すなわち、本発明によれば、従来の一般的な暗号化方法に基づく暗号文よりデータの容量を増加させることなしに、安全性を向上させることができる。
【0052】
(実施形態1)
図1は、本発明の実施形態1に係る暗号化装置111及び暗号復号装置113の機能構成図である。なお、後述のように、本実施形態においては、実際には、暗号化装置111の機能と暗号復号装置113の機能とは統合されて、暗号化兼暗号復号装置として機能する。
【0053】
暗号化装置111は、乱数列生成部115と、暗号化用排他的論理和演算部121と、暗号化用換字部123と、を備える。一方、暗号復号装置113は、乱数列生成部115と、復号用排他的論理和演算部131と、復号用換字部133と、を備える。暗号化装置111の中の乱数列生成部115と、暗号復号装置113の中の乱数列生成部115とは、同じ機能を有する。
【0054】
乱数列生成部115は、暗号鍵Kが入力されると、暗号鍵Kに一意な、十分に長い疑似乱数列Rを生成する。ここで、「一意」とは、乱数列生成部115が、同一のKに対しては同一の数列Rを生成するという意味である。また、「十分に長い」とは、暗号化したい平文の長さに比べて十分に長いという意味であって、暗号文を解読されにくくする、すなわち、安全性を確保するために、暗号化にあたって同一乱数列のいわゆる使い回しを避けるために必要なことである。さらに、「疑似乱数列」の「疑似」とは、乱数生成部115は、所定の規則に従って、暗号鍵Kを種に乱数列を生成するのであって、厳密な乱数を生成しているわけではないことを意味する。このことは、上述の一意性を確保する上でも必要である。
【0055】
暗号化装置111と暗号復号装置113とが同一の機能を有する乱数列生成部115を採用することは、上述のかかる一意性ともあいまって、安全性及びコスト面で問題のある、暗号化側から暗号復号化側への変換テーブルの内容の伝達を、不要にする。復号化側では、暗号化側と同じ暗号鍵Kを暗号復号装置113に入力しさえすれば、同一の変換テーブルを生成することができるからである。そして、上述の簡単な具体例のとおり、暗号文から仮暗号文を復元するために必要な逆変換テーブルが、変換テーブルから生成される。
【0056】
なお、このように疑似乱数列Rは暗号鍵Kの関数であるが、乱数列生成部115が行う疑似乱数列生成方法は、疑似乱数列Rから暗号鍵Kを逆算することが事実上不可能であるような方法であれば、任意の既知の方法であってよい。
【0057】
乱数列生成部115により生成された疑似乱数列Rの一部は、暗号化用排他的論理和演算部121に引き渡され、平文Pから仮暗号文Ctmpを生成するために用いられる。他の部分は、暗号化用換字部123に引き渡され、仮暗号文Ctmpから暗号文Cを生成するために用いられる。なお、疑似乱数列のうち、暗号化用排他的論理和演算部121に引き渡される部分と、暗号化用換字部123に引き渡される部分とは、重複しない方が、安全上望ましいことは、上述の簡単な具体例で述べたとおりである。
【0058】
暗号化用排他的論理和演算部121には、平文Pが入力されるとともに、疑似乱数列Rの一部が引き渡される。これらについて暗号化用排他的論理和演算部121は、排他的論理和演算を行うことにより、仮暗号文Ctmpを生成して、暗号化用換字部123に引き渡す。
【0059】
暗号化用換字部123は、乱数列生成部115から疑似乱数列Rの一部を受け取り、それに基づいて変換テーブルを作成する。暗号化用換字部123は、暗号化用排他的論理和演算部121から仮暗号文Ctmpを受け取り、作成した変換テーブルを用いて、仮暗号文Ctmpから暗号文Cを生成する。
【0060】
この暗号文Cが、暗号化装置111の出力である。暗号文Cは、暗号復号装置113に入力される。
【0061】
暗号文Cは、暗号復号装置113の中の、復号用換字部133に入力される。復号用換字部133は、復号装置113に入力された暗号鍵Kを種にして生成された疑似乱数列Rの一部を受け取り、それに基づいて暗号化用換字部123と同様に変換テーブルを作成した後、テーブルインデックス番号の値と要素の値とを入れ替えることにより逆変換テーブルを作成する。復号用換字部133はこの逆変換テーブルを用いて、入力された暗号文Cから仮暗号文Ctmpを復元し、復号用排他的論理和演算部131に引き渡す。
【0062】
復号用排他的論理和演算部131は、疑似乱数列の一部と仮暗号文Ctmpとを受け取り、暗号化用排他的論理和演算部121が行う演算とちょうど逆向きの演算を行うことにより、平文Pを復号する。この平文Pが、暗号復号装置113の出力である。
【0063】
暗号化装置111と暗号復号装置113とを比較すると、以上述べてきたとおり、乱数生成部115は全く同じ機能を有するし、暗号化用排他的論理和演算部121と復号用排他的論理和演算部131、及び、暗号化用換字部123と復号用換字部133、は、それぞれ、酷似した機能を有する。よって、暗号化用排他的論理和演算部121と復号用排他的論理和演算部131との機能を、暗号化時と暗号復号時とで切り替えることができる排他的論理和演算部と、暗号化用換字部123と復号用換字部133との機能を、暗号化時と復号化時とで切り替えることができる換字部と、を用意すれば、排他的論理和演算部と、換字部と、乱数列生成部115と、により暗号化兼暗号復号装置を構成することもできる。本実施形態に係る装置は、実際には、このような暗号化兼暗号復号装置であるとする。
【0064】
図2〜図6は、かかる暗号化兼暗号復号装置211の物理的構成と動作の様子を、模式的に示したものである。
【0065】
図2に示すように、本実施形態に係る暗号化兼暗号復号装置211は、CPU241と、ROM(Read Only Memory)243と、記憶部245と、ユーザ入出力I/F(インターフェース)231と、データ入出力I/F233と、これらを相互に接続するシステムバス247と、を備える。
【0066】
ユーザI/F231には、キーボード221と、モニタ223と、が接続される。ユーザは、キーボードを操作することにより、暗号化兼暗号復号装置211に平文や暗号鍵を伝達したり、暗号化や暗号復号の動作を行わせたりする。モニタ223は、ユーザのために、暗号文を復号した結果得られた平文を表示させたり、暗号化兼暗号復号装置211の動作状態を表示させたりするために用いられる。
【0067】
データ入出力I/F233には、リムーバブルハードディスク、フラッシュメモリカード、DVD−RAM、CD−RW、MOディスク、フレキシブルディスク等の、取り外し可能な外部記録媒体225が接続される。外部記録媒体225はユーザの所望の処理、典型的には暗号文の格納、が完了した後、ユーザが取り外してユーザ自身が保存したり、同種の暗号化兼暗号復号装置211を有する別のユーザに手渡したりする。あるいは、暗号化側のユーザは、外部記録媒体225の内容を、外部記録媒体225の内容の読み取りが可能でかつ通信機能を備えた装置によって、電気通信回線や無線により遠隔地の暗号複合化側のユーザに伝達したりする。取り外し可能であることにより、多くの暗号文を複数の外部記録媒体225に分けて格納することもできる。
【0068】
CPU241は、ROM243に格納された後述の各種の動作プログラムを実行することにより、暗号化動作及び暗号復号動作を制御する。CPU241は、システムバス247によって、ROM243、記憶部245、ユーザ入出力I/F231、データ入出力I/F233にかかる動作の実行に必要な命令を送信したり、又は、これら各部から必要なデータや応答信号を受信したりする。CPU241は、上述の通りROM243から動作プログラムを読み込む他、記憶部245との間でデータの授受を行う。CPU241は、高速アクセスが可能な各種レジスタ(図示せず。)を備え、記憶部245に格納されているデータは、例えば、いったんこのレジスタに読み込まれ、CPU241により上述の動作プログラムに従った演算を施されて書き換えられてから、記憶部245に戻される、というように扱われる。
【0069】
ROM243には、文区切り及び結合プログラム251、乱数列生成プログラム253、配列生成プログラム255、初期テーブル257、変換テーブル生成プログラム259、逆変換テーブル生成プログラム261、第1暗号化及び復号プログラム263、及び、第2暗号化及び復号プログラム265、という動作プログラムが格納されている。これらの動作プログラムの詳細については、後に図3〜図6を参照して説明する。ROM243には他にも、オペレーティングシステムプログラム(図示せず。)等、暗号化兼暗号復号装置211全体の動作を制御するために必要な各種のプログラムが格納されている。
【0070】
記憶部245は、RAM(Random Access Memory)及びハードディスク(いずれも図示せず。)を備え、暗号鍵271、区切られた平文273、疑似乱数列のうち第(2u×u)ビット以降の部分275、仮暗号文277、疑似乱数列のうち第0ビットから第(2u×u -1)ビットまでの部分279、配列281、変換テーブル283、逆変換テーブル284、及び、暗号文285、といったデータを格納する。これらのデータが生成されたり利用されたりする様子の詳細については、後に図3〜図6を参照して説明する。記憶部245は他にも、様々な一時的データ(図示せず。)を格納する。
【0071】
以下では、図3〜図6を参照しつつ、本実施形態に係る暗号化兼暗号復号装置211の暗号化動作及び暗号復号動作を説明する。図3〜図6においては、処理の流れを模式的に示して理解を容易にするために、矢印が多用されている。矢印には、一点鎖線、点線、及び、実線、の3種類ある。一点鎖線の矢印は、暗号化の際の変換テーブル283を生成する動作及び暗号復号の際の逆変換テーブル284を生成する動作の説明のためのものである。点線の矢印は、変換テーブル283又は逆変換テーブル284が生成された後の、平文が暗号化されて暗号文が生成される動作又は暗号文が復号されて平文が生成される動作の説明のためのものである。実線の矢印は、これらのいずれにも関係する動作の説明のためのものである。
【0072】
暗号化動作及び暗号復号動作は上述のように、CPU241の制御のもとで行われるが、以下では、理解を容易にするために、主にROM243に格納された動作プログラムと記憶部245に適宜格納されるデータとの関係に着目して説明する。例えば、CPU241が、ROM243に格納されているある動作プログラムを読み出し、該動作プログラムに記載された手順にしたがって、記憶部245に格納されているあるデータをレジスタに格納し演算を施し別のデータを生成して記憶部245に格納する動作を記述する場合であれば、以下では単に、動作プログラムがあるデータから別のデータを生成する、というように記述することにする。
【0073】
図3及び図4を参照しつつ、本実施形態に係る暗号化兼暗号復号装置211の暗号化動作を説明する。データ入出力I/F233には、空の外部記録媒体225が接続される。
【0074】
図3は、解読されにくい暗号文を作成するために必要な、変換テーブル283を生成する動作を模式的に示した図である。
【0075】
ユーザがキーボード221を操作して暗号鍵を打鍵すると、暗号化兼復号装置211の中の記憶部245に暗号鍵271が格納される。
【0076】
乱数列生成プログラム253は、暗号鍵271を種にして、任意の既知の手法により、疑似乱数列を生成し、それを第0ビットから第(2u×u-1)ビットまでの部分279と、第(2u×u)ビット以降の部分275と、に分けて、記憶部245に格納する。前者の部分は、変換テーブル283の作成のために使用される一方、後者の部分は、後に仮暗号文を生成するために使用され、変換テーブル283の作成のためには、使用されない。
【0077】
このように、生成された疑似乱数列のうち、変換テーブルの生成に用いられる部分と、仮暗号文の生成に用いられる部分とを完全に分離しておけば、変換テーブルと仮暗号文との間に相関が生じないため、暗号文はいっそう解読されにくくなり、安全性が向上する。
【0078】
配列生成プログラム255は、疑似乱数列のうち第0ビットから第(2u×u-1)ビットまでの部分279に基づいて、配列281を生成する。
【0079】
ROM243には、初期テーブル257が格納されている。初期テーブル257としては、各要素が該要素のインデックス番号の値に等しいテーブルが好適である。変換テーブル生成プログラム259は、初期テーブル257に、配列281で決定される要素入れ替え演算を、上述の簡単な具体例と同等に施すことにより、変換テーブル283を生成し、記憶部245に格納する。
【0080】
図4は、上述のように生成された変換テーブル283を用いて、キーボード221を介して入力された平文が暗号化されて、暗号文が外部記録媒体225に格納される動作を模式的に示した図である。
【0081】
平文は、文区切り及び結合プログラム251により、所定の単位ビット数u毎に区切られ、区切られた平文273として記憶部245に格納される。
【0082】
なお、文区切り及び結合プログラム251は、ここでは、平文に対して、所定の単位ビット数uに区切ったり、後述のように区切られた部分をひとまとめにしたりするためのプログラムであるとした。しかし、文を区切ったり結合したりする操作は、平文に対してのみならず、仮暗号文及び暗号文に対して行ってもよいし、また、そうすることが必要である場合もある。よって、文区切り及び結合プログラム251は、以下で特に言及されない場合でも、任意に、あるいは、必要に応じて、平文、仮暗号文、暗号文の何れについても使用されるものであるとする。
【0083】
前記所定の単位ビット数uは、8ビットが好適である。すなわち、u=8とするのが好適である。このようにすれば、変換テーブル283は2u=28=256個もの数値の相互のランダムな対応関係を表すことになる。かかる大きな変換テーブルにより仮暗号文を暗号文に変換すれば、通常の用途の場合、変換テーブルの規模に起因する安全性は十分に確保されると期待される。また、特に、平文が、ひらがな、かたかな、アルファベット、数字等から構成される場合には、データの基本単位が1バイトすなわち8ビットであるから、8ビットずつ暗号化すると、半端なビットが生じず、効率がよい。
【0084】
第1暗号化及び復号プログラム263は、区切られた平文273と、変換テーブル283の作成の際に既に生成してある第(2u×u)ビット以降の疑似乱数列275と、の排他的論理和をとり、仮暗号文277を生成する。
【0085】
このように排他的論理和をとることは、一般的なストリーム型暗号化方法において行われていることであり、演算効率の高い暗号化が可能になる。
【0086】
第2暗号化及び復号プログラム265は、変換テーブル283を用いて、上述の簡単な具体例と同様に、仮暗号文277から暗号文285を生成し、記憶部245に格納する。
【0087】
暗号文285は、データ入出力I/F233を介して、外部記録媒体225に格納される。
【0088】
図5及び図6を参照しつつ、本実施形態に係る暗号化兼暗号復号装置211の暗号復号動作を説明する。データ入出力I/F233には、暗号文が格納された外部記録媒体225が接続される。
【0089】
図5は、復号に必要な、逆変換テーブル284を生成する動作を模式的に示した図である。
【0090】
ユーザは、暗号化の場合と同様に、キーボード221を操作して暗号鍵を打鍵する。すると、暗号化兼復号装置211の中の記憶部245に暗号鍵271が格納される。
【0091】
この後、変換テーブル283が生成され記憶部245に格納されるまでの動作は、暗号化の場合と全く同じである。
【0092】
暗号化側と暗号複合化側との間で、固定の変換テーブルをあらかじめ取り決めておいたり、暗号化側がいかなる変換テーブルを用いたかについての情報を暗号復号側に伝達するようにしておいたりすると、変換テーブルの内容の漏洩が懸念される。その点、本実施形態のように、暗号鍵を種に生成される疑似乱数列の一部を変換テーブルの生成に用いれば、暗号鍵さえ秘密に保っておけば変換テーブルの内容が漏洩することはないし、暗号復号側のユーザが暗号復号装置として動作する暗号化兼暗号復号装置211に暗号鍵を入力すれば、暗号化側のユーザが暗号化装置として動作する暗号化兼暗号復号装置211において用いられた変換テーブルを復元することができるため該変換テーブルを伝達することも不要となる。
【0093】
逆変換テーブル生成プログラム261は、変換テーブル283のインデックス番号と要素の値とを入れ替える操作を行うことにより逆変換テーブル284を生成し、記憶部245に格納する。
【0094】
図6は、外部記録媒体225に格納された暗号文が取り出され、取り出された暗号文が上述のように生成された逆変換テーブル284を用いて平文に復号され、復号された平文がユーザのためにモニタ223に表示される動作を模式的に示した図である。
【0095】
外部記録媒体225からデータ入出力I/F233を介して記憶部245に格納された暗号文285は、第2暗号化及び復号プログラム265により、逆変換テーブル284に従って、仮暗号文277に変換される。
【0096】
第1暗号化及び復号プログラム263は、復元された仮暗号文277と、逆変換テーブル284の作成の際に既に生成してある第(2u×u)ビット以降の疑似乱数列275と、について排他的論理和演算を施し、区切られた平文273を復号する。
【0097】
区切られた平文273は、文区切り及び結合プログラム251によって結合されてひとまとまりの平文とされる。その後、平文は、ユーザがその内容を知ることができるように、ユーザ入出力I/F231を介してモニタ223に表示される。
【0098】
以下では、暗号化用換字部123(図1)や、復号用換字部133(図1)や、変換テーブル生成プログラム259(図2、図3、図5)による動作において行われる、暗号化のための変換テーブルの生成の手順について、図8に示すフローチャートを参照しつつ説明する。
【0099】
0から2u-1までのインデックス番号で相互に識別される2u個のテーブル要素から成る初期テーブルが用意される(ステップS811)。各要素の値は、該要素のインデックス番号と等しい値とする。本実施形態の場合は、上述のとおり、u=8が好適であり、初期テーブルはROM243に格納済みである。
【0100】
CPU241は、内蔵のカウンタレジスタに乱数識別用変数nを格納することとし、初期値をn=0とする(ステップS813)。
【0101】
CPU241は、内蔵の汎用レジスタに、uビットで表され0から(2u-1)までの整数をとるn番目の乱数R(n)を記憶部245からロードする(ステップS815)。
【0102】
CPU241はさらに、汎用レジスタに、テーブルインデックス番号がnであるテーブル要素T(n)と、テーブルインデックス番号がR(n)であるテーブル要素T(R(n))と、を記憶部245からロードする(ステップS817)。
【0103】
CPU241は、T(n)とT(R(n))とを入れ替える演算を行い(ステップS819)、これらを記憶部245に格納する(ステップS821)。すなわち、はじめ、インデックス番号nを有する要素の値がT(n)でありかつインデックス番号R(n)を有する要素の値がT(R(n))であったのに対して、かかる処理の後は、インデックス番号nを有する要素の値が元のT(R(n))となりかつインデックス番号R(n)を有する要素の値が元のT(n)となる。
【0104】
CPU241は、nが2u-1に達したか否かを判別し(ステップS823)、まだ達していない場合には(ステップS823;No)nを1増加(ステップS825)してからステップS815に戻り、達している場合には(ステップS823;Yes)処理を終了する。
【0105】
この、図8のフローチャートで示される処理を、具体的な数値を用いて例示すると、図9のようになる。
【0106】
初期テーブルは、図9(a)に示されるテーブルである。この初期テーブルにおいては、T(0)=0、T(1)=1、・・・、T(255)=255のように、インデックス番号と要素の値とが等しい。
【0107】
先頭の乱数であるR(0)の値が89であるとすると、テーブルインデックス番号0を有するテーブル要素の値0と、テーブルインデックス番号89を有するテーブル要素の値89と、が交換される。すなわち、元は、T(0)=0かつT(89)=89であったのに対して、かかる交換後は、T(0)=89かつT(89)=0となる(図9(b)の左側)。続いて、2番目の乱数であるR(1)の値が123であるとすると、テーブルインデックス番号1を有するテーブル要素の値1と、テーブルインデックス番号123を有するテーブル要素の値123と、が交換される。すなわち、元は、T(1)=1かつT(123)=123であったのに対して、かかる交換後は、T(1)=123かつT(123)=1となる(図9(b)の右側)。
【0108】
このような交換操作が255回行われた後、テーブルは図9(c)の左側に示すものになっているとする。
【0109】
そして、最後の乱数であるR(255)を用いた、最後の交換操作である256回目の交換操作が行われる。R(255)の値が1であるとすると、テーブルインデックス番号255を有するテーブル要素の値3と、テーブルインデックス番号1を有するテーブル要素の値123と、が交換される。すなわち、元は、T(255)=3かつT(1)=123であったのに対して、かかる交換後は、T(255)=123かつT(1)=3となる。こうして、変換テーブルが完成する(図9(c)の右側)。
【0110】
以下では、暗号化用排他的論理和演算部121(図1)や、暗号化の際の第1暗号化及び復号プログラム263(図2、図4)による動作において行われる、暗号化のための仮暗号文の生成の手順について、図10に示すフローチャートを参照しつつ説明する。
【0111】
平文は所定の単位ビット数であるuビットずつの部分に区切られた結果(本実施形態ではu=8が好適である。)、0からmMAXまでの区切り識別用変数mで相互に識別される(mMAX+1)個の部分に分割された状態で記憶部245に格納されているとする。
【0112】
CPU241は、内蔵のカウンタレジスタに区切り識別用変数mを格納することとし、初期値をm=0とする(ステップS11)。
【0113】
CPU241は、内蔵の別のカウンタレジスタに乱数識別用変数nを格納することとし、n=2u+mによりnを求める(ステップS13)。
【0114】
CPU241は、内蔵の汎用レジスタに、ともにu=8ビットで表される、平文の第m区切りP(m)と、n番目の乱数R(n)と、を記憶部245からロードする(ステップS15)。
【0115】
CPU241は、仮暗号文の第m区切りCtmp(m)を、P(m)とR(n)の排他的論理和をとることにより、求め(ステップS17)、記憶部245に格納する(ステップS19)。
【0116】
CPU241は、mがmMAXに達したか否かを判別し(ステップS21)、まだ達していない場合には(ステップS21;No)mを1増加(ステップS23)してからステップS13に戻り、達している場合には(ステップS21;Yes)処理を終了する。
【0117】
以下では、暗号化用換字部123(図1)や、暗号化の際の第2暗号化及び復号プログラム265(図2、図4)による動作において行われる、暗号化のための暗号文の生成の手順について、図11に示すフローチャートを参照しつつ説明する。
【0118】
仮暗号文は、所定の単位ビット数であるuビットずつの部分に区切られ0からmMAXまでの区切り識別用変数mで相互に識別される(mMAX+1)個の部分に分割された状態で、記憶部245に格納されているとする。
【0119】
CPU241は、区切り識別用変数mを0に初期化する(ステップS111)。
【0120】
CPU241は、仮暗号文の第m区切りであるCtmp(m)を記憶部245からロードし(ステップS113)、続いて、変換テーブルを検索して、インデックス番号としてCtmp(m)に等しい値を有する変換テーブル要素T(Ctmp(m))をロードし(ステップS115)、続いて、暗号文の第m区切りであるC(m)を、C(m)= T(Ctmp(m))により求め(ステップS117)、記憶部245に格納する(ステップS119)。
【0121】
CPU241は、mがmMAXに達したか否かを判別し(ステップS121)、まだ達していない場合には(ステップS121;No)mを1増加(ステップS123)してからステップS113に戻り、達している場合には(ステップS121;Yes)処理を終了する。
【0122】
以下では、復号用換字部133(図1)や、主に逆変換テーブル生成プログラム261(図2、図5)による動作において行われる、復号のための逆変換テーブルの生成の手順について、図12に示すフローチャートを参照しつつ説明する。
【0123】
図8のフローチャートに示した手順と同様の手順により、CPU241は、変換テーブルを生成する(ステップS211)。
【0124】
CPU241は、変換テーブルインデックス番号iを、i=0に初期化する(ステップS213)。
【0125】
CPU241は、テーブル要素T(i)を、記憶部245からロードし(ステップS215)、逆変換テーブルのうちインデックス番号がT(i)に等しい要素T-1(T(i))の値を、T-1(T(i))=iにより求め(ステップS217)、記憶部245に格納する(ステップS219)。
【0126】
CPU241は、iが2u-1に達したか否かを判別し(ステップS221)、まだ達していない場合には(ステップS221;No)iを1増加(ステップS223)してからステップS215に戻り、達している場合には(ステップS221;Yes)処理を終了する。
【0127】
ここで行っていることは、端的にいえば、変換テーブルのインデックス番号と要素の値とを入れ替えることにより、逆変換テーブルを生成するということである。図9で具体的な値を用いて例示した変換テーブルから、逆変換テーブルを生成する様子を、図13に示す。
【0128】
以下では、復号用排他的論理和演算部131(図1)や、復号の際の第1暗号化及び復号プログラム263(図2、図6)による動作において行われる、復号のための仮暗号文の生成の手順について、図14に示すフローチャートを参照しつつ説明する。
【0129】
暗号文は、所定の単位ビット数であるuビットずつの部分に区切られ0からmMAXまでの区切り識別用変数mで相互に識別される(mMAX+1)個の部分に分割された状態で、記憶部245に格納されているとする。また、逆変換テーブルは既に生成されて、記憶部245に格納されているとする。
【0130】
CPU241は、区切り識別用変数mを0に初期化する(ステップS411)。
【0131】
CPU241は、暗号文の第m区切りであるC(m)を、記憶部245からロードし(ステップS413)、続いて、逆変換テーブル要素T-1(C(m))を、記憶部245からロードし(ステップS415)、続いて、仮暗号文の第m区切りであるCtmp(m)を、Ctmp(m)=T-1(C(m))により求め(ステップS417)、記憶部245に格納する(ステップS419)。
【0132】
CPU241は、mがmMAXに達したか否かを判別し(ステップS421)、まだ達していない場合には(ステップS421;No)mを1増加(ステップS423)してからステップS413に戻り、達している場合には(ステップS421;Yes)処理を終了する。
【0133】
仮暗号文から平文を復号する手順は、平文と乱数列とから排他的論理和演算により仮暗号文を求める手順を逆向きに行う。平文と乱数列とから排他的論理和演算により仮暗号文を求める手順については既に詳細に述べてあり、また、この手順は、乱数列のうち変換テーブルの生成に使用される先頭部分を使用しないことを除けば、従来の一般的なストリーム型暗号方法における復号方法と同様であるので、ここでは説明を省略する。
【0134】
(実施形態2)
実施形態1に係る暗号化装置111、暗号復号装置113、及び、暗号化兼暗号復号装置211においては、暗号鍵を種に生成される乱数列の一部を用いて変換テーブル及び逆変換テーブルを生成した。これにより、暗号化側から暗号復号側に暗号鍵を知らせるだけで、暗号復号側は暗号化側で用いられた変換テーブルを再現し逆変換テーブルを導き出すことができるようになり、いかなる変換テーブルを用いたかという情報は伝達される必要がなく、基本的には、安全面で有利である。
【0135】
しかし本発明は、変換テーブルに関する情報を暗号化側から暗号復号側に伝達するような実施形態を除外するものではない。従来の一般的なストリーム型暗号化方法における、同一の暗号鍵を用いて2個の平文を暗号化した場合の安全性の低さは、少なくとも変換テーブルを使用することにより、改善されるからである。
【0136】
そこで、本発明の実施形態2に係る暗号化兼暗号復号装置として、実施形態1に係る暗号化兼暗号復号装置(図2)から、ROM243の中の配列生成プログラム255、初期テーブル257、変換テーブル生成プログラム259、及び、記憶部245の中の配列281、を除去したものが挙げられる。本実施形態においては、記憶部245の中の変換テーブル283は、ユーザがキーボード221を打鍵するか又はデータ入出力I/F233に変換テーブル283が格納された記録媒体が接続されることにより、ユーザ入出力I/F231又はデータ入出力I/F233を介して記憶部245に格納される。また、疑似乱数列の最初の方の部分を変換テーブルの作成のために利用する必要がないため、実施形態1の場合と異なり、疑似乱数列の最初の方の部分279とそれ以降の部分275とを区別する必要はなく、疑似乱数列は先頭から仮暗号文に関する処理のために用いることができる。
【0137】
本実施形態においては、暗号化側から暗号復号側に、暗号鍵の他、変換テーブルの内容を別途伝達する必要があるが、実施形態1の場合に必要とされた動作プログラムのいくつかが不要となるため暗号化兼復号装置が簡略化される。
【0138】
また、実施形態1の場合には、何者かに乱数生成の方法が分析され暗号鍵が入手されてしまった場合、暗号が解読されてしまう。これに対し、本実施形態の場合は、変換テーブルを乱数列とは無関係に定めることができるので、何者かに乱数生成の方法が分析され暗号鍵が入手されてしまった場合でも、変換テーブルが秘密に保たれていれば、暗号が解読されにくいという利点がある。
【0139】
(実施形態3)
本実施形態に係る暗号化兼暗号復号装置は、実施形態1に係る暗号化兼暗号復号装置211と同じ構成要素を有した上で、さらに、従来の一般的なストリーム型暗号化方法に基づく暗号化と暗号復号を可能にした装置である。
【0140】
本実施形態に係る装置においては、該装値を、本発明に係る暗号化方法と従来の暗号化方法のうちどちらの方法で動作させるかを、ユーザが切り替えることができるようになっている。この装置は、例えば、次のような場面で、便利である。
【0141】
すなわち、従来の暗号化方法に基づいて生成された暗号文を格納した外部記録媒体225があって、該外部記録媒体225は既に記録容量の全てを使い切ってしまっているなどしてこれ以上のデータの格納は望めない事情があるとする。ユーザが、従来の暗号化方法に基づいて生成された暗号文のままでは解読される危険性があると思っても、より安全性の高い別の暗号化方法で暗号化し直すためには、一般的には、暗号化に関連した情報のためにデータの容量が増えてしまう。すると、暗号化し直した新たなデータは、元の外部記録媒体225に対しては容量オーバーとなり格納しきれなくなる。
【0142】
ところが本発明に係る暗号化方法によれば、暗号文のデータ量を元通りに保ったまま、安全性を向上させることができる。したがって、ユーザは、まず、従来の方法に基づく暗号文が格納された外部記録媒体225をデータ入出力I/F233に接続して、本実施形態に係る装置において従来方法を選択して暗号復号動作を行わせ、平文を得る。ユーザは、続いて、本実施形態に係る装置において本発明に係る方法を選択して暗号化動作を行わせる。暗号文のデータの容量が変化しないので、本発明に係る方法に基づく暗号文は、そのまま元の外部記録媒体225に格納される。そうでありながら、暗号が解読されにくくなるという意味での安全性は、向上している。
【0143】
この発明は、上記実施形態に限定されず、種々の変形及び応用が可能である。上述のハードウェア構成やブロック構成、フローチャートは説明のための例示であって、本発明の範囲を限定するものではない。
【0144】
例えば、暗号化兼暗号復号装置は、本発明に係る動作を行わせるために特化された専用装置である必要はない。疑似乱数の生成方法をハードウェア資源の限界に合わせて簡略化させる等の通常の工夫により、個人用の小規模な多用途電子計算機を用いて専用装置に準ずる動作をさせることもできる。こうした変形は全て本発明の範囲に含まれる。
【図面の簡単な説明】
【0145】
【図1】本発明の実施形態1に係る暗号化装置及び暗号復号装置の機能構成図である。
【図2】本発明の実施形態1に係る暗号化兼暗号復号装置の物理的な構成を示す図である。
【図3】本発明の実施形態1に係る暗号化兼暗号復号装置における、暗号化動作の前半を示す図である。
【図4】本発明の実施形態1に係る暗号化兼暗号復号装置における、暗号化動作の後半を示す図である。
【図5】本発明の実施形態1に係る暗号化兼暗号復号装置における、復号動作の前半を示す図である。
【図6】本発明の実施形態1に係る暗号化兼暗号復号装置における、復号動作の後半を示す図である。
【図7】初期テーブルに要素交換操作を施して変換テーブルを完成させる簡単な具体例を示す図である。
【図8】本発明の実施形態1における、暗号化のための変換テーブルを生成する処理の流れを示す図である。
【図9】本発明の実施形態1における、初期テーブルに要素交換操作を施して変換テーブルを完成させる具体例を示す図である。
【図10】本発明の実施形態1における、暗号化のための仮暗号文を生成する処理の流れを示す図である。
【図11】本発明の実施形態1における、仮暗号文から暗号文を生成する処理の流れを示す図である。
【図12】本発明の実施形態1における、復号のための逆変換テーブルを生成する処理の流れを示す図である。
【図13】本発明の実施形態1における、変換テーブルから逆変換テーブルを生成する具体例を示す図である。
【図14】本発明の実施形態1における、暗号文から仮暗号文を生成する処理の流れを示す図である。
【符号の説明】
【0146】
111・・・暗号化装置、113・・・暗号復号装置、115・・・乱数列生成部、121・・・暗号化用排他的論理和演算部、123・・・暗号化用換字部、131・・・復号用排他的論理和演算部、133・・・復号用換字部、211・・・暗号化兼暗号復号装置、221・・・キーボード、223・・・モニタ、225・・・外部記録媒体、231・・・ユーザ入出力I/F、233・・・データ入出力I/F、241・・・CPU、243・・・ROM、245・・・記憶部、247・・・システムバス、251・・・文区切り及び結合プログラム、253・・・乱数列生成プログラム、255・・・配列生成プログラム、257・・・初期テーブル、259・・・変換テーブル生成プログラム、261・・・逆変換テーブル生成プログラム、263・・・第1暗号化及び復号プログラム、265・・・第2暗号化及び復号プログラム、271・・・暗号鍵、273・・・区切られた平文、275・・・疑似乱数列のうち最初の方を除く部分、277・・・仮暗号文、279・・・疑似乱数列のうち最初の方の部分、281・・・配列、283・・・変換テーブル、284・・・逆変換テーブル、285・・・暗号文

【特許請求の範囲】
【請求項1】
0と1とがランダムに並ぶ疑似乱数列を暗号鍵から一意に生成する乱数列生成部と、
0からN(Nは、2の所定の単位ビット数乗−1、以降同じ。)までの整数と同じく0からNまでの整数との間のランダムな1対1の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する変換テーブル生成部と、
前記乱数列生成部が生成した前記疑似乱数列を用いて平文から仮暗号文を生成する第1の暗号化部と、
前記第1の暗号化部により生成された前記仮暗号文を前記所定の単位ビット数毎に区切り、区切られた各部を、前記変換テーブル生成部により生成された前記変換テーブルを用いて、該各部が表す整数に等しい変換テーブルインデックス番号を有する変換テーブル要素に置換することにより暗号文を生成する第2の暗号化部と、
を備える暗号化装置。
【請求項2】
前記第1の暗号化部は、
前記乱数列生成部が生成した前記疑似乱数列と平文とを排他的論理和演算することにより仮暗号文を生成する、
ことを特徴とする請求項1に記載の暗号化装置。
【請求項3】
前記所定の単位ビット数は、
8ビットである、
ことを特徴とする請求項1又は2に記載の暗号化装置。
【請求項4】
前記乱数列生成部が生成した前記疑似乱数列の一部を切り出すことにより、各配列要素が前記所定の単位ビット数から構成され0からNまでの整数のいずれかをランダムに表し、該各配列要素が0からNまでの配列インデックス番号で識別される配列を生成する配列生成部をさらに備え、
前記変換テーブル生成部は、
0からNまでの整数と同じく0からNまでの整数との間の1対1の対応関係を初期テーブルインデックス番号と該初期テーブルインデックス番号を有する初期テーブル要素とで表現した初期テーブルに対して、各初期テーブルインデックス番号を有する初期テーブル要素と、該初期テーブルインデックス番号に等しい前記配列インデックス番号を有する前記配列要素に等しい初期テーブルインデックス番号を有する初期テーブル要素と、を入れ替える操作を施すことにより、0からNまでの整数と同じく0からNまでの整数との間のランダムな1対1の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する、
ことを特徴とする請求項1乃至3の何れか1項に記載の暗号化装置。
【請求項5】
前記配列生成部は、
前記乱数列生成部が生成した疑似乱数列のうち、先頭から(2の前記所定の単位ビット数乗×前記所定の単位ビット数)個目までの疑似乱数を切り出すことにより前記配列を生成し、
前記第1の暗号化部は、
前記乱数列生成部が生成した疑似乱数列のうち、(2の前記所定の単位ビット数乗×前記所定の単位ビット数+1)個目以降の疑似乱数列を用いて、平文から仮暗号文を生成する、
ことを特徴とする請求項4に記載の暗号化装置。
【請求項6】
0と1とがランダムに並ぶ疑似乱数列を暗号鍵から一意に生成する乱数列生成部と、
暗号化に用いられた、0からN(Nは、2の所定の単位ビット数乗−1、以降同じ。)までの整数と同じく0からNまでの整数との間のランダムな1対1の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する変換テーブル生成部と、
前記変換テーブルに対して各前記変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とを入れ替える操作を施すことにより、逆変換テーブルインデックス番号と逆変換テーブル要素とを備えた逆変換テーブルを生成する逆変換テーブル生成部と、
暗号文を受け取って前記所定の単位ビット数毎に区切り、区切られた各部を、前記逆変換テーブル生成部により生成された前記逆変換テーブルを用いて、該各部が表す整数に等しい逆変換テーブルインデックス番号を有する逆変換テーブル要素に置換することにより仮暗号文を生成する第1の復号部と、
前記乱数列生成部が生成した疑似乱数列を用いて仮暗号文から平文を生成する第2の復号部と、
を備える暗号復号装置。
【請求項7】
0と1とがランダムに並ぶ疑似乱数列を暗号鍵から一意に生成する乱数列生成ステップと、
0からN(Nは、2の所定の単位ビット数乗−1、以降同じ。)までの整数と同じく0からNまでの整数との間のランダムな1対1の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する変換テーブル生成ステップと、
前記乱数列生成ステップにおいて生成された前記疑似乱数列を用いて平文から仮暗号文を生成する第1の暗号化ステップと、
前記第1の暗号化ステップにおいて生成された前記仮暗号文を前記所定の単位ビット数毎に区切り、区切られた各部を、前記変換テーブル生成ステップにおいて生成された前記変換テーブルを用いて、該各部が表す整数に等しい変換テーブルインデックス番号を有する変換テーブル要素に置換することにより暗号文を生成する第2の暗号化ステップと、
から構成される暗号化方法。
【請求項8】
0と1とがランダムに並ぶ疑似乱数列を暗号鍵から一意に生成する乱数列生成ステップと、
暗号化に用いられた、0からN(Nは、2の所定の単位ビット数乗−1、以降同じ。)までの整数と同じく0からNまでの整数との間のランダムな1対1の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する変換テーブル生成ステップと、
前記変換テーブルに対して各前記変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とを入れ替える操作を施すことにより、逆変換テーブルインデックス番号と逆変換テーブル要素とを備えた逆変換テーブルを生成する逆変換テーブル生成ステップと、
暗号文を受け取って前記所定の単位ビット数毎に区切り、区切られた各部を、前記逆変換テーブル生成ステップにおいて生成された前記逆変換テーブルを用いて、該各部が表す整数に等しい逆変換テーブルインデックス番号を有する逆変換テーブル要素に置換することにより仮暗号文を生成する第1の復号ステップと、
前記乱数列生成ステップにおいて生成された疑似乱数列を用いて仮暗号文から平文を生成する第2の復号ステップと、
から構成される暗号復号方法。
【請求項9】
コンピュータに、
0と1とがランダムに並ぶ疑似乱数列を暗号鍵から一意に生成する乱数列生成ステップと、
0からN(Nは、2の所定の単位ビット数乗−1、以降同じ。)までの整数と同じく0からNまでの整数との間のランダムな1対1の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する変換テーブル生成ステップと、
前記乱数列生成ステップにおいて生成された前記疑似乱数列を用いて平文から仮暗号文を生成する第1の暗号化ステップと、
前記第1の暗号化ステップにおいて生成された前記仮暗号文を前記所定の単位ビット数毎に区切り、区切られた各部を、前記変換テーブル生成ステップにおいて生成された前記変換テーブルを用いて、該各部が表す整数に等しい変換テーブルインデックス番号を有する変換テーブル要素に置換することにより暗号文を生成する第2の暗号化ステップと、
を実行させるコンピュータプログラム。
【請求項10】
コンピュータに、
0と1とがランダムに並ぶ疑似乱数列を暗号鍵から一意に生成する乱数列生成ステップと、
暗号化に用いられた、0からN(Nは、2の所定の単位ビット数乗−1、以降同じ。)までの整数と同じく0からNまでの整数との間のランダムな1対1の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する変換テーブル生成ステップと、
前記変換テーブルに対して各前記変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とを入れ替える操作を施すことにより、逆変換テーブルインデックス番号と逆変換テーブル要素とを備えた逆変換テーブルを生成する逆変換テーブル生成ステップと、
暗号文を受け取って前記所定の単位ビット数毎に区切り、区切られた各部を、前記逆変換テーブル生成ステップにおいて生成された前記逆変換テーブルを用いて、該各部が表す整数に等しい逆変換テーブルインデックス番号を有する逆変換テーブル要素に置換することにより仮暗号文を生成する第1の復号ステップと、
前記乱数列生成ステップにおいて生成された疑似乱数列を用いて仮暗号文から平文を生成する第2の復号ステップと、
を実行させるコンピュータプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate