(57)【要約】【解決手段】Advanced Encryption Standard（ＡＥＳ）暗号は、リバースエンジニアが計算のあらゆる局面を精査したとしても暗号鍵の秘匿性が保たれるように行うことができる。方法は、非標準表現された鍵をロードすることを含むことができる。該方法はまた、少なくとも３つの第１タイプのラウンド及び複数の第２タイプのラウンドにおいて、データに関して鍵を処理することを含むことができる。データに関して鍵を処理することは、鍵を用いてデータを暗号化すること又は鍵を用いてデータを復号化することを含むことができる。第１タイプのラウンドは、出力におけるビットチャンネルの順序が、入力における対応するビットチャンネルの順序を維持するように構成することができる。第２タイプのラウンドは、出力におけるビットチャンネルの順序が、入力における対応するビットチャンネルの順序と異なるように構成することができる。【選択図】  図６
2018514816.tif 000002
【特許請求の範囲】
【請求項１】
非標準表現された鍵をロードすることと、
少なくとも３つの第１タイプのラウンド及び複数の第２タイプのラウンドにおいて、データに関して前記鍵を処理することと、
を含む方法であって、
データに関して前記鍵を処理することは、前記鍵を用いて前記データを暗号化すること又は前記鍵を用いて前記データを復号化することを含み、
前記第１タイプのラウンドは、出力におけるビットチャンネルの順序が、入力における対応するビットチャンネルの順序を維持するように構成され、
前記第２タイプのラウンドは、出力におけるビットチャンネルの順序が、入力における対応するビットチャンネルの順序とは異なるように構成されている、方法。
【請求項２】
前記第２タイプのラウンドと前記第１タイプのラウンドの少なくとも１つは、対称ブロック暗号に従って暗号化又は復号化を行うように構成されている、請求項１記載の方法。
【請求項３】
前記第２タイプのラウンドと前記第１タイプのラウンドの少なくとも１つは、アドバンストエンクリプションスタンダード規格に従って暗号化又は復号化を行うように構成されている、請求項１記載の方法。
【請求項４】
前記鍵をロードすることは、前記鍵と非線形の関係にあるバイト列をロードすることを含む、請求項１記載の方法。
【請求項５】
前記処理することは、１２８ビットの入力を、隣接する信号を各々含む１６個の８ビットのチャンネルに分割することを含む、請求項１記載の方法。
【請求項６】
前記処理することは、更に、各チャンネルを独立したルックアップテーブルにルーティングすることを含む、請求項１記載の方法。
【請求項７】
前記処理することは、前記第１の第１タイプのラウンドに第１のルックアップテーブルを使用し、前記第２の第１タイプのラウンドに第２のルックアップテーブルを使用する、請求項１記載の方法。
【請求項８】
前記処理することは、前記第１の第１タイプのラウンドにルックアップテーブルの第１の集合を使用し、前記第２の第１タイプのラウンドにルックアップテーブルの第２の集合を使用する、請求項１記載の方法。
【請求項９】
前記処理することは、排他的論理和部において、ルックアップテーブルの少なくとも３２ビットの出力をラウンド鍵の３２ビットのセグメントと組合せて、少なくとも３２ビットの出力を行う、請求項１記載の方法。
【請求項１０】
前記非標準表現は、３０個の８次既約多項式を法とし、ＧＦ（２）の要素を係数とする多項式により定義される体への同型マッピングを含む代替表現から選択される、請求項１記載の方法。
【請求項１１】
前記非標準表現は、ＧＦ（２）の要素を係数とする任意の多項式の加数を適用する、請求項１記載の方法。
【請求項１２】
前記第１の第１タイプのラウンドの出力におけるｉ番目の８ビットのセグメントの第１の表現は、前記第２の第１タイプのラウンドの出力におけるｉ番目の８ビットのセグメントの第２の表現と異なる、請求項１記載の方法。
【請求項１３】
部分関数の合成を実現するようにルックアップテーブルが構成され、前記部分関数は、標準表現と非標準表現とのマッピングと、任意の関数とを含む、請求項１記載の方法。
【請求項１４】
前記非標準表現は、任意のビット単位の転置を適用する、請求項１記載の方法。
【請求項１５】
入力に設けられた第１の第１タイプのラウンド部と、
前記第１の第１タイプのラウンド部に動作的に接続された第２の第１タイプのラウンド部と、
前記第２の第１タイプのラウンド部に動作的に接続された複数の第２タイプのラウンド部と、
前記複数の第２タイプのラウンド部の少なくとも１つに動作的に接続されるとともに、前記入力に与えられるデータに基づく出力を行うように構成された第３の第１タイプのラウンド部と、
を備えた装置であって、
前記第１タイプのラウンドは、出力におけるビットチャンネルの順序が、入力における対応するビットチャンネルの順序を維持するように構成され、
前記第２タイプのラウンドは、出力におけるビットチャンネルの順序が、入力における対応するビットチャンネルの順序とは異なるように構成されている、装置。
【請求項１６】
前記第１の第１タイプのラウンド部と、前記第２の第１タイプのラウンド部と、前記複数の第２タイプのラウンド部と、前記第３の第１タイプのラウンド部は、完全にパイプライン化された構成で配置されている、請求項１５記載の装置。
【請求項１７】
第１の第１タイプのラウンド部と前記第２の第１タイプのラウンド部との間に第１のレジスタが設けられ、前記第２の第１タイプのラウンド部と前記複数の第２タイプのラウンド部との間に第２のレジスタが設けられ、前記複数の第２タイプのラウンド部と前記第３の第１タイプのラウンド部との間に第３のレジスタが設けられている、請求項１６記載の装置。
【請求項１８】
前記第１レジスタ、第２レジスタ及び第３レジスタは、共通のクロックを共有する、請求項１７記載の装置。
【請求項１９】
前記複数の第２タイプのラウンド部のうち、隣接する第２タイプのラウンド部の各対の間に追加のレジスタが設けられている、請求項１７記載の装置。
【請求項２０】
前記第１の第１タイプのラウンド部と、前記第２の第１タイプのラウンド部と、前記複数の第２タイプのラウンド部と、前記第３の第１タイプのラウンド部は、非同期的にチェーン接続されている、請求項１５記載の装置。
【請求項２１】
前記複数の第２タイプのラウンド部と、前記第１タイプのラウンドの少なくとも１つは、対称ブロック暗号に従って暗号化又は復号化を行うように構成されている、請求項１５記載の装置。
【請求項２２】
前記複数の第２タイプのラウンド部と、前記第１タイプのラウンドの少なくとも１つは、アドバンストエンクリプションスタンダード規格に従って暗号化又は復号化を行うように構成されている、請求項１５記載の装置。
【請求項２３】
前記第１の第１タイプのラウンド部は、非標準表現で表現された鍵の少なくとも一部を受信するように構成されている、請求項１５記載の装置。
【請求項２４】
前記非標準表現は、３０個の８次既約多項式を法とし、ＧＦ（２）の要素を係数とする多項式により定義される体への同型マッピングを含む代替表現から選択される、請求項２３記載の装置。
【請求項２５】
前記非標準表現は、ＧＦ（２）の要素を係数とする任意の多項式の加数を適用する、請求項２３記載の装置。
【請求項２６】
前記非標準表現は、任意のビット単位の転置を適用する、請求項２３記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願の相互参照］
本出願は、参照によりその全体が本明細書に援用される２０１５年４月２０日出願の米国仮特許出願第６２／１４９，８５５号の関連出願であり、この仮出願の利益及び優先権を主張する。
【０００２】
［技術分野］
Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ（ＡＥＳ：アドバンストエンクリプションスタンダード）暗号は、リバースエンジニアが計算のあらゆる局面を精査したとしても暗号鍵の秘匿性が保たれるように行うことができる。
【背景技術】
【０００３】
Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ（ＡＥＳ）は、高度の秘匿性を提供すると考えられる対称ブロック暗号である。こうした主張は、アメリカ国立標準技術研究所（ＮＩＳＴ：Ｎａｔｉｏｎａｌ  Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｓｃｉｅｎｃｅ  ａｎｄ  Ｔｅｃｈｎｏｌｏｇｙ）Ｓｕｉｔｅ  Ｂ暗号規格のすべての対称ブロック及びストリーム暗号の基礎としてＡＥＳが含まれることによって裏付けられる。
【０００４】
あらゆる暗号プリミティブと同様、ＡＥＳプリミティブは、ＡＥＳ演算がプライベートに行われ、攻撃者にはプリミティブの入出力以外は観測可能ではないとの前提に基づいて設計されている。こうした計算中のプライバシーという前提は、既成のあらゆる暗号の設計において採られているものである。残念ながら、このようなプライベートなソフトウェアの実行場所はほとんど存在せず、安全と考えられるネットワークサーバを脅かす脆弱性は頻繁に見つかっており（ごく最近では、ＯｐｅｎＳＳＬの「ハートブリード（Ｈｅａｒｔｂｌｅｅｄ）」）、物理的なデバイスについては、アマチュア愛好家やセキュリティ分野の研究者、競合他社が、多くの場合高価なリバースエンジニアリング技術やツールを驚くほど利用して、日常的にリバースエンジニアリングを行っている。
【０００５】
例えば、従来のＡＥＳ実装の計算を監視するリバースエンジニアであれば、ＡＥＳの鍵スケジュールを組み立てるためにメモリへ鍵をロードすることが分かる。リバースエンジニアは、単にメモリから鍵を抽出した後、暗号化／復号化を行ったり、セキュアなセッションを傍受したり、自らがあたかも不正アクセスしたサーバやデバイスの真正バージョンであるかのようにデジタル署名を偽造したりすることができる。
【０００６】
上述の問題への対処を試みる「ホワイトボックス」のＡＥＳ実装が公開されることは多くないが、その理由は、そうした公開が不正アクセスにつながると思われるからである。Ｃｌｏａｋｗａｒｅ社のＣｈｏｗとＥｉｓｅｎによるホワイトボックスの暗号設計が公開されたのは、学術文献の中だったと思われる。Ｉｎｔｅｒｔｒｕｓｔ社によるホワイトボックスのＡＥＳ実装は、従来のＡＥＳ実装をマルチチャンネルの有限状態オートマトンのソースコードに変形したものに基づいている。こうした「ホワイトボックス」技術は、研究者の間では、元の暗号を難読化した変種と捉えるのが一般的である。
【０００７】
加えて、特に鍵を使用する直前にソースマテリアルから再構成する場合は、一般的なリバースエンジニアリングに対するプロテクトを標準的な暗号実装に適用することで、鍵マテリアルをセキュアにすることができる。改竄に対するプロテクトに加えて、命令の書き換えや基本ブロックのシャッフリング、人為的なパス合成をはじめとする機械語レベルでの難読化を任意のソフトウェアに追加することができる。複数の言語及びプラットホーム専用のツールでも、同様の機械語レベルでの難読化を行うことができる。機械語の自動難読化技術は、パフォーマンスに影響を与えるのが一般的であり、ソフトウェア実装に限定されるのが一般的である。
【０００８】
鍵を保護するには、他にも、セキュアプロセッサやハードウェアセキュリティモジュール（ＨＳＭ：Ｈａｒｄｗａｒｅ  Ｓｅｃｕｒｉｔｙ  Ｍｏｄｕｌｅ）上で暗号化を行う方法がある。このアプローチは、サーバハードウェアにしか適用できないのが一般的である。例えば、デジタルコンテンツの平均的な消費者が、家庭でコンテンツを使用するデバイスにＨＳＭをインストールすることは期待できない。ＨＳＭは、高コストであるとともに、暗号規格やハードウェア技術の変化に伴ってその価値を減ずるものである。セキュアプロセッサやＨＳＭもまた上述のようなアマチュア愛好家や研究者、競合他社にさらされるため、潜在的にハードウェア投資がセキュアでなくなる可能性があり、その対策の目処は立っていない。
【０００９】
これに関連して、各デバイスを、チップレベル・基板レベル・デバイスレベル又は部品レベルでセキュリティエンクロージャに封入する方法がある。このアプローチは一般にコストが掛かるが、それは当該デバイスに合わせてセキュリティエンクロージャを特注しなければならないのが一般的だからである。こうした物理的なセキュリティには、壊れやすいという副作用があるため、このアプローチでは、輸送や現場でのメンテナンス、返品サポート等、物流面での問題が発生する。
【００１０】
このように、従来の暗号がセキュリティ上価値のあるツールであることの裏付けは、実際には実現し得ない前提に掛かっていると考えられる。一方、こうしたセキュリティを提供しようとすると、パフォーマンスの低下や、実装範囲の限定につながってしまう。
【発明の概要】
【００１１】
ある実施形態では、方法は、非標準表現された鍵をロードすることを含むことができる。該方法はまた、少なくとも３つの第１タイプのラウンド及び複数の第２タイプのラウンドにおいて、データに関して鍵を処理することを含むことができる。データに関して鍵を処理することは、鍵を用いてデータを暗号化すること又は鍵を用いてデータを復号化することを含むことができる。第１タイプのラウンドは、出力におけるビットチャンネルの順序が、入力における対応するビットチャンネルの順序を維持するように構成することができる。第２タイプのラウンドは、出力におけるビットチャンネルの順序が、入力における対応するビットチャンネルの順序と異なるように構成することができる。
【００１２】
ある実施形態では、装置は、入力に設けられた第１の第１タイプのラウンド部を含むことができる。該装置はまた、第１の第１タイプのラウンド部に動作的に接続された第２の第１タイプのラウンド部を含むことができる。該装置は、第２の第１タイプのラウンド部に動作的に接続された複数の第２タイプのラウンド部を更に含むことができる。該装置は、複数の第２タイプのラウンド部の少なくとも１つに動作的に接続されるとともに、入力に与えられるデータに基づく出力を行うように構成された第３の第１タイプのラウンド部を更に含むことができる。第１タイプのラウンドは、出力におけるビットチャンネルの順序が、入力におけるビットチャンネルの順序を維持するように構成することができる。第２タイプのラウンドは、出力におけるビットチャンネルの順序が、入力におけるビットチャンネルの順序と異なるように構成することができる。
【００１３】
発明の正しい理解を図るため、添付の図面を参照されたい。
【図面の簡単な説明】
【００１４】
【図１】図１は、本発明のある実施形態に係るラウンド部機能の外部インターフェースを示す。
【図２】図２は、本発明のある実施形態に係る完全にパイプライン化された構成を示す。
【図３】図３は、本発明のある実施形態に係る「非転置ラウンド部」を示す。
【図４】図４は、本発明のある実施形態に係るＡＥＳ暗号化に合致する「転置ラウンド部」を示す。
【図５】図５は、本発明のある実施形態に係るＡＥＳ復号化に合致する「逆転置ラウンド部」を示す。
【図６】図６は、本発明のある実施形態に係る方法を示す。
【発明を実施するための形態】
【００１５】
本発明のある実施形態では、Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ（ＡＥＳ）暗号化を、リバースエンジニアが計算のあらゆる局面を精査したとしても暗号鍵の秘匿性が保たれるように行うことができる。例えば、ある実施形態では、計算中のプライバシーという基本的な前提が破られた場合であっても、暗号鍵の秘匿性を守ることができる。この方法は、ＡＥＳを実装するデバイスが攻撃者の手に渡る可能性があるすべての場合に有用であってよい。従ってこの方法は例えば、防衛、デジタル著作権管理（ＤＲＭ：Ｄｉｇｉｔａｌ  Ｒｉｇｈｔｓ  Ｍａｎａｇｅｍｅｎｔ）、配布したエンドユーザアプリケーションのアップデートプロセスの保護等の用途に適用可能であってよい。
【００１６】
本発明のある実施形態では、ＡＥＳ演算はプライベートで行わなければならないとする要件が撤廃されるか、又は少なくともこうしたプライバシー要件に反した場合の影響がきわめて小さくなる。すなわち、ある実施形態では、従来の鍵表現を用いることなくＡＥＳを行う方法を提供する。本発明のある実施形態に係る鍵表現は、従来の表現への再変換が難しいため、リバースエンジニアリングに対する防衛線を提供する。
【００１７】
本発明のある実施形態に係るＡＥＳ演算法を用いて、リバースエンジニアが鍵を見られないようにしてもよい。リバースエンジニアに対しては、代わりに、鍵と非線形の関係にあるバイト列を見せてもよい。
【００１８】
また、本発明のある実施形態に係るＡＥＳ実装は、リバースエンジニアリング対策であるにもかかわらず高速であってよく、従来のソフトウェアにおけるＡＥＳ実装と同等の性能プロファイルを提供してもよい。
【００１９】
本発明のある実施形態は、３つ以上の「非転置ラウンド部」と呼ばれる組合せ論理回路と、複数の「転置ラウンド部」と呼ばれる組合せ論理回路と、ラウンド部の動作を調節するレジスタ群及びクロック論理と、ラウンド部内のルックアップテーブル（ＬＵＴ：Ｌｏｏｋ−Ｕｐ−Ｔａｂｌｅ）に配置された特製のデータとを含む。
【００２０】
図１に、本発明のある実施形態に係るラウンド部機能の外部インターフェースを示す。なお、転置及び非転置ラウンド部は同様のインターフェースを用いてもよい。各ラウンド部は、２つの１２８ビットの入力、すなわち入力状態表現と処理対象ラウンドの鍵マテリアルの表現とを受け取ることができる。１２８ビットの出力は、入力の組合せ関数として生成することができ、また、ラウンドを処理した後の暗号状態の表現を含むことができる。状態表現もラウンド鍵表現も、第１のラウンド部への入力状態及び最終ラウンド部における出力状態を除いて、本実装のＡＥＳ仕様に準拠しなくてもよい。
【００２１】
ＡＥＳ実装は、あるラウンド部の出力状態が次のラウンド部の入力状態となるように、ラウンド部をチェーン接続して構築することができる。チェーン接続するラウンド部の総数は、実装するＡＥＳの鍵長に依存してよい。ＡＥＳの鍵長にかかわらず、３つ以上の非転置ラウンド部があってよく、少なくとも２つを初期ラウンドとし、少なくとも１つを最終ラウンドとする。存在する転置ラウンド部の数は、ＡＥＳ鍵長の関数であってよい。例えば、ＡＥＳ−１２８の場合、１０個の転置ラウンド部を用いてよく、ＡＥＳ１９２の場合、１２個の転置ラウンド部を用いてよく、ＡＥＳ−２５６の場合、１４個の転置ラウンド部を用いてよい。
【００２２】
タイミングを考慮して、ラウンド部を非同期的にチェーン接続してもよいし、ラウンド部をパイプライン化してもよい。ここでパイプライン化とは、各ラウンド部間にレジスタを配置してラウンド部をチェーン接続するとともに、クロックによって中間出力の取り込みを制御することを指す。各ラウンド部間にレジスタを挿入した、完全パイプライン化された構成により、最高クロックレートを可能にしてもよい。
【００２３】
図２に、本発明のある実施形態に係る、完全にパイプライン化された構成を示す。より具体的には、図２は、例えば図１に示すようなラウンド部のチェーン接続からなる、完全にパイプライン化されたＡＥＳ構成を示す。図２に示すように、２つの初期非転置ラウンドと、１つの最終非転置ラウンドがあってよい。また、ｎ個の内部転置ラウンドがあってよい。ＡＥＳ−１２８を実装する場合は、上述のように、ｎは１０とすることができる。
【００２４】
非転置及び転置ラウンド部を、それぞれ図３及び図４に示す。図３及び図４に示すように、１２８ビットの入力は、先ず、それぞれ隣接する信号で構成された１６個の８ビットのチャンネルに分割することができる。すなわち、チャンネル０は、入力状態のビット０〜７を含んでよく、チャンネル１は、ビット８〜１５を含んでよい等である。各チャンネルは、独立したルックアップテーブル（ＬＵＴ）にルーティングすることができ、チャンネルの値はＬＵＴから選ぶインデックスとなる。非転置ラウンド部の場合、チャンネルｋをＬＵＴｋにルーティングするようにチャンネルをＬＵＴにルーティングすることができる。転置ラウンド部の場合、例えば表１に示すように入力チャンネルをＬＵＴにルーティングすることができる。ＬＵＴデータを入念に準備することにより、ラウンド部内でもラウンド部同士でもＬＵＴを共有／再利用することができるが、ラウンド部の各コピーで独立したＬＵＴを用いてもよい。
【００２５】
【表１】
2018514816.tif 000003
【００２６】
表１：ＡＥＳ暗号化に合致する転置ラウンド部における、入力チャンネルから制御されたＬＵＴへのマッピング。
【００２７】
計算の次の段階では、ラウンド鍵を４つの３２ビットチャンネルに分割するとともに、各チャンネルを、排他的論理和（ＸＯＲ）を用いて４つのＬＵＴの３２ビット出力と組合せることができる。各ＸＯＲ計算の出力を、出力状態の３２ビットのセグメントとすることができる。よって、ＸＯＲ演算の出力を連結することで、完全な出力状態を生成することができる。
【００２８】
以下、有効なＡＥＳ鍵の所望の秘匿性を維持しつつ、前段回路がＡＥＳ暗号に相当する結果を生成するようにＬＵＴテーブルデータ及び鍵マテリアルデータを構築する技術を説明する。他の技術を用いてもよい。
【００２９】
上述のように、ＦＩＰＳ公報１９７で標準化されたＡｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ（ＡＥＳ）は、１６バイトブロックを用いる対称ブロック暗号であり、入力、出力及び作業状態を、「Ｒｉｊｎｄａｅｌ（ラインダール）体」の元の配列Ｆ＝Ｆ2［ｘ］／＜ｘ8＋ｘ4＋ｘ3＋ｘ＋１＞として扱う。ここでは、単純化のため、Ｆ及びＦ2は、それぞれＲｉｊｎｄａｅｌ体及びＧＦ（２）を示すものとするが、こうした体を表す標準的な方法は他にも存在する。
【００３０】
上述のＦの定義から、Ｆの元は、特定の多項式を法とし、Ｆ2の要素を係数とする多項式（ダミー変数ｘを用いて定義される）であることが分かる。この法は、Ｆの元が７次以下であることを保証するため、Ｆの元はバイトとして表現することができる。係数は、Ｆ2の要素であるため、０又は１で表現可能である。Ｆの元をバイトとして表現する場合、高次の係数をバイトの最上位ビットに割り当て、次の高次の係数を次の最上位ビットに順次割り当てていくことができる。こうした表現を復号化するには、最下位ビットをビット０として、バイト表現した引数のｉ番目ビットを抽出する関数をｂi（・）とすると、［数１］により、多項式の形に再変換することができる。以上が、Ｆの元をバイト表現する標準的な方法であり、このような多項式をバイト形式で表す表記法としては、例えばｘ4＋ｘ3＋ｘ＋１＝｛１ｂ｝のように、１６進数を中括弧で括るのが一般的である。
【００３１】
【数１】
2018514816.tif 000004
【００３２】
Ｆの元の加算は［数２］と表記することができ、係数の加算がＲ又はＺではなくＦ2において行われる点を除き、多項式の一般的な代数加法の規則に則ることができる。Ｆの元の乗算は、［数３］と表記され、通常の多項式の乗法パターンに則ることができるとともに、Ｒｉｊｎｄａｅｌ多項式によるモジュラー簡約を行うことができる（すなわち、Ｒｉｊｎｄａｅｌ多項式で除算して、余りを保持することができる）。加算と同様、係数の計算はすべてＦ2で行われる。Ｆ2における加算は排他的論理和であり、一般に「ビット単位ＸＯＲ」呼ばれる。同様に、Ｆ2における乗算は論理積であり、一般に「ビット単位ＡＮＤ」と呼ばれる。
【００３３】
【数２】
2018514816.tif 000005
【００３４】
【数３】
2018514816.tif 000006
【００３５】
Ｆにおける加算は、実質的には、Ｆ2における独立した加算の集合である。従って、Ｆの項の８個の１ビット係数を１バイトに圧縮することにより、Ｆにおける加算を、こうしたバイト表現同士のビット単位ＸＯＲとして実装することできる。数バイトをより大きな機械語に圧縮することで、Ｆにおける加算をＳｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ（ＳＩＭＤ：シングルインストラクションマルチプルデータ）として実装することを可能にしてもよい。残念ながら、Ｆにおける乗算はより難しく、現在のＣＰＵの多くが実装する２の補数演算に対するこのような便利なマッピングは存在しない。
【００３６】
ＡＥＳは、「ラウンド」を形成するいくつかの操作を含む。ラウンド処理は、使用される鍵長に応じて一定回数繰り返すことができる。鍵を処理して、各ラウンドの処理に対する「鍵スケジュール」と「ラウンド鍵」を生成することができる。ＡＥＳは、作業状態をＦの元の１６次元ベクトルとして保持することができる。ラウンドｒ後の作業状態は、ｗr∈Ｆ16＝＜ｗr,0，ｗr,1，…，ｗr,15＞；ｗr,i∈Ｆと表すことができる。ラウンド鍵も、Ｆの元の１６次元ベクトルであってよい。従って、ｒ番目のラウンドでは、ｋr∈Ｆ16＝＜ｋr,0，ｋr,1，…，ｋr,15＞；ｋr,i∈Ｆとなる。
【００３７】
以下、ＡＥＳラウンド中の操作について説明する。説明の都合上、σ∈Ｆ16＝＜σ0，σ1，…，σ15＞とする。σi∈Ｆは、ＡＥＳラウンド演算内の中間結果を表すダミー引数を表す。
【００３８】
最初の操作では、ラウンド鍵を追加することができる。この操作により、各元に対して現在のラウンドのラウンド鍵の対応する元を加算すること、すなわち［数４］によって、作業中のＡＥＳの状態を更新することができる。ここでは、体の加算演算子を通常の元単位でベクトルに適用することが暗黙的に行われている。
【００３９】
【数４】
2018514816.tif 000007
【００４０】
次の操作では、ｍｉｘ  ｃｏｌｕｍｎｓ及び／又はｉｎｖｅｒｓｅ  ｍｉｘ  ｃｏｌｕｍｎｓステップを適用することができる。この操作により、作業状態を４つの４次元ベクトルに分割し、以下の行列のいずれかをそれぞれ左から掛けることができる。
［数５］  暗号化の場合
［数６］  復号化の場合
【００４１】
【数５】
2018514816.tif 000008
【００４２】
【数６】
2018514816.tif 000009
【００４３】
例えば、ωα（σ）:＝［σα，σα+1，σα+2，σα+3］を用いて位置αから始まる入力ベクトルの連続する４つの元のセグメントを表すと、作業状態はｗr＝［ω0（ｗr），ω4（ｗr），ω8（ｗr），ω12（ｗr）］Tと分割される。作業状態をこのように分割する場合、作業状態の更新は、暗号化の場合はＭｉｘＣｏｌｕｍｎｓ（σ）:＝［Ｍω0（σ），Ｍω4（σ），Ｍω8（σ），Ｍω12（σ）］T、復号化の場合はＩｎｖｅｒｓｅＭｉｘＣｏｌｕｍｎｓ（σ）:＝［Ｍ-1ω0（σ），Ｍ-1ω4（σ），Ｍ-1ω8（σ），Ｍ-1ω12（σ）］Tと計算することができる。
【００４４】
第３の操作では、ｓｈｉｆｔ  ｒｏｗｓ及び／又はｉｎｖｅｒｓｅ  ｓｈｉｆｔ  ｒｏｗｓステップを適用することができる。この操作により、作業状態内の元の順序を転置することができる。ある実装形態では、転置及びその逆転置、すなわちｐ［ｉ］及びｐ-1［ｉ］は、以下のルックアップテーブルとして定義することができる。
【００４５】
【表２】
2018514816.tif 000010
【００４６】
次いで、作業状態の更新を、暗号化の場合はＳｈｉｆｔＲｏｗｓ（σ）:＝［σp[0]，σp[1]，…，σp[15]］T、復号化の場合はＩｎｖｅｒｓｅＳｈｉｆｔＲｏｗｓ（σ）:＝［σp-1[0]，σp-1[1]，…，σp-1[15]］Tとすることができる。
【００４７】
更なる操作として、ｓｕｂ  ｂｙｔｅｓ及び／又はｉｎｖｅｒｓｅ  ｓｕｂ  ｂｙｔｅｓステップを適用することができる。この操作により、暗号化の場合は「Ｓ−ｂｏｘ」、復号化の場合は「逆Ｓ−ｂｏｘ」と呼ばれる転置テーブルを用いて、作業状態を元単位で転置することができる。Ｓ−ｂｏｘ及び逆Ｓ−ｂｏｘの具体的な転置テーブルは、ＦＩＰＳ公報１９７で決定されており、簡単のためここでは省略する。ここで、Ｓ−ｂｏｘをｓ［・］と表し、逆Ｓ−ｂｏｘをｓ-1［・］と表すことができる。作業状態の更新は、暗号化の場合はＳｕｂＢｙｔｅｓ（σ）:＝［ｓ［σ0］，ｓ［σ1］，…，ｓ［σ15］］T、復号化の場合はＩｎｖｅｒｓｅＳｕｂＢｙｔｅｓ（σ）:＝［ｓ-1［σ0］，ｓ-1［σ1］，…，ｓ-1［σ15］］Tと表すことができる。
【００４８】
ＡＥＳラウンドはすべて、上述の操作を用いて構成することができる。初期及び最終ラウンドでは、特定のステップを省略してもよい。特に、暗号化の第１ラウンドは、ＡｄｄＲｏｕｎｄＫｅｙ操作のみを含んでよく、暗号化の最終ラウンドでは、ＭｉｘＣｏｌｕｍｎｓ操作を省略してもよい。対照的に、暗号化の内部ラウンドはいずれも、４つのステップすべてを所定の順序又は別の順序で用いることができる。復号化操作は、同様のシーケンスを用いて、逆操作に置き換え、ＦＩＰＳ１９７に記載のように「Ｅｑｕｉｖａｌｅｎｔ  Ｉｎｖｅｒｓｅ  Ｃｉｐｈｅｒ」に従って行うことができる。
【００４９】
ある実施形態では、ＡＥＳ暗号を操作することができる。例えば、ＡＥＳ暗号では、Ｆにおける乗算を行うステップは、Ｍｉｘ  Ｃｏｌｕｍｎｓ／Ｉｎｖｅｒｓｅ  Ｍｉｘ  Ｃｏｌｕｍｎｓ操作だけであってよい。また、各乗算では、被演算子の１つを｛｛０１｝，｛０２｝，｛０３｝，｛０９｝，｛０ｂ｝，｛０ｄ｝，｛０ｅ｝｝に固定してもよいが、これは仕様によりＭｉｘ  Ｃｏｌｕｍｎｓ行列が固定されていることによる。この結果、事前乗算テーブルを７×２５６＝１，７９２バイトの大きさで効率的に構成できる。行列ベクトル乗算の性質上、行列のある列の各々の値にベクトル被演算子の同じ値が乗算されることに基づき、事前の乗算を更に展開することができる。
【００５０】
従って、事前乗算テーブルには、ある列のすべての要素と作業状態で発生し得るあらゆる可能な要素とを予め乗算した計算結果を格納することができる。こうしたアプローチによりルックアップテーブルの数は減少するが、より大きな空間が必要となる。すなわち、独立した列を８列（各行列から４列）、作業状態における可能な被演算子を２５６個とし、結果が４つの要素を含むとした場合、８×２５６×４＝８，１９２バイトが必要となる。Ｍ及びＭ-1のｉ番目の列をそれぞれＭi及びＭi-1と表記すると、列単位（スカラー・ベクトル）の事前乗算テーブルは、次のように定義できる。
【００５１】
【数７】
2018514816.tif 000011
【００５２】
ここで、β∈［０，３］は列番号であり、αはその列の要素を掛け合わせる体の元を示す。
【００５３】
このような事前乗算テーブルが与えられた場合、Ｍｉｘ  Ｃｏｌｕｍｎｓの状態更新は、以下のように書き直すことができる。
【００５４】
【数８】
2018514816.tif 000012
【００５５】
すなわち、体の乗算は、すべてテーブル参照に置き換えるとともに、その結果を体の加算を介して組合せることができる。同様に、Ｉｎｖｅｒｓｅ  Ｍｉｘ  Ｃｏｌｕｍｎｓの状態更新は、以下のようにすることができる。
【００５６】
【数９】
2018514816.tif 000013
【００５７】
上の説明では暗号化操作を扱ったが、復号化も同様に扱うことができる。ＡＥＳ暗号化を行う場合、典型的なＡＥＳラウンドは、Ｓｕｂ  Ｂｙｔｅｓ、Ｓｈｉｆｔ  Ｒｏｗｓ、Ｍｉｘ  Ｃｏｌｕｍｎｓ、及びＡｄｄ  Ｒｏｕｎｄ  Ｋｅｙからなるシーケンスを用いることができる。上述のように、初期及び最終ラウンドでは、これらのステップのサブセットを用いることができる。
【００５８】
Ｓｕｂ  Ｂｙｔｅｓは、各バイトに対して独立して作用させることができ、Ｓｈｉｆｔ  Ｒｏｗｓ演算は、単にバイトをずらす演算である。従って、これらの操作は、順序を入れ替えても結果に影響はない。それとともに上述の定義を整理することで、典型的な暗号化ラウンドを［数１０］のように表すことができる。
ここで、σは入力状態を表し、ｋはラウンド鍵を表す。この式から、次のようなことが分かる。第１に、ρ及びｓはどちらもテーブル参照とすることができるため、単一のテーブル参照に整理することができることが分かる。さらに、ｓｈｉｆｔ  ｒｏｗ転置ｐ［・］に用いるインデックスはすべて定数とすることができるため、事前に計算できることが分かる。特に、事前乗算テーブルの出力が３２ビットワードに圧縮されるとともに、ラウンド鍵が４つの３２ビットワードでアドレッシングできるように格納されている場合、体の加算はいずれも、３２ビットのＸＯＲ演算に圧縮されたＳＩＭＤとして行うことができる。
【００５９】
【数１０】
2018514816.tif 000014
【００６０】
リバースエンジニアリング対策の一つに、鍵及び中間作業値をすべて非標準的な表現で保持・使用するようにすることがある。例えば、ある実施形態では、レジスタ内の作業状態のどの要素も、ＦＩＰＳ１９７記載のアルゴリズムにより生成される中間値と直接対応しない。
【００６１】
代替表現は、Ｒｉｊｎｄａｅｌ多項式とは異なる任意の８次既約多項式を法とし、Ｆ2の要素を係数とする多項式により定義される体における等価表現への変換とすることができる。これらの体はＲｉｊｎｄａｅｌ体と同型であり、体の加算がビット単位の排他的論理和（ＸＯＲ）であるという特性を保持している。例えば、これらの体における表現の任意のビット転置を可能にしたり（その結果、計８！＊３０＝１，２０９，６００個の表現が可能になる）、任意の７次多項式の加数を用意したりすることにより、表現の数を更に増やすことができる。代替表現は、非標準表現と呼ぶこともできる。
【００６２】
代替表現を、各ラウンド部後段において、作業状態の各８ビットのセグメントに割り当てることができる。例えば、第１ラウンド部後段における作業状態の第１の８ビットセグメントに対して、第２ラウンド部後段における作業状態の第１の８ビットセグメントとは異なる表現を割り当てる等としてもよい。割り当てられた入力表現を予想し、出力表現に応じた結果を生成するように、ＬＵＴの内容を計算することができる。
【００６３】
ラウンドｒ後の作業状態のｉ番目の８ビットセグメントに割り当てられた代替表現に適用する関数をξr,i［・］とし、その逆関数をξr,i-1［・］とする。この場合、古典的暗号におけるラウンドｒ後の作業状態のｉ番目の８ビットセグメントをｗr,iとすると、本発明のある実施形態に係る実装では、代わりにξr,i［ｗr,i］を用いてもよい。暗号の多くは作業状態の３２ビットセグメントを扱うため、ラウンドｒ後の状態のセグメントｉにおける表現から始まる作業状態の連続する４つの８ビットセグメントに対する代替表現の適用は、Ξr,i［・］と表すことができる。すなわち、ベクトルｚ＝［α，β，γ，δ］Tに対して、Ξr,i［ｚ］＝［ξr,i［α］，ξr,i+1［β］，ξr,i+2［γ］，ξr,i+3［δ］］Tである。同様に、逆の操作をΞr,i-1［・］と表すことができる。
【００６４】
この方式では、独立した代替データ表現を、各ラウンドの作業状態の各要素へ割り当てることができる。ＡＥＳ−１２８の場合、１６＊（２＋ｎ）＝１７６個の独立した表現を用いることができる。２つの表現を非転置ラウンド部の出力に用いることができ、ｎ個の表現を転置ラウンド部に用いることができる。最終非転置ラウンド部は、ＦＩＰＳ１９７規格に従って出力を生成することが必要な場合がある。
【００６５】
先述のように、符号化されていない値に対するルックアップテーブルは、次のように定義される。
【００６６】
【数１１】
2018514816.tif 000015
【００６７】
セキュリティ目的を支援するため、ルックアップテーブルを再定義して、代替表現を生成するようにすることができる。こうしたルックアップテーブルの一つとして、［数１２］を定義することができる。この定義では、作業状態のｉ番目の８ビットセグメントに対しては、Ｓｈｉｆｔ  Ｒｏｗｓ及びＳｕｂ  Ｂｙｔｅｓを適用した後、Ｍｉｘ  Ｃｏｌｕｍｎｓ行列の列（ｉ％４）を掛け合わせるという関係を利用している。ここで、「％」は剰余演算子を表す。このように、入力状態内のスカラー被演算子の位置により、その値を行列のどの列に掛け合わせるかが一意に決定される。
【００６８】
【数１２】
2018514816.tif 000016
【００６９】
上述したように、各ラウンド毎に１６個の元を有するラウンド鍵とすることができる。これまでと同様、ｒ番目のラウンドにおけるラウンド鍵のｉ番目の位置をｋr,iとする。作業状態のデータに代替表現を用いる場合、体の加算が不可能とならないように注意が必要となることがある。体の加算は代替表現においてもＸＯＲであるため、体加算演算の被演算子がどちらも同じ代替表現で与えられるようにするだけでよい。したがって、ξr,i［・］を作業状態に割り当てることにより、体の加算をうまく定義するｋr-1,iの代替表現の割り当てが分かる。その結果、ラウンド鍵の代替表現であれば、［数１３］を、［数１４］となるように定義することができる。
【００７０】
【数１３】
2018514816.tif 000017
【００７１】
【数１４】
2018514816.tif 000018
【００７２】
体の加算は代替表現においてもＸＯＲであるため、ラウンド式を、次のような代替表現を出力に生成するように変形されたものに更新してもよい。
【００７３】
【数１５】
2018514816.tif 000019
【００７４】
このようにして、ラウンド関数はラウンド番号と作業状態とによって定めることができ、ラウンド鍵は代替エンコードで与えられると期待することができる。入力状態は、この式の標準表現のままであってもよい。なお、入力状態を非標準表現に適合させてもよい。
【００７５】
作業状態の元ｗr,iを、割り当てられた代替表現に符号化したものを［数１６］とする。ラウンド関数に対する入力状態における代替データ表現をサポートするため、代替表現でデータが得られるようにテーブルのインデックスの順序を変更してもよい。代替表現された入力を受け入れるが、ＦＩＰＳ−１９７で定義される結果を生成するように修正したＳ−ｂｏｘを［数１７］とする。先述のラウンド関数のｓに［数１８］を代入することで、所望の結果を得ることができる。すなわち、［数１９］とすると、［数２０］となる。
【００７６】
【数１６】
2018514816.tif 000020
【００７７】
【数１７】
2018514816.tif 000021
【００７８】
【数１８】
2018514816.tif 000022
【００７９】
【数１９】
2018514816.tif 000023
【００８０】
【数２０】
2018514816.tif 000024
【００８１】
このようにして、入力及び出力状態をそれぞれ独立して割り当てられた代替表現で表すとともに、代替表現されたラウンド鍵を受け入れるラウンド関数を提供することができる。なお、このバージョンのラウンド関数で用いる標準表現の値だけが、定数であってよい。この関数により、本発明のある実施形態に係る設計に従って完全防備された典型的なＡＥＳラウンド関数を、完全に代数的な記述で表現してもよい。
【００８２】
なお、こうした実施形態では、導入される未知数、すなわち代替表現が一つしかないが、未知数は２つ一組とすることで、リバースエンジニアリングをより困難にするのが理想的である。また、先行する設計から最終のラウンド鍵が露見してしまう。その理由は、ラウンドの出力表現によってラウンドの鍵表現が決定されるからである。ＦＩＰＳ１９７規格に準拠した出力を生成する実装が必要とされるため、最終のラウンド鍵が露呈してしまう可能性がある。こうした問題については、追加の対策設計によって対処してもよい。
【００８３】
第１ラウンドにおいて導入される未知数が一つだけであるという問題に対処するために、アイデンティティ計算を導入することができる。ＧＬ4（Ｆ）におけるブロックのブロック対角可逆行列Ｒ∈ＧＬ16（Ｆ）が与えられた場合、ＡＥＳ演算の初期ラウンドは、計算上等価のシーケンス［数２１］に置き換えることができる。ここで、ｔは一時的な値、ｘ0はＡＥＳに対する入力の１６次元ベクトル、ｒ0はランダムな値の１６次元ベクトル、ｋ0は第１のＡＥＳラウンドの１６次元ベクトルラウンド鍵である。体の減算演算子［数２２］は、Ｆと同様、Ｆ2の拡大体における体の加算と同じにすることができる。先行するシーケンスは、Ａｄｄ  Ｒｏｕｎｄ  Ｋｅｙ［数２３］と同等であってよい。
【００８４】
【数２１】
2018514816.tif 000025
【００８５】
【数２２】
2018514816.tif 000026
【００８６】
【数２３】
2018514816.tif 000027
【００８７】
最初の乗算Ｒｘ0を、事前乗算テーブルを用いて実装することにより、未知数を一度に２つ導入することができる。すなわち、未知の行列Ｒと未知の出力符号化である。代替の第１ラウンドの計算の残りの部分は、この符号化のもとで行われるため、未知の値ｒ0、Ｒ-1、及びｋ0を更に利用することができる。こうした対策に伴い、初期非転置ラウンド部を２つ備えることができる。これらの初期非転置ラウンド部は、上述のアイデンティティ毎に初期ＡＥＳラウンドの計算を行うことができる。第１ステップにおいてランダムの加数ｒ0がない場合、第２ステップにおける乗算Ｒ-1ｔから中間値としてｘ0が得られるため、未知の表現でマスクされるだけとなってしまう。つまり、第１ステップにおいてランダム値を加えない場合、この技術は、未知数を一つだけ用いるケースに逆戻りしてしまう。
【００８８】
最終ラウンド鍵ｋfが露呈するリスクを軽減するため、上で使用したのと同様のアイデンティティを最終ラウンドに適用することができる。すなわち、ラウンド鍵は、露呈する前に、追加のマスキング（［数２４］）を受けることができる。つまり、最終ラウンドでは、［数２５］の計算シーケンスを用いることができる。
ここで、Ｓは、ＧＬ4（Ｆ）に含まれるブロックからなり、ＧＬ16（Ｆ）でランダムに選択されたブロック対角行列である。ｘfは最終ＡＥＳラウンドにおけるＳｕｂ  Ｂｙｔｅｓ及びＳｈｉｆｔ  Ｒｏｗｓ処理後の中間状態、ｒfはＦ16における任意のベクトル、ｋfは最終ＡＥＳラウンドのラウンド鍵とすることができる。
【００８９】
【数２４】
2018514816.tif 000028
【００９０】
【数２５】
2018514816.tif 000029
【００９１】
事実上、初期及び最終ＡＥＳラウンドは、このようにそれぞれ２つのステップに分割することができる。非転置ラウンド部を備えることで、こうした分割を行うことができる。この分割により新たに生成される中間作業状態は、代替表現を割り当てることによって保護することができる。従って、新たな任意の加数に対して、割り当てられた代替表現を適用して、新たな中間状態をそれぞれ出力することができる。
【００９２】
第１のＡＥＳラウンドは、Ａｄｄ  Ｒｏｕｎｄ  Ｋｅｙ操作だけを含むことができる。この操作はＧＬ16（Ｆ）における２つのアフィン計算に分割することができ、それらはそれぞれ典型的なＡＥＳラウンドと類似の、ルックアップテーブルを用いた乗算により実装することができる。この場合、行列の列はすべて独立していてよい。Ｒ（添え字は０から始まる）のｉ番目のブロックのｊ番目の行をＲi,jと表記する。同様に、Ｒ-1における同型の４次元ベクトルをＲi,j-1と表記する。更に、［数２６］及び［数２７］を、初期非転置ラウンド部それぞれにおいて乗算テーブルの内容を定義する関数と定義する。ここで、Ｒ又はＲ-1の対角に沿ったブロックをｉで選択し、当該ブロック内の列をｊで選択することができる。α及び［数２８］は、第１の非転置ラウンドの標準表現及び第２の非転置ラウンドの代替表現におけるスカラー被演算子をそれぞれ表すことができる。従って、［数２９］が成り立つ。
同様に、最終ラウンドについては、［数３０］及び［数３１］と定義すると、［数３２］となる。
【００９３】
【数２６】
2018514816.tif 000030
【００９４】
【数２７】
2018514816.tif 000031
【００９５】
【数２８】
2018514816.tif 000032
【００９６】
【数２９】
2018514816.tif 000033
【００９７】
【数３０】
2018514816.tif 000034
【００９８】
【数３１】
2018514816.tif 000035
【００９９】
【数３２】
2018514816.tif 000036
【０１００】
要約するに、本発明のある実施形態は、定義［数３３］に従って生成されたデータテーブルとともに、組合せ論理及び順序論理（例えば、図２、図３及び図４参照）を用いてＡＥＳ暗号を行う方法を含むことができる。特に、第１の非転置ラウンドでは、定義［数３４］を用いてＬＵＴ（ｉ）を埋めることができる。第２の非転置ラウンドでは、定義［数３５］を用いてＬＵＴ（ｉ）を埋めることができる。前からｎ−１個の転置ラウンドでは、ラウンドｒ∈［２，ｎ］に対して定義φ（ｒ，ｉ）を用いてＬＵＴ（ｉ）を埋めることができる。最終転置ラウンドでは、定義［数３６］を用いてＬＵＴ（ｉ）を埋めることができる。最終非転置ラウンドでは、定義［数３７］を用いてＬＵＴ（ｉ）を埋めることができる。
【０１０１】
【数３３】
2018514816.tif 000037
【０１０２】
【数３４】
2018514816.tif 000038
【０１０３】
【数３５】
2018514816.tif 000039
【０１０４】
【数３６】
2018514816.tif 000040
【０１０５】
【数３７】
2018514816.tif 000041
【０１０６】
以上、簡単のために、順方向暗号だけを説明してきた。同じように、（ＦＩＰＳ公報１９７に記載の通り）「Ｅｑｕｉｖａｌｅｎｔ  Ｉｎｖｅｒｓｅ  Ｃｉｐｈｅｒ」を用いる同様の設計に従って、Ｓ−ｂｏｘｓ［・］を逆Ｓ−ｂｏｘｓ-1［・］に置き換え、Ｓｈｉｆｔ  Ｒｏｗｓ転置ｐ［・］をＩｎｖｅｒｓｅ  Ｓｈｉｆｔ  Ｒｏｗｓ転置ｐ-1［・］に置き換え（それに伴い、図４の転置ラウンド部を図５の逆転置ラウンド部に置き換え）、Ｍｉｘ  Ｃｏｌｕｍｎｓ行列ＭをＩｎｖｅｒｓｅ  Ｍｉｘ  Ｃｏｌｕｍｎｓ行列Ｍ-1に置き換えることにより、逆方向暗号を構成することができる。
【０１０７】
図５に、本発明のある実施形態に係る逆転置ラウンド部を示す。図４及び図５の比較から分かるように、図５のラウンド部は、図４のラウンド部が行う転置に対応する逆転置を行うことができる。
【０１０８】
上述の実施形態は、種々に変形することができる。例えば、ＡＥＳが定義されるＲｉｊｎｄａｅｌ体と同型の体はいくつか存在する。ある実施形態では、Ｒｉｊｎｄａｅｌ体と同型のいかなる体においても、同様にＡＥＳへの入力を受け入れたりＡＥＳの出力を表現として生成したりすることが可能である。
【０１０９】
上述の実装では、それぞれ４回の乗算を符号化する事前乗算テーブルを使用する。事前乗算テーブルを様々に符号化して、第１、第２、第３及び第４の乗算を同時に生成することができる。
【０１１０】
上述の設計では、代替表現が、体の加算が体の表現のＸＯＲとして実装されるものに限定されていた。体の加算を別の計算法で実行可能な表現は、他にも多数存在する。こうした表現を用いてもよい。
【０１１１】
φr,i,jテーブル出力の出力に誤差加数を重ね、且つ、それを、ラウンド鍵／ランダム加数上の対応する誤差加数によって打ち消すことにより、一層のセキュリティを追加することができる。更に、作業状態の各要素に、期待される誤差加数を割り当ててもよい。後者の場合、φr,i,jテーブルの添え字を決定する際に誤差加数を考慮してもよい。また、ラウンド鍵の加数は、φr,i,jテーブルによる加数を打ち消すように調整されてもよいし、更に、次のラウンドの作業状態において期待され得る誤差加数の生成が組み込まれていてもよい。
【０１１２】
ある実施形態では、バイト毎の代替表現を用いてもよい。すなわち、４バイトの入力データを符号化して４バイトの出力データを生成することができる。これにより実行に要する空間量は削減するが、例えば、符号化プロセスの一部として基底を高次の基底へ変更する等、体の加算がＸＯＲであることを保つ符号化の表現は、他にも存在する。
【０１１３】
上述の実装では、各ラウンドの作業状態内の各位置において独立した作業表現を用いてもよいが、表現を再利用することで、事前計算テーブルの集合を小さくすることができる。こうした再利用は、各事前乗算テーブルを、ルックアップ用の添え字となる作業状態内のラウンド及び位置に関係づけるとともに、事前乗算テーブルの各出力要素を、出力を受け入れる作業状態内のラウンド及び位置に関係づけることによって実現してもよい。このように、作業表現を事前乗算テーブルの入力及び出力へ割り当てるとともに、それを作業状態表現におけるラウンド／位置対へ再帰的に伝達してもよく、それによってまた別の事前乗算テーブル等に必要な表現を定義していってもよい。
【０１１４】
上述の変形例に加えて、他の変形例も可能である。また、上の説明では、ハードウェアだけで提供できる回路及び実装について説明したが、ある実施形態は、ハードウェア上で動作するソフトウェアとして実現してもよい。
【０１１５】
図６に、本発明のある実施形態に係る方法を示す。図６に示すように、方法は、６１０において、非標準表現された鍵をロードすることを含むことができる。該方法はまた、６２０において、少なくとも３つの第１タイプのラウンド及び複数の第２タイプのラウンドにおいて、データに関して鍵を処理することを含むことができる。
【０１１６】
第１タイプのラウンドは、例えば、図２及び図３に示すような非転置ラウンドとすることができる。第２タイプのラウンドは、例えば、図２、図４及び図５に示すような転置ラウンドとすることができる。
【０１１７】
データに関して鍵を処理することは、鍵を用いてデータを暗号化すること又は鍵を用いてデータを復号化することを含むことができる。従って、ある実施形態は、暗号化のためのプロセス、復号化のためのプロセス、又はある時は暗号化のために用いられるとともに別の時は復号化のために用いられるプロセスに適用してもよい。
【０１１８】
第１タイプのラウンドは、出力におけるビットチャンネルの順序が、入力における対応するビットチャンネルの順序を維持するように構成することができる。第２タイプのラウンドは、出力におけるビットチャンネルの順序が、入力における対応するビットチャンネルの順序とは異なるように構成することができる。
【０１１９】
第２タイプのラウンドと、第１タイプのラウンドの少なくとも１つとは、対称ブロック暗号に従って暗号化又は復号化を行うように構成することができる。例えば、第２タイプのラウンドと、第１タイプのラウンドの少なくとも１つとは、アドバンストエンクリプションスタンダード規格に従って暗号化又は復号化を行うように構成することができる。よって、残りのラウンドについては、例えば非標準表現での鍵の提供を可能にしたり、中間段階においても確実に非標準表現が用いられるようにしたりする等、別の目的に使用することができる。
【０１２０】
鍵をロードすることは、鍵と非線形の関係にあるバイト列をロードすることを含むことができる。こうしたロードの仕方の例は、上述の通りである。
【０１２１】
前記処理することは、１２８ビットの入力を、隣接する信号を各々含む１６個の８ビットのチャンネルに分割することを含むことができる。別の仕方で入力を分割してもよく、別のサイズの入力があってもよい。図３及び図４に、１２８ビットの入力を１６個の８ビットのチャンネルに分割する具体例を示す。
【０１２２】
前記処理することは、各チャンネルを独立したルックアップテーブルにルーティングすることを含むことができる。このことは、例えば図３〜図５にも図示されており、入力チャンネルをそれぞれＬＵＴ０、ＬＵＴ１等にルーティングすることが図示されている。
【０１２３】
前記処理することは、第１の第１タイプのラウンドに第１のルックアップテーブルを使用し、第２の第１タイプのラウンドに第２のルックアップテーブルを使用することを含むことができる。より詳しくは、前記処理することは、第１の第１タイプのラウンドにルックアップテーブルの第１の集合を使用し、第２の第１タイプのラウンドにルックアップテーブルの第２の集合を使用することを含むことができる。言い換えると、所定のラウンドにおけるＬＵＴ０〜ＬＵＴ１５は、単一のルックアップテーブルと見なすこともでき、ルックアップテーブルの集合と見なすこともできる。各ラウンドは、それぞれ独自のルックアップテーブルの集合を有することができる。ある実施形態では、様々なラウンドが、ルックアップテーブルの集合を共有してもよい。
【０１２４】
前記処理することは、排他的論理和部において、ルックアップテーブルの少なくとも３２ビットの出力をラウンド鍵の３２ビットのセグメントと組合せて、少なくとも３２ビットの出力を行うことを含むことができる。このことは、例えば図３〜５に、５入力ＸＯＲ部（５入力ＸＯＲ０〜５入力ＸＯＲ３）として図示されている。ある実施形態では、より一般的に、少なくとも４つのルックアップテーブルの出力をラウンド鍵の少なくとも３２ビットのセグメントと組合せることができる。
【０１２５】
非標準表現は、Ｒｉｊｎｄａｅｌ多項式とは異なる８次既約多項式を法とし、ＧＦ（２）の要素を係数とする多項式により定義される体への同型マッピングを含む代替表現から選択される。非標準表現は、任意のビット転置及び／又はＧＦ（２）の要素を係数とする任意の７次多項式の加数を適用することができる。
【０１２６】
第１の第１タイプのラウンドの出力におけるｉ番目の８ビットセグメントの第１の表現は、第２の第１タイプのラウンドの出力におけるｉ番目の８ビットセグメントの第２の表現と異なることができる。従って、ある８ビットセグメントの表現は、すべてのラウンド毎に異なることができる。
【０１２７】
ルックアップテーブルは、部分関数の合成を実装するように構成することができ、部分関数は、標準表現と非標準表現とのマッピングと、任意の関数とを含むことができる。従って、こうした部分関数を実際に実行する代わりに、ルックアップテーブルを使用してもよい。
【０１２８】
上述の方法は、種々のやり方で実現することができる。例えば、この方法は、ハードウェア、ハードウェア上で動作するソフトウェア、又はその組合せによって実現することができる。
【０１２９】
例えば、装置は、入力に設けられた第１の第１タイプのラウンド部を含むことができる。該装置はまた、第１の第１タイプのラウンド部に動作的に接続された第２の第１タイプのラウンド部を含むことができる。該装置は、第２の第１タイプのラウンド部に動作的に接続された複数の第２タイプのラウンド部を更に含むことができる。該装置は、複数の第２タイプのラウンド部の少なくとも１つに動作的に接続されるとともに、入力に与えられるデータに基づく出力を行うように構成された第３の第１タイプのラウンド部を更に含むことができる。第１タイプのラウンドは、出力におけるビットチャンネルの順序が、入力における対応するビットチャンネルの順序を維持するように構成することができる。第２タイプのラウンドは、出力におけるビットチャンネルの順序が、入力における対応するビットチャンネルの順序と異なるように構成することができる。
【０１３０】
第１の第１タイプのラウンド部と、第２の第１タイプのラウンド部と、複数の第２タイプのラウンド部と、第３の第１タイプのラウンド部とは、完全にパイプライン化された構成で配置することができる。例えば、ラウンド部は、図２に示すように配置することができる。
【０１３１】
ある特定の例では、第１の第１タイプのラウンド部と第２の第１タイプのラウンド部との間に第１のレジスタを設け、第２の第１タイプのラウンド部と複数の第２タイプのラウンド部との間に第２のレジスタを設け、複数の第２タイプのラウンド部と第３の第１タイプのラウンド部との間に第３のレジスタを設けることができる。第１のレジスタ、第２のレジスタ、及び第３のレジスタは、共通のクロックを共有することができる。
【０１３２】
複数の第２タイプのラウンド部のうち、隣接する第２タイプのラウンド部の各対の間に、追加のレジスタを設けることができる。これら追加のレジスタも、共通のクロックを共有することができる。
【０１３３】
別案として、ラウンド部を非同期的に配置してもよい。例えば、第１の第１タイプのラウンド部と、第２の第１タイプのラウンド部と、複数の第２タイプのラウンド部と、第３の第１タイプのラウンド部は、非同期的にチェーン接続することができる。
【０１３４】
複数の第２タイプのラウンド部と、第１タイプのラウンドの少なくとも１つは、対称ブロック暗号に従って暗号化又は復号化を行うように構成することができる。より詳細には、複数の第２タイプのラウンド部と、第１タイプのラウンドの少なくとも１つとは、アドバンストエンクリプションスタンダード規格に従って暗号化又は復号化を行うように構成することができる。
【０１３５】
第１の第１タイプのラウンド部は、非標準表現で表現された鍵の少なくとも一部を受け取るように構成することができる。例えば、非標準表現は、Ｒｉｊｎｄａｅｌ多項式とは異なる８次既約多項式を法とし、ＧＦ（２）の要素を係数とする多項式により定義される体への同型マッピングを含む代替表現から選択することができる。非標準表現は、任意のビット転置及び／又はＧＦ（２）の要素を係数とする任意の７次多項式の加数を適用することができる。
【０１３６】
上述の発明を、異なる順序のステップ及び／又は開示のものとは異なる構成のハードウェア要素で実施してもよいことは、当業者には容易に理解されよう。従って、これらの好ましい実施形態に基づいて本発明を説明してきたが、本発明の精神及び範囲を逸脱せずに特定の変形や変更、代替構成が容易に認められることは、当業者には明らかであろう。よって、本発明の境界を決定するためには、添付の特許請求の範囲を参照されたい。
【図１】
2018514816.tif 000042
【図２】
2018514816.tif 000043
【図３】
2018514816.tif 000044
【図４】
2018514816.tif 000045
【図５】
2018514816.tif 000046
【図６】
2018514816.tif 000047
【国際調査報告】
2018514816.tif 000048
2018514816.tif 000049
2018514816.tif 000050