(57)【特許請求の範囲】
【請求項１】
第１のシフトレジスタと、
該第１のシフトレジスタにデータをフィードバックし、前記第１のシフトレジスタとともに、線形フィードバックシフトレジスタを構成する線形フィードバック関数と、
２つに分割された第２のシフトレジスタ、第３のシフトレジスタと、
前記第２のシフトレジスタと、前記第３のシフトレジスタと、第１の非線形関数器と、第２の非線形関数器とともに、動的フィードバックシフトレジスタを構成する動的フィードバック関数と、
前記第２のシフトレジスタ、第３のシフトレジスタからの入力データと前記第１のシフトレジスタからの入力データとを非線形変換する非線形変換手段と、
前記非線形変換手段の出力データと入力した平文との排他的論理和演算を行い暗号文を出力する排他的論理和演算器と、
を備え、
前記第１の非線形関数器が、前記動的フィードバック関数の出力データを非線形変換し、前記第２の非線形関数器が、前記第２のシフトレジスタの出力データと出力される暗号文との排他的論理和に対して非線形変換を行なうとともに、前記第２のシフトレジスタには、前記第１の非線形関数器において非線形変換されたデータと前記第１のシフトレジスタ内のデータとの加算値が入力され、前記第３のシフトレジスタには、前記第２の非線形関数器において非線形変換されたデータと前記第１のシフトレジスタ内のデータとの加算値が入力されることを特徴とするストリーム暗号の暗号化装置。
【請求項２】
前記非線形変換手段が、４つの内部メモリを内部状態として備え、該４つの内部メモリ間で非線形関数器を介した結線構造を有することを特徴とする請求項１に記載のストリーム暗号の暗号化装置。
【請求項３】
暗号化処理の実行後に、すべてのデータを「０」とした平文を入力して空まわし処理を指定回数実行することを特徴とする請求項１に記載のストリーム暗号の暗号化装置。
【請求項４】
前記空まわし処理の後で、指定ビット長の鍵系列をメッセージ認証子として出力することを特徴とする請求項３に記載のストリーム暗号の暗号化装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、安全でしかも効率的な認証を実現できるストリーム暗号の暗号化装置、ストリーム暗号の復号化装置、ストリーム暗号の暗号化方法、ストリーム暗号の復号化方法およびプログラムに関する。
【背景技術】
【０００２】
近年、コンピュータを利用した様々なサービスが提供されている。多くのサービスに置いては、通信の秘匿を実現するため、暗号が利用される。暗号方式として最も一般的なものは、１つの鍵で暗号化・復号化を行う共通鍵暗号方式であるが、共通鍵暗号方式は、大きくブロック暗号方式とストリーム暗号方式の２つに分けられる。
【０００３】
前者は、最も一般的に用いられている方式であるが、後者の方が処理速度に優れるため、近年注目を集めつつある。一方、認証付き暗号という方式がある。これは、１つのアルゴリズムでメッセージ認証と暗号化を同時に実現しようとするアルゴリズムである（例えば、非特許文献１参照。）。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】Ｐｈｉｌｉｐ  Ｈａｗｋｅｓ, Ｃａｍｅｒｏｎ  ＭｃＤｏｎａｌｄ, Ｍｉｃｈａｅｌ  Ｐａｄｄｏｎ, Ｇｒｅｇｏｒｙ  Ｇ. Ｒｏｓｅ,   ａｎｄ Ｍｉｒｉａｍ  Ｗｉｇｇｅｒｓ ｄｅ  Ｖｒｉｅｓ, “Ｓｐｅｃｉｆｉｃａｔｉｏｎ  ｆｏｒ  ＮＬＳｖ２ ,” Ｎｅｗ  Ｓｔｒｅａｍ  Ｃｉｐｈｅｒ  Ｄｅｓｉｇｎｓ,  Ｌｎｃｓ, Ｖｏｌ．４９８６、２００８．
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、これまで、ストリーム暗号を認証付き暗号にするためには、アルゴリズムの再設計が必要であった。または、設計の段階から認証機能の組み込みを考慮する必要があった。さらには、認証付きストリーム暗号のほとんどすべてが攻撃により破られており、安全な認証付きストリーム暗号はほとんど無いという状況である。
【０００６】
そこで、本発明は、上述の課題に鑑みてなされたものであり、安全でしかも効率的な認証を実現できるストリーム暗号の暗号化装置、ストリーム暗号の復号化装置、ストリーム暗号の暗号化方法、ストリーム暗号の復号化方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、上記の課題を解決するために、以下の事項を提案している。なお、理解を容易にするために、本発明の実施形態に対応する符号を付して説明するが、これに限定されるものではない。
【０００８】
（１）本発明は、第１のシフトレジスタ（例えば、図１のシフトレジスタ２００に相当）と、該第１のシフトレジスタにデータをフィードバックし、前記第１のシフトレジスタとともに、線形フィードバックシフトレジスタを構成する線形フィードバック関数（例えば、図１の線形フィードバック関数１００に相当）と、２つに分割された第２のシフトレジスタ、第３のシフトレジスタ（例えば、図１のシフトレジスタ４００、５００に相当）と、前記第２のシフトレジスタと、前記第３のシフトレジスタと、第１の非線形関数器（例えば、図１の非線形関数器７１０に相当）と、第２の非線形関数器（例えば、図１の非線形関数器７２０に相当）とともに、動的フィードバックシフトレジスタを構成する動的フィードバック関数（例えば、図１の動的フィードバック関数３００に相当）と、前記第２のシフトレジスタ、第３のシフトレジスタとともに、動的線形フィードバックシフトレジスタを構成する動的フィードバック関数（例えば、図１の動的フィードバック関数３００に相当）と、前記第２のシフトレジスタ、第３のシフトレジスタからの入力データと前記第１のシフトレジスタからの入力データとを非線形変換する非線形変換手段（例えば、図１の非線形変換部６００に相当）と、前記非線形変換手段の出力データと入力した平文との排他的論理和演算を行い暗号文を出力する排他的論理和演算器（例えば、図１の排他的論理和演算器７４０、７５０に相当）と、を備え、前記第１の非線形関数器が、前記動的フィードバック関数の出力データを非線形変換し、前記第２の非線形関数器が、前記第２のシフトレジスタの出力データと出力される暗号文との排他的論理和に対して非線形変換を行なうとともに、前記第２のシフトレジスタには、前記第１の非線形関数器において非線形変換されたデータと前記第１のシフトレジスタ内のデータとの加算値が入力され、前記第３のシフトレジスタには、前記第２の非線形関数器において非線形変換されたデータと前記第１のシフトレジスタ内のデータとの加算値が入力されることを特徴とするストリーム暗号の暗号化装置を提案している。
【０００９】
この発明によれば、ストリーム暗号の暗号化装置は、第１のシフトレジスタと、第１のシフトレジスタにデータをフィードバックし、第１のシフトレジスタとともに、線形フィードバックシフトレジスタを構成する線形フィードバック関数と、２つに分割された第２のシフトレジスタ、第３のシフトレジスタと、第２のシフトレジスタと、第３のシフトレジスタと、第１の非線形関数器と、第２の非線形関数器とともに、動的フィードバックシフトレジスタを構成する動的フィードバック関数と、第２のシフトレジスタ、第３のシフトレジスタからの入力データと第１のシフトレジスタからの入力データとを非線形変換する非線形変換手段と、非線形変換手段の出力データと入力した平文との排他的論理和演算を行い暗号文を出力する排他的論理和演算器と、を備え、第１の非線形関数器が、動的フィードバック関数の出力データを非線形変換し、第２の非線形関数器が、第２のシフトレジスタの出力データと出力される暗号文との排他的論理和に対して非線形変換を行なうとともに、第２のシフトレジスタには、第１の非線形関数器において非線形変換されたデータと第１のシフトレジスタ内のデータとの加算値が入力され、第３のシフトレジスタには、第２の非線形関数器において非線形変換されたデータと第１のシフトレジスタ内のデータとの加算値が入力される。つまり、上記の構成とすることにより、安全性を従来よりも向上させつつ、高速な暗号化処理を実現することができる。
【００１０】
（２）本発明は、（１）のストリーム暗号の暗号化装置について、前記非線形変換手段が、４つの内部メモリ（例えば、図２の内部メモリＬ１、Ｌ２、Ｒ１、Ｒ２に相当）を内部状態として備え、該４つの内部メモリ間で非線形関数器（例えば、図２の非線形関数６２０ａ、６２０ｂ、６２０ｃ、６２０ｄに相当）を介した結線構造を有することを特徴とするストリーム暗号の暗号化装置を提案している。
【００１１】
この発明によれば、非線形変換手段が、４つの内部メモリを内部状態として備え、４つの内部メモリ間で非線形関数器を介した結線構造を有する。つまり、非線形変換手段をこうした構成とすることにより、安全性を相乗的に増加させることができる。
【００１４】
（３）本発明は、（１）のストリーム暗号の暗号化装置について、暗号化処理の実行後に、すべてのデータを「０」とした平文を入力して空まわし処理を指定回数実行することを特徴とするストリーム暗号の暗号化装置を提案している。
【００１５】
この発明によれば、暗号化処理の実行後に、すべてのデータを「０」とした平文を入力して空まわし処理を指定回数実行する。つまり、この処理を実行することにより、メッセージ認証子を作成することができるため、安全な認証付きストリーム暗号を生成することができる。
【００１６】
（４）本発明は、（３）のストリーム暗号の暗号化装置について、前記空まわし処理の後で、指定ビット長の鍵系列をメッセージ認証子として出力することを特徴とするストリーム暗号の暗号化装置を提案している。
【００１７】
この発明によれば、空まわし処理の後で、指定ビット長の鍵系列をメッセージ認証子として出力する。つまり、出力するメッセージ認証子と暗号文とを結合して出力結果を生成することにより、安全な認証付きストリーム暗号を生成することができる。
【００２０】
（６）本発明は、（５）のストリーム暗号の復号化装置について、前記非線形変換手段が、４つの内部メモリ（例えば、図５の内部メモリＬ１、Ｌ２、Ｒ１、Ｒ２に相当）を内部状態として備え、該４つの内部メモリ間で非線形関数器（例えば、図５の非線形関数器６２０ａ、６２０ｂ、６２０ｃ、６２０ｄに相当）を介した結線構造を有することを特徴とするストリーム暗号の暗号化装置を提案している。
【００２１】
この発明によれば、非線形変換手段が、４つの内部メモリを内部状態として備え、４つの内部メモリ間で非線形関数器を介した結線構造を有する。つまり、非線形変換手段をこうした構成とすることにより、安全性を相乗的に増加させることができる。
【００２４】
（７）本発明は、（５）のストリーム暗号の復号化装置について、復号化処理の実行後に、すべてのデータを「０」とした暗号文を入力して空まわし処理を指定回数実行することを特徴とするストリーム暗号の暗号化装置を提案している。
【００２５】
この発明によれば、復号化処理の実行後に、すべてのデータを「０」とした平文を入力して空まわし処理を指定回数実行する。つまり、この処理を実行することにより、メッセージ認証子を作成することができるため、安全な認証付き平文を生成することができる。
【００２６】
（８）本発明は、（７）のストリーム暗号の復号化装置について、前記空まわし処理の後で、指定ビット長の鍵系列をメッセージ認証子として出力することを特徴とするストリーム暗号の復号化装置を提案している。
【００２７】
この発明によれば、空まわし処理の後で、指定ビット長の鍵系列をメッセージ認証子として出力する。つまり、送信されてきた暗号文に結合されたメッセージ認証子と生成したメッセージ認証子とを比較することにより、両者が一致するか否かを検証することができる。
【００２８】
（１１）本発明は、初期鍵、初期ベクトルを読み込む第１のステップ（例えば、図３のステップＳ１０１に相当）と、初期化処理を実施する第２のステップ（例えば、図３のステップＳ１０２に相当）と、鍵系列生成処理を実行し、鍵系列を生成する第３のステップ（例えば、図３のステップＳ１０３に相当）と、該生成した鍵系列と平文との排他的論理和演算を実行することにより暗号文を生成する第４のステップ（例えば、図３のステップＳ１０４に相当）と、該生成した暗号文を動的フィードバック関数および分割した一方の動的フィードバックレジスタの最終レジスタに逐次入力し、平文の入力が終了した後も、平文をオールゼロとして空回しを実行する第５のステップ（例えば、図３のステップＳ１０５に相当）と、該空回し終了後に、指定ビット長の鍵系列を生成し、メッセージ認証子として出力する第６のステップ（例えば、図３のステップＳ１０６に相当）と、該メッセージ認証子を暗号文に添付して出力する第７のステップ（例えば、図３のステップＳ１０７に相当）と、を備えたことを特徴とするストリーム暗号の暗号化方法を提案している。
【００２９】
この発明によれば、初期鍵、初期ベクトルを読み込み、初期化処理を実施する。次いで、鍵系列生成処理を実行し、鍵系列を生成し、生成した鍵系列と平文との排他的論理和演算を実行することにより暗号文を生成し、生成した暗号文を動的フィードバック関数および分割した一方の動的フィードバックレジスタの最終レジスタに逐次入力し、平文の入力が終了した後も、平文をオールゼロとして空回しを実行する。そして、空回し終了後に、指定ビット長の鍵系列を生成し、メッセージ認証子として出力し、メッセージ認証子を暗号文に添付して出力する。つまり、上記の処理を行うことにより、安全性を従来よりも向上させつつ、高速な暗号化処理を実現することができる。また、出力するメッセージ認証子と暗号文とを結合して出力結果を生成することにより、安全な認証付きストリーム暗号を生成することができる。
【００３０】
（１２）本発明は、（１１）のストリーム暗号の暗号化方法により暗号化された暗号文を復号するストリーム暗号の復号化方法であって、初期鍵、初期ベクトルを読み込む第１のステップ（例えば、図６のステップＳ２０１に相当）と、初期化処理を実施する第２のステップ（例えば、図６のステップＳ２０２に相当）と、鍵系列生成処理を実行し、鍵系列を生成する第３のステップ（例えば、図６のステップＳ２０３に相当）と、暗号文とメッセージ認証子とを受信する第４のステップ（例えば、図６のステップＳ２０４に相当）と、該生成した鍵系列と受信した暗号文との排他的論理和演算を実行することにより平文を生成する第５のステップ（例えば、図６のステップＳ２０５に相当）と、該生成した平文を分割した２つのメッセージ認証子作成用メモリに逐次入力し、前記暗号文の入力が終了した後も、前記暗号文をオールゼロとして空回しを実行する第６のステップ（例えば、図６のステップＳ２０６に相当）と、該空回し終了後に、前記分割した２つのメッセージ認証子用メモリの値を結合し、メッセージ認証子とする第７のステップ（例えば、図６のステップＳ２０７に相当）と、該メッセージ認証子を平文に添付して出力する第７のステップと、前記出力されたメッセージ認証子と前記受信したメッセージ認証子とが一致するか否かを検証する第８のステップ（例えば、図６のステップＳ２０８に相当）と、を備えたことを特徴とするストリーム暗号の復号化方法を提案している。
【００３１】
この発明によれば、初期鍵、初期ベクトルを読み込み、初期化処理を実施する。次いで、鍵系列生成処理を実行し、鍵系列を生成し、生成した鍵系列と暗号文との排他的論理和演算を実行することにより平文を生成し、生成した平文を分割した２つのメッセージ認証子作成用メモリに逐次入力し、暗号文の入力が終了した後も、暗号文をオールゼロとして空回しを実行する。そして、空回し終了後に、分割した２つのメッセージ認証子用メモリの値を結合し、メッセージ認証子とし、メッセージ認証子を平文に添付して出力する。つまり、上記の処理を行うことにより、安全性を従来よりも向上させつつ、高速な復号化処理を実現することができる。また、送信されてきた暗号文に結合されたメッセージ認証子と生成したメッセージ認証子とを比較することにより、両者が一致するか否かを検証することができる。
【００３２】
（１３）本発明は、初期鍵、初期ベクトルを読み込む第１のステップ（例えば、図３のステップＳ１０１に相当）と、初期化処理を実施する第２のステップ（例えば、図３のステップＳ１０２に相当）と、鍵系列生成処理を実行し、鍵系列を生成する第３のステップ（例えば、図３のステップＳ１０３に相当）と、該生成した鍵系列と平文との排他的論理和演算を実行することにより暗号文を生成する第４のステップ（例えば、図３のステップＳ１０４に相当）と、該生成した暗号文を動的フィードバック関数および分割した一方の動的フィードバックレジスタの最終レジスタに逐次入力し、平文の入力が終了した後も、平文をオールゼロとして空回しを実行する第５のステップ（例えば、図３のステップＳ１０５に相当）と、該空回し終了後に、指定ビット長の鍵系列を生成し、メッセージ認証子として出力する第６のステップ（例えば、図３のステップＳ１０６に相当）と、該メッセージ認証子を暗号文に添付して出力する第７のステップ（例えば、図３のステップＳ１０７に相当）と、を備えたことを特徴とするストリーム暗号の暗号化方法を提案している。
【００３３】
この発明によれば、初期鍵、初期ベクトルを読み込み、初期化処理を実施する。次いで、鍵系列生成処理を実行し、鍵系列を生成し、生成した鍵系列と平文との排他的論理和演算を実行することにより暗号文を生成し、生成した暗号文を動的フィードバック関数および分割した一方の動的フィードバックレジスタの最終レジスタに逐次入力し、平文の入力が終了した後も、平文をオールゼロとして空回しを実行する。そして、空回し終了後に、指定ビット長の鍵系列を生成し、メッセージ認証子として出力し、メッセージ認証子を暗号文に添付して出力する。つまり、上記の処理を行うことにより、安全性を従来よりも向上させつつ、高速な暗号化処理を実現することができる。また、出力するメッセージ認証子と暗号文とを結合して出力結果を生成することにより、安全な認証付きストリーム暗号を生成することができる。
【００３４】
（１４）本発明は、前記請求項１３に記載のプログラムにより暗号化された暗号文を復号するプログラムであって、初期鍵、初期ベクトルを読み込む第１のステップ（例えば、図６のステップＳ２０１に相当）と、初期化処理を実施する第２のステップ（例えば、図６のステップＳ２０２に相当）と、鍵系列生成処理を実行し、鍵系列を生成する第３のステップ（例えば、図６のステップＳ２０３に相当）と、暗号文とメッセージ認証子とを受信する第４のステップ（例えば、図６のステップＳ２０４に相当）と、該生成した鍵系列と受信した暗号文との排他的論理和演算を実行することにより平文を生成する第５のステップ（例えば、図６のステップＳ２０５に相当）と、該生成した平文を動的フィードバック関数および分割した一方の動的フィードバックレジスタの最終レジスタに逐次入力し、暗号文の入力が終了した後も、暗号文をオールゼロとして空回しを実行する第５のステップ（例えば、図６のステップＳ２０６に相当）と、該空回し終了後に、指定ビット長の鍵系列を生成し、メッセージ認証子として出力する第７のステップ（例えば、図６のステップＳ２０７に相当）と、該メッセージ認証子を平文に添付して出力する第７のステップと、前記出力されたメッセージ認証子と前記受信したメッセージ認証子とが一致するか否かを検証する第８のステップ（例えば、図６のステップＳ２０８に相当）と、をコンピュータに実行させるためのプログラムを提案している。
【００３５】
この発明によれば、初期鍵、初期ベクトルを読み込み、初期化処理を実施する。次いで、鍵系列生成処理を実行し、鍵系列を生成し、生成した平文を動的フィードバック関数および分割した一方の動的フィードバックレジスタの最終レジスタに逐次入力し、暗号文の入力が終了した後も、暗号文をオールゼロとして空回しを実行し、空回し終了後に、指定ビット長の鍵系列を生成し、メッセージ認証子として出力し、メッセージ認証子を平文に添付して出力する。つまり、上記の処理を行うことにより、安全性を従来よりも向上させつつ、高速な復号化処理を実現することができる。また、送信されてきた暗号文に結合されたメッセージ認証子と生成したメッセージ認証子とを比較することにより、両者が一致するか否かを検証することができる。
【発明の効果】
【００３６】
本発明によれば、安全かつ効率的な認証付きストリーム暗号を生成できるという効果がある。また、復号処理においても安全かつ効率的な処理を実現できるという効果がある。
【図面の簡単な説明】
【００３７】
【図１】本発明の第１の実施形態に係るストリーム暗号の暗号化装置の概略構成を示す図である。
【図２】本発明の第１の実施形態に係るストリーム暗号の暗号化装置の具体的な構成を示す図である。
【図３】本発明の第１の実施形態に係るストリーム暗号の暗号化装置の具体的な処理を示す図である。
【図４】本発明の第２の実施形態に係るストリーム暗号の復号化装置の具体的な処理を示す図である。
【発明を実施するための形態】
【００３８】
以下、本発明の実施形態について、図面を用いて、詳細に説明する。
なお、本実施形態における構成要素は適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組合せを含む様々なバリエーションが可能である。したがって、本実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
【００３９】
図１から図６を用いて、本発明に係るストリーム暗号の暗号化装置および復号化装置について説明する。
【００４０】
＜第１の実施形態＞
図１から図３を用いて、本実施形態に係るストリーム暗号の暗号化装置について説明する。
【００４１】
＜ストリーム暗号の暗号化装置の概略構成＞
図１に示すように、本実施形態に係るストリーム暗号の暗号化装置は、線形フィードバック関数１００と、シフトレジスタ２００と、動的フィードバック関数３００と、シフトレジスタＡ４００と、シフトレジスタＢ５００と、非線形変換部６００と、非線形関数器（Ｍｓｕｂ）７１０、７２０と、排他的論理和演算器７３０、７４０、７５０とから構成されている。
【００４２】
線形フィードバック関数１００は、シフトレジスタ２００から取得したデータに演算処理を行い、演算結果に基づいて、演算処理後のデータをシフトレジスタ２００の最終レジスタにフィードバックするか否かを制御する。
【００４３】
シフトレジスタＡ４００およびシフトレジスタＢ５００は、動的フィードバック関数３００の処理結果により動的に構造が変化するシフトレジスタである。したがって、より安全に暗号化処理および認証子の導出を行うことができる。
【００４４】
非線形変換部６００は、シフトレジスタ２００およびシフトレジスタＡ４００、シフトレジスタＢ５００から入力したデータについて、非線形変換の処理を行う。
【００４５】
非線形関数器（Ｍｓｕｂ）７１０は、動的フィードバック関数３００からの出力に対して、ＡＥＳ暗号のＭｉｘ  Ｃｏｌｕｍｎ処理、Ｓ−Ｂｏｘ処理、Ｍｉｘ  Ｃｏｌｕｍｎ処理を順番に行い、処理結果をシフトレジスタＡ４００の最終レジスタに出力する。非線形関数器（Ｍｓｕｂ）７２０は、シフトレジスタＡ４００の出力レジスタの値と非線形変換部６００から出力される暗号文とを排他的論理和演算器７３０において演算した値に対して、ＡＥＳ暗号のＭｉｘ  Ｃｏｌｕｍｎ処理、Ｓ−Ｂｏｘ処理、Ｍｉｘ  Ｃｏｌｕｍｎ処理を順番に行う。そして、その処理結果とシフトレジスタ２００内のデータとの加算値がシフトレジスタＢ５００の最終レジスタに出力される。
【００４６】
排他的論理和演算器７４０、７５０は、非線形変換部６００からの出力と平文との排他的論理和演算を行って、暗号文を生成する。なお、暗号化処理終了後は、平文の値をオール「０」として空回しを指定回数実行し、空回し後に、指定ビット長の鍵系列を出力して、メッセージ認証子とする。さらに、生成した暗号文とメッセージ認証子とを結合して、最終的な出力とする。
【００４７】
＜ストリーム暗号の暗号化装置の具体的な構成＞
図２に示すように、線形フィードバック関数１００は、複数の排他的論理和演算器により構成されている。また、動的フィードバック関数３００は、複数の排他的論理和演算器と加算器により構成されており、図２の場合には、シフトレジスタ２００の２番目のレジスタにおける４ビットのデータにより、フィードバック処理において、加算器を選択するのか、排他的論理和演算器を選択するのかを制御する。このような制御を行うことにより、ストリーム暗号装置全体の安全性を向上させることができる。
【００４８】
非線形変換部６００は、内部メモリ６１０ａ、６１０ｂ、６１０ｃ、６１０ｄ、６１０ｅと、非線形関数（Ｓｕｂ）６２０ａ、６２０ｂ、６２０ｃ、６２０ｄ、６２０ｅと、加算器６３０ａ、６３０ｂ、６３０ｃ、６３０ｄ、６３０ｅと、排他的論理和演算器６４０ａ、６４０ｂとから構成されている。
【００４９】
加算器６３０ａは、シフトレジスタＡ４００と内部メモリＬ２とに接続されており、内部メモリＬ２の値とシフトレジスタＡ４００からの出力値とを加算して、非線形関数器６２０ｂに出力する。
【００５０】
加算器６３０ｂは、シフトレジスタＢ５００と内部メモリＲ２とに接続されており、内部メモリＲ２の値とシフトレジスタＢ５００からの出力値とを加算して、非線形関数器６２０ｃに出力する。なお、非線形関数器（Ｓｕｂ）６２０ａ、６２０ｂ、６２０ｃ、６２０ｄ、６２０ｅは、ＡＥＳ暗号のＳ−Ｂｏｘ処理、Ｍｉｘ  Ｃｏｌｕｍｎ処理を順番に行い、処理結果を各内部メモリ６１０ａ、６１０ｂ、６１０ｃ、６１０ｄ、６１０ｅに出力する。
【００５１】
加算器６３０ｃは、内部メモリ（Ｌ２）６１０ｃと内部メモリ（Ｌ１）６１０ａとに接続されており、内部メモリ（Ｌ２）６１０ｃと内部メモリ（Ｌ１）６１０ａとを加算して、排他的論理和演算器６４０ａに出力する。
【００５２】
加算器６３０ｄは、内部メモリ（Ｒ２）６１０ｄと内部メモリ（Ｒ１）６１０ｂとに接続されており、内部メモリ（Ｒ２）６１０ｄと内部メモリ（Ｒ１）６１０ｂとを加算して、排他的論理和演算器６４０ｂに出力する。
【００５３】
内部メモリ（Ｌ１）６１０ａは、非線形関数６２０ｃの出力値を保存し、内部メモリ（Ｒ１）６１０ｂは、非線形関数６２０ｃの出力値を保存し、内部メモリ（Ｌ２）６１０ｃは、非線形関数６２０ａの出力値を保存し、内部メモリ（Ｒ２）６１０ｄは、非線形関数６２０ｄの出力値を保存する。このように、４つの内部メモリを内部状態として備え、４つの内部メモリ間で非線形関数器を介した結線構造とすることにより、安全性を相乗的に増加させることができる。
【００５４】
排他的論理和演算器６４０ａは、加算器６３０ｃの出力値とシフトレジスタ２００の出力値との排他的論理和演算を行って、演算結果を排他的論理和演算器７４０に出力する。排他的論理和演算器６４０ｂは、加算器６３０ｄの出力値とシフトレジスタ２００からの値との排他的論理和演算を行って、演算結果を排他的論理和演算器７５０に出力する。
【００５５】
＜ストリーム暗号の暗号化装置の処理＞
図３を用いて、本実施形態に係るストリーム暗号の暗号化装置の処理について説明する。
【００５６】
まず、初期鍵、初期ベクトルを読み込んで（ステップＳ１０１）、初期化処理を実施する（ステップＳ１０２）。次に、鍵系列生成処理を実行し、鍵系列を生成し（ステップＳ１０３）。生成した鍵系列と平文を排他的論理和することにより暗号文を生成する（ステップＳ１０４）。
【００５７】
さらに、生成した暗号文を動的フィードバック関数および分割した一方の動的フィードバックレジスタの最終レジスタに逐次入力し、平文の入力が終了した後も、平文をオールゼロとして空回しを実行し（ステップＳ１０５）、空回し終了後に、指定ビット長の鍵系列を生成し、メッセージ認証子とする（ステップＳ１０６）。そして、メッセージ認証子を暗号文に添付して送信する（ステップＳ１０７）。
【００５８】
以上、説明したように、本実施形態によれば、安全性を従来よりも向上させつつ、高速な暗号化処理を実現することができる。また、出力するメッセージ認証子と暗号文とを結合して出力結果を生成することにより、安全な認証付きストリーム暗号を生成することができる。
【００５９】
＜第２の実施形態＞
図４から図６を用いて、本実施形態に係るストリーム暗号の復号化装置について説明する。なお、本実施形態に係るストリーム暗号の復号化装置は、第１の実施形態において暗号化されたデータを復号するものである。
【００６０】
＜ストリーム暗号の復号化装置の概略構成＞
図４に示すように、本実施形態に係るストリーム暗号の復号化装置は、線形フィードバック関数１００と、シフトレジスタ２００と、動的フィードバック関数３００と、シフトレジスタＡ４００と、シフトレジスタＢ５００と、非線形変換部６００と、非線形関数器（Ｍｓｕｂ）７１０、７２０と、排他的論理和演算器７３０、７６０、７７０とから構成されている。なお、第１の実施形態と同一の符号を付す構成要素は、同一の機能を有することから、その詳細な説明は省略する。
【００６１】
＜ストリーム暗号の復号化装置の処理＞
図６を用いて、本実施形態に係るストリーム暗号の暗号化装置の処理について説明する。
【００６２】
まず、初期鍵、初期ベクトルを読み込んで（ステップＳ２０１）、初期化処理を実施する（ステップＳ２０２）。次に、鍵系列生成処理を実行し、鍵系列を生成し（ステップＳ２０３）暗号文とメッセージ認証子を受信する（ステップＳ２０４）。次に、生成した鍵系列と暗号文を排他的論理和することにより平文を生成する（ステップＳ２０５）。
【００６３】
さらに、生成した平文を動的フィードバック関数および分割した一方の動的フィードバックレジスタの最終レジスタに逐次入力し、暗号文の入力が終了した後も、暗号文をオールゼロとして空回しを実行し（ステップＳ２０６）、空回し終了後に、指定ビット長の鍵系列を生成し、メッセージ認証子として出力する（ステップＳ２０７）。そして、受信したメッセージ認証子と生成したメッセージ認証子とを照合する（ステップＳ２０８）。
【００６４】
以上、説明したように、本実施形態によれば、安全性を従来よりも向上させつつ、高速な復号化処理を実現することができる。また、送信されてきた暗号文に結合されたメッセージ認証子と生成したメッセージ認証子とを比較することにより、両者が一致するか否かを検証することができる。
【００６５】
なお、ストリーム暗号の暗号器あるいはストリーム暗号の復号器の処理をコンピュータ読み取り可能な記録媒体に記録し、この記録媒体に記録されたプログラムをストリーム暗号の暗号器あるいはストリーム暗号の復号器に読み込ませ、実行することによって本発明のストリーム暗号の暗号器あるいはストリーム暗号の復号器を実現することができる。ここでいうコンピュータシステムとは、ＯＳや周辺装置等のハードウェアを含む。
【００６６】
また、「コンピュータシステム」は、ＷＷＷ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）システムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されても良い。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。
【００６７】
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【００６８】
以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【００６９】
１００；線形フィードバック関数
２００；シフトレジスタ
３００；動的フィードバック関数
４００；シフトレジスタＡ
５００；シフトレジスタＢ
６００；非線形変換部
６１０ａ；内部メモリ
６１０ｂ；内部メモリ
６１０ｃ；内部メモリ
６１０ｄ；内部メモリ
６１０ｅ；内部メモリ
６２０ａ；非線形関数器（Ｓｕｂ）
６２０ｂ；非線形関数器（Ｓｕｂ）
６２０ｃ；非線形関数器（Ｓｕｂ）
６２０ｄ；非線形関数器（Ｓｕｂ）
６２０ｅ；非線形関数器（Ｓｕｂ）
６０３ａ；加算器
６０３ｂ；加算器
６０３ｃ；加算器
６０３ｄ；加算器
６０３ｅ；加算器
６４０ａ；排他的論理和演算器
６４０ｂ；排他的論理和演算器
７１０；非線形関数器（Ｍｓｕｂ）
７２０；非線形関数器（Ｍｓｕｂ）
７３０；排他的論理和演算器
７４０；排他的論理和演算器
７５０；排他的論理和演算器
７６０；排他的論理和演算器
７７０；排他的論理和演算器
【図１】
0005801095.tif 000002
【図２】
0005801095.tif 000003
【図３】
0005801095.tif 000004
【図４】
0005801095.tif 000005