(57)【特許請求の範囲】
【請求項１】
暗号化の対象となる原文データを記憶するデータ記憶手段と、
複数の暗号化キーを記憶する暗号化キー記憶手段と、
閉空間領域内でベクトルを回転させる関数であって、生成したベクトルに依存して次の回転角θを決定する関数を前記暗号化キー記憶手段に記憶された複数の暗号化キーにより決定し、当該関数により、各成分が所定ビット数からなる多次元ベクトルを逐次的に生成するベクトル生成手段と、
前記データ記憶手段に記憶された暗号化の対象となるデータと前記ベクトル生成手段によって生成されたベクトルの成分との排他的論理和演算を行ってデータを暗号化する論理演算手段と
を具備したことを特徴とする暗号化装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、例えば暗号通信を行うシステムに用いられる暗号化装置に係り、特に多次元ベクトルを用いて原文データを暗号化する暗号化装置に関する。
【０００２】
【従来の技術】
計算機やネットワークをはじめとする情報システムでは、不特定多数のユーザが使用する環境下にあって、悪意のユーザによる情報の盗聴や改竄などが大きな問題となっており、その対策として暗号化技術を利用する場合が多い。
【０００３】
暗号化技術として一般的に知られている手法として、下記の文献に示されているものが詳しい。
文献「Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ  ｏｆ  ｔｈｅ  ＡＣＭ  Ｖｏｌ．２１，Ｎｏ．２（１９７８）ｐ１２０．Ａ  Ｍｅｔｈｏｄ  ｆｏｒ  Ｏｂｔａｉｎｉｎｇ  Ｄｉｇｉｔａｌ  Ｓｉｇｎａｔｕｒｅｓ  ａｎｄ  Ｐｕｂｌｉｃ−ＫｅｙＣｒｙｐｔｏｓｙｓｔｅｍｓ：Ｒ．Ｌ．Ｒｉｖｅｓｔ，Ａ．Ｓｈａｍｉｒ，ａｎｄ  Ｌ．Ａｄｌｅｍａｎ，ＭＩＴ  Ｌａｂｏｒａｔｏｒｙ  ｆｏｒ  Ｃｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ａｎｄ  Ｄｅｐａｒｔｍｅｎｔ  ｏｆ  Ｍａｔｈｍａｔｉｃｓ．」
この文献で発表された暗号化手法は、一般からかなり強力なものとして受入れられ、ＲＳＡ（Ｒｉｖｅｓｔ−Ｓｈａｍｉｒ−Ａｄｌｅｍａｎ）法と呼ばれている。また、このＲＳＡ法から派生させられた手法が電子商取引における「著名」の認証手段として開発され、実用化されつつある。
【０００４】
ＲＳＡ法は、素因数分解の困難さを利用した公開鍵（非対称）暗号方式であり、データを累乗した結果を大きな整数で割った余り（剰余）を暗号文にする。このＲＳＡ法の特徴は、２つの素数（ｐおよびｑ）の積から元の２つの素数を見つけ出すのが困難で、たとえ、２つの素数の積か知られたとしても、ｐおよびｑ、更には解読演算を推定することが困難であるということにある。
【０００５】
【発明が解決しようとする課題】
前述したＲＳＡ法自体はそれなりに実用的であり、信頼性も、暗号鍵としてのデータのビット長が十分である場合には、かなり高いものになることが保証されている。この信頼性を確保するために、現在は２５６ビット長の暗号鍵データを使うのが主流となっているが、ときとしてこれでは短かすぎ、さらに５１２ビットや１０２４ビットのデータ長の暗号鍵の必要性が論じられている。
【０００６】
しかしながら、データ長は計算機の演算精度と演算速度で事実上制限されるため、やたらにビット長を長くすることは、長期的に見たとき、必ずしも得策とは言えない。
【０００７】
つまり、ＲＳＡ法およびＲＳＡ法から派生させられた暗号化手法は、計算機の性能によって、その信頼性が制約されといった問題点があった。
また、暗号鍵のビット長の変更に起因する認証システムの信頼性試験等にも大幅な変更が必要となるといった問題点もある。
【０００８】
本発明はこのような点に鑑みなされたもので、高精度の演算能力を必要とせずに暗号化を行うことができ、しかも、信頼性が高く、アプリケーションの追加、変更が容易な暗号化を実現することのできる暗号化装置を提供することを目的とする。
【０００９】
【課題を解決するための手段】
本発明の暗号化装置は、暗号化の対象となる原文データを記憶するデータ記憶手段と、複数の暗号化キーを記憶する暗号化キー記憶手段と、閉空間領域内でベクトルを回転させる関数であって、生成したベクトルに依存して次の回転角θを決定する関数を前記暗号化キー記憶手段に記憶された複数の暗号化キーにより決定し、当該関数により、各成分が所定ビット数からなる多次元ベクトルを逐次的に生成するベクトル生成手段と、前記データ記憶手段に記憶された暗号化の対象となるデータと前記ベクトル生成手段によって生成されたベクトルの成分との排他的論理和演算を行ってデータを暗号化する論理演算手段とを具備したことを特徴とする。
【００１２】
【発明の実施の形態】
以下、図面を参照して本発明の一実施形態を説明する。
本発明は、あるグループの人が共通のセキュリティデバイス（暗号化装置）を持ってデータ通信する場合での暗号化処理に関するものである。
【００１３】
図１は暗号通信を行うシステムの構成を示す概念図である。
図中１１ａ，１１ｂはパーソナルコンピュータ（以下、ＰＣと称す）、１２ａ，１２ｂはセキュリティデバイスであり、ここではユーザＡが所有するＰＣ１１ａとユーザＢが所有するＰＣ１１ｂとの間でデータ通信を行う場合を想定している。
【００１４】
ＰＣ１１ａ，１１ｂは汎用コンピュータであり、それぞれにセキュリティデバイス１２ａ，１２ｂの接続が可能である。
セキュリティデバイス１２ａ，１２ｂは、ＩＣカードからなる。このセキュリティデバイス１２ａ，１２ｂには、工場出荷時にある程度の情報が書き込まれている。ある程度の情報とは、当該ＩＣカードの製造番号、グループの各メンバーのユーザＩＤ、暗号化キー（秘密キーＰ1 ，Ｐ2 ）に関する情報である。これらの情報は、グループの各メンバーに共通の情報であり、非公開である。
【００１５】
図２は前記ＰＣ１１ａおよびセキュリティデバイス１２ａの回路構成を示すブロック図である。なお、ＰＣ１１ｂおよびセキュリティデバイス１２ｂの構成についても同様である。
【００１６】
ＰＣ１１ａは汎用コンピュータからなり、ＣＰＵ２１を備え、主プログラムの起動によりデータ処理を実行する。このＣＰＵ２１には、システムバスを介して記憶装置２２、ＲＡＭ２３、キーボード２４、表示部２５、カードＩ／Ｆ（インタフェース）２６が接続されている。
【００１７】
記憶装置２２は、例えばハードディスク装置やフロッピーディスク装置、ＣＤ−ＲＯＭ装置などからなり、各種のデータやプログラム等を記憶するものであり、ここでは暗号化の対象となる原文データや、後述する認証ファイルなどを記憶している。また、この記憶装置２２には、記録媒体（ディスク等）に記憶されたプログラムがインストールされる。ＣＰＵ２１は、この記憶装置２２にインストールされたプログラムを読み込み、同プログラムに従った処理を実行する。
【００１８】
ＲＡＭ２３は、本装置のメインメモリとして機能し、本装置の処理に必要な各種データを記憶するものである。キーボード２４は、データの入力や各種ファンクションの指示を行うための入力装置である。表示部２５は、例えばＣＲＴ (Cathode Ray Tube) やＬＣＤ (Liquid Crystal Display) などからなり、データの表示を行うための表示装置である。
【００１９】
また、カードＩ／Ｆ２６は、コネクタ２７を介してセキュリティデバイス１２ａを接続し、そのセキュリティデバイス１２ａとの間でデータの入出力制御を行う。
【００２０】
一方、セキュリティデバイス１２ａはＩＣカードからなり、ＣＰＵ３１を備え、副プログラムの起動によりデータ処理を実行する。このＣＰＵ３１には、システムバスを介してＲＯＭ３２、ＲＡＭ３３、フラッシュメモリ３６が接続されている。
【００２１】
ＲＯＭ３２には、セキュリティデバイス１２ａとしての機能を実現するための副プログラムを記憶している。ＲＡＭ３３は、セキュリティデバイス１２ａの処理に必要な各種データを記憶するものであり、ここではＰＣ１１ａから送信されたデータを一時格納しておくための入力バッファ３４と、ＰＣ１１ａに送信するデータを一時格納しておくための出力バッファ３５を有する。
【００２２】
フラッシュメモリ３６は、図３に示すデータベース４１を記憶しておくための記憶装置として用いられる。
図３に示すように、このデータベース４１は、前述した各メンバー共通の情報（非公開情報）と各メンバー毎に固有の情報（公開情報）とで構成される。各メンバー共通の情報（非公開情報）とは、製造番号、グループの各メンバーのユーザＩＤ、暗号化鍵データ（秘密キーＰ1 ，Ｐ2 ）である。各メンバー毎に固有の情報（公開情報）とは、暗号化鍵データ（公開キーＰ3 ，Ｐ4 ）とパスワードである。なお、パスワードは、公開キーの一部として用いられる。
【００２３】
また、コネクタ３７は、セキュリティデバイス１２ａをＰＣ１１ａに電気的に接続するためのものである。
ここで、図１のシステムにおいて、暗号通信を行う場合の動作を簡単に説明しておく。
【００２４】
まず、ＩＣカードとして用いられるセキュリティデバイス１２ａ，１２ｂをグループの各メンバーに渡す。このセキュリティデバイス１２ａ，１２ｂにはデータベース４１が設けられており、そのデータベース４１には、予め製造番号、グループの各メンバーのユーザＩＤ、暗号化鍵データ（秘密キーＰ1 ，Ｐ2 ）が登録されている。
【００２５】
各メンバーは、このセキュリティデバイス１２ａ，１２ｂに暗号化キー（公開キーＰ3 ，Ｐ4 ）とパスワードを書き込む。ここで書き込まれた情報は、データベース４１の公開部分に格納される。
【００２６】
ここで、例えばＰＣ１１ａからＰＣ１１ｂに暗号通信する場合には、各メンバー（ユーザＡ，Ｂ）はセキュリティデバイス１２ａ，１２ｂをＰＣ１１ａ，１１ｂにそれぞれ差し込んで暗号化を行う。この場合、本発明において、暗号化のアルゴリズムは、後述するベクトル発生による。
【００２７】
このときのベクトルを発生させる関数、あるいは用いられる定数を暗号化キー（秘密・公開キー）で決定する。暗号化された文書は公開キーと共に相手方に送信される。受信側では、受け取った公開キーと自分が持っている秘密キーで、その暗号化文書を復号化する。
【００２８】
次に、同実施形態の動作について説明する。
ここでは、図１に示すＰＣ１１ａとセキュリティデバイス１２ａに着目して、（ａ）ユーザ登録、（ｂ）データ暗号化の２つのモードに分けて、それぞれの処理動作について説明する。
【００２９】
（ａ）ユーザ登録
まず、ユーザはセキュリティデバイス１２ａを用いた暗号通信を行うに際し、ユーザ登録を行う。これは、セキュリティデバイス１２ａ（ＩＣカード）を貰ったメンバーが自分のＰＣ１１ａに前記図３の公開部分に関する情報を登録することである。
【００３０】
図４（ａ），（ｂ）はユーザ登録時のＰＣ１１ａとセキュリティデバイス１２ａの処理動作を示すフローチャートである。
ユーザはＰＣ１１ａ上の主プログラムを通し、ユーザ認証データをＰＣ１１ａに入力する（ステップＡ１１）。この場合、ユーザ認証データとは、ユーザＩＤとする。主プログラムは、ここで入力されたユーザＩＤをセキュリティデバイス１２ａの入力バッファ３４に転送する（ステップＡ１２）。そして、制御をセキュリティデバイス１２ａ上の副プログラムに渡す。
【００３１】
セキュリティデバイス１２ａ側では、副プログラムが入力バッファ３４にデータが存在することを確認すると、それを読み込む（ステップＢ１１）。そして、副プログラムは、セキュリティデバイス１２ａ上のフラッシュメモリ３６をアクセスし、このフラッシュメモリ３６に設けられたデータベース４１の中に、ユーザ認証データとして入力されたユーザＩＤが登録されているか否かをチェックする（ステップＢ１２）。
【００３２】
その結果、データベース４１に当該ユーザＩＤが登録されていない場合には（ステップＢ１２のＮｏ）、グループのメンバーでないと判断され、以後の処理は中断される（ステップＢ１３）。
【００３３】
一方、データベース４１に当該ユーザＩＤが登録されている場合には（ステップＢ１２のＹｅｓ）、グループのメンバーであると判断され、パスワードおよび暗号化キー（公開キー）の要求がＰＣ１１ａに対して行われる（ステップＢ１４）。
【００３４】
ユーザは、この要求に従ってパスワードおよび暗号化キー（公開キー）を入力する（ステップＡ１３）。ＰＣ１１ａ上の主プログラムは、ここで入力されたパスワードおよび暗号化キー（公開キー）をセキュリティデバイス１２ａの入力バッファ３４に転送する（ステップＡ１４）。なお、パスワードは公開キーの一部として用いられる。
【００３５】
このようにして、グループメンバーとして認められたユーザからパスワードおよび暗号化キー（公開キー）が入力されると、セキュリティデバイス１２ａの副プログラムはそれらの入力情報を読み込み、必要に応じて暗号化した上で、フラッシュメモリ３６に設けられたデータベース４１の公開部分に書き込む（ステップＢ１５）。
【００３６】
この時点で、ユーザが暗号化に使用する数学関数が決定される。この数学関数の中で使われる複数の定数は、固定化されている。なお、本発明では、この数学関数として多次元ベクトルを用いていることが特徴であるが、それについては後に説明する。
【００３７】
これらの情報処理の後、副プログラムはデータベース４１のレポートを作成し（ステップＢ１６）、これをセキュリティデバイス１２ａ上の出力バッファ３５に格納した後、制御をＰＣ１１ａ上の主プログラムに渡す（ステップＢ１７）。
【００３８】
ここで、前記レポートには、主プログラムがユーザ認証に使用するデータが暗号化された上で書き込まれている。
ＰＣ１１ａ側では、主プログラムがセキュリティデバイス１２ａ上の出力バッファ３５にデータがあることを確認した上でそれを読み込み、記憶装置２２にファイルデータとして書き込む（ステップＡ１５）。ここで書き込まれたファイルデータは認証ファイルとなり、以降の暗号通信を実行する際のユーザ認証に使用される（ステップＡ１６）。
【００３９】
（ｂ）データ暗号化
ここで言うデータ暗号化とは、実際に作成文書を暗号化して送信することを指す。
【００４０】
図５（ａ），（ｂ）はデータ暗号化時のＰＣ１１ａとセキュリティデバイス１２ａの処理動作を示すフローチャートである。
ユーザはセキュリティデバイス１２ａ（ＩＣカード）をＰＣ１１ａに装着した状態で、自分のユーザＩＤとパスワードを入力する（ステップＣ１１）。このユーザＩＤとパスワードの入力により、ＰＣ１１ａ上の主プログラムは、記憶装置２２に格納された認証ファイルを参照して、ユーザ認証を行う（ステップＣ１２）。
【００４１】
この認証結果により（ステップＣ１２１）、ユーザが登録ユーザでない場合（Ｃ１２１のＮｏ）、主プログラムは終了手続きに入る（ステップＣ１６）。ユーザが登録ユーザであることを確認した場合（Ｃ１２１のＹｅｓ）、主プログラムは、このとき入力されたユーザＩＤとパスワードをセキュリティデバイス１２ａに送る（ステップＣ１３）。
【００４２】
セキュリティデバイス１２ａ側では、副プログラムが前記ユーザＩＤとパスワードを読み込む（ステップＤ１１）。そして、副プログラムは、それらの情報とフラッシュメモリ３６に設けられたデータベース４１の内容とを比較して、ユーザが正当な使用者であることを認証する（ステップＤ１２）。
【００４３】
このユーザ認証の結果、副プログラムはユーザがセキュリティシステムの登録者であるか否かを記述した認証レポートを作成し、この認証レポートをセキュリティデバイス１２ａに転送して、制御をＰＣ１１ａ上の主プログラムに渡す（ステップＤ１３）。
【００４４】
ＰＣ１１ａ側では、主プログラムがセキュリティデバイス１２ａから送られてきた認証レポートを読み込み、セキュリティデバイス１２ａ側にてユーザ認証が行われたことを確認する（ステップＣ１４）。
【００４５】
ここで、前記ユーザ認証で登録ユーザであることが否定された場合、つまり、認証レポートに非登録者である旨が記述されていた場合には（ステップＣ１５のＮｏ）、ＰＣ１１ａの主プログラムはユーザにその旨を通知し、処理を中断する（ステップＣ１６）。
【００４６】
また、前記ユーザ認証で登録ユーザであることが確認された場合、つまり、認証レポートに登録者である旨が記述されていた場合には（ステップＣ１５のＹｅｓ）、ＰＣ１１ａの主プログラムは以下のような暗号通信を実行することになる。
【００４７】
すなわち、主プログラムは、記憶装置２２の中から暗号化の対象となる原文データ（作成文書）を読み出し、これに前記認証レポートを添付してセキュリティデバイス１２ａの入力バッファ３４に転送し、制御をセキュリティデバイス１２ａ上の副プログラムに渡す（ステップＣ１７）。
【００４８】
なお、原文書に認証レポートを添付するのは、セキュリティデバイス１２ａが認証した登録者からの文書であることを、セキュリティデバイス１２ａに確認させるためである。
【００４９】
セキュリティデバイス１２ａ側では、副プログラムがＰＣ１１ａから送られてきた原文データを読み込む（ステップＤ１４）。その際、原文データに認証レポートが添付されていなければ（ステップＤ１５のＮｏ）、登録者からの文書でないと判断され、以後の処理は中断される（ステップＤ１６）。
【００５０】
一方、原文データに認証レポートが添付されていれば（ステップＤ１５のＹｅｓ）、登録者からの文書であると判断され、副プログラムは後述する多次元ベクトルを用いた暗号化方式により当該原文データを暗号化する（ステップＤ１７）。そして、副プログラムは、復号キー（公開キー）と共に暗号文データ（暗号化文書）をセキュリティデバイス１２ａの出力バッファ３５に格納して、これらをＰＣ１１ａに送信する（ステップＤ１８）。
【００５１】
ＰＣ１１ａ上の主プログラムは、セキュリティデバイス１２ａから復号キーおよび暗号文データ（暗号化文書）を受け取ることにより（ステップＣ１８）、これをＰＣ１１ａの記憶装置２２上のファイルとして出力するか、あるいは、電子メール等の通信用ソフトウエアに制御を渡して、外部（図１のＰＣ１１ｂ）に送信する（ステップＣ１９）。
【００５２】
次に、セキュリティデバイス１２ａで実行される暗号化の処理動作について説明する。
図６（ａ）は暗号化の処理動作を示すフローチャートである。
【００５３】
暗号化の対象となる原文データ（メッセージデータ）をＭとする（ステップＥ１１）。このデータＭは、バイナリデータである。セキュリティデバイス１２ａ上の副プログラムは、まず、このデータＭに対してｂｉｔ単位でスクランブル１をかける（ステップＥ１２）。こうして得られたデータをＭ´とする（ステップＥ１３）。
【００５４】
ここで、副プログラムは、このデータＭ´に数学的に順次生成される乱数をＸＯＲ（排他的論理和）して暗号化を行う（ステップＥ１４）。このとき、乱数の発生の関数に多次元ベクトルｒを用いることが本発明の特徴である。この場合、多次元ベクトルｒを発生させる関数、あるいは、その関数に用いられる定数は暗号化キー（秘密・公開キー）で決定される。
【００５５】
すなわち、副プログラムは、暗号化に際し、データベース４１から秘密キー（Ｐ1 ，Ｐ2 ）および公開キー（Ｐ3 ，Ｐ4 ）を読み出し、それらの暗号化キーを定数として用いた関数に従って多次元ベクトルｒを生成し、Ｍ´XOR ｒといった論理演算を行ってデータＭを暗号化する。こうして得られた暗号文データをＣとする（ステップＥ１５）。
【００５６】
具体的に説明すると、例えば図７に示すように、ｒが３次元ベクトル（ｘ，ｙ，ｚ）であり、そのベクトル成分ｘ，ｙ，ｚの計算精度が１６ｂｉｔであるとする。この３次元ベクトルｒ（ｘ，ｙ，ｚ）を後述する式（１）に従ってｒ0 ，ｒ1 ，ｒ2 ，ｒ3 …といったように順次発生する。
【００５７】
今、データＭが８ｂｉｔデータの並びとして、ｍ0 ｍ1 ｍ2 ｍ3 ｍ4 ｍ5 ｍ6 …と与えられたとき（１文字８ｂｉｔの文字列）、Ｍは前記計算精度（１６ｂｉｔ）に基づいて、その要素の２つ（８ｂｉｔ）ずつに分解される。そして、３次元ベクトルがｒ0 である場合には、データＭとｒ0 （ｘ0 ，ｙ0 ，ｚ0 ）とのＸＯＲ（排他的論理和）により、（ｘXOR ｍ0 ｍ1 ）（ｙXOR ｍ2 ｍ3 ）（ｚXOR ｍ4 ｍ5 ）…といった計算が行われ、この計算結果として、Ｃ0 Ｃ1 Ｃ2 Ｃ3 Ｃ4 Ｃ5 …といった暗号文データＣが得られる。
【００５８】
副プログラムは、このようにして得られたデータＣに対して、さらにｂｉｔ単位でスクランブル２をかける（ステップＥ１６）。こうして得られたデータをＣ´とし、最終的な暗号文データとして出力する（ステップＥ１７）。
【００５９】
なお、前記の処理で、Ｃ´を改めてＭ´と見なして前記同様の暗号化を繰り返すことによって、復号化の困難さのレベルを上げることができる。また、このときの多次元ベクトルｒを生成する関数の形を変えれば、復号化の困難さはさらに増すことになる。
【００６０】
次に、セキュリティデバイス１２ａで実行される復号化の処理動作について説明する。
図６（ｂ）は復号化の処理動作を示すフローチャートである。
【００６１】
復号化は、基本的には前記暗号化処理の逆の処理を行えば良い。
すなわち、暗号文データをＣ´とすると（ステップＦ１１）、セキュリティデバイス１２ａ上の副プログラムは、まず、このデータＣに対してｂｉｔ単位で前記暗号化時に行ったスクランブル２とは逆のスクランブル２をかける（ステップＦ１２）。これにより、スクランブル２をかける前のデータＣが得られる（ステップＦ１３）。
【００６２】
次に、副プログラムは、ＣXOR ｒといった計算を行ってデータＣを復号化する（ステップＦ１４）。これにより、暗号化を行う前のデータＭ´が得られる（ステップＦ１５）。
【００６３】
そして、副プログラムは、このデータＭ´に対してもｂｉｔ単位で前記暗号化時に行ったスクランブル１とは逆のスクランブル１をかける（ステップＦ１２）。これにより、スクランブル１をかける前のデータつまり原文データＭが得られる（ステップＦ１７）。
【００６４】
なお、暗号化の処理で、Ｃ´を改めてＭ´と見なして暗号化を繰り返したり、多次元ベクトルｒを生成する関数の形を変えたりする処理が加わっていれば、その処理に対応させて復号化の処理を行うものとする。
【００６５】
ところで、本発明では、多次元ベクトルｒを用いた暗号化において、多次元ベクトルｒを扱う関数を決定するパラメータ（定数）の集合Ｐを２つの部分に分けて、
Ｐ＝｛Ｐs ，Ｐp ｝
と表わす。ここで、Ｐs は秘密パラメータであり、データベース４１の非公開部分に格納される暗号化キー（秘密キーＰ1 ，Ｐ2 ）に相当する。Ｐp は公開パラメータであり、データベース４１の公開部分に格納される暗号化キー（公開キーＰ3 ，Ｐ4 ）に相当する。Ｐp はＰs と共にユーザ認証とデータの暗号化と復号化に使用される。
【００６６】
なお、本実施形態では、Ｐs を２つ、Ｐp を２つとしているが、パラメータの数はこれに限られないことは明らかである。
次に、本発明の暗号化の方法について、さらに詳しく説明する。
【００６７】
ｎ（ｎ≧１）次元の空間を張るベクトルをｒとし、その初期値ｒ0 から逐次的に新しいベクトルｒi （ｉ＝０，１，２，３…）を発生する関数をＲとする。このとき、ｒi は以下のような式（１）で表わされる。
【００６８】
ｒi ＝Ａ・Ｒ（Ｐ，ｒi-1 ）ｒi-1 ＋ｃ            …（１）
ここで、Ａは適当な定数係数である。Ｐは関数に使用される定数の集合であり、データベース４１の非公開部分に格納される暗号化キー（秘密キーＰ1 ，Ｐ2 ）と、データベース４１の公開部分に格納される暗号化キー（公開キーＰ3 ，Ｐ4 ）が使用される。ｃはベクトルを並進移動する定数ベクトルである。
【００６９】
前記式（１）において、係数Ａは関数Ｒに適当な制約（例えば｜Ｒ｜≦１）を設けたときに、各ベクトルが多次元空間の閉空間領域内に存在するための条件を与える。定数ベクトルｃはベクトルｒi が収斂するとき、「トリビアル」な点（例えばｒ＝０のような無意味な点）にならないことを保証する（勿論ｃ＝０も許される）。
【００７０】
ｎ次元空間では、ベクトルｒはｎ個の要素を持つ。ｒ＝（ｘ1 ，ｘ2 …ｘn ）。計算機上では、数値データ一般に、コンパイラが定義するビット長（ｍ）の精度（例えば８バイト又は６４ビット）で表現されている。したがって、ベクトルの逐次生成法のある瞬間にｎ×ｍのデータの精度でベクトルｒを再現できないと、それに続くベクトルｒは正確には再現できない（あるいはそうなるような関数Ｒを定義する）。これは、ベクトルｒの初期値ｒ0 についても同様で、初期値ｒ0 をｎ×ｍのデータの精度で再現したときにのみ、それに続くベクトルｒ1 ，ｒ2 ，ｒ3 …の再現性が保証される。
【００７１】
本発明の暗号化は、前記式（１）を用いて得られたベクトルｒの成分を、そのデータ定義長に応じて１個乃至複数個並べて、その総ビット長に対応した文字列（１文字あたり８ビットが普通）とビット毎の排他論理演算（ＸＯＲ）を行う。これを第１暗号化とする。これについは、前記図７で述べた通りある。
【００７２】
この手続きは暗号解読への対策となる。この場合、再度式（１）、関数Ｒを変えてて新しいベクトルを発生させ、第１暗号化と同じ手法により暗号化を行っても良い。これを第２暗号化とする。
【００７３】
具体的な例として、ｎ＝２の場合を考える。
まず、ｒi-1 をこの平面に立てた法線の周りにθだけが回転する演算として、Ｒを定義すれば、Ｒは２×２のマトリックスとなり、次のように表わされる。
【００７４】
【数１】
0003773226.tif 000002
【００７５】
この場合、θは一種の媒介変数となっている。すなわち、媒介変数がｒi-1 の関数として与えられ、
θ（ｒ）＝ｆ（Ｐ，ｒ）                      …（３）
で表わされるとき、前記式（２）で表わされる変換は、形式的に前記式（１）で表わされる。
【００７６】
なお、前記式（３）において、Ｐは関数ｆに使われる定数の集合として定義されるものであり、データベース４１の非公開部分に格納される暗号化キー（秘密キーＰ1 ，Ｐ2 ）と、データベース４１の公開部分に格納される暗号化キー（公開キーＰ3 ，Ｐ4 ）が使用される。
【００７７】
このように、逐次的に発生させた多次元空間を張るベクトルｒを暗号化に使うことで、ＲＳＡのような暗号化に比べ、計算機の処理精度や処理能力に依存しない暗号化を実現できる。
【００７８】
また、アプリの追加、変更も容易に行うことができる。
さらに、暗号の解読には、前記式（１）の定数係数Ａ，定数Ｐ（秘密・公開キー），定数ベクトルｃ、そしてベクトルの初期値ｒ0 を正確に与える必要があるため、これは殆ど不可能に近い。
【００７９】
例えば３次元ベクトルを考え、Ｐが５個の定数を含むとすれば、初期値ｒ0 として与えられるべき数値の数は、
１（Ａ）＋５（Ｐ）＋３（ｒ0 ）＋３（ｃ）＝１２
となり、その各々が８桁の実数である場合には、１０-96 の確率で、全てのベクトルが再現される。この確率は殆ど０に近く、暗号解読は不可能に近いことを意味する。
【００８０】
さらに、この発明で用いられる方法では、回転Ｒ（θ）のθを与える関数ｆを明示的に与える必要があり、このことが暗号の復号化をより複雑にしていることを意味する。
【００８１】
なお、前記実施形態では、秘密キーおよび公開キーを定数として決定される関数を用いてベクトルを生成したが、少なくとも公開キーを定数として決定される関数を用いてベクトルを生成するようにしても良い。
【００８２】
また、ベクトル発生の関数を決定する各定数（Ａ，Ｐ，Ｃ）は使用開始時に決めたものを固定的に使い、関数型も固定としたが、例えば関数を決定する定数にパスワード（公開キーの一部として使用される暗号化キー）の依存性を持たせるなどの応用も可能である。以下にその応用例を示す。
【００８３】
（第２の実施形態）
ｎ（ｎ≧１）次元の空間の閉領域内に定義されたベクトルを逐次的に生成し、その生成された各ベクトルが一致しないような関数を用いた暗号化において、その関数を決定する各定数にパスワードの依存性を持たせる。なお、パスワードは、公開キーの一部として用いられるものである。また、関数型は固定とする。すなわち、前記式（１）において、
Ａ→Ａ（Ｋ）
Ｐ→Ｐ（Ｋ）
ｃ→ｃ（Ｋ）
とする。ここで、Ａは定数係数、Ｐは関数に使用される定数の集合（秘密・公開キー）、ｃはベクトルを並進移動する定数ベクトル、そして、Ｋはパスワードである。
【００８４】
パスワードＫはユーザによって入力され、データベース４１の公開部分に格納されている。副プログラムは、このデータベース４１からパスワードＫを読み出し、そのパスワードＫに基づいて前記式（１）の各定数（Ａ，Ｐ，Ｃ）を決定する。そして、これらの定数を用いた関数によって、多次元ベクトルを生成して、データの暗号化を行う。
【００８５】
このように、関数を決定する各定数にパスワードの依存性を持たせることにより、各定数が固定的であった場合に比べ、暗号の安全性をさらに向上させることができる。
【００８６】
（第３の実施形態）
ｎ（ｎ≧１）次元の空間の閉領域内に定義されたベクトルを逐次的に生成し、その生成された各ベクトルが一致しないような関数を用いた暗号化において、その関数を決定する各定数にパスワードおよび実時間の依存性を持たせる。なお、パスワードは、公開キーの一部として用いられるものである。また、関数型は固定とする。すなわち、前記式（１）において、
Ａ→Ａ（Ｋ，ｔ）
Ｐ→Ｐ（Ｋ，ｔ）
ｃ→ｃ（Ｋ，ｔ）
とする。ここで、Ａは定数係数、Ｐは関数に使用される定数の集合（秘密・公開キー）、ｃはベクトルを並進移動する定数ベクトル、そして、Ｋはパスワード、ｔは実時間である。
【００８７】
パスワードＫはユーザによって入力され、データベース４１の公開部分に格納されている。副プログラムは、このデータベース４１からパスワードＫを読み出し、そのパスワードＫと実時間ｔに基づいて前記式（１）の各定数（Ａ，Ｐ，Ｃ）を決定する。そして、これらの定数を用いた関数によって、多次元ベクトルを生成して、データの暗号化を行う。
【００８８】
このように、関数を決定する各定数にパスワードの依存性を持たせ、さらに、各定数に実時間の依存性を持たせることにより、各定数がパスワードだけでなく、実時間によっても変化することになり、暗号の安全性をさらに向上させることができる。
【００８９】
（第４の実施形態）
ｎ（ｎ≧１）次元の空間の閉領域内に定義されたベクトルを逐次的に生成し、その生成された各ベクトルが一致しないような関数を用いた暗号化において、その関数を決定する各定数にパスワードおよび実時間の依存性を持たせる。なお、パスワードは、公開キーの一部として用いられるものである。また、関数型の選択にパスワード依存性を持たせる。すなわち、前記式（１）において、
Ａ→Ａ（Ｋ，ｔ）
Ｐ→Ｐ（Ｋ，ｔ）
ｃ→ｃ（Ｋ，ｔ）
とし、且つ、
Ｒ→Ｒk
とする。ここで、Ａは定数係数、Ｐは関数に使用される定数の集合（秘密・公開キー）、ｃはベクトルを並進移動する定数ベクトル、そして、Ｋはパスワード、ｔは実時間、Ｒは関数である。
【００９０】
パスワードＫはユーザによって入力され、データベース４１の公開部分に格納されている。副プログラムは、このデータベース４１からパスワードＫを読み出し、そのパスワードＫと実時間ｔに基づいて前記式（１）の各定数（Ａ，Ｐ，Ｃ）を決定する。
【００９１】
また、副プログラムは、これらの定数を用いる関数ＲをパスワードＫに応じて選択する。そして、この選択された関数Ｒによって、多次元ベクトルを生成して、データの暗号化を行う。
【００９２】
このように、関数を決定する各定数にパスワードの依存性を持たせ、さらに、各定数に実時間の依存性を持たせ、かつ、関数をパスワードに応じて選択することにより、各定数がパスワードだけでなく、実時間によっても変化し、しかも、それらの定数を用いる関数自体がパスワードにて選択されるため、暗号化の精度をさらに向上させることができる。
【００９３】
（第５の実施形態）
ｎ（ｎ≧１）次元の空間の閉領域内に定義されたベクトルを逐次的に生成し、その生成された各ベクトルが一致しないような関数を用いた暗号化において、その関数を決定する各定数にパスワードおよび実時間の依存性を持たせる。なお、パスワードは、公開キーの一部として用いられるものである。また、関数型の選択にパスワードおよび実時間の依存性を持たせる。すなわち、前記式（１）において、
Ａ→Ａ（Ｋ，ｔ）
Ｐ→Ｐ（Ｋ，ｔ）
ｃ→ｃ（Ｋ，ｔ）
とし、且つ
Ｒ→Ｒk,t
とする。ここで、Ａは定数係数、Ｐは関数に使用される定数の集合（秘密・公開キー）、ｃはベクトルを並進移動する定数ベクトル、そして、Ｋはパスワード、ｔは実時間、Ｒは関数である。
【００９４】
パスワードＫはユーザによって入力され、データベース４１の公開部分に格納されている。副プログラムは、このデータベース４１からパスワードＫを読み出し、そのパスワードＫと実時間ｔに基づいて前記式（１）の各定数（Ａ，Ｐ，Ｃ）を決定する。
【００９５】
また、副プログラムは、これらの定数を用いる関数ＲをパスワードＫおよび実時間ｔに応じて選択する。そして、この選択された関数Ｒによって、多次元ベクトルを生成して、データの暗号化を行う。
【００９６】
このように、関数を決定する各定数にパスワードの依存性を持たせ、さらに、各定数に実時間の依存性を持たせ、かつ、関数をパスワードと実時間に応じて選択することにより、各定数がパスワードだけでなく、実時間によっても変化し、しかも、それらの定数を用いる関数自体がパスワードと実時間に応じてにて選択されるため、暗号の安全性をさらに向上させることができる。
【００９７】
（第６の実施形態）
ｎ（ｎ≧１）次元の空間の閉領域内に定義されたベクトルを逐次的に生成し、その生成された各ベクトルが一致しないような複数の関数を線形結合して新たな関数を定義するものであり、その結合される各々の関数に対し、関数を決定する定数にパスワードおよび実時間の依存性を持たせる。なお、パスワードは、公開キーの一部として用いられるものである。また、関数型の選択にパスワードおよび実時間依存性を持たせる。さらに、線形結合係数にパスワードおよび実時間の依存性を持たせる。
【００９８】
すなわち、ｎ（ｎ≧１）次元の空間を張るベクトルをｒとし、その初期値ｒ0 から逐次的に新しいベクトルｒi （ｉ＝０，１，２，３…）を発生する関数をＲj （ｊ＝０，１，２，３…）としたとき、
ｒi ＝Σj Ｗj （Ｋ，ｔ）｛Ａj （Ｋ，ｔ）Ｒj,k,t （Ｐj （Ｋ，ｔ），ｒi-1 ）＋ｃj ｝                                    …（４）
によって、新しいベクトルを発生させる。
【００９９】
ここで、Ａは定数係数、Ｐは関数に使用される定数の集合（秘密・公開キー）、ｃはベクトルを並進移動する定数ベクトル、そして、Ｋはパスワード、ｔは実時間、Ｒは関数である。また、Ｗは線形結合係数である。
【０１００】
パスワードＫはユーザによって入力され、データベース４１の公開部分に格納されている。副プログラムは、このデータベース４１からパスワードＫを読み出し、そのパスワードＫと実時間ｔに基づいて前記式（４）の各定数（Ａ，Ｐ，Ｃ）を決定する。副プログラムは、複数の関数を線形結した関数Ｒj をパスワードＫおよび実時間ｔに応じて選択する。
【０１０１】
また、この関数Ｒj に用いられる線形結合係数Ｗj をパスワードＫおよび実時間ｔによって決定する。そして、この選択された関数Ｒj によって、多次元ベクトルを生成して、データの暗号化を行う。
【０１０２】
このように、複数の関数の線形結合した新たな関数を用い、各々の関数に対し、関数を決定する定数にパスワードおよび実時間の依存性を持たせると共に、関数の選択にパスワードおよび実時間依存性を持たせ、さらに、線形結合係数にパスワードおよび実時間の依存性を持たせることで、暗号の安全性をさらに向上させることができる。
【０１０３】
（第７の実施形態）
ｎ（ｎ≧１）次元の空間の閉領域内に定義されたベクトルを逐次的に生成し、その生成された各ベクトルが一致しないような関数を用いた暗号化において、関数型は使用者が任意に定義し、本体暗号化アルゴリズムに使用時にダイナミックに結合して使えるようにする。
【０１０４】
すなわち、すでにコンパイル済みの暗号化の「基本プログラム」に、多次元ベクトルを逐次発生させるためにユーザが定義した関数をコンパイルしたものを、全プログラム実行時にダイナミックにリンクして使うようにする。
このようにすれば、ハッカー等の悪意あるユーザによる解読を殆ど不可能にするという効果が期待される。
【０１０５】
【発明の効果】
以上のように本発明によれば、閉空間領域内でベクトルを回転させる関数であって、生成したベクトルに依存して次の回転角θを決定する関数を複数の暗号化キーにより決定し、当該関数により、各成分が所定ビット数からなる多次元ベクトルを逐次的に生成し、暗号化の対象となる原文データと前記ベクトルの成分との排他的論理和演算により、データを暗号化するようにしたため、ＲＳＡ法のような高精度の演算能力を必要とせずに暗号化を行うことができ、しかも、信頼性が高く、アプリケーションの追加、変更が容易な暗号化を実現することができる。
【図面の簡単な説明】
【図１】本発明の一実施形態に係る暗号通信を行うシステムの構成を示す概念図。
【図２】前記システムに用いられるＰＣおよびセキュリティデバイスの回路構成を示すブロック図。
【図３】前記セキュリティデバイス上のデータベースの構成を示す図。
【図４】同実施形態におけるユーザ登録時のＰＣとセキュリティデバイスの処理動作を示すフローチャート。
【図５】同実施形態におけるデータ暗号化時のＰＣとセキュリティデバイスの処理動作を示すフローチャート。
【図６】同実施形態における暗号化および復号化の処理動作を示すフローチャート。
【図７】本発明による多次元ベクトルを用いた暗号化の演算方法を説明するための図。
【符号の説明】
１１ａ，１１ｂ…ＰＣ
１２ａ，１２ｂ…セキュリティデバイス
２１…ＣＰＵ
２２…記憶装置
２３…ＲＡＭ
２４…キーボード
２５…表示部
２６…カードＩ／Ｆ
２７…コネクタ
３１…ＣＰＵ
３２…ＲＯＭ
３３…ＲＡＭ
３４…入力バッファ
３５…出力バッファ
３６…フラッシュメモリ
３７…コネクタ
４１…データベース
【図１】
0003773226.tif 000003
【図２】
0003773226.tif 000004
【図３】
0003773226.tif 000005
【図４】
0003773226.tif 000006
【図５】
0003773226.tif 000007
【図６】
0003773226.tif 000008
【図７】
0003773226.tif 000009