(57)【特許請求の範囲】
【請求項１】
秘密鍵と初期ベクトルとに基づいて初期化されるストリーム暗号の内部状態、またはキーストリーム出力時に更新される前記ストリーム暗号の内部状態を保持するフィードバックシフトレジスタからの入力値に非線形処理を施してキーストリームを出力する非線形処理器であって、
入力値を非線形置換処理する非線形置換手段と、
前記非線形置換手段からの出力値を格納する複数の内部レジスタと、
前記複数の内部レジスタそれぞれの入力端に設けられ、前記フィードバックシフトレジスタに格納されている値の一部から生成された乱数と、前記非線形置換手段の出力値との排他的論理和演算を行って、当該非線形置換手段の出力値をマスクするマスク処理手段と、
前記複数の内部レジスタそれぞれの出力端に設けられ、前記乱数と、当該複数の内部レジスタそれぞれに格納されている値との排他的論理和演算を行って、当該内部レジスタに格納されている値のマスクを外すマスク解除手段と、
を備え、
前記複数の内部レジスタが前記非線形置換手段を介して接続され、前記非線形置換手段が、少なくとも内部レジスタに格納されている値を入力値として非線形置換処理を行うことを特徴とする非線形処理器。
【請求項２】
前記乱数が、前記フィードバックシフトレジスタに格納されている値のうち、前記キーストリーム出力時における当該フィードバックシフトレジスタの更新によって乱数性が確保される値から生成されることを特徴とする請求項１に記載の非線形処理器。
【請求項３】
前記乱数が、前記フィードバックシフトレジスタに格納されている値の一部を加算することにより生成されることを特徴とする請求項１に記載の非線形処理器。
【請求項４】
前記フィードバックシフトレジスタは、５段構成の第１のフィードバックレジスタと１１段構成の第２のフィードバックレジスタを含み、
前記乱数が、前記第１のフィードバックレジスタの２段目および３段目に格納されている値と、前記第２のフィードバックレジスタの４段目および１０段目に格納されている値とを加算することにより生成されることを特徴とする請求項１から請求項３のいずれか１項に記載の非線形処理器。
【請求項５】
前記請求項１から４のいずれか１項に記載の非線形処理器と、
前記秘密鍵と前記初期ベクトルとに基づいて前記内部状態を初期化し、初期化された内部状態を前記フィードバックシフトレジスタに保持する初期化処理手段と、
前記キーストリーム出力時に内部状態を更新し、更新された内部状態を前記フィードバックシフトレジスタに保持する内部状態更新手段と、
前記非線形処理器から出力されたキーストリームと、外部から入力された平文との排他的論理和演算を行なって、暗号文を出力する暗号化手段と、
を備えるストリーム暗号の暗号化装置。
【請求項６】
前記請求項１から４のいずれか１項に記載の非線形処理器と、
前記秘密鍵と前記初期ベクトルとに基づいて前記内部状態を初期化し、初期化された内部状態を前記フィードバックシフトレジスタに保持する初期化処理手段と、
前記キーストリーム出力時に内部状態を更新し、更新された内部状態を前記フィードバックシフトレジスタに保持する内部状態更新手段と、
前記非線形処理器から出力されたキーストリームと、外部から入力された暗号文との排他的論理和演算を行なって、平文を出力する復号手段と、
を備えるストリーム暗号の復号装置。
【請求項７】
秘密鍵と初期ベクトルとに基づいて初期化されるストリーム暗号の内部状態、またはキーストリーム出力時に更新される前記ストリーム暗号の内部状態を保持するフィードバックシフトレジスタからの入力値に非線形処理を施してキーストリームを出力する非線形処理器における、非線形処理器内部のデータをマスクするマスク処理方法であって、
前記非線形処理器が、内部レジスタ、入力値に対して非線形置換処理を行う非線形置換手段、マスク処理手段、およびマスク解除手段から構成され、
前記マスク処理手段が、前記非線形置換手段の出力値と、前記フィードバックシフトレジスタに格納されている値の一部から生成された乱数との排他的論理和演算を行って、当該非線形置換手段の出力値をマスクする第１のステップと、
前記内部レジスタが、前記第１のステップでマスクされた前記非線形置換手段の出力値を格納する第２のステップと、
前記マスク解除手段が、前記第２のステップで前記内部レジスタに格納された値と、前記乱数との排他的論理和演算を行って、当該内部レジスタに格納された値のマスクを外す第３のステップと、
を含むことを特徴とするマスク処理方法。
【請求項８】
秘密鍵と初期ベクトルとに基づいて初期化されるストリーム暗号の内部状態、またはキーストリーム出力時に更新される前記ストリーム暗号の内部状態を保持するフィードバックシフトレジスタからの入力値に非線形処理を施してキーストリームを出力する非線形処理器における、非線形処理器内部のデータをマスクするマスク処理方法をコンピュータに実行させるためのプログラムであって、
前記非線形処理器が、内部レジスタ、入力値に対して非線形置換処理を行う非線形置換手段、マスク処理手段、およびマスク解除手段から構成され、
前記マスク処理手段が、前記非線形置換手段の出力値と、前記フィードバックシフトレジスタに格納されている値の一部から生成された乱数との排他的論理和演算を行って、当該非線形置換手段の出力値をマスクする第１のステップと、
前記内部レジスタが、前記第１のステップでマスクされた前記非線形置換手段の出力値を格納する第２のステップと、
前記マスク解除手段が、前記第２のステップで前記内部レジスタに格納された値と、前記乱数との排他的論理和演算を行って、当該内部レジスタに格納された値のマスクを外す第３のステップと、
をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号化または復号処理中の値をマスクする非線形処理器、ストリーム暗号の暗号化装置、復号装置、非線形処理機内部のデータをマスクするマスク処理方法、およびプログラムに関する。また、本発明は、暗号化あるいは復号化の処理を高速に行うストリーム暗号の暗号化装置、ストリーム暗号の復号化装置、ストリーム暗号の暗号化方法、ストリーム暗号の復号化方法およびプログラムに関する。
【背景技術】
【０００２】
情報化社会である現在ではデータの暗号化は必須であり、暗号技術はスマートカード等多くのデバイスに実装されている。暗号アルゴリズムは非常に強固になってきており、これを直接解読するとなると膨大な時間と労力を費やすことになるため、暗号化されていればデータは安全であるといえる。【０００３】
ところが、近年、暗号に対するサイドチャネル攻撃が大きな問題となっている。サイドチャネル攻撃は、暗号アルゴリズムを直接解読するのではなく、暗号化または復号処理中にデバイスから生じる電圧波形や電磁波等の２次的な情報を攻撃者が入手し、それらを解析することで秘密鍵を復元する攻撃である。この攻撃は安全とされている暗号化アルゴリズムであっても、適切に実装されていない場合には攻撃可能であり、さらに痕跡が残らないこともあり大きな問題となっている。【０００４】
サイドチャネル攻撃の１つである差分電力解析（Ｄｉｆｆｅｒｅｎｔｉａｌ  Ｐｏｗｅｒ  Ａｎａｌｙｓｉｓ）は、攻撃者はまず、多数の入力データに対する電圧波形を取得する。次に、秘密鍵の値を推定し、同時に選択関数を定める。定めた選択関数を用いて取得した電圧波形を分類し、それぞれのグループの波形の和を取る。推測した秘密鍵の値が正しければ波形にピークが表れるため、正しい秘密鍵であるか否かの判別ができ、秘密鍵を復元することができる（例えば、非特許文献１参照。）。【０００５】
このようなサイドチャネル攻撃を防ぐために、乱数で暗号化または復号処理中の値をマスクすることによって、暗号化または復号処理中の値と秘密鍵との相関を失くす方法が有効である。そこで、暗号アルゴリズムとは別に乱数生成のための回路を備え、備えられた回路により生成された乱数を用いてマスクを行うのが一般的である。【０００６】
近年、コンピュータを利用した様々なサービスが提供されている。多くのサービスにおいては、通信の秘匿を実現するため、暗号が利用される。また、昨今、デジタルデータの量が急激に増えており、同時にネットワークを通じて送受信されるデータ量も急激に増えている。そのため、これらのデータの中には個人情報や企業の機密情報なども含まれており、暗号化して安全に送受信する必要がある。ここで、暗号方式として最も一般的なものは、１つの鍵で暗号化・復号化を行う共通鍵暗号方式であるが、共通鍵暗号方式は、大きくブロック暗号方式とストリーム暗号方式の２つに分けられる。【０００７】
前者は、最も一般的に用いられている方式であるが、後者の方が処理速度に優れるため、近年注目を集めつつある。ここで、ストリーム暗号は、内部状態を更新しながら暗号化を行う、ステートフルな方式である（例えば、非特許文献２参照。）。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】Ｈ．Ｈｅｎｒｉｃｋｓｅｎ  ｅｔ  ａｌ．，”Ｓｉｄｅ−Ｃｈａｎｎｅｌ  Ａｎａｌｙｓｉｓ  ｏｆ  ｔｈｅ  Ｋ２  Ｓｔｒｅａｍ  Ｃｉｐｈｅｒ”，ＡＣＩＳＰ２０１０，２０１０．
【非特許文献２】Ｋｉｙｏｍｏｔｏ，Ｔａｎａｋａ，Ｓａｋｕｒａｉ，“Ｋ２：Ａ  Ｓｔｒｅａｍ  Ｃｉｐｈｅｒ Ａｌｇｏｒｉｔｈｍ  Ｕｓｉｎｇ  Ｄｙｎａｍｉｃ Ｆｅｅｄｂａｃｋ  Ｃｏｎｔｒｏｌ，” ＳＥＣＲＹＰＴ２００７，２００７．
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、この方式では別途回路が必要となるため、回路規模が増加し、ＩＣカード等のデバイスでは実装できないといった問題があった。また、乱数生成処理は比較的重い処理であるため、処理速度や消費電力等への悪影響があるという問題点もあった。【００１０】
また、暗号化するデータサイズが大きくなるに連れて暗号化および復号化にかかる時間も長くなるという問題があり、高速な暗号実装が必要となる。【００１１】
そこで、本発明は、上述の課題に鑑みてなされたものであり、暗号化または復号処理中の値をマスクするのに用いる乱数を生成するための回路を別途備えることなしに、暗号化または復号処理中の値をマスクする非線形処理器、ストリーム暗号の暗号化装置、ストリーム暗号の復号装置、マスク処理方法、およびプログラムを提供することを目的とする。【００１２】
また、暗号化あるいは復号化の処理を高速に行うストリーム暗号の暗号化装置、ストリーム暗号の復号化装置、ストリーム暗号の暗号化方法、ストリーム暗号の復号化方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１３】
（１）本発明は、秘密鍵と初期ベクトルとに基づいて初期化されるストリーム暗号の内部状態、またはキーストリーム出力時に更新される前記ストリーム暗号の内部状態を保持するフィードバックシフトレジスタ（例えば、図１のＦＳＲ−Ａ１００Ａ、ＦＳＲ−Ｂ１００Ｂに相当）からの入力値に非線形処理を施してキーストリームを出力する非線形処理器であって、入力値を非線形置換処理する非線形置換手段（例えば、図２のＳｕｂ３２０ａ、Ｓｕｂ３２０ｂ、Ｓｕｂ３２０ｃ、Ｓｕｂ３２０ｄに相当）と、前記非線形置換手段からの出力値を格納する複数の内部レジスタ（例えば、図２のＬ１、Ｌ２、Ｒ１、Ｒ２に相当）と、前記複数の内部レジスタそれぞれの入力端に設けられ、前記フィードバックシフトレジスタに格納されている値の一部から生成された乱数と、前記非線形置換手段の出力値との排他的論理和演算を行って、当該非線形置換手段の出力値をマスクするマスク処理手段（例えば、図３排他的論理和演算器３０３ａに相当）と、前記複数の内部レジスタそれぞれの出力端に設けられ、前記乱数と、当該複数の内部レジスタそれぞれに格納されている値との排他的論理和演算を行って、当該内部レジスタに格納されている値のマスクを外すマスク解除手段（例えば、図３の排他的論理和演算器３０３ｂに相当）と、を備え、前記複数の内部レジスタが前記非線形置換手段を介して接続され、前記非線形置換手段が、少なくとも内部レジスタに格納されている値を入力値として非線形置換処理を行うことを特徴とする非線形処理器を提案している。【００１４】
この発明によれば、非線形置換手段は、少なくとも内部レジスタに格納されている値を入力値として非線形置換処理する。内部レジスタは、複数備えられ、また、非線形置換手段を介して接続され、非線形置換手段からの出力値を格納する。マスク処理手段は、複数の内部レジスタそれぞれの入力端に設けられ、フィードバックシフトレジスタに格納されている値の一部から生成された乱数と、非線形置換手段の出力値との排他的論理和演算を行って、非線形置換手段の出力値をマスクする。マスク解除手段は、複数の内部レジスタそれぞれの出力端に設けられ、乱数と、複数の内部レジスタそれぞれに格納されている値との排他的論理和演算を行って、内部レジスタに格納されている値のマスクを外す。したがって、暗号化または復号処理中の値をマスクするための乱数をストリーム暗号の内部状態から生成することにより、暗号化または復号処理中の値をマスクするための乱数を生成する回路を別途備えることなく、暗号を安全に実行することが可能となる。また、乱数を生成する回路を別途必要としないので、ＩＣカード等のデバイスへの実装が可能であり、処理速度や消費電力等への影響も少なくすることができる。【００１５】
（２）本発明は、（１）の非線形処理器について、前記乱数が、前記フィードバックシフトレジスタに格納されている値のうち、前記キーストリーム出力時における当該フィードバックシフトレジスタの更新によって乱数性が確保される値から生成されることを特徴とする非線形処理器を提案している。【００１６】
この発明によれば、乱数が、フィードバックシフトレジスタに格納されている値のうち、キーストリーム出力時におけるフィードバックシフトレジスタの更新によって乱数性が確保される値から生成される。したがって、暗号化または復号処理中の値をマスクするために用いる乱数の乱数性が確保でき、サイドチャネル攻撃に対する安全性を高めることができる。【００１７】
（３）本発明は、（１）または（２）の非線形処理器について、前記乱数が、前記フィードバックシフトレジスタに格納されている値の一部を加算することにより生成されることを特徴とする非線形処理器を提案している。【００１８】
この発明によれば、乱数が、フィードバックシフトレジスタに格納されている値の一部を加算することにより生成される。したがって、回路規模をほとんど増加させず、処理速度や消費電力等への影響小さくすることができる。【００１９】
（４）本発明は、（１）から（３）の非線形処理器について、前記フィードバックシフトレジスタは、５段構成の第１のフィードバックレジスタ（例えば、図１のＦＳＲ−Ａ１００Ａに相当）と１１段構成の第２のフィードバックレジスタ（例えば、図１のＦＳＲ−Ｂ１００Ｂに相当）を含み、前記乱数が、前記第１のフィードバックレジスタの２段目および３段目に格納されている値と、前記第２のフィードバックレジスタの４段目および１０段目に格納されている値とを加算することにより生成されることを特徴とする非線形処理器を提案している。【００２０】
この発明によれば、フィードバックシフトレジスタは、５段構成の第１のフィードバックレジスタと１１段構成の第２のフィードバックレジスタを含む。乱数が、第１のフィードバックレジスタの２段目および３段目に格納されている値と、第２のフィードバックレジスタの４段目および１０段目に格納されている値とを加算することにより生成される。したがって、フィードバックレジスタに格納されている４つの値から乱数を生成することができる。【００２１】
（５）本発明は、（１）から（４）の非線形処理器と、前記秘密鍵と前記初期ベクトルとに基づいて前記内部状態を初期化し、初期化された内部状態を前記フィードバックシフトレジスタに保持する初期化処理手段（例えば、図５の初期化処理部１１に相当）と、前記キーストリーム出力時に内部状態を更新し、更新された内部状態を前記フィードバックシフトレジスタに保持する内部状態更新手段（例えば、図５の内部状態更新部１２に相当）と、前記非線形処理器から出力されたキーストリームと、外部から入力された平文との排他的論理和演算を行なって、暗号文を出力する暗号化手段（例えば、図５の暗号化部１３に相当）と、を備えるストリーム暗号の暗号化装置を提案している。【００２２】
この発明によれば、暗号化装置は、（１）から（４）の非線形処理器を用いて、暗号化装置を構成することができる。したがって、暗号化処理中の値をマスクするための乱数を生成する回路を別途備えることなく、暗号を安全に実行することが可能な暗号化装置を構成することができる。また、処理速度や消費電力等への影響が少なく、ＩＣカード等のデバイスへの実装が可能な暗号化装置を構成することができる。【００２３】
（６）本発明は、（１）から（４）の非線形処理器と、前記秘密鍵と前記初期ベクトルとに基づいて前記内部状態を初期化し、初期化された内部状態を前記フィードバックシフトレジスタに保持する初期化処理手段（例えば、図６の初期化処理部１１に相当）と、前記キーストリーム出力時に内部状態を更新し、更新された内部状態を前記フィードバックシフトレジスタに保持する内部状態更新手段（例えば、図６の内部状態更新部１２に相当）と、前記非線形処理器から出力されたキーストリームと、外部から入力された暗号文との排他的論理和演算を行なって、平文を出力する復号手段（例えば、図６の復号部１４に相当）と、を備えるストリーム暗号の復号装置を提案している。【００２４】
この発明によれば、復号装置は、（１）から（４）の非線形処理器を用いて、復号装置を構成することができる。したがって、復号処理中の値をマスクするための乱数を生成する回路を別途備えることなく、復号を安全に実行することが可能な復号装置を構成することができる。また、処理速度や消費電力等への影響が少なく、ＩＣカード等のデバイスへの実装が可能な復号装置を構成することができる。【００２５】
（７）本発明は、秘密鍵と初期ベクトルとに基づいて初期化されるストリーム暗号の内部状態、またはキーストリーム出力時に更新される前記ストリーム暗号の内部状態を保持するフィードバックシフトレジスタからの入力値に非線形処理を施してキーストリームを出力する非線形処理器における、非線形処理器内部のデータをマスクするマスク処理方法であって、前記非線形処理器が、内部レジスタ、入力値に対して非線形置換処理を行う非線形置換手段、マスク処理手段、およびマスク解除手段から構成され、前記マスク処理手段が、前記非線形置換手段の出力値と、前記フィードバックシフトレジスタに格納されている値の一部から生成された乱数との排他的論理和演算を行って、当該非線形置換手段の出力値をマスクする第１のステップ（例えば、図４のステップＳ１に相当）と、前記内部レジスタが、前記第１のステップでマスクされた前記非線形置換手段の出力値を格納する第２のステップ（例えば、図４のステップＳ２に相当）と、前記マスク解除手段が、前記第２のステップで前記内部レジスタに格納された値と、前記乱数との排他的論理和演算を行って、当該内部レジスタに格納された値のマスクを外す第３のステップ（例えば、図４のステップＳ３に相当）と、を含むことを特徴とする非線形処理方法を提案している。【００２６】
この発明によれば、まず、第１のステップにおいて、マスク処理手段が、非線形置換手段の出力値と、フィードバックシフトレジスタに格納されている値の一部から生成された乱数との排他的論理和演算を行って、非線形置換手段の出力値をマスクする。次に、第２のステップにおいて、内部レジスタが、第１のステップでマスクされた非線形置換手段の出力値を格納する。次に、第３のステップにおいて、マスク解除手段が、第２のステップで内部レジスタに格納された値と、乱数との排他的論理和演算を行って、内部レジスタに格納された値のマスクを外す。したがって、暗号化または復号処理中の値をマスクするための乱数をストリーム暗号の内部状態から生成することにより、暗号化または復号処理中の値をマスクするための乱数を生成する回路を別途備えることなく、暗号を安全に実行することが可能となる。また、乱数を生成する回路を別途必要としないので、ＩＣカード等のデバイスへの実装が可能であり、処理速度や消費電力等への影響も少なくすることができる。【００２７】
（８）本発明は、秘密鍵と初期ベクトルとに基づいて初期化されるストリーム暗号の内部状態、またはキーストリーム出力時に更新される前記ストリーム暗号の内部状態を保持するフィードバックシフトレジスタからの入力値に非線形処理を施してキーストリームを出力する非線形処理器における、非線形処理器内部のデータをマスクするマスク処理方法をコンピュータに実行させるためのプログラムであって、前記非線形処理器が、内部レジスタ、入力値に対して非線形置換処理を行う非線形置換手段、マスク処理手段、およびマスク解除手段から構成され、前記マスク処理手段が、前記非線形置換手段の出力値と、前記フィードバックシフトレジスタに格納されている値の一部から生成された乱数との排他的論理和演算を行って、当該非線形置換手段の出力値をマスクする第１のステップ（例えば、図４のステップＳ１に相当）と、前記内部レジスタが、前記第１のステップでマスクされた前記非線形置換手段の出力値を格納する第２のステップ（例えば、図４のステップＳ２に相当）と、前記マスク解除手段が、前記第２のステップで前記内部レジスタに格納された値と、前記乱数との排他的論理和演算を行って、当該内部レジスタに格納された値のマスクを外す第３のステップ（例えば、図４のステップＳ３に相当）と、をコンピュータに実行させるためのプログラムを提案している。【００２８】
この発明によれば、まず、第１のステップにおいて、マスク処理手段が、非線形置換手段の出力値と、フィードバックシフトレジスタに格納されている値の一部から生成された乱数との排他的論理和演算を行って、非線形置換手段の出力値をマスクする。次に、第２のステップにおいて、内部レジスタが、第１のステップでマスクされた非線形置換手段の出力値を格納する。次に、第３のステップにおいて、マスク解除手段が、第２のステップで内部レジスタに格納された値と、乱数との排他的論理和演算を行って、内部レジスタに格納された値のマスクを外す。したがって、暗号化または復号処理中の値をマスクするための乱数をストリーム暗号の内部状態から生成することにより、暗号化または復号処理中の値をマスクするための乱数を生成する回路を別途備えることなく、暗号を安全に実行することが可能となる。また、乱数を生成する回路を別途必要としないので、ＩＣカード等のデバイスへの実装が可能であり、処理速度や消費電力等への影響も少なくすることができる。【００２９】
（９）本発明は、初期化処理において、初期鍵を拡張した拡張鍵と初期値とを入力し、前記初期化処理終了後においては、非線形部からのフィードバック値を入力し、鍵系列を生成する鍵系列生成手段（例えば、図７の非線形処理部１３００に相当）と、初期化処理において、初期鍵を拡張した拡張鍵と初期値とを前記鍵系列生成手段に入力し、前記初期化処理終了後においては、非線形部からのフィードバック値を前記鍵系列生成手段に入力する入力切替手段（例えば、図７のフリップフロップ１２００に相当）と、前記鍵系列生成手段が実行する非線形処理が並列に処理され、前記鍵系列生成手段内に設けられた非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持し、前記生成された鍵系列と平文の排他的論理和演算を行い暗号文を生成する暗号文生成手段（例えば、図７の排他的論理和演算器１４００に相当）と、を備えたことを特徴とするストリーム暗号の暗号化装置を提案している。【００３０】
この発明によれば、鍵系列生成手段は、初期化処理において、初期鍵を拡張した拡張鍵と初期値とを入力し、初期化処理終了後においては、非線形部からのフィードバック値を入力し、鍵系列を生成する。入力切替手段は、初期化処理において、初期鍵を拡張した拡張鍵と初期値とを鍵系列生成手段に入力し、初期化処理終了後においては、非線形部からのフィードバック値を鍵系列生成手段に入力する。暗号文生成手段は、鍵系列生成手段が実行する非線形処理が並列に処理され、鍵系列生成手段内に設けられた非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持し、生成された鍵系列と平文の排他的論理和演算を行い暗号文を生成する。つまり、入力切替手段が、初期化処理において、初期鍵を拡張した拡張鍵と初期値とを鍵系列生成手段に入力し、初期化処理終了後においては、非線形部からのフィードバック値を鍵系列生成手段に入力するため、データの遅延量が、増大することを防止できるため、暗号化にかかる時間を短くすることができる。また、鍵系列生成手段が実行する非線形処理が並列に処理され、鍵系列生成手段内に設けられた非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持するため、多くの処理が多重化でき、さらに、非線形関数は、テーブルを１回だけ参照すれば、処理を行うことができるため、暗号化にかかる時間を短くすることができる。【００３１】
（１０）本発明は、初期鍵を拡張する初期鍵拡張手段（例えば、図７の鍵拡張部１１００に相当）と、初期化処理において、該拡張した初期鍵と初期値とを入力し、前記初期化処理終了後においては、非線形部からのフィードバック値を入力し、鍵系列を生成する鍵系列生成手段（例えば、図７の非線形処理部１３００に相当）と、初期化処理において、初期鍵を拡張した拡張鍵と初期値とを前記鍵系列生成手段に入力し、前記初期化処理終了後においては、非線形部からのフィードバック値を前記鍵系列生成手段に入力する入力切替手段（例えば、図７のフリップフロップ１２００に相当）と、前記鍵系列生成手段が実行する非線形処理が並列に処理され、前記鍵系列生成手段内に設けられた非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持し、前記生成された鍵系列と平文の排他的論理和演算を行い暗号文を生成する暗号文生成手段（例えば、図７の排他的論理和演算器１４００に相当）と、を備えたことを特徴とするストリーム暗号の暗号化装置を提案している。【００３２】
この発明によれば、初期鍵拡張手段は、初期鍵を拡張する。初期化処理において、初期鍵を拡張した拡張鍵と初期値とを入力し、初期化処理終了後においては、非線形部からのフィードバック値を入力し、鍵系列を生成する。入力切替手段は、初期化処理において、初期鍵を拡張した拡張鍵と初期値とを鍵系列生成手段に入力し、初期化処理終了後においては、非線形部からのフィードバック値を鍵系列生成手段に入力する。暗号文生成手段は、鍵系列生成手段が実行する非線形処理が並列に処理され、鍵系列生成手段内に設けられた非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持し、生成された鍵系列と平文の排他的論理和演算を行い暗号文を生成する。つまり、入力切替手段が、初期化処理において、初期鍵を拡張した拡張鍵と初期値とを鍵系列生成手段に入力し、初期化処理終了後においては、非線形部からのフィードバック値を鍵系列生成手段に入力するため、データの遅延量が、増大することを防止できるため、暗号化にかかる時間を短くすることができる。また、鍵系列生成手段が実行する非線形処理が並列に処理され、鍵系列生成手段内に設けられた非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持するため、多くの処理が多重化でき、さらに、非線形関数は、テーブルを１回だけ参照すれば、処理を行うことができるため、暗号化にかかる時間を短くすることができる。【００３３】
（１１）本発明は、（９）または（１０）のストリーム暗号の暗号化装置について、前記入力切替手段が、フリップフロップであることを特徴とするストリーム暗号の暗号化装置を提案している。【００３４】
この発明によれば、入力切替手段が、フリップフロップである。したがって、「０」あるいは「１」を入力することにより、簡単に鍵系列生成手段への入力を切り替えることができる。【００３５】
（１２）本発明は、初期化処理において、初期鍵を拡張した拡張鍵と初期値とを入力し、前記初期化処理終了後においては、非線形部からのフィードバック値を入力し、鍵系列を生成する鍵系列生成手段（例えば、図１２の非線形処理部１３００に相当）と、初期化処理において、初期鍵を拡張した拡張鍵と初期値とを前記鍵系列生成手段に入力し、前記初期化処理終了後においては、非線形部からのフィードバック値を前記鍵系列生成手段に入力する入力切替手段（例えば、図１２のフリップフロップ１２００に相当）と、前記鍵系列生成手段が実行する非線形処理が並列に処理され、前記鍵系列生成手段内に設けられた非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持し、前記生成された鍵系列と暗号文の排他的論理和演算を行い平文を生成する平文生成手段（例えば、図１２の排他的論理和演算器１４００に相当）と、を備えたことを特徴とするストリーム暗号の復号化装置を提案している。【００３６】
この発明によれば、鍵系列生成手段は、初期化処理において、初期鍵を拡張した拡張鍵と初期値とを入力し、初期化処理終了後においては、非線形部からのフィードバック値を入力し、鍵系列を生成する。入力切替手段は、初期化処理において、初期鍵を拡張した拡張鍵と初期値とを鍵系列生成手段に入力し、初期化処理終了後においては、非線形部からのフィードバック値を鍵系列生成手段に入力する。暗号文生成手段は、鍵系列生成手段が実行する非線形処理が並列に処理され、鍵系列生成手段内に設けられた非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持し、生成された鍵系列と暗号文の排他的論理和演算を行い平文を生成する。つまり、入力切替手段が、初期化処理において、初期鍵を拡張した拡張鍵と初期値とを鍵系列生成手段に入力し、初期化処理終了後においては、非線形部からのフィードバック値を鍵系列生成手段に入力するため、データの遅延量が、増大することを防止できるため、暗号化にかかる時間を短くすることができる。また、鍵系列生成手段が実行する非線形処理が並列に処理され、鍵系列生成手段内に設けられた非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持するため、多くの処理が多重化でき、さらに、非線形関数は、テーブルを１回だけ参照すれば、処理を行うことができるため、暗号化にかかる時間を短くすることができる。【００３７】
（１３）本発明は、初期鍵を拡張する初期鍵拡張手段（例えば、図１２の鍵拡張部１１００に相当）と、初期化処理において、該拡張した初期鍵と初期値とを入力し、前記初期化処理終了後においては、非線形部からのフィードバック値を入力し、鍵系列を生成する鍵系列生成手段（例えば、図１２の非線形処理部１３００に相当）と、初期化処理において、初期鍵を拡張した拡張鍵と初期値とを前記鍵系列生成手段に入力し、前記初期化処理終了後においては、非線形部からのフィードバック値を前記鍵系列生成手段に入力する入力切替手段（例えば、図１２のフリップフロップ１２００に相当）と、前記鍵系列生成手段が実行する非線形処理が並列に処理され、前記鍵系列生成手段内に設けられた非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持し、前記生成された鍵系列と暗号文の排他的論理和演算を行い平文を生成する平文生成手段（例えば、図１２の排他的論理和演算器１４００に相当）と、を備えたことを特徴とするストリーム暗号の復号化装置を提案している。【００３８】
この発明によれば、初期鍵拡張手段は、初期鍵を拡張する。初期化処理において、初期鍵を拡張した拡張鍵と初期値とを入力し、初期化処理終了後においては、非線形部からのフィードバック値を入力し、鍵系列を生成する。入力切替手段は、初期化処理において、初期鍵を拡張した拡張鍵と初期値とを鍵系列生成手段に入力し、初期化処理終了後においては、非線形部からのフィードバック値を鍵系列生成手段に入力する。暗号文生成手段は、鍵系列生成手段が実行する非線形処理が並列に処理され、鍵系列生成手段内に設けられた非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持し、生成された鍵系列と暗号文の排他的論理和演算を行い平文を生成する。つまり、入力切替手段が、初期化処理において、初期鍵を拡張した拡張鍵と初期値とを鍵系列生成手段に入力し、初期化処理終了後においては、非線形部からのフィードバック値を鍵系列生成手段に入力するため、データの遅延量が、増大することを防止できるため、暗号化にかかる時間を短くすることができる。また、鍵系列生成手段が実行する非線形処理が並列に処理され、鍵系列生成手段内に設けられた非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持するため、多くの処理が多重化でき、さらに、非線形関数は、テーブルを１回だけ参照すれば、処理を行うことができるため、暗号化にかかる時間を短くすることができる。【００３９】
（１４）本発明は、（１２）または（１３）のストリーム暗号の暗号化装置について、前記入力切替手段が、フリップフロップであることを特徴とするストリーム暗号の復号化装置を提案している。【００４０】
この発明によれば、入力切替手段が、フリップフロップである。したがって、「０」あるいは「１」を入力することにより、簡単に鍵系列生成手段への入力を切り替えることができる。【００４１】
（１５）本発明は、鍵拡張手段が、事前に初期鍵を拡張して拡張鍵を生成する第１のステップ（例えば、図１１のステップＳ１１０１に相当）と、初期化処理手段が、初期化処理において、該生成した拡張鍵と初期値とを入力し、初期化処理を行う第２のステップ（例えば、図１１のステップＳ１１０２に相当）と、鍵系列生成手段が、前記初期化処理終了後に、非線形部からのフィードバック値を入力し、非線形処理を並列に処理するとともに、非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持して処理し、鍵系列を生成する第３のステップ（例えば、図１１のステップＳ１１０３に相当）と、暗号文生成手段が、該生成された鍵系列と平文の排他的論理和演算を行い暗号文を生成する第４のステップ（例えば、図１１のステップＳ１１０４に相当）と、を備えたことを特徴とするストリーム暗号の暗号化方法を提案している。【００４２】
この発明によれば、鍵拡張手段が、事前に初期鍵を拡張して拡張鍵を生成し、初期化処理手段が、初期化処理において、生成した拡張鍵と初期値とを入力し、初期化処理を行う。そして、鍵系列生成手段が、初期化処理終了後に、非線形部からのフィードバック値を入力し、非線形処理を並列に処理するとともに、非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持して処理し、鍵系列を生成し、暗号文生成手段が、生成された鍵系列と平文の排他的論理和演算を行い暗号文を生成する。つまり、入力切替手段が、初期化処理において、初期鍵を拡張した拡張鍵と初期値とを鍵系列生成手段に入力し、初期化処理終了後においては、非線形部からのフィードバック値を鍵系列生成手段に入力するため、データの遅延量が、増大することを防止できるため、暗号化にかかる時間を短くすることができる。また、鍵系列生成手段が実行する非線形処理が並列に処理され、鍵系列生成手段内に設けられた非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持するため、多くの処理が多重化でき、さらに、非線形関数は、テーブルを１回だけ参照すれば、処理を行うことができるため、暗号化にかかる時間を短くすることができる。【００４３】
（１６）本発明は、鍵拡張手段が、初期鍵を拡張して拡張鍵を生成する第１のステップと、初期化処理手段が、初期化処理において、該生成した拡張鍵と初期値とを入力し、初期化処理を行う第２のステップと、鍵系列生成手段が、前記初期化処理終了後に、非線形部からのフィードバック値を入力し、非線形処理を並列に処理するとともに、非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持して処理し、鍵系列を生成する第３のステップと、暗号文生成手段が、該生成された鍵系列と平文の排他的論理和演算を行い暗号文を生成する第４のステップと、を備えたことを特徴とするストリーム暗号の暗号化方法を提案している。【００４４】
この発明によれば、鍵拡張手段が、初期鍵を拡張して拡張鍵を生成し、初期化処理手段が、初期化処理において、生成した拡張鍵と初期値とを入力し、初期化処理を行う。そして、鍵系列生成手段が、初期化処理終了後に、非線形部からのフィードバック値を入力し、非線形処理を並列に処理するとともに、非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持して処理し、鍵系列を生成し、暗号文生成手段が、生成された鍵系列と平文の排他的論理和演算を行い暗号文を生成する。つまり、入力切替手段が、初期化処理において、初期鍵を拡張した拡張鍵と初期値とを鍵系列生成手段に入力し、初期化処理終了後においては、非線形部からのフィードバック値を鍵系列生成手段に入力するため、データの遅延量が、増大することを防止できるため、暗号化にかかる時間を短くすることができる。また、鍵系列生成手段が実行する非線形処理が並列に処理され、鍵系列生成手段内に設けられた非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持するため、多くの処理が多重化でき、さらに、非線形関数は、テーブルを１回だけ参照すれば、処理を行うことができるため、暗号化にかかる時間を短くすることができる。【００４５】
（１７）本発明は、鍵拡張手段が、事前に初期鍵を拡張して拡張鍵を生成する第１のステップ（例えば、図１５のステップＳ１２０１に相当）と、初期化処理手段が、初期化処理において、該生成した拡張鍵と初期値とを入力し、初期化処理を行う第２のステップ（例えば、図１５のステップＳ１２０２に相当）と、鍵系列生成手段が、前記初期化処理終了後に、非線形部からのフィードバック値を入力し、非線形処理を並列に処理するとともに、非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持して処理し、鍵系列を生成する第３のステップ（例えば、図１５のステップＳ１２０３に相当）と、平文生成手段が、該生成された鍵系列と暗号文の排他的論理和演算を行い平文を生成する第４のステップ（例えば、図１５のステップＳ１２０４に相当）と、を備えたことを特徴とするストリーム暗号の復号化方法を提案している。【００４６】
この発明によれば、鍵拡張手段が、事前に初期鍵を拡張して拡張鍵を生成し、初期化処理手段が、初期化処理において、生成した拡張鍵と初期値とを入力し、初期化処理を行う。そして、鍵系列生成手段が、初期化処理終了後に、非線形部からのフィードバック値を入力し、非線形処理を並列に処理するとともに、非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持して処理し、鍵系列を生成し、暗号文生成手段が、生成された鍵系列と暗号文の排他的論理和演算を行い平文を生成する。つまり、入力切替手段が、初期化処理において、初期鍵を拡張した拡張鍵と初期値とを鍵系列生成手段に入力し、初期化処理終了後においては、非線形部からのフィードバック値を鍵系列生成手段に入力するため、データの遅延量が、増大することを防止できるため、暗号化にかかる時間を短くすることができる。また、鍵系列生成手段が実行する非線形処理が並列に処理され、鍵系列生成手段内に設けられた非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持するため、多くの処理が多重化でき、さらに、非線形関数は、テーブルを１回だけ参照すれば、処理を行うことができるため、暗号化にかかる時間を短くすることができる。【００４７】
（１８）本発明は、鍵拡張手段が、初期鍵を拡張して拡張鍵を生成する第１のステップと、初期化処理手段が、初期化処理において、該生成した拡張鍵と初期値とを入力し、初期化処理を行う第２のステップと、鍵系列生成手段が、前記初期化処理終了後に、非線形部からのフィードバック値を入力し、非線形処理を並列に処理するとともに、非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持して処理し、鍵系列を生成する第３のステップと、平文生成手段が、該生成された鍵系列と暗号文の排他的論理和演算を行い平文を生成する第４のステップと、を備えたことを特徴とするストリーム暗号の復号化方法を提案している。【００４８】
この発明によれば、鍵拡張手段が、初期鍵を拡張して拡張鍵を生成し、初期化処理手段が、初期化処理において、生成した拡張鍵と初期値とを入力し、初期化処理を行う。そして、鍵系列生成手段が、初期化処理終了後に、非線形部からのフィードバック値を入力し、非線形処理を並列に処理するとともに、非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持して処理し、鍵系列を生成し、暗号文生成手段が、生成された鍵系列と暗号文の排他的論理和演算を行い平文を生成する。つまり、入力切替手段が、初期化処理において、初期鍵を拡張した拡張鍵と初期値とを鍵系列生成手段に入力し、初期化処理終了後においては、非線形部からのフィードバック値を鍵系列生成手段に入力するため、データの遅延量が、増大することを防止できるため、暗号化にかかる時間を短くすることができる。また、鍵系列生成手段が実行する非線形処理が並列に処理され、鍵系列生成手段内に設けられた非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持するため、多くの処理が多重化でき、さらに、非線形関数は、テーブルを１回だけ参照すれば、処理を行うことができるため、暗号化にかかる時間を短くすることができる。【００４９】
（１９）本発明は、ストリーム暗号の暗号化方法をコンピュータに実行させるためのプログラムであって、鍵拡張手段が、事前に初期鍵を拡張して拡張鍵を生成する第１のステップ（例えば、図１１のステップＳ１１０１に相当）と、初期化処理手段が、初期化処理において、該生成した拡張鍵と初期値とを入力し、初期化処理を行う第２のステップ（例えば、図１１のステップＳ１１０２に相当）と、鍵系列生成手段が、前記初期化処理終了後に、非線形部からのフィードバック値を入力し、非線形処理を並列に処理するとともに、非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持して処理し、鍵系列を生成する第３のステップ（例えば、図１１のステップＳ１１０３に相当）と、暗号文生成手段が、該生成された鍵系列と平文の排他的論理和演算を行い暗号文を生成する第４のステップ（例えば、図１１のステップＳ１１０４に相当）と、をコンピュータに実行させるためのプログラムを提案している。【００５０】
この発明によれば、鍵拡張手段が、事前に初期鍵を拡張して拡張鍵を生成し、初期化処理手段が、初期化処理において、生成した拡張鍵と初期値とを入力し、初期化処理を行う。そして、鍵系列生成手段が、初期化処理終了後に、非線形部からのフィードバック値を入力し、非線形処理を並列に処理するとともに、非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持して処理し、鍵系列を生成し、暗号文生成手段が、生成された鍵系列と平文の排他的論理和演算を行い暗号文を生成する。つまり、入力切替手段が、初期化処理において、初期鍵を拡張した拡張鍵と初期値とを鍵系列生成手段に入力し、初期化処理終了後においては、非線形部からのフィードバック値を鍵系列生成手段に入力するため、データの遅延量が、増大することを防止できるため、暗号化にかかる時間を短くすることができる。また、鍵系列生成手段が実行する非線形処理が並列に処理され、鍵系列生成手段内に設けられた非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持するため、多くの処理が多重化でき、さらに、非線形関数は、テーブルを１回だけ参照すれば、処理を行うことができるため、暗号化にかかる時間を短くすることができる。【００５１】
（２０）本発明は、ストリーム暗号の暗号化方法をコンピュータに実行させるためのプログラムであって、鍵拡張手段が、初期鍵を拡張して拡張鍵を生成する第１のステップと、初期化処理手段が、初期化処理において、該生成した拡張鍵と初期値とを入力し、初期化処理を行う第２のステップと、鍵系列生成手段が、前記初期化処理終了後に、非線形部からのフィードバック値を入力し、非線形処理を並列に処理するとともに、非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持して処理し、鍵系列を生成する第３のステップと、暗号文生成手段が、該生成された鍵系列と平文の排他的論理和演算を行い暗号文を生成する第４のステップと、をコンピュータに実行させるためのプログラムを提案している。【００５２】
この発明によれば、鍵拡張手段が、初期鍵を拡張して拡張鍵を生成し、初期化処理手段が、初期化処理において、生成した拡張鍵と初期値とを入力し、初期化処理を行う。そして、鍵系列生成手段が、初期化処理終了後に、非線形部からのフィードバック値を入力し、非線形処理を並列に処理するとともに、非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持して処理し、鍵系列を生成し、暗号文生成手段が、生成された鍵系列と平文の排他的論理和演算を行い暗号文を生成する。つまり、入力切替手段が、初期化処理において、初期鍵を拡張した拡張鍵と初期値とを鍵系列生成手段に入力し、初期化処理終了後においては、非線形部からのフィードバック値を鍵系列生成手段に入力するため、データの遅延量が、増大することを防止できるため、暗号化にかかる時間を短くすることができる。また、鍵系列生成手段が実行する非線形処理が並列に処理され、鍵系列生成手段内に設けられた非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持するため、多くの処理が多重化でき、さらに、非線形関数は、テーブルを１回だけ参照すれば、処理を行うことができるため、暗号化にかかる時間を短くすることができる。【００５３】
（２１）本発明は、ストリーム暗号の復号化方法をコンピュータに実行させるためのプログラムであって、鍵拡張手段が、事前に初期鍵を拡張して拡張鍵を生成する第１のステップ（例えば、図１５のステップＳ１２０１に相当）と、初期化処理手段が、初期化処理において、該生成した拡張鍵と初期値とを入力し、初期化処理を行う第２のステップ（例えば、図１５のステップＳ１２０２に相当）と、鍵系列生成手段が、前記初期化処理終了後に、非線形部からのフィードバック値を入力し、非線形処理を並列に処理するとともに、非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持して処理し、鍵系列を生成する第３のステップ（例えば、図１５のステップＳ１２０３に相当）と、平文生成手段が、該生成された鍵系列と暗号文の排他的論理和演算を行い平文を生成する第４のステップ（例えば、図１５のステップＳ１２０４に相当）と、をコンピュータに実行させるためのプログラムを提案している。【００５４】
この発明によれば、鍵拡張手段が、事前に初期鍵を拡張して拡張鍵を生成し、初期化処理手段が、初期化処理において、生成した拡張鍵と初期値とを入力し、初期化処理を行う。そして、鍵系列生成手段が、初期化処理終了後に、非線形部からのフィードバック値を入力し、非線形処理を並列に処理するとともに、非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持して処理し、鍵系列を生成し、暗号文生成手段が、生成された鍵系列と暗号文の排他的論理和演算を行い平文を生成する。つまり、入力切替手段が、初期化処理において、初期鍵を拡張した拡張鍵と初期値とを鍵系列生成手段に入力し、初期化処理終了後においては、非線形部からのフィードバック値を鍵系列生成手段に入力するため、データの遅延量が、増大することを防止できるため、暗号化にかかる時間を短くすることができる。また、鍵系列生成手段が実行する非線形処理が並列に処理され、鍵系列生成手段内に設けられた非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持するため、多くの処理が多重化でき、さらに、非線形関数は、テーブルを１回だけ参照すれば、処理を行うことができるため、暗号化にかかる時間を短くすることができる。【００５５】
（２２）本発明は、ストリーム暗号の復号化方法をコンピュータに実行させるためのプログラムであって、鍵拡張手段が、初期鍵を拡張して拡張鍵を生成する第１のステップと、初期化処理手段が、初期化処理において、該生成した拡張鍵と初期値とを入力し、初期化処理を行う第２のステップと、鍵系列生成手段が、前記初期化処理終了後に、非線形部からのフィードバック値を入力し、非線形処理を並列に処理するとともに、非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持して処理し、鍵系列を生成する第３のステップと、平文生成手段が、該生成された鍵系列と暗号文の排他的論理和演算を行い平文を生成する第４のステップと、をコンピュータに実行させるためのプログラムを提案している。【００５６】
この発明によれば、鍵拡張手段が、初期鍵を拡張して拡張鍵を生成し、初期化処理手段が、初期化処理において、生成した拡張鍵と初期値とを入力し、初期化処理を行う。そして、鍵系列生成手段が、初期化処理終了後に、非線形部からのフィードバック値を入力し、非線形処理を並列に処理するとともに、非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持して処理し、鍵系列を生成し、暗号文生成手段が、生成された鍵系列と暗号文の排他的論理和演算を行い平文を生成する。つまり、入力切替手段が、初期化処理において、初期鍵を拡張した拡張鍵と初期値とを鍵系列生成手段に入力し、初期化処理終了後においては、非線形部からのフィードバック値を鍵系列生成手段に入力するため、データの遅延量が、増大することを防止できるため、暗号化にかかる時間を短くすることができる。また、鍵系列生成手段が実行する非線形処理が並列に処理され、鍵系列生成手段内に設けられた非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持するため、多くの処理が多重化でき、さらに、非線形関数は、テーブルを１回だけ参照すれば、処理を行うことができるため、暗号化にかかる時間を短くすることができる。
【発明の効果】
【００５７】
本発明によれば、ストリーム暗号の暗号化または復号処理中において、処理中の値をマスクするのに用いる乱数を生成するための回路を別途備えることなしに、処理中の値をマスクすることができる。また、処理中の値をマスクするのに用いる乱数生成のための回路を別途必要としないので、ＩＣカード等のデバイスへの実装が可能であり、処理速度や消費電力等への影響も少なくすることができる。【００５８】
また、本発明によれば、入力切替手段が、初期化処理において、初期鍵を拡張した拡張鍵と初期値とを鍵系列生成手段に入力し、初期化処理終了後においては、非線形部からのフィードバック値を鍵系列生成手段に入力するため、データの遅延量が、増大することを防止できるため、暗号化にかかる時間を短くすることができるという効果がある。また、鍵系列生成手段が実行する非線形処理が並列に処理され、鍵系列生成手段内に設けられた非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持するため、多くの処理が多重化でき、さらに、非線形関数は、テーブルを１回だけ参照すれば、処理を行うことができるため、暗号化にかかる時間を短くすることができるという効果がある。
【図面の簡単な説明】
【００５９】
【図１】本発明の第１の実施形態に係る非線形処理器を含む擬似乱数生成器の構成を示す図である。
【図２】従来の非線形処理器の構成を示す図である。
【図３】本発明の第１の実施形態に係る非線形処理器の構成を示す図である。
【図４】本発明の第１の実施形態に係る非線形処理器における非線形処理器内部のデータをマスクするマスク処理フローを示す図である。
【図５】第１の応用例に係るストリーム暗号の暗号化装置の機能構成を示す図である。
【図６】第２の応用例に係るストリーム暗号の復号装置の機能構成を示す図である。
【図７】本発明の第２の実施形態に係るストリーム暗号の暗号化装置の概略構成を示す図である。
【図８】本発明の第２の実施形態に係るストリーム暗号の暗号化装置の非線形処理部の概略構成を示す図である。
【図９】本発明の第２の実施形態に係るストリーム暗号の暗号化装置の非線形処理部の構成を示す図である。
【図１０】本発明の第２の実施形態に係るストリーム暗号の暗号化装置の非線形処理部の構成を示す図である。
【図１１】本発明の第２の実施形態に係るストリーム暗号の暗号化装置の処理を示す図である。
【図１２】本発明の第３の実施形態に係るストリーム暗号の復号化装置の概略構成を示す図である。
【図１３】本発明の第３の実施形態に係るストリーム暗号の復号化装置の非線形処理部の構成を示す図である。
【図１４】本発明の第２の実施形態に係るストリーム暗号の復号化装置の非線形処理部の構成を示す図である。
【図１５】本発明の第２の実施形態に係るストリーム暗号の復号化装置の処理を示す図である。
【発明を実施するための形態】
【００６０】
以下、図面を用いて、本発明の実施形態について詳細に説明する。なお、本実施形態における構成要素は適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組み合わせを含むさまざまなバリエーションが可能である。したがって、本実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
＜第１の実施形態＞
【００６１】
図１から図４を用いて、本発明の第１の実施形態について説明する。
【００６２】
＜擬似乱数生成器の構成＞
図１は、本実施形態に係る非線形処理器３００を含む擬似乱数生成器１０の構成を示す図である。本実施形態において、ストリーム暗号の１つであるＫ２の擬似乱数生成器１０および非線形処理器３００を例に説明するが、他のストリーム暗号の擬似乱数生成器や非線形処理器にも本発明を適用することができる。
【００６３】
擬似乱数生成器１０は、秘密鍵と初期ベクトルとに基づいて、平文を暗号化または暗号文を復号するのに用いるキーストリームを生成する。図１に示すように、擬似乱数生成器１０は、２個のフィードバックシフトレジスタ、ＦＳＲ−Ａ１００ａおよびＦＳＲ−Ｂ１００ｂと、非線形処理器３００と、クロック制御装置２００と、４つの排他的論理演算器４００ａ〜ｄとから構成される。
【００６４】
ＦＳＲ−Ａ１００ａは、５段のレジスタを持ち、各レジスタをＡｔからＡｔ＋４とする。ＦＳＲ−Ａ１００ａは、レジスタに格納されている値のうち必要な値を、後述するクロック制御装置２００および非線形処理器３００に出力する。また、ＦＳＲ−Ａ１００ａは、フィードバック関数により状態遷移する。具体的には、ＦＳＲ−Ａ１００ａは、ＡｔとＡｔ＋４に格納されている値を非線形処理器３００に出力すると、１つ右隣のレジスタに値をシフトさせる。そして、ＦＳＲ−Ａ１００ａは、排他的論理演算器４００ａにより実行されたＡｔとＡｔ＋３との排他的論理和演算の演算結果を、左端のＡｔ＋４に格納する。
【００６５】
ＦＳＲ−Ｂ１００ｂは、１１段のレジスタを持ち、各レジスタをＢｔからＢｔ＋１０とする。ＦＳＲ−Ｂ１００ｂは、ＦＳＲ−Ａ１００ａの出力をうけるクロック制御装置２００によりフィードバック関数が制御される。また、ＦＳＲ−Ｂ１００ｂもＦＳＲ−Ａ１００ａと同様、Ｂｔ、Ｂｔ＋４、Ｂｔ＋９、およびＢｔ＋１０に格納されている値を非線形処理器３００に出力すると、１つ右隣のレジスタに値をシフトさせる。そして、ＦＳＲ−Ｂ１００ｂは、排他的論理演算器４００ｂ〜ｄにより実行されたＢｔ、Ｂｔ＋１、Ｂｔ＋６およびＢｔ＋８の排他的論理和演算の演算結果を、左端のＢｔ＋１０に格納する。
【００６６】
クロック制御装置２００は、ＦＳＲ−Ａ１００ａからの入力値に対して、ＦＳＲ−Ｂ１００ｂのフィードバック関数を決定する処理を行う。
【００６７】
非線形処理器３００は、ＦＳＲ−Ａ１００ａから出力されたＡｔ、Ａｔ＋４と、ＦＳＲ−Ｂ１００ｂから出力されたＢｔ、Ｂｔ＋４、Ｂｔ＋９、Ｂｔ＋１０とに非線形処理を施して、キーストリームを出力する。従来の非線形処理器３０の構成を示す図２と、本実施形態に係る非線形処理器３００の構成を示す図３とを用いて、本実施形態に係る非線形処理器３０について説明する。
【００６８】
＜非線形処理器の構成＞
まず、図２を用いて従来の非線形処理器３０について説明する。従来の非線形処理器３０は、図２に示すように、加算器３０１ａ、３０１ｂ、３０１ｃ、３０１ｄと、内部レジスタ（Ｌ１、Ｌ２、Ｒ１、Ｒ２）３１０、３１１、３１２、３１３と、Ｓｕｂ３２０ａ、３２０ｂ、３２０ｃ、３２０ｄと、排他的論理和演算器３０２ａ、３０２ｂ、３０２ｃ、３０２ｄとから構成されている。
【００６９】
加算器３０１ａは、ＦＳＲ−Ｂ１００ｂと内部レジスタＬ２と排他的論理和演算器３０２ａに接続されており、内部レジスタＬ２から出力された値とＦＳＲ−Ｂ１００ｂのＢｔ＋１０から出力された値とを加算して、排他的論理和演算器３０２ａに出力する。
【００７０】
加算器３０１ｂは、ＦＳＲ−Ｂ１００ｂと内部レジスタＬ２とＳｕｂ３２０ｂに接続されており、内部レジスタＬ２から出力された値とＦＳＲ−Ｂ１００ｂのＢｔ＋９から出力された値とを加算して、Ｓｕｂ３２０ｂに出力する。
【００７１】
加算器３０１ｃは、ＦＳＲ−Ｂ１００ｂと内部レジスタＲ２とＳｕｂ３２０ｃに接続されており、内部レジスタＲ２から出力された値とＦＳＲ−Ｂ１００ｂのＢｔ＋５から出力された値とを加算して、Ｓｕｂ３２０ｃに出力する。
【００７２】
加算器３０１ｄは、ＦＳＲ−Ｂ１００ｂと内部レジスタＲ２と排他的論理和演算器３０２ｂに接続されており、内部レジスタＲ２から出力された値とＦＳＲ−Ｂ１００ｂのＢｔから出力された値とを加算して、排他的論理和演算器３０２ｃに出力する。
【００７３】
内部レジスタＬ１は、加算器３０１ｃから出力された値をＳｕｂ３２０ｃで非線形置換した値を格納する。
【００７４】
内部レジスタＬ２は、内部レジスタＬ１から出力された値をＳｕｂ３２０ａで非線形置換した値を格納する。
【００７５】
内部レジスタＲ１は、加算器３０１ｂから出力された値をＳｕｂ３２０ｂで非線形置換した値を格納する。
【００７６】
内部レジスタＲ２は、内部レジスタＲ１から出力された値をＳｕｂ３２０ｄで非線形置換した値を格納する。
【００７７】
排他的論理和演算器３０２ａは、加算器３０１ａから出力された値と内部レジスタＬ１の値との排他的論理和演算を行って、演算結果を排他的論理和演算器３０２ｂに出力する。
【００７８】
排他的論理和演算器３０２ｂは、排他的論理和演算器３０２ａの演算結果とＦＳＲ−Ａ１００ａのＡｔ＋４から出力された値との排他的論理和演算を行って、演算結果をキーストリームとして出力する。
【００７９】
排他的論理和演算器３０２ｃは、加算器３０１ｄから出力された値と内部レジスタＲ１の値との排他的論理和演算を行って、演算結果を排他的論理和演算器３０２ｄに出力する。
【００８０】
排他的論理和演算器３０２ｄは、排他的論理和演算器３０２ｃの演算結果とＦＳＲ−Ａ１００ａのＡｔから出力された値との排他的論理和演算を行って、演算結果をキーストリームとして出力する。
【００８１】
次に、図３を用いて、本実施形態に係る非線形処理器３００について説明する。なお、図２を用いて説明した従来の非線形処理器３０と同一の符号を付す構成要素については、同一の機能を有することから、その詳細な説明は省略する。
【００８２】
図３に示すように、本実施形態に係る非線形処理器３００は、従来の非線形処理器３０の構成要素に加え、新たに、排他的論理和演算器３０３ａ、３０３ｂを備える。
【００８３】
排他的論理和演算器３０３ａは、加算器３０１ｃから出力された値をＳｕｂ３２０ｃで非線形置換した値と、マスク用乱数との排他的論理和演算を行い、演算結果を内部レジスタＬ１に出力する。それにより、加算器３０１ｃから出力された値をＳｕｂ３２０ｃで非線形置換した値、言い換えると内部レジスタＬ１に格納する値をマスク用乱数でマスクすることによって、内部レジスタＬ１に格納された値と秘密鍵との相関を失くし、サイドチャネル攻撃を防ぐことができる。
【００８４】
ここで、マスク用乱数は、ＦＳＲ−Ａ１００ａおよびＦＳＲ−Ｂ１００ｂに格納されている値の一部から生成される。マスク用乱数の生成に用いる値は、ＦＳＲ−Ａ１００ａおよびＦＳＲ−Ｂ１００ｂのレジスタのうち、非線形処理器３００がキーストリームを出力する時に更新されることによって、値の乱数性が確保されるレジスタの値を用いる。また、ＦＳＲ−Ａ１００ａおよびＦＳＲ−Ｂ１００ｂのレジスタから抽出した値を加算することによりマスク用乱数を生成する。例えば、ＦＳＲ−Ａ１００ａのＡｔ＋１、Ａｔ＋２、ＦＳＲ−Ｂ１００ｂのＢｔ＋３，Ｂｔ＋９を加算することにより、マスク用乱数を生成する。
【００８５】
このように、ＦＳＲ−Ａ１００ａおよびＦＳＲ−Ｂ１００ｂのレジスタに格納されている値から、マスク用乱数を生成することにより、別途、マスク用乱数を生成する回路が必要とならない。
【００８６】
本実施形態において、内部レジスタＬ１は、従来の非線形処理器３０の内部レジスタＬ１と異なり、排他的論理和演算器３０３ａによりマスクされた値を格納する。
【００８７】
排他的論理和演算器３０３ｂは、内部レジスタＬ１から出力された値と、マスク用乱数との排他的論理和演算を行い、演算結果をＳｕｂ３２０ａに出力する。それにより、排他的論理和演算器３０３ａでマスクされて内部レジスタＬ１に格納されている値のマスクを外し、マスクを外した値、すなわち、Ｓｕｂ３２０ｃで非線形置換された値をＳｕｂ３２０ａに出力する。
【００８８】
本実施形態においては、内部レジスタＬ１に格納する値をマスクしたが、他の内部レジスタＬ２、Ｒ１、Ｒ２についても内部レジスタＬ１と同様に、入力端に内部レジスタＬ２、Ｒ１、Ｒ２それぞれに入力される値とマスク用乱数との排他的論理演算を行う排他的論理演算器を設け、出力端に内部レジスタＬ２、Ｒ１、Ｒ２それぞれから出力される値とマスク用乱数との排他的論理演算を行う排他的論理演算器を設けてもよい。それにより、内部レジスタＬ２、Ｒ１、Ｒ２それぞれに格納する値をマスクすることができ、サイドチャネル攻撃に対するより高い安全性を確保できる。
【００８９】
＜非線形処理器におけるマスク処理フロー＞
図４は、本実施形態に係る非線形処理器３００における非線形処理器３００内部のデータをマスクするマスク処理フローを示す図である。なお、本処理フローでは、内部レジスタＬ１の値をマスクする処理について説明するが、他の内部レジスタＬ２、Ｒ１、Ｒ２の値についても内部レジスタＬ１と同様の処理にて値をマスクすることができる。
【００９０】
まず、ステップＳ１において、排他的論理和演算器３０３ａは、Ｓｕｂ３２０ｃの出力値、すなわち、加算器３０１ｃから出力された値をＳｕｂ３２０ｃで非線形置換した値と、マスク用乱数との排他的論理和演算を行い、Ｓｕｂ３２０ｃの出力値をマスクする。
【００９１】
次に、ステップＳ２において、内部レジスタＬ１は、ステップＳ１でマスクされたＳｕｂ３２０ｃの出力値を格納する。
【００９２】
次に、ステップＳ３において、排他的論理和演算器３０３ｂは、ステップＳ２で内部レジスタＬ１に格納された値とマスク用乱数と排他的論理和演算を行い、ステップＳ１でマスクされて内部レジスタＬ１に格納されている値のマスクを外す。その結果、マスクを外した値、すなわち、Ｓｕｂ３２０ｃで非線形置換された値をＳｕｂ３２０ａが得られる。
【００９３】
＜第１の応用例＞
本応用例に係るストリーム暗号の暗号化装置１は、図５に示すように、初期化処理部１１と、非線形処理器３００と、内部状態更新部１２と、暗号化部１３とから構成されている。なお、非線形処理器３００については、上記にて説明したため、詳細な説明は省略する。
【００９４】
初期化処理部１１は、秘密鍵と初期ベクトルとに基づいて、ストリーム暗号の内部状態を初期化し、フィードバックシフトレジスタ（ＦＳＲ−Ａ１００ａおよびＦＳＲ−Ｂ１００ｂ）は初期化された内部状態を保持する。具体的には、初期化処理部１１は、内蔵のキースケジュールアルゴリズムによるストリーム暗号の内部状態（擬似乱数）を決定し、決定した内部状態をフィードバックレジスタに入力した後、複数回空廻しを行うことにより、初期化された内部状態を保持する。内部状態更新部１２は、非線形処理器３００がキーストリーム出力時に内部状態を一方向性関数等で更新し、フィードバックシフトレジスタは更新された内部状態を保持する。暗号化部１３は、非線形処理器３００で生成されたキーストリームと、外部から入力された平文とを排他的論理和演算することにより、暗号文を出力する。
【００９５】
したがって、本応用例のストリーム暗号化装置１は、非線形処理器３００を用いて構築されたことから、暗号化処理中の値をマスクするための乱数を生成する回路を別途備えることなく、暗号を安全に実行することが可能な暗号化装置を構成することができる。また、処理速度や消費電力等への影響が少なく、ＩＣカード等のデバイスへの実装が可能な暗号化装置を構成することができる。
【００９６】
＜第２の応用例＞
本応用例に係るストリーム暗号の復号装置２は、図６に示すように、初期化処理部１１と、非線形処理器３００と、内部状態更新部１２と、復号部１４とから構成されている。なお、非線形処理器３００については、上記にて説明したため、詳細な説明は省略する。
【００９７】
初期化処理部１１は、秘密鍵と初期ベクトルとに基づいて、ストリーム暗号の内部状態を初期化し、フィードバックシフトレジスタ（ＦＳＲ−Ａ１００ａおよびＦＳＲ−Ｂ１００ｂ）は初期化された内部状態を保持する。具体的には、初期化処理部１１は、内蔵のキースケジュールアルゴリズムによるストリーム暗号の内部状態（擬似乱数）を決定し、決定した内部状態をフィードバックレジスタに入力した後、複数回空廻しを行うことにより、初期化された内部状態を保持する。内部状態更新部１２は、非線形処理器３００がキーストリーム出力時に内部状態を一方向性関数等で更新し、フィードバックシフトレジスタは更新された内部状態を保持する。復号部１４は、非線形処理器３００で生成されたキーストリームと、外部から入力された暗号文とを排他的論理和演算することにより、平文を出力する。
【００９８】
したがって、本応用例のストリーム復号装置２は、非線形処理器３００を用いて構築されたことから、復号処理中の値をマスクするための乱数を生成する回路を別途備えることなく、暗号を安全に実行することが可能な復号装置を構成することができる。また、処理速度や消費電力等への影響が少なく、ＩＣカード等のデバイスへの実装が可能な復号装置を構成することができる。
【００９９】
＜第２の実施形態＞
図７から図１２を用いて、本発明の第２の実施形態について説明する。
【０１００】
＜ストリーム暗号の暗号化装置の概略構成＞
図７および図８を用いて、本実施形態に係るストリーム暗号の暗号化装置の概略構成について説明する。
【０１０１】
本実施形態に係るストリーム暗号の暗号化装置は、図７に示すように、鍵拡張部１１００と、フリップフロップ１２００と、非線形処理部１３００と、排他的論理和演算器１４００とから構成されている。
【０１０２】
鍵拡張部１１００は、初期鍵を入力して拡張鍵を生成する。フリップフロップ１２００は、切替素子であり、具体的には、初期処理状態においては、鍵拡張部１１００において、生成された拡張鍵を非線形処理部１３００に入力するように作用し、初期処理終了後には、非線形処理部１３００からのフィードバック値を非線形処理部１３００内の図示しないレジスタに入力するよう作用する。
【０１０３】
非線形処理部１３００は、図８に示すように、複数の非線形素子からなり、非線形処理を並列的に実行し、鍵系列を出力する。排他的論理和演算器１４００は、非線形処理部１３００から出力される鍵系列と入力される平文との排他的論理和演算を実行し、暗号文を生成する。なお、本実施形態では、鍵拡張部１１００を備えた構成を説明したが、鍵拡張部１１００を設けず、予め拡張鍵を用意しておいてもよい。
【０１０４】
＜非線形処理部の構成＞
図９および図１０を用いて、本実施形態に係るストリーム暗号の暗号化装置内の非線形処理部の構成について説明する。なお、図９は、加算処理を２重化した場合の構成図であり、図１０は、加算処理を３重化した場合の構成図である。
【０１０５】
図９に示すように、本実施形態に係るストリーム暗号の暗号化装置内の非線形処理部は、レジスタ１３１０と、加算器１３２１、１３２７、１３３１、１３４１、１３４７、１３５１と、内部メモリ１３２２、１３２４、１３２６、１３３２、１３４２、１３４４、１３４６、１３５２と、非線形関数器１３２３、１３２５、１３４３、１３４５と、セレクタ１３３３、１３５３とから構成されている。
【０１０６】
ここで、レジスタ１３１０は、フィードバックシフトレジスタが好ましい。加算器１３２１は、レジスタ１３１０と内部メモリ１３２４に接続され、この加算値を内部メモリ１３２２に格納する。加算器１３３１は、レジスタ１３１０と非線形関数器１３２５の出力に接続され、この加算値を内部メモリ１３３２に格納する。セレクタ１３３３は、内部メモリ１３２２と内部メモリ１３３２に接続され、いずれかの値を選択する。そして選択した値を非線形関数器１３２３に出力する。
【０１０７】
非線形関数器１３２３は、演算結果を内部メモリ１３４６に格納し、格納した値は、排他的論理和演算器１３４８および非線形関数器１３４５に出力される。非線形関数器１３４５は、演算結果を内部メモリ１３４４および加算器１３５１に出力する。内部メモリ１３４４に格納した値は、加算器１３４７に出力される。加算器１３４７は、レジスタ１３１０からの値と内部メモリ１３４４に格納した値とを加算し、その演算結果を排他的論理和演算器１３４８に出力する。排他的論理和演算器１３４８は、その演算結果である鍵系列を排他的論理和演算器１３４９に出力し、排他的論理和演算器１３４９は、この鍵系列と入力される平文の排他的論理和演算を行って暗号文を出力する。
【０１０８】
一方、非線形関数器１３４５の演算結果は、加算器１３５１に供給される。加算器１３５１は、レジスタ１３１０からの値と非線形関数器１３４５からの演算結果とを加算して内部メモリ１３５２に格納する。また、内部メモリ１３４４に格納された値は、加算器１３４１に供給され、加算器１３４１は、レジスタ１３１０からの値とを加算して、その値を内部メモリ１３４２に格納する。セレクタ１３５３は、内部メモリ１３５２および１３４２から値を読み出して、いずれかの値を選択して、非線形関数器１３４３に出力する。
【０１０９】
非線形関数器１３４３は、演算結果を内部メモリ１３２６に格納する。内部メモリ１３２６に格納された値は、排他的論理和演算器１３２８および非線形関数器１３２５に供給される。非線形関数器１３２５は、演算結果を内部メモリ１３２４に格納するとともに、加算器１３３１に出力する。
【０１１０】
内部メモリ１３２４に格納された値は、加算器１３２１および加算器１３２７に供給される。加算器１３２７は、内部メモリ１３２４に格納された値とレジスタ１３１０からの値とを加算して、排他的論理和演算器１３２８に、その値を出力する。排他的論理和演算器１３２８は、加算器１３２７からの値と、内部メモリ１３２６の値との排他的論理和演算を行い、鍵系列を生成して、排他的論理和演算器１３２９に出力する。排他的論理和演算器１３２９は、鍵系列と平文を入力し、これらの排他的論理和演算を行うことにより暗号文を出力する。
【０１１１】
なお、図中、一点鎖線で囲んだブロックが多重化のために新たに設けられたブロックであり、多重化に伴い、１クロック後と２クロック後のレジスタの値が必要となるため、それぞれ該当する部分からレジスタの値を取得している。
【０１１２】
図１０に示すように、本実施形態に係るストリーム暗号の暗号化装置内の非線形処理部は、レジスタ１５１０、１５１１と、加算器１５２１、１５２７、１５３１、１５３４、１５４１、１５４７、１５５１、１５５４と、内部メモリ１５２２、１５２４、１５２６、１５３２、１５３５、１５４２、１５４４、１５４６、１５５２、１５５５と、非線形関数器１５２３、１５２５、１５３６、１５４３、１５４５、１５５６と、セレクタ１５３３、１５５３とから構成されている。
【０１１３】
ここで、レジスタ１５１０は、フィードバックシフトレジスタが好ましい。加算器１５２１は、レジスタ１５１０と内部メモリ１５２４に接続され、この加算値を内部メモリ１５２２に格納する。加算器１５３１は、レジスタ１５１０と非線形関数器１５２５の出力に接続され、この加算値を内部メモリ１５３２に格納する。また、加算器１５３４は、レジスタ１５１１と非線形関数器１５３６とに接続され、この加算値を内部メモリ１５３５に格納する。セレクタ１５３３は、内部メモリ１５２２、１５３２、１５３５に接続され、いずれかの値を選択する。そして選択した値を非線形関数器１５２３に出力する。
【０１１４】
非線形関数器１５２３は、演算結果を内部メモリ１５４６に格納するとともに、非線形関数記１５５６に出力する。格納した値は、排他的論理和演算器１５４８および非線形関数器１５４５に出力される。非線形関数器１５４５は、演算結果を内部メモリ１５４４および加算器１５５１に出力する。内部メモリ１５４４に格納した値は、加算器１５４７に出力される。加算器１５４７は、レジスタ１５１０からの値と内部メモリ１５４４に格納した値とを加算し、その演算結果を排他的論理和演算器１５４８に出力する。排他的論理和演算器１５４８は、その演算結果である鍵系列を排他的論理和演算器１５４９に出力し、排他的論理和演算器１５４９は、この鍵系列と入力される平文の排他的論理和演算を行って暗号文を出力する。
【０１１５】
一方、非線形関数器１５４５の演算結果は、加算器１５５１に供給される。加算器１５５１は、レジスタ１５１０からの値と非線形関数器１５４５からの演算結果とを加算して内部メモリ１５５２に格納する。また、内部メモリ１５４４に格納された値は、加算器１５４１に供給され、加算器１５４１は、レジスタ１５１０からの値とを加算して、その値を内部メモリ１５４２に格納する。さらに、加算器１５５４は、非線形関数器１５５６の演算結果とレジスタ１５１０からの値を加算して、内部メモリ１５５５に格納する。セレクタ１５５３は、内部メモリ１５５２、１５４２、１５５５から値を読み出して、いずれかの値を選択して、非線形関数器１５４３に出力する。
【０１１６】
非線形関数器１５４３は、演算結果を内部メモリ１５２６に格納するとともに、非線形関数器１５３６に出力する。内部メモリ１５２６に格納された値は、排他的論理和演算器１５２８および非線形関数器１５２５に供給される。非線形関数器１５２５は、演算結果を内部メモリ１５２４に格納するとともに、加算器１５３１に出力する。
【０１１７】
内部メモリ１５２４に格納された値は、加算器１５２１および加算器１５２７に供給される。加算器１５２７は、内部メモリ１５２４に格納された値とレジスタ１５１０からの値とを加算して、排他的論理和演算器１５２８に、その値を出力する。排他的論理和演算器１５２８は、加算器１５２７からの値と、内部メモリ１５２６の値との排他的論理和演算を行い、鍵系列を生成して、排他的論理和演算器１５２９に出力する。排他的論理和演算器１５２９は、鍵系列と平文を入力し、これらの排他的論理和演算を行うことにより暗号文を出力する。
【０１１８】
なお、図中、一点鎖線で囲んだブロックが多重化のために新たに設けられたブロックであり、多重化に伴い、１クロック後と２クロック後のレジスタの値が必要となるため、それぞれ該当する部分からレジスタの値を取得している。また、図１０に示す３重化では、１クロック後のレジスタ１５１０のフィードバック値が必要になるためこれを格納するレジスタ１５１１を用意する。なお、加算処理を多重化した非線形部を更に多重化することで、さらなる高速化も可能である。
【０１１９】
＜ストリーム暗号の暗号化装置の処理＞
図１１を用いて、本実施形態に係るストリーム暗号の暗号化装置の処理について説明する。
【０１２０】
まず、鍵拡張部１１００が、初期鍵を拡張して拡張鍵を生成し（ステップＳ１１０１）、初期化処理において、生成した拡張鍵と初期値とを入力し、初期化処理を行う（ステップＳ１１０２）。
【０１２１】
そして、初期化処理終了後に、非線形処理部１３００からのフィードバック値を入力し、非線形処理を並列に処理するとともに、非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持して処理し、鍵系列を生成し（ステップＳ１１０３）、生成された鍵系列と平文の排他的論理和演算を行い暗号文を生成する（ステップＳ１１０４）。
【０１２２】
以上、説明したように、本実施形態によれば、データ遅延量が最大となっているパスにフリップフロップを追加し、そのパスを分割すれば動作クロックが向上し、高速化が可能である。非線形部の一部の処理を多重化することで高速化が可能である。また、多重化した非線形部全体を更に多重化による高速化も可能である。また、従来は、同一の回路で実行されていた初期化処理と鍵ストリーム生成処理をそれぞれ別の回路で実行することによって、鍵系列生成時に鍵拡張処理を行う必要がなくなり、高速化を実現できる。
【０１２３】
＜第３の実施形態＞
図１２から図１５を用いて、本発明の第３の実施形態について説明する。
【０１２４】
＜ストリーム暗号の復号化装置の概略構成＞
本実施形態に係るストリーム暗号の復号化装置は、図１２に示すように、鍵拡張部１１００と、フリップフロップ１２００と、非線形処理部１３００と、排他的論理和演算器１４００とから構成されている。なお、第２の実施形態と同一の符号を付す構成要素については、同様の機能を有することから、その詳細な説明は、省略する。つまり、本実施形態に係るストリーム暗号の復号化装置の構成は、第２の実施形態に係るストリーム暗号の暗号化装置の構成と同様であり、排他的論理和演算器１４００に、暗号文を入力して、平文を得る点のみが異なる。
【０１２５】
＜非線形処理部の構成＞
図１３および図１４を用いて、本実施形態に係るストリーム暗号の復号化装置内の非線形処理部の構成について説明する。なお、図１３は、加算処理を２重化した場合の構成図であり、図１４は、加算処理を３重化した場合の構成図である。
【０１２６】
図１３に示すように、本実施形態に係るストリーム暗号の復号化装置内の非線形処理部は、レジスタ１３１０と、加算器１３２１、１３２７、１３３１、１３４１、１３４７、１３５１と、内部メモリ１３２２、１３２４、１３２６、１３３２、１３４２、１３４４、１３４６、１３５２と、非線形関数器１３２３、１３２５、１３４３、１３４５と、セレクタ１３３３、１３５３とから構成されている。
【０１２７】
また、図１４に示すように、本実施形態に係るストリーム暗号の復号化装置内の非線形処理部は、レジスタ１５１０、１５１１と、加算器１５２１、１５２７、１５３１、１５３４、１５４１、１５４７、１５５１、１５５４と、内部メモリ１５２２、１５２４、１５２６、１５３２、１５３５、１５４２、１５４４、１５４６、１５５２、１５５５と、非線形関数器１５２３、１５２５、１５３６、１５４３、１５４５、１５５６と、セレクタ１５３３、１５５３とから構成されている。
【０１２８】
ここで、第２の実施形態と同一の符号を付す構成要素については、同様の機能を有することから、その詳細な説明は、省略する。つまり、本実施形態に係るストリーム暗号の復号化装置の構成は、第２の実施形態に係るストリーム暗号の暗号化装置の構成と同様であり、排他的論理和演算器１３２９、１３４９、１５２９、１５４９に、暗号文を入力して、平文を得る点のみが異なる。
【０１２９】
＜ストリーム暗号の復号化装置の処理＞
図１５を用いて、本実施形態に係るストリーム暗号の復号化装置の処理について説明する。
【０１３０】
まず、鍵拡張部１１００が、初期鍵を拡張して拡張鍵を生成し（ステップＳ１２０１）、初期化処理において、生成した拡張鍵と初期値とを入力し、初期化処理を行う（ステップＳ１２０２）。
【０１３１】
そして、初期化処理終了後に、非線形処理部１３００からのフィードバック値を入力し、非線形処理を並列に処理するとともに、非線形関数が、並べ替え処理およびフィードバック値を得るための乗算結果をデータテーブルとして保持して処理し、鍵系列を生成し（ステップＳ１２０３）、生成された鍵系列と暗号文の排他的論理和演算を行い平文を生成する（ステップＳ１２０４）。
【０１３２】
以上、説明したように、本実施形態によれば、データ遅延量が最大となっているパスにフリップフロップを追加し、そのパスを分割すれば動作クロックが向上し、高速化が可能である。非線形部の一部の処理を多重化することで高速化が可能である。また、多重化した非線形部全体を更に多重化による高速化も可能である。また、従来は、同一の回路で実行されていた初期化処理と鍵ストリーム生成処理をそれぞれ別の回路で実行することによって、鍵系列生成時に鍵拡張処理を行う必要がなくなり、高速化を実現できる。
【０１３３】
なお、ストリーム暗号の暗号化装置およびストリーム暗号の復号化装置の処理をコンピュータ読み取り可能な記録媒体に記録し、この記録媒体に記録されたプログラムをストリーム暗号の暗号化装置およびストリーム暗号の復号化装置に読み込ませ、実行することによって本発明のストリーム暗号の暗号化装置およびストリーム暗号の復号化装置を実現することができる。ここでいうコンピュータシステムとは、ＯＳや周辺装置等のハードウェアを含む。
【０１３４】
また、「コンピュータシステム」は、ＷＷＷ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）システムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されても良い。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。
【０１３５】
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【０１３６】
以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【０１３７】
１    暗号化装置
２    復号装置
１０  擬似乱数生成器
１１  初期化処理部
１２  内部状態更新部
１３  暗号化部
１４  復号部
１００ａ、１００ｂ  フィードバックシフトレジスタ
２００  クロック制御装置
３００  非線形処理器
３０１ａ、３０１ｂ、３０１ｃ、３０１ｄ  加算器
３０２ａ、３０２ｂ、３０２ｃ、３０２ｄ、３０３ａ、３０３ｂ  排他的論理演算器
３１０、３１１、３１２、３１３  内部レジスタ（Ｌ１、Ｌ２、Ｒ１、Ｒ２）
３２０ａ、３２０ｂ、３２０ｃ、３２０ｄ  非線形置換器（Ｓｕｂ）
１１００；鍵拡張部
１２００；フリップフロップ
１３００；非線形処理部
１３１０；レジスタ
１３２１；加算器
１３２７；加算器
１３３１；加算器
１３４１：加算器
１３４７；加算器
１３５１；加算器
１３２２；内部メモリ
１３２４；内部メモリ
１３２６；内部メモリ
１３３２；内部メモリ
１３４２；内部メモリ
１３４４；内部メモリ
１３４６；内部メモリ
１３５２；内部メモリ
１３２３；非線形関数器
１３２５；非線形関数器
１３４３；非線形関数器
１３４５；非線形関数器
１３３３；セレクタ
１３５３；セレクタ
１４００；排他的論理和演算器
１５２１；加算器
１５２７；加算器
１５３１；加算器
１５３４；加算器
１５４１：加算器
１５４７；加算器
１５５１；加算器
１５５４；加算器
１５２２；内部メモリ
１５２４；内部メモリ
１５２６；内部メモリ
１５３２；内部メモリ
１５３５；内部メモリ
１５４２；内部メモリ
１５４４；内部メモリ
１５４６；内部メモリ
１５５２；内部メモリ
１５５５；内部メモリ
１５２３；非線形関数器
１５２５；非線形関数器
１５３６；非線形関数器
１５４３；非線形関数器
１５４５；非線形関数器
１５５６；非線形関数器
１５３３；セレクタ
１５５３；セレクタ
【図１】
0006042820.tif 000002
【図２】
0006042820.tif 000003
【図３】
0006042820.tif 000004
【図４】
0006042820.tif 000005
【図５】
0006042820.tif 000006
【図６】
0006042820.tif 000007
【図７】
0006042820.tif 000008
【図８】
0006042820.tif 000009
【図９】
0006042820.tif 000010
【図１０】
0006042820.tif 000011
【図１１】
0006042820.tif 000012
【図１２】
0006042820.tif 000013
【図１３】
0006042820.tif 000014
【図１４】
0006042820.tif 000015
【図１５】
0006042820.tif 000016