【手続補正書】
【提出日】平成17年3月24日(2005.3.24)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【書類名】 明細書
【発明の名称】共通鍵生成方法、その共通鍵を用いる暗号方法および共通鍵管理方法並びに端末の固体番号による固体認証方法、並びにそれらの方法を実行するプログラム、及びそのプログラムを含む応用ソフトウェア
【特許請求の範囲】
【請求項１】
Java対応携帯電話などの携帯型情報通信端末においてインターネット環境を介して通信される通信文などのデータを暗号化する暗号プログラムで用いる共通鍵の生成方法において、
前記暗号プログラム及び前記共通鍵Kの所要データ量が、前記携帯型情報通信端末に搭載が許容される応用ソフトウェアのデータ量以下であり、
前記暗号プログラムが、カオス関数に基づきキーストリームを生成し、該キーストリームと平文との第１の排他的論理和演算により１次暗号文を生成し、該１次暗号文と２次暗号化用データとの間で第２の排他的論理和演算を行うことにより２次暗号文を生成し、前記第２の排他的論理和演算の結果をデータ空間のデータを指し示すベクトルの方向成分として扱い、該方向成分で指し示されたデータを該ベクトルの量成分として扱い、該ベクトルの量成分に関する論理演算によりベクトルデータを生成し、該ベクトルデータを前記２次暗号化用データとし、
前記カオス関数は、前記共通鍵Kを処理して得たデータをパラメータとする
ことを特徴とする共通鍵生成方法。
【請求項２】
Java対応携帯電話と通称される携帯電話などの情報処理及び情報通信端末においてインターネット環境を介して通信される通信文などのデータを、通信の前に予め暗号化しておくことを機能として有する応用ソフトウェアにおける暗号化のための共通鍵の生成手段において、携帯電話などの情報処理装置及び情報通信端末に搭載できる応用ソフトウェアの絶対容量を制限されている場合においてもその制限内で暗号装置としての機能を十分に発揮できる共通鍵Kを生成するために必要とされる鍵要素を生成する方法であって、
使用者が任意に入力した鍵データのデータ長を、通信環境においても十分な可変長に変換するための機能を有することを特徴とする鍵要素生成方法。
【請求項３】
Java対応携帯電話と通称される携帯電話などの情報処理及び情報通信端末においてインターネット環境を介して通信される通信文などのデータを、通信の前に予め暗号化しておくことを機能として有する応用ソフトウェアにおける暗号化のための共通鍵の生成手段において、携帯電話などの情報処理装置及び情報通信端末に搭載できる応用ソフトウェアの絶対容量を制限されている場合においてもその制限内で暗号装置としての機能を十分に発揮できる共通鍵Kを生成するために必要とされる鍵要素を生成する方法であって、
携帯電話などの情報処理装置及び情報通信端末の持つ固有の番号を鍵要素の一つとして使用する際において、その鍵データのデータ長を、通信環境においても十分な可変長に変換するための機能を有することを特徴とする鍵要素生成方法。
【請求項４】
Java対応携帯電話と通称される携帯電話などの情報処理及び情報通信端末においてインターネット環境を介して通信される通信文などのデータを、通信の前に予め暗号化しておくことを機能として有する応用ソフトウェアにおける暗号化のための共通鍵の生成手段において、携帯電話などの情報処理装置及び情報通信端末に搭載できる応用ソフトウェアの絶対容量を制限されている場合においてもその制限内で暗号装置としての機能を十分に発揮できる共通鍵Kを生成するために必要とされる鍵要素を生成するに方法であって、
使用者が任意に入力した鍵データと、携帯電話などの情報処理装置及び情報通信端末の持つ固有の番号とを合わせた鍵データのデータ長を、通信環境においても十分な可変長に変換するための機能を有することを特徴とする鍵要素生成方法。  
【請求項５】
Java対応携帯電話と通称される携帯電話などの情報処理及び情報通信端末においてインターネット環境を介して通信される通信文などのデータを、通信の前に予め暗号化しておくことを機能として有する応用ソフトウェアにおける暗号化のための共通鍵の生成手段において、携帯電話などの情報処理装置及び情報通信端末に搭載できる応用ソフトウェアの絶対容量を制限されている場合においてもその制限内で暗号装置としての機能を十分に発揮できる共通鍵Kを生成するために必要とされる鍵要素を生成する方法であって、
使用者が任意に入力した鍵データを請求項２に記載の鍵長変換方法によって変換された鍵データと、携帯電話などの情報処理装置及び情報通信端末の持つ固有の番号を請求項３に記載の鍵長変換方法によって変換された鍵データを、平文データPを暗号化するための鍵データとして使用することを特徴とする暗号方法。
【請求項６】
平文Ｐが、Java対応携帯電話と通称される携帯電話などの情報処理及び情報通信端末においてインターネット環境を介して通信される通信文などのデータであるとき、
平文Ｐと、携帯電話などの情報処理装置及び情報通信端末に搭載できる応用ソフトウェアの絶対容量を制限されている場合においてもその制限内で暗号装置としての機能を十分に発揮できる共通鍵Kを生成するために必要とされる鍵要素を生成するに方法おいて、使用者が任意に入力した鍵データを請求項２に記載の鍵長変換方法によって変換された鍵データとの間で第１の排他的論理和演算を行うことにより、平文Ｐの１次暗号文ＥＥを生成し、１次暗号文ＥＥと、携帯電話などの情報処理装置及び情報通信端末の持つ固有の番号を請求項３に記載の鍵長変換方法によって変換された鍵データとの間で第２の排他的論理和演算を行うことにより平文Ｐの最終暗号文Ｅを生成する暗号方法の仕組みを有することを特徴とする応用ソフトウェア内での実装方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、Java対応携帯電話と通称される携帯電話などの情報処理及び情報通信端末に適用され、インターネット等の通信における通信文などのデータを暗号アルゴリズムで暗号化する暗号方法、復号方法、装置、その方法を実行する暗号アルゴリズムのプログラム、そのプログラムを記録した応用ソフトウェアに関する。特に、本発明は、ダウンロード時間や通信コストが増大しないように１０Kというアプリケーションを作り込むには極小とも言えるサイズを応用ソフトウェアであるJavaアプリケーションのプログラム容量に制限を持たせている携帯電話事業者及び端末メーカの携帯電話などの情報処理及び情報通信端末に適用して好適であり、従来はあきらめざるを得なかったセキュリティ機能を実装可能とする軽量なプログラム容量であることを特徴としており、端末の固体番号を用いるためサーバ側での固体認証を行うことなどに関する。また、暗号化に使用する鍵要素を可変長にするを可能とする暗号技術とアプリケーションプログラムへの実装に関する。
【０００２】
【従来の技術】
Java言語（Javaは登録商標）に関する技術の向上などにより、Java対応携帯電話と通称される携帯電話などの情報処理及び情報通信端末において、各事業者の独自に製作したJavaプログラムをダウンロードなどによるインストール及び、インストールしたプログラムを実行すること、またWebサーバとHTTP通信を行うことが可能となった。ただし、携帯電話端末の特徴でもある端末自体の大きさが影響しているためパソコンやPDAと比べてアプリケーションの容量が制限されているのが現状、とくに、世界で初めてJava対応携帯電話を発売開始したNTTDocomo社は、ダウンロード時間や通信コストが増大しないようにプログラム容量を１０Ｋに制限している。１０Kというアプリケーションを作り込むには極小とも言えるプログラム容量は、アプリケーションの機能やユーザ・インターフェースにその容量を取られる為にセキュリティ機能を持たせることはあきらめざるを得ない。
【０００３】
NTTDocomo社では、使用者が各サービスの提供を受けることの要求に際して任意の鍵（通称パスワード）を入力させる方式を採用している。入力すべきパスワードは数字４桁に指定されており、10の4乗つまり10,000通りの検索で入力パスワードが判明してしまう。
【０００４】
携帯電話事業者は、通信している端末が移動しつづけている際においても最適な基地局から電波の受送信が行えるよう、携帯電話番号やユーザID情報などを管理するデータベース（NTTDocomo社では地域レジスタ、ホームレジスタ）を持っている。この情報は一般の企業が取得することが出来る為、Javaアプリケーションを使い、端末を識別できるようにした製品もある。代表的な手法としてワンタイムURLと呼ばれる、動的にURLを生成する技術がある。具体的には、Javaアプリケーション上でパスワードを生成して送信しサーバ側での認証に成功すると予め設定していた携帯電話のメールアドレスに接続用のURLを送る仕組みで、前回ログインしたのと同じ携帯電話機かを認証できるため、たとえパスワードが漏れた場合でも特定の携帯電話機でなければ接続のためのパスワードが生成できない仕組みになっている。ただし、サービス提供側のサーバではサービスリクエスト毎にワンタイムURLを動的に生成する必要があるため処理負荷がかかる。ワンタイムURLについては、後記の参考文献「TAKA72」に詳しい解説がある。
【０００５】
インターネットは、コンピュータのみならず、携帯電話や一般の家電品も接続
できるオープンな環境に発展している。インターネットでは、電子商取引などが
急速な発展を遂げつつある。ここで扱われる情報は、個人データや決済データ等
であり、高い機密性が求められている。そこで、データの漏洩を防ぎ、更にいわ
ゆる成りすましといった情報犯罪から通信の利用者を保護するために、各種の暗
号方式が実用されている。暗号システムは暗号装置と復号装置でなるが、復号装
置は暗号装置と同じ構成で実現できるので、以下では暗号装置を中心に記述する
【０００６】
暗号方式は、鍵の生成方法に関し、共通鍵暗号方式と公開鍵暗号方式との二つ
に大別される。共通鍵暗号方式は、対称暗号方式ともいわれ、暗号化と復号化と
で同じ鍵を用いる。他方、公開鍵暗号方式は、非対称暗号方式ともいわれ、暗号
化と復号化とで互いに異なる鍵を用いる。共通鍵暗号方式は、暗号化および復号
化で使用する鍵が同じであることから、暗号文の通信をするごとに個別の鍵を必
要とするので、共通鍵暗号方式では鍵の管理が煩雑になる。また、暗号化鍵で復
号化ができてしまうので、第三者には秘密裏に鍵を相手に送らなければならず、
鍵の送り方にも注意を必要とする。
【０００７】
共通鍵暗号方式におけるこの欠点を改善した方式が、公開鍵暗号方式である。
公開鍵暗号方式は、独特なアルゴリズムで暗号化および復号化をする方式であり
、互いに異なる暗号化鍵と復号化鍵を用いて、暗号化および復号化を可能にして
いる。この方式では、共通鍵暗号方式の欠点、すなわち鍵管理の煩雑化、および
漏洩の可能性を低くして鍵を送信することの困難性などを気にすることなく、暗
号化および復号化を行うことができる。公開鍵暗号方式は、共通鍵暗号方式に公
開鍵を生成する特殊なアルゴリズムを付加したシステムといえる。この公開鍵暗
号方式は、暗号システムとしての利便性に優れ、暗号強度が高い方式といえるが
、暗号化速度は必然的に遅くなる傾向にある。
一般に、インターネットなどの通信において扱われる通信データを守秘するために個人認証機能を付加する場合は、公開鍵暗号方式を用いられている。ただし、全ての容量が大きく制限されている携帯電話機においては、1)数値演算を必要とする為速度が遅くなる又は同様の理由からプログラム容量が肥大化する  2)一般的な公開鍵暗号方式の実施方法で、長い数列を鍵として運用した場合は、利用者が、長い数列を入力及び認識させる操作を行う事となり、利用者の操作ミスを招く虞がある。
3)公開鍵方式暗号で使用される秘密鍵の生成において、長い数列を鍵として運用する場合で且つ、利用者が、長い数列を入力及び認識させる操作を簡易的に行う場合は、バイオメトリクス技術によって身体一部の感知及び、識別が行える認証デバイスを使用する事となる。認証デバイスは、バイオメトリクス技術によって、身体一部を感知、識別し、本人認証を行った後、公開鍵暗号方式で使用される長い数列を生成及び、選択させる方法で用いられる。この事よって、認証デバイスを携帯していない場合は利用者がサービス受者の許諾を得ているにも関わらず、サービスを受けられない事及び、認証デバイスを安全に管理しなくてはならない管理工数を増大させる事が考えられる。
【０００８】
また、暗号方式は、暗号化するデータの処理方法に関し、ブロック暗号方式とストリーム暗号方式との二つに大別される。辻井重男、笹原正雄編著「暗号と情報セキュリティ」（昭晃堂、１９９０）に記述されている通り、ブロック暗号方式は、数十ビット以上の比較的長いデータブロックごとに暗号化及び復号化を行う暗号方式である。平文ブロックをＭ、鍵ブロックをＫ、暗号文ブロックをＣ、暗号化をＥ、復号化をＤとして表すと、
暗号化：Ｃ＝ＥＫ（Ｍ）
復号化：Ｍ＝ＤＫ（Ｃ）
と表せる。
【０００９】
他方、ストリーム暗号方式は、キーストリーム（鍵ストリーム）と称される擬似乱数を暗号化鍵として平文を暗号化する方式である。ストリーム暗号方式における暗号化および復号化は、１ビット又は数ビット（例えば、１バイト）の小データブロックごとに逐次に行われる。代表的なストリーム暗号方式にバーナム暗号がある。平文を表すシンボル系列をＭ、暗号文を表すシンボル系列をＣ、乱数シンボル系列をＫ、排他的論理和演算の演算子をXORとすると、バーナム暗号は、
暗号化：Ｃ＝Ｍ XOR Ｋ
復号化：Ｍ＝Ｃ XOR Ｋ
と表せる。バーナム暗号における乱数シンボル系列Ｋは、ブロック暗号方式における鍵に相当する。
【００１０】
ブロック暗号方式は平文を固定長に分けて処理するので、暗号アルゴリズム等による暗号化処理における法則性が発見され易く、暗号強度は一般的に低いとされている。一方、ストリーム暗号方式では、暗号化処理における法則性は発見されにくいとされている。しかし、ストリーム暗号方式は、暗号アルゴリズム内部で擬似乱数により平文を暗号化するので、擬似乱数の解読の難易度が暗号強度に直接に影響する。暗号学的に安全性の高い擬似乱数を用いて、ストリーム暗号を構成すれば、ストリーム暗号方式により安全強度の高い暗号システムが構築できる。
【００１１】
ところが、従来の擬似乱数は何れも安全性が欠け、擬似乱数の不十分な安全性がストリーム暗号方式の弱点であり、この弱点は未解決であった。そこで、暗号方式としては、ブロック暗号方式を採用し、ブロック暗号方式においても暗号化処理における法則性が発見されるのを防ぐように、ブロック暗号方式に他の技術を付加した暗号方式が多く開発されている。詳しくは、後記の参考文献[NK97]に説明されている。
【００１２】
暗号方式では、暗号化および復号化のためのデータの処理速度と暗号強度とのバランスが重要である。よく知られた暗号方式として1977年米商務省標準局に採用されたDES(Data Encryption Standard)がある。このDESは、ブロック暗号方式に属し、その基礎技術において既に解読された暗号システムである。現在では解読の困難さを増大するために、同様の暗号処理を３度繰り返して行う3DESに発展している。
【００１３】
その他の暗号方式としてカオス暗号方式がある。カオスについては後記の参考文献[AI90]、[AI00] に詳述されている。カオスとは、混沌を意味するギリシャ語である。カオス暗号方式はカオス関数でカオス信号を発生し、このカオス信号で暗号文を複雑化し、暗号強度を高くする。カオス暗号方式はカオス関数における次の特性を利用している。
（１）初期値に敏感な性質(sensitive dependence on initial condition) がある。
（２）一方向性を有する(one way)。
（３）奇妙なアトラクタ(strange attractor)がある。
カオスのこのような特性を利用するカオス暗号方式は、暗号処理速度が速く、軽量なプログラムで作動し、暗号強度的にも高いといわれている。カオス暗号方式では、暗号系へのカオス関数の実装方法（カオスコーディング法）については、ブロック暗号方式における暗号化関数に用いる手法と、ストリーム暗号方式においてキーストリームの生成に用いる手法とが知られている。
【００１４】
【発明が解決しようとする課題】
Java対応携帯電話と通称される携帯電話などでは、各種技術の飛躍的な向上により旧式パソコン並のデータ処理能力及びデータ通信能力を備えるようになり、端末自体で取り扱うデータ及びサービス提供を受ける際などに通信に用いるデータに必然的に個人情報や機密情報を含むことを求められるようになった。しかしながら、ダウンロード時間や通信コストが増大しないようにすることを目的にプログラム容量を制限されている現在の環境ではそれらのデータにセキュリティを確保させることは困難である。また、SSLを利用可能とした携帯電話端末が登場したことで最低限のセキュリティを確保できるようになったが、現在携帯電話端末に搭載されているCPU性能が低いことがSSLを使用することで処理を非常に遅くするため利用者を不快にさせる。
【００１５】
更に、現在主に使用されているパスワードには比較的短いデータ長の入力鍵ＫＯを暗号鍵として用いていたため、従来の共通鍵を用いて暗号化された暗号文の暗号強度は充分に高いとは言えなかった。例えば、先に０００３段落で述べたように数字４桁程度のパスワードでは10,000通りの検索で入力パスワードが判明してしまうため、解読を試みたときに比較的短い時間に解読される可能性があった。
【００１６】
また、上記のSSLの内で共通鍵暗号として主に使用されている3DESでは、そのアルゴリズムの構造上同様の処理を繰り返し行っているので暗号処理速度が犠牲
になっている。つまり、SSLの使用者は一定の暗号強度を保つために暗号処理速度を落とすという選択を使用者が気づかないうちに行っているのが現状である。電子メールやインターネットの通信が可能な携帯電話機には暗号方式を搭載することが求められる。しかし、3DESの暗号アルゴリズムを実現するコンピュータプログラムは、プログラムのステップ数が多く所要メモリ容量が大きいので携帯電話機に3DESを搭載することは不適切であり、先に００１４段落で述べたようにSSLすなわち3DESなどを使用することで処理を非常に遅くするため利用者の利便性を著しく損なう。
【００１７】
先に００１３段落で述べたカオス暗号方式においては、カオス関数における上述の特性を利用しているので、暗号方式として優れた基本的特性を備えているといえる。しかしながら、従来のカオス暗号方式うちで、ブロック暗号方式は、区分線形性をもつカットマップや、テントマップをそのまま用いるので、カオス暗号方式であっても、差分解読法で暗号文を解読されてしまう。
【００１８】
他方、カオス暗号方式のうちで、カオス信号をキーストリームの生成に用いるストリーム暗号方式では、擬似乱数としてのキーストリームの安全性を向上する必要がある。従来は、そのために、まず鍵をカオス関数の初期値やパラメータに用い、カオス関数で１回目のカオス信号を生成し、次に１回目のカオス信号をそのカオス関数の初期値やパラメータに用いて２回目のカオス信号を生成し、さらに２回目のカオス信号をそのカオス関数の初期値やパラメータに用いて３回目のカオス信号を生成するといった具合に、カオス信号生成手段（本願におけるカオスエミュレータに相当）の入出力間でフィードバックを繰り返し、カオス信号の複雑さを増し、多数回循環させて得たカオス信号をキーストリームとしていた。この従来のキーストリーム生成方法では、カオス信号を循環させる回数だけ処理時間を要し、また何回巡回させたとしてもカオス関数が知られているならば、解読される虞は残る。
【００１９】
カオス信号を基にキーストリームを生成するカオス暗号方式（ストリーム・カオス暗号方式）の暗号強度を向上するために、暗号アルゴリズムの内部に複数のカオス関数を予め用意しておき、暗号化処理の途中でカオス関数を切り換えるストリーム・カオス暗号方式が知られている。この方式の1つの方法では、所定長さの平文（例えば、10,000バイト）毎に適用するカオス関数を切り換えるロジックを暗号ロジックに予め組み入れておく。また別の方法では、カオス関数の切り換え情報を暗号文の途中に挿入する。しかし、所定長さの平文毎にカオス関数を切り換えると、その切り換えのときに暗号文の特徴が変化し、この暗号文の特徴の変化が解読のきっかけとなる可能性がある。他方、カオス関数の切り換え命令を暗号文の途中に挿入すると、その切り換え命令が解読のきっかけとなる可能性がある。このようのに、複数のカオス関数を切り換え適用するカオス暗号方式は、カオス関数を分かりにくくすることにより暗号強度を向上する意図の下に考案されたが、切り換え位置を暗号ロジックに予め組み入れておくにしろ、或いはカオス関数の切り換え命令を暗号文に挿入するにしろ、切り換えに関する情報がかえって暗号強度を低下させる虞が大きい。
【００２０】
また、鍵の情報をカオス関数の初期値とし、浮動小数点で表されるカオス関数の値をカオス信号として生成し、そのカオス信号を基にキーストリームを生成するストリーム・カオス暗号方式では、鍵の値によっては、カオス関数値がゼロ（"０"）近傍または"１"近傍の小さい範囲でのみ変動する。カオス関数値が特定の値の近傍小さい範囲でのみ変動すると、キーストリームにおけるデータの分散範囲が非常に小さくなり、ひいては暗号文におけるデータの分散範囲が小さくなり、暗号強度が小さくなる。
【００２１】
従来の暗号方式では、鍵の長さは固定であった。予め定められた鍵の長さ未満の長さの鍵を入力すると、不足分のデータはゼロ（"０"）とみなされ、ゼロのデータを基にして鍵の解読が容易になり、鍵の強度は著しく低下する。また、所定長さを越える長さの鍵を入力すると、越えた部分のデータは処理されないから、幾ら長い鍵を使ったとしても暗号強度は向上しない。つまり、従来の暗号方式では、暗号強度が固定であり、使用者が任意に設定することはできなかった。鍵の長さが長い暗号方式では暗号強度は高いが、処理速度は遅くなる。そこで、従来の暗号方式では、鍵の長さが固定であることから、利用者の必要に応じて、処理速度と暗号強度とを選択することはできなかった。
【００２２】
そこで、本発明の１の目的は、Java対応携帯電話と通称される携帯電話端末を紛失し或いは一時放置した際にパスワード及び端末固有の番号を盗み取られたとしても、特定パターンが出現する画像データなどのファイルを暗号化する場合にも暗号文においては平文のパターンが現れ難くひいては暗号強度が高い暗号アルゴリズムを使用するため、データが他人に解読されるのを防ぐ暗号・復号方式の提供にある。
【００２３】
本発明の２の目的は、初期設定のための通信の際にパスワード及び端末固有の番号を盗聴された場合においても、パスワード及び端末固有の番号をそのまま使用せずにパスワード及び端末固有の番号にプログラムの保有する固有のデータを付加することにより可変長の暗号鍵要素の生成方法を有する、成りすましによる通信データの送受信を防止する暗号・復号方式の提供にある。
【００２４】
本発明の３の目的は、暗号アルゴリズムをコンピュータプログラムで実現したときにおけるプログラム量が小さく、そのプログラム量が携帯電話機などの携帯型情報通信端末において１つの応用プログラムに許容されている範囲内であり、暗号化速度が速く、しかも暗号強度が高い暗号方法、および復号方法並びにこれら暗号方法及び復号方法を実現するコンピュータプログラム、このコンピュータプログラムを記憶する応用ソフトウェアの提供にある。
【００２５】
【課題を解決するための手段】
前述の課題を解決するために本発明は次の手段を提供する。
【００２６】
（１）Java対応携帯電話などの携帯型情報通信端末においてインターネット環境を介して通信される通信文などのデータを暗号化する暗号プログラムで用いる共通鍵の生成方法において、
前記暗号プログラム及び前記共通鍵Kの所要データ量が、前記携帯型情報通信端末に搭載が許容される応用ソフトウェアのデータ量以下であり、
前記暗号プログラムが、カオス関数に基づきキーストリームを生成し、該キーストリームと平文との第１の排他的論理和演算により１次暗号文を生成し、該１次暗号文と２次暗号化用データとの間で第２の排他的論理和演算を行うことにより２次暗号文を生成し、前記第２の排他的論理和演算の結果をデータ空間のデータを指し示すベクトルの方向成分として扱い、該方向成分で指し示されたデータを該ベクトルの量成分として扱い、該ベクトルの量成分に関する論理演算によりベクトルデータを生成し、該ベクトルデータを前記２次暗号化用データとし、
前記カオス関数は、前記共通鍵Kを処理して得たデータをパラメータとする
ことを特徴とする共通鍵生成方法。
【００２７】
（２）Java対応携帯電話と通称される携帯電話などの情報処理及び情報通信端末においてインターネット環境を介して通信される通信文などのデータを、通信の前に予め暗号化しておくことを機能として有する応用ソフトウェアにおける暗号化のための共通鍵の生成手段において、携帯電話などの情報処理装置及び情報通信端末に搭載できる応用ソフトウェアの絶対容量を制限されている場合においてもその制限内で暗号装置としての機能を十分に発揮できる共通鍵Kを生成するために必要とされる鍵要素を生成する方法であって、
使用者が任意に入力した鍵データのデータ長を、通信環境においても十分な可変長に変換するための機能を有することを特徴とする鍵要素生成方法。
【００２８】
（３）Java対応携帯電話と通称される携帯電話などの情報処理及び情報通信端末においてインターネット環境を介して通信される通信文などのデータを、通信の前に予め暗号化しておくことを機能として有する応用ソフトウェアにおける暗号化のための共通鍵の生成手段において、携帯電話などの情報処理装置及び情報通信端末に搭載できる応用ソフトウェアの絶対容量を制限されている場合においてもその制限内で暗号装置としての機能を十分に発揮できる共通鍵Kを生成するために必要とされる鍵要素を生成する方法であって、
携帯電話などの情報処理装置及び情報通信端末の持つ固有の番号を鍵要素の一つとして使用する際において、その鍵データのデータ長を、通信環境においても十分な可変長に変換するための機能を有することを特徴とする鍵要素生成方法。
【００２９】
（４）Java対応携帯電話と通称される携帯電話などの情報処理及び情報通信端末においてインターネット環境を介して通信される通信文などのデータを、通信の前に予め暗号化しておくことを機能として有する応用ソフトウェアにおける暗号化のための共通鍵の生成手段において、携帯電話などの情報処理装置及び情報通信端末に搭載できる応用ソフトウェアの絶対容量を制限されている場合においてもその制限内で暗号装置としての機能を十分に発揮できる共通鍵Kを生成するために必要とされる鍵要素を生成するに方法であって、
使用者が任意に入力した鍵データと、携帯電話などの情報処理装置及び情報通信端末の持つ固有の番号とを合わせた鍵データのデータ長を、通信環境においても十分な可変長に変換するための機能を有することを特徴とする鍵要素生成方法。  
【００３０】
（５）Java対応携帯電話と通称される携帯電話などの情報処理及び情報通信端末においてインターネット環境を介して通信される通信文などのデータを、通信の前に予め暗号化しておくことを機能として有する応用ソフトウェアにおける暗号化のための共通鍵の生成手段において、携帯電話などの情報処理装置及び情報通信端末に搭載できる応用ソフトウェアの絶対容量を制限されている場合においてもその制限内で暗号装置としての機能を十分に発揮できる共通鍵Kを生成するために必要とされる鍵要素を生成する方法であって、
使用者が任意に入力した鍵データを請求項２に記載の鍵長変換方法によって変換された鍵データと、携帯電話などの情報処理装置及び情報通信端末の持つ固有の番号を請求項３に記載の鍵長変換方法によって変換された鍵データを、平文データPを暗号化するための鍵データとして使用することを特徴とする暗号方法。
【００３１】
（６）平文Ｐが、Java対応携帯電話と通称される携帯電話などの情報処理及び情報通信端末においてインターネット環境を介して通信される通信文などのデータであるとき、
平文Ｐと、携帯電話などの情報処理装置及び情報通信端末に搭載できる応用ソフトウェアの絶対容量を制限されている場合においてもその制限内で暗号装置としての機能を十分に発揮できる共通鍵Kを生成するために必要とされる鍵要素を生成するにおいて使用者が任意に入力した鍵データを請求項２に記載の鍵長変換方法によって変換された鍵データとの間で第１の排他的論理和演算を行うことにより、平文Ｐの１次暗号文ＥＥを生成し、１次暗号文ＥＥと、携帯電話などの情報処理装置及び情報通信端末の持つ固有の番号を請求項３に記載の鍵長変換方法によって変換された鍵データとの間で第２の排他的論理和演算を行うことにより平文Ｐの最終暗号文Ｅを生成する暗号方法の仕組みを有することを特徴とする応用ソフトウェア内での実装方法
【００３２】
【発明の実施の形態】
次に本発明の実施の形態を挙げ、本発明を一層詳しく説明する。
【００３３】
図1は、本発明の一実施の形態の携帯電話システムを示す構成図である。この携帯電話システムはJavaプログラム実行可能携帯電話端末201とデータ守秘サービス提供サーバ202とを備えてなる。図1では、Javaプログラム実行可能携帯電話端末201は１セットだけが示されているが、データ守秘サービス提供サーバ202に接続される同様な構成の携帯電話端末201は、多数存在する。データ守秘サービス提供サーバ202は、ＡＳＰ(Application Service Provider)事業者やＩＳＰ（インターネットサービスプロバイダー）等のごとく、多数のJavaプログラム実行可能携帯電話端末201にインターネットを介してサービスを提供する事業者の施設に設置される。
【００３４】
Javaプログラム実行可能携帯電話端末201は、Javaプログラムの実行が可能な携帯電話端末であり、Java対応携帯電話と通称される携帯電話である。現在実用されているJavaプログラム実行可能携帯電話端末201としては、例えばＮＴＴドコモ社の販売になる503iシリーズの携帯電話がある。Ｊａｖａプログラム実行可能携帯電話端末201は、以下に詳しく説明するように、データ守秘サービス提供サーバ202から暗号／復号プログラムを応用プログラム（ｉアプリ等）の一つとして受信し、インストールする。ｉアプリとは、Java言語で記述されたプログラムであり、503iシリーズ携帯電話などのNTTドコモ社販売のJava対応携帯電話端末で動作する応用プログラムである。
【００３５】
Javaプログラム実行可能携帯電話端末201は、プログラム実行装置203と、プログラム格納装置205と、HTTP通信装置204と、利用者確認応答プログラム206とを備えてなる。プログラム実行装置203及びプログラム格納装置205は、ＣＰＵ（セントラルプロセシングユニット）及びＲＡＭ（ランダムアクセスメモリ）並びにＯＳ（オペレーティングシステム）を含んでなり、応用プログラムのインストール及び実行を可能にしている。HTTP通信装置204はインターネットを介する通信を可能にする。利用者確認応答プログラム206は、利用者が有する携帯電話であることの照合を通信の相手方から求められた場合に、Ｊａｖａプログラム実行可能携帯電話端末201の製造番号および利用者のパスワードを返信し、サービスを受けようとしている携帯電話端末201が登録された正当な利用者により利用されていることの確認を可能にしている。
【００３６】
データ守秘サービス提供サーバ202は、通信管理機能207と、データ守秘管理装置208と、プログラム生成装置209とで構成される。通信管理装置207は、前記ＡＳＰやＩＳＰにおけるウェブサーバに相当し、Javaプログラム実行可能携帯電話端末201との通信を行うHTTP通信装置210と、利用者が有する携帯電話である事の照合を求める利用者確認プログラム211とを有している。
【００３７】
データ守秘管理装置208は、送受信管理プログラム212と、利用者管理データ格納装置213と、守秘データ格納装置214とから構成される。データ守秘管理装置208は、前記ＡＳＰやＩＳＰにおけるデータベースサーバに相当し、データ守秘を目的として送受信されるデータの管理をする。利用者管理データ格納装置213は、サービスの利用を許諾されている利用者に関するパスワードや、そのパスワードの利用者が所有するＪａｖａプログラム実行可能携帯電話端末201の製造番号などのデータを格納している。守秘データ格納装置214は、守秘するデータ（メールで受信した受信データや送信しようとする送信データ）自体を格納している。
【００３８】
プログラム生成装置209は、動的プログラム生成装置215と、システム内固有ID生成装置216と、暗号／復号プログラム217とで構成される。動的プログラム生成装置215は、各利用者固有のデータ（パスワード等）及びシステム内固有IDに基づき、各利用者固有の共通鍵を生成し、この共通鍵を暗号／復号プログラムに埋め込み、各利用者固有の共通鍵でのみ暗号（平文の暗号化）および復号（暗号文の復号）ができる暗号／復号プログラムを生成する。システム内固有ID生成装置216は、データ守秘サービス提供サーバ202が提供する全サービスのうちの特定の種類のサービスを実現するシステム、或いはその全サービスの内の特定のグループ（企業等）向けサービスの如く、ある限定された範囲のサービスを実現するシステムを一意に識別するデータ（以下、システム内固有IDと称する）を生成する。システム内固有IDは、サービス内又はグループ内で任意に決めた固有データ（後述のαやβ）であり、例えば128バイトの乱数である。暗号／復号プログラム217は、ハードディスクに予め記憶されており、共通鍵で平文を暗号化し、また暗号文を共通鍵で復号する暗号／復号アルゴリズムでなる。暗号／復号プログラム217については、後に図８乃至図３０を参照して詳細に説明する。なお、図８乃至図３０を参照して説明する暗号／復号プログラム217は、特願２００１-２０８３８６（出願人：本願に同じ。出願日：平成１３年７月９日）において図１乃至図２３を参照して詳述したものと実質的に同一である。
【００３９】
図２は、本実施の形態の鍵要素（後述のデータα）を生成し、その鍵要素を埋め込んだ暗号／復号プログラムを動的生成プログラムとしてJavaプログラム実行可能携帯電話端末201へ供給する方法を説明する。また、図３は、動的生成プログラムをインターネット経由で図２の方法によって供給された一方のJavaプログラム実行可能携帯電話端末2011が暗号データを作成し、同様に動的生成プログラムを供給された他方のJavaプログラム実行可能携帯電話端末2012へその暗号データを送信し、他方のJavaプログラム実行可能携帯電話端末2012でその暗号データを復号する手順を示す図である。
【００４０】
本実施の形態は、Javaプログラム実行可能携帯電話端末201において入力したデータを暗号強度の高い安全な共通鍵で暗号化して通信の相手方に届け、相手方において暗号文を復号し、元のデータを入手できるようにする方法の提供を目的とする。より詳しくは、利用者がパスワードとして記憶できる４桁程度の簡単な鍵（後述の鍵Ｋ0）を格段に安全な共通鍵に変換する共通鍵の生成方法、この共通鍵を用いる暗号方法、その共通鍵の管理方法および利用者の認証方法の提供が本実施の形態の目的である。
【００４１】
このように、暗号強度が高くしかも利用者固有の共通鍵による暗号通信を望むとき、Ｊａｖａプログラム実行可能携帯電話端末201の利用者は、その利用者固有の共通鍵形成の元となる鍵要素（後述のデータα）が埋め込まれた暗号／復号プログラムのダウンロード要求をデータ守秘サービス提供サーバ202に対し行う。データ守秘サービス提供サーバ202が提供する鍵要素埋込み暗号／復号プログラムは、利用者からの個別の要求の都度にデータ守秘サービス提供サーバ202において生成されるので、動的プログラムと称することにする。以下、動的プログラムのダウンロード要請から動的プログラムのダウンロード完了迄の一連の手順を、図2及び図3を参照して、説明する。図２（図４及び図６でも同じ）では、動的プログラムは単にプログラムと略記してある。
【００４２】
動的プログラムのダウンロード要請301では、Javaプログラム実行可能携帯電話端末201で、利用者認証確認通信302によって、データ守秘サービス提供サーバ側に動的プログラムのダウンロードを要請する。利用者認証確認通信302は、利用者確認応答プログラム206により行われ、利用者のパスワード及びＪａｖａプログラム実行可能携帯電話端末２０１の製造番号が動的プログラムのダウンロード要請に付加して送信される。
【００４３】
データ守秘サービス提供サーバ202側では、ステップ306で、ダウンロード要請元の利用者認証確認を行い、OKであればステップ307以降のステップに進む。利用者認証確認は、利用者確認プログラム211により、利用者のパスワード及びＪａｖａプログラム実行可能携帯電話端末２０１の製造番号につき行われる。利用者のパスワード及びＪａｖａプログラム実行可能携帯電話端末２０１の製造番号は、利用者管理データ格納装置213へ予め記憶されている。ステップ307で動的プログラムの作成を開始し、ステップ308で、任意に決定したデータα（前述のシステム内固有ID）を生成し、ステップ309でαを利用者管理データ格納装置213に保存するとともに、ステップ310で暗号／復号プログラム217にαを埋め込み、動的プログラムの作成を完了する（ステップ313）。
【００４４】
データαは、システム内固有ＩＤ生成装置216において生成する。そのデータαは、任意の値であり、例えば128バイトの乱数であるが、データ守秘サービス提供サーバ202の管理者だけが知り得る値である。ここでいうαは、Javaプログラム実行可能携帯電話端末201において暗号化の際に入力される十分でない長さ（通常４文字桁程度のアルファニューメリック）の鍵を、一つの十分な長さの鍵に変換するためのデータである。以上の方式は、任意データαによって、鍵長補完を行い、共通鍵暗号方式によってJava対応携帯電話と通称される携帯電話でのデータ守秘提供サービスと言える。以下では、この方式の鍵変換方式を鍵長補完方式と称することにする。
【００４５】
以上の手順により作成されたプログラムは、Javaプログラム実行可能携帯電話端末201にダウンロードされ（ステップ303）、プログラムダウンロード確認（ステップ304）の後、プログラムダウンロードプログラムを終了する（ステップ305）。
また、図２の手順で、Javaプログラム実行可能携帯電話端末201にダウンロードする事で、インストールされた、暗号／復号プログラムは、電子メールの守秘を目的として使用され、送信者と受信者間で行われるデータ通信に対し守秘機能を提供する。
本実施の形態は、扱われるデータの守秘機能を暗号化技術によって提供する。本実施の形態の説明では、便宜的にインターネットで扱われる電子メールの守秘を目的とした使用を想定して使用手順を説明するが、本実施の形態によれば他のデータの守秘通信も可能である。
【００４６】
図３のステップ３１０１から３１０８は、図２においてインストールされた動的プログラムによる、平文の暗号化から送信までの流れを表す。
【００４７】
Javaプログラム実行可能携帯電話端末２０１1では、インストールされた、動的プログラムを利用し、暗号化し通信を行う。動的プログラムの利用は、ステップ3101で平文データPの入力を行うことで開始する。ここでは平文データPは、電子メールのデータである。続いて、ステップ3102によって鍵Koを入力する。鍵Koは、４文字程度のアルファニューメリックであり、パスワード等と称される利用者の識別符合である。ステップ3103において、ダウンロードした動的プログラムから、データαを読み込む。ステップ3104では、利用者が入力した鍵Koとデータαとの合成を行い、共通鍵を生成する。この共通鍵は、鍵Ko及びデータαを鍵要素として、新たに生成した鍵である。この合成処理により生成されたデータが共通鍵であり、ステップ3104では共通鍵を[Ko+α]と表記した。この合成方法は、さまざまな方法が考えられる。
【００４８】
例えば、Ko及びαをそれぞれ部分に分割し、所定の規則に沿って各部分を繋ぎ合わせる第１の方法、Koとαを特定の法則で結合処理する第２の方法、及び一方を鍵とし、他方を平文とし、所定の暗号アルゴリズムにより平文を鍵で暗号化する第３の方法などがある。この暗号処理の場合は、Koを鍵とし、αを平文とした暗号処理、及びαを鍵とし、Ko を平文とした暗号処理などの方法が考えられる。この合成によって、利用者が入力した鍵Koが短い場合でも、鍵長を延ばす事で、一定の守秘性を確保する事が出来る。
【００４９】
続いて、ステップ3105において、平文データP（電子メールデータ）をステップ3104で生成した共通鍵で暗号化する。ステップ3105では、前述のバーナム暗号の説明における暗号化および復号化の表記と同様に、ストリーム暗号を[Ko+α] xor P = Eというようにシンボリックに表記したが、この[Ko+α] xor P = E なる式で表されている暗号方法が、後に図8乃至図30を参照して説明する暗号方法である。かくして、ステップ3105において、共通鍵が[Ko+α]である暗号アルゴリズムにより平文Ｐが暗号化され、暗号文Ｅが生成される。暗号文Eを生成した後、ステップ3106によって暗号文E をデータ守秘サービス提供サーバ202に送信する。送信者の操作はステップ3107で完了する。
【００５０】
電子メールデータとして暗号文Ｅを受取ったデータ守秘サービス提供サーバ202は、ステップ3108において通信管理装置207により送受信権限管理を行う。データ守秘サービス提供サーバ202は、送信者及び受信者が、本サービスの利用を許諾されている場合にのみ、データを格納する。電子メール受信者であるJavaプログラム実行可能携帯電話端末２０１２は、ステップ3109において暗号文Eを受信する。Javaプログラム実行可能携帯電話端末２０１２の利用者は、予め鍵Koは知っており、受信した暗号文Eを復号化するために、鍵Koをステップ3110で入力する。
【００５１】
図３のステップ３１０９から３１１４では、図２においてインストールされた暗号／復号プログラムによる暗号文Ｅの受信から復号までの流れを表す。
ステップ3111において、ダウンロード前に動的に生成された応用プログラムである暗号／復号プログラムの内部からデータαを読み込む。以下の手順は、Ｊａｖａプログラム実行可能携帯電話端末2011における暗号化処理と同様の処理を行う。ステップ3112で行うKo+αの合成は、ステップ3104と同様であり、ステップ3113で行う復号化処理もシンボリックな表記を行っているが、ステップ3105の逆処理を行う事で、暗号文Ｅを復号化し、平文データP（電子メール）を生成する。Ｊａｖａプログラム実行可能携帯電話端末2012の利用者は、平文データPが見ることができる。以上のデータの受信・復号処理が守秘性を確保しながら処理され、一連の操作手順をステップ3114で終了する。
【００５２】
つぎに、Ｊａｖａプログラム実行可能携帯電話端末201固有のIDを認証に使用する方法を説明する。
【００５３】
携帯電話においては、携帯電話に一意に固有な識別子として存在する製造番号を確認し、携帯電話の個別認証を行う機能（以下、固体認証と称す）が開発され、提供されている。この固体認証機能の優れた点は、個々の携帯電話を識別出来、個々の携帯電話を認証する事で、簡易的にサービス許諾を行える点にある。しかし、携帯電話提供事業者の提供サービスは、各社ごとに異なり、統一した応用ソフトウェアでの対応は難しい。
【００５４】
日本国内で提供されているJava対応携帯電話と通称される携帯電話の提供事業者である、株式会社エヌ・ティ・ティ・ドコモ、KDDI株式会社、ジェイフォン株式会社の主な三社の提供サービスでは、ダウンロード形式でインストールされた応用ソフトウェアに関し次のような使用制限がある。
１）株式会社エヌ・ティ・ティ・ドコモでは、製造番号の呼出しが許可されていない。
２）KDDI株式会社では、製造番号の呼出しが許可されている。
３）ジェイフォン株式会社では、認定されたサービス提供者のみに、製造番号の呼出しが許可されている。
【００５５】
上記携帯電話提供事業者の提供サービスは、現状（2002年3月27日現在）の内容であるが、今後も変更される虞があり、統一の応用ソフトウェアでデータ守秘機能を対応できる事が望ましい。
この様に固体認証の許容内容を異にするＪａｖａプログラム実行可能携帯電話端末201相互間での暗号通信は、本発明においては鍵に使用される鍵要素の適切な選択により、可能となる。
以下、固体認証機能を用いる本発明の実施の形態を説明する。
【００５６】
図４を参照し、動的生成プログラム生成における固体認証機能を用いた場合の鍵要素生成方法を示す。この鍵要素生成方法では、図２におけるデータ守秘サービス提供サーバ202における動的生成プログラム312に代えて、図4の動的生成プログラム312ａを用いる。図2におけるその他の構成は変更しないで、動的生成プログラム312ａを用いることにより、固体認証機能追加を行う。
【００５７】
ステップ306における送信データ元の利用者認証確認を終え、動的生成プログラム312ａのステップ3201において動的プログラムの作成が開始される。図２の動的生成プログラム312と比較してわかる通り、ステップ3202において、予め保存しておいたＪａｖａプログラム実行可能携帯電話端末201固有のID（製造番号又はその他の端末固有の識別番号）を読み出し、ステップ3203で固有データβを生成し、ステップ3204でβを保存し、ステップ3205でIDとβを合成することにより合成データ[ID＋β]を生成し、ステップ3206で暗号／復号プログラム3207に[ID＋β]を埋め込み、固有の鍵要素[ID＋β]を埋め込んだ暗号／復号プログラムの作成を完了する。
また、ここでいうβは、十分でない長さのIDを、一つの十分な鍵長に変換するためのデータであり、前述のαと同様なデータである。更に、βは、使用者側の認識によって設定することにより、一つのより十分な鍵長に変換するなど、様々な設定方法が考えられる。
【００５８】
以上のように、図４の動的生成プログラム312ａを採用することにより、携帯電話などの情報処理端末の持つ固有のIDを暗号／復号プログラム内部に埋め込む事で、ダウンロード形式でインストールされた応用ソフトウェアの使用制限として、製造番号の呼出しを許可されていない場合でも、端末固有のIDを認証に使用する事を可能にする。
【００５９】
図５の３３０１から３３０８では、図４においてインストールされたプログラムにおける、暗号から送信までの流れを表す。
【００６０】
図５は、図３の鍵長保管方式による鍵要素を変更した実施方法である。
図３からの変更ステップは、Javaプログラム実行可能携帯電話端末２０１1では、図３のステップ3102による鍵Koの入力が、図５のステップ3302の端末固有IDaに変更されている点、図３のステップ3103によるサービス内及びグループ内で固有なデータであるαの読込みが、図５のステップ3303によるサービス内及びグループ内で固有なデータであるβの読込みに変更されている点である。
【００６１】
当然、生成される鍵要素が異なる為、図３のステップ3104の鍵要素合成処理と、図５のステップ3304の鍵要素合成処理は異なるが、同一の合成方法で対応出来る為、利用者の処理速度は、まったく同一である。以降、図３のステップ3105の暗号化処理と、図５のステップ3305の暗号化処理は異なるが、本発明で使用する暗号技術が同一である為、処理速度は変わりなく、利用者の利便性を損なう虞は無い。
【００６２】
また、この実施方法の優れている点は、前記で説明した携帯電話提供者の提供サービスが異なる機能を、動的生成プログラム312によって、統一した応用ソフトウェアで同一のデータ守秘サービスを提供出来る点にある。この方式は、動的生成プログラムによって、前記で説明したワンタイムURL方式とは異なり、応用プログラム起動及び終了の操作を2度も行わず処理出来る為、利用者の利便性を損なわない点もある。
【００６３】
図５の３３０８から３３１２では、図４においてインストールされたプログラムにおける、データ守秘サービス提供サーバでの処理の流れを表す
データ守秘サービス提供サーバ202のステップ変更については、以下の手順で処理される。
【００６４】
図３のステップ3108と同様に、図５のステップ3308によって、送受信権限管理を行い、送信者及び受信者が、本サービスの利用を許諾されている場合にのみ、データを格納する。
【００６５】
Javaプログラム実行可能携帯電話端末２０１1で暗号処理に使用されたIDa及び、β1をデータ守秘サービス提供サーバ202内の利用者管理データ格納装置213から検索するステップ3309を経て、ステップ3310によって、一度復号化を行う。一度復号化を行うが、データ守秘サービス提供サーバ202内の同一プログラム内部、受送信管理プログラム212において再度、暗号化処理する為、データの守秘性を劣化するものではない。データ守秘サービス提供サーバ202内では、Javaプログラム実行可能携帯電話端末２０１２用のIDb及び、β2をデータ守秘サービス提供サーバ202内の利用者管理データ格納装置213から検索し、ステップ3312によって再暗号化処理を行う。
この処理によって、データ守秘サービス提供サーバ202の処理負荷が考えられるが、本開発で利用する暗号技術の高速性によって、利用者が感じる一連の処理に要する時間を軽減出来、ワンタイムURL方式の速度よりも高速に行え、利用者の利便性を損なうものではない。
【００６６】
同じ様に、Javaプログラム実行可能携帯電話端末２０１２においても変更ステップは、図３のステップ3109の鍵Ko入力を、図５のステップ3314端末固有IDb読込みに変更。図３のステップ3110の固有データα読込みを、図５のステップ3315固有データβ読込みに変更。図３のステップ3111の鍵要素合成処理を、図５のステップ3316によって異なる鍵要素合成処理に変更。
図３のステップ3112の復号化処理を、図５のステップ3317異なる鍵要素から生成されたデータによって復号化処理に変更。
【００６７】
以上の変更ステップは、本発明で使用する暗号技術を用いることで、暗号化の逆処理を行う事で実現出来る事は、先に説明した通りである。
この一連の手順によって、固体認証機能を用いた実施が実現出来る。
この実施方法での優位性は、固体認証機能を用いた事以外にも、先に説明した鍵長補完方式との連動を図れる事にある。
【００６８】
先に説明した鍵長補完方式では、システム内及びグループ内で任意に決定したデータαであったが、固体認証機能を用いた実施方法では、β1及びβ2という様に個々の利用者及び、個々の携帯電話でサービス利用を許諾管理出来るデータであるβを使用している。データ守秘サービス提供サーバ202では、データ守秘サービス提供サーバ202内の利用者管理データ格納装置213を検索し、固有データがαか否かによって、鍵長補完方式と、固体認証方式との違いを識別出来る。つまり、グループ内を横断してデータ守秘通信を行える為、送信端末が、鍵長補完方式であり、受信者が固体認証方式である場合にも、又は送受信で使用される方式が逆である場合にも、サービス利用を許諾されていれば、相互に通信が出来る構成になっている点である。
【００６９】
上記に説明した固体認証方式についての改良点は、端末固有ID及び固有データβを鍵として暗号化処理を行う為、サービス利用を許諾管理をパスワードによって管理しなければならない点である。以下、この点を改善した、鍵長補完方式と、固体認証方式との融合方式で実施方法を説明する。
【００７０】
図６において、動的生成プログラム生成において、鍵長補完方式と固体認証方式とを融合した場合の鍵要素生成方法を示す。図２に説明した動的生成プログラム312の変更した構成の動的生成プログラム312ｂを図６に示す。
【００７１】
図４での説明と同様に、送信データ元の利用者認証確認を終えて、プログラムの作成が開始3401される。ステップ3402において、サービス内及びグループ内で任意に決めた固有データαを生成し、ステップ3403でαを保存用に書き込み、ステップ3404で、予め保存しておいた携帯電話などの情報処理端末の持つ固有のIDを読み出し、ステップ3405で、サービス内及びグループ内で任意に決めた固有データβを生成し、ステップ3406でβを保存用に書き込みつつ、ステップ3407でIDとβを合わせ、ステップ3408で先に3402で生成したαと先に3407で生成したID＋βとを組み合わせて組み合わせたデータをサービス内のプログラムデータ3409に埋め込み、プログラムの作成を完了する。
【００７２】
また、ここでいうαは、Javaプログラム実行可能携帯電話端末で意図的に入力される十分でない長さの鍵長を、一つの十分な鍵長に変換するためのデータである。更に、αは、使用者側の認識によって設定することにより、一つのより十分な鍵長に変換するなど、様々な設定方法が考えられる。
【００７３】
更に、ここでいうβは、十分でない長さのIDを、一つの十分な鍵長に変換するためのデータである。更に、βは、使用者側の認識によって設定することにより、一つのより十分な鍵長に変換するなど、様々な設定方法が考えられる。
また、さらに、任意の可変長に変換しうるα及びβもしくはαとβの組み合わせは、鍵要素の生成に限らす、鍵要素を暗号化しての保存及び、段階的な平文データの暗号化に使用するなど、様々な使用方法が考えられる。
【００７４】
図７の３５０１から３５０９では、図６においてインストールされたプログラムにおける、暗号から送信までの流れを表す。Javaプログラム実行可能携帯電話端末２０１1では、図3と比べた場合、ステップ3102の鍵Ko入力及び、ステップ3103の固有データαの読込み及び、図7では、それぞれのデータ合成を割愛しているが、Ko及びαを鍵要素として暗号化処理するまでは、図3のステップ3105と、図7のステップ3504で示す通り、鍵長補完方式とまったく同じ手順を踏む。暗号化されたデータは、一時暗号化データであり、以降Eとして処理される。
【００７５】
以下同様に、図7のステップ3503のIDa及び、β1の読込みは、それぞれ図5のステップ3302及び、3303に対応している。やはり、図7では、それぞれのデータ合成を割愛しているが、IDa及び、β1を鍵要素としての暗号化処理は、図5のステップ3305と、同様であり、固体認証方式の手順を踏む。以降、二重化されたデータは、Exとして処理される。
つまり、双方の利点を活かす為、鍵長補完方式で一度暗号化処理を行い、固体認証方式で再度暗号化処理を行う。この二重暗号化データをデータ守秘サービス提供サーバ202に送信し、暗号処理及び送信処理は、完了される。
【００７６】
図７の３５０９から３５１３では、図６においてインストールされたプログラムにおける、データ守秘サービス提供サーバでの処理の流れを表す。
暗号化データを受けたデータ守秘サービス提供サーバ202は、データ守秘サービス提供サーバ内の利用者管理データ格納装置213を検索し、送受信権限管理を行うステップ3509を介し、送信者及び受信者が、本サービス利用の許諾確認を行い、各固有データを検索するステップ3510を行う。ステップ3511において、復号化処理を行うが、この状態でも暗号化されたデータEである。続いて、ステップ3512において送信者の各固有データを検索し、3513によって、送信者の各固有データを鍵要素として再度暗号化を行う。
【００７７】
図７の３５１４から３５２０では、図６においてインストールされたプログラムにおける、受信から復号までの流れを表す。Javaプログラム実行可能携帯電話端末２０１２では、先に説明した暗号化処理の逆処理を行う。二重に暗号化されたデータEyをステップ3514で受信し、Javaプログラム実行可能携帯電話受信端末2012固有のデータを、ステップ3515によって読込み、ステップ3516で復号化処理を行う。二重に暗号化されたデータEyを単なる暗号化データEにする事で、以降の処理は、、鍵長補完方式と同様の復号化処理を行う。ステップ3517の鍵Ko入力、Javaプログラム実行可能携帯電話端末２０１２固有のデータαを読込んで、ステップ3519によって復号化処理を完結出来、平文データPである電子メールデータを受信者が確認出来る。
【００７８】
図９には、その暗号方法を実行する暗号アルゴリズムにおける暗号化の手順を示すが、図３および図５および図７の処理で生成された共通鍵Ｋは図９におけるステップ１の鍵（Ｋ）入力に引き継がれる。図１０は、図９の暗号方法を実現する暗号装置の構成を示すが、図３および図５および図７の処理で生成された共通鍵Ｋは図１０の鍵（Ｋ）入力部１０１において用いられる。即ち、図３および図５および図７における共通鍵Ｋは図９乃至図３０における鍵Ｋに相当する。
【００７９】
図９は、本発明の一実施の形態である暗号方法における処理の手順を示す図である。この暗号方法は、共通鍵方式のストリーム暗号方式であり、またカオス関
数によりカオス信号を生成し、このカオス信号をキーストリームの生成に用いる
のでカオス暗号方式である。そしてこの暗号方法は、Ｊａｖａ言語などのコンピ
ュータプログラミング言語で暗号アルゴリズムとして記述される。この暗号アルゴリズムのプログラムは、Java対応携帯電話機などにインストールする応用ソフトウェアの内部に搭載される。図１０は、図９の暗号方法を実行する暗号装置である。この暗号装置は、Java対応携帯電話機などにインストールする応用ソフトウェア内部の暗号プログラム及びこの暗号プログラムを実行するハードウエアでなる。
【００８０】
図９において符号１〜９及び１１は、暗号方法の構成要素である処理のステップを表す。これらの各処理は、図１０における対応する手段で実行される。図９において、ステップ１は鍵（Ｋ）入力、ステップ２はデジタルカオス信号Ｃを生成するカオスエミュレーション、ステップ３はカオスフィルタリング、ステップ４は鍵初期変換、ステップ５はキーストリーム（Ｋｓ）生成、ステップ６は平文（Ｐ）入力、ステップ７は１次暗号化、ステップ８は内部ベクトル（Ｖ）生成、ステップ９は２次暗号化、ステップ１１は暗号文(EE)出力である。また、図１０の暗号装置は、鍵（Ｋ）入力部101、デジタルカオス信号Ｃを生成するカオスエミュレータ102、カオスフィルタ103、鍵初期変換部104、キーストリーム（Ｋｓ）生成部105、平文（Ｐ）入力部106、１次暗号化部107、内部ベクトル（Ｖ）生成部108、２次暗号化部109及び暗号文(EE)出力部111でなる。
【００８１】
ステップ１では、λバイト（λは、１以上の任意の正の整数、）の共通鍵Ｋを入力する。共通鍵Ｋの入力方法には、キーボードから手動で順次に１バイトごとに入力する方法や、或いはハードディスクなどの記憶手段に鍵Ｋを予め記憶しておき、この暗号方法を実行する際にその記憶手段から読み出す方法などがある。ステップ２のカオスエミュレーションでは、鍵Ｋに基づきμバイト（μは２以上の正の整数）の非線形デジタルカオス信号（本明細書では、非線形デジタルカオス信号は「デジタルカオス信号」と簡潔に表記する）をλ組だけ生成する。デジタルカオス信号Ｃは、λ組のデジタルカオス信号（μバイト）全体である。ステップ３のカオスフィルタリングでは、λ組のデジタルカオス信号を処理し、μバイトのデジタルカオス信号を１つだけ生成し、デジタルカオス信号Ｃdとして出力する。
【００８２】
ステップ４の鍵初期変換では、ステップ１で入力した鍵Ｋについて処理を加え、ξバイト（ξは２以上の正の整数）のサブキーセットＬを生成する。ステップ５のキーストリーム生成では、デジタルカオス信号Ｃd及びサブキーセットＬに基づきηバイト（η＝μ＋ξ）のキーストリームＫｓ（前述の内部鍵に相当）を生成する。キーストリームＫｓは、キーストリーム生成部105におけるキーストリームテーブル［Ｋs］に保存される。平文Ｐのバイト数がηを越えるときは、キーストリームテーブル［Ｋs］からηバイトのキーストリームＫｓを繰り返し出力することにより、平文Ｐの暗号化に要するバイト数だけのキーストリームが生成される。
【００８３】
鍵は暗号結果（暗号文）に多大な影響を与える。そこで、何らの変換も加えない鍵で、そのまま平文の暗号化処理をしたのでは、暗号文の暗号強度が弱く、望ましくないとされている。例えば、前述のＤＥＳは、鍵におけるパリティビットを除去した後、ビットシフト及びビット拡張を行い鍵を変換している。本実施の形態では、ステップ２乃至５の処理により、鍵ＫをキーストリームＫsに変換している。
【００８４】
ステップ６の平文入力では、暗号化しようとするデータ（平文Ｐ）を入力する。暗号化しようとする平文Ｐは、テキストデータ、図形データ、画像データ、音声データなどである。ステップ７の１次暗号化では、平文ＰとキーストリームＫｓとの排他的論理和演算により、１次暗号文Ｅ１を生成する。
【００８５】
内部ベクトル生成部108は、ベクトルデータテーブル［Ｖ］を有し、ベクトルデータテーブル［Ｖ］にベクトルデータ初期値を予め記憶している。ベクトルデータテーブル［Ｖ］は、前述の２次暗号化用データテーブルに相当し、ψ個の項目（升目）を有し、各項目にρバイトのベクトルデータがそれぞれ記憶される。ステップ８の内部ベクトル生成では、ベクトルデータテーブル［Ｖ］における最初のρバイトのベクトルデータ初期値Ψ(１)を読み出す。ステップ９の２次暗号化では、まず１次暗号文Ｅ１における先頭のρバイトのデータＥ１(１)につき、ρバイトのベクトルデータ初期値Ψ(１)で排他的論理和演算を行い、ρバイトの２次暗号文Ｅ２(１)を生成する。
【００８６】
内部ベクトル生成８では、図９において破線で示すように、ρバイトの２次暗号文Ｅ２(１)を受け、このρバイトの２次暗号文Ｅ２(１)をベクトルの方向成分ＩＲとして認識する。ここで、方向成分の符号ＩＲは、後述のように、この方向成分により仮想データ空間内のデータを不規則に参照すること（不規則な参照：Irregular Reference）に因んでいる。方向成分ＩＲは、キーストリームテーブル［Ｋs］におけるアドレスＩＲのデータＫs（IR）を指し示す。内部ベクトル生成８では、キーストリームテーブル［Ｋs］からそのデータＫs（IR）を読み出し、データＫs（IR）をベクトルの量成分と認識し、該量成分のデータＫs（IR）に論理演算（前述の第１の論理演算に相当）を施し、ρバイトのベクトルデータＶ(１)を生成し、ベクトルデータテーブル［Ｖ］における最初から１番目のρバイトのベクトルデータ初期値Ψ(１)をベクトルデータＶ(１)で置換する。
【００８７】
２次暗号化（ステップ９）では、最初から２番目のρバイトのベクトルデータ初期値Ψ(２)と次のρバイトの１次暗号文Ｅ１(２)との排他的論理和演算により次のρバイトの２次暗号文Ｅ２(２)を生成する。以下同様に１次暗号文Ｅ１につきρバイト毎に２次暗号化を繰り返し、１次暗号文Ｅ１と同じバイト数の２次暗号文Ｅ２を生成する。ベクトルデータ初期値としてρバイトのデータがψ個あるとすると、１次暗号文Ｅ1における最初からψ個分のρバイトデータ（ρ＊ψバイトのデータ）はベクトルデータ初期値Ψとの排他的論理和演算で２次暗号化される。そして、１次暗号文Ｅ1における続くψ＋１個分のρバイトデータ及びそれ以降については、ベクトル方向成分ＩＲにより指定されたデータＫs（IR）に関する論理演算により生成された内部ベクトルデータＶ（１）,Ｖ（２）,Ｖ（３）, ・・・・・,Ｖ（ｎ）,・・・・・,Ｖ（ψ）との排他的論理和演算で２次暗号化される。これらの内部ベクトルデータＶ（１）,Ｖ（２）,Ｖ（３）, ・・・
・・,Ｖ（ｎ）,・・・・・,Ｖ（ψ）はρバイトの２次暗号文Ｅ2毎に順次に更新
される。
【００８８】
上述のように、内部ベクトル生成8では、ベクトルの方向成分ＩＲでキーストリームテーブル［Ｋs］のデータを指し示すこととした。しかし、本発明では、ベクトルの方向成分ＩＲで指し示すデータは、キーストリームテーブル［Ｋs］のデータに限る必要はない。暗号アルゴリズムで扱われるデータであって、共通鍵Ｋ、平文Ｐ若しくは該アルゴリズムに予め設定されている初期値又は共通鍵Ｋ、平文Ｐ若しくは該初期値の処理により生成されたデータの集合を仮想データ空間として捉え、ベクトルの方向成分ＩＲで指し示すデータの範囲を仮想データ空間に拡大しても差し支えない。但し、以下に説明を続ける実施の形態では、ベクトルの方向成分ＩＲはキーストリームテーブル［Ｋs］のデータを指し示すものとし、説明を簡略化する。
【００８９】
この実施の形態では、ステップ８，９の処理により、２次暗号化（ステップ９）を終えたときに初めて生成されるρバイトの２次暗号文Ｅ２をベクトルの方向成分ＩＲとし、ベクトルの方向成分ＩＲでキーストリームテーブル［Ｋs］内のデータＫs(IR)を指し示し、データＫs(IR)に演算を施すことにより得た演算値を次のρバイトのベクトルデータとする点に本実施の形態のおける１つの特徴がある。
【００９０】
本実施の形態では、カオスエミュレータ１０２によるデジタルカオス信号Ｃ、ひいてはこのデジタルカオス信号Ｃに基づき生成するキーストリームＫs及び内部ベクトル生成部１０８による内部ベクトルデータＶを用いた暗号化をすることに暗号強度の根拠を置いている。従来のＤＥＳでは、繰り返し処理の多さにより暗号強度を保っていたから、暗号速度が遅く、コンピュータにおいて占めるプログラム容量も大きかった。これに対し、本実施の形態における暗号化上の主要な構成要素である、カオスエミュレータ１０２及び内部ベクトル生成部１０８は何れも高速処理が可能であるから、本実施の形態の暗号アルゴリズムはコンピュータプログラムで実現したときにおけるプログラム量が小さく、携帯電話機にも容易に搭載でき、暗号化速度が速く、しかも暗号強度が高い。
【００９１】
次に、図９及び図１０を参照して以上に説明した本発明の実施の形態である暗号方法および暗号装置を、図８及び図１２〜図１８を参照し一層具体的に説明する。図８は、図９及び図１０に示した実施の形態の暗号方法および装置におけるベクトルデータ生成方法を示す概念図である。図１１は、iを横軸にとり、 X(i)を縦軸にとってロジスティック写像の不規則性を例示する図である。図１２は、X(i)を横軸にとり、X(i+1)を横軸にとって表したロジスティック写像の特性図である。図１３は、図１０に示した暗号装置におけるカオスエミュレータ１０２の構成を示す図である。図１３は、図１０に示した暗号装置におけるカオスエミュレータ１０２とカオスフィルタ１０３との間のデータの流れを示す概念図である。図１４は、図１０に示した暗号装置におけるカオスフィルタ１０３におけるデータの処理を部分的に示す概念図である。図１６は、図１０に示した暗号装置において、カオスエミュレータ１０２から送られたデータに関しカオスフィルタ１０３で行う処理を示す概念図である。図１７は、図１０に示した暗号装置においてサブキーセットＬを生成する鍵初期変換部１０４の構成、およびキーストリーム生成部１０５に入力され攪拌されるカオス信号Ｃｄ及びサブキーセットＬの関係を示す図である。図１８は、図１０の暗号装置におけキーストリーム生成部１０５で行われるカオス信号ＣｄとサブキーセットＬとの攪拌処理を示す概念図である。
【００９２】
まず、以後の説明における文や参照する図に用いる表記方法を説明する。データに関し、Ｃ(1)，Ｃ１２８(1)，Ｃｄ，Ｅ２(１)などと表記する。このデータ表記において、アルファベット１文字目（例えば、"Ｃ"）や添え字（例えば、Ｃｄにおける"ｄ"やＥ２(１)における"２" 等）付きアルファベットは、一定の名称を付して認識される一群のデータ（例えば、デジタルカオス信号）を表し、続きの数字（例えば、"１２８"）は、バイト長を表す。アルファベットの次に数字の明記がない場合は、バイト長は1byteとする。括弧内の数字（例えば、Ｃ(1)における"１"やＥ２(１)における"(１)"）は、該当する処理に入力されたデータにおいて先頭から何番目に位置するかを表す。括弧内の数字がない場合は、先頭や順番の区別なく、一塊として処理されるデータであることを意味する。本実施の形態におけるデータは原則としてバイト（byte,８ビット）単位で処理される。そこで、本実施の形態では、先頭から何番目のデータであるかを括弧内の数字で表すとき、原則として、その数字は先頭から第何番目のバイトのデータであるかを表す。
【００９３】
本実施の形態では、共通鍵Ｋの長さはλバイトであり、λは１以上の任意の整数である（１以上には1を含むものとし、他の説明個所における「以上」は同様な意味とする）。暗号技術にとって鍵の長さλは重要であり、鍵長λが長い程、暗号文におけるデータの変動範囲が広くなり、暗号強度は高くなる。また、鍵長λが可変であれば、即ち暗号装置の利用者が鍵長λを任意に選択できれば、暗号文におけるデータの変動範囲が飛躍的に広くなる。悪意ある第三者が総当攻撃をもって暗号文の解読を試みる場合は、鍵長λが可変であれば、総当するべき鍵の範囲が固定長鍵に比べて広くなるから、可変長鍵の暗号方式は総当攻撃に対しても強固な暗号技術であるといえる。鍵の長さが暗号強度に直接的に影響することは、米国での暗号技術の輸出規制「武器輸出規制Title 22, Code of Federal Regulations,  Parts120-131(International Traffic of Arms Regulations - ITAR)」が一定長さ以上の鍵の暗号方式に適用されることからも明らかである。
【００９４】
図１３は、図１０に示した暗号装置におけるカオスエミュレータ１０２の構成を示す図であり、１０２１は鍵分割部、１０２２は初期値演算部、１０２３はカオス関数演算部である。カオスエミュレータ１０２は、共通鍵Ｋを入力し、図９におけるカオスエミュレション２の処理を行い、デジタルカオス信号Ｃを生成する。
【００９５】
カオスエミュレータ１０２に入力されるデータは、鍵Ｋである。鍵Ｋは、バイト単位で処理されるデータであり、ここではλバイトする。１バイト（８ビット）のデータを16進数で表記すると、00〜ＦＦまでの256通りの値が有り得るが、この実施の形態における鍵Ｋとしては、01〜ＦＦまでの255通りの値が許容される。λバイトの鍵Ｋは、鍵分割部１０２１において1バイト〜8バイトの任意長の部分鍵に分割される。部分鍵のバイト数をνとする（１≦ν≦λ）。例えば、λ＝１０であり、Ｋ＝1234567890であり、ν＝２であれば、鍵分割部１０２１は鍵Ｋを12,34,56,78,90なる５つの部分鍵に分割する。以下の説明および添付の図面では、ν＝１として、λバイトの鍵ＫはＫ(1), Ｋ(2), Ｋ(3),・・・・・,Ｋ(ｎ),・・・・・,Ｋ(1-λ), Ｋ(λ)というλ個（この実施の形態では、ν＝１としたから、前述のΛはλと等しくなる）の部分鍵に分割される（１≦ｎ≦λ）。
【００９６】
初期値演算部１０２２は、ベース（Base）値を予め記憶しており、鍵分割部１０２１から供給される部分鍵Ｋ(1), Ｋ(2), Ｋ(3),・・・・・,Ｋ(ｎ),・・・・・,Ｋ(1-λ), Ｋ(λ)を順次にオフセット（Offset）値として入力し、ベース値にオフセット値をそれぞれ加算する加算演算を行う。初期値演算部１０２２における加算演算により生成された加算値は、カオス関数演算部１０２３におけるカオス関数の初期値initとしてカオス関数演算部１０２３に供給される。
【００９７】
カオス関数演算部１０２３は、カオス関数の初期値initを入力し、代表的なカオス関数であるロジスティック写像により非線形デジタルカオス信号を生成する。ロジスティック写像は
X(i+1)=αX (i)(1- X (i))                             （２）
と表される。ｉは、１以上の正の整数である。ここで、αは、運動パラメータであり、カオス関数のパラメータである。本実施の形態では、このαを使用してカオスに特有なアトラクタ(strange attractor)を制御する。X(1)が初期値initとなる。図１１は、iを横軸にとり、X (i)を縦軸にとってロジスティック写像の不規則性を例示する図である。また、図１２は、X(i)を横軸にとり、X(i+1)を縦軸にとって表したロジスティック写像の特性図である。図１２に例示されているように、ロジスティック写像では横軸のX(i)に対応する縦軸のX(i+1)の値は極めて多数あり、図１２はX(i)からX(i+1)を予測することの困難性を示唆している。
【００９８】
カオス信号X(i)は浮動小数点の形式で生成されるが、カオス関数演算部１０２３は、浮動小数点のカオス信号X(i)を８バイト整数型で扱う。カオス信号を８バイト整数型で扱うことにより、カオス信号を機種に依存しないJava言語で容易に扱うことができる。カオスエミュレータ１０２は、カオス信号発生器であり、８バイト整数型のデジタル非線形カオス信号Ｃを生成する。カオス関数演算部１０２３は、各初期値initについてそれぞれデジタルカオス信号Ｃを生成する。そこで、カオス関数演算部１０２３から出力されるデジタルカオス信号Ｃの数は、鍵Ｋのバイト長λに等しい。カオス関数演算部１０２３が生成するデジタルカオス信号Ｃのデータ長は、μバイトである。前記ｉの上限には制限がないから、カオス関数演算部１０２３で生成し得るデジタルカオス信号のデータ長μにも制限はないが、本実施の形態の暗号方式（方法および装置）では処理時間と暗号強度の兼ね合いを実用的なものとするために、μ＝128とした。
【００９９】
カオスエミュレータ１０２においてベース値を用いて初期値initを得る意義を次に述べる。カオス関数によりデジタルカオス信号を生成するとき、カオス関数値X(i)、即ちカオス信号は、図１１で示すように、０と１の間で複雑に運動する（変動する）浮動小数点である。このカオス関数値X(i)は、カオス関数の初期値initによっては、図１１のグラフの下方近傍、つまり極端に０値近傍、だけで微細な運動を繰返し行なう場合や、同図のグラフ上方近傍だけで微細な運動を繰返す場合がある。このようにカオス関数値が或る値の近傍付近で微細な運動を繰返す、言い換えればカオス関数値が０と１との間にほぼ均等に分布するのではなく、特定の狭い範囲に偏って分布するとき、デジタルカオス信号の運動量が少ないと言える。運動量が少ないデジタルカオス信号に基づきキーストリームを生成し、このキーストリームで平文を暗号化したとき、暗号文における変化量が小さくなる。変化量の小さい暗号文の暗号強度を一定レベルに保つことは困難である。
【０１００】
初期値init次第でカオス関数値が特定の狭い範囲に偏って分布するのを避けるための改善策として、本実施の形態では、ベース値を用いる。このベース値は、使用者がキーボード等の入力装置から入力することが予想されるすべての鍵Ｋの値、または使用が予想されるあらゆる鍵を考慮して選択する。ベース値は、カオス関数に初期値initを代入した場合に、生成される浮動小数点のカオス関数値を０と１の間で大きく運動させ、偏りなくほぼ均等に分布させる最善の値である。デジタルカオス信号Ｃは、カオス関数演算部１０２３において浮動小数点のカオス関数値を８バイト整数型に変換して生成されるので、浮動小数点のカオス関数値が０と１の間で大きく運動し、偏りなくほぼ均等に分布するとき、デジタルカオス信号Ｃの運動量は大きく、その分布は偏りなく均等である。カオス関数の初期値initは、部分鍵Ｋ(ｎ)であるオフセット値だけベース値から変動させた値であるから、前述のようにベース値を選択することにより、デジタルカオス信号Ｃは部分鍵ごとに大きく運動し、偏りなく均等に分布することとなる。カオス関数の初期値initの設定において、ベース値を基本とし、部分鍵をオフセット値とする方法は、カオス関数を暗号技術に使用する際の優位性を最大限に引き出す方法といえる。このベース値は、カオス関数ごとに異なる。このカオス関数とベース値の組合せによってカオス関数を固定にし、デジタルカオス信号の生成に係わるアルゴリズムの構造を安定化し、そのアルゴリズム実行の高速化を可能にする。
【０１０１】
カオス関数演算部１０２３は、初期値演算部１０２２における上述の処理によって求められたカオス関数の初期値initと、予め設定されたカオス関数のパラメータα（複数も可能）と、カオス関数とを使用し、デジタルカオス信号Ｃ１２８を生成する。このように、デジタルカオス信号Ｃは、鍵Ｋから導かれるカオス関数初期値initと、カオス関数パラメータと、カオス関数とを基として生成される。
【０１０２】
カオス関数演算部１０２３に用いるカオス関数としては、さまざまなカオス関数を代入でき、本発明に一層適した性質をもつカオス関数が発見された場合は、本実施の形態にその関数を適用するだけで、暗号強度及び処理速度の向上が期待できる。
【０１０３】
図１４に示す通り、鍵Ｋの内の1byteである部分鍵Ｋ(ｎ)を128byteに増殖させる処理は、鍵Ｋのバイト数分、つまりλ分だけ繰返し行なわれる。カオスエミュレータ102で生成される128バイトのデジタルカオス信号をＣ128と表記し、１番目からλ番目までの各デジタルカオス信号生成の生成順ｎを表すために（ｎ）を付記すると、カオスエミュレータ102から出力されるデジタルカオス信号はＣ128（1）,Ｃ128（2）,Ｃ128（3）,・・・・・,Ｃ128（ｎ）, ・・・・・,Ｃ128（λ-1）, Ｃ128（λ）と表記できる。
【０１０４】
この実施の形態では、鍵Ｋの情報をカオス関数の初期値initに使うことで、入力された鍵Ｋ毎にデジタルカオス信号Ｃを異ならせ、暗号強度を高める。また悪意ある第三者が偽造した鍵をもって解読を試みる場合は、カオス関数の初期値敏感性が発揮され、微細な鍵の変化が解読文に大きな変化として反映させ、解読を困難にする。
【０１０５】
また、暗号化処理においては、平文の暗号化処理よりも鍵生成或いは、鍵変換などに処理時間を要する傾向がある。本実施の形態では、高速に処理されるカオス関数の優位点を最大限に生かすために、暗号アルゴリズムで使うカオス関数はただ１つとし、単一のカオス関数で構造を安定化し、暗号化処理を高速化する方法を採用した。発明が解決しようとする課題の欄において、複数のカオス関数を暗号アルゴリズムに備えておき、暗号化の途中でカオス関数を切り換えるカオス暗号方式の弱点を説明したが、本実施の形態では１つのカオス関数だけを暗号アルゴリズムに備えるので、複数のカオス関数を暗号アルゴリズムに備える従来のカオス暗号方式の弱点は本実施の形態にはない。
【０１０６】
続いて、カオスフィルタ１０３での処理を図１５及び図１６を参照して説明する。鍵Ｋを構成する部分鍵Ｋ(ｎ)それぞれについて生成したλ組のＣ128をバイト単位で見た場合におけるカオスフィルタ１０３での演算を説明する。部分鍵Ｋ(1)を基に生成された128バイトのＣ128(1)は、先頭バイトをＣ(1)とすると、先頭から順にＣ(1)，Ｃ(2)，Ｃ(3)，・・・・・，Ｃ(ｎ)，・・・・・Ｃ(127)，Ｃ(128)と表記できる。部分鍵Ｋ(2)を基に生成されたＣ128(2)も同様である。Ｃ128(1)及びＣ128(2)における同じバイト順位のものを互いに加算し、加算値を1バイトとして出力する。この1バイト単位の加算演算を繰返し行い、128バイトすべての加算結果Ｃ128を求める（図１５参照）。加算演算の際、演算結果の値が1byte以上になった場合は、上位桁への繰り上がり分は捨て、同桁分を残す。例えば、１６進表記でＢ９と８Ｅとの加算をしたとき、加算値は１４７であるが、上位桁に繰り上がった１は捨て、４７を残す。上記の処理を128byte単位で見た場合、図１６で示す通り、入力された鍵Ｋのバイト数λ分生成されるＣ128すべてに対して、上記のバイト単位の演算処理を行い、Ｃ128(1)とＣ128(2)の演算結果を求め、さらに、得られた演算結果Ｃ128とＣ128(3)との演算結果を求める処理を繰返し行い、最終的に鍵成分が生かされたデジタルカオス信号Ｃｄを128バイト得る。つまりカオスフィルタ１０３で得られるデジタルカオス信号Ｃｄのバイト数は、カオスエミュレータ102の出力のデジタルカオス信号Ｃを構成するＣ128（1）,Ｃ128（2）,Ｃ128（3）,・・・・・,Ｃ128（ｎ）, ・・・・・,Ｃ128（λ-1）, Ｃ128（λ）のそれぞれと同じく、１２８バイトである。
【０１０７】
前述のとおり、カオス関数演算部１０２３で生成し得るデジタルカオス信号のデータ長μには制限がないから、デジタルカオス信号Ｃｄ生成手段に於いては、128byte以上のデジタルカオス信号Ｃｄを生成することもできる。そこで、暗号強度を向上したい場合は、128byte以上のデジタルカオス信号Ｃｄ得ることで、容易に暗号強度を向上できる。また、カオスエミュレーション２では、ν＝１とし、部分鍵のバイト長を1バイトとしたが、νは２以上でも差し支えなく、例えば２バイト毎に生成してもよく、或いは８バイト毎に生成してもよい。つまり、本実施の形態におけるデジタルカオス信号生成方法では、入力された鍵Ｋの何バイト毎にデジタルカオス信号Ｃを生成するか（νを幾つに選択するか）によって、部分鍵を決め、初期値initを選択し、ひいてはデジタルカオス信号自体に変化を与えることができる。νは８前後の数とすることが、暗号化速度と暗号強度のバランスの点で実際的である。
【０１０８】
更に、デジタルカオス信号Ｃの数は、鍵分割部1021で鍵Ｋを幾つの部分鍵に分割するかにより設定でき、デジタルカオス信号Ｃｄのバイト長はカオスフィルタ１０３における処理の方法により任意に設定できる。即ち、この実施の形態では鍵Ｋから任意の長さの内部鍵を生成できる。
【０１０９】
ここで、128バイトのデジタルカオス信号Ｃｄを例示する。鍵Ｋのバイト長λが９、鍵Ｋの値が"123456789"、部分鍵のバイト長νが１であるとき、16進数で表記すると、128バイトのデジタルカオス信号Ｃｄは、"384EE9DF0C74D28E2769A7C635680FDF1636E85737BDA71A0E7410E82BCB627B2E774F6B28F8486D333C38F61CC6DEC73B88B8EC00482E68011F5BFA0467CA5E1051BCF02F679F8526CFAAF4362878E813CBA0BD34E26E1F17D995CA393A178B0921A92D1EEE1DB23B84EFCC005748C4015B23CA054CF82113512C90343A07FC"となる。
【０１１０】
図１７に鍵初期変換部１０４の構成を示す。前述の通り、鍵初期変換部４では、鍵入力部１０１で入力した鍵Ｋについて処理を加え、ξバイト（ξは２以上の正の整数）のサブキーセットＬを生成する。サブキーセットＬは、サブキーＬ(1), Ｌ(2), Ｌ(3),・・・・・,Ｌ(ｎ),・・・・・Ｌ(ξ-1), Ｌ(ξ)からなる。鍵初期変換部１０４はこれらξ個のサブキーをそれぞれ生成するξ個のサブキー生成ブロックからなる。
【０１１１】
サブキーＬ(1)を生成する第１番目のサブキー生成ブロックは、サブキー初期値Ｌ(０)及びベクトルデータ初期値の先頭から１番目のバイトの値Ｖ(１)の加算演算をし、両者の和Ｏ(１)を生成する加算部と、鍵データ初期値Ｋt(０)と和Ｏ(１)との排他的論理和演算をし、サブキーＬ(1)を生成する排他的論理和演算部とでなる。本実施の形態では、Ｌ(０)＝Ｋt(０)＝Ｋ(1)とする。ベクトルデータ初期値は、内部ベクトル生成部１０８におけるベクトルデータテーブル[Ｖ]に予め記憶してある。サブキーＬ(２)を生成する第２番目のサブキー生成ブロックは、サブキーＬ(1)及びベクトルデータ初期値の先頭から２番目のバイトの値Ｖ(１)の加算演算をし、両者の和Ｏ(２)を生成する加算部と、鍵データＫt(１)と和Ｏ(１)との排他的論理和演算をし、サブキーＬ(２)を生成する排他的論理和演算部とでなる。本実施の形態では、鍵データＫt(１)＝Ｋ(１)＋Ｋ(０)とする。但し、Ｋ(０)は存在しないので、Ｋ(０)＝０とする。
【０１１２】
以下同様に繰り返し処理をする。サブキーＬ(ｎ)を生成する第ｎ番目のサブキー生成ブロックは、第ｎ-１番目のサブキー生成ブロックで生成したＬ(ｎ-１)とベクトルデータ初期値の先頭からｎ番目のバイトの値Ｖ(ｎ)の加算演算をし、両者の和Ｏ(ｎ)を生成する加算部と、鍵データＫt(ｎ)と和Ｏ(ｎ)との排他的論理和演算（XOR）をし、サブキーＬ(ｎ)を生成する排他的論理和演算部とでなる。Ｋt(ｎ)＝Ｋ(ｎ)＋Ｋ(ｎ-１)とする。以上した漸次の説明から明らかなように、鍵初期変換部１０４では、第ｎ番目のサブキー生成ブロックは次の演算によりサブキーＬ(ｎ)を生成する（但し、λ≧μのとき）。
【０１１３】
Ｏ(ｎ) XOR Ｋt(ｎ)＝Ｌ(ｎ)                        （３）
Ｏ(ｎ)=Ｌ(ｎ-1)＋Ｖ(ｎ)                           （４）
Ｋt(ｎ)＝Ｋ(ｎ)＋Ｋ(ｎ-１)                        （５）
但し、Ｌ(０)＝Ｋt(０)＝Ｋ(1)，Ｋ(０)＝０
【０１１４】
この実施の形態では、サブキーセットＬのバイト長ξは、デジタルカオス信号Ｃdのバイト長μ（＝１２８）以上に設定し、キーストリームＫsという内部鍵の強度を一定レベル以上に保持している。式（５）でＫt(ｎ)を生成すると、鍵Ｋの長さλがμに満たないとき（λ＜μ）は、ｎの最大値は鍵Ｋのバイト長λとなり、第ｎ＝λ＋１番目以降のサブキー生成ブロック用の鍵データＫt(ｎ)が足りなくなる。そこで、本実施の形態では、式（５）を拡張し、
Ｋt(ｎ)＝Ｋ(ｎ mod λ)＋Ｋ｛(ｎ-１) mod λ｝            （５a）
により鍵データＫt(ｎ)を生成する。例えば、λ＝８であり、長μ＝１２８であ
れば、ｎ＝９のときは、Ｋt(９)＝Ｋ(９ mod ８)＋Ｋ｛(９-１) mod ８｝＝Ｋ(1)＋Ｋ(0)＝Ｋ(1)として、Ｋt(９)が得られる。このとき、Ｋ(1)，Ｋ(2)・・・・ Ｋ(7)，Ｋ(8)を１６（＝128÷8）回繰り返し利用し、Ｋt(1)，Ｋt(2)，Ｋt(3)，・・・・・Ｋt(ｎ)，・・・・・Ｋt(127)が生成される（前述のとおり、Ｋt(０)＝Ｋ(1)）。
【０１１５】
もし、鍵Ｋの長さが最短の１バイトであり、λ＝１であっても、本実施の形態ではデジタルカオス信号Ｃdのバイト長μ（＝１２８）と同じ長さまで鍵情報は増殖され、サブキーセットＬのバイト長ξはμとなり、デジタルカオス信号ＣdとサブキーセットＬとの攪拌で生成されるキーストリームＫsという内部鍵の強度は所要の一定レベル以上に保持される。
【０１１６】
鍵Ｋのバイト長λがμ以上のとき（λ≧μ）は、ｎの最大値はλとなり、λ個の鍵データＫt(ｎ)が生成され、サブキーセットＬのバイト長ξはλとなる。本実施の形態では、鍵Ｋのバイト長λに相応する内部鍵の強度を保証している。なお、本実施の形態では、鍵Ｋの長さλがμに満たないとき（λ＜μ）でも、鍵データＫt(ｎ)の生成において鍵Ｋ(1)，Ｋ(2)・・・・ Ｋ(λ)を繰り返し利用する回数は任意であるから、鍵データＫt(ｎ)は任意の長さに生成でき、ひいてはサブキーセットＬのバイト長ξも任意に選択できる。
【０１１７】
本実施の形態では、内部ベクトル生成部１０８におけるベクトルデータテーブル[Ｖ]に予め記憶してあるベクトルデータ初期値Ｖ(1), Ｖ(2), Ｖ(3),・・・・・,Ｖ(ｎ),・・・・・Ｖ(ξ-1), Ｖ(ξ)をサブキーＬ(0), Ｌ(2), Ｌ(3),・・・・・,Ｌ(ｎ),・・・・・Ｌ(ξ-1)にそれぞれ加算し、和Ｏ(1), Ｏ(2), Ｏ(3),・・・・・,Ｏ(ｎ),・・・・・Ｏ(ξ-1), Ｏ(ξ)を生成した。しかし、ベクトルデータ初期値Ｖ(1), Ｖ(2), Ｖ(3),・・・・・,Ｖ(ｎ),・・・・・Ｖ(ξ-1), Ｖ(ξ)に代えて他の初期値を用いても本発明は実施できる。本実施の形態では所要データテーブルを低減するために、内部ベクル生成部１０８におけるベクトルデータテーブル[Ｖ]を鍵初期変換部１０４でも利用する構成とした。
【０１１８】
図１８は、暗号装置におけキーストリーム生成部１０５で行われるカオス信号ＣｄとサブキーセットＬとの攪拌処理を示す概念図である。図１７に示すとおり、キーストリーム生成部１０５には、μバイトのデジタルカオス信号ＣdとξバイトのサブキーセットＬとが入力される。デジタルカオス信号Ｃd及びサブキーセットＬは、キーストリーム生成部１０５において攪拌されη（＝μ＋ξ）バイトのキーストリームＫsとなるので、攪拌される前の段階のデジタルカオス信号Ｃd及びサブキーセットＬを、図１７に示す如くに、単に並列して連結したデータを、プレキーストリームＫpと称する。プレキーストリームＫpにおいては、デジタルカオス信号Ｃｄ成分とサブキーセットＬ成分とが偏って分布している。キーストリーム生成部１０５では、最終段階の内部鍵であるキーストリームＫsを暗号的に強固なものとするために、攪拌処理を行ない、両成分の分布を均等にする。
【０１１９】
キーストリーム生成部１０５における攪拌処理は次のように行われる（攪拌処理の方法には各種あるが、以下には本実施の形態で採用する方法を説明する）。まず、プレキーストリームＫｐでのカオス成分Ｃd(1)をビット反転したデータ≪Ｃd(1)≫を第一基準値として生成し、プレキーストリームＫｐでのカオス成分Ｃd(2)と第一基準値≪Ｃd(1)≫との加算演算をし、両者の和Ｃd(2)＋≪Ｃd(1)≫をＣd(2)に置換する。続いて、第一基準値≪Ｃ(1)≫とＣd(3)との減算演算をし、両者の差Ｃd(3)−≪Ｃd(1)≫をＣd(3)に置換する。以下同様に、カオス成分Ｃd(ｎ)及びサブキーセット成分Ｌ(ｎ)につき、第一基準値≪Ｃd(1)≫の加減算および加減算の結果の和又は差との置換をプレキーストリームＫｐの最終バイトＬ(ξ)まで繰返し行う。
【０１２０】
第一基準値≪Ｃd(1)≫を使用した置換処理をプレキーストリームＫpの最終バイトＬ(ξ)までη−１回（η＝μ＋ξ）行なったとき、プレキーストリームＫpにおけるＣd(2)からＬ(ξ)までは、置換され、ηバイトの新たな中間段階のキーストリームとなる。この新たな第１回目の中間段階のキーストリームＫm１とし、Ｋm１をＫm１(1)，Ｋm１(2)，Ｋm１(3)，・・・・・，Ｋm１(ｎ)，・・・・・，Ｋm１(η)と表すと、Ｋm１(1)＝Ｃd(1)，Ｋm１(2)＝Ｃd(2)＋≪Ｃd(1)≫，Ｋm１(3)＝Ｃd(3)−≪Ｃd(1)≫・・・・・となる。次に、Ｋm１(2)をビット反転し、第二基準値≪Ｋm１(2)≫として、Ｋm１(3)からＫm１(1)までの第１回目中間段階のキーストリームＫm１に関し同様の置換処理をη−１回繰返し行なう。次々に基準値を中間段階のキーストリームＫm上で移行し、ηバイト目のデータを基準値とするまで置換作業を繰返し行なう。そのηバイト目のデータを基準値とする置換作業が終えたときの中間段階キーストリームＫm、即ち最終の中間段階キーストリームＫmをＫmηとすると、ＫmηがキーストリームＫsとなり、キーストリームテーブル[Ｋs]に記録される。
【０１２１】
以上の攪拌処理により、鍵成分を含んだ擬似乱数であるデジタルカオス信号ＣｄとサブキーセットＬの成分との分布を均等化したキーストリームＫsが生成される。なお、上に説明したプレキーストリームＫｐの生成およびキーストリームＫsの攪拌方法は、株式会社日立製作所で開発された同様のストリーム暗号ＭＵＬＴＩ−Ｓ０１においては、図２９に示すような方法で行われている。図１７及び図１８に示した本実施の形態における方法は、図２９の従来の処理方法に比べ、処理のアルゴリズムが簡潔であり、しかもキーストリームとしての暗号的強度は損なわれていない。そこで、この実施の形態は、内部鍵であるキーストリームの生成処理の点だけでも有用である。
【０１２２】
前に記したとおり、本実施の形態にでは、この実施の形態で許容されるの最短の鍵長である1バイトの鍵で暗号化処理を行なう場合でも、例えば、デジタルカオス信号Ｃｄのバイト長μを１２８バイトとし、サブキーセットＬのバイト長ξを１２８バイトとし、これらの鍵情報含有データを中間的な内部鍵とし、最終の内部鍵であるキーストリームＫsのバイト長ηを両中間的内部鍵のバイト長の計２５６バイトとすることにより、一定の暗号強度を保つ暗号アルゴリズムを実現している。つまり、本実施の形態にでは、入力された鍵Ｋのバイト長λが、最小の１であっても２５６バイトのキーストリームＫsが生成され、入力された鍵Ｋが１２８バイトを越えるときは、２５６バイトを越える長さのキーストリームＫsが生成される。勿論、本実施の形態では、デジタルカオス信号生成手段（カオスエミュレータ１０２及びカオスフィルタ１０３）によるデジタルカオス信号Ｃdと同様に、鍵初期変換部１０４によるサブキーセットＬも長さの調節が可能であるから、暗号強度を高めることも、暗号処理速度を高めることも任意に選択できる。
【０１２３】
平文入力部１０６は、使用者がハードディスク等から入力した平文を２値符号化し、２値符号化平文Ｐを出力する。１次暗号化部７は、排他的論理和演算手段であり、平文Ｐ及びキーストリームＫsを入力し、両データの排他的論理和演算値を1次暗号文Ｅ１として出力する。平文Ｐのバイト長がキーストリームＫsのバイト長ηを超えるときは、ηバイトのキーストリームＫsを連続的に繰り返すことにより、平文Ｐと同じ長さのキーストリームとし、全ての平文ＰにつきキーストリームＫsとの排他的論理和演算を行う。
【０１２４】
通常のストリーム対称暗号方式では、この１次暗号化処理段階で暗号化処理すべてを完成として、１次暗号化により得られたデータである暗号文Ｅ１を相手方に送出する。１次暗号化における鍵成分はキーストリームＫsである。本実施の形態では、さらに内部ベクトル生成部１０８により内部ベクトルデータＶ（図８ではベクトルデータＶと表記してあり、図９及び図１０では「内部ベクトルＶ」と略記してある）を独特の方法により生成し、内部ベクトルデータＶでもって１次暗号文Ｅ１に更なる暗号化処理（ステップ９の２次暗号化）を施し、２次暗号文Ｅ２を生成する。２次暗号化における１次暗号文Ｅ１及び内部ベクトルデータＶは、通常のストリーム暗号化処理における平文及びキーストリームにそれぞれ相当する。いわば、ステップ９の２次暗号化においては、１次暗号文Ｅ１は第２の平文であり、内部ベクトルデータＶは第２のキーストリームである。この第２のキーストリームたる内部ベクトルデータＶの生成方法に本実施の形態の大きな特徴があるのである。
【０１２５】
本実施の形態における２次暗号化（ステップ９）は、使用者によって入力される鍵Ｋ、平文Ｐ以外の入力データを用いることなく第２のキーストリーム（内部ベクトルデータＶ）を生成し、第２のキーストリームで１次暗号文を動的に変化させる新規な技術である。２次暗号化を採用した本実施の形態は、１次暗号化だけの処理に比べ暗号強度を格段に向上している。１次暗号化による暗号結果（１次暗号文Ｅ１）を動的に変化させる２次暗号化における重要な技術は、暗号アルゴリズム内で用いられるデータ以外の他のデータを暗号結果に付加することなく、１次暗号文Ｅ１に動的な変化を与えることである。
【０１２６】
つまり、本発明に独特なこの技術は、１次暗号文Ｅ１を動的に変化させる方式（数式、関数など）や、動的な値自体を暗号結果（１次暗号文Ｅ１）に付加しないで、暗号強度を高める方式である。暗号アルゴリズムと鍵Ｋは暗号文の受信者に予め与えられており、伝送データが平文を鍵情報で暗号化した暗号文だけであれば、暗号文を不正に入手した第３者にとって暗号文解読のきっかけは掴み難い。しかしながら、１次暗号文Ｅ１を動的に変化させる方式（公式、関数など）や、動的な値自体を動的変化用データとして付加し、暗号文に含ませると、付加したデータ量だけ暗号文が長くなり伝送時間が長くなること以上に重大な不利が生じる。重大な不利とは、動的変化用データ自体が暗号解読の重要な手掛かりになりかねないということである。以上に述べたところから、共通鍵暗号方式では、暗号文送信者と暗号文受信者間で伝送されるべきデータは、鍵Ｋの情報（内部鍵）で平文を暗号化した暗号文だけである。暗号アルゴリズム外から入力し、暗号化処理に用いるデータは、平文Ｐおよび鍵Ｋだけとし、その他のデータは暗号アルゴリズム内に初期データとして予め格納しておくことが望ましい。すなわち、暗号化のための数式、関数或いは何らかの値は、暗号アルゴリズム内に予め設定しておくべきである。
【０１２７】
従来の暗号方式では、暗号アルゴリズムにおいて利用され、生成される各種の内部データや平文、鍵を量として処理していた。この従来の暗号方式では、データを量としてしか認識していないので、データに関する認識が１次元的であると言える。本実施の形態における例を上げれば、前述のキーストリーム生成部１０５では、Ｃd(1)は次のＣd(2)の置換処理に用いられ、その置換処理されたＣd(2)が循環して更にＣd(1)の置換処理に用いられ、次々にフィードバック処理がなされている。このような処理は、データを量としてのみ認識している例である。
【０１２８】
これに対し、本発明では、データに関する認識が２次元的であると言える。本発明で２次元的認識の対象とするデータは、暗号アルゴリズムに入力される平文Ｐおよび鍵Ｋ並びに暗号アルゴリズムに初期値として予め設定され又は暗号アルゴリズムで処理される過程で生成されるデータの集合である。これらデータの集合をデータに関する空間と仮想し、その仮想したデータの空間を仮想データ空間と定義する。そして、この仮想データ空間内のデータをベクトルの方向成分ＩＲで指定し、指定されたデータをベクトルの量成分と認識し、ベクトルの量成分に所定の演算を施すことにより、第２のキーストリームとも呼ぶべき前述の内部ベクトルデータＶを生成する。内部ベクトルデータＶは、２次暗号化部１０９において１次暗号文Ｅ１との間で排他的論理和演算されることにより、２次暗号文Ｅ２を生成する。この２次暗号文Ｅ２がベクトルの方向成分ＩＲとして扱われる。２次暗号文Ｅ２は、２次暗号文Ｅ２の生成過程に単にフィードバックされて量として扱われているのではなく、仮想データ空間内のデータを指し示すだけである。そして、指し示された仮想データ空間内のデータが２次暗号文Ｅ２の生成過程に係わる量成分として扱われている。かくして、本発明では、仮想データ空間内のデータは２次元的に認識され、２次元的に扱われていると言える。
【０１２９】
図８は、本実施の形態の暗号方法におけるベクトルデータ生成方法を示す概念図である。図８を参照して本実施の形態におけるベクトルデータ生成方法を一層詳しく説明する。既に、本実施の形態については、次のように概要を説明した。
（１）内部ベクトル生成部108は、ベクトルデータテーブル［Ｖ］を有し、ベクトルデータテーブル［Ｖ］にベクトルデータ初期値を予め記憶しており、ベクトルデータテーブル［Ｖ］はψ個の項目（升目）を有し、各項目にρバイトのベクトルデータがそれぞれ記憶される。
（２）ステップ８の内部ベクトル生成では、ベクトルデータテーブル［Ｖ］における最初のρバイトのベクトルデータ初期値Ψ(１)を最初に読み出す。
（３）ステップ９の２次暗号化では、まず１次暗号文Ｅ１における先頭のρバイトのデータＥ１(１)につき、ρバイトのベクトルデータ初期値Ψ(１)で２次暗号化を行い、ρバイトの２次暗号文Ｅ２(１)を生成する。
（４）ステップ８の内部ベクトル生成では、ρバイトの２次暗号文Ｅ２(１)を受け、このρバイトの２次暗号文Ｅ２(１)をベクトルの方向成分ＩＲとして認識し、方向成分ＩＲはキーストリームテーブル［Ｋs］におけるアドレスＩＲのデータＫs（IR）を指し示す。
（５）ステップ８の内部ベクトル生成では、キーストリームテーブル［Ｋs］からそのデータＫs（IR）を読み出し、データＫs（IR）をベクトルの量成分と認識し、該量成分のデータＫs（IR）に論理演算を施し、ρバイトのベクトルデータＶ(１)を生成し、ベクトルデータテーブル［Ｖ］における最初から１番目のρバイトのベクトルデータ初期値Ψ(１)をベクトルデータＶ(１)で置換する。
（６）以下同様に、ステップ８の内部ベクトル生成では、残るψ−１個のベクトルデータ初期値によりψ−１個（１個のデータ長がρバイト）の１次暗号文Ｅ1ρバイト毎に順次暗号化し、ψ−１個（１個のデータ長がρバイト）の２次暗号文Ｅ2を順次に生成し、ψ−１個の内部ベクトルデータＶを生成する。かくして、残りのψ−１個のベクトルデータ初期値もψ−１個の内部ベクトルデータＶで置換し、ベクトルデータテーブル［Ｖ］における全てのベクトルデータ初期値を内部ベクトルデータＶで置換する。以後、ψ＋１個目の１次暗号文Ｅ1及びそれ以降については更新された内部ベクトルデータＶで順次に２次暗号化をする。内部ベクトルデータＶは、ρバイトの２次暗号文Ｅ2ごとに順次に更新される。
【０１３０】
前記概要説明におけるデータ長ρが１バイト長であるときの例を説明する。キーストリームテーブル［Ｋs］のバイト数ηは２５６バイト以上であるとする。また、ベクトルデータテーブル［Ｖ］は、ψ個（ψ≦η）の項目（升目）でなり（この実施の形態では、ψ＝２００）、内部ベクトルデータＶ（Ｖ＝Ｖ（１）,Ｖ（２）,Ｖ（３）, ・・・・・,Ｖ（ｎ）,・・・・・,Ｖ（ψ））を各項目（升目）にそれぞれ蓄えるものとする。ベクトルデータテーブル［Ｖ］における各項目（升目）のデータ長は１バイトとし、またベクトルデータテーブル［Ｖ］では内部ベクトルデータＶ（１）,Ｖ（２）,Ｖ（３）, ・・・・・,Ｖ（ｎ）,・・・・・,Ｖ（ψ）としてベクトルデータ初期値Ψ（１）,Ψ（２）,Ψ（３）, ・・・・・,Ψ（ｎ）,・・・・・, Ψ（ψ）をそれぞれ予め記憶しておくものとする。２次暗号文Ｅ2（１），Ｅ2（２），Ｅ2（３），・・・・・，Ｅ2（ｍ），・・・・・は各１バイトであるが、１バイトの２次暗号文Ｅ2（ｍ）をアドレスとして指定されるキーストリームテーブル［Ｋs］のデータをＳＥ2（ｍ）と表記する（前記Ｋs（IR）に則って表記すればＫs（Ｅ2（ｍ））となるが、簡潔化のためにここではＳＥ2（ｍ）と表記することとする）。このように設定したとき、内部ベクトル生成部１０８は
ＳＥ2（ｍ） XOR Ｖ（ｎ） XOR Ｖ（ｎ＋１）＝Ｖ（ｎ）              （１）
なる論理演算式で表される論理演算を行い、式（１）の右辺で表される値にＶ（ｎ）を順次に置換する。但し、ｎ＝ｍ mod ψである。また、XORは、排他的論理和演算を表す演算子である。
【０１３１】
この実施の形態では、キーストリームテーブル［Ｋs］が仮想データ空間である。そして、２次暗号文Ｅ2（１），Ｅ2（２），Ｅ2（３），・・・・・，Ｅ2（ｍ），・・・・・が、前述のベクトルの方向成分ＩＲである。このベクトルの方向成分ＩＲで指し示されるデータＳＥ2（ｍ）がベクトルの量として認識され、式（１）で量データとして扱われている。２次暗号文Ｅ2（ｍ）をキーストリームテーブル［Ｋs］のアドレスとして扱うことにより、２次暗号文Ｅ2（ｍ）はベクトルの方向成分として認識される。式（１）の論理演算により、まずＥ2（ｍ）とＶ（ｎ）との排他的論理和演算をし、次にその排他的論理和演算値とＶ（ｎ＋１）との排他的論理和演算を行い、その排他的論理和演算値をＶ（ｎ）と置換し、新たなＶ（ｎ）としている。
【０１３２】
内部ベクトル生成部１０８におけるこのような処理により、２次暗号化部１０９では、１次暗号文Ｅ１における最初のψバイトのデータＥ１（１），Ｅ１（２），Ｅ１（３），・・・・・，Ｅ１（ψ）ついてだけベクトルデータ初期値Ψ（１）,Ψ（２）,Ψ（３）, ・・・・・,Ψ（ｎ）,・・・・・, Ψ（ψ）との間で排他的論理和演算がなされる。２次暗号化部１０９では、１次暗号文Ｅ１（ψ＋１）及びそれ以降の１次暗号文Ｅ１についてはベクトルデータ初期値Ψ（１）,Ψ（２）,Ψ（３）, ・・・・・,Ψ（ｎ）,・・・・・, Ψ（ψ）が排他的論理和演算にそのまま使われることはなく、式（１）により置換された内部ベクトルデータＶ（ｎ）が排他的論理和演算に使われる。
【０１３３】
上に詳しく説明したように、２次暗号文Ｅ2（ｍ）は、キーストリームＫsで暗号化された暗号文である１次暗号文Ｅ１（ｍ）を内部ベクトルデータＶ（ｎ）で暗号化してなる。しかも、その内部ベクトルデータＶ（ｎ）は、ψバイト前の２次暗号文Ｅ2（ｍ−ψ）をベクトルの方向成分ＩＲとして利用し、仮想データ空間（キーストリームテーブル［Ｋs］）内のデータＳＥ2（ｍ）をベクトルの量成分として認識して選択し、データＳＥ2（ｍ）について式（１）の演算をなし、生成されたデータである。したがって、２次暗号文Ｅ2（ｍ）をベクトルの方向成分として仮想データ空間を参照する処理は、不規則な参照（Irregular Reference）と呼ぶことができる。２次暗号文Ｅ2は、１バイト毎に出力されるので、整数値として扱える。１バイトの値を256の整数値とすると、その整数値は256個の項目があるテーブルを指し示す方向成分として使用できる。そこで、キーストリームテーブル［Ｋs］における項目数ηは、少なくとも256個としておく。
【０１３４】
なお、上に説明した内部ベクトル生成部１０８では、式（１）によりベクトルデータＶ（ｎ）を生成した。しかし、内部ベクトル生成部１０８では、式（１）に代えて
ＳＥ2（ｍ） XOR Ｖ（ｎ） XOR Ｖ（ｎ＋１）＝Ｖ（ｎ＋１）        （１ａ）
なる論理演算式で表される論理演算を行い、式（１ａ）の右辺で表される値にＶ（ｎ＋１）を順次に置換しても本発明は実施できる。この式（１ａ）の演算をする実施の形態を採用すると、２次暗号化部１０９では、１次暗号文Ｅ１における最初の１バイトのデータＥ１（１）ついてだけベクトルデータ初期値Ψ（１）との間で排他的論理和演算がなされる。２次暗号化部１０９では、１次暗号文Ｅ１（２）及びそれ以降の１次暗号文Ｅ１についてはベクトルデータ初期値Ψ（１）,Ψ（２）,Ψ（３）, ・・・・・,Ψ（ｎ）,・・・・・, Ψ（ψ）が排他的論理和演算にそのまま使われることはなく、式（１ａ）により置換された内部ベクトルデータＶ（ｎ）が排他的論理和演算に使われる。
【０１３５】
以上の手順で生成された２次暗号文Ｅ２は、最終的な暗号文ＥＥとしてステップ１１の暗号文出力の処理により通信回線などへ出力される。本発明の暗号方式は、対称鍵方式の暗号方式であり、暗号鍵と復号鍵が共通である。復号化は上記の暗号化と同様の処理である。つまり、前述の暗号化における平文Ｐとして暗号文ＥＥを入力し、暗号文ＥＥを鍵Ｋで暗号化する処理により、平文Ｐが得られる。
【０１３６】
図１９は、図９及び図１０に示した実施の形態により暗号化する平文Ｐの例として、全面が黒色の図形（Ａ）、全面が白色の図形（Ｂ）および上半分の領域が黒色であり、下半分の領域が白色である図形（Ｃ）を示す図である。図２０は、図１９（Ａ）の全面黒色図形、同図（Ｂ）の全面白色図形および同図（Ｃ）の黒白図形並びにMicrosoft Visio 2000 SRI日本語版（The Visual Language Business）におけるHelpフォルダの全て（13.4MB）を圧縮ソフトによってIzhファイルとして得たデータを平文Ｐとして図９及び図１０に示した実施の形態に入力し、該平文Ｐを暗号化し、暗号文を復号したときに、それら平文、暗号文および復号文における０，１の出現頻度分布を示す図である。
【０１３７】
図２０の上欄には、左から平文（ファイル名）、使用した暗号鍵、使用した復号鍵、ファイルサイズ（Byte単位）、平文、暗号文、復号文なる欄の項目名が記載してある。平文、暗号文および復号文の欄は、０出現頻度および１出現頻度の欄に区分してある。図２０は、例えば全面黒の図１９（Ａ）の図形ファイルについて、平文では０出現頻度および１出現頻度の割合が0.02％対99.98％であるが、暗号文では49.93％対50.07％となり、０と１の出現頻度がほぼ均等になり、平文の特徴は消えており、暗号の解読がデータの分布特性からは困難であることを示唆している。また、誤った鍵ではあるが、正しい鍵とは１バイトしか相違しない鍵で復号を試みたときも、復号文における０と１の出現頻度が50.11％対49.89％であり、やはりほぼ均等である。このことからも、本実施の形態で暗号化された暗号文について何者かが復号化を試みたとしても、復号データは何らの解読のきっかけも与えないことが分かる。このことは、本実施の形態の暗号強度の高さを示している。
【０１３８】
図２１は、図１９（Ａ）の全面黒色図形に関する平文、暗号文および復号文における画素（ピクセル）の濃度を２桁の１６進数のバイナリデータ（即ち２５６階調）で表現したときにおけるに各バイナリデータの出現頻度分布を示す表であり、縦軸は２桁の１６進数における２桁目を表し、横軸は２桁の１６進数における１桁目を表す。上段、中段および下段の表がそれぞれ平文、暗号文および復号文（１バイトだけ誤った鍵による復号文）における分布を示す。当然ながら、平文では、最小値である"00"に殆どの画素があり、その他の値の出現頻度は殆どゼロかゼロに近い値である。それにもかかわらず、暗号文では、各バイナリデータの出現頻度はほぼ100台であり、バイナリデータによる差は小さい。図１８２１の下段の表は、誤った鍵ではあるが、正しい鍵とは１バイトしか相違しない鍵で復号を試みたときも、復号データにおける分布は暗号文の分布と同様であることを示している。
【０１３９】
図２２は、図１９（Ａ）の全面黒色図形に関する平文、暗号文および復号文における画素（ピクセル）の濃度を２桁の１６進数のバイナリデータ（即ち２５６階調）で表現したときにおけるに各バイナリデータの出現頻度分布を示す折線グラフであり、縦軸は出現頻度を表し、横軸は２桁の１６進数における１桁目を表す。上段、中段および下段のグラフがそれぞれ平文、暗号文および復号文（１バイトだけ誤った鍵による復号文）における分布を示す。各表には１６本の折線が描いてあり、各折線は図２１の表における左端の欄（縦軸の欄）における０＊，１＊，３＊・・・・・Ｅ＊，Ｆ＊にそれぞれ対応している。尤も、平文ではバイナリデータの出現頻度が"00"集中しており、１本の縦線となっている。他方、暗号文では、バイナリデータに係わらずほぼ均等に出現している。復号データにおいても同様である。
【０１４０】
図２３は図１９（Ｂ）の全面白色図形に関する図２１と同様の表であり、図２４は図１９（Ｂ）の全面白色図形に関する図２２と同様の折れ線グラフである。図２５は図１９（Ｃ）の黒白図形に関する図２１と同様の表であり、図２６は図１９（Ｃ）の黒白図形に関する図２２と同様の折れ線グラフである。図２７は図２０の表に示したHelp.Izh(Visio)ファイルに関する平文、暗号文および復号文におけるデータを２桁の１６進数のバイナリデータで表現したときにおけるに各バイナリデータの出現頻度分布を示す表であり、縦軸は２桁の１６進数における２桁目を表し、横軸は２桁の１６進数における１桁目を表す。図２８は、図２０の表に示したHelp.Izh(Visio)ファイルに関する平文、暗号文および復号文におけるデータを２桁の１６進数のバイナリデータで表現したときにおけるに各バイナリデータの出現頻度分布を示す折線グラフであり、縦軸は出現頻度を表し、横軸は２桁の１６進数における１桁目を表す。各折線は、図２７の表における左端の欄（縦軸の欄）における０＊，１＊，３＊・・・・・Ｅ＊，Ｆ＊にそれぞれ対応している。これらの図からは、平文では、ファイルの特徴が明瞭に現れているにもかかわらず、暗号文では、各バイナリデータの出現頻度はほぼ均等であって、バイナリデータによる出現頻度の差は小さい。図２８の下段の表は、誤った鍵ではあるが、正しい鍵とは１バイトしか相違しない鍵で復号を試みたときも、復号データにおける分布は暗号文の分布と同様であることを示している。
【０１４１】
図２１から図２８に示した表および折線グラフから、本実施の形態で暗号化された暗号文について何者かが復号を試みたとしても、復号データは何らの解読のきっかけも与えないことが分かる。このことは、やはり本実施の形態の暗号強度の高さを示している。
【０１４２】
以上に詳しく説明したところから明らかなように、本発明の実施の形態では、暗号アルゴリズムをコンピュータプログラムで実現したときにおけるプログラム量が小さく、携帯電話機にも容易に搭載でき、暗号化速度が速く、しかも暗号強度が高い暗号方法、装置および復号方法、装置である。また、本発明の実施の形態の採用により、これら暗号方法及び復号方法を実現するコンピュータプログラム、このコンピュータプログラムを記憶する記憶媒体を実現できる。また、本発明の実施の形態によれば、特定パターンが出現する画像データなどのファイルを暗号化する場合にも、暗号文においては平文のパターンが現れ難く、ひいては暗号強度が高い暗号・復号方式が得られる。本発明の更に他の目的は、鍵の長さが任意であり、利用者の必要に応じて、処理速度と暗号強度とを選択ができ暗号・復号方式の提供にある。
【０１４３】
以上に詳しく説明した本発明の実施の形態では、共通鍵Ｋのバイト長λが任意であり、利用者の必要に応じて、処理速度と暗号強度とを選択ができる。即ち、本実施の形態の鍵は可変長鍵である。そこで、本発明の実施の形態は全数探索攻撃方法に対して強い抵抗力を持っている。DESの場合では、鍵管理技術を使用している。しかし、DESでは、鍵をそのままの状態で暗号化鍵に使用するから、鍵は理論的には256キースペースから成り立つが、実際に鍵に用い得るキースペースはASCIIコードのうちの95でしかない。本発明で利用できる暗号化鍵は、0x00を除くすべてのASCIIコード（256のキースペース）から成り立っているので、固定長鍵の暗号方法（FEAL-8,DES）と比較しても、本発明が優位である。
【０１４４】
例えば、全数探索攻撃方法を使用し本発明の解読を試みる場合は、鍵Ｋの長さが128ビットであれば、現在のコンピュータで解読を試みたとすると、108年の時間を要することになる。またカオス暗号法では、キーストリームが単純な関数から生成されるため、演算処理が速い。つまり3DESのように、繰返しを必要としないで暗号強度を保障できる暗号システムであるから、高速に暗号および復号の処理ができる。
【０１４５】
さらに本実施の形態では、論理的には鍵長Ｋは無限に長くすることができる。従来の暗号システムでは、繰り返し計算による暗号強度の強化方法を採用していたから内部鍵の生成に時間がかかり、鍵長が長いと内部鍵の生成時間は実用的時間を超えるので、鍵長は一定の長さでないと、事実上処理できなかった。たとえば、鍵の値をべき乗の計算として処理するＲＣ４（ＲＳＡ社製）では、暗号処理速度自体が鍵長に大きく依存し、同じ鍵長であっても本実施の形態の１０倍以上の処理時間を要する。
【０１４６】
更に、上に詳しく説明したところから明らかなように、本実施の形態により、実用上次のような効果がもたらされる。
（１）上記説明の通り、カオス関数自体は、代入可能のため基本となる暗号アルゴリズムが容易に更新できる。
（２）ストリーム型暗号方式であるから、連続的な暗号化処理を提供でき、今後も発展するインターネットの高速・多量のデータ暗号処理を可能にする。
（３）同様の理由から、英語、日本語、中国語などの言語データを意識させずに処理できるので、ワールドワイドな暗号システムを提供できる。
（４）同様の理由から、テキストデータ、バイナリデータなどのマルチメディアデータも同様に処理できる。
（５）復号化処理時には鍵以外のデータを参照せず、高速に復号化処理を行える。
（６）鍵が可変長であるので、使用者による暗号化処理速度と、暗号強度の選択
が自由である。
（７）暗号処理速度および暗号強度を選択し、尚且つ、インターネットに接続さ
れた携帯電話など、小型の電子機器での使用を可能にする。
【０１４７】
以上に実施の形態を挙げ、本発明を具体的に説明した。しかし、本発明はこれらの具体的な例に限定されるものでないことは勿論である。例えば、内部暗号はキーストリームＫsに限られず、デジタルカオス信号ＣやＣd、サブキーセットＬ等でも本発明は実施できる。また、２次暗号文Ｅ２をベクトルの方向成分ＩＲとしてキーストリームテーブル[Ｋs]内のデータＫs（IR）を指し示し、データＫs（IR）を量成分として内部ベクトルデータＶを演算したが、データＫs（IR）をもって第２のベクトル方向成分とし、第２のベクトル方向成分Ｋs（IR）で指し示された仮想データ空間内のデータをベクトル量成分として扱っても本発明は実現できる。同様に、仮想データ空間内のデータを第３、第４のベクトル方向成分とし、最後に指し示されたデータをベクトル量成分として扱っても差し支えない。また、実施の形態で例示したバイト数などのデータは何れも例示であり、本発明はこれらのデータに制限されるものではない。
【０１４８】
以上、暗号装置と復号装置がまったく同じ構成の暗号方式について説明した。しかし、暗号方式の実際の使用場面によっては、暗号装置と復号装置を意識的に別構成にした方が望ましい場合がある。通常使用の場合は、使用者は、暗号化処理を行うことを意図して暗号化処理し、復号化処理を行うことを意図して復号化処理する。しかし、暗号装置と復号装置がまったく同じ構成の場合は、使用者の誤操作によって、暗号化処理を行うことを意図して同じ鍵によって、二重に暗号化処理を行った場合、暗号化処理後に、復号化処理がなされ、平文が出力されてしまう。この暗号方式は安全性に欠けるともいえ、使用者はこのような暗号方式に不安感を抱き易い。例えば、基本構成のままの前記のDESでは、ある特別な鍵によっては、この二重暗号化処理によって平文が生成されてしまう。その特別な鍵は一般的に弱鍵と呼ばれている（弱鍵については、末尾に掲載の参考文献ICEに詳しい記載がある）。弱鍵の存在は、暗号強度の低下を招くとは直接的には言えないにしても、使用者の不注意によっては平文がそのまま通信路に送信されてしまうという虞があるので、暗号方式の使用場面では暗号方式に欠陥があると認識され、使用者に不用意に不安感あたえることになる（詳しくは、末尾に掲載の参考文献OK94の「暗号理論入門」参照）
【０１４９】
本発明の暗号方式は、暗号装置と復号装置を意識的に別構成にしたい場合にも、対応できる。図３０は、図９に示した暗号方法の変形例である暗号方法の処理の手順およびこの暗号方法で暗号化した暗号文を平文に復号する復号方法の処理の手順を示す図である。図３０に示す暗号方法及び復号方法では、暗号化処理において、その最終段に２次暗号文Ｅ2に変換処理のステップ１０を加えるとともに、復号化処理において処理と復号化ステップ６０の逆変換処理（暗号文変換）を行うことで、暗号処理と復号処理を別構成にしている。図３０における暗号化処理とは基本的に同じ構成要素でなる。暗号化処理におけるスッテップ番号Ｐの処理と、復号化処理側におけるＰ＋５０の番号の処理は、同じ処理である。但し、処理の流れを僅かに相違させてある。図３０で明らかなように、暗号化処理におけう最終暗号１０と、最終暗号１０に対応する復号化処理側における暗号文変換６０とは、異なる位置に置かれている。
【０１５０】
最終変換１０では、この２次暗号文Ｅ2を更に攪拌し、最終的な暗号文ＥＥを生成する。この攪拌方法には、さまざまな方法があり、それらの方法の内の少なくとも１つの攪拌方法を少なくとも１回行なう。例えば、２次暗号文Ｅ2の左右４ビットを交換するビット交換法がある。ビット交換法では、２次暗号文Ｅ2（１）（00101001）を（0010）と（1001）とに分け、（1001）（0010）の如く左右交換し、（10010010）として出力する。または、固有な一定の法則で出力されたビットをシフトするビットシフト法がある。このビットシフト法では、１ビット目を２ビット目に移行し、２ビット目を３ビット目に移行するといった具合に順次に移行を行い、最終の８ビット目を１ビット目に移行する。つまり、２次暗号文Ｅ2（１）（00101001）を（10010100）に変換し、出力する。
【０１５１】
暗号化側で最終変換１０を行い、暗号文ＥＥを通信回線などへ出力する。例えば、通信回線へ出力された暗号文ＥＥは、インターネット等を介して暗号文の受信者（通信の相手方）へ伝達される。暗号文ＥＥの受信者は、暗号文ＥＥとは別に共通鍵Ｋの提供を受けており、暗号文ＥＥおよび共通鍵Ｋを復号装置へ入力し、復号化側において、上記の最終変換と逆の処理をステップ６０の暗号文変換で行う。
【０１５２】
暗号化側における平文入力は、復号化側では、ステップ５６の暗号文入力になる。最終変換１０で、ビット交換処理を行った場合は、暗号文変換６０では、暗号文ＥEは（10010010）として暗号文入力５６に入力される。暗号文変換６０では、このビット交換法では、暗号文ＥE（10010010）を（1001）と（0010）とに分け、（0010）（1001）の如く左右交換し、（00101001）と変換し、以降、１次復号化処理などを行う。同様に、最終変換１０で、ビットシフト処理を行った場合は、暗号文変換６０では、暗号文ＥEは、（10010100）として暗号文入力５６に入力される。暗号文変換６０では、暗号装置と逆のビットシフト処理つまり、２ビット目を１ビット目に移行し、３ビット目を２ビット目に移行するといった具合に順次に移行を行い、最初の１ビット目を最終の８ビット目に移行する。つまり、暗号文ＥE（10010100）を（00101001）に変換し、以降、１次復号化処理などを行う。
【０１５３】
暗号処理と復号処理とを意識的に別構成にした図３０の構成を採用することで、使用者に不安感を与えることのない安全な暗号・復号方式を提供できる。
【０１５４】
【発明の効果】
以上に実施の形態を挙げ、詳しく説明したように、本発明によれば、鍵要素となる、使用者が任意に入力した鍵データ長もしくは携帯電話機固有の番号の長さが不十分な場合においても、鍵データまたは暗号文が他人に解読されるのを防ぐ可変長鍵変換方式を提供できる。つまり、本発明によれば、鍵の長さが任意であり、サーバ側管理者の必要に応じて、処理速度と暗号強度とを選択できる。
【０１５５】
また、本発明によれば、暗号アルゴリズムをコンピュータプログラムで実現したときにおけるプログラム量が小さく、プログラム容量が制限されている携帯電話機にも容易に搭載でき、暗号化速度が速く、しかも暗号強度が高い暗号方法および復号方法、並びにこれら暗号方法及び復号方法を実現するコンピュータプログラム、このコンピュータプログラムを有する応用ソフトウェアを提供できる。更に、本発明によれば、特定パターンが出現する画像データなどのファイルを暗号化する場合にも、暗号文においては平文のパターンが現れ難く、ひいては暗号強度が高い暗号・復号方式を提供できる。
【０１５６】
また、本発明によれば、最初のセッションで動的に応用ソフトウェア及び暗号鍵要素をダウンロードした後は、携帯電話機側でのセッション毎の応用ソフトウェア及び暗号鍵要素をダウンロードする必要がないため、セッション毎の通信におけるセキュリティの確保及び携帯電話機側およびサーバ側の負担を軽減する鍵要素生成方式および通信を提供できる。
【０１５７】
また、更に、本発明によれば、一度ダウンロードした応用ソフトウェアに含まれる鍵要素は暗号化して端末内に保管されるため、鍵要素の盗聴及び改竄を防止する鍵要素生成方式を提供できる。
【０１５８】
本発明の実施の形態に関する以上の説明に用いた符号の意味を次に整理して示す。［Ｖ］はベクトルデータテーブルである。ψはベクトルテーブル［Ｖ］における項目（升目）の数である。Ψは、ベクトルテーブル［Ｖ］に設定されるベクトルデータ初期値である。ρは、内部ベクトル生成８においてベクトル方向成分IRとして扱われる２次暗号文Ｅ２のデータ長であり、また内部ベクトル生成部１０８に設けられるベクトルテーブル［Ｖ］における項目（升目）のデータ長である。実施の形態では、ρは１バイトとした。μはデジタルカオス信号Ｃ，Ｃdのバイト数であり、実施の形態ではμは１２８バイトとした。ξはサブキーセットＬのバイト数である。［Ｋs］はキーストリームテーブルである。ηは、キーストリームテーブル［Ｋs］に保存されるキーストリームＫsのバイト数であり、η＝μ＋ξである。Ｋs（IR）はキーストリームテーブル［Ｋs］におけるアドレスＩＲのデータである。νは、共通鍵Ｋを分割してなる部分鍵のバイト数であり、実施の形態ではνは１バイトとした。ＳＥ2（ｍ）は、１バイトの２次暗号文Ｅ2（ｍ）をアドレスとして指定されるキーストリームテーブル［Ｋs］のデータである。XORは、排他的論理和演算を表す演算子である。ｍ mod ψは、整数ｍを整数ψで除したときにおける余りであり、例えばψ＝200，ｍ＝206であれば、ｍ mod ψ＝6である。
【０１５９】
以上の説明において参考文献として記載したもの及び暗号に関する参考文献を次に列挙する。
[AI90]合原一幸著  カオス  カオス理論の基礎と応用  サイエンス社  1990
[AI00]合原一幸編集  池口徹、山田泰司、小室元政著  カオス時系列解析の基礎と応用  産業図書  2000  
[NK97]Neal Koblitz著、櫻井幸一訳  数論アルゴリズムと楕円暗号理論入門  第３章．暗号理論  シュプリンガー・フェアラーク東京
[NK97] Neal Koblitz著、櫻井幸一訳  数論アルゴリズムと楕円暗号理論入門  第４章．公開鍵暗号  シュプリンガー・フェアラーク東京
[TK90]辻井重男、笠原正雄監修：「暗号と情報セキュリティ」昭晃堂、1990  非対称暗号のリスト
[DH76]Diffie,W. and Hellman,M E .:New directions in cryptography,IEEE Trans.on Information Theory, Vol.IT-22,No.6,pp.644-654,1976
[OK93]岡本栄司著  暗号理論入門  第４章．暗号用乱数  共立出版  1993
[OK94]岡本栄司著  暗号理論入門  第３章．対称暗号  共立出版  1993
[NK99]林彬訳  暗号の代数理論  第１章．暗号  シュプリンガー・フェアラーク東京株式会社
[KO61]池野信一、小山謙二著  現代暗号理論  第５章．  公開鍵暗号  電子情報通信学会  S61
[FUMI00]小松文子他著  PKIハンドブック  第１部  ＰＫＩの基礎知識（公開鍵暗号基盤）  ソフト・リサーチ・センター  2000
[ipa]乗法処理推進事業協会  暗号技術関連サイト  http://www.ipa.go.jp/security/enc/CRYPTREC/index.html
［ICE］The ICE Home Page http://www.darkside.com.au/ice/cryptanalysis.html
［TAKA72］日経インターネットテクノロジー 2001.12 No.053 特集２  携帯電話のアクセスを安全に  日経ＢＰ社  2001
【図面の簡単な説明】
【図１】本発明の実施において使用される装置の構成例を表す図である。
【図２】動的生成プログラム生成における鍵要素生成方法を示す流れ図である。
【図３】図２においてインストールされたプログラムにおける、暗号から送信、サーバでの処理、受信から復号までの流れを表す流れ図である。
【図４】動的生成プログラム生成における固体認証機能を用いた場合の鍵要素生成方法を示す流れ図である。
【図５】図４においてインストールされたプログラムにおける、暗号から送信、サーバでの処理、受信から復号までの流れを表す流れ図である。
【図６】動的生成プログラム生成において、鍵長補完方式と固体認証方式とを融合した場合の鍵要素生成方法を示す流れ図である。
【図７】図６においてインストールされたプログラムにおける、暗号から送信、サーバでの処理、受信から復号までの流れを表す流れ図である。
【図８】
本発明の一実施の形態の暗号方法におけるベクトルデータ生成方法を示す概念図である。
【図９】
本発明の一実施の形態の暗号方法を実行する暗号アルゴリズムにおける暗号化処理の手順を示す図である。
【図１０】
図９の暗号アルゴリズムを実現する暗号装置（本発明の一実施の形態の暗号装置）の構成を示す図である
【図１１】
iを横軸にとり、 X(i)を縦軸にとってロジスティック写像の不規則性を例示する図である。
【図１２】
X(i)を横軸にとり、X(i+1)を横軸にとって表したロジスティック写像の特性図である。
【図１３】
図１０に示した暗号装置におけるカオスエミュレータ１０２の構成を示す図である。
【図１４】
図１０に示した暗号装置におけるカオスエミュレータ１０２とカオスフィルタ１０３との間のデータの流れを示す概念図である。
【図１５】
図１０に示した暗号装置におけるカオスフィルタ１０３におけるデータの処理を部分的に示す概念図である。
【図１６】
図１０に示した暗号装置において、カオスエミュレータ１０２から送られたデータに関しカオスフィルタ１０３で行う処理を示す概念図である。
【図１７】
図１０に示した暗号装置においてサブキーセットＬを生成する鍵初期変換部１０４の構成、およびキーストリーム生成部１０５に入力され攪拌されるカオス信号Ｃｄ及びサブキーセットＬの関係を示す図である。
【図１８】
図１０の暗号装置におけキーストリーム生成部１０５で行われるカオス信号ＣｄとサブキーセットＬとの攪拌処理を示す概念図である。
【図１９】
図９及び図１０に示した実施の形態により暗号化する平文の例として、全面が黒色の図形（Ａ）、全面が白色の図形（Ｂ）および上半分の領域が黒色であり、下半分の領域が白色である図形（Ｃ）を示す図である。
【図２０】
図１９（Ａ）の全面黒色図形、同図（Ｂ）の全面白色図形および同図（Ｃ）の黒白図形並びにMicrosoft Visio 2000 SRI日本語版（The Visual Language Business）におけるHelpフォルダの全て（13.4MB）を圧縮ソフトによってlzhファイルとして得たデータを平文として図６及び図７に示した実施の形態に入力し、該平文を暗号化し、暗号文を復号したときに、それら平文、暗号文および復号文における０，１の出現頻度分布を示す図である。
【図２１】
図１９（Ａ）の全面黒色図形に関する平文、暗号文および復号文における画素（ピクセル）の濃度を２桁の１６進数のバイナリデータ（即ち２５６階調）で表現したときにおけるに各バイナリデータの出現頻度分布を示す表であり、縦軸は２桁の１６進数における２桁目を表し、横軸は２桁の１６進数における１桁目を表す。
【図２２】
図１９（Ａ）の全面黒色図形に関する平文、暗号文および復号文における画素（ピクセル）の濃度を２桁の１６進数のバイナリデータ（即ち２５６階調）で表現したときにおけるに各バイナリデータの出現頻度分布を示す折線グラフであり、縦軸は出現頻度を表し、横軸は２桁の１６進数における１桁目を表す。各折線は、図２１の表における縦軸の各欄にそれぞれ対応している。
【図２３】
図１９（Ｂ）の全面白色図形に関する図２１と同様の表である。
【図２４】
図１９（Ｂ）の全面白色図形に関する図２２と同様の折れ線グラフである。各折線は、図２０の表における縦軸の各欄にそれぞれ対応している。
【図２５】
図１９（Ｃ）の黒白図形に関する図２１と同様の表である。
【図２６】
図１９（Ｃ）の黒白図形に関する図２２と同様の折れ線グラフである。各折線は、図２５の表における縦軸の各欄にそれぞれ対応している。
【図２７】
図２０の表に示したHelp.Izh(Visio)ファイルに関する平文、暗号文および復号文におけるデータを２桁の１６進数のバイナリデータで表現したときにおけるに各バイナリデータの出現頻度分布を示す表であり、縦軸は２桁の１６進数における２桁目を表し、横軸は２桁の１６進数における１桁目を表す。
【図２８】
図２０の表に示したHelp.Izh(Visio)ファイルに関する平文、暗号文および復号文におけるデータを２桁の１６進数のバイナリデータで表現したときにおけるに各バイナリデータの出現頻度分布を示す折線グラフであり、縦軸は出現頻度を表し、横軸は２桁の１６進数における１桁目を表す。各折線は、図２７の表における縦軸の各欄にそれぞれ対応している。
【図２９】
図１７に示した鍵初期変換部１０４に相当する従来の鍵変換回路を示す回路ブロック図である。
【図３０】
図９に示した暗号方法の変形例である暗号方法の処理の手順およびこの暗号方法で暗号化した暗号文を平文に復号する復号方法の処理の手順を示す図である。
【符号の説明】
１，５１      鍵（Ｋ）入力
２，５２      カオスエミュレーション
３，５３      カオスフィルタリング
４，５４      鍵初期変換
５，５５      キーストリーム（Ｋs）生成
６      平文（Ｐ）入力
７      １次暗号化
８，５８      内部ベクトル（Ｖ）生成
９      ２次暗号化
１０      最終変換
１１      暗号文（ＥＥ）出力
５６      暗号文（ＥＥ）入力
５７      １次復号化
５９      ２次復号化
６０      暗号文変換
６１      平文（Ｐ）出力
101      鍵（Ｋ）入力部
102      カオスエミュレータ
103      カオスフィルタ
104      鍵初期変換部
105      キーストリーム（Ｋs）生成部
106      平文（Ｐ）入力部
107      １次暗号化部
108      内部ベクトル（Ｖ）生成部
109      ２次暗号化部
110      最終変換部
111      暗号文（ＥＥ）出力部
201，2011，2012    Javaプログラム実行可能携帯電話端末
202      データ守秘サービス提供サーバ
203      プログラム実行装置
205      プログラム格納装置
204      HTTP通信装置
206      利用者確認応答プログラム
207      通信管理機能
208      データ守秘管理装置
209      プログラム生成装置
210      HTTP通信装置
211      プログラム
208      データ守秘管理装置
212      送受信管理プログラム
213      利用者管理データ格納装置
214      守秘データ格納装置
215      動的プログラム生成装置
216      システム内固有ID生成装置
217      暗号／復号プログラム
301      動的プログラムのダウンロード要請
302      利用者認証確認通信
303      プログラムダウンロード
304      プログラムダウンロード確認
306      利用者認証確認
307      動的プログラム作成開始
308      サービス内固有データα生成
309      サービス内固有データα保存
310      暗号／復号プログラム217へのαの埋め込み
1021      鍵分割部
1022      初期値演算部
1023      カオス関数演算部
Base      ベース値
Offset      オフセット値
Ｃ      デジタルカオス信号（カオスエミュレータ２の出力）
Ｃ(ｎ)      128バイトのデジタルカオス信号Ｃ128における第ｎバイト目のデー
タ
C128(ｎ)       カオスエミュレータ102において部分鍵Ｋ(ｎ)に対応して生成さ
れた128バイトのデジタルカオス信号Ｃ（ｎは整数、１≦ｎ≦λ）
Ｃd      デジタルカオス信号（カオスフィルタ３の出力）
ＩＲ      ２次暗号文Ｅ２における１バイトのデータであり、ベクトル方向成分
としてキーストリームＫs内のデータを指し示すデータ
init      カオス関数の初期値
Ｋ      鍵（共通鍵）
K(1)，K(2)，K(3)，・・…，K(n)，・・・・・，K(λ-1)，K(λ)      鍵Ｋを１バイト
づつに分割して得られる部分鍵
ＫＯ      オペレータ鍵
Ｋp      プレキーストリーム
Ｋs      キーストリーム
Ｋt(０)      鍵初期変換部104におけるＫt(ｎ)の初期値であり、Ｋt(０)＝Ｋ(
１)
Ｋt(１)      Ｋ(１)＋Ｋ(０)
Ｋt(２)      Ｋ(２)＋Ｋ(１)
Ｌ      サブキーセット
Ｌ(０)      鍵初期変換部104におけるサブキーＬ(ｎ)の初期値であり、Ｌ(０)
＝Ｋ(１)
Ｌ(ｎ)      鍵初期変換部104におけるサブキー
Ｏ(１)      鍵初期変換部104におけるサブキー中間値Ｏ(ｎ)の初期値であり、
Ｏ(１)＝Ｌ(０)＋Ｖ(１)
Ｏ(ｎ)      鍵初期変換部104におけるサブキー中間値
Ｐ      平文
Ｔｄ      タイムデータ（時間データ）
Ｅ１      １次暗号文
Ｅ２      ２次暗号文
ＥＥ      暗号文
Ｖ      ２次暗号化部109において１次暗号文Ｅ１との間で排他的論理和演算さ
れる内部ベクトル
α      カオス関数のパラメータ
λ      鍵Ｋのバイト数
ξ      サブキーセットＬにおけるバイト数