(57)【要約】【課題】ストリーム型の暗号化において、暗号鍵の個数を増やす等の、秘密保存すべき暗号化関連データ量を増加させることなしに、暗号文が解読される危険性を減少させる。【解決手段】暗号化装置１１１は、暗号鍵を種に生成した乱数列の一部を用いて変換テーブルを作成し、平文にストリーム型の暗号化を施して得られた仮暗号文に対して、暗号化用換字部において前記変換テーブルを用いた換字を行って暗号文を生成する。暗号復号装置１１３は、前記変換テーブルから逆変換テーブルを作成し、暗号文に対して、復号用換字部において前記逆変換テーブルを用いた換字を行って仮暗号文を復元し、さらに、前記ストリーム型の暗号化に対応した復号により平文を生成する。【選択図】図１
2008185608.tif 000002
【特許請求の範囲】
【請求項１】
０と１とがランダムに並ぶ疑似乱数列を暗号鍵から一意に生成する乱数列生成部と、
０からＮ（Ｎは、２の所定の単位ビット数乗−１、以降同じ。）までの整数と同じく０からＮまでの整数との間のランダムな１対１の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する変換テーブル生成部と、
前記乱数列生成部が生成した前記疑似乱数列を用いて平文から仮暗号文を生成する第１の暗号化部と、
前記第１の暗号化部により生成された前記仮暗号文を前記所定の単位ビット数毎に区切り、区切られた各部を、前記変換テーブル生成部により生成された前記変換テーブルを用いて、該各部が表す整数に等しい変換テーブルインデックス番号を有する変換テーブル要素に置換することにより暗号文を生成する第２の暗号化部と、
を備える暗号化装置。
【請求項２】
前記第１の暗号化部は、
前記乱数列生成部が生成した前記疑似乱数列と平文とを排他的論理和演算することにより仮暗号文を生成する、
ことを特徴とする請求項１に記載の暗号化装置。
【請求項３】
前記所定の単位ビット数は、
８ビットである、
ことを特徴とする請求項１又は２に記載の暗号化装置。
【請求項４】
前記乱数列生成部が生成した前記疑似乱数列の一部を切り出すことにより、各配列要素が前記所定の単位ビット数から構成され０からＮまでの整数のいずれかをランダムに表し、該各配列要素が０からＮまでの配列インデックス番号で識別される配列を生成する配列生成部をさらに備え、
前記変換テーブル生成部は、
０からＮまでの整数と同じく０からＮまでの整数との間の１対１の対応関係を初期テーブルインデックス番号と該初期テーブルインデックス番号を有する初期テーブル要素とで表現した初期テーブルに対して、各初期テーブルインデックス番号を有する初期テーブル要素と、該初期テーブルインデックス番号に等しい前記配列インデックス番号を有する前記配列要素に等しい初期テーブルインデックス番号を有する初期テーブル要素と、を入れ替える操作を施すことにより、０からＮまでの整数と同じく０からＮまでの整数との間のランダムな１対１の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する、
ことを特徴とする請求項１乃至３の何れか１項に記載の暗号化装置。
【請求項５】
前記配列生成部は、
前記乱数列生成部が生成した疑似乱数列のうち、先頭から（２の前記所定の単位ビット数乗×前記所定の単位ビット数）個目までの疑似乱数を切り出すことにより前記配列を生成し、
前記第１の暗号化部は、
前記乱数列生成部が生成した疑似乱数列のうち、（２の前記所定の単位ビット数乗×前記所定の単位ビット数＋１）個目以降の疑似乱数列を用いて、平文から仮暗号文を生成する、
ことを特徴とする請求項４に記載の暗号化装置。
【請求項６】
０と１とがランダムに並ぶ疑似乱数列を暗号鍵から一意に生成する乱数列生成部と、
暗号化に用いられた、０からＮ（Ｎは、２の所定の単位ビット数乗−１、以降同じ。）までの整数と同じく０からＮまでの整数との間のランダムな１対１の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する変換テーブル生成部と、
前記変換テーブルに対して各前記変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とを入れ替える操作を施すことにより、逆変換テーブルインデックス番号と逆変換テーブル要素とを備えた逆変換テーブルを生成する逆変換テーブル生成部と、
暗号文を受け取って前記所定の単位ビット数毎に区切り、区切られた各部を、前記逆変換テーブル生成部により生成された前記逆変換テーブルを用いて、該各部が表す整数に等しい逆変換テーブルインデックス番号を有する逆変換テーブル要素に置換することにより仮暗号文を生成する第１の復号部と、
前記乱数列生成部が生成した疑似乱数列を用いて仮暗号文から平文を生成する第２の復号部と、
を備える暗号復号装置。
【請求項７】
０と１とがランダムに並ぶ疑似乱数列を暗号鍵から一意に生成する乱数列生成ステップと、
０からＮ（Ｎは、２の所定の単位ビット数乗−１、以降同じ。）までの整数と同じく０からＮまでの整数との間のランダムな１対１の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する変換テーブル生成ステップと、
前記乱数列生成ステップにおいて生成された前記疑似乱数列を用いて平文から仮暗号文を生成する第１の暗号化ステップと、
前記第１の暗号化ステップにおいて生成された前記仮暗号文を前記所定の単位ビット数毎に区切り、区切られた各部を、前記変換テーブル生成ステップにおいて生成された前記変換テーブルを用いて、該各部が表す整数に等しい変換テーブルインデックス番号を有する変換テーブル要素に置換することにより暗号文を生成する第２の暗号化ステップと、
から構成される暗号化方法。
【請求項８】
０と１とがランダムに並ぶ疑似乱数列を暗号鍵から一意に生成する乱数列生成ステップと、
暗号化に用いられた、０からＮ（Ｎは、２の所定の単位ビット数乗−１、以降同じ。）までの整数と同じく０からＮまでの整数との間のランダムな１対１の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する変換テーブル生成ステップと、
前記変換テーブルに対して各前記変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とを入れ替える操作を施すことにより、逆変換テーブルインデックス番号と逆変換テーブル要素とを備えた逆変換テーブルを生成する逆変換テーブル生成ステップと、
暗号文を受け取って前記所定の単位ビット数毎に区切り、区切られた各部を、前記逆変換テーブル生成ステップにおいて生成された前記逆変換テーブルを用いて、該各部が表す整数に等しい逆変換テーブルインデックス番号を有する逆変換テーブル要素に置換することにより仮暗号文を生成する第１の復号ステップと、
前記乱数列生成ステップにおいて生成された疑似乱数列を用いて仮暗号文から平文を生成する第２の復号ステップと、
から構成される暗号復号方法。
【請求項９】
コンピュータに、
０と１とがランダムに並ぶ疑似乱数列を暗号鍵から一意に生成する乱数列生成ステップと、
０からＮ（Ｎは、２の所定の単位ビット数乗−１、以降同じ。）までの整数と同じく０からＮまでの整数との間のランダムな１対１の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する変換テーブル生成ステップと、
前記乱数列生成ステップにおいて生成された前記疑似乱数列を用いて平文から仮暗号文を生成する第１の暗号化ステップと、
前記第１の暗号化ステップにおいて生成された前記仮暗号文を前記所定の単位ビット数毎に区切り、区切られた各部を、前記変換テーブル生成ステップにおいて生成された前記変換テーブルを用いて、該各部が表す整数に等しい変換テーブルインデックス番号を有する変換テーブル要素に置換することにより暗号文を生成する第２の暗号化ステップと、
を実行させるコンピュータプログラム。
【請求項１０】
コンピュータに、
０と１とがランダムに並ぶ疑似乱数列を暗号鍵から一意に生成する乱数列生成ステップと、
暗号化に用いられた、０からＮ（Ｎは、２の所定の単位ビット数乗−１、以降同じ。）までの整数と同じく０からＮまでの整数との間のランダムな１対１の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する変換テーブル生成ステップと、
前記変換テーブルに対して各前記変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とを入れ替える操作を施すことにより、逆変換テーブルインデックス番号と逆変換テーブル要素とを備えた逆変換テーブルを生成する逆変換テーブル生成ステップと、
暗号文を受け取って前記所定の単位ビット数毎に区切り、区切られた各部を、前記逆変換テーブル生成ステップにおいて生成された前記逆変換テーブルを用いて、該各部が表す整数に等しい逆変換テーブルインデックス番号を有する逆変換テーブル要素に置換することにより仮暗号文を生成する第１の復号ステップと、
前記乱数列生成ステップにおいて生成された疑似乱数列を用いて仮暗号文から平文を生成する第２の復号ステップと、
を実行させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストリーム型の暗号化及びその復号を安全に行うことを可能とする暗号化装置、暗号復号装置、暗号化方法、暗号復号方法、及び、プログラムに関する。
【背景技術】
【０００２】
ある平文の意味を普段は隠しておきたい場合、該平文をそのままにしておくよりも、該平文にある所定の処理を施して暗号文として保存しておく方が安全である。その後、該平文が必要になったときには、該暗号文に対して、基本的には該所定の処理とは逆の処理を施せば、元の平文を復号することができる（例えば、特許文献１参照。）。
【特許文献１】特開平９−１１４３７３号公報
【０００３】
暗号化方法には様々なものがあるが、疑似乱数列を利用した暗号化方法のひとつとして、ストリーム型の暗号化方法が知られている。
【０００４】
かかるストリーム型の暗号化方法のうちでは、暗号鍵を種にして生成した疑似乱数列と平文との排他的論理和を暗号文とする方法が主流である。疑似乱数列は秘密鍵に依存したデータ列であるため、暗号鍵が分からなければ、暗号文から平文を復号することはできない。よって、原則的には、暗号鍵を秘密にすれば、安全性を確保することができる。
【０００５】
かかる暗号化方法においては、１個の暗号鍵を用いて２個の平文を暗号化して２個の暗号文を生成した場合、かかる２個の暗号文同士の排他的論理和は、元の２個の平文同士の排他的論理和と等しくなる。つまり、暗号文を作成した者が暗号鍵を秘密に保ってあっても、他人が２個の暗号文を知れば、該他人は２個の平文同士の排他的論理和を導き出すことができる。
【０００６】
確かに、論理的には、２個の平文同士の排他的論理和から元の２個の平文を導き出すことは不可能である。しかし、平文の内容にある程度の見当がつけば、経験則に基づき、かかる排他的論理和から元の２個の平文を両方とも復元する技法は種々知られている。例えば、元の平文が英文を意味するものであることが知られてしまった場合、英文に最も多く現れるアルファベットは「e」であるという経験則を糸口にして、最終的には平文全体が解読されてしまうことがある。
【０００７】
このように、１個の暗号鍵を用いて複数の平文を暗号化すると、十分な安全性を確保することができない。そこで、ストリーム型の暗号化方法においては、暗号化処理を行うたびに（例えば１個の平文毎に）異なる暗号鍵を用いるのが一般的である。
【０００８】
このようにすれば、確かに、暗号文の排他的論理和から平文の内容を解読されてしまう危険性は低下する。しかしそのかわり、暗号鍵が１個では済まなくなるので、暗号鍵を秘密に保つためのコストがかさむことになる。ここでコストとは例えば、暗号鍵を保存するために何らかの媒体を使用するのであれば、より多くの記憶容量が必要となることや、暗号鍵自体を通信回線や無線等により遠方に届ける場合に、暗号鍵が途中で盗まれないようにするためのいっそうの配慮が必要となることを意味する。
【０００９】
このように、ストリーム型の暗号化方法においては、従来は、暗号鍵に関するコストを低く維持することと、安全性の確保と、が両立しないという問題点があった。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
本発明は、上記実情に鑑みてなされたもので、従来の一般的なストリーム型暗号化方法に、変換テーブルを用いた換字変換を付加することにより、安全性の確保と暗号鍵に関するコストの削減とを両立するような、暗号化装置、暗号復号装置、暗号化方法、暗号復号方法、及び、プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記目的を達成するために、本発明の第１の観点に係る暗号化装置は、
０と１とがランダムに並ぶ疑似乱数列を暗号鍵から一意に生成する乱数列生成部と、
０からＮ（Ｎは、２の所定の単位ビット数乗−１、以降同じ。）までの整数と同じく０からＮまでの整数との間のランダムな１対１の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する変換テーブル生成部と、
前記乱数列生成部が生成した前記疑似乱数列を用いて平文から仮暗号文を生成する第１の暗号化部と、
前記第１の暗号化部により生成された前記仮暗号文を前記所定の単位ビット数毎に区切り、区切られた各部を、前記変換テーブル生成部により生成された前記変換テーブルを用いて、該各部が表す整数に等しい変換テーブルインデックス番号を有する変換テーブル要素に置換することにより暗号文を生成する第２の暗号化部と、
を備える。
【００１２】
従来の一般的なストリーム型暗号化方法により仮暗号文を生成した後に、該仮暗号文を変換テーブルを用いて換字変換する。このため、１個の暗号鍵を用いて２個の平文を暗号化して２個の暗号文を得た場合でも、暗号文同士の排他的論理和は、平文同士の排他的論理和とは一致しない。よって、暗号鍵を増やすことなく、つまり暗号鍵に関するコストを低く維持しつつ、安全性を確保することができる。
【００１３】
前記第１の暗号化部は、前記乱数列生成部が生成した前記疑似乱数列と平文とを排他的論理和演算することにより仮暗号文を生成する、ことが望ましい。
【００１４】
このようにすれば、演算効率の高い暗号化を行うことができる。
【００１５】
前記所定の単位ビット数は、例えば、８ビットである。
【００１６】
前記所定の単位ビット数を８ビット程度にしておけば、前記変換テーブルは28=256個もの数値の相互のランダムな対応関係を表すことになる。かかる大きな変換テーブルにより仮暗号文を暗号文に変換すれば、通常の用途の場合、変換テーブルの規模に起因する安全性は十分に確保されると期待される。また、特に、平文が、ひらがな、かたかな、アルファベット、数字等から構成される場合には、データの基本単位が１バイトすなわち８ビットであるから、８ビットずつ暗号化すると、半端なビットが生じず、効率がよい。
【００１７】
前記乱数列生成部が生成した前記疑似乱数列の一部を切り出すことにより、各配列要素が前記所定の単位ビット数から構成され０からＮまでの整数のいずれかをランダムに表し、該各配列要素が０からＮまでの配列インデックス番号で識別される配列を生成する配列生成部をさらに備え、前記変換テーブル生成部は、０からＮまでの整数と同じく０からＮまでの整数との間の１対１の対応関係を初期テーブルインデックス番号と該初期テーブルインデックス番号を有する初期テーブル要素とで表現した初期テーブルに対して、各初期テーブルインデックス番号を有する初期テーブル要素と、該初期テーブルインデックス番号に等しい前記配列インデックス番号を有する前記配列要素に等しい初期テーブルインデックス番号を有する初期テーブル要素と、を入れ替える操作を施すことにより、０からＮまでの整数と同じく０からＮまでの整数との間のランダムな１対１の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する、ことが望ましい。
【００１８】
暗号鍵に関するコストが削減できても、暗号化装置と暗号複合化装置との間で、固定の変換テーブルをあらかじめ取り決めておいたり、暗号化装置がいかなる変換テーブルを用いたかについての情報を暗号復号装置に伝達するようにしておいたりすると、今度は変換テーブルの内容の漏洩が懸念される。その点、暗号鍵を種に生成される疑似乱数列の一部を変換テーブルの生成に用いれば、暗号鍵さえ秘密に保っておけば変換テーブルの内容が漏洩することはないし、暗号復号装置に暗号鍵を入力すれば暗号装置において用いられた変換テーブルを復元することができるため該変換テーブルを伝達することも不要となる。
【００１９】
前記配列生成部は、前記乱数列生成部が生成した疑似乱数列のうち、先頭から（２の前記所定の単位ビット数乗×前記所定の単位ビット数）個目までの疑似乱数を切り出すことにより前記配列を生成し、前記第１の暗号化部は、前記乱数列生成部が生成した疑似乱数列のうち、（２の前記所定の単位ビット数乗×前記所定の単位ビット数＋１）個目以降の疑似乱数列を用いて、平文から仮暗号文を生成する、ことが望ましい。
【００２０】
生成された疑似乱数列のうち、変換テーブルの生成に用いられる部分と、仮暗号文の生成に用いられる部分とを完全に分離しておけば、変換テーブルと仮暗号文との間に相関が生じないため、暗号文はいっそう解読されにくくなり、安全性が向上する。
【００２１】
上記目的を達成するために、本発明の第２の観点に係る暗号復号装置は、
０と１とがランダムに並ぶ疑似乱数列を暗号鍵から一意に生成する乱数列生成部と、
暗号化に用いられた、０からＮ（Ｎは、２の所定の単位ビット数乗−１、以降同じ。）までの整数と同じく０からＮまでの整数との間のランダムな１対１の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する変換テーブル生成部と、
前記変換テーブルに対して各前記変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とを入れ替える操作を施すことにより、逆変換テーブルインデックス番号と逆変換テーブル要素とを備えた逆変換テーブルを生成する逆変換テーブル生成部と、
暗号文を受け取って前記所定の単位ビット数毎に区切り、区切られた各部を、前記逆変換テーブル生成部により生成された前記逆変換テーブルを用いて、該各部が表す整数に等しい逆変換テーブルインデックス番号を有する逆変換テーブル要素に置換することにより仮暗号文を生成する第１の復号部と、
前記乱数列生成部が生成した疑似乱数列を用いて仮暗号文から平文を生成する第２の復号部と、
を備える。
【００２２】
上記目的を達成するために、本発明の第３の観点に係る暗号化方法は、
０と１とがランダムに並ぶ疑似乱数列を暗号鍵から一意に生成する乱数列生成ステップと、
０からＮ（Ｎは、２の所定の単位ビット数乗−１、以降同じ。）までの整数と同じく０からＮまでの整数との間のランダムな１対１の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する変換テーブル生成ステップと、
前記乱数列生成ステップにおいて生成された前記疑似乱数列を用いて平文から仮暗号文を生成する第１の暗号化ステップと、
前記第１の暗号化ステップにおいて生成された前記仮暗号文を前記所定の単位ビット数毎に区切り、区切られた各部を、前記変換テーブル生成ステップにおいて生成された前記変換テーブルを用いて、該各部が表す整数に等しい変換テーブルインデックス番号を有する変換テーブル要素に置換することにより暗号文を生成する第２の暗号化ステップと、
から構成される。
【００２３】
上記目的を達成するために、本発明の第４の観点に係る暗号復号方法は、
０と１とがランダムに並ぶ疑似乱数列を暗号鍵から一意に生成する乱数列生成ステップと、
暗号化に用いられた、０からＮ（Ｎは、２の所定の単位ビット数乗−１、以降同じ。）までの整数と同じく０からＮまでの整数との間のランダムな１対１の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する変換テーブル生成ステップと、
前記変換テーブルに対して各前記変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とを入れ替える操作を施すことにより、逆変換テーブルインデックス番号と逆変換テーブル要素とを備えた逆変換テーブルを生成する逆変換テーブル生成ステップと、
暗号文を受け取って前記所定の単位ビット数毎に区切り、区切られた各部を、前記逆変換テーブル生成ステップにおいて生成された前記逆変換テーブルを用いて、該各部が表す整数に等しい逆変換テーブルインデックス番号を有する逆変換テーブル要素に置換することにより仮暗号文を生成する第１の復号ステップと、
前記乱数列生成ステップにおいて生成された疑似乱数列を用いて仮暗号文から平文を生成する第２の復号ステップと、
から構成される。
【００２４】
上記目的を達成するために、本発明の第５の観点に係るコンピュータプログラムは、
コンピュータに、
０と１とがランダムに並ぶ疑似乱数列を暗号鍵から一意に生成する乱数列生成ステップと、
０からＮ（Ｎは、２の所定の単位ビット数乗−１、以降同じ。）までの整数と同じく０からＮまでの整数との間のランダムな１対１の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する変換テーブル生成ステップと、
前記乱数列生成ステップにおいて生成された前記疑似乱数列を用いて平文から仮暗号文を生成する第１の暗号化ステップと、
前記第１の暗号化ステップにおいて生成された前記仮暗号文を前記所定の単位ビット数毎に区切り、区切られた各部を、前記変換テーブル生成ステップにおいて生成された前記変換テーブルを用いて、該各部が表す整数に等しい変換テーブルインデックス番号を有する変換テーブル要素に置換することにより暗号文を生成する第２の暗号化ステップと、
を実行させる。
【００２５】
上記目的を達成するために、本発明の第６の観点に係るコンピュータプログラムは、
コンピュータに、
０と１とがランダムに並ぶ疑似乱数列を暗号鍵から一意に生成する乱数列生成ステップと、
暗号化に用いられた、０からＮ（Ｎは、２の所定の単位ビット数乗−１、以降同じ。）までの整数と同じく０からＮまでの整数との間のランダムな１対１の対応関係を変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とで表現した変換テーブルを生成する変換テーブル生成ステップと、
前記変換テーブルに対して各前記変換テーブルインデックス番号と該変換テーブルインデックス番号を有する変換テーブル要素とを入れ替える操作を施すことにより、逆変換テーブルインデックス番号と逆変換テーブル要素とを備えた逆変換テーブルを生成する逆変換テーブル生成ステップと、
暗号文を受け取って前記所定の単位ビット数毎に区切り、区切られた各部を、前記逆変換テーブル生成ステップにおいて生成された前記逆変換テーブルを用いて、該各部が表す整数に等しい逆変換テーブルインデックス番号を有する逆変換テーブル要素に置換することにより仮暗号文を生成する第１の復号ステップと、
前記乱数列生成ステップにおいて生成された疑似乱数列を用いて仮暗号文から平文を生成する第２の復号ステップと、
を実行させる。
【発明の効果】
【００２６】
本発明によれば、ストリーム型暗号化方法において、安全性の確保と暗号鍵に関するコストの削減とを両立することができる。
【発明を実施するための最良の形態】
【００２７】
（簡単な具体例）
まず、本発明が解決しようとする課題、かかる課題を解決するための手段、及び、本発明の効果、の理解を容易にするために、ごく簡単な具体例について、実際にビット演算しつつ説明する。本発明の実施の形態の詳細については、図１に示す機能構成図や、図２〜図６に示す物理的構成図等を参照して、後に説明する。
【００２８】
所定の単位ビット数uを、u=2とする。つまり、平文、乱数列、仮暗号文、及び、暗号文、は、2ビットを1単位として区切って扱われる。
【００２９】
Ａなる意味を有する、長さが3単位すなわち6ビットの平文PA=”10 11 01”と、Ｂなる意味を有する、長さが同じく3単位すなわち6ビットの平文PB=”11 11 00”と、の2個の平文を、1個の暗号鍵を種に生成された疑似乱数列により、続けて暗号化する場面を考える。ただし、ビット列は" "で囲んで表す。
【００３０】
区切り識別用変数を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"、
のように表すことができる。
【００３１】
疑似乱数列として、暗号鍵を種にした生成の結果、"10 00 01 00 10 01 11 ・・・"が得られたとする。なお、得られた乱数列の長さは、平文よりも十分に長い。
【００３２】
乱数識別用変数を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"、
のように表すことができる。
【００３３】
従来の一般的なストリーム型の暗号化によれば、平文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は排他的論理和演算を表す。
【００３４】
ここで、暗号文のコード同士の排他的論理和をとると、
COA xor COB
="00 11 00" xor "01 11 01"
="01 00 01"、
となる。
【００３５】
一方、平文のコード同士の排他的論理和をとると、
PA xor PB
="10 11 01" xor ”11 11 00”
="01 00 01"
となるから、COA xor COB= PA xor PBが成立する。つまり、暗号鍵が分からなくても、2個の暗号文に基づいて2個の平文の排他的論理和を求めることができるので、安全性が不十分である。これが、従来の一般的なストリーム型の暗号化方法の問題点である。
【００３６】
本発明に係る暗号化においては、まず、2u=22=4個の要素から成るテーブル
T(0)、T(1)、T(2)、T(3)
を用意する。各要素の値は、例えば、該要素のインデックス番号と同じ値に初期化しておく。すなわち、
T(0)=0、T(1)=1、T(2)=2、T(3)=3
とし、これを、図７（ａ）に示すように、初期テーブルとする。
【００３７】
そして、乱数列のうち、先頭の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、
を、初期テーブルから変換テーブルを作成するための配列として用いる。
【００３８】
この配列を先頭から順に、配列インデックス番号に等しいテーブルインデックス番号を有するテーブル要素と、配列要素に等しいテーブルインデックス番号を有するテーブル要素との交換操作を意味するものと解釈して、初期テーブルを徐々に変化させていく。
【００３９】
すなわち、R(n=0)=2だから、まず、T(n)とT(R(n))の値、すなわち、T(0)とT(2)の値を交換する（図７（ｂ））。続いて、R(n=1)=0だから、T(1)とT(0)の値を交換する（図７（ｃ））。続いて、R(n=2)=1だから、T(2)とT(1)の値を交換する（図７（ｄ））。最後に、R(n=3)=0だから、T(3)とT(0)の値を交換して、変換テーブルを完成させる（図７（ｅ））。すなわち、変換テーブルは、
T(0)=3、T(1)=0、T(2)=2、T(3)=1、
である。
【００４０】
本発明に係る暗号化においては、まず準備段階として、上述の変換テーブルを参照せずに、仮暗号文を作成する。安全性を高めるため、変換テーブルと仮暗号文との間に相関関係が生じないよう、乱数列のうち、変換テーブルの作成のために使用された先頭部分は、もう使用しない。つまり、仮暗号文の作成にあたっては、(2u×u+1)ビット目以降=(22×2+1)ビット目以降=9ビット目以降、すなわちR(n=4)以降の部分を使用する。
【００４１】
平文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"
となる。
【００４２】
平文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"
となる。
【００４３】
なお、ここでCtmpA xor CtmpBとPA xor PBを計算すると、いずれも"010001"という等しい値になり、従来技術の問題点が解消していない。これは、暗号化のために参照する乱数列の位置を4単位ビット数だけずらしただけだから、当然の帰結である。
【００４４】
本発明に係る暗号化においては、この後、変換テーブルを用いて、平文PAの仮暗号文CtmpAから平文PAの暗号文CAを、平文PBの仮暗号文CtmpAから平文PBの暗号文CBを、それぞれ求めることに意義がある。
【００４５】
上述のとおり、仮暗号文CtmpAの各区切りは、
CtmpA(m=0)="00"=0、CtmpA(m=1)="10"=2、CtmpA(m=2)="10"=2、
である。この仮暗号文の区切られた各部を、各部が表す整数に等しい変換テーブルインデックス番号を有する変換テーブル要素に置換することにより、平文PAの暗号文CAを求める。
【００４６】
まず、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"である。
【００４７】
同様に、上述のとおり、仮暗号文CtmpBの各区切りは、
CtmpB(m=0)="01"=1、CtmpB(m=1)="10"=2、CtmpB(m=2)="11"=3、
である。
【００４８】
まず、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"である。
【００４９】
このように変換テーブルを用いた処理を追加したので、従来技術の問題点が解決される。つまり、暗号文のコード同士の排他的論理和をとると、
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と相違する。よって、従来の方法に比べて暗号が解読されにくくなり、安全性が高まったといえる。
【００５０】
暗号文を復号する場合は、暗号化に用いたものと同じ暗号鍵を種にすることにより同じ乱数列を生成して、生成された乱数列に基づいて暗号化に用いたものと同じ変換テーブルを生成し、生成された変換テーブルのインデックス番号と要素とを入れ替えることにより逆変換テーブルを生成し、生成された逆変換テーブルにより暗号文から仮暗号文を生成し、暗号化の際に平文と乱数列とについて行った排他的論理和演算の逆算を仮暗号文に施すことにより、平文が復号される。
【００５１】
なお、上に例示したとおり、本発明に係る方法に基づく暗号文の長さは、従来の一般的なストリーム型暗号化方法に基づく暗号文の長さと同じく、６ビットである。これは本発明の特徴のひとつである。すなわち、本発明によれば、従来の一般的な暗号化方法に基づく暗号文よりデータの容量を増加させることなしに、安全性を向上させることができる。
【００５２】
（実施形態１）
図１は、本発明の実施形態１に係る暗号化装置１１１及び暗号復号装置１１３の機能構成図である。なお、後述のように、本実施形態においては、実際には、暗号化装置１１１の機能と暗号復号装置１１３の機能とは統合されて、暗号化兼暗号復号装置として機能する。
【００５３】
暗号化装置１１１は、乱数列生成部１１５と、暗号化用排他的論理和演算部１２１と、暗号化用換字部１２３と、を備える。一方、暗号復号装置１１３は、乱数列生成部１１５と、復号用排他的論理和演算部１３１と、復号用換字部１３３と、を備える。暗号化装置１１１の中の乱数列生成部１１５と、暗号復号装置１１３の中の乱数列生成部１１５とは、同じ機能を有する。
【００５４】
乱数列生成部１１５は、暗号鍵Ｋが入力されると、暗号鍵Ｋに一意な、十分に長い疑似乱数列Ｒを生成する。ここで、「一意」とは、乱数列生成部１１５が、同一のＫに対しては同一の数列Ｒを生成するという意味である。また、「十分に長い」とは、暗号化したい平文の長さに比べて十分に長いという意味であって、暗号文を解読されにくくする、すなわち、安全性を確保するために、暗号化にあたって同一乱数列のいわゆる使い回しを避けるために必要なことである。さらに、「疑似乱数列」の「疑似」とは、乱数生成部１１５は、所定の規則に従って、暗号鍵Ｋを種に乱数列を生成するのであって、厳密な乱数を生成しているわけではないことを意味する。このことは、上述の一意性を確保する上でも必要である。
【００５５】
暗号化装置１１１と暗号復号装置１１３とが同一の機能を有する乱数列生成部１１５を採用することは、上述のかかる一意性ともあいまって、安全性及びコスト面で問題のある、暗号化側から暗号復号化側への変換テーブルの内容の伝達を、不要にする。復号化側では、暗号化側と同じ暗号鍵Ｋを暗号復号装置１１３に入力しさえすれば、同一の変換テーブルを生成することができるからである。そして、上述の簡単な具体例のとおり、暗号文から仮暗号文を復元するために必要な逆変換テーブルが、変換テーブルから生成される。
【００５６】
なお、このように疑似乱数列Ｒは暗号鍵Ｋの関数であるが、乱数列生成部１１５が行う疑似乱数列生成方法は、疑似乱数列Ｒから暗号鍵Ｋを逆算することが事実上不可能であるような方法であれば、任意の既知の方法であってよい。
【００５７】
乱数列生成部１１５により生成された疑似乱数列Ｒの一部は、暗号化用排他的論理和演算部１２１に引き渡され、平文Ｐから仮暗号文Ｃｔｍｐを生成するために用いられる。他の部分は、暗号化用換字部１２３に引き渡され、仮暗号文Ｃｔｍｐから暗号文Ｃを生成するために用いられる。なお、疑似乱数列のうち、暗号化用排他的論理和演算部１２１に引き渡される部分と、暗号化用換字部１２３に引き渡される部分とは、重複しない方が、安全上望ましいことは、上述の簡単な具体例で述べたとおりである。
【００５８】
暗号化用排他的論理和演算部１２１には、平文Ｐが入力されるとともに、疑似乱数列Ｒの一部が引き渡される。これらについて暗号化用排他的論理和演算部１２１は、排他的論理和演算を行うことにより、仮暗号文Ｃｔｍｐを生成して、暗号化用換字部１２３に引き渡す。
【００５９】
暗号化用換字部１２３は、乱数列生成部１１５から疑似乱数列Ｒの一部を受け取り、それに基づいて変換テーブルを作成する。暗号化用換字部１２３は、暗号化用排他的論理和演算部１２１から仮暗号文Ｃｔｍｐを受け取り、作成した変換テーブルを用いて、仮暗号文Ｃｔｍｐから暗号文Ｃを生成する。
【００６０】
この暗号文Ｃが、暗号化装置１１１の出力である。暗号文Ｃは、暗号復号装置１１３に入力される。
【００６１】
暗号文Ｃは、暗号復号装置１１３の中の、復号用換字部１３３に入力される。復号用換字部１３３は、復号装置１１３に入力された暗号鍵Ｋを種にして生成された疑似乱数列Ｒの一部を受け取り、それに基づいて暗号化用換字部１２３と同様に変換テーブルを作成した後、テーブルインデックス番号の値と要素の値とを入れ替えることにより逆変換テーブルを作成する。復号用換字部１３３はこの逆変換テーブルを用いて、入力された暗号文Ｃから仮暗号文Ｃｔｍｐを復元し、復号用排他的論理和演算部１３１に引き渡す。
【００６２】
復号用排他的論理和演算部１３１は、疑似乱数列の一部と仮暗号文Ｃｔｍｐとを受け取り、暗号化用排他的論理和演算部１２１が行う演算とちょうど逆向きの演算を行うことにより、平文Ｐを復号する。この平文Ｐが、暗号復号装置１１３の出力である。
【００６３】
暗号化装置１１１と暗号復号装置１１３とを比較すると、以上述べてきたとおり、乱数生成部１１５は全く同じ機能を有するし、暗号化用排他的論理和演算部１２１と復号用排他的論理和演算部１３１、及び、暗号化用換字部１２３と復号用換字部１３３、は、それぞれ、酷似した機能を有する。よって、暗号化用排他的論理和演算部１２１と復号用排他的論理和演算部１３１との機能を、暗号化時と暗号復号時とで切り替えることができる排他的論理和演算部と、暗号化用換字部１２３と復号用換字部１３３との機能を、暗号化時と復号化時とで切り替えることができる換字部と、を用意すれば、排他的論理和演算部と、換字部と、乱数列生成部１１５と、により暗号化兼暗号復号装置を構成することもできる。本実施形態に係る装置は、実際には、このような暗号化兼暗号復号装置であるとする。
【００６４】
図２〜図６は、かかる暗号化兼暗号復号装置２１１の物理的構成と動作の様子を、模式的に示したものである。
【００６５】
図２に示すように、本実施形態に係る暗号化兼暗号復号装置２１１は、ＣＰＵ２４１と、ＲＯＭ（Read Only Memory）２４３と、記憶部２４５と、ユーザ入出力Ｉ／Ｆ（インターフェース）２３１と、データ入出力Ｉ／Ｆ２３３と、これらを相互に接続するシステムバス２４７と、を備える。
【００６６】
ユーザＩ／Ｆ２３１には、キーボード２２１と、モニタ２２３と、が接続される。ユーザは、キーボードを操作することにより、暗号化兼暗号復号装置２１１に平文や暗号鍵を伝達したり、暗号化や暗号復号の動作を行わせたりする。モニタ２２３は、ユーザのために、暗号文を復号した結果得られた平文を表示させたり、暗号化兼暗号復号装置２１１の動作状態を表示させたりするために用いられる。
【００６７】
データ入出力Ｉ／Ｆ２３３には、リムーバブルハードディスク、フラッシュメモリカード、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＷ、ＭＯディスク、フレキシブルディスク等の、取り外し可能な外部記録媒体２２５が接続される。外部記録媒体２２５はユーザの所望の処理、典型的には暗号文の格納、が完了した後、ユーザが取り外してユーザ自身が保存したり、同種の暗号化兼暗号復号装置２１１を有する別のユーザに手渡したりする。あるいは、暗号化側のユーザは、外部記録媒体２２５の内容を、外部記録媒体２２５の内容の読み取りが可能でかつ通信機能を備えた装置によって、電気通信回線や無線により遠隔地の暗号複合化側のユーザに伝達したりする。取り外し可能であることにより、多くの暗号文を複数の外部記録媒体２２５に分けて格納することもできる。
【００６８】
ＣＰＵ２４１は、ＲＯＭ２４３に格納された後述の各種の動作プログラムを実行することにより、暗号化動作及び暗号復号動作を制御する。ＣＰＵ２４１は、システムバス２４７によって、ＲＯＭ２４３、記憶部２４５、ユーザ入出力Ｉ／Ｆ２３１、データ入出力Ｉ／Ｆ２３３にかかる動作の実行に必要な命令を送信したり、又は、これら各部から必要なデータや応答信号を受信したりする。ＣＰＵ２４１は、上述の通りＲＯＭ２４３から動作プログラムを読み込む他、記憶部２４５との間でデータの授受を行う。ＣＰＵ２４１は、高速アクセスが可能な各種レジスタ（図示せず。）を備え、記憶部２４５に格納されているデータは、例えば、いったんこのレジスタに読み込まれ、ＣＰＵ２４１により上述の動作プログラムに従った演算を施されて書き換えられてから、記憶部２４５に戻される、というように扱われる。
【００６９】
ＲＯＭ２４３には、文区切り及び結合プログラム２５１、乱数列生成プログラム２５３、配列生成プログラム２５５、初期テーブル２５７、変換テーブル生成プログラム２５９、逆変換テーブル生成プログラム２６１、第１暗号化及び復号プログラム２６３、及び、第２暗号化及び復号プログラム２６５、という動作プログラムが格納されている。これらの動作プログラムの詳細については、後に図３〜図６を参照して説明する。ＲＯＭ２４３には他にも、オペレーティングシステムプログラム（図示せず。）等、暗号化兼暗号復号装置２１１全体の動作を制御するために必要な各種のプログラムが格納されている。
【００７０】
記憶部２４５は、ＲＡＭ（Random Access Memory）及びハードディスク（いずれも図示せず。）を備え、暗号鍵２７１、区切られた平文２７３、疑似乱数列のうち第(2u×u)ビット以降の部分２７５、仮暗号文２７７、疑似乱数列のうち第0ビットから第(2u×u -1)ビットまでの部分２７９、配列２８１、変換テーブル２８３、逆変換テーブル２８４、及び、暗号文２８５、といったデータを格納する。これらのデータが生成されたり利用されたりする様子の詳細については、後に図３〜図６を参照して説明する。記憶部２４５は他にも、様々な一時的データ（図示せず。）を格納する。
【００７１】
以下では、図３〜図６を参照しつつ、本実施形態に係る暗号化兼暗号復号装置２１１の暗号化動作及び暗号復号動作を説明する。図３〜図６においては、処理の流れを模式的に示して理解を容易にするために、矢印が多用されている。矢印には、一点鎖線、点線、及び、実線、の３種類ある。一点鎖線の矢印は、暗号化の際の変換テーブル２８３を生成する動作及び暗号復号の際の逆変換テーブル２８４を生成する動作の説明のためのものである。点線の矢印は、変換テーブル２８３又は逆変換テーブル２８４が生成された後の、平文が暗号化されて暗号文が生成される動作又は暗号文が復号されて平文が生成される動作の説明のためのものである。実線の矢印は、これらのいずれにも関係する動作の説明のためのものである。
【００７２】
暗号化動作及び暗号復号動作は上述のように、ＣＰＵ２４１の制御のもとで行われるが、以下では、理解を容易にするために、主にＲＯＭ２４３に格納された動作プログラムと記憶部２４５に適宜格納されるデータとの関係に着目して説明する。例えば、ＣＰＵ２４１が、ＲＯＭ２４３に格納されているある動作プログラムを読み出し、該動作プログラムに記載された手順にしたがって、記憶部２４５に格納されているあるデータをレジスタに格納し演算を施し別のデータを生成して記憶部２４５に格納する動作を記述する場合であれば、以下では単に、動作プログラムがあるデータから別のデータを生成する、というように記述することにする。
【００７３】
図３及び図４を参照しつつ、本実施形態に係る暗号化兼暗号復号装置２１１の暗号化動作を説明する。データ入出力Ｉ／Ｆ２３３には、空の外部記録媒体２２５が接続される。
【００７４】
図３は、解読されにくい暗号文を作成するために必要な、変換テーブル２８３を生成する動作を模式的に示した図である。
【００７５】
ユーザがキーボード２２１を操作して暗号鍵を打鍵すると、暗号化兼復号装置２１１の中の記憶部２４５に暗号鍵２７１が格納される。
【００７６】
乱数列生成プログラム２５３は、暗号鍵２７１を種にして、任意の既知の手法により、疑似乱数列を生成し、それを第0ビットから第(2u×u-1)ビットまでの部分２７９と、第(2u×u)ビット以降の部分２７５と、に分けて、記憶部２４５に格納する。前者の部分は、変換テーブル２８３の作成のために使用される一方、後者の部分は、後に仮暗号文を生成するために使用され、変換テーブル２８３の作成のためには、使用されない。
【００７７】
このように、生成された疑似乱数列のうち、変換テーブルの生成に用いられる部分と、仮暗号文の生成に用いられる部分とを完全に分離しておけば、変換テーブルと仮暗号文との間に相関が生じないため、暗号文はいっそう解読されにくくなり、安全性が向上する。
【００７８】
配列生成プログラム２５５は、疑似乱数列のうち第0ビットから第(2u×u-1)ビットまでの部分２７９に基づいて、配列２８１を生成する。
【００７９】
ＲＯＭ２４３には、初期テーブル２５７が格納されている。初期テーブル２５７としては、各要素が該要素のインデックス番号の値に等しいテーブルが好適である。変換テーブル生成プログラム２５９は、初期テーブル２５７に、配列２８１で決定される要素入れ替え演算を、上述の簡単な具体例と同等に施すことにより、変換テーブル２８３を生成し、記憶部２４５に格納する。
【００８０】
図４は、上述のように生成された変換テーブル２８３を用いて、キーボード２２１を介して入力された平文が暗号化されて、暗号文が外部記録媒体２２５に格納される動作を模式的に示した図である。
【００８１】
平文は、文区切り及び結合プログラム２５１により、所定の単位ビット数u毎に区切られ、区切られた平文２７３として記憶部２４５に格納される。
【００８２】
なお、文区切り及び結合プログラム２５１は、ここでは、平文に対して、所定の単位ビット数uに区切ったり、後述のように区切られた部分をひとまとめにしたりするためのプログラムであるとした。しかし、文を区切ったり結合したりする操作は、平文に対してのみならず、仮暗号文及び暗号文に対して行ってもよいし、また、そうすることが必要である場合もある。よって、文区切り及び結合プログラム２５１は、以下で特に言及されない場合でも、任意に、あるいは、必要に応じて、平文、仮暗号文、暗号文の何れについても使用されるものであるとする。
【００８３】
前記所定の単位ビット数uは、８ビットが好適である。すなわち、u=8とするのが好適である。このようにすれば、変換テーブル２８３は2u=28=256個もの数値の相互のランダムな対応関係を表すことになる。かかる大きな変換テーブルにより仮暗号文を暗号文に変換すれば、通常の用途の場合、変換テーブルの規模に起因する安全性は十分に確保されると期待される。また、特に、平文が、ひらがな、かたかな、アルファベット、数字等から構成される場合には、データの基本単位が１バイトすなわち８ビットであるから、８ビットずつ暗号化すると、半端なビットが生じず、効率がよい。
【００８４】
第１暗号化及び復号プログラム２６３は、区切られた平文２７３と、変換テーブル２８３の作成の際に既に生成してある第(2u×u)ビット以降の疑似乱数列２７５と、の排他的論理和をとり、仮暗号文２７７を生成する。
【００８５】
このように排他的論理和をとることは、一般的なストリーム型暗号化方法において行われていることであり、演算効率の高い暗号化が可能になる。
【００８６】
第２暗号化及び復号プログラム２６５は、変換テーブル２８３を用いて、上述の簡単な具体例と同様に、仮暗号文２７７から暗号文２８５を生成し、記憶部２４５に格納する。
【００８７】
暗号文２８５は、データ入出力Ｉ／Ｆ２３３を介して、外部記録媒体２２５に格納される。
【００８８】
図５及び図６を参照しつつ、本実施形態に係る暗号化兼暗号復号装置２１１の暗号復号動作を説明する。データ入出力Ｉ／Ｆ２３３には、暗号文が格納された外部記録媒体２２５が接続される。
【００８９】
図５は、復号に必要な、逆変換テーブル２８４を生成する動作を模式的に示した図である。
【００９０】
ユーザは、暗号化の場合と同様に、キーボード２２１を操作して暗号鍵を打鍵する。すると、暗号化兼復号装置２１１の中の記憶部２４５に暗号鍵２７１が格納される。
【００９１】
この後、変換テーブル２８３が生成され記憶部２４５に格納されるまでの動作は、暗号化の場合と全く同じである。
【００９２】
暗号化側と暗号複合化側との間で、固定の変換テーブルをあらかじめ取り決めておいたり、暗号化側がいかなる変換テーブルを用いたかについての情報を暗号復号側に伝達するようにしておいたりすると、変換テーブルの内容の漏洩が懸念される。その点、本実施形態のように、暗号鍵を種に生成される疑似乱数列の一部を変換テーブルの生成に用いれば、暗号鍵さえ秘密に保っておけば変換テーブルの内容が漏洩することはないし、暗号復号側のユーザが暗号復号装置として動作する暗号化兼暗号復号装置２１１に暗号鍵を入力すれば、暗号化側のユーザが暗号化装置として動作する暗号化兼暗号復号装置２１１において用いられた変換テーブルを復元することができるため該変換テーブルを伝達することも不要となる。
【００９３】
逆変換テーブル生成プログラム２６１は、変換テーブル２８３のインデックス番号と要素の値とを入れ替える操作を行うことにより逆変換テーブル２８４を生成し、記憶部２４５に格納する。
【００９４】
図６は、外部記録媒体２２５に格納された暗号文が取り出され、取り出された暗号文が上述のように生成された逆変換テーブル２８４を用いて平文に復号され、復号された平文がユーザのためにモニタ２２３に表示される動作を模式的に示した図である。
【００９５】
外部記録媒体２２５からデータ入出力Ｉ／Ｆ２３３を介して記憶部２４５に格納された暗号文２８５は、第２暗号化及び復号プログラム２６５により、逆変換テーブル２８４に従って、仮暗号文２７７に変換される。
【００９６】
第１暗号化及び復号プログラム２６３は、復元された仮暗号文２７７と、逆変換テーブル２８４の作成の際に既に生成してある第(2u×u)ビット以降の疑似乱数列２７５と、について排他的論理和演算を施し、区切られた平文２７３を復号する。
【００９７】
区切られた平文２７３は、文区切り及び結合プログラム２５１によって結合されてひとまとまりの平文とされる。その後、平文は、ユーザがその内容を知ることができるように、ユーザ入出力Ｉ／Ｆ２３１を介してモニタ２２３に表示される。
【００９８】
以下では、暗号化用換字部１２３（図１）や、復号用換字部１３３（図１）や、変換テーブル生成プログラム２５９（図２、図３、図５）による動作において行われる、暗号化のための変換テーブルの生成の手順について、図８に示すフローチャートを参照しつつ説明する。
【００９９】
0から2u-1までのインデックス番号で相互に識別される2u個のテーブル要素から成る初期テーブルが用意される（ステップＳ８１１）。各要素の値は、該要素のインデックス番号と等しい値とする。本実施形態の場合は、上述のとおり、u=8が好適であり、初期テーブルはＲＯＭ２４３に格納済みである。
【０１００】
ＣＰＵ２４１は、内蔵のカウンタレジスタに乱数識別用変数nを格納することとし、初期値をn=0とする（ステップＳ８１３）。
【０１０１】
ＣＰＵ２４１は、内蔵の汎用レジスタに、uビットで表され0から(2u-1)までの整数をとるn番目の乱数R(n)を記憶部２４５からロードする（ステップＳ８１５）。
【０１０２】
ＣＰＵ２４１はさらに、汎用レジスタに、テーブルインデックス番号がnであるテーブル要素T(n)と、テーブルインデックス番号がR(n)であるテーブル要素T(R(n))と、を記憶部２４５からロードする（ステップＳ８１７）。
【０１０３】
ＣＰＵ２４１は、T(n)とT(R(n))とを入れ替える演算を行い（ステップＳ８１９）、これらを記憶部２４５に格納する（ステップＳ８２１）。すなわち、はじめ、インデックス番号nを有する要素の値がT(n)でありかつインデックス番号R(n)を有する要素の値がT(R(n))であったのに対して、かかる処理の後は、インデックス番号nを有する要素の値が元のT(R(n))となりかつインデックス番号R(n)を有する要素の値が元のT(n)となる。
【０１０４】
ＣＰＵ２４１は、nが2u-1に達したか否かを判別し（ステップＳ８２３）、まだ達していない場合には（ステップＳ８２３；Ｎｏ）nを1増加（ステップＳ８２５）してからステップＳ８１５に戻り、達している場合には（ステップＳ８２３；Ｙｅｓ）処理を終了する。
【０１０５】
この、図８のフローチャートで示される処理を、具体的な数値を用いて例示すると、図９のようになる。
【０１０６】
初期テーブルは、図９（ａ）に示されるテーブルである。この初期テーブルにおいては、T(0)=0、T(1)=1、・・・、T(255)=255のように、インデックス番号と要素の値とが等しい。
【０１０７】
先頭の乱数であるR(0)の値が89であるとすると、テーブルインデックス番号0を有するテーブル要素の値0と、テーブルインデックス番号89を有するテーブル要素の値89と、が交換される。すなわち、元は、T(0)=0かつT(89)＝89であったのに対して、かかる交換後は、T(0)=89かつT(89)=0となる（図９（ｂ）の左側）。続いて、2番目の乱数であるR(1)の値が123であるとすると、テーブルインデックス番号1を有するテーブル要素の値1と、テーブルインデックス番号123を有するテーブル要素の値123と、が交換される。すなわち、元は、T(1)=1かつT(123)=123であったのに対して、かかる交換後は、T(1)=123かつT(123)=1となる（図９（ｂ）の右側）。
【０１０８】
このような交換操作が255回行われた後、テーブルは図９（ｃ）の左側に示すものになっているとする。
【０１０９】
そして、最後の乱数であるR(255)を用いた、最後の交換操作である256回目の交換操作が行われる。R(255)の値が1であるとすると、テーブルインデックス番号255を有するテーブル要素の値3と、テーブルインデックス番号1を有するテーブル要素の値123と、が交換される。すなわち、元は、T(255)=3かつT(1)=123であったのに対して、かかる交換後は、T(255)=123かつT(1)=3となる。こうして、変換テーブルが完成する（図９（ｃ）の右側）。
【０１１０】
以下では、暗号化用排他的論理和演算部１２１（図１）や、暗号化の際の第１暗号化及び復号プログラム２６３（図２、図４）による動作において行われる、暗号化のための仮暗号文の生成の手順について、図１０に示すフローチャートを参照しつつ説明する。
【０１１１】
平文は所定の単位ビット数であるuビットずつの部分に区切られた結果（本実施形態ではu=8が好適である。）、0からmMAXまでの区切り識別用変数mで相互に識別される(mMAX+1)個の部分に分割された状態で記憶部２４５に格納されているとする。
【０１１２】
ＣＰＵ２４１は、内蔵のカウンタレジスタに区切り識別用変数mを格納することとし、初期値をm=0とする（ステップＳ１１）。
【０１１３】
ＣＰＵ２４１は、内蔵の別のカウンタレジスタに乱数識別用変数nを格納することとし、n=2u+mによりnを求める（ステップＳ１３）。
【０１１４】
ＣＰＵ２４１は、内蔵の汎用レジスタに、ともにu=8ビットで表される、平文の第m区切りP(m)と、n番目の乱数R(n)と、を記憶部２４５からロードする（ステップＳ１５）。
【０１１５】
ＣＰＵ２４１は、仮暗号文の第m区切りCtmp(m)を、P(m)とR(n)の排他的論理和をとることにより、求め（ステップＳ１７）、記憶部２４５に格納する（ステップＳ１９）。
【０１１６】
ＣＰＵ２４１は、mがmMAXに達したか否かを判別し（ステップＳ２１）、まだ達していない場合には（ステップＳ２１；Ｎｏ）mを1増加（ステップＳ２３）してからステップＳ１３に戻り、達している場合には（ステップＳ２１；Ｙｅｓ）処理を終了する。
【０１１７】
以下では、暗号化用換字部１２３（図１）や、暗号化の際の第２暗号化及び復号プログラム２６５（図２、図４）による動作において行われる、暗号化のための暗号文の生成の手順について、図１１に示すフローチャートを参照しつつ説明する。
【０１１８】
仮暗号文は、所定の単位ビット数であるuビットずつの部分に区切られ0からmMAXまでの区切り識別用変数mで相互に識別される(mMAX+1)個の部分に分割された状態で、記憶部２４５に格納されているとする。
【０１１９】
ＣＰＵ２４１は、区切り識別用変数mを0に初期化する（ステップＳ１１１）。
【０１２０】
ＣＰＵ２４１は、仮暗号文の第m区切りであるCtmp(m)を記憶部２４５からロードし（ステップＳ１１３）、続いて、変換テーブルを検索して、インデックス番号としてCtmp(m)に等しい値を有する変換テーブル要素T(Ctmp(m))をロードし（ステップＳ１１５）、続いて、暗号文の第m区切りであるC(m)を、C(m)= T(Ctmp(m))により求め（ステップＳ１１７）、記憶部２４５に格納する（ステップＳ１１９）。
【０１２１】
ＣＰＵ２４１は、mがmMAXに達したか否かを判別し（ステップＳ１２１）、まだ達していない場合には（ステップＳ１２１；Ｎｏ）mを1増加（ステップＳ１２３）してからステップＳ１１３に戻り、達している場合には（ステップＳ１２１；Ｙｅｓ）処理を終了する。
【０１２２】
以下では、復号用換字部１３３（図１）や、主に逆変換テーブル生成プログラム２６１（図２、図５）による動作において行われる、復号のための逆変換テーブルの生成の手順について、図１２に示すフローチャートを参照しつつ説明する。
【０１２３】
図８のフローチャートに示した手順と同様の手順により、ＣＰＵ２４１は、変換テーブルを生成する（ステップＳ２１１）。
【０１２４】
ＣＰＵ２４１は、変換テーブルインデックス番号iを、i=0に初期化する（ステップＳ２１３）。
【０１２５】
ＣＰＵ２４１は、テーブル要素T(i)を、記憶部２４５からロードし（ステップＳ２１５）、逆変換テーブルのうちインデックス番号がT(i)に等しい要素T-1(T(i))の値を、T-1(T(i))=iにより求め（ステップＳ２１７）、記憶部２４５に格納する（ステップＳ２１９）。
【０１２６】
ＣＰＵ２４１は、iが2u-1に達したか否かを判別し（ステップＳ２２１）、まだ達していない場合には（ステップＳ２２１；Ｎｏ）iを1増加（ステップＳ２２３）してからステップＳ２１５に戻り、達している場合には（ステップＳ２２１；Ｙｅｓ）処理を終了する。
【０１２７】
ここで行っていることは、端的にいえば、変換テーブルのインデックス番号と要素の値とを入れ替えることにより、逆変換テーブルを生成するということである。図９で具体的な値を用いて例示した変換テーブルから、逆変換テーブルを生成する様子を、図１３に示す。
【０１２８】
以下では、復号用排他的論理和演算部１３１（図１）や、復号の際の第１暗号化及び復号プログラム２６３（図２、図６）による動作において行われる、復号のための仮暗号文の生成の手順について、図１４に示すフローチャートを参照しつつ説明する。
【０１２９】
暗号文は、所定の単位ビット数であるuビットずつの部分に区切られ0からmMAXまでの区切り識別用変数mで相互に識別される(mMAX+1)個の部分に分割された状態で、記憶部２４５に格納されているとする。また、逆変換テーブルは既に生成されて、記憶部２４５に格納されているとする。
【０１３０】
ＣＰＵ２４１は、区切り識別用変数mを0に初期化する（ステップＳ４１１）。
【０１３１】
ＣＰＵ２４１は、暗号文の第m区切りであるC(m)を、記憶部２４５からロードし（ステップＳ４１３）、続いて、逆変換テーブル要素T-1(C(m))を、記憶部２４５からロードし（ステップＳ４１５）、続いて、仮暗号文の第m区切りであるCtmp(m)を、Ctmp(m)=T-1(C(m))により求め（ステップＳ４１７）、記憶部２４５に格納する（ステップＳ４１９）。
【０１３２】
ＣＰＵ２４１は、mがmMAXに達したか否かを判別し（ステップＳ４２１）、まだ達していない場合には（ステップＳ４２１；Ｎｏ）mを1増加（ステップＳ４２３）してからステップＳ４１３に戻り、達している場合には（ステップＳ４２１；Ｙｅｓ）処理を終了する。
【０１３３】
仮暗号文から平文を復号する手順は、平文と乱数列とから排他的論理和演算により仮暗号文を求める手順を逆向きに行う。平文と乱数列とから排他的論理和演算により仮暗号文を求める手順については既に詳細に述べてあり、また、この手順は、乱数列のうち変換テーブルの生成に使用される先頭部分を使用しないことを除けば、従来の一般的なストリーム型暗号方法における復号方法と同様であるので、ここでは説明を省略する。
【０１３４】
（実施形態２）
実施形態１に係る暗号化装置１１１、暗号復号装置１１３、及び、暗号化兼暗号復号装置２１１においては、暗号鍵を種に生成される乱数列の一部を用いて変換テーブル及び逆変換テーブルを生成した。これにより、暗号化側から暗号復号側に暗号鍵を知らせるだけで、暗号復号側は暗号化側で用いられた変換テーブルを再現し逆変換テーブルを導き出すことができるようになり、いかなる変換テーブルを用いたかという情報は伝達される必要がなく、基本的には、安全面で有利である。
【０１３５】
しかし本発明は、変換テーブルに関する情報を暗号化側から暗号復号側に伝達するような実施形態を除外するものではない。従来の一般的なストリーム型暗号化方法における、同一の暗号鍵を用いて２個の平文を暗号化した場合の安全性の低さは、少なくとも変換テーブルを使用することにより、改善されるからである。
【０１３６】
そこで、本発明の実施形態２に係る暗号化兼暗号復号装置として、実施形態１に係る暗号化兼暗号復号装置（図２）から、ＲＯＭ２４３の中の配列生成プログラム２５５、初期テーブル２５７、変換テーブル生成プログラム２５９、及び、記憶部２４５の中の配列２８１、を除去したものが挙げられる。本実施形態においては、記憶部２４５の中の変換テーブル２８３は、ユーザがキーボード２２１を打鍵するか又はデータ入出力Ｉ／Ｆ２３３に変換テーブル２８３が格納された記録媒体が接続されることにより、ユーザ入出力Ｉ／Ｆ２３１又はデータ入出力Ｉ／Ｆ２３３を介して記憶部２４５に格納される。また、疑似乱数列の最初の方の部分を変換テーブルの作成のために利用する必要がないため、実施形態１の場合と異なり、疑似乱数列の最初の方の部分２７９とそれ以降の部分２７５とを区別する必要はなく、疑似乱数列は先頭から仮暗号文に関する処理のために用いることができる。
【０１３７】
本実施形態においては、暗号化側から暗号復号側に、暗号鍵の他、変換テーブルの内容を別途伝達する必要があるが、実施形態１の場合に必要とされた動作プログラムのいくつかが不要となるため暗号化兼復号装置が簡略化される。
【０１３８】
また、実施形態１の場合には、何者かに乱数生成の方法が分析され暗号鍵が入手されてしまった場合、暗号が解読されてしまう。これに対し、本実施形態の場合は、変換テーブルを乱数列とは無関係に定めることができるので、何者かに乱数生成の方法が分析され暗号鍵が入手されてしまった場合でも、変換テーブルが秘密に保たれていれば、暗号が解読されにくいという利点がある。
【０１３９】
（実施形態３）
本実施形態に係る暗号化兼暗号復号装置は、実施形態１に係る暗号化兼暗号復号装置２１１と同じ構成要素を有した上で、さらに、従来の一般的なストリーム型暗号化方法に基づく暗号化と暗号復号を可能にした装置である。
【０１４０】
本実施形態に係る装置においては、該装値を、本発明に係る暗号化方法と従来の暗号化方法のうちどちらの方法で動作させるかを、ユーザが切り替えることができるようになっている。この装置は、例えば、次のような場面で、便利である。
【０１４１】
すなわち、従来の暗号化方法に基づいて生成された暗号文を格納した外部記録媒体２２５があって、該外部記録媒体２２５は既に記録容量の全てを使い切ってしまっているなどしてこれ以上のデータの格納は望めない事情があるとする。ユーザが、従来の暗号化方法に基づいて生成された暗号文のままでは解読される危険性があると思っても、より安全性の高い別の暗号化方法で暗号化し直すためには、一般的には、暗号化に関連した情報のためにデータの容量が増えてしまう。すると、暗号化し直した新たなデータは、元の外部記録媒体２２５に対しては容量オーバーとなり格納しきれなくなる。
【０１４２】
ところが本発明に係る暗号化方法によれば、暗号文のデータ量を元通りに保ったまま、安全性を向上させることができる。したがって、ユーザは、まず、従来の方法に基づく暗号文が格納された外部記録媒体２２５をデータ入出力Ｉ／Ｆ２３３に接続して、本実施形態に係る装置において従来方法を選択して暗号復号動作を行わせ、平文を得る。ユーザは、続いて、本実施形態に係る装置において本発明に係る方法を選択して暗号化動作を行わせる。暗号文のデータの容量が変化しないので、本発明に係る方法に基づく暗号文は、そのまま元の外部記録媒体２２５に格納される。そうでありながら、暗号が解読されにくくなるという意味での安全性は、向上している。
【０１４３】
この発明は、上記実施形態に限定されず、種々の変形及び応用が可能である。上述のハードウェア構成やブロック構成、フローチャートは説明のための例示であって、本発明の範囲を限定するものではない。
【０１４４】
例えば、暗号化兼暗号復号装置は、本発明に係る動作を行わせるために特化された専用装置である必要はない。疑似乱数の生成方法をハードウェア資源の限界に合わせて簡略化させる等の通常の工夫により、個人用の小規模な多用途電子計算機を用いて専用装置に準ずる動作をさせることもできる。こうした変形は全て本発明の範囲に含まれる。
【図面の簡単な説明】
【０１４５】
【図１】本発明の実施形態１に係る暗号化装置及び暗号復号装置の機能構成図である。
【図２】本発明の実施形態１に係る暗号化兼暗号復号装置の物理的な構成を示す図である。
【図３】本発明の実施形態１に係る暗号化兼暗号復号装置における、暗号化動作の前半を示す図である。
【図４】本発明の実施形態１に係る暗号化兼暗号復号装置における、暗号化動作の後半を示す図である。
【図５】本発明の実施形態１に係る暗号化兼暗号復号装置における、復号動作の前半を示す図である。
【図６】本発明の実施形態１に係る暗号化兼暗号復号装置における、復号動作の後半を示す図である。
【図７】初期テーブルに要素交換操作を施して変換テーブルを完成させる簡単な具体例を示す図である。
【図８】本発明の実施形態１における、暗号化のための変換テーブルを生成する処理の流れを示す図である。
【図９】本発明の実施形態１における、初期テーブルに要素交換操作を施して変換テーブルを完成させる具体例を示す図である。
【図１０】本発明の実施形態１における、暗号化のための仮暗号文を生成する処理の流れを示す図である。
【図１１】本発明の実施形態１における、仮暗号文から暗号文を生成する処理の流れを示す図である。
【図１２】本発明の実施形態１における、復号のための逆変換テーブルを生成する処理の流れを示す図である。
【図１３】本発明の実施形態１における、変換テーブルから逆変換テーブルを生成する具体例を示す図である。
【図１４】本発明の実施形態１における、暗号文から仮暗号文を生成する処理の流れを示す図である。
【符号の説明】
【０１４６】
１１１・・・暗号化装置、１１３・・・暗号復号装置、１１５・・・乱数列生成部、１２１・・・暗号化用排他的論理和演算部、１２３・・・暗号化用換字部、１３１・・・復号用排他的論理和演算部、１３３・・・復号用換字部、２１１・・・暗号化兼暗号復号装置、２２１・・・キーボード、２２３・・・モニタ、２２５・・・外部記録媒体、２３１・・・ユーザ入出力Ｉ／Ｆ、２３３・・・データ入出力Ｉ／Ｆ、２４１・・・ＣＰＵ、２４３・・・ＲＯＭ、２４５・・・記憶部、２４７・・・システムバス、２５１・・・文区切り及び結合プログラム、２５３・・・乱数列生成プログラム、２５５・・・配列生成プログラム、２５７・・・初期テーブル、２５９・・・変換テーブル生成プログラム、２６１・・・逆変換テーブル生成プログラム、２６３・・・第１暗号化及び復号プログラム、２６５・・・第２暗号化及び復号プログラム、２７１・・・暗号鍵、２７３・・・区切られた平文、２７５・・・疑似乱数列のうち最初の方を除く部分、２７７・・・仮暗号文、２７９・・・疑似乱数列のうち最初の方の部分、２８１・・・配列、２８３・・・変換テーブル、２８４・・・逆変換テーブル、２８５・・・暗号文
【図１】
2008185608.tif 000003
【図２】
2008185608.tif 000004
【図３】
2008185608.tif 000005
【図４】
2008185608.tif 000006
【図５】
2008185608.tif 000007
【図６】
2008185608.tif 000008
【図７】
2008185608.tif 000009
【図８】
2008185608.tif 000010
【図９】
2008185608.tif 000011
【図１０】
2008185608.tif 000012
【図１１】
2008185608.tif 000013
【図１２】
2008185608.tif 000014
【図１３】
2008185608.tif 000015
【図１４】
2008185608.tif 000016