(57)【要約】  1つの特徴は、置換ボックス(Sボックス)と関連付けられる暗号値を生成するための方法に関する。方法は、入力値および第1の値をまず取得するステップを含む。1つの方法は、入力値および第1の値に対する排他的OR(XOR)演算を実行して中間値を生成することと、中間値のハミング重みに等しいビットの数の分だけ中間値に対するビットごとの回転を実行することによって、Sボックスの出力値を生成するステップを含む。一態様では、このビットごとの回転の出力はさらに、第2の値とXORされる。別の方法は、入力値のハミング重みに等しいビットの数の分だけ入力値に対するビットごとの回転を実行して中間値を生成することと、中間値および第1の値に対するXOR演算を実行することによって、Sボックスの出力値を生成するステップを含む。
2016503195.tif 000002
【特許請求の範囲】
【請求項１】
置換ボックス(Sボックス)と関連付けられる暗号値を生成するための方法であって、
入力値および第1の値を取得するステップと、
(A)前記入力値および前記第1の値に対するビットごとの排他的OR(XOR)演算を実行して第1の中間値を生成することと、
前記第1の中間値のハミング重みに等しいビットの数の分だけ前記第1の中間値に対するビットごとの回転演算を実行してSボックスの出力値を生成すること、
(B)前記入力値のハミング重みに等しいビットの数の分だけ前記入力値に対するビットごとの回転演算を実行して前記第1の中間値を生成することと、
前記第1の中間値および前記第1の値に対するビットごとのXOR演算を実行して前記Sボックスの出力値を生成すること、または、
(C)前記入力値および前記第1の値に対するビットごとのXOR演算を実行して前記第1の中間値を生成することと、
前記第1の中間値の前記ハミング重みに等しいビットの数の分だけ前記第1の中間値に対するビットごとの回転演算を実行して第2の中間値を生成することと、
第2の値を取得することと、
前記第2の中間値および前記第2の値に対するビットごとのXOR演算を実行して前記Sボックスの出力値を生成すること
の1つによって、前記Sボックスの出力値を生成するステップとを含む、方法。
【請求項２】
提供される前記第1の値および/または第2の値の少なくとも1つが、50%以上の確率で前記入力値とは異なるハミング重みを有する前記Sボックスの出力値を生成するように構成される、請求項1に記載の方法。
【請求項３】
前記第1の値および/または前記第2の値の少なくとも1つが、0ではないハミング重みを有する定数である、請求項1に記載の方法。
【請求項４】
提供される前記第1の値および/または第2の値の少なくとも1つが変数であり、100*(1-2-n)パーセント以上の0ではないハミング重みを有する確率を有し、nが前記第1の値および/または第2の値のビットの数である、請求項1に記載の方法。
【請求項５】
前記第1の値および/または前記第2の値の少なくとも1つが、暗号関数および/または暗号鍵の少なくとも1つから導出される、請求項1に記載の方法。
【請求項６】
前記第1の値および/または前記第2の値の少なくとも1つが、暗号モジュールのコンポーネント段階から導出される、請求項1に記載の方法。
【請求項７】
前記暗号モジュールがストリーム暗号である、請求項6に記載の方法。
【請求項８】
メモリ回路において実行される、請求項1に記載の方法。
【請求項９】
前記入力値および前記Sボックスの出力値が同数のビットを有する、請求項1に記載の方法。
【請求項１０】
主入力値を取得するステップと、
前記主入力値のビットを分割して複数の非線形変換関数(NLTF)入力値を取得するステップであって、各NLTF入力値が、前記主入力値のビットの数より少ないビットの数を有する、ステップと、
非線形演算を実行するNLTFに前記NLTF入力値の各々を提供して、前記NLTFに提供される前記NLTF入力値に各々対応する複数のNLTF出力値を生成するステップと、
前記複数のNTLF出力値を連結して前記入力値を取得するステップとをさらに含む、請求項1に記載の方法。
【請求項１１】
前記主入力値が、前記複数のNLTF入力値の各々が同数のビットを有するように分割される、請求項10に記載の方法。
【請求項１２】
処理回路を含む電子デバイスであって、前記処理回路が、
入力値および第1の値を取得し、
(A)前記入力値および前記第1の値に対するビットごとの排他的OR(XOR)演算を実行して第1の中間値を生成することと、
前記第1の中間値のハミング重みに等しいビットの数の分だけ前記第1の中間値に対するビットごとの回転演算を実行して置換ボックス(Sボックス)の出力値を生成すること、
(B)前記入力値のハミング重みに等しいビットの数の分だけ前記入力値に対するビットごとの回転演算を実行して前記第1の中間値を生成することと、
前記第1の中間値および前記第1の値に対するビットごとのXOR演算を実行して前記Sボックスの出力値を生成すること、または、
(C)前記入力値および前記第1の値に対するビットごとのXOR演算を実行して前記第1の中間値を生成することと、
前記第1の中間値の前記ハミング重みに等しいビットの数の分だけ前記第1の中間値に対するビットごとの回転演算を実行して第2の中間値を生成することと、
第2の値を取得することと、
前記第2の中間値および前記第2の値に対するビットごとのXOR演算を実行して前記Sボックスの出力値を生成すること
の1つによって、前記Sボックスの出力値を生成するように構成される、電子デバイス。
【請求項１３】
提供される前記第1の値および/または第2の値の少なくとも1つが、50%以上の確率で前記入力値とは異なるハミング重みを有する前記Sボックスの出力値を生成するように構成される、請求項12に記載の電子デバイス。
【請求項１４】
前記第1の値および/または前記第2の値の少なくとも1つが、0ではないハミング重みを有する定数である、請求項12に記載の電子デバイス。
【請求項１５】
提供される前記第1の値および/または第2の値の少なくとも1つが変数であり、100*(1-2-n)パーセント以上の0ではないハミング重みを有する確率を有し、nが前記第1の値および/または第2の値のビットの数である、請求項12に記載の電子デバイス。
【請求項１６】
前記第1の値および/または前記第2の値の少なくとも1つが、暗号関数および/または暗号鍵の少なくとも1つから導出される、請求項12に記載の電子デバイス。
【請求項１７】
前記第1の値および/または前記第2の値の少なくとも1つが、暗号モジュールのコンポーネント段階から導出される、請求項12に記載の電子デバイス。
【請求項１８】
前記処理回路がさらに、
主入力値を取得し、
前記主入力値のビットを分割して複数の非線形変換関数(NLTF)入力値を取得し、このとき各NLTF入力値が、前記主入力値のビットの数より少ないビットの数を有し、
非線形演算を実行するNLTFに前記NLTF入力値の各々を提供して、前記NLTFに提供される前記NLTF入力値に各々対応する複数のNLTF出力値を生成し、
前記複数のNTLF出力値を連結して前記入力値を取得するように構成される、請求項12に記載の電子デバイス。
【請求項１９】
入力値および第1の値を取得するための手段と、
(A)前記入力値および前記第1の値に対するビットごとの排他的OR(XOR)演算を実行して第1の中間値を生成するための手段と、
前記第1の中間値のハミング重みに等しいビットの数の分だけ前記第1の中間値に対するビットごとの回転演算を実行して置換ボックス(Sボックス)の出力値を生成するための手段、
(B)前記入力値のハミング重みに等しいビットの数の分だけ前記入力値に対するビットごとの回転演算を実行して前記第1の中間値を生成するための手段と、
前記第1の中間値および前記第1の値に対するビットごとのXOR演算を実行して前記Sボックスの出力値を生成するための手段、または、
(C)前記入力値および前記第1の値に対するビットごとのXOR演算を実行して前記第1の中間値を生成するための手段と、
前記第1の中間値の前記ハミング重みに等しいビットの数の分だけ前記第1の中間値に対するビットごとの回転演算を実行して第2の中間値を生成するための手段と、
第2の値を取得するための手段と、
前記第2の中間値および前記第2の値に対するビットごとのXOR演算を実行して前記Sボックスの出力値を生成するための手段
の1つによって、前記Sボックスの出力値を生成するための手段とを含む、電子デバイス。
【請求項２０】
提供される前記第1の値および/または第2の値の少なくとも1つが、50%以上の確率で前記入力値とは異なるハミング重みを有する前記Sボックスの出力値を生成するように構成される、請求項19に記載の電子デバイス。
【請求項２１】
前記第1の値および/または前記第2の値の少なくとも1つが、0ではないハミング重みを有する定数である、請求項19に記載の電子デバイス。
【請求項２２】
前記第1の値および/または前記第2の値の少なくとも1つが、暗号関数および/または暗号鍵の少なくとも1つから導出される、請求項19に記載の電子デバイス。
【請求項２３】
前記第1の値および/または前記第2の値の少なくとも1つが、暗号モジュールのコンポーネント段階から導出される、請求項19に記載の電子デバイス。
【請求項２４】
主入力値を取得するための手段と、
前記主入力値のビットを分割して複数の非線形変換関数(NLTF)入力値を取得するための手段であって、各NLTF入力値が、前記主入力値のビットの数より少ないビットの数を有する、手段と、
非線形演算を実行するNLTFに前記NLTF入力値の各々を提供して、前記NLTFに提供される前記NLTF入力値に各々対応する複数のNLTF出力値を生成するための手段と、
前記複数のNTLF出力値を連結して前記入力値を取得するための手段とをさらに含む、請求項19に記載の電子デバイス。
【請求項２５】
その中に記憶された置換ボックス(Sボックス)と関連付けられる暗号値を生成するための命令を有するコンピュータ可読記憶媒体であって、前記命令が、少なくとも1つのプロセッサによって実行されると、前記プロセッサに、
入力値および第1の値を取得させ、
(A)前記入力値および前記第1の値に対するビットごとの排他的OR(XOR)演算を実行して第1の中間値を生成することと、
前記第1の中間値のハミング重みに等しいビットの数の分だけ前記第1の中間値に対するビットごとの回転演算を実行してSボックスの出力値を生成すること、
(B)前記入力値のハミング重みに等しいビットの数の分だけ前記入力値に対するビットごとの回転演算を実行して前記第1の中間値を生成することと、
前記第1の中間値および前記第1の値に対するビットごとのXOR演算を実行して前記Sボックスの出力値を生成すること、または、
(C)前記入力値および前記第1の値に対するビットごとのXOR演算を実行して前記第1の中間値を生成することと、
前記第1の中間値の前記ハミング重みに等しいビットの数の分だけ前記第1の中間値に対するビットごとの回転演算を実行して第2の中間値を生成することと、
第2の値を取得することと、
前記第2の中間値および前記第2の値に対するビットごとのXOR演算を実行して前記Sボックスの出力値を生成すること
の1つによって、前記Sボックスの出力値を生成させる、コンピュータ可読記憶媒体。
【請求項２６】
提供される前記第1の値および/または第2の値の少なくとも1つが、50%以上の確率で前記入力値とは異なるハミング重みを有する前記Sボックスの出力値を生成するように構成される、請求項25に記載のコンピュータ可読記憶媒体。
【請求項２７】
前記第1の値および/または前記第2の値の少なくとも1つが、0ではないハミング重みを有する定数である、請求項25に記載のコンピュータ可読記憶媒体。
【請求項２８】
前記命令がさらに、前記プロセッサによって実行されると、前記プロセッサに、
主入力値を取得させ、
前記主入力値のビットを分割して複数の非線形変換関数(NLTF)入力値を取得させ、このとき各NLTF入力値が、前記主入力値のビットの数より少ないビットの数を有し、
非線形演算を実行するNLTFへ前記NLTF入力値の各々を提供させて、前記NLTFに提供される前記NLTF入力値に各々対応する複数のNLTF出力値を生成させ、
前記複数のNTLF出力値を連結させて前記入力値を取得させる、請求項25に記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
優先権の主張
本特許出願は、2013年1月11日に出願された、「Method and Apparatus for Computable, Large, Variable, and Secure Substitution Box」という表題の仮出願第61/751,541号の優先権を主張し、この仮出願の開示全体が、参照によって本明細書に明示的に組み込まれる。
【０００２】
様々な特徴は暗号技術に関し、より具体的には、置換ボックスを実装するための方法および装置に関する。
【背景技術】
【０００３】
暗号技術では、置換ボックス(Sボックス)が、置換を実行する対称鍵アルゴリズムの基本コンポーネントである。ブロック暗号では、それらは通常、鍵と暗号文との関係を不明瞭にし、したがって、混乱(confusion)というシャノンの特性を示すために使用される。Sボックスは、n個の入力ビットを受け取りm個の出力ビットを生成する複雑な関数を表すので、その出力は、いくつかの暗号学的に有用な特性を有する。これらの特性は、高い非線形性およびバランス、高い代数次数、厳密にアバランシェ性の基準を満たすこと、および他の特性を含む。そのような関数は計算するのが困難であり、Data Encryption Standard(DES)およびAdvanced Encryption Standard(AES)などにおいては、参照テーブルとして表されることが多い。たとえば、AESでは、8ビットの入力は、Sボックスから選択された8ビットの値によって置き換えられる。いくつかの場合には、nはmと等しいことがあるので、Sボックスに対する入力および出力は同じビット長を有する。
【０００４】
nが大きい場合、上で説明された参照テーブル(または等価的に、ハードウェアの実装形態に対してはゲートのネットワーク)は急速に扱いにくくなり得る。一方、小さなnは必然的に、非線形性および代数次数が限定される。したがって、ハードウェアまたはソフトウェアで効率的に実装されることも可能な、多数の入力ビットを有するSボックスが望ましい。
【０００５】
ハミング加重ビット関数(HWBF)は、バランスおよび代数学的な複雑さのような、上で説明された望ましい暗号学的特性のいくつかを享受する、nビットから1ビットへのSボックスであると見なされることがある。たとえば、xがnビットの入力であり、xiがxのi番目(1≦i≦n)の上位ビットである場合、HWBFの出力Wは次のように定義される。
x=0の場合、W(x)=0、
それ以外の場合、W(x)=xkであり、kはxのハミング重みである。
【０００６】
図1は、ハードウェアで簡単に実装され得る、従来技術で見出されるnビットからnビットへのHWBFベースのSボックス100の、概略ブロック図を示す。バイナリ入力値x(たとえば、110101)が回転関数102に入力される。回転関数102は、入力のハミング重みに等しいビットの数の分だけ、入力xに対してビットごとの左回転を実行する。したがって、バイナリ入力xが110101に等しい場合、ハミング重みは4に等しいので、回転関数102の出力zは011101に等しい。
【０００７】
図2は、HWBFベースのSボックスの出力zとHWBF W(x)との関係を図示するテーブル200を示す。図1および図2を参照すると、出力zの最下位ビット(たとえば、1)が入力値xのHWBF W(x)(上で定義される)に等しいことが示され得る。HWBFへの入力値xが単一ビットのビットごとの右回転(W(x<<1)によって示される)を経た場合、2番目の下位ビット(たとえば、0)がHWBF W(x)の出力を表すことも、認められ得る。HWBFへの入力値xが2ビットのビットごとの右回転(W(x<<2)によって示される)を経た場合、3番目の下位ビットがHWBF W(x)の出力を表し、以下同様である。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
したがって、出力値zは、入力値xと同数のビットを有し、ここで各ビットは、並列に計算される異なるHWBF W(x)の出力を表す。出力値zのビットはそれでも、HWBFに関して上で説明された有益な暗号学的特性の一部を保つ。残念ながら、Sボックス100は、望ましくない特性も有する。たとえば、1つのそのような望ましくない特性は、出力zが入力xと同じハミング重みを有することであり、これは、入力xのハミング重みが小さいときには特に、暗号解読を簡単にし得ることが多い。Sボックス100のセキュリティを上げて、暗号攻撃(暗号解読)に対するSボックス100の耐性をより高めることが、望ましいであろう。
【０００９】
したがって、暗号攻撃に対してより堅固な、改善されたSボックスのアルゴリズム、方法、および装置に対する必要性がある。
【課題を解決するための手段】
【００１０】
1つの特徴は、置換ボックス(Sボックス)と関連付けられる暗号値を生成するための方法を提供する。方法は、入力値および第1の値を取得するステップと、(A)入力値および第1の値に対するビットごとの排他的OR(XOR)演算を実行して第1の中間値を生成することと、第1の中間値のハミング重みに等しいビットの数の分だけ第1の中間値に対するビットごとの回転演算を実行してSボックスの出力値を生成すること、(B)入力値のハミング重みに等しいビットの数の分だけ入力値に対するビットごとの回転演算を実行して第1の中間値を生成することと、第1の中間値および第1の値に対するビットごとのXOR演算を実行してSボックスの出力値を生成すること、または、(C)入力値および第1の値に対するビットごとのXOR演算を実行して第1の中間値を生成することと、第1の中間値のハミング重みに等しいビットの数の分だけ第1の中間値に対するビットごとの回転演算を実行して第2の中間値を生成することと、第2の値を取得することと、第2の中間値および第2の値に対するビットごとのXOR演算を実行してSボックスの出力値を生成することの1つによって、Sボックスの出力値を生成するステップとを含む。一態様によれば、提供される第1の値および/または第2の値の少なくとも1つは、50%以上の確率で入力値とは異なるハミング重みを有するSボックスの出力値を生成するように構成される。別の態様によれば、第1の値および/または第2の値の少なくとも1つは、0ではないハミング重みを有する定数である。
【００１１】
一態様によれば、提供される第1の値および/または第2の値の少なくとも1つは変数であり、100*(1-2-n)パーセント以上の0ではないハミング重みを有する確率を有し、nは第1の値および/または第2の値のビットの数である。別の態様によれば、第1の値および/または第2の値の少なくとも1つは、暗号関数および/または暗号鍵の少なくとも1つから導出される。さらに別の態様によれば、第1の値および/または第2の値の少なくとも1つは、暗号モジュールのコンポーネント段階から導出される。
【００１２】
一態様によれば、暗号モジュールはストリーム暗号である。別の態様によれば、方法はメモリ回路で実行される。さらに別の態様によれば、入力値およびSボックスの出力値は同数のビットを有する。
【００１３】
一態様によれば、方法はさらに、主入力値を取得するステップと、主入力値のビットを分割して複数の非線形変換関数(NLTF)の入力値を取得するステップであって、各NLTF入力値が主入力値のビットの数より少ないビットの数を有する、ステップと、非線形演算を実行するNLTFにNLTF入力値の各々を提供して、NLTFに提供されるNLTF入力値に各々対応する複数のNLTF出力値を生成するステップと、複数のNLTF出力値を連結して入力値を取得するステップとを含む。別の態様によれば、主入力値は、複数のNLTF入力値の各々が同数のビットを有するように分割される。
【００１４】
別の特徴は、入力値および第1の値を取得し、(A)入力値および第1の値に対するビットごとの排他的OR(XOR)演算を実行して第1の中間値を生成することと、第1の中間値のハミング重みに等しいビットの数の分だけ第1の中間値に対するビットごとの回転演算を実行してSボックスの出力値を生成すること、(B)入力値のハミング重みに等しいビットの数の分だけ入力値に対するビットごとの回転演算を実行して第1の中間値を生成することと、第1の中間値および第1の値に対するビットごとのXOR演算を実行してSボックスの出力値を生成すること、または、(C)入力値および第1の値に対するビットごとのXOR演算を実行して第1の中間値を生成することと、第1の中間値のハミング重みに等しいビットの数の分だけ第1の中間値に対するビットごとの回転演算を実行して第2の中間値を生成することと、第2の値を取得することと、第2の中間値および第2の値に対するビットごとのXOR演算を実行してSボックスの出力値を生成することの1つによって、Sボックスの出力値を生成するように構成される、処理回路を含む電子デバイスを提供する。
【００１５】
一態様によれば、処理回路はさらに、主入力値を取得し、主入力値のビットを分割して複数の非線形変換関数(NLTF)の入力値を取得し、このとき各NLTF入力値が主入力値のビットの数より少ないビットの数を有し、非線形演算を実行するNLTFにNLTF入力値の各々を提供して、NLTFに提供されるNLTF入力値に各々対応する複数のNLTF出力値を生成し、複数のNLTF出力値を連結して入力値を取得するように構成される。
【００１６】
別の特徴は、入力値および第1の値を取得するための手段と、(A)入力値および第1の値に対するビットごとの排他的OR(XOR)演算を実行して第1の中間値を生成するための手段、および、第1の中間値のハミング重みに等しいビットの数の分だけ第1の中間値に対するビットごとの回転演算を実行してSボックスの出力値を生成するための手段、(B)入力値のハミング重みに等しいビットの数の分だけ入力値に対するビットごとの回転演算を実行して第1の中間値を生成するための手段、ならびに、第1の中間値および第1の値に対するビットごとのXOR演算を実行してSボックスの出力値を生成するための手段、または、(C)入力値および第1の値に対するビットごとのXOR演算を実行して第1の中間値を生成するための手段、第1の中間値のハミング重みに等しいビットの数の分だけ第1の中間値に対するビットごとの回転演算を実行して第2の中間値を生成するための手段、第2の値を取得するための手段、ならびに、第2の中間値および第2の値に対するビットごとのXOR演算を実行してSボックスの出力値を生成するための手段の1つによって、Sボックスの出力値を生成するための手段とを含む、電子デバイスを提供する。
【００１７】
一態様によれば、電子デバイスはさらに、主入力値を取得するための手段と、主入力値のビットを分割して複数の非線形変換関数(NLTF)の入力値を取得するための手段であって、各NLTF入力値が主入力値のビットの数より少ないビットの数を有する、手段と、非線形演算を実行するNLTFにNLTF入力値の各々を提供して、NLTFに提供されるNLTF入力値に各々対応する複数のNLTF出力値を生成するための手段と、複数のNLTF出力値を連結して入力値を取得するための手段とを含む。
【００１８】
別の特徴は、そこに記憶された置換ボックス(Sボックス)と関連付けられる暗号値を生成するための命令を有するコンピュータ可読記憶媒体を提供し、この命令は、少なくとも1つのプロセッサによって実行されると、プロセッサに、入力値および第1の値を取得させ、(A)入力値および第1の値に対するビットごとの排他的OR(XOR)演算を実行して第1の中間値を生成することと、第1の中間値のハミング重みに等しいビットの数の分だけ第1の中間値に対するビットごとの回転演算を実行してSボックスの出力値を生成すること、(B)入力値のハミング重みに等しいビットの数の分だけ入力値に対するビットごとの回転演算を実行して第1の中間値を生成することと、第1の中間値および第1の値に対するビットごとのXOR演算を実行してSボックスの出力値を生成すること、または、(C)入力値および第1の値に対するビットごとのXOR演算を実行して第1の中間値を生成することと、第1の中間値のハミング重みに等しいビットの数の分だけ第1の中間値に対するビットごとの回転演算を実行して第2の中間値を生成することと、第2の値を取得することと、第2の中間値および第2の値に対するビットごとのXOR演算を実行してSボックスの出力値を生成することの1つによって、Sボックスの出力値を生成させる。
【００１９】
一態様によれば、命令はさらに、プロセッサによって実行されると、プロセッサに、主入力値を取得させ、主入力値のビットを分割して複数の非線形変換関数(NLTF)の入力値を取得させ、このとき各NLTF入力値が主入力値のビットの数より少ないビットの数を有し、非線形演算を実行するNLTFへNLTF入力値の各々を提供させて、NLTFに提供されるNLTF入力値に各々対応する複数のNLTF出力値を生成させ、複数のNLTF出力値を連結させて入力値を取得させる。
【図面の簡単な説明】
【００２０】
【図１】従来技術において見出される、nビットからnビットへのハミング加重ビット関数(HWBF)ベースの置換ボックス(Sボックス)の、概略ブロック図である。
【図２】HWBFベースのSボックスの出力zとHWBF W(x)との関係を図示するテーブルである。
【図３】Sボックスの第1の例示的な概略ブロック図である。
【図４】Sボックスの第2の例示的な概略ブロック図である。
【図５】Sボックスの第3の例示的な概略ブロック図である。
【図６】暗号関数fが暗号鍵/識別子K1から変数値C1を導出する例を示す図である。
【図７】変数値C2が暗号モジュールの段階から導出される/受け取られる例を示す図である。
【図８】Sボックスの第4の例示的な概略ブロック図である。
【図９】Sボックスと関連付けられる暗号値を生成するための方法のフローチャートである。
【図１０】本明細書で説明されるSボックスを組み込む電子デバイスのハードウェア実装形態の概略ブロック図である。
【図１１】電子デバイスのプロセッサの概略ブロック図である。
【発明を実施するための形態】
【００２１】
以下の説明では、本開示の様々な態様の完全な理解をもたらすために具体的な詳細が与えられる。しかしながら、態様はこれらの具体的な詳細を伴わずに実践され得ることが当業者によって理解されるであろう。たとえば、態様が不要な詳細で不明瞭になることを回避するために、回路はブロック図で示される場合がある。他の場合には、本開示の態様を不明瞭にしないために、よく知られている回路、構造、および技法は、詳細に示されない場合がある。
【００２２】
「例示的な」という言葉は、「例、事例、または例示として機能すること」を意味するように本明細書で使用される。「例示的」として本明細書で説明されるいかなる実装形態または態様も、必ずしも本開示の他の態様よりも好ましいまたは有利なものと解釈されるべきではない。同様に、「態様」という用語は、本開示のすべての態様が、説明された特徴、利点、または動作モードを含むことを必要としない。
【００２３】
例示的なSボックス:HWBFの入力に対して実行される排他的OR(XOR)演算
図3は、本開示の一態様によるSボックス300の概略ブロック図を示す。ビットごとの排他的OR(XOR)関数302は、入力値x(たとえば、110101)および第1の値(たとえば、100110)を入力として受け取る。示される例では、第1の値は、0ではないハミング重みを有する定数値である。ビットごとのXOR関数302は、回転関数304に入力される第1の中間出力y(たとえば、010011)を生成する。この例では、回転関数304は、出力yのハミング重みの分だけ第1の中間出力yに対するビットごとの左回転を実行する(たとえば、3だけ左に回転する)。回転関数304の得られる出力z(たとえば、011010)は、n個の並列なHWBF出力を表し、ここでnは入力値xのビット長である。特に、出力zは入力値xと同じハミング重みを必ずしも有さないので、Sボックス300の出力zは従来技術の方法よりも暗号解読に対して安全である。Sボックス300の出力zは、入力xと同数のビットを有し得る。一態様によれば、回転関数304は、代わりにビットごとの右回転を実行してよく、処理はそれでも暗号学的なセキュリティに関して等価である。
【００２４】
XOR関数302は、入力値および第1の値に対するビットごとの排他的OR演算を実行して第1の中間値を生成するための手段の一例として機能する、XOR回路であり得る。回転関数304は、第1の中間値のハミング重みに等しいビットの数の分だけ第1の中間値に対するビットごとの回転演算を実行してSボックスの出力値を生成するための手段、および、出力Sボックス値を生成するための手段の一例として機能する、RotateHM回路によって実行され得る。
【００２５】
例示的なSボックス:HWBFの出力に対して実行されるXOR演算
図4は、本開示の一態様によるSボックス400の概略ブロック図を示す。回転関数402は、入力値x(たとえば、110101)を入力として受け取る。この例では、回転関数402は、入力xのハミング重みの分だけ入力値xに対するビットごとの左回転を実行して(たとえば、4だけ左に回転して)、第1の中間出力y(たとえば、011101)を生成する。回転関数402の得られる中間出力yは、n個の並列なHWBF出力を表し、ここでnは入力値xのビット長である。次に、ビットごとのXOR関数404は、中間出力yおよび第1の値(たとえば、101100)を入力として受け取る。示される例では、第1の値は、0ではないハミング重みを有する定数値である。XOR関数404は、入力値xと同じハミング重みを必ずしも有さない出力z(たとえば、110001)を生成する。したがって、Sボックス400の出力zは従来技術の方法よりも暗号解読に対して安全である。Sボックス400の出力zは、入力xと同数のビットを有し得る。一態様によれば、回転関数402は、代わりにビットごとの右回転を実行してよく、処理はそれでも暗号学的なセキュリティに関して等価である。
【００２６】
回転関数402は、入力値のハミング重みに等しいビットの数の分だけ入力値に対するビットごとの回転演算を実行して第1の中間値を生成するための手段の一例として機能する、RotateHM回路によって実行され得る。XOR関数404は、第1の中間値および第1の値に対するビットごとのXOR演算を実行してSボックスの出力値を生成するための手段、および、出力Sボックス値を生成するための手段の一例として機能する、XOR回路によって実行され得る。
【００２７】
例示的なSボックス:HWBFの入力および出力において実行されるXOR演算
図5は、本開示の一態様によるSボックス500の概略ブロック図を示す。ビットごとのXOR関数502は、入力値x(たとえば、110101)および第1の値(たとえば、001100)を入力として受け取る。示される例では、第1の値は、0ではないハミング重みを有する定数値である。ビットごとのXOR関数502は、回転関数504に入力される第1の中間出力w(たとえば、111001)を生成する。この例では、回転関数504は、出力wのハミング重みの分だけ第1の中間出力wに対するビットごとの左回転を実行する(たとえば、4だけ左に回転する)。回転関数504の得られる第2の中間出力y(たとえば、011110)は、n個の並列なHWBF出力を表し、ここでnは中間値yのビット長である。次いで、別のビットごとのXOR関数506が、第2の中間出力yおよび第2の値(たとえば、111000)を入力として受け取る。示される例では、第2の値は、0ではないハミング重みを有する定数値である。XOR関数506は、入力値xと同じハミング重みを必ずしも有さない出力z(たとえば、100110)を生成する。したがって、Sボックス500の出力zは従来技術の方法よりも暗号解読に対して安全である。Sボックス500の出力zは、入力xと同数のビットを有し得る。一態様によれば、回転関数504は、代わりにビットごとの右回転を実行してよく、処理はそれでも暗号学的に等価である。
【００２８】
XOR関数502は、入力値および第1の値に対するビットごとのXOR演算を実行して第1の中間値を生成するための手段の一例として機能する、XOR回路によって実行され得る。回転関数504は、第1の中間値のハミング重みに等しいビットの数の分だけ第1の中間値に対するビットごとの回転演算を実行して第2の中間値を生成するための手段の一例として機能する、RotateHM回路によって実行され得る。XOR関数506は、第2の中間値および第2の値に対するビットごとのXOR演算を実行してSボックスの出力値を生成するための手段、および、出力Sボックス値を生成するための手段の一例として機能する、XOR回路によって実行され得る。
【００２９】
図3、図4、および図5に関して上で説明された例では、回転関数は、その入力のハミング重みに等しいビットごとの左回転を実行する。しかしながら、他の態様では、回転関数は、その入力のハミング重みに等しいビットごとの右回転を実行することができる。そのような場合、回転関数によって出力される値の最上位ビットが(最下位ビットの代わりに)代替的なHWBF W'(x)の出力を表す。代替的なHWBF W'(x)は、nビットの入力である入力xを有してよく、ここで、xiはxのi番目の下位ビットである(1≦i≦n)。したがって、関数W'(x)は次のように定義される。
x=0の場合、W'(x)=0、
それ以外の場合、W'(x)=xkであり、kはxのハミング重みである。
【００３０】
例として、回転関数504が第1の中間値w 111001を左ではなく右に回転した場合、第2の中間値yは、011110ではなく100111に等しい。第2の値111000とのXOR演算506の後で、Sボックス500の出力zは011111となる。
【００３１】
一態様によれば、XOR関数302、404、502、506への第1の値および第2の値の入力は、上で説明されたような定数であり得る。しかしながら、他の態様では、第1の値および第2の値は、定数である必要はまったくない。一態様では、第1の値および第2の値は、時間とともに変化するように、始動時に変化するように、かつ/または、Sボックス300、400、500のある回数の繰り返し(すなわち、生成される出力値)の後で変化するように、可変であり得る。一例として、第1の値および第2の値は、変化する関数を使用して暗号鍵から導出されるという点で、または、鍵自体が変化するという点で、可変であり得る。そのような方式は、Sボックス300、400、500の出力を暗号攻撃に対してより堅固にすることができる。一態様によれば、提供される第1の値および/または第2の値は、50%以上の確率で入力値と異なるハミング重みを有するSボックスの出力値を生成するように構成される。
【００３２】
第1の値および第2の値の例示的なタイプ
図6は、暗号関数f 602が暗号鍵/識別子K1から変数値C1を導出するような例を示す。暗号関数f 602はとりわけ、ハッシュ関数であり得る。変数値C1は次いで、Sボックス300の出力zを生成するためにXOR関数302に入力される第1の値として、図3を参照して上で説明されたのと同じ方法で使用される。他のSボックス400、500のいずれかが、そこで使用される第1の値および/または第2の値が暗号関数f 602および鍵/識別子K1のように暗号関数を使用して鍵/識別子から導出されるように、同じ方法で修正され得る。
【００３３】
第1の値および第2の値が可変である別の態様によれば、第1の値および第2の値は、Sボックスの近くで起きる暗号の他の演算から導出され得る。図7は、変数値C2が暗号モジュール702のある段階から導出される/受け取られるような例を示す。暗号モジュール702は、複数個(N個)の整数コンポーネント704、706、708を含んでよく、変数値C2は、これらのコンポーネント704、706、708のいずれか1つへの出力または入力から導出され得る。コンポーネント704、706、708はとりわけ、シフトレジスタ、加算器、乗算器、処理回路/ブロックなどであり得る。一態様では、Sボックス300、400、500は、暗号モジュール702の一部であり得るが、他の態様では、Sボックス300、400、500は暗号モジュール702とは独立であり得る。一例によれば、暗号ブロック702はストリーム暗号であり得る。
【００３４】
変数値C2は次いで、Sボックス300の出力zを生成するためにXOR関数302に入力される第1の値として、図3を参照して上で説明されたのと同じ方法で使用される。他のSボックス400、500のいずれかが、そこで使用される第1の値および/または第2の値が図7に示されるような暗号モジュールの1つまたは複数の段階から導出されるように、同じ方法で修正され得る。
【００３５】
一態様によれば、変数入力C1およびC2(すなわち、第1の値および第2の値)は、50%、60%、70%、80%、90%、95%、または99%のうちの1つ以上の、0ではないハミング重みを有する確率を有するように、提供され得る。別の態様によれば、変数入力C1およびC2は、100*(1-2-n)パーセント以上の、0ではないハミング重みを有する確率をそれらが有するように提供されてよく、ここでnは、変数入力C1およびC2のビット数である。
【００３６】
追加のNLTF段階を特徴とする例示的なSボックス
図8は、本開示の別の態様によるSボックス800の概略ブロック図を示す。Sボックス800(たとえば、「主Sボックス」)は、ビット分割回路802、複数個(N個)の非線形変換関数(NLTF)副回路804、806、808、810(ここでNは2以上の整数である)、連結回路812、およびSボックスA副回路814を含む。非NLTF副回路804、806、808、810は、標準的な非線形変換テーブルベースのSボックスであり得る。Sボックス副回路A 814は、図3〜図7で示され説明されたSボックス300、400、500のいずれか1つである。
【００３７】
主Sボックス800は、nビットの主入力xを受け取り、暗号学的なセキュリティを向上させるnビットの主Sボックス出力zを生成する。ビット分割回路802は、nビットの主入力xを複数のより小さなm1、m2、m3、…mNビットのNLTF入力値803a、803b、803c、…803n(すなわち、m1、m2、m3、およびmNはnより小さい)に分割する。非NLTF副回路804、806、808、810は、参照テーブルを使用して、非線形演算に従って、NLTF入力値803a、803b、803c、…803nをNLTF出力値805a、805b、805c、…805nに変換することができる。NLTF入力値803a、803b、803c、…803nは、対応するNLTF出力値805a、805b、805c、…805nと同数のビットを有し得る。NLTF出力値805a、805b、805c、…805nは次いで、連結回路812によって一緒に連結されて、nビットの入力値yを生成する。図3〜図7に関して上で説明された操作/ステップと同じく、SボックスA 804は、第1の値および/または第2の値とともにnビットの入力値yを受け取り(たとえば、図3〜図7参照)、1つまたは複数のXOR演算およびハミング重み回転演算を実行して(たとえば、図3〜図7参照)、nビットの主Sボックス出力値zを生成する。これらの出力値は、Sボックス副回路804、806、808、810によって受け取られる入力値と同じビット長(すなわち、m1、m2、m3、およびmN)を有し得る。
【００３８】
一態様によれば、ビット分割回路802は、主入力値のビットを分割して複数の非線形変換関数(NLTF)入力値を取得するための手段の一例として機能し、各NLTF入力値は、主入力値のビットの数より少ないビットの数を有する。ビット分割回路802はさらに、非線形演算を実行するNLTFにNLTF入力値の各々を提供して、NLTFに提供されるNLTF入力値に各々対応する複数のNLTF出力値を生成ための手段の一例として機能し得る。連結回路812は、複数のNLTF出力値を連結して入力値を取得するための手段の一例として機能する。
【００３９】
主Sボックス800の動作がここで、1つの非限定的な例に従って説明される。主Sボックス800は、ビット分割回路802がNLTF副回路804、806、808、810に対する4つの8ビット入力803a、803b、803c、…803nへと分割するビットb0、b1、b2、…b31を有する、32ビットの主入力xを受け取ることができる。4つの8ビット入力803a、803b、803c、…803nはしたがって、b0、b1、b2、…b7と、b8、b9、b10、…b15と、b16、b17、b18、…b23と、b24、b25、b26、…b31というビットによって表され得る。各NLTF副回路804、806、808、810は、対応する入力を受け取り、等しい数のビット(たとえば、8ビット)出力805a、805b、805c、…805nを生成することができる。連結回路812は次いで、これらの出力値805a、805b、805c、…805nを連結して、32ビットのSボックスA 814の入力値yを生成する。一態様によれば、値m1、m2、m3、およびmNは、主入力xからの等しい数のビットが各NLTF副回路804、806、808、810に送られるように、互いに等しい。別の態様によれば、値m1、m2、m3、およびmNは互いに等しくないが、値nよりも小さいビット数である。
【００４０】
一例によれば、SボックスA 814は図3に示されるSボックス300である。したがって、図3に示される処理と同様に、SボックスA 814は入力値yおよび32ビットの第1の値に対するXOR演算を実行して中間値を生成する。次に、SボックスA 814は、中間値のハミング重みの分だけ中間値を(左または右に)回転する。得られる回転された32ビット値は次いで、32ビットの主Sボックス出力値zとしてSボックスA 814から出力される。32ビットの第1の値は、(図8に示されない)回路によって提供されてよく、(図3に示されるように)定数または(図6および図7に示されるように)変数であってよい。
【００４１】
暗号値を生成するための例示的な方法
図9は、置換ボックス(Sボックス)と関連付けられる暗号値を生成するための方法のフローチャート900を示す。方法は、入力値および第1の値を取得するステップ(902)と、(A)入力値および第1の値に対するビットごとの排他的OR(XOR)演算を実行して第1の中間値を生成することと(906a)、第1の中間値のハミング重みに等しいビットの数の分だけ第1の中間値に対するビットごとの回転演算を実行してSボックスの出力値を生成すること(908a)、または、(B)入力値のハミング重みに等しいビットの数の分だけ入力値に対するビットごとの回転演算を実行して第1の中間値を生成することと(906b)、第1の中間値および第1の値に対するビットごとのXOR演算を実行してSボックスの出力値を生成すること(908b)、または、(C)入力値および第1の値に対するビットごとのXOR演算を実行して第1の中間値を生成することと(906c)、第1の中間値のハミング重みに等しいビットの数の分だけ第1の中間値に対するビットごとの回転演算を実行して第2の中間値を生成することと(908c)、第2の値を取得することと(910c)、第2の中間値および第2の値に対するビットごとのXOR演算を実行してSボックスの出力値を生成すること(912c)のうちの1つによって、Sボックスの出力値を生成するステップ(904)とを含む。
【００４２】
Sボックスを組み込む例示的な電子デバイス
図10は、一態様による、本明細書で説明されたSボックス300、400、500、800のいずれか1つを組み込む電子デバイス1000のハードウェア実装形態の概略ブロック図を示す。電子デバイス1000は、携帯電話、スマートフォン、タブレット、ポータブルコンピュータ、および/または、回路を有する任意の他の電子デバイスであり得る。電子デバイス1000は、通信インターフェース1010、ユーザインターフェース1012、および処理システム1014を含み得る。処理システム1014は、処理回路(たとえば、プロセッサ)1004、メモリ回路(たとえば、メモリ)1005、コンピュータ可読記憶媒体1006、バスインターフェース1008、およびバス1002を含み得る。処理システム1014および/または処理回路1004は、図3、図4、図5、図6、図7、図8、および/または図9に関して上で説明された、Sボックス300、400、500、800および他の回路および/またはモジュール602、702に関して説明された、ステップ、機能、および/または処理のいずれかを実行するように構成され得る。
【００４３】
処理回路1004は、電子デバイス1000のためのデータを処理するように適合される1つまたは複数のプロセッサ(たとえば、第1のプロセッサなど)であり得る。たとえば、処理回路1004は、図9で説明されるステップのいずれか1つを実行するための手段として機能する特定用途向け集積回路(ASIC)のような、特別なプロセッサであり得る。すなわち、処理回路1004は、入力値および第1の値を取得し、(A)入力値および第1の値に対するビットごとの排他的OR(XOR)演算を実行して第1の中間値を生成することと、第1の中間値のハミング重みに等しいビットの数の分だけ第1の中間値に対するビットごとの回転演算を実行してSボックスの出力値を生成すること、(B)入力値のハミング重みに等しいビットの数の分だけ入力値に対するビットごとの回転演算を実行して第1の中間値を生成することと、第1の中間値および第1の値に対するビットごとのXOR演算を実行してSボックスの出力値を生成すること、または、(C)入力値および第1の値に対するビットごとのXOR演算を実行して第1の中間値を生成することと、第1の中間値のハミング重みに等しいビットの数の分だけ第1の中間値に対するビットごとの回転演算を実行して第2の中間値を生成することと、第2の値を取得することと、第2の中間値および第2の値に対するビットごとのXOR演算を実行してSボックスの出力値を生成することのうちの1つによって、Sボックスの出力値を生成するように構成され得る。
【００４４】
処理回路1004の例は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(DSP)、フィールドプログラマブルゲートアレイ(FPGA)、プログラマブル論理デバイス(PLD)、状態機械、ゲート論理、個別のハードウェア回路、および本開示の全体にわたって説明される様々な機能を実行するように構成された他の適切なハードウェアを含む。処理回路1004はまた、バス1002を管理し、コンピュータ可読記憶媒体1006および/またはメモリ1005に記憶されたソフトウェアを実行することを担う。ソフトウェアは、処理回路1004によって実行されると、処理システム1014に、Sボックス300、400、500、800に関して上で説明された様々な機能、ステップ、および/または処理を実行させる。コンピュータ可読記憶媒体1006は、ソフトウェアを実行するときに処理回路1004によって操作されるデータを記憶するために使用され得る。
【００４５】
メモリ回路1005は、限定はされないが、フラッシュメモリ、磁気的または光学的なハードディスクドライブなどのような、非揮発性メモリであり得る。いくつかの態様では、セクタ情報および/またはオーバーヘッドメッセージ(構成シーケンス番号を含む)を記憶するメモリは、永続的に情報を記憶するために継続的に電力供給され得る、DRAM(たとえば、DDR SDRAM)、SRAMなどのような、揮発性メモリであり得る。
【００４６】
ソフトウェアは、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語と呼ばれるか、または他の名称で呼ばれるかを問わず、命令、命令セット、コード、コードセグメント、プログラムコード、プログラム、サブプログラム、ソフトウェアモジュール、アプリケーション、ソフトウェアアプリケーション、ソフトウェアパッケージ、ルーチン、サブルーチン、オブジェクト、実行可能ファイル、実行スレッド、手順、機能などを意味するよう広く解釈されるべきである。ソフトウェアはコンピュータ可読記憶媒体1006上に存在し得る。コンピュータ可読記憶媒体1006は、非一時的コンピュータ可読記憶媒体であってよい。非一時的コンピュータ可読記憶媒体は、例として、磁気記憶デバイス(たとえば、ハードディスク、フロッピー(登録商標)ディスク、磁気ストリップ)、光ディスク(たとえば、コンパクトディスク(CD)またはデジタル多目的ディスク(DVD))、スマートカード、フラッシュメモリデバイス(たとえば、カード、スティック、またはキードライブ)、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、プログラマブルROM(PROM)、消去可能PROM(EPROM)、電気的消去可能PROM(EEPROM)、レジスタ、取り外し可能ディスク、ならびに、コンピュータによりアクセスされ読み取られ得るソフトウェアおよび/または命令を記憶するための任意の他の適切な媒体を含む。また、コンピュータ可読記憶媒体は、例として、搬送波、伝送路、ならびに、コンピュータによりアクセスされ読み取られ得るソフトウェアおよび/または命令を送信するための任意の他の適切な媒体も含み得る。コンピュータ可読記憶媒体1006は、処理システム1014の中に存在してもよく、処理システム1014の外に存在してもよく、または処理システム1014を含む複数のエンティティにわたって分散されてもよい。コンピュータ可読記憶媒体1006は、コンピュータプログラム製品において具現化され得る。
【００４７】
この例では、処理システム1014は、バス1002によって全般に表されるバスアーキテクチャにより実装され得る。バス1002は、処理システム1014の具体的な用途および全体的な設計制約に応じて、任意の数の相互接続するバスおよびブリッジを含み得る。バス1002は、(プロセッサ1004によって全般に表される)1つまたは複数のプロセッサ、メモリ1005、および(コンピュータ可読記憶媒体1006によって全般に表される)コンピュータ可読媒体を含む、様々な回路を互いにつなぐ。バス1002は、タイミングソース、周辺機器、電圧調整器、および電力管理回路などの様々な他の回路をつなぐこともできるが、これらの回路は当技術分野でよく知られており、したがってこれ以上は説明されない。バスインターフェース1008は、バス1002と通信インターフェース1010(もしあれば)との間のインターフェースを与える。通信インターフェース1010は、伝送媒体を通じて他の装置と通信するための手段を提供する。装置の性質に応じて、ユーザインターフェース1012(たとえば、キーパッド、ディスプレイ、スピーカー、マイクロフォン、タッチスクリーンディスプレイなど)も電子デバイス1000のために設けられ得る。
【００４８】
図11は、本開示の一態様によるプロセッサ1004の概略ブロック図を示す。プロセッサ1004は、とりわけ、主入力値、入力値、第1の値、および/または第2の値を取得する回路1102を含む。取得する回路1102は、主入力値、入力値、第1の値、および/または第2の値を取得するための手段の一例として機能する。プロセッサ1004はさらに、図8に関して上で説明されたようにNLTFを実行するように構成される、非線形変換関数回路1104を含む。
【００４９】
図3、図4、図5、図6、図7、図8、図9、図10、および/または図11に示されたコンポーネント、ステップ、特徴、および/または機能のうちの1つまたは複数は、単一のコンポーネント、ステップ、特徴、もしくは機能へと再構成され、かつ/もしくは組み合わされてよく、または、いくつかのコンポーネント、ステップ、もしくは機能で具現化されてよい。本発明から逸脱することなく、さらなる要素、コンポーネント、ステップ、および/または機能が追加され得る。図3、図4、図5、図6、図7、図8、図10、および/または図11に示される装置、デバイス、および/またはコンポーネントは、図9で説明される方法、特徴、またはステップの1つまたは複数を実行するように構成され得る。また、本明細書で説明されたアルゴリズムは、効率的にソフトウェアに実装されてもよく、かつ/またはハードウェアに組み込まれてもよい。
【００５０】
その上、本開示の一態様では、図10および/または図11に示される処理回路1004は、図9で説明されるアルゴリズム、方法、および/またはステップを実行するように特別に設計かつ/または配線される専用プロセッサ(たとえば、特定用途向け集積回路(ASIC))であり得る。したがって、そのような専用プロセッサ(たとえば、ASIC)は、図9で説明されるアルゴリズム、方法、および/またはステップを実行するための手段の一例であり得る。コンピュータ可読記憶媒体1006はまた、専用プロセッサ(たとえば、ASIC)によって実行されると、図9で説明されるアルゴリズム、方法、および/またはステップを専用プロセッサに実行させる、プロセッサ1004が可読の命令を記憶することができる。
【００５１】
また、本開示の態様は、フローチャート、流れ図、構造図またはブロック図として示されるプロセスとして説明され得ることに留意されたい。フローチャートは動作を逐次プロセスとして説明し得るが、動作の多くは並行してまたは同時に実行され得る。加えて、動作の順序は並び替えられ得る。プロセスは、その動作が完了したときに終了する。プロセスは、方法、関数、手順、サブルーチン、サブプログラムなどに対応し得る。処理が関数に対応する場合、その終了は、関数が呼出し関数またはメイン関数に戻ることに対応する。
【００５２】
その上、記憶媒体は、読取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、磁気ディスク記憶媒体、光学記憶媒体、フラッシュメモリデバイス、ならびに/または、情報を記憶するための他の機械可読媒体、およびプロセッサ可読媒体、および/もしくはコンピュータ可読媒体を含む、データを記憶するための1つまたは複数のデバイスを表し得る。「機械可読媒体」、「コンピュータ可読媒体」、および/または「プロセッサ可読媒体」という用語は、限定はされないが、ポータブルもしくは固定記憶デバイス、光記憶デバイス、ならびに、命令および/もしくはデータを記憶、格納または搬送することが可能な様々な他の媒体のような、非一時的媒体を含み得る。したがって、本明細書で説明される様々な方法は、「機械可読媒体」、「コンピュータ可読媒体」および/または「プロセッサ可読媒体」に記憶され、1つまたは複数のプロセッサ、機械および/またはデバイスによって実行され得る命令および/またはデータによって、完全にまたは部分的に実装され得る。
【００５３】
さらに、本開示の態様は、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、またはそれらの任意の組合せによって実装され得る。ソフトウェア、ファームウェア、ミドルウェアまたはマイクロコードで実装されるとき、必要なタスクを実行するプログラムコードまたはコードセグメントは、記憶媒体または他のストレージのような機械可読媒体に記憶され得る。プロセッサは必要なタスクを実行することができる。コードセグメントは、手順、関数、サブプログラム、プログラム、ルーチン、サブルーチン、モジュール、ソフトウェアパッケージ、クラス、または命令、データ構造、もしくはプログラムステートメントの任意の組合せを表し得る。コードセグメントは、情報、データ、引数、パラメータ、またはメモリ内容を渡し、かつ/または受け取ることによって、別のコードセグメントまたはハードウェア回路に結合され得る。情報、引数、パラメータ、データなどは、メモリ共有、メッセージの受け渡し、トークンの受け渡し、ネットワーク送信などを含む任意の適切な手段を介して、渡され、転送され、または送信され得る。
【００５４】
本明細書で開示される例に関して説明される様々な例示的な論理ブロック、モジュール、回路、要素、および/またはコンポーネントは、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)もしくは他のプログラマブル論理コンポーネント、個別ゲートもしくはトランジスタ論理、個別ハードウェアコンポーネント、または本明細書で説明される機能を実行するように設計されたそれらの任意の組合せで実装または実行され得る。汎用プロセッサはマイクロプロセッサであり得るが、代替としてプロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械であり得る。プロセッサはまた、コンピューティングコンポーネントの組合せ、たとえば、DSPとマイクロプロセッサとの組合せ、いくつかのマイクロプロセッサ、DSPコアと連携する1つもしくは複数のマイクロプロセッサ、または任意の他のそのような構成として実装され得る。
【００５５】
本明細書で開示された例に関して説明された方法またはアルゴリズムは、直接ハードウェアで、プロセッサによって実行可能なソフトウェアモジュールで、または両方の組合せで、処理ユニット、プログラミング命令、または他の指示の形態で具現化されてよく、かつ、単一のデバイスに含まれてよく、または複数のデバイスにわたって分散されてよい。ソフトウェアモジュールは、RAMメモリ、フラッシュメモリ、ROMメモリ、EPROMメモリ、EEPROMメモリ、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、または当技術分野で知られている任意の他の形態の記憶媒体の中に存在し得る。記憶媒体は、プロセッサがその記憶媒体から情報を読み取り、かつその記憶媒体に情報を書き込むことができるように、プロセッサに結合され得る。代替として、記憶媒体はプロセッサと一体であり得る。
【００５６】
さらに、本明細書で開示される態様に関して説明される様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装され得ることを当業者は諒解するだろう。ハードウェアとソフトウェアのこの互換性を明確に示すために、様々な例示的なコンポーネント、ブロック、モジュール、回路、およびステップが、上記では概してそれらの機能に関して説明された。そのような機能がハードウェアとして実装されるか、またはソフトウェアとして実装されるかは、具体的な適用例および全体的なシステムに課される設計制約に依存する。
【００５７】
本明細書で説明される本発明の様々な特徴は、本発明から逸脱することなく様々なシステムで実装され得る。上記の本開示の態様は例にすぎず、本発明を限定するものと解釈されるべきではないことに留意されたい。本開示の態様の説明は、例示的なものであり、特許請求の範囲を限定するものではない。したがって、本教示は、他のタイプの装置に容易に適用されることが可能であり、多くの代替形態、変更形態、および変形形態が当業者には明らかであろう。
【符号の説明】
【００５８】
100  Sボックス
102  回転関数
200  テーブル
300  Sボックス
302  XOR関数
304  回転関数
400  Sボックス
402  回転関数
404  XOR関数
500  Sボックス
502  XOR関数
504  回転関数
506  XOR関数
602  関数f
702  暗号モジュール
704  コンポーネントA
706  コンポーネントB
708  コンポーネントN
800  主Sボックス
802  ビット分割回路
803a  m1ビットのNLTF入力値
803b  m2ビットのNLTF入力値
803c  m3ビットのNLTF入力値
803n  mNビットのNLTF入力値
805a  m1ビットのNLTF入力値
805b  m2ビットのNLTF入力値
805c  m3ビットのNLTF入力値
805n  mNビットのNLTF入力値
812  連結回路
814  SボックスA
900  フローチャート
1000  電子デバイス
1002  バス
1004  プロセッサ
1005  メモリ
1006  コンピュータ可読記憶媒体
1008  バスインターフェース
1010  通信インターフェース
1012  ユーザインターフェース
1014  処理システム
1102  主入力値、入力値、第1の値、および第2の値を取得する回路
1104  非線形変換関数回路
【図１】
2016503195.tif 000003
【図２】
2016503195.tif 000004
【図３】
2016503195.tif 000005
【図４】
2016503195.tif 000006
【図５】
2016503195.tif 000007
【図６】
2016503195.tif 000008
【図７】
2016503195.tif 000009
【図８】
2016503195.tif 000010
【図９】
2016503195.tif 000011
【図１０】
2016503195.tif 000012
【図１１】
2016503195.tif 000013
【手続補正書】
【提出日】平成26年11月11日(2014.11.11)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
置換ボックス(Sボックス)と関連付けられる暗号値を生成するための方法であって、
入力値および第1の値を取得するステップと、
(A)前記入力値および前記第1の値に対するビットごとの排他的OR(XOR)演算を実行して第1の中間値を生成することと、
前記第1の中間値のハミング重みに等しいビットの数の分だけ前記第1の中間値に対するビットごとの回転演算を実行してSボックスの出力値を生成すること、
(B)前記入力値のハミング重みに等しいビットの数の分だけ前記入力値に対するビットごとの回転演算を実行して前記第1の中間値を生成することと、
前記第1の中間値および前記第1の値に対するビットごとのXOR演算を実行して前記Sボックスの出力値を生成すること、または、
(C)前記入力値および前記第1の値に対するビットごとのXOR演算を実行して前記第1の中間値を生成することと、
前記第1の中間値の前記ハミング重みに等しいビットの数の分だけ前記第1の中間値に対するビットごとの回転演算を実行して第2の中間値を生成することと、
第2の値を取得することと、
前記第2の中間値および前記第2の値に対するビットごとのXOR演算を実行して前記Sボックスの出力値を生成すること
の1つによって、前記Sボックスの出力値を生成するステップとを含む、方法。
【請求項２】
提供される前記第1の値および/または第2の値の少なくとも1つが、50%以上の確率で前記入力値とは異なるハミング重みを有する前記Sボックスの出力値を生成するように構成される、請求項1に記載の方法。
【請求項３】
前記第1の値および/または前記第2の値の少なくとも1つが、0ではないハミング重みを有する定数である、請求項1に記載の方法。
【請求項４】
提供される前記第1の値および/または第2の値の少なくとも1つが変数であり、100*(1-2-n)パーセント以上の0ではないハミング重みを有する確率を有し、nが前記第1の値および/または第2の値のビットの数である、請求項1に記載の方法。
【請求項５】
前記第1の値および/または第2の値の少なくとも1つが、暗号関数および/または暗号鍵の少なくとも1つから導出され、時間とともに変化し、始動時に変化し、かつ/または、前記Sボックスのある回数の繰り返しの後で変化するそれぞれの値を有する、請求項1に記載の方法。
【請求項６】
前記第1の値および/または第2の値の少なくとも1つが、暗号モジュールのコンポーネント段階から導出される、請求項1に記載の方法。
【請求項７】
前記暗号モジュールがストリームモジュールである、請求項1に記載の方法。
【請求項８】
メモリ回路において実行される、請求項1に記載の方法。
【請求項９】
前記入力値および前記Sボックスの出力値が同数のビットを有する、請求項1に記載の方法。
【請求項１０】
主入力値を取得するステップと、
前記主入力値のビットを分割して複数の非線形変換関数(NLTF)入力値を取得するステップであって、各NLTF入力値が、前記主入力値のビットの数より少ないビットの数を有する、ステップと、
非線形演算を実行するNLTFに前記NLTF入力値の各々を提供して、前記NLTFに提供される前記NLTF入力値に各々対応する複数のNLTF出力値を生成するステップと、
前記複数のNTLF出力値を連結して前記入力値を取得するステップとをさらに含む、請求項1に記載の方法。
【請求項１１】
前記主入力値が、前記複数のNLTF入力値の各々が同数のビットを有するように分割される、請求項10に記載の方法。
【請求項１２】
処理回路を含む電子デバイスであって、前記処理回路が、
入力値および第1の値を取得し、
(A)前記入力値および前記第1の値に対するビットごとの排他的OR(XOR)演算を実行して第1の中間値を生成することと、
前記第1の中間値のハミング重みに等しいビットの数の分だけ前記第1の中間値に対するビットごとの回転演算を実行してSボックスの出力値を生成すること、
(B)前記入力値のハミング重みに等しいビットの数の分だけ前記入力値に対するビットごとの回転演算を実行して前記第1の中間値を生成することと、
前記第1の中間値および前記第1の値に対するビットごとのXOR演算を実行して前記Sボックスの出力値を生成すること、または、
(C)前記入力値および前記第1の値に対するビットごとのXOR演算を実行して前記第1の中間値を生成することと、
前記第1の中間値の前記ハミング重みに等しいビットの数の分だけ前記第1の中間値に対するビットごとの回転演算を実行して第2の中間値を生成することと、
第2の値を取得することと、
前記第2の中間値および前記第2の値に対するビットごとのXOR演算を実行して前記Sボックスの出力値を生成すること
の1つによって、前記Sボックスの出力値を生成するように構成される、電子デバイス。
【請求項１３】
提供される前記第1の値および/または第2の値の少なくとも1つが、50%以上の確率で前記入力値とは異なるハミング重みを有する前記Sボックスの出力値を生成するように構成される、請求項12に記載の電子デバイス。
【請求項１４】
前記第1の値および/または前記第2の値の少なくとも1つが、0ではないハミング重みを有する定数である、請求項12に記載の電子デバイス。
【請求項１５】
提供される前記第1の値および/または第2の値の少なくとも1つが変数であり、100*(1-2-n)パーセント以上の0ではないハミング重みを有する確率を有し、nが前記第1の値および/または第2の値のビットの数である、請求項12に記載の電子デバイス。
【請求項１６】
前記第1の値および/または第2の値の少なくとも1つが、暗号関数および/または暗号鍵の少なくとも1つから導出され、時間とともに変化し、始動時に変化し、かつ/または、前記Sボックスのある回数の繰り返しの後で変化するそれぞれの値を有する、請求項12に記載の電子デバイス。
【請求項１７】
前記第1の値および/または前記第2の値の少なくとも1つが、暗号モジュールのコンポーネント段階から導出される、請求項12に記載の電子デバイス。
【請求項１８】
前記処理回路がさらに、
主入力値を取得し、
前記主入力値のビットを分割して複数の非線形変換関数(NLTF)入力値を取得し、このとき各NLTF入力値が、前記主入力値のビットの数より少ないビットの数を有し、
非線形演算を実行するNLTFに前記NLTF入力値の各々を提供して、前記NLTFに提供される前記NLTF入力値に各々対応する複数のNLTF出力値を生成し、
前記複数のNTLF出力値を連結して前記入力値を取得するように構成される、請求項12に記載の電子デバイス。
【請求項１９】
入力値および第1の値を取得するための手段と、
(A)前記入力値および前記第1の値に対するビットごとの排他的OR(XOR)演算を実行して第1の中間値を生成するための手段と、
前記第1の中間値のハミング重みに等しいビットの数の分だけ前記第1の中間値に対するビットごとの回転演算を実行してSボックスの出力値を生成するための手段、
(B)前記入力値のハミング重みに等しいビットの数の分だけ前記入力値に対するビットごとの回転演算を実行して前記第1の中間値を生成するための手段と、
前記第1の中間値および前記第1の値に対するビットごとのXOR演算を実行して前記Sボックスの出力値を生成するための手段、または、
(C)前記入力値および前記第1の値に対するビットごとのXOR演算を実行して前記第1の中間値を生成するための手段と、
前記第1の中間値の前記ハミング重みに等しいビットの数の分だけ前記第1の中間値に対するビットごとの回転演算を実行して第2の中間値を生成するための手段と、
第2の値を取得するための手段と、
前記第2の中間値および前記第2の値に対するビットごとのXOR演算を実行して前記Sボックスの出力値を生成するための手段
の1つによって、前記Sボックスの出力値を生成するための手段とを含む、電子デバイス。
【請求項２０】
提供される前記第1の値および/または第2の値の少なくとも1つが、50%以上の確率で前記入力値とは異なるハミング重みを有する前記Sボックスの出力値を生成するように構成される、請求項19に記載の電子デバイス。
【請求項２１】
前記第1の値および/または前記第2の値の少なくとも1つが、0ではないハミング重みを有する定数である、請求項19に記載の電子デバイス。
【請求項２２】
前記第1の値および/または第2の値の少なくとも1つが、暗号関数および/または暗号鍵の少なくとも1つから導出され、時間とともに変化し、始動時に変化し、かつ/または、前記Sボックスのある回数の繰り返しの後で変化するそれぞれの値を有する、請求項19に記載の電子デバイス。
【請求項２３】
前記第1の値および/または前記第2の値の少なくとも1つが、暗号モジュールのコンポーネント段階から導出される、請求項19に記載の電子デバイス。
【請求項２４】
主入力値を取得するための手段と、
前記主入力値のビットを分割して複数の非線形変換関数(NLTF)入力値を取得するための手段であって、各NLTF入力値が、前記主入力値のビットの数より少ないビットの数を有する、手段と、
非線形演算を実行するNLTFに前記NLTF入力値の各々を提供して、前記NLTFに提供される前記NLTF入力値に各々対応する複数のNLTF出力値を生成するための手段と、
前記複数のNTLF出力値を連結して前記入力値を取得するための手段とをさらに含む、請求項19に記載の電子デバイス。
【請求項２５】
その中に記憶された置換ボックス(Sボックス)と関連付けられる暗号値を生成するための命令を有するコンピュータ可読記憶媒体であって、前記命令が、少なくとも1つのプロセッサによって実行されると、前記プロセッサに、
入力値および第1の値を取得させ、
(A)前記入力値および前記第1の値に対するビットごとの排他的OR(XOR)演算を実行して第1の中間値を生成することと、
前記第1の中間値のハミング重みに等しいビットの数の分だけ前記第1の中間値に対するビットごとの回転演算を実行してSボックスの出力値を生成すること、
(B)前記入力値のハミング重みに等しいビットの数の分だけ前記入力値に対するビットごとの回転演算を実行して前記第1の中間値を生成することと、
前記第1の中間値および前記第1の値に対するビットごとのXOR演算を実行して前記Sボックスの出力値を生成すること、または、
(C)前記入力値および前記第1の値に対するビットごとのXOR演算を実行して前記第1の中間値を生成することと、
前記第1の中間値の前記ハミング重みに等しいビットの数の分だけ前記第1の中間値に対するビットごとの回転演算を実行して第2の中間値を生成することと、
第2の値を取得することと、
前記第2の中間値および前記第2の値に対するビットごとのXOR演算を実行して前記Sボックスの出力値を生成すること
の1つによって、前記Sボックスの出力値を生成させる、コンピュータ可読記憶媒体。
【請求項２６】
提供される前記第1の値および/または第2の値の少なくとも1つが、50%以上の確率で前記入力値とは異なるハミング重みを有する前記Sボックスの出力値を生成するように構成される、請求項25に記載のコンピュータ可読記憶媒体。
【請求項２７】
前記第1の値および/または前記第2の値の少なくとも1つが、0ではないハミング重みを有する定数である、請求項25に記載のコンピュータ可読記憶媒体。
【請求項２８】
前記命令がさらに、前記プロセッサによって実行されると、前記プロセッサに、
主入力値を取得させ、
前記主入力値のビットを分割して複数の非線形変換関数(NLTF)入力値を取得させ、このとき各NLTF入力値が、前記主入力値のビットの数より少ないビットの数を有し、
非線形演算を実行するNLTFへ前記NLTF入力値の各々を提供させて、前記NLTFに提供される前記NLTF入力値に各々対応する複数のNLTF出力値を生成させ、
前記複数のNTLF出力値を連結させて前記入力値を取得させる、請求項25に記載のコンピュータ可読記憶媒体。
【国際調査報告】
2016503195.tif 000014
2016503195.tif 000015
2016503195.tif 000016