(57)【要約】【課題】自動的な同期回復処理を高速に実行することができる自己同期型ストリーム暗号の暗号化装置等を提供することを目的とする。【解決手段】暗号文を入力し、入力した暗号文に対して排他的論理和演算を行うとともに、非線形変換の処理を行う複数からなる第１の非線形置換関数と、複数の非線形置換関数の出力を入力し、圧縮処理を行い、１の圧縮結果を出力する圧縮関数と、複数個の第２の非線形置換関数を介して接続され、圧縮関数の出力を格納する複数のレジスタと、複数のレジスタからの出力値を入力し、乱数列を生成する乱数列生成関数と、入力した平文と乱数列生成関数が生成した乱数列との排他的論理和演算を行って暗号文を生成する排他的論理和演算器とを備える。【選択図】図１
2008109190.tif 000002
【特許請求の範囲】
【請求項１】
平文を入力し、暗号文を出力するとともに、該暗号文を入力にフィードバックする自己同期型ストリーム暗号の暗号化装置であって、
前記暗号文を入力し、入力した暗号文に対して排他的論理和演算を行うとともに、非線形変換の処理を行う複数個からなる第１の非線形置換関数と、
該複数個からなる第１の非線形置換関数の出力を入力し、圧縮処理を行い、１の圧縮結果を出力する圧縮関数と、
複数個の第２の非線形置換関数を介して接続され、前記圧縮関数の出力を格納する複数のレジスタと、
該複数のレジスタからの出力値を入力し、乱数列を生成する乱数列生成関数と、
入力した前記平文と前記乱数列生成関数が生成した乱数列との排他的論理和演算を行って暗号文を生成する排他的論理和演算手段と、
を備えたことを特徴とする自己同期型ストリーム暗号の暗号化装置。
【請求項２】
前記圧縮関数が、前記複数個からなる第１の非線形置換関数から入力した値の排他的論理和演算を行うことにより、圧縮処理を行うことを特徴とする請求項１に記載の自己同期型ストリーム暗号の暗号化装置。
【請求項３】
前記乱数列生成関数が、前記複数のレジスタからの出力値のビット数を拡大関数により拡大した後、該拡大したすべての値に対して、排他的論理和演算を行って、乱数列を生成することを特徴とする請求項１または請求項２に記載の自己同期型ストリーム暗号の暗号化装置。
【請求項４】
暗号文を入力し、平文を出力する自己同期型ストリーム暗号の復号化装置であって、
前記平文を入力し、入力した平文に対して排他的論理和演算を行うとともに、非線形変換の処理を行う複数個からなる第１の非線形置換関数と、
該複数個からなる第１の非線形置換関数の出力を入力し、圧縮処理を行い、１の圧縮結果を出力する圧縮関数と、
複数個の第２の非線形置換関数を介して接続され、前記圧縮関数の出力を格納する複数のレジスタと、
該複数のレジスタからの出力値を入力し、乱数列を生成する乱数列生成関数と、
入力した前記暗号文と前記乱数列生成関数が生成した乱数列との排他的論理和演算を行って平文を生成する排他的論理和演算手段と、
を備えたことを特徴とする自己同期型ストリーム暗号の復号化装置。
【請求項５】
前記圧縮関数が、前記複数個からなる第１の非線形置換関数から入力した値の排他的論理和演算を行うことにより、圧縮処理を行うことを特徴とする請求項４に記載の自己同期型ストリーム暗号の復号化装置。
【請求項６】
前記乱数列生成関数が、前記複数のレジスタからの出力値のビット数を拡大関数により拡大した後、該拡大したすべての値に対して、排他的論理和演算を行うことにより、乱数列を生成することを特徴とする請求項４または請求項５に記載の自己同期型ストリーム暗号の復号化装置。
【請求項７】
前記請求項１から請求項３に記載の自己同期型ストリーム暗号の暗号化装置と前記請求項４から請求項６に記載の自己同期型ストリーム暗号の復号化装置とを備えて構成されることを特徴とする自己同期型ストリーム暗号システム。
【請求項８】
平文を入力し、暗号文を出力するとともに、該暗号文を入力にフィードバックして最終的な暗号文をメッセージ認証子として出力するＭＡＣ生成装置であって、
前記暗号文を入力し、入力した暗号文に対して排他的論理和演算を行うとともに、非線形変換の処理を行う複数個からなる第１の非線形置換関数と、
該複数個からなる第１の非線形置換関数の出力を入力し、圧縮処理を行い、１の圧縮結果を出力する圧縮関数と、
複数個の第２の非線形置換関数を介して接続され、前記圧縮関数の出力を格納する複数のレジスタと、
該複数のレジスタからの出力値を入力し、乱数列を生成する乱数列生成関数と、
入力した前記平文と前記乱数列生成関数が生成した乱数列との排他的論理和演算を行って最終的な暗号文をメッセージ認証子として生成する排他的論理和演算手段と、
を備えたことを特徴とするＭＡＣ生成装置。
【請求項９】
請求項１から請求項３のいずれかに記載の自己同期型ストリーム暗号の暗号化装置を用いた自己同期型ストリーム暗号の暗号化方法であって、
鍵を拡大鍵生成関数に入力し、拡大鍵を生成して、前記第１の非線形置換関数それぞれにセットする第１のステップと、
すべての前記レジスタに０を代入する第２のステップと、
初期値を平文として入力し、暗号化処理を１回行って、前記レジスタの値を更新する第３のステップと、
すべて０からなる平文を入力して、暗号化処理を３２回実行する第４のステップと、
前記レジスタそれぞれの値を前記乱数列生成関数に入力して乱数列を生成する第５のステップと、
入力した平文と生成した乱数列との排他的論理和演算を行って、暗号化処理を実行する第６のステップと、
前記レジスタの値を出力側のレジスタに１つシフトする第７のステップと、
空になったレジスタに暗号文を入力して、第５のステップに戻る第８のステップと、
を備えたことを特徴とする自己同期型ストリーム暗号の暗号化方法。
【請求項１０】
請求項４から請求項６のいずれかに記載の自己同期型ストリーム暗号の復号化装置を用いた自己同期型ストリーム暗号の復号化方法であって、
鍵を拡大鍵生成関数に入力し、拡大鍵を生成して、前記第１の非線形置換関数それぞれにセットする第１のステップと、
すべての前記レジスタに０を代入する第２のステップと、
初期値を平文として入力し、暗号化処理を１回行って、前記レジスタの値を更新する第３のステップと、
すべて０からなる平文を入力して、暗号化処理を３２回実行する第４のステップと、
前記レジスタそれぞれの値を前記乱数列生成関数に入力して乱数列を生成する第５のステップと、
入力した暗号文と生成した乱数列との排他的論理和演算を行って、復号処理を実行する第６のステップと、
前記レジスタの値を出力側のレジスタに１つシフトする第７のステップと、
空になったレジスタに暗号文を入力して、第５のステップに戻る第８のステップと、
を備えたことを特徴とする自己同期型ストリーム暗号の復号化方法。
【請求項１１】
請求項８に記載のＭＡＣ生成装置を用いたＭＡＣ生成方法であって、
鍵を拡大鍵生成関数に入力し、拡大鍵を生成して、前記第１の非線形置換関数それぞれにセットする第１のステップと、
すべての前記レジスタに０を代入する第２のステップと、
初期値を平文として入力し、暗号化処理を１回行って、前記レジスタの値を更新する第３のステップと、
すべて０からなる平文を入力して、暗号化処理を３２回実行する第４のステップと、
前記レジスタそれぞれの値を前記乱数列生成関数に入力して乱数列を生成する第５のステップと、
入力した平文と生成した乱数列との排他的論理和演算を行って、暗号化処理を実行する第６のステップと、
前記レジスタの値を出力側のレジスタに１つシフトする第７のステップと、
空になったレジスタに暗号文を入力する第８のステップと、
すべての平文を入力したか否かを判断する第９のステップと、
前記第９のステップにおいて、すべての平文を入力したと判断したときに、メッセージ認証子を出力する第１０のステップと、
を備えたことを特徴とするＭＡＣ生成方法。
【請求項１２】
請求項１から請求項３のいずれかに記載の自己同期型ストリーム暗号の暗号化装置を用いた自己同期型ストリーム暗号の暗号化方法をコンピュータに実行させるプログラムであって、
鍵を拡大鍵生成関数に入力し、拡大鍵を生成して、前記第１の非線形置換関数それぞれにセットする第１のステップと、
すべての前記レジスタに０を代入する第２のステップと、
初期値を平文として入力し、暗号化処理を１回行って、前記レジスタの値を更新する第３のステップと、
すべて０からなる平文を入力して、暗号化処理を３２回実行する第４のステップと、
前記レジスタそれぞれの値を前記乱数列生成関数に入力して乱数列を生成する第５のステップと、
入力した平文と生成した乱数列との排他的論理和演算を行って、暗号化処理を実行する第６のステップと、
前記レジスタの値を出力側のレジスタに１つシフトする第７のステップと、
空になったレジスタに暗号文を入力して、第５のステップに戻る第８のステップと、
をコンピュータに実行させるプログラム。
【請求項１３】
請求項４から請求項６のいずれかに記載の自己同期型ストリーム暗号の復号化装置を用いた自己同期型ストリーム暗号の復号化方法をコンピュータに実行させるプログラムであって、
鍵を拡大鍵生成関数に入力し、拡大鍵を生成して、前記第１の非線形置換関数それぞれにセットする第１のステップと、
すべての前記レジスタに０を代入する第２のステップと、
初期値を平文として入力し、暗号化処理を１回行って、前記レジスタの値を更新する第３のステップと、
すべて０からなる平文を入力して、暗号化処理を３２回実行する第４のステップと、
前記レジスタそれぞれの値を前記乱数列生成関数に入力して乱数列を生成する第５のステップと、
入力した暗号文と生成した乱数列との排他的論理和演算を行って、復号処理を実行する第６のステップと、
前記レジスタの値を出力側のレジスタに１つシフトする第７のステップと、
空になったレジスタに暗号文を入力して、第５のステップに戻る第８のステップと、
をコンピュータに実行させるプログラム。
【請求項１４】
請求項８に記載のＭＡＣ生成装置を用いたＭＡＣ生成方法をコンピュータに実行させるプログラムであって、
鍵を拡大鍵生成関数に入力し、拡大鍵を生成して、前記第１の非線形置換関数それぞれにセットする第１のステップと、
すべての前記レジスタに０を代入する第２のステップと、
初期値を平文として入力し、暗号化処理を１回行って、前記レジスタの値を更新する第３のステップと、
すべて０からなる平文を入力して、暗号化処理を３２回実行する第４のステップと、
前記レジスタそれぞれの値を前記乱数列生成関数に入力して乱数列を生成する第５のステップと、
入力した平文と生成した乱数列との排他的論理和演算を行って、暗号化処理を実行する第６のステップと、
前記レジスタの値を出力側のレジスタに１つシフトする第７のステップと、
空になったレジスタに暗号文を入力する第８のステップと、
すべての平文を入力したか否かを判断する第９のステップと、
前記第９のステップにおいて、すべての平文を入力したと判断したときに、メッセージ認証子を出力する第１０のステップと、
をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、自己同期型ストリーム暗号の暗号化装置、復号化装置、自己同期型ストリーム暗号システム、ＭＡＣ生成装置、暗号化方法、復号化方法、ＭＡＣ生成方法およびプログラムに関する。
【背景技術】
【０００２】
近年、インターネットの目覚しい普及により、コンピュータを利用した様々なサービスが提供されている。こうして提供されるサービスの多くは、その通信内容を秘匿化するために暗号が利用されている。ここで、暗号方式としては、１つの鍵で暗号化と復号化とを行う共通鍵暗号方式が一般的であるが、この共通鍵暗号方式は、大きくブロック暗号方式とストリーム暗号方式とに大別される。
【０００３】
ストリーム暗号方式は、ブロック暗号方式よりも高速な処理が期待できるため、例えば、映画等の大容量データを伝送するための方式として、近年、注目を浴びているが、ストリーム暗号方式の場合には、暗号処理と復号処理との同期をとらなければならないという問題があった。そのため、一定サイズ以上の誤りなく受信した暗号文を利用して、同期を自動的に回復する自己同期型のストリーム暗号装置が提案されている（例えば、特許文献１参照。）。
【特許文献１】特開２００１−１６１９７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかし、従来の方法では、自動的に同期を回復できるものの、処理単位が１ビットずつであったために、処理に時間がかかるといった問題があった。そこで、本発明は、上述の課題に鑑みてなされたものであり、自動的な同期回復処理を高速に実行することができる自己同期型ストリーム暗号の暗号化装置、復号化装置、自己同期型ストリーム暗号システム、ＭＡＣ生成装置、暗号化方法、復号化方法、ＭＡＣ生成方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明は、上記の課題を解決するために、以下の事項を提案している。
（１）本発明は、平文を入力し、暗号文を出力するとともに、該暗号文を入力にフィードバックする自己同期型ストリーム暗号の暗号化装置であって、前記暗号文を入力し、入力した暗号文に対して排他的論理和演算を行うとともに、非線形変換の処理を行う複数個からなる第１の非線形置換関数（例えば、図１のＳ関数１ａから１ｈに相当）と、該複数の非線形置換関数の出力を入力し、圧縮処理を行い、１の圧縮結果を出力する圧縮関数（例えば、図１のＦ関数２に相当）と、複数個の第２の非線形置換関数（例えば、図１のＳ関数４ａ、４ｂ・・・に相当）を介して接続され、前記圧縮関数の出力を格納する複数のレジスタ（例えば、図１のレジスタＲ１、Ｒ２、・・・、Ｒ１６に相当）と、該複数のレジスタからの出力値を入力し、乱数列を生成する乱数列生成関数（例えば、図１のＧ関数５に相当）と、入力した前記平文と前記乱数列生成関数が生成した乱数列との排他的論理和演算を行って暗号文を生成する排他的論理和演算手段（例えば、図１のＸＯＲ６に相当）と、を備えたことを特徴とする自己同期型ストリーム暗号の暗号化装置を提案している。
【０００６】
この発明によれば、複数個からなる第１の非線形置換関数が暗号文を入力し、入力した暗号文に対して排他的論理和演算を行うとともに、非線形変換の処理を行う。圧縮関数は、複数個からなる第１の非線形置換関数の出力を入力し、圧縮処理を行い、１の圧縮結果を出力する。複数のレジスタは、複数個の第２の非線形置換関数を介して接続され、圧縮関数の出力を格納する。そして、乱数列生成関数は、複数のレジスタからの出力値を入力し、乱数列を生成し、排他的論理和演算手段が、入力した平文と乱数列生成関数が生成した乱数列との排他的論理和演算を行って暗号文を生成する。
【０００７】
したがって、生成した暗号文を入力側にフィードバックする構成となっているため、仮に、同期が乱れた場合であっても、自動的に、同期を回復することができる。また、装置構成を簡略化したことから、処理の高速化を図ることができる。さらに、非線形置換関数を入力側に複数配置するとともに、圧縮関数が、複数の非線形置換関数の出力を入力し、圧縮処理を行い、１の圧縮結果を出力することから、特に、処理負荷の重い非線形関数処理を最小限に抑えることにより、処理の高速化を図ることができる。
【０００８】
（２）本発明は、（１）の自己同期型ストリーム暗号の暗号化装置について、前記圧縮関数が、前記複数個からなる第１の非線形置換関数から入力した値の排他的論理和演算を行うことにより、圧縮処理を行うことにより、圧縮処理を行うことを特徴とする自己同期型ストリーム暗号の暗号化装置を提案している。
【０００９】
この発明によれば、圧縮関数が、複数個からなる第１の非線形置換関数から入力した値の排他的論理和演算を行うことにより、圧縮処理を行うことから、その後の演算を効率化して、計算負荷を低減することができる。
【００１０】
（３）本発明は、（１）または（２）の自己同期型ストリーム暗号の暗号化装置について、前記乱数列生成関数が、前記複数のレジスタからの出力値のビット数を拡大関数により拡大した後、該拡大したすべての値に対して、排他的論理和演算を行って、乱数列を生成することを特徴とする自己同期型ストリーム暗号の暗号化装置を提案している。
【００１１】
この発明によれば、乱数列生成関数が、複数のレジスタからの出力値のビット数を拡大関数により拡大した後、拡大したすべての値に対して、排他的論理和演算を行って、乱数列を生成することから、各入力要素が出力に対して均等に影響を及ぼすようになるため、安全性の向上を図ることができる。
【００１２】
（４）本発明は、暗号文を入力し、平文を出力する自己同期型ストリーム暗号の復号化装置であって、前記平文を入力し、入力した平文に対して排他的論理和演算を行うとともに、非線形変換の処理を行う複数個からなる第１の非線形置換関数（例えば、図４のＳ関数７ａから７ｈに相当）と、該複数個からなる第１の非線形置換関数の出力を入力し、圧縮処理を行い、１の圧縮結果を出力する圧縮関数（例えば、図４のＦ関数２に相当）と、複数個の第２の非線形置換関数（例えば、図４のＳ関数４ａ、４ｂ・・・に相当）を介して接続され、前記圧縮関数の出力を格納する複数のレジスタ（例えば、図４のレジスタＲ１、Ｒ２、・・・、Ｒ１６に相当）と、該複数のレジスタからの出力値を入力し、乱数列を生成する乱数列生成関数（例えば、図１のＧ関数５に相当）と、入力した前記暗号文と前記乱数列生成関数が生成した乱数列との排他的論理和演算を行って平文を生成する排他的論理和演算手段（例えば、図１のＸＯＲ６に相当）と、を備えたことを特徴とする自己同期型ストリーム暗号の復号化装置を提案している。
【００１３】
この発明によれば、複数個からなる第１の非線形置換関数が暗号文を入力し、入力した暗号文に対して排他的論理和演算を行うとともに、非線形変換の処理を行う。圧縮関数は、複数個からなる第１の非線形置換関数の出力を入力し、圧縮処理を行い、１の圧縮結果を出力する。複数のレジスタは、複数個の第２の非線形置換関数を介して接続され、圧縮関数の出力を格納する。そして、乱数列生成関数は、複数のレジスタからの出力値を入力し、乱数列を生成し、排他的論理和演算手段が、入力した暗号文と乱数列生成関数が生成した乱数列との排他的論理和演算を行って平文を生成する。
【００１４】
したがって、仮に同期が乱れた場合であっても、暗号化装置から入力した暗号文により、すべての第１の非線形置換関数が満たされれば、以降、自動的に、同期を回復することができる。また、装置構成を簡略化したことから、処理の高速化を図ることができる。さらに、非線形置換関数を入力側に複数配置するとともに、圧縮関数が、複数の非線形置換関数の出力を入力し、圧縮処理を行い、１の圧縮結果を出力することから、特に、処理負荷の重い非線形関数処理を最小限に抑えることにより、処理の高速化を図ることができる。
【００１５】
（５）本発明は、（４）の自己同期型ストリーム暗号の復号化装置について、前記圧縮関数が、前記複数個からなる第１の非線形置換関数から入力した値の排他的論理和演算を行うことにより、圧縮処理を行うことを特徴とする自己同期型ストリーム暗号の暗号化装置を提案している。
【００１６】
この発明によれば、圧縮関数が、複数個からなる第１の非線形置換関数から入力した値の排他的論理和演算を行うことにより、圧縮処理を行うことから、その後の演算を効率化して、計算負荷を低減することができる。
【００１７】
（６）本発明は、（４）または（５）の自己同期型ストリーム暗号の暗号化装置について、前記乱数列生成関数が、前記複数のレジスタからの出力値のビット数を拡大関数により拡大した後、該拡大したすべての値に対して、排他的論理和演算を行って、乱数列を生成することを特徴とする自己同期型ストリーム暗号の暗号化装置を提案している。
【００１８】
この発明によれば、乱数列生成関数が、複数のレジスタからの出力値のビット数を拡大関数により拡大した後、拡大したすべての値に対して、排他的論理和演算を行って、乱数列を生成することから、各入力要素が出力に対して均等に影響を及ぼすようになるため、安全性の向上を図ることができる。
【００１９】
（７）本発明は、前記（１）から（３）のいずれかに記載の自己同期型ストリーム暗号の暗号化装置と前記（４）から（６）のいずれかに記載の自己同期型ストリーム暗号の復号化装置とを備えて構成されることを特徴とする自己同期型ストリーム暗号システムを提案している。
【００２０】
この発明によれば、（１）から（３）のいずれかに記載の自己同期型ストリーム暗号の暗号化装置と（４）から（６）のいずれかに記載の自己同期型ストリーム暗号の復号化装置とを組み合わせることにより、同期を自動的に回復することができる自己同期型ストリーム暗号システムを構築することができる。
【００２１】
（８）本発明は、平文を入力し、暗号文を出力するとともに、該暗号文を入力にフィードバックして最終的な暗号文をメッセージ認証子として出力するＭＡＣ生成装置であって、前記暗号文を入力し、入力した暗号文に対して排他的論理和演算を行うとともに、非線形変換の処理を行う複数個からなる第１の非線形置換関数（例えば、図７のＳ関数１ａから１ｈに相当）と、該複数個からなる第１の非線形置換関数の出力を入力し、圧縮処理を行い、１の圧縮結果を出力する圧縮関数（例えば、図７のＦ関数２に相当）と、複数個の第２の非線形置換関数（例えば、図７のＳ関数４ａ、４ｂ・・・に相当）を介して接続され、前記圧縮関数の出力を格納する複数のレジスタ（例えば、図７のレジスタＲ１、Ｒ２、・・・、Ｒ１６に相当）と、該複数のレジスタからの出力値を入力し、乱数列を生成する乱数列生成関数（例えば、図１のＧ関数５に相当）と、入力した前記平文と前記乱数列生成関数が生成した乱数列との排他的論理和演算を行って最終的な暗号文をメッセージ認証子として生成する排他的論理和演算手段（例えば、図７のＸＯＲ６に相当）と、を備えたことを特徴とするＭＡＣ生成装置を提案している。
【００２２】
この発明によれば、複数個からなる第１の非線形置換関数が暗号文を入力し、入力した暗号文に対して排他的論理和演算を行うとともに、非線形変換の処理を行う。圧縮関数は、複数個からなる第１の非線形置換関数の出力を入力し、圧縮処理を行い、１の圧縮結果を出力する。複数のレジスタは、複数個の第２の非線形置換関数を介して接続され、圧縮関数の出力を格納する。そして、乱数列生成関数は、複数のレジスタからの出力値を入力し、乱数列を生成し、排他的論理和演算手段が、入力した平文と乱数列生成関数が生成した乱数列との排他的論理和演算を行って最終的な暗号文をメッセージ認証子として生成する。
【００２３】
したがって、装置構成を簡略化したことから、処理の高速化を図ることができる。さらに、非線形置換関数を入力側に複数配置するとともに、圧縮関数が、複数の非線形置換関数の出力を入力し、圧縮処理を行い、１の圧縮結果を出力することから、特に、処理負荷の重い非線形関数処理を最小限に抑えることにより、処理の高速化を図ることができる。
【００２４】
（９）本発明は、（１）から（３）のいずれかに記載の自己同期型ストリーム暗号の暗号化装置を用いた自己同期型ストリーム暗号の暗号化方法であって、鍵を拡大鍵生成関数に入力し、拡大鍵を生成して、前記第１の非線形置換関数それぞれにセットする第１のステップ（例えば、図４のステップＳ１０１に相当）と、すべての前記レジスタに０を代入する第２のステップ（例えば、図４のステップＳ１０２に相当）と、初期値を平文として入力し、暗号化処理を１回行って、前記レジスタの値を更新する第３のステップ（例えば、図４のステップＳ１０３に相当）と、すべて０からなる平文を入力して、暗号化処理を３２回実行する第４のステップ（例えば、図４のステップＳ１０４に相当）と、前記レジスタそれぞれの値を前記乱数列生成関数に入力して乱数列を生成する第５のステップ（例えば、図４のステップＳ１０５に相当）と、入力した平文と生成した乱数列との排他的論理和演算を行って、暗号化処理を実行する第６のステップ（例えば、図４のステップＳ１０６に相当）と、前記レジスタの値を出力側のレジスタに１つシフトする第７のステップ（例えば、図４のステップＳ１０７に相当）と、空になったレジスタに暗号文を入力して、第５のステップに戻る第８のステップ（例えば、図４のステップＳ１０８に相当）と、を備えたことを特徴とする自己同期型ストリーム暗号の暗号化方法を提案している。
【００２５】
この発明によれば、鍵を拡大鍵生成関数に入力し、拡大鍵を生成して、第１の非線形置換関数それぞれにセットし、すべてのレジスタに０を代入する。そして、初期値を平文として入力し、暗号化処理を１回行って、レジスタの値を更新し、さらに、すべて０からなる平文を入力して、暗号化処理を３２回実行する初期化処理を行う。次に、レジスタそれぞれの値を乱数列生成関数に入力して乱数列を生成するキーストリーム処理を行い、入力した平文と生成した乱数列との排他的論理和演算を行って、暗号化処理を実行する。そして、レジスタの値を出力側のレジスタに１つシフトし、空になったレジスタに暗号文を入力する内部状態更新処理を実行して、キーストリーム処理に戻る動作を繰り返し行う。したがって、生成した暗号文を入力側にフィードバックするため、仮に、同期が乱れた場合であっても、自動的に、同期を回復することができる。
【００２６】
（１０）本発明は、（４）から（６）のいずれかに記載の自己同期型ストリーム暗号の復号化装置を用いた自己同期型ストリーム暗号の復号化方法であって、鍵を拡大鍵生成関数に入力し、拡大鍵を生成して、前記第１の非線形置換関数それぞれにセットする第１のステップ（例えば、図６のステップＳ２０１に相当）と、すべての前記レジスタに０を代入する第２のステップ（例えば、図６のステップＳ２０２に相当）と、初期値を平文として入力し、暗号化処理を１回行って、前記レジスタの値を更新する第３のステップ（例えば、図６のステップＳ２０３に相当）と、すべて０からなる平文を入力して、暗号化処理を３２回実行する第４のステップ（例えば、図６のステップＳ２０４に相当）と、前記レジスタそれぞれの値を前記乱数列生成関数に入力して乱数列を生成する第５のステップ（例えば、図６のステップＳ２０５に相当）と、入力した暗号文と生成した乱数列との排他的論理和演算を行って、復号処理を実行する第６のステップ（例えば、図６のステップＳ２０６に相当）と、前記レジスタの値を出力側のレジスタに１つシフトする第７のステップ（例えば、図６のステップＳ２０７に相当）と、空になったレジスタに暗号文を入力して、第５のステップに戻る第８のステップ（例えば、図６のステップＳ２０８に相当）と、を備えたことを特徴とする自己同期型ストリーム暗号の復号化方法を提案している。
【００２７】
この発明によれば、鍵を拡大鍵生成関数に入力し、拡大鍵を生成して、第１の非線形置換関数それぞれにセットし、すべてのレジスタに０を代入する。そして、初期値を平文として入力し、暗号化処理を１回行って、レジスタの値を更新し、さらに、すべて０からなる平文を入力して、暗号化処理を３２回実行する初期化処理を行う。次に、レジスタそれぞれの値を乱数列生成関数に入力して乱数列を生成するキーストリーム処理を行い、入力した暗号文と生成した乱数列との排他的論理和演算を行って、復号化処理を実行する。そして、レジスタの値を出力側のレジスタに１つシフトし、空になったレジスタに暗号文を入力する内部状態更新処理を実行して、キーストリーム処理に戻る動作を繰り返し行う。したがって、仮に、同期が乱れた場合であっても、暗号化装置から入力した暗号文により、すべての第１の非線形置換関数が満たされれば、以降、自動的に、同期を回復することができる。
【００２８】
（１１）本発明は、（８）に記載のＭＡＣ生成装置を用いたＭＡＣ生成方法であって、鍵を拡大鍵生成関数に入力し、拡大鍵を生成して、前記第１の非線形置換関数それぞれにセットする第１のステップ（図８のステップＳ３０１に相当）と、すべての前記レジスタに０を代入する第２のステップ（図８のステップＳ３０２に相当）と、初期値を平文として入力し、暗号化処理を１回行って、前記レジスタの値を更新する第３のステップ（図８のステップＳ３０３に相当）と、すべて０からなる平文を入力して、暗号化処理を３２回実行する第４のステップ（図８のステップＳ３０４に相当）と、前記レジスタそれぞれの値を前記乱数列生成関数に入力して乱数列を生成する第５のステップ（図８のステップＳ３０５に相当）と、入力した平文と生成した乱数列との排他的論理和演算を行って、暗号化処理を実行する第６のステップ（図８のステップＳ３０６に相当）と、前記レジスタの値を出力側のレジスタに１つシフトする第７のステップ（図８のステップＳ３０７に相当）と、空になったレジスタに暗号文を入力する第８のステップ（図８のステップＳ３０８に相当）と、すべての平文を入力したか否かを判断する第９のステップ（図８のステップＳ３０９に相当）と、前記第９のステップにおいて、すべての平文を入力したと判断したときに、メッセージ認証子を出力する第１０のステップ（図８のステップＳ３１０に相当）と、を備えたことを特徴とするＭＡＣ生成方法を提案している。
【００２９】
本発明によれば、鍵を拡大鍵生成関数に入力し、拡大鍵を生成して、第１の非線形置換関数それぞれにセットし、すべてのレジスタに０を代入する。そして、初期値を平文として入力し、暗号化処理を１回行って、レジスタの値を更新し、さらに、すべて０からなる平文を入力して、暗号化処理を３２回実行する初期化処理を行う。次に、レジスタそれぞれの値を乱数列生成関数に入力して乱数列を生成するキーストリーム処理を行い、入力した平文と生成した乱数列との排他的論理和演算を行って、暗号化処理を実行する。そして、レジスタの値を出力側のレジスタに１つシフトし、空になったレジスタに暗号文を入力する内部状態更新処理を実行する。そして、すべての平文を入力したか否かを判断し、すべての平文を入力したと判断したときに、メッセージ認証子を出力する。
【００３０】
（１２）本発明は、（１）から（３）のいずれかに記載の自己同期型ストリーム暗号の暗号化装置を用いた自己同期型ストリーム暗号の暗号化方法をコンピュータに実行させるプログラムであって、鍵を拡大鍵生成関数に入力し、拡大鍵を生成して、前記第１の非線形置換関数それぞれにセットする第１のステップ（例えば、図４のステップＳ１０１に相当）と、すべての前記レジスタに０を代入する第２のステップ（例えば、図４のステップＳ１０２に相当）と、初期値を平文として入力し、暗号化処理を１回行って、前記レジスタの値を更新する第３のステップ（例えば、図４のステップＳ１０３に相当）と、すべて０からなる平文を入力して、暗号化処理を３２回実行する第４のステップ（例えば、図４のステップＳ１０４に相当）と、前記レジスタそれぞれの値を前記乱数列生成関数に入力して乱数列を生成する第５のステップ（例えば、図４のステップＳ１０５に相当）と、入力した平文と生成した乱数列との排他的論理和演算を行って、暗号化処理を実行する第６のステップ（例えば、図４のステップＳ１０６に相当）と、前記レジスタの値を出力側のレジスタに１つシフトする第７のステップ（例えば、図４のステップＳ１０７に相当）と、空になったレジスタに暗号文を入力して、第５のステップに戻る第８のステップ（例えば、図４のステップＳ１０８に相当）と、をコンピュータに実行させるプログラムを提案している。
【００３１】
この発明によれば、鍵を拡大鍵生成関数に入力し、拡大鍵を生成して、第１の非線形置換関数それぞれにセットし、すべてのレジスタに０を代入する。そして、初期値を平文として入力し、暗号化処理を１回行って、レジスタの値を更新し、さらに、すべて０からなる平文を入力して、暗号化処理を３２回実行する初期化処理を行う。次に、レジスタそれぞれの値を乱数列生成関数に入力して乱数列を生成するキーストリーム処理を行い、入力した平文と生成した乱数列との排他的論理和演算を行って、暗号化処理を実行する。そして、レジスタの値を出力側のレジスタに１つシフトし、空になったレジスタに暗号文を入力する内部状態更新処理を実行して、キーストリーム処理に戻る動作を繰り返し行う。したがって、生成した暗号文を入力側にフィードバックするため、仮に、同期が乱れた場合であっても、自動的に、同期を回復することができる。
【００３２】
（１３）本発明は、（４）から（６）のいずれかに記載の自己同期型ストリーム暗号の復号化装置を用いた自己同期型ストリーム暗号の復号化方法をコンピュータに実行させるプログラムであって、鍵を拡大鍵生成関数に入力し、拡大鍵を生成して、前記第１の非線形置換関数それぞれにセットする第１のステップ（例えば、図６のステップＳ２０１に相当）と、すべての前記レジスタに０を代入する第２のステップ（例えば、図６のステップＳ２０２に相当）と、初期値を平文として入力し、暗号化処理を１回行って、前記レジスタの値を更新する第３のステップ（例えば、図６のステップＳ２０３に相当）と、すべて０からなる平文を入力して、暗号化処理を３２回実行する第４のステップ（例えば、図６のステップＳ２０４に相当）と、前記レジスタそれぞれの値を前記乱数列生成関数に入力して乱数列を生成する第５のステップ（例えば、図６のステップＳ２０５に相当）と、入力した暗号文と生成した乱数列との排他的論理和演算を行って、復号処理を実行する第６のステップ（例えば、図６のステップＳ２０６に相当）と、前記レジスタの値を出力側のレジスタに１つシフトする第７のステップ（例えば、図６のステップＳ２０７に相当）と、空になったレジスタに暗号文を入力して、第５のステップに戻る第８のステップ（例えば、図６のステップＳ２０８に相当）と、をコンピュータに実行させるプログラムを提案している。
【００３３】
この発明によれば、鍵を拡大鍵生成関数に入力し、拡大鍵を生成して、第１の非線形置換関数それぞれにセットし、すべてのレジスタに０を代入する。そして、初期値を平文として入力し、暗号化処理を１回行って、レジスタの値を更新し、さらに、すべて０からなる平文を入力して、暗号化処理を３２回実行する初期化処理を行う。次に、レジスタそれぞれの値を乱数列生成関数に入力して乱数列を生成するキーストリーム処理を行い、入力した暗号文と生成した乱数列との排他的論理和演算を行って、復号化処理を実行する。そして、レジスタの値を出力側のレジスタに１つシフトし、空になったレジスタに暗号文を入力する内部状態更新処理を実行して、キーストリーム処理に戻る動作を繰り返し行う。したがって、仮に、同期が乱れた場合であっても、暗号化装置から入力した暗号文により、すべての第１の非線形置換関数が満たされれば、以降、自動的に、同期を回復することができる。
【００３４】
（１４）本発明は、（８）に記載のＭＡＣ生成装置を用いたＭＡＣ生成方法をコンピュータに実行させるプログラムであって、鍵を拡大鍵生成関数に入力し、拡大鍵を生成して、前記第１の非線形置換関数それぞれにセットする第１のステップ（図８のステップＳ３０１に相当）と、すべての前記レジスタに０を代入する第２のステップ（図８のステップＳ３０２に相当）と、初期値を平文として入力し、暗号化処理を１回行って、前記レジスタの値を更新する第３のステップ（図８のステップＳ３０３に相当）と、すべて０からなる平文を入力して、暗号化処理を３２回実行する第４のステップ（図８のステップＳ３０４に相当）と、前記レジスタそれぞれの値を前記乱数列生成関数に入力して乱数列を生成する第５のステップ（図８のステップＳ３０５に相当）と、入力した平文と生成した乱数列との排他的論理和演算を行って、暗号化処理を実行する第６のステップ（図８のステップＳ３０６に相当）と、前記レジスタの値を出力側のレジスタに１つシフトする第７のステップ（図８のステップＳ３０７に相当）と、空になったレジスタに暗号文を入力する第８のステップ（図８のステップＳ３０８に相当）と、すべての平文を入力したか否かを判断する第９のステップ（図８のステップＳ３０９に相当）と、前記第９のステップにおいて、すべての平文を入力したと判断したときに、メッセージ認証子を出力する第１０のステップ（図８のステップＳ３１０に相当）と、をコンピュータに実行させるプログラム。
【００３５】
本発明によれば、鍵を拡大鍵生成関数に入力し、拡大鍵を生成して、第１の非線形置換関数それぞれにセットし、すべてのレジスタに０を代入する。そして、初期値を平文として入力し、暗号化処理を１回行って、レジスタの値を更新し、さらに、すべて０からなる平文を入力して、暗号化処理を３２回実行する初期化処理を行う。次に、レジスタそれぞれの値を乱数列生成関数に入力して乱数列を生成するキーストリーム処理を行い、入力した平文と生成した乱数列との排他的論理和演算を行って、暗号化処理を実行する。そして、レジスタの値を出力側のレジスタに１つシフトし、空になったレジスタに暗号文を入力する内部状態更新処理を実行する。そして、すべての平文を入力したか否かを判断し、すべての平文を入力したと判断したときに、メッセージ認証子を出力する。
【発明の効果】
【００３６】
本発明によれば、高速かつ安全で、自動的に同期回復を行うことができるストリーム暗号を実現することができるという効果がある。
【発明を実施するための最良の形態】
【００３７】
以下、図面を用いて、本発明の実施形態について詳細に説明する。
なお、本実施形態における構成要素は適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組み合わせを含む様々なバリエーションが可能である。したがって、本実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
【００３８】
＜自己同期型ストリーム暗号の暗号化装置の構成＞
本実施形態に係る自己同期型ストリーム暗号の暗号化装置は、図１に示すように、Ｓ関数（非線形置換関数、図中、「Ｓ」と表記）１ａ、１ｂ、１ｃ、１ｄ、１ｅ、１ｆ、１ｇ、１ｈ、４ａ、４ｂと、Ｆ関数（圧縮関数、図中、「Ｆ」と表記）２と、レジスタ３ａ、３ｂ、・・・、３ｐ（図中、「Ｒ１、Ｒ２、・・・、Ｒ１６」と表記）と、Ｇ関数（非線形関数、図中、「Ｇ」と表記）５と、排他的論理和演算器６とから構成されている。
【００３９】
Ｓ関数１ａ、１ｂ、１ｃ、１ｄ、１ｅ、１ｆ、１ｇ、１ｈ、４ａ、４ｂは、ＣＰＵのワード長をＷビットとしたときに、入出力長が一致した全単射関数であり、入力する暗号文に対して、拡大鍵を排他的論理和演算した後に、非線形処理を実行する。
【００４０】
Ｆ関数２は、ｎＷビットの暗号文をＷビットの暗号文に圧縮する圧縮関数である。なお、具体的な構成については、後述する。レジスタ３ａ、３ｂ、・・・、３ｐは、Ｆ関数２からの出力を一時的に保持する記憶手段である。Ｇ関数５は、ｎＷビットのデータをｍＷビットのデータに変換する非線形関数である。このとき、ｎとｍには、ｎ＞ｍの関係がある。なお、具体的な構成については、後述する。また、排他的論理和演算器６は、Ｇ関数５から出力されるｍＷビットの乱数列と入力した平文との排他的論理和演算を実行し、ｍＷビットの暗号文を出力する。
【００４１】
＜Ｆ関数（圧縮関数）の構成＞
Ｆ関数（圧縮関数）２は、図２に示すように、排他的論理和演算器２０ａ、２０ｂ、２０ｃ、２０ｄ、２０ｅ、２０ｆ、２０ｇから構成されている。すなわち、Ｆ関数（圧縮関数）２は、Ｓ関数（非線形置換関数）１ａ、１ｂ、１ｃ、１ｄ、１ｅ、１ｆ、１ｇ、１ｈからの出力に対して、排他的論理和演算器２０ａ、２０ｂ、２０ｃ、２０ｄ、２０ｅ、２０ｆ、２０ｇを用いて、排他的論理和演算を行って、圧縮処理を実行する。これにより、その後の演算を効率化して、計算負荷を低減することができる。
【００４２】
＜Ｇ関数（非線形関数）の構成＞
Ｇ関数（非線形関数）５は、図３に示すように、Ｔ関数（拡大関数、図中、「Ｔ」と示す）５１ａ、５１ｂ、・・・、５１ｏ、５１ｐと、排他的論理和演算器５２ａ、５２ｂ、・・・、５２ｏ、５２ｐとから構成されている。
【００４３】
すなわち、Ｇ関数（非線形関数）５は、Ｔ関数（拡大関数）により、入力データのワード長ＷビットをｍＷビットとし、各レジスタの値を変換した後、変換したすべての値に対して、排他的論理和演算器５２ａ、５２ｂ、・・・、５２ｏ、５２ｐを用いて、排他的論理和演算を実行することにより、乱数列を生成する。これにより、各入力要素が出力に対して均等に影響を及ぼすようになるため、安全性の向上を図ることができる。
【００４４】
＜自己同期型ストリーム暗号の暗号化装置の処理動作＞
次に、図４を用いて、自己同期型ストリーム暗号の暗号化装置の処理動作について説明する。
まず、初期処理を行って、ストリーム暗号の内部状態をセットする。具体的には、鍵を拡大鍵関数に入力して、拡大鍵を生成し、各Ｓ関数１ａ、１ｂ、１ｃ、１ｄ、１ｅ、１ｆ、１ｇ、１ｈの鍵としてセットする（ステップＳ１０１）。次に、すべてのレジスタ３ａ、３ｂ、・・・、３ｐに「０」を代入し（ステップＳ１０２）、初期値を平文として入力して、暗号化処理を１回行い（ステップＳ１０３）、レジスタ３ａ、３ｂ、・・・、３ｐの値を更新する。そして、オール「０」の平文を入力して、暗号化処理を３２回実行する（ステップＳ１０４）。
【００４５】
次に、キ−ストリームの生成処理として、各レジスタ３ａ、３ｂ、・・・、３ｐの値をＧ関数５に入力して、乱数列を得る（ステップＳ１０５）。さらに、暗号化処理として、入力された平文とＧ関数５から出力された乱数列とを排他的論理和演算器６に入力して、排他的論理和をとって、暗号化を実行する（ステップＳ１０６）。
【００４６】
そして、内部状態更新処理として、以下の手順で、各レジスタ３ａ、３ｂ、・・・、３ｐの内部状態を更新する。具体的には、各レジスタ３ａ、３ｂ、・・・、３ｐに一時格納されていた値を、出力方向（図１の左方向）に１つずつシフトする（ステップＳ１０７）。なお、シフトの際には、Ｓ関数４ａ、４ｂ・・・による非線形処理を実行する。また、最左行に配置されたレジスタ３ｐからシフトにより、はみ出した値は消去される。さらに、暗号文を最右行に配置されたレジスタ３ａに入力する（ステップＳ１０８）。ここで、レジスタ３ａに入力される暗号文は、Ｆ関数２で計算された値である。そして、この一連の処理を終了すると、ステップＳ１０５に戻って、処理が続行される。
【００４７】
以上説明したように、本実施形態に係る自己同期型ストリーム暗号の暗号化装置によれば、生成した暗号文を入力側にフィードバックする構成となっているため、仮に、同期が乱れた場合であっても、自動的に、同期を回復することができる。また、装置構成を簡略化したことから、処理の高速化を図ることができる。さらに、非線形置換関数を入力側に複数配置するとともに、圧縮関数が、複数の非線形置換関数の出力を入力し、圧縮処理を行い、１の圧縮結果を出力することから、特に、処理負荷の重い非線形関数処理を最小限に抑えることにより、処理の高速化を図ることができる。
【００４８】
＜自己同期型ストリーム暗号の復号化装置の構成＞
本実施形態に係る自己同期型ストリーム暗号の復号化装置は、図５に示すように、Ｓ関数（非線形置換関数、図中、「Ｓ」と表記）７ａ、７ｂ、７ｃ、７ｄ、７ｅ、７ｆ、７ｇ、７ｈ、４ａ、４ｂと、Ｆ関数（圧縮関数、図中、「Ｆ」と表記）２と、レジスタ３ａ、３ｂ、・・・、３ｐ（図中、「Ｒ１、Ｒ２、・・・、Ｒ１６」と表記）と、Ｇ関数（非線形関数、図中、「Ｇ」と表記）５と、排他的論理和演算器８とから構成されている。なお、図１と同一の符号を付した構成要素については、同様の機能を有するものであることから、その詳細な説明は省略する。
【００４９】
Ｓ関数７ａ、７ｂ、７ｃ、７ｄ、７ｅ、７ｆ、７ｇ、７ｈは、ＣＰＵのワード長をＷビットとしたときに、入出力長が一致した全単射関数であり、入力する暗号文に対して、拡大鍵を排他的論理和演算した後に、非線形処理を実行する。また、排他的論理和演算器８は、Ｇ関数５から出力されるｍＷビットの乱数列と入力した暗号文との排他的論理和演算を実行し、ｍＷビットの平文を出力する。
【００５０】
＜自己同期型ストリーム暗号の復号化装置の処理動作＞
次に、図６を用いて、自己同期型ストリーム暗号の復号化装置の処理動作について説明する。
まず、初期処理を行って、ストリーム暗号の内部状態をセットする。具体的には、鍵を拡大鍵関数に入力して、拡大鍵を生成し、各Ｓ関数７ａ、７ｂ、７ｃ、７ｄ、７ｅ、７ｆ、７ｇ、７ｈの鍵としてセットする（ステップＳ２０１）。次に、すべてのレジスタ３ａ、３ｂ、・・・、３ｐに「０」を代入し（ステップＳ２０２）、初期値を平文として入力して、暗号化処理を１回行い（ステップＳ２０３）、レジスタ３ａ、３ｂ、・・・、３ｐの値を更新する。そして、オール「０」の平文を入力して、暗号化処理を３２回実行する（ステップＳ２０４）。
【００５１】
次に、キ−ストリームの生成処理として、各レジスタ３ａ、３ｂ、・・・、３ｐの値をＧ関数５に入力して、乱数列を得る（ステップＳ２０５）。さらに、復号化処理として、入力された暗号文とＧ関数５から出力された乱数列とを排他的論理和演算器６に入力して、排他的論理和をとって、復号を実行する（ステップＳ２０６）。
【００５２】
そして、内部状態更新処理として、以下の手順で、各レジスタ３ａ、３ｂ、・・・、３ｐの内部状態を更新する。具体的には、各レジスタ３ａ、３ｂ、・・・、３ｐに一時格納されていた値を、出力方向（図５の左方向）に１つずつシフトする（ステップＳ２０７）。なお、シフトの際には、Ｓ関数４ａ、４ｂ・・・による非線形処理を実行する。また、最左行に配置されたレジスタ３ｐからシフトにより、はみ出した値は消去される。さらに、暗号文を最右行に配置されたレジスタ３ａに入力する（ステップＳ２０８）。ここで、レジスタ３ａに入力される暗号文は、Ｆ関数２で計算された値である。そして、この一連の処理を終了すると、ステップＳ２０５に戻って、処理が続行される。
【００５３】
以上説明したように、本実施形態に係る自己同期型ストリーム暗号の復号化装置によれば、仮に、同期が乱れた場合であっても、暗号化装置から入力した暗号文により、すべての第１の非線形置換関数が満たされれば、以降、自動的に、同期を回復することができる。また、装置構成を簡略化したことから、処理の高速化を図ることができる。さらに、非線形置換関数を入力側に複数配置するとともに、圧縮関数が、複数の非線形置換関数の出力を入力し、圧縮処理を行い、１の圧縮結果を出力することから、特に、処理負荷の重い非線形関数処理を最小限に抑えることにより、処理の高速化を図ることができる。また、すでに説明した自己同期型ストリーム暗号の暗号化装置と自己同期型ストリーム暗号の復号化装置とを組み合わせることにより、同期を自動的に回復することができる自己同期型ストリーム暗号システムを構築することができる。
【００５４】
＜ＭＡＣ生成装置の構成＞
ＭＡＣ生成装置の構成は、図７に示したように、基本的に、すでに説明した図１に示される自己同期型ストリーム暗号の暗号化装置と同様の構成であり、平文を入力し、出力されたｍＷビットの暗号文から連続するＳビットのメッセージ認証子を出力する。
【００５５】
＜ＭＡＣ生成装置の処理動作＞
次に、図７を用いて、ＭＡＣ生成装置の処理動作について説明する。
まず、初期処理を行って、ストリーム暗号の内部状態をセットする。具体的には、鍵を拡大鍵関数に入力して、拡大鍵を生成し、各Ｓ関数１ａ、１ｂ、１ｃ、１ｄ、１ｅ、１ｆ、１ｇ、１ｈの鍵としてセットする（ステップＳ３０１）。次に、すべてのレジスタ３ａ、３ｂ、・・・、３ｐに「０」を代入し（ステップＳ３０２）、初期値を平文として入力して、暗号化処理を１回行い（ステップＳ３０３）、レジスタ３ａ、３ｂ、・・・、３ｐの値を更新する。そして、オール「０」の平文を入力して、暗号化処理を３２回実行する（ステップＳ３０４）。
【００５６】
次に、キ−ストリームの生成処理として、各レジスタ３ａ、３ｂ、・・・、３ｐの値をＧ関数５に入力して、乱数列を得る（ステップＳ３０５）。さらに、暗号化処理として、入力された平文とＧ関数５から出力された乱数列とを排他的論理和演算器６に入力して、排他的論理和をとって、暗号化を実行する（ステップＳ３０６）。
【００５７】
そして、内部状態更新処理として、以下の手順で、各レジスタ３ａ、３ｂ、・・・、３ｐの内部状態を更新する。具体的には、各レジスタ３ａ、３ｂ、・・・、３ｐに一時格納されていた値を、出力方向（図１の左方向）に１つずつシフトする（ステップＳ３０７）。なお、シフトの際には、Ｓ関数４ａ、４ｂ・・・による非線形処理を実行する。また、最左行に配置されたレジスタ３ｐからシフトすることにより、はみ出した値は消去される。さらに、暗号文を最右行に配置されたレジスタ３ａに入力する（ステップＳ３０８）。ここで、レジスタ３ａに入力される暗号文は、Ｆ関数２で計算された値である。そして、すべての平文が入力されていない場合（ステップＳ３０９の「Ｎｏ」）には、ステップＳ３０５に戻って、処理が続行される。一方、すべての平文が入力された場合（ステップＳ３０９の「ＹＥＳ」）には、Ｓビットのメッセージ認証子を出力し（ステップＳ３１０）、すべての処理を終了する。
【００５８】
以上説明したように、本実施形態に係るＭＡＣ生成装置によれば、装置構成を簡略化したことから、処理の高速化を図ることができる。さらに、非線形置換関数を入力側に複数配置するとともに、圧縮関数が、複数の非線形置換関数の出力を入力し、圧縮処理を行い、１の圧縮結果を出力することから、特に、処理負荷の重い非線形関数処理を最小限に抑えることにより、処理の高速化を図ることができる。
【００５９】
なお、上述の一連の処理をプログラムとしてコンピュータ読み取り可能な記録媒体に記録し、この記録媒体に記録されたプログラムを自己同期型ストリーム暗号の暗号化装置、自己同期型ストリーム暗号の復号化装置、自己同期型ストリーム暗号システム、ＭＡＣ生成装置に読み込ませ、実行することによって本発明の自己同期型ストリーム暗号の暗号化装置、自己同期型ストリーム暗号の復号化装置、自己同期型ストリーム暗号システム、ＭＡＣ生成装置を実現することができる。
【００６０】
また、ＷＷＷ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）システムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。
【００６１】
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータにすでに記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【００６２】
以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【図面の簡単な説明】
【００６３】
【図１】本発明の自己同期型ストリーム暗号の暗号化装置の構成図である。
【図２】Ｆ関数の構成図である。
【図３】Ｇ関数の構成図である。
【図４】本発明の自己同期型ストリーム暗号の暗号化装置の処理フロー図である。
【図５】本発明の自己同期型ストリーム暗号の復号化装置の構成図である。
【図６】本発明の自己同期型ストリーム暗号の復号化装置の処理フロー図である。
【図７】本発明のＭＡＣ生成装置の構成図である。
【図８】本発明のＭＡＣ生成装置の処理フロー図である。
【符号の説明】
【００６４】
１ａ、１ｂ、１ｃ、１ｄ、１ｅ、１ｆ、１ｇ、１ｈ、４ａ、４ｂ、７ａ、７ｂ、７ｃ、７ｄ、７ｅ、７ｆ、７ｇ、７ｈ・・・Ｓ関数、２・・・Ｆ関数、３ａ、３ｂ、・・・、３ｐ・・・レジスタ、５・・・Ｇ関数、６、８・・・排他的論理和演算器
【図１】
2008109190.tif 000003
【図２】
2008109190.tif 000004
【図３】
2008109190.tif 000005
【図４】
2008109190.tif 000006
【図５】
2008109190.tif 000007
【図６】
2008109190.tif 000008
【図７】
2008109190.tif 000009
【図８】
2008109190.tif 000010