(57)【要約】  暗号は、かく乱と拡散の両方を提供するために、置換ボックス(Sボックス)値の回転を採用する。いくつかの態様では、反復暗号の各反復について、状態値のサブセットが拡大されて、Sボックス値を回転させるための回転距離が計算され、それによって、回転されたSボックス値が状態値と結合され、新しい状態値が次の反復のために回転される。有利には、暗号は、従来の命令を使用して、大型のSボックスルックアップテーブルの必要なしに、ソフトウェア(または、他のコード)において実装され得る。
2017531209.tif 000002
【特許請求の範囲】
【請求項１】
暗号信号を生成するための方法であって、
第1の信号を受信するステップと、
前記第1の信号に基づいて、状態値を決定するステップと、
前記状態値に基づいて、回転距離を決定するステップと、
前記回転距離に基づいて、第1の値を回転させるステップと、
前記回転された第1の値と前記状態値とを結合するステップと、
前記回転された第1の値と前記状態値との前記結合に基づいて、第2の信号を生成するステップと
を含む方法。
【請求項２】
前記第1の値が置換ボックス値である、請求項1に記載の方法。
【請求項３】
前記回転させるステップおよび前記結合するステップが、前記状態値の後続のインスタンス内で、前記状態値における非線形性を伝え、前記結合を拡散する、請求項1に記載の方法。
【請求項４】
前記結合するステップが、
前記回転された第1の値をマスクするステップと、
前記回転されマスクされた第1の値と前記状態値とを結合するステップと
を含む、請求項1に記載の方法。
【請求項５】
前記結合するステップが、
前記回転された第1の値と前記状態値とを結合することによって、前記状態値の中間インスタンスを生成するステップ
を含む、請求項1に記載の方法。
【請求項６】
前記第2の信号の前記生成が、前記状態値の前記中間インスタンスを回転させることによって、前記状態値の後続のインスタンスを生成することを含み、
前記状態値の前記中間インスタンスが、前記第1の値のビット量に基づくビット量だけ回転される、請求項5に記載の方法。
【請求項７】
前記状態値の前記中間インスタンスの前記生成が、暗号鍵を、前記回転された第1の値と前記状態値との前記結合の結果と結合することを含む、請求項5に記載の方法。
【請求項８】
前記状態値の前記決定が、暗号鍵と前記状態値の以前のインスタンスとを結合することによって、前記状態値の現在のインスタンスを生成することを含む、請求項1に記載の方法。
【請求項９】
前記回転距離の前記決定が、前記状態値のサブセットにさらに基づく、請求項1に記載の方法。
【請求項１０】
前記回転距離の前記決定が、
前記状態値からビットのサブセットを選択することと、
前記選択されたビットのサブセットに対応する第1の数を決定することと、
前記第1の値のビット量に対応する第2の数を決定することと、
前記第1の数に前記第2の数を乗算することと
を含む、請求項1に記載の方法。
【請求項１１】
前記回転距離の前記決定が、
前記状態値をマスクすることと、
前記マスクされた状態値をシフトすることと
を含む、請求項1に記載の方法。
【請求項１２】
前記回転距離の前記決定が、
前記シフトされマスクされた状態値に基づいて、第2の値をシフトすることと、
前記シフトされた第2の値をマスクすることと、
前記シフトされマスクされた第2の値をシフトすることと
をさらに含む、請求項11に記載の方法。
【請求項１３】
前記状態値の前記決定が、前記状態値の以前のインスタンスを回転させることによって、前記状態値の現在のインスタンスを生成することを含む、請求項1に記載の方法。
【請求項１４】
前記第2の信号の前記生成が、暗号鍵を、前記回転された第1の値と前記状態値との前記結合と結合することを含む、請求項1に記載の方法。
【請求項１５】
前記第1の値が、前記回転された第1の値と前記状態値との前記結合が全単射であるような値を有する、請求項1に記載の方法。
【請求項１６】
前記第1の値が全単射である、請求項1に記載の方法。
【請求項１７】
前記回転距離の前記決定、前記第1の値の前記回転、および前記回転された第1の値と前記状態値との前記結合が、演算
s ^= ROR(sbox, (s & M1) << S1) & MASK、および
s = ROR(s, R1)によって実行され、
ただし、^=はXOR演算であり、RORは右回転演算であり、&はAND演算であり、<<はビット左シフト演算であり、sは前記状態値のインスタンスに対応し、M1は第1のマスク値であり、MASKは第2のマスク値であり、S1はシフト値であり、R1は回転値であり、sboxは前記第1の値のインスタンスに対応する、請求項1に記載の方法。
【請求項１８】
前記回転距離の前記決定、前記第1の値の前記回転、および前記回転された第1の値と前記状態値との前記結合が、演算
s = ROL(s, R1)、および
s ^= ROR(sbox, (s & M1) << S1) & MASKによって実行され、
ただし、^=はXOR演算であり、ROLは左回転演算であり、RORは右回転演算であり、&はAND演算であり、<<はビット左シフト演算であり、sは前記状態値のインスタンスに対応し、M1は第1のマスク値であり、MASKは第2のマスク値であり、R1は回転値であり、S1はシフト値であり、sboxは前記第1の値のインスタンスに対応する、請求項1に記載の方法。
【請求項１９】
前記回転距離の前記決定、前記第1の値の前記回転、および前記回転された第1の値と前記状態値との前記結合が、演算
s ^= ROR(sbox, (s & M1) << S1)、および
s = ROR(s, R1)によって実行され、
ただし、^=はXOR演算であり、RORは右回転演算であり、&はAND演算であり、<<はビット左シフト演算であり、sは前記状態値のインスタンスに対応し、M1はマスク値であり、S1はシフト値であり、R1は回転値であり、sboxは前記第1の値のインスタンスに対応する、請求項1に記載の方法。
【請求項２０】
前記回転距離の前記決定、前記第1の値の前記回転、および前記回転された第1の値と前記状態値との前記結合が、演算
s = ROL(s, R1)、
shift = (tinv >> ((state & M1) << S1)) << S2、および
s ^= ROR(sbox, shift)によって実行され、
ただし、^=はXOR演算であり、ROLは左回転演算であり、RORは右回転演算であり、&はAND演算であり、<<はビット左シフト演算であり、>>はビット右シフト演算であり、sは前記状態値のインスタンスに対応し、M1はマスク値であり、S1は第1のシフト値であり、S2は第2のシフト値であり、R1は第1の回転値であり、shiftは第2の回転値であり、tinvは逆置換ボックス値であり、sboxは前記第1の値のインスタンスに対応する、請求項1に記載の方法。
【請求項２１】
暗号信号を生成するための装置であって、
メモリ回路と、
前記メモリ回路に結合され、
前記メモリ回路から第1の信号を受信すること、
前記第1の信号に基づいて、状態値を決定すること、
前記状態値に基づいて、回転距離を決定すること、
前記回転距離に基づいて、第1の値を回転させること、
前記回転された第1の値と前記状態値とを結合すること、および
前記回転された第1の値と前記状態値との前記結合に基づいて、第2の信号を生成すること
を行うように構成された処理回路と
を備える装置。
【請求項２２】
前記第1の値が置換ボックス値である、請求項21に記載の装置。
【請求項２３】
前記回転および前記結合が、前記状態値の後続のインスタンス内で、前記状態値における非線形性を伝え、前記結合を拡散する、請求項21に記載の装置。
【請求項２４】
前記回転距離の前記決定が、前記状態値のサブセットにさらに基づく、請求項21に記載の装置。
【請求項２５】
前記回転された第1の値と前記状態値とを結合するために、前記処理回路が、
前記回転された第1の値をマスクすること、および
前記回転されマスクされた第1の値と前記状態値とを結合すること
を行うようにさらに構成される、請求項21に記載の装置。
【請求項２６】
前記回転された第1の値と前記状態値とを結合するために、前記処理回路が、前記回転された第1の値と前記状態値とに基づいて、前記状態値の中間インスタンスを生成するようにさらに構成され、
前記第2の信号を生成するために、前記処理回路が、前記状態値の前記中間インスタンスを回転させて、前記状態値の後続のインスタンスを生成するようにさらに構成され、
前記状態値の前記中間インスタンスが、前記第1の値のビット量に基づくビット量だけ回転される、請求項21に記載の装置。
【請求項２７】
暗号信号を生成するための装置であって、
第1の信号を受信するための手段と、
前記第1の信号に基づいて、状態値を決定するための手段と、
前記状態値に基づいて、回転距離を決定するための手段と、
前記回転距離に基づいて、第1の値を回転させるための手段と、
前記回転された第1の値と前記状態値とを結合するための手段と、
前記回転された第1の値と前記状態値との前記結合に基づいて、第2の信号を生成するための手段と
を備える装置。
【請求項２８】
前記回転および前記結合が、前記状態値の後続のインスタンス内で、前記状態値における非線形性を伝え、前記結合を拡散する、請求項27に記載の装置。
【請求項２９】
コンピュータ実行可能コードを記憶する非一時的コンピュータ可読記憶媒体であって、
第1の信号を受信すること、
前記第1の信号に基づいて、状態値を決定すること、
前記状態値に基づいて、回転距離を決定すること、
前記回転距離に基づいて、第1の値を回転させること、
前記回転された第1の値と前記状態値とを結合すること、および
前記回転された第1の値と前記状態値との前記結合に基づいて、第2の信号を生成すること
を行うためのコードを含む、非一時的コンピュータ可読媒体。
【請求項３０】
前記回転および前記結合が、前記状態値の後続のインスタンス内で、前記状態値における非線形性を伝え、前記結合を拡散する、請求項29に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、その内容全体が参照により本明細書に組み込まれる、2014年10月10日に米国特許商標庁に出願された仮出願第62/062,306号、および2015年2月6日に米国特許商標庁に出願された非仮出願第14/616,110号の優先権および利益を主張する。
【０００２】
本開示の態様は、一般に通信に関し、より詳細には、限定はしないが、回転ベース暗号に関する。
【背景技術】
【０００３】
暗号は、暗号化および/または解読のために使用される暗号アルゴリズムである。暗号化側では、一般に平文と呼ばれる情報が、暗号による演算を受け、一般に暗号文と呼ばれる暗号化情報が生成される。解読側では、暗号化情報が暗号による演算を受け、元の情報(元の平文)が再作成される。データ暗号化規格(DES)暗号および高度暗号化規格(AES)暗号などのいわゆるブロック暗号を含む、様々なタイプの暗号がある。
【０００４】
良いブロック暗号は、クロード・シャノンによって述べられた2つの重要な原理、すなわち、かく乱(Confusion)および拡散(Diffusion)を中心にして設計される。かく乱は、暗号文が、可能な限り数学的に複雑である方法で、平文と暗号鍵とに依存するべきであることを意味する。拡散は、平文内の小さいローカルの変更が、可能な限り暗号文の多くに影響を及ぼすべきであることを意味する。これらの目標は、典型的に、置換層と呼ばれる幅広い配列中に通常配置される、少数のビットのためのかく乱を達成する単純なビルディングブロック(たとえば、いわゆる置換ボックス(Sボックス))の使用を通して、および、置換層の出力を相互混合する線形層によって達成される。
【０００５】
Sボックスは、典型的に、nビットをnビットにマッピングする。しかしながら、場合によっては(たとえば、BLOWFISHまたはCASTなどの設計において)、Sボックスは、nビットからmビットにマッピングし、mはnよりも大きい。たとえば、8ビット-32ビットSボックスが採用され得る。これらの場合、Sボックスはまた、拡散の役割の一部を実行し、暗号の設計を容易にする。しかしながら、nビット-nビットSボックスとは対照的に、そのようなnビット-mビットSボックスは、全単射関数ではなく、暗号の解析をより困難にし得る。また、これらのSボックスは、比較的大きい。たとえば、テーブルベースの実装形態では、BLOWFISHおよびCAST Sボックスは、従来の8ビットSボックスの4倍もの空間を占有する。
【０００６】
その上、これらのテーブルベースの実装形態は、本質的にキャッシュタイミング攻撃を受けやすい。暗号の内部状態は、秘密であることが意図される。しかしながら、状態の部分は、Sボックスルックアップテーブルへのインデックスまたはオフセットとして使用される。テーブルからのロードを実行することに関連する待ち時間は、プロセッサのデータキャッシュにおける利用可能性に依存する。この待ち時間を測定することによって、攻撃者は、この依存性を利用して、内部暗号状態と、最終的に、暗号によって使用された暗号鍵とを復元することができる。
【発明の概要】
【課題を解決するための手段】
【０００７】
以下では、本開示のいくつかの態様の基本的な理解を与えるために、そのような態様の簡略化された概要を提示する。この概要は、本開示のすべての企図された特徴の包括的な概観ではなく、本開示のすべての態様の主要または重要な要素を識別するものでもなく、本開示のいずれかまたはすべての態様の範囲を定めるものでもない。その唯一の目的は、後で提示されるより詳細な説明の前置きとして、本開示のいくつかの態様の様々な概念を簡略化された形態で提示することである。
【０００８】
本開示の様々な態様は、かく乱と拡散の両方を達成するために、値(たとえば、テーブル、ストリング、または何らかの他の値)の可変回転が大型のSボックスとして採用される、暗号を提供する。いくつかの態様では、反復暗号の各反復について、状態値のサブセットが拡大されて、そのような回転するSボックスのための回転距離が計算され、それによって、次いで、回転されたSボックスまたはその部分が状態値と結合され、新しい状態値が次の反復のために回転される。有利には、暗号は、従来の命令を使用して、大型のSボックスルックアップテーブルの必要なしに、ソフトウェア(または、他のコード)において実装され得る。暗号は、平文の暗号化(エンサイファ)、および暗号文の解読(デサイファ)のために使用され得る。
【０００９】
一態様では、本開示は、暗号信号を生成するための方法であって、第1の信号を受信するステップと、第1の信号に基づいて、状態値を決定するステップと、状態値に基づいて、回転距離を決定するステップと、回転距離に基づいて、第1の値を回転させるステップと、回転された第1の値と状態値とを結合するステップと、回転された第1の値と状態値との結合に基づいて、第2の信号を生成するステップとを含む、方法を提供する。
【００１０】
本開示の別の態様は、メモリ回路と、メモリ回路に結合された処理回路とを含む、暗号信号を生成するために構成された装置を提供する。処理回路は、メモリ回路から第1の信号を受信すること、第1の信号に基づいて、状態値を決定すること、状態値に基づいて、回転距離を決定すること、回転距離に基づいて、第1の値を回転させること、回転された第1の値と状態値とを結合すること、および、回転された第1の値と状態値との結合に基づいて、第2の信号を生成することを行うように構成される。
【００１１】
本開示の別の態様は、暗号信号を生成するために構成された装置を提供する。装置は、第1の信号を受信するための手段と、第1の信号に基づいて、状態値を決定するための手段と、状態値に基づいて、回転距離を決定するための手段と、回転距離に基づいて、第1の値を回転させるための手段と、回転された第1の値と状態値とを結合するための手段と、回転された第1の値と状態値との結合に基づいて、第2の信号を生成するための手段とを含む。
【００１２】
本開示の別の態様は、コンピュータ実行可能コードを記憶する非一時的コンピュータ可読媒体であって、第1の信号を受信すること、第1の信号に基づいて、状態値を決定すること、状態値に基づいて、回転距離を決定すること、回転距離に基づいて、第1の値を回転させること、回転された第1の値と状態値とを結合すること、および、回転された第1の値と状態値との結合に基づいて、第2の信号を生成することを行うためのコードを含む、非一時的コンピュータ可読媒体を提供する。
【００１３】
上記に加えて、本開示の追加の態様によれば、回転させるステップおよび結合するステップは、状態値の後続のインスタンス内で、状態値における非線形性を伝え、結合を拡散する。本開示の追加の態様によれば、第1の値は置換ボックス値である。本開示の追加の態様によれば、結合するステップは、回転された第1の値をマスクするステップと、回転されマスクされた第1の値と状態値とを結合するステップとを含む。本開示の追加の態様によれば、結合するステップは、回転された第1の値と状態値とを結合することによって、状態値の中間インスタンスを生成するステップを含む。本開示の追加の態様によれば、第2の信号の生成は、状態値の中間インスタンスを回転させることによって、状態値の後続のインスタンスを生成するステップを含む。本開示の追加の態様によれば、状態値の中間インスタンスが、第1の値のビット量に基づくビット量だけ回転される。本開示の追加の態様によれば、状態値の中間インスタンスの生成は、暗号鍵を、回転された第1の値と状態値との結合の結果と結合するステップを含む。本開示の追加の態様によれば、状態値の決定は、暗号鍵と状態値の以前のインスタンスとを結合することによって、状態値の現在のインスタンスを生成するステップを含む。本開示の追加の態様によれば、回転距離の決定は、状態値のサブセットにさらに基づく。本開示の追加の態様によれば、回転距離の決定は、状態値からビットのサブセットを選択するステップと、選択されたビットのサブセットに対応する第1の数を決定するステップと、第1の値のビット量に対応する第2の数を決定するステップと、第1の数に第2の数を乗算するステップとを含む。本開示の追加の態様によれば、回転距離の決定は、状態値をマスクするステップと、マスクされた状態値をシフトするステップとを含む。本開示の追加の態様によれば、回転距離の決定は、シフトされマスクされた状態値に基づいて、第2の値をシフトするステップと、シフトされた第2の値をマスクするステップと、シフトされマスクされた第2の値をシフトするステップとをさらに含む。本開示の追加の態様によれば、状態値の決定は、状態値の以前のインスタンスを回転させることによって、状態値の現在のインスタンスを生成するステップを含む。本開示の追加の態様によれば、第2の信号の生成は、暗号鍵を、回転された第1の値と状態値との結合と結合するステップを含む。本開示の追加の態様によれば、第1の値は、回転された第1の値と状態値との結合が全単射であるような値を有する。本開示の追加の態様によれば、第1の値は全単射である。本開示の追加の態様によれば、第1の信号は平文を備え、第2の信号は平文の暗号化表現を備える。本開示の追加の態様によれば、第1の信号は暗号文を備え、第2の信号は暗号文の解読された表現を備える。本開示の追加の態様によれば、回転距離の決定、第1の値の回転、および回転された第1の値と状態値との結合が、反復ベースで実行されて、受信された第1の信号に基づいて第2の信号が生成される。
【００１４】
本開示の追加の態様によれば、回転距離の決定、第1の値の回転、および回転された第1の値と状態値との結合は、演算s ^= ROR(sbox, (s & M1) << S1) & MASK、およびs = ROR(s, R1)によって実行され得、ただし、^=はXOR演算であり、RORは右回転演算であり、&はAND演算であり、<<はビット左シフト演算であり、sは状態値のインスタンスに対応し、M1は第1のマスク値であり、MASKは第2のマスク値であり、S1はシフト値であり、R1は回転値であり、sboxは第1の値のインスタンスに対応する。
【００１５】
本開示の追加の態様によれば、回転距離の決定、第1の値の回転、および回転された第1の値と状態値との結合は、演算s = ROL(s, R1)、およびs ^= ROR(sbox, (s & M1) << S1) & MASKによって実行され得、ただし、^=はXOR演算であり、ROLは左回転演算であり、RORは右回転演算であり、&はAND演算であり、<<はビット左シフト演算であり、sは状態値のインスタンスに対応し、M1は第1のマスク値であり、MASKは第2のマスク値であり、R1は回転値であり、S1はシフト値であり、sboxは第1の値のインスタンスに対応する。
【００１６】
本開示の追加の態様によれば、回転距離の決定、第1の値の回転、および回転された第1の値と状態値との結合は、演算s ^= ROR(sbox, (s & M1) << S1)、およびs = ROR(s, R1)によって実行され得、ただし、^=はXOR演算であり、RORは右回転演算であり、&はAND演算であり、<<はビット左シフト演算であり、sは状態値のインスタンスに対応し、M1はマスク値であり、S1はシフト値であり、R1は回転値であり、sboxは第1の値のインスタンスに対応する。
【００１７】
本開示の追加の態様によれば、回転距離の決定、第1の値の回転、および回転された第1の値と状態値との結合が、演算s = ROL(s, R1)、shift = (tinv >> ((state & M1) << S1)) << S2、およびs ^= ROR(sbox, shift)によって実行され得、ただし、^=はXOR演算であり、ROLは左回転演算であり、RORは右回転演算であり、&はAND演算であり、<<はビット左シフト演算であり、>>はビット右シフト演算であり、sは状態値のインスタンスに対応し、M1はマスク値であり、S1は第1のシフト値であり、S2は第2のシフト値であり、R1は第1の回転値であり、shiftは第2の回転値であり、tinvは逆置換ボックス値であり、sboxは第1の値のインスタンスに対応する。
【００１８】
本開示のこれらの態様および他の態様は、以下の発明を実施するための形態を検討すれば、より十分に理解されよう。本開示の他の態様、特徴、および実装形態は、添付の図とともに本開示の特定の実装形態の以下の説明を検討すれば、当業者に明らかになろう。以下のいくつかの実装形態および図に対して本開示の特徴について説明する場合があるが、本開示のすべての実装形態は、本明細書で説明する有利な特徴のうちの1つまたは複数を含むことができる。言い換えれば、1つまたは複数の実装形態について、いくつかの有利な特徴を有するものとして説明する場合があるが、そのような特徴のうちの1つまたは複数は、本明細書で説明する本開示の様々な実装形態に従って使用される場合もある。同様に、いくつかの実装形態について、デバイス実装形態、システム実装形態、または方法実装形態として以下で説明する場合があるが、そのような実装形態は、様々なデバイス、システム、および方法において実装され得ることを理解されたい。
【図面の簡単な説明】
【００１９】
【図１】本開示の1つまたは複数の態様を適用できるシステムの一例を示す図である。
【図２】データ暗号化規格(DES)ブロック暗号を示す図である。
【図３】DESブロック暗号のためのビットワイズ線形変換のテーブルを示す図である。
【図４】高度暗号化規格(AES)ブロック暗号を示す図である。
【図５】本開示のいくつかの態様による、回転ベース暗号の一例を示す図である。
【図６】本開示のいくつかの態様による、回転ベース暗号の別の例を示す図である。
【図７】本開示のいくつかの態様による、暗号文を生成するために平文に対して演算を行う(operate on)処理回路の一例を示す図である。
【図８】本開示のいくつかの態様による、平文を生成するために暗号文に対して演算を行う処理回路の一例を示す図である。
【図９】本開示のいくつかの態様による、暗号文を生成するために平文に対して演算を行う処理回路の別の例を示す図である。
【図１０】本開示のいくつかの態様による、平文を生成するために暗号文に対して演算を行う処理回路の別の例を示す図である。
【図１１】本開示のいくつかの態様による、暗号回路の一例を示す図である。
【図１２】本開示のいくつかの態様による、暗号セキュリティをサポートする電子デバイスのための例示的なハードウェア実装形態のブロック図である。
【図１３】本開示のいくつかの態様による、暗号プロセスの一例を示す図である。
【図１４】本開示のいくつかの態様による、暗号プロセスの別の例を示す図である。
【図１５】本開示のいくつかの態様による、図14の暗号プロセスのより詳細な例を与える暗号プロセスを示す図である。
【図１６】本開示のいくつかの態様による、暗号プロセスの別の例を示す図である。
【図１７】本開示のいくつかの態様による、図16の暗号プロセスのより詳細な例を与える暗号プロセスを示す図である。
【発明を実施するための形態】
【００２０】
添付の図面に関して以下に記載する発明を実施するための形態は、様々な構成の説明として意図されており、本明細書において説明する概念が実践される場合がある唯一の構成を表すことは意図されていない。発明を実施するための形態は、様々な概念の完全な理解を与えるための具体的な詳細を含む。しかしながら、これらの概念がこれらの具体的な詳細なしに実践される場合があることは当業者に明らかであろう。いくつかの事例では、そのような概念を曖昧にすることを回避するために、よく知られている構造および構成要素がブロック図の形態で示される。
【００２１】
図1は、暗号を採用するシステム100の簡単な一例である。システム100は、平文104を暗号化し、それによって暗号文106を生成する、エンサイファ構成要素102を含む。たとえば、暗号化は、平文104が別の構成要素(図示せず)への記憶または送信より前にセキュアにされることを保証するために使用され得る。システム100はまた、暗号文106を解読し、それによって元の平文104を復元する、デサイファ構成要素108を含む。したがって、元の平文104の使用は、暗号文106を解読するための能力を与えられた、認可されたユーザに限定され得る。実際には、所与のシステムは、図1の構成要素のうちの1つまたは複数を含み得る。たとえば、いくつかのシステムは、情報を暗号化することのみができ、あるシステムは、情報を解読することのみができ、いくつかのシステムは、情報の暗号化と解読の両方を行うことができる。
【００２２】
ブロック暗号では、かく乱は、典型的に、非線形技法(一般に、非線形層と呼ばれる)の使用を通して達成される。たとえば、Sボックスが採用され得、それによって、情報の所与の入力ブロックが、Sボックスの対応するものによって定義された情報の別のブロックで置換される。
【００２３】
対照的に、ブロック暗号のための拡散は、典型的に、線形技法(一般に、線形層と呼ばれる)の使用を通して達成される。たとえば、転置技法が、暗号空間の全体にわたって情報を分散させるために採用され得る。例示のために、これらの概念について、DESブロック暗号およびAESブロック暗号の例を参照しながら説明する。
【００２４】
図2は、DESブロック暗号200の一例を示す。入力情報(平文)202が、第1の線形層206(拡大転置)と、非線形層208(Sボックス)と、第2の線形層210(転置P)とによる演算を受け、出力情報(暗号文)204が生成される。非線形層208は、Sボックスへの情報入力のために、Sボックス情報を置換することを伴う。各線形層206または210(転置)は、ビットを暗号空間の全体にわたって水平にあちこちに有効に移動させる。線形層206および210は、図3のテーブル300などのテーブルによって表され得るビットワイズ線形変換であると考えられ得る。
【００２５】
実際には、そのような線形変換は、(たとえば、図2に示すように)ハードウェアにおいて実装することが比較的容易である。しかしながら、そのような線形変換をソフトウェアにおいて効率的に実装することは、より困難である。たとえば、非カスタムプロセッサは、一般に、これらの演算を直接実行するために、ネイティブ演算を提供しない。
【００２６】
したがって、ソフトウェア実装形態では、DESは、典型的に一連のテーブルルックアップとして実装される。ルックアップテーブルへの各ルックアップは、ルックアップテーブル内の所与のエントリmにマッピングすることになる。一例では、多くて4ビットがエントリのいずれかにおいて設定される。この場合、連続するDESラウンドのための各テーブルルックアップは、4つの6ビットルックアップを伴い得る。したがって、暗号空間にわたる入力ビットの転置は、これらのテーブルルックアップを通して達成される。
【００２７】
図4は、AESブロック暗号400の一例を示す。入力情報(平文)402が、非線形層406(Sボックス)と、線形層408(行をシフトし、列を混合する)とによる演算を受け、出力情報(暗号文)404が生成される。この場合、線形層408は、単純な転置よりも多くを伴う。むしろ、ビットが数学的な方法で混合される。たとえば、線形層408は、ベクトル方程式によって表され得る線形変換を伴い得る。
【００２８】
DESと同様に、AESのための線形層は、ソフトウェアにおいて効率的に実装することが比較的困難である。したがって、ソフトウェア実装形態では、AESもまた、典型的に一連のテーブルルックアップとして実装される。一例では、連続するAESラウンドのための各テーブルルックアップは、状態値をシフトすること、バイトをマスクオフすること、および結果をルックアップテーブルに通すことを伴い得る。
【００２９】
回転ベース暗号
本開示は、いくつかの態様では、回転ベース暗号に関する。いくつかの態様では、そのような回転ベース暗号は、ソフトウェア(ならびに、ハードウェア)において効率的に実装され得、キャッシュタイミング攻撃への耐性(サイドチャネル耐性)があり得る。いくつかの態様では、そのような暗号は、極めて小さいコードフットプリントを用いて実装され得る。たとえば、Intel(登録商標)x64プロセッサ上では、そのような暗号は、いくつかの実装形態では、100バイト未満において、および/または25未満の機械語命令において実装され得る。回転ベース暗号の2つの例について、以下で詳細に説明する。
【００３０】
第1の例
第1の例では、暗号は、以下の演算を中心として設計された単一のラウンドを繰り返すことによって取得される。
state = state XOR wide-s-box(state AND 0xF)  式1
【００３１】
次のラウンド鍵混合が後に続くか、または先行する。
state = state XOR key_i  式2
【００３２】
そして、たとえば、状態の回転は次の通りである。
state = ROR(state, 4)  式3
【００３３】
wide-s-boxは、64ビット整数または配列における小型の4ビット置換ボックスSのすべての値を連結することによって取得される(その理由は、4ビット置換ボックスが16エントリを有し、16*4=64であるからである)。たとえば、sboxと呼ばれる値(たとえば、ストリング、テーブル、配列、または何らかの他の値)が、次のように定義され、
sbox := S[15] | S[14] | S[13] | ... | S[2] | S[1] | S[0]、式4
【００３４】
ただし、S[15]の4ビットがsboxの最上位ビットであり、S[0]の4ビットがsboxの最下位4ビットである場合、値sboxから、S[]の任意の値が次のように取り出され得る。
S[v] = ( sbox >> (v * 4) ) AND 0xF  式5
【００３５】
いくつかの態様では、これはルックアップと見なされ得る。したがって、wide-s-box全体は、0xFを用いるマスキングを除去し、シフトを回転(ROR=右回転)と入れ替えることによって、値(たとえば、整数、配列など)の回転として構築され得る。したがって、4ビットを64にマッピングする「幅広い」「回転する」Sボックスは、次のように定義され得る。
式6
wide-s-box(v) = ROR(sbox,v*4) (したがって、S[v] = wide-s-box(v) AND 0xF)
【００３６】
ただし、次の演算、
state = state XOR wide-s-box(state AND 0xF)  式7
【００３７】
では、状態の下位4ビットも同様に変換される。したがって、これらの変換されたビットは、シフトインデックス(4による乗算)を決定し、sbox64ビット値を回転させるための逆演算(たとえば、解読)において、有効に使用され得ない。この問題に対処するために、次の演算が代わりに使用され得る。
式8
state = state XOR (wide-s-box(state AND 0xF) AND 0xFFFFFFFFFFFFFFF0)
【００３８】
この場合、下位4ビットは修正されない。したがって、これらのビットは、wide-s-boxの値を計算し、したがって、最後のステップを戻すために使用され得る。したがって、解読するために、暗号化ステップが単に逆に実行され得る。
【００３９】
いくつかの態様では、上記の暗号は、Proceedings of the Third International Workshop on Fast Software Encryption、121〜144ページ、Springer-Verlag、1996年における「Unbalanced Feistel Networks and Block Cipher Design」、著者Bruce SchneierおよびJohn Kelseyにおいて定義されているような、ターゲットヘビーフェイステルネットワーク(Target-Heavy Feistel Network)である。ただし、この例示的な暗号では、置換は、回転するSボックスによって計算される。
【００４０】
そのような暗号(たとえば、暗号化)関数を用いる(「paul_encrypt」という名前の)64ビットブロック暗号の擬似コード例が、次に続く。
式9
Mask = 0xFFFFFFFFFFFFFFF0ULL
void paul_encrypt(uint64_t * ciphertext, uint64_t plaintext, uint64_t key)
{
int i;
uint64_t state, boxvalue;
int shift;
state = plaintext;
for (i = 0; i <= ROUNDS - 1; i++)
{
state = state XOR key_i //鍵混合
index = state & 0xF //状態の最下位4ビットからSボックスを選択する
boxvalue = sbox >>> (index*4)
state = state XOR (boxvalue AND Mask) //置換および拡散
if (i <> ROUNDS-1)
state =  state >>> 4 //状態を回転させる
}
state = state XOR key_ROUNDS //出力白色化(最後の鍵混合)
* ciphertext = state;
}
【００４１】
XOR演算の代わりに、鍵混合および/または回転されたSボックスの混合を実行するために、別の演算が使用され得る。たとえば、整数加算、整数減算、または何らかの他の混合(Mixing)(結合(Combining))演算が採用され得る。
【００４２】
図5は、本明細書の教示による回転ベース暗号500の概念的表現である。暗号500の所与のラウンドでは、現在の状態504のサブセット502が、θ関数506による演算を受け、拡大出力508が与えられる。拡大出力508がγ関数510による演算を受け、それによって、γ関数510の出力がマスク524され、次いで現在の状態504とのXOR512をとられる。次いで、得られた出力が回転514を受けて、暗号500の次のラウンドのための状態504が与えられる。
【００４３】
例示のために、暗号500の演算について、64ビット状態パラメータと4ビットSボックスとを使用する実装形態との関連で、より詳細に説明する。ただし、本明細書の教示はそのような実装形態に限定されず、他の状態およびSボックスサイズが他の実装形態で使用され得ることを理解されたい。
【００４４】
64ビット状態504は、16個の4ビットニブルからなる。各ラウンドについて、1ニブルがθ関数506に入力される。θ関数506は、サブセット502の4ビットニブルを拡大して、64ビット拡大出力508を与える。この演算を、図5のθ記述516によって示す。ここで、0x0の入力aは、{0x0, 0x1, 0x2, ..., 0xE, 0xF}にマッピングし、0x1の入力aは、{0x1, 0x2, 0x3, ..., 0xF, 0x0}にマッピングする、などとなる。拡張出力508は、(a+15) | (a+14) | ...| (a+1) | aと表され得、ただし、|は4ビット値の連結を示す。
【００４５】
いくつかの態様では、θ関数506は、拡散関数を与える線形層である。したがって、比較的幅広いSボックスが、小型のテーブルベースSボックスから作成される。
【００４６】
γ関数510は、図5のγ記述518によって示されるようなバイト置換演算を実行する。いくつかの態様では、γ関数510は、かく乱関数を与える非線形層である。522に示すように、Sボックスは、S(x)が全単射であるように選択される。
【００４７】
γ関数510は、64ビットテーブルSを使用して、拡大出力508の各ニブルについてSボックス置換を実行する。図5は、そのようなテーブル520の例を示し、そこで、ニブルごとのベースで、4ビットSボックスの値S(x)が、所与の入力xについて示される。本明細書の教示はこの特定のテーブルSに限定されず、他のテーブル値および/またはサイズが他の実装形態で使用され得ることを理解されたい。
【００４８】
このテーブルルックアップは、図5においてS(x)によって数学的に表される。したがって、γ記述518において、拡大出力508の最下位ニブルb0のためのSボックス置換は、S(b0)によって表され、拡大出力508の次の最下位ニブルb1のためのSボックス置換は、S(b1)によって表される、などとなる。したがって、γ関数510の出力は、S(b15) | S(b14) | ...| S(b1) | S(b0)と表され得、ただし、|は4ビット値の連結を示す。
【００４９】
回転514は、その入力を右に1ニブルだけ(すなわち、4ビットだけ)回転させる。次いで、状態504のニブルのすべてが演算を受けるまで、それらの演算が次のラウンドにおいて繰り返される。実際には、暗号500によって最終的に出力される暗号文の拡散およびかく乱特性を増すために、これらの演算が、状態504の全体について複数回実行される。
【００５０】
暗号500は、回転、XOR、およびビットシフトなどの標準命令を使用して、ソフトウェアにおいて実装され得る。ラウンドのための命令のセットの一例を、式10において記載する。
式10
#define ROR64(x,b) (((x) >> (b)) | ((x) << (64-(b))))
#define MASK 0xFFFFFFFFFFFFFFF0
const uint64_t sbox = 0x3F41B87D026C59EA ULL
state ^= key[i];
state ^= ROR(sbox, (state & 0xF) << 2) & MASK;
state = ROR(state, 4);
ただし、^=はXOR演算であり、RORは右回転演算であり、&はAND演算であり、<<はビット左シフト演算であり、stateは状態504に対応し、sboxはテーブル520であり、MASKはマスク524に対応し、keyは暗号鍵である。
【００５１】
上記のコードは極めて小さく、たとえば、64ビットIntel(登録商標)中央処理ユニット(CPU)上で25命令程度(合計約100バイト)である。明示的な拡散ステップの必要がないことがわかり得る。さらに、このタイプの設計は、厳重なセキュリティ境界を与えるために、古典的な技法を用いて暗号解読され得る。
従来のテーブルルックアップとは対照的に、本明細書で開示する回転ベース暗号は、データロード命令のための秘密暗号状態インデックスを使用する必要がない。したがって、暗号のデータキャッシュフットプリントは、暗号状態に依存する必要がない。したがって、この設計は、キャッシュタイミング攻撃に対する自然免疫を有する。
【００５２】
第1の例-逆
図5の回転ベース暗号500の逆は、逆順であることを除いて、暗号500と同様の演算を実行する。たとえば、そのような逆暗号は、暗号500によって生成された暗号文を解読するために使用され得る。別の例として、逆暗号が、平文を暗号化するために使用され得、暗号500が、得られた暗号文を解読するために使用され得る。
【００５３】
そのような逆暗号関数を用いる(「paul_decrypt」という名前の)64ビットブロック暗号の擬似コード例が、次に続く。
式11
Mask = 0xFFFFFFFFFFFFFFF0ULL
void paul_decrypt(uint64_t ciphertext, uint64_t * plaintext, uint64_t key)
{
int i;
uint64_t state, boxvalue;
int shift;
state = ciphertext;
state = state XOR key_ROUNDS //初期鍵混合
for (i = ROUNDS-1; I >= 0; i--)
{
if (i <> ROUNDS - 1)
state =  state <<< 4 //回転させる
index = state & 0xF //状態の最下位4ビットからSボックスを選択する
boxvalue = sbox >>> (index*4)
state = state XOR (boxvalue AND Mask)
state = state XOR key_i //鍵混合
}
* plaintext = state;
}
【００５４】
上述のように、整数加算または減算などの別の演算が、XOR演算の代わりに、鍵混合および/または回転されたSボックスの混合を実行するために使用され得る。そのような場合、その関数の逆関数が逆暗号において使用される。たとえば、加算が暗号化関数において使用される場合、減算が、適切な逆関数を保証するために、解読関数の対応する場所において使用される。別の例として、減算が暗号化関数において使用される場合、加算が、適切な逆関数を保証するために、解読関数の対応する場所において使用される。
【００５５】
逆暗号は、回転、XOR、およびビットシフトなどの標準命令を使用して、ソフトウェアにおいて実装され得る。ラウンドのための命令のセットの一例を、式12において記載する。
式12
#define ROL64(x,b) (((x) << (b)) | ((x) >> (64-(b))))
#define MASK 0xFFFFFFFFFFFFFFF0
const uint64_t sbox = 0x3F41B87D026C59EA ULL
state = ROL(state, 4);
state ^= ROR(sbox, (state & 0xF) << 2) & MASK;
state ^= key[i];
ただし、^=はXOR演算であり、ROLは左回転演算であり、RORは右回転演算であり、&はAND演算であり、<<はビット左シフト演算であり、stateは状態504に対応し、sboxはテーブル520であり、MASKはマスク524に対応し、keyは暗号鍵である。
【００５６】
第2の例
値(たとえば、ストリング、テーブルなど)の同じタイプの回転を使用して、幅広いSボックスを作成する暗号の第2の例では、値を状態に混合するとき、マスキングが採用されない。この暗号は、フェイステルネットワークではない。この例では、暗号の逆はより複雑であり、その理由は、(上記で説明したように)最下位ニブルが修正されるからである、
new-state[3..0] = state[3..0] XOR S([state[3..0])  式13
【００５７】
T[v] = v XOR S[v]によって定義されたSボックスTが可逆であると仮定すると、new-state[3..0]をTの逆に通すことによって、元の状態が復元され得る。したがって、元のシフトされたLARGE Sboxが復元され、状態全体へのXORをとられ得る。したがって、この例では、Sは可逆である必要はない。しかしながら、新しいSボックスTは可逆である。
【００５８】
そのような暗号化関数を用いる(「paul2_encrypt」という名前の)64ビットブロック暗号の擬似コード例が、次に続く。
式14
Mask = 0xFFFFFFFFFFFFFFF0ULL
MASQ = 0xFEDCBA9876543210ULL
sbox = (MASQ XOR tbox)
tbox= 0xc19d02e574386bfaULL
tinv = 0x19cf20d473865aebULL
void paul_encrypt(uint64_t * ciphertext, uint64_t plaintext, uint64_t key)
{
int i;
uint64_t state, boxvalue;
int shift;
state = plaintext;
for (i = 0; i <= ROUNDS - 1; i++)
{
state = state XOR key_i //鍵混合
index = state & 0xF //状態の最下位4ビットからSボックスを選択する
boxvalue = sbox >>> (index*4)
state = state XOR boxvalue //置換および拡散
if (i <> ROUNDS - 1)
state =  state >>> 4 //回転させる
}
state = state XOR key_i //出力白色化
* ciphertext = state;
}
【００５９】
図6は、本明細書の教示による回転ベース暗号600の概念的表現である。暗号600の所与のラウンドでは、現在の状態604のサブセット602が、θ関数606による演算を受け、拡大出力608が与えられる。拡大出力608がγ関数610による演算を受け、それによって、γ関数610の出力が、現在の状態604とのXOR612をとられる。次いで、得られた出力が回転614を受けて、暗号600の次のラウンドのための状態604が与えられる。
【００６０】
例示のために、暗号600の演算について、64ビット状態パラメータと4ビットSボックスとを使用する実装形態との関連で、より詳細に説明する。ただし、本明細書の教示はそのような実装形態に限定されず、他の状態およびSボックスサイズが他の実装形態で使用され得ることを理解されたい。
【００６１】
64ビット状態604は、16個の4ビットニブルからなる。各ラウンドについて、1ニブルがθ関数606に入力される。θ関数606は、サブセット602の4ビットニブルを拡大して、64ビット拡大出力608を与える。この演算を、図6のθ記述616によって示す。ここで、0x0の入力aは、{0x0, 0x1, 0x2, ..., 0xE, 0xF}にマッピングし、0x1の入力aは、{0x1, 0x2, 0x3, ..., 0xF, 0x0}にマッピングする、などとなる。拡張出力608は、(a+15) | (a+14) | ...| (a+1) | aと表され得、ただし、|は4ビット値の連結を示す。
【００６２】
いくつかの態様では、θ関数606は、拡散関数を与える線形層である。したがって、比較的幅広いSボックスが、小型のテーブルベースSボックスから作成される。
【００６３】
γ関数610は、図6のγ記述618によって示されるようなバイト置換演算を実行する。いくつかの態様では、γ関数610は、かく乱関数を与える非線形層である。622に示すように、Sボックスは、x  →  x XOR S(x)が全単射であるように選択される。
【００６４】
γ関数610は、64ビットテーブルSを使用して、拡大出力608の各ニブルについてSボックス置換を実行する。図6は、そのようなテーブル620の例を示し、そこで、ニブルごとのベースで、4ビットSボックスの値S(x)が、所与の入力xについて示される。本明細書の教示はこの特定のテーブルSに限定されず、他のテーブル値および/またはサイズが他の実装形態で使用され得ることを理解されたい。
【００６５】
このテーブルルックアップは、図6においてS(x)によって数学的に表される。したがって、γ記述618において、拡大出力608の最下位ニブルb0のためのSボックス置換は、S(b0)によって表され、拡大出力608の次の最下位ニブルb1のためのSボックス置換は、S(b1)によって表される、などとなる。したがって、γ関数610の出力は、S(b15) | S(b14) | ...| S(b1) | S(b0)と表され得、ただし、|は4ビット値の連結を示す。
【００６６】
回転614は、その入力を右に1ニブルだけ(すなわち、4ビットだけ)回転させる。次いで、状態604のニブルのすべてが演算を受けるまで、それらの演算が次のラウンドにおいて繰り返される。実際には、暗号600によって最終的に出力される暗号文の拡散およびかく乱特性を増すために、これらの演算が、状態604の全体について複数回実行される。
【００６７】
暗号600は、回転、XOR、およびビットシフトなどの標準命令を使用して、ソフトウェアにおいて実装され得る。ラウンドのための命令のセットの一例を、式15において記載する。
式15
#define ROR64(x,b) (((x) >> (b)) | ((x) << (64-(b))))
const uint64_t sbox = 0x3F41B87D026C59EA ULL
state ^= key[i];
state ^= ROR(sbox, (state & 0xF) << 2);
state = ROR(state, 4);
ただし、^=はXOR演算であり、RORは右回転演算であり、&はAND演算であり、<<はビット左シフト演算であり、stateは状態604に対応し、sboxはテーブル620であり、keyは暗号鍵である。
【００６８】
再び、上記のコードは極めて小さく、たとえば、64ビットIntel(登録商標)CPU上で25命令(合計100バイト)である。いくつかの態様では、上記の暗号は、第1の例の暗号よりも高速な暗号化と良い拡散とを有し得る。このより良い拡散は、より少数のラウンドの使用を可能にし得る。しかしながら、以下に示すように、解読におけるラウンド関数はより複雑であり、したがって、一般に、第1の例の暗号における解読におけるラウンド関数よりも低速である。
【００６９】
第2の例の暗号は、フェイステル暗号ではない(Sボックス値を決定するために使用される「分岐」もまた置換される)。加えて、その暗号は、置換-転置ネットワーク(SPN)ではない。
【００７０】
上記の「paul2_encrypt」暗号では、マップx -> x XOR S[X]は全単射であるので、適切なインデックスが復元され得る。しかしながら、元のSボックスが全単射(この例では、単射と等価)であるという性質は、厳密に必要ではない。したがって、いくつかの態様では、非単射Sボックスが非フェイステル構造に適用され得る。
【００７１】
上記の「paul2_encrypt」暗号では、解読は、x + S(x)を与える第2のテーブルを使用する。代替的に、解読および暗号化の役割が交換され得る。たとえば、そのような交換は、暗号化が発生するデバイスよりも計算的に制限されているデバイス上で解読が発生する場合に実施され得る。
【００７２】
第2の例-逆
図6の回転ベース暗号600の逆は、上記で説明したようにSボックスTを使用しながら、逆順であることを除いて、暗号600と同様の演算を実行する。そのような逆暗号は、たとえば、暗号600によって生成された暗号文を解読するために使用され得る。別の例として、逆暗号が、平文を暗号化するために使用され得、暗号600が、得られた暗号文を解読するために使用され得る。
【００７３】
そのような逆暗号関数を用いる(「paul2_decrypt」という名前の)64ビットブロック暗号の擬似コード例が、次に続く。
式16
void paul2_decrypt(uint64_t ciphertext, uint64_t * plaintext, uint64_t key)
{
int i;
uint64_t state, boxvalue;
int shift;
state = ciphertext;
state = state XOR key_i
for (i = ROUNDS - 1; i >= 0; i--)
{
if (i <> ROUNDS-1)
state =  state <<< 4 //回転させる
index = state & 0xF
shift = ((tinv >> (index << 2)) & 0xF) << 2
boxvalue = sbox >>> (shift)
state = state XOR (boxvalue)
state = state XOR key_i //鍵混合
}
* plaintext = state;
}
【００７４】
逆暗号は、回転、XOR、およびビットシフトなどの標準命令を使用して、ソフトウェアにおいて実装され得る。ラウンドのための命令のセットの一例を、式17において記載する。
式17
#define ROL64(x,b) (((x) << (b)) | ((x) >> (64-(b))))
const uint64_t tinv = 0x19cf20d473865aeb ULL
const uint64_t sbox = 0x3F41B87D026C59EA ULL
state = ROL(state, 4);
shift = (tinv >> ((state & 0xF) << 2)) << 2;
state ^= ROR(sbox, shift);
state ^= key[i];
ただし、^=はXOR演算であり、ROLは左回転演算であり、RORは右回転演算であり、&はAND演算であり、>>はビット右シフト演算であり、<<はビット左シフト演算であり、stateは状態604に対応し、sboxはテーブル620であり、keyは暗号鍵である。
【００７５】
追加の態様
本明細書の教示は、本明細書で説明する特定の例のみではなく、一般に「幅広い」Sボックスに適用可能である。たとえば、マスキングは、より小さいサイズに切り捨てるために使用され得る。
【００７６】
開始点がnビットSボックスSである場合、Sボックスは、マッピング、すなわち、x -> S[x+m-1] | ...|  S[x+1] | S[x]によって、mバイトの幅広いSボックスに「拡大」され得、ただし、|は連結である。
【００７７】
mが大きすぎず(たとえば、2^nよりも小さく)、Sが良い算術微分的性質を有する場合、暗号は比較的セキュアであり得る。これは、本質的に上記と同じ構造であるが、「切り捨て」られている。
【００７８】
本明細書の教示は、4ビット入力をもつSボックスに限定されない。たとえば、マッピングは、4ビットからnビットであり得る。特定の例として、4 < n < 64の場合、そのようなマッピングは、マッピング、すなわち、
V  →  nビットに切り捨てられた、ROT(sbox,4*v)  式18
によって達成され得る。
【００７９】
4ビットから16ビットへの切り捨てでは、次のマッピングが使用され得る。
V  →  16ビットワードとして使用された、ROT(sbox,4*v) & 0xFFFF  式19
【００８０】
他のマッピングが、nの他の値のための切り捨てのために使用されることになる。
【００８１】
たとえば、開示する回転ベース暗号のための適用例は、8ビットSボックスに基づく暗号を含む。上記の「paul_encrypt」暗号と同様の方式による128ビットブロック暗号では、16個の連続した値が使用され得る。テーブルを読み取るとき、「ラップアラウンドすること」を回避するために、256バイトテーブルの代わりに、271バイトテーブルが使用され得る。
【００８２】
8ビットSボックスは、256バイトの配列T[0..255]として記憶され得る。したがって、8-32ビットSボックスは、Bruce SchneierのBlowfish、またはCarlisle AdamsおよびStafford TavaresのCAST(CAST 128またはCAST 256)の方式で、
V  →  S[v+3] | S[v+2] | S[v+1] | S[v]  式20
として作成され得る。
【００８３】
ここで、インデックスは、(これは、256*8ビット「sbox」ストリングをとり、それを回転させ、次いで、わずか数ビットを保つことと比較可能である)256を法として解釈されるか、またはテーブル自体が実際に259バイトの長さであり、最後の3バイトが最初の3バイトをレプリケートするかのいずれかであるので、インデックスは256を法としてラップされるべきではない。
【００８４】
ハードウェア実装形態では、(たとえば、インデックスvを毎回増分することによって)同じ回路が並行して、または連続的のいずれかで4回、再使用され得る。
【００８５】
注目すべきことに、BlowfishまたはCAST Sボックスは、回転する値ではなく、完全なテーブルとして生成される。したがって、BlowfishまたはCAST Sボックスは、いくつかの実装形態では、本明細書の教示に従って採用されたSボックスよりもはるかに大きくなり得る。
【００８６】
DESとの比較
上記で説明したように、4ビットSボックスでは、単一の64ビットレジスタが、16個の4ビットエントリを表すために使用され得る。異なるエントリが、レジスタの異なる回転によって取得される。したがって、(たとえば、DESの場合のように)テーブルルックアップを使用するのではなく、置換は、ソフトウェアの観点から、はるかにより効率的な回転演算によって達成される。
【００８７】
4ビットSボックスを使用する一例を続ける。これらのSボックスは、16エントリを有し、したがって、64ビットの情報を含む。マップx -> S[x]は、テーブルルックアップである。すべての64ビットを含むレジスタYを使用することによって、次の式が、上記で説明したように使用され得る。
式21
S[x] = (Y >>> (4*x)) & 0xF、
ただし、「>>>」は右への循環回転を示した。
【００８８】
DES SボックスS0は、4つの全単射4ビットSボックスを使用して構築され得る。第0のSボックスは、次のものによって表される。
式22
x        0 1 2 3 4 5 6 7 8 9 A B C D E F
S00(x)   E 4 D 1 2 F B 8 3 A 6 C 5 9 0 7
【００８９】
DESは、次のようなメモリ常駐テーブルルックアップを伴う。
式23
static const unsigned char S00[16] = {
0xE,0x4,0xD,0x1,0x2,0xF,0xB,0x8,0x3,0xA,0x6,0xC,0x5,0x9,0x0,0x7
}
【００９０】
次いで、DESは、y = S00[x & 0xF]などの置換を実行する。対照的に、本明細書の教示によれば、定数のシフトが代わりに使用される。
式24
y = (0x7095C6A38BF21D4E >> ((x & 0xF) << 2)) & 0xF
【００９１】
ここで、この暗号は、マッピングS'[x] = Y >>> (4*x)を中心に設計される。代替実装形態は、124ビットレジスタZを使用することができ、ただし、Zの最下位64ビットはYであり、Yの最下位60ビットは、Zの上位60ビットにおけるコピーである。S'は、Zの最下位64ビット>> (4x)として実装され得、ただし、「>>」は単純な右シフトである。
【００９２】
有利には、上記の演算は、ソフトウェアにおいて比較的速く実行され得る。大部分のコモディティマイクロプロセッサは、回転距離がレジスタからとられ、すなわち、一定の回転ではなく可変回転である、回転命令を特色とする。ハードウェアでは、上記の演算は、単純なビット選択である。
【００９３】
エンサイファ演算およびデサイファ演算のための例示的な処理回路
上記に鑑みて、いくつかの態様では、本開示は、式10、式12、式15、式17の演算、または本明細書で教示する任意の他の演算を実行する、処理回路に関する。
【００９４】
図7は、暗号文708を生成するために、式10と同様の式706を使用して、平文704に対して演算を行う処理回路702の一例を示す。したがって、図7は、エンサイファ(暗号化)演算に対応する。
【００９５】
図8は、平文808を生成するために、式12と同様の式806を使用して、暗号文804に対して演算を行う処理回路802の一例を示す。したがって、図8は、デサイファ(解読)演算に対応する。
【００９６】
図9は、暗号文908を生成するために、式15と同様の式906を使用して、平文904に対して演算を行う処理回路902の一例を示す。したがって、図9は、エンサイファ(暗号化)演算に対応する。
【００９７】
図10は、平文1008を生成するために、式17と同様の式1006を使用して、暗号文1004に対して演算を行う処理回路1002の一例を示す。したがって、図10は、デサイファ(解読)演算に対応する。
【００９８】
図11は、処理回路702、802、902、または1002によって実装され得る回路1100の非限定的な例を示す。プロセス実行回路1102は、メモリデバイス1104内に記憶された命令の実行を制御する。したがって、現在実行されている命令に応じて、メモリデバイス1104から取り出されたデータに対して演算を行うために、様々な回路が呼び出され得る。図示のように、この回路は、シフト回路1106(たとえば、単純なシフト演算または回転演算を実行する)と、マスク回路1108(たとえば、AND演算を実行する)と、結合回路1110(たとえば、XOR演算を実行する)とを含み得る。
【００９９】
例示的な電子デバイス
図12は、本開示の1つまたは複数の態様による、暗号演算をサポートするように構成された装置1200の図である。装置1200は、通信インターフェース(たとえば、少なくとも1つのトランシーバ)1202と、記憶媒体1204と、ユーザインターフェース1206と、メモリデバイス1208と、処理回路1210とを含む。
【０１００】
これらの構成要素は、図12の接続回線によって概略的に表される、シグナリングバスまたは他の好適な構成要素を介して互いに結合され得、かつ/または互いと電気通信するように配置され得る。シグナリングバスは、処理回路1210の特定の適用例および全体的な設計制約に応じて、任意の数の相互接続バスおよびブリッジを含み得る。シグナリングバスは、通信インターフェース1202、記憶媒体1204、ユーザインターフェース1206、およびメモリデバイス1208の各々が、処理回路1210に結合され、かつ/または処理回路1210と電気通信するように、様々な回路を互いにリンクさせる。シグナリングバスはまた、タイミングソース、周辺装置、電圧調整器、および電力管理回路などの様々な他の回路(図示せず)をリンクさせ得るが、これらの回路は当技術分野でよく知られており、したがって、これ以上は説明しない。
【０１０１】
通信インターフェース1202は、装置1200のワイヤレス通信を容易にするように適合され得る。たとえば、通信インターフェース1202は、ネットワーク内の1つまたは複数の通信デバイスに関して双方向に情報の通信を容易にするように適合された回路および/またはコード(たとえば、命令)を含み得る。通信インターフェース1202は、ワイヤレス通信システム内のワイヤレス通信のための1つまたは複数のアンテナ1212に結合され得る。通信インターフェース1202は、1つまたは複数のスタンドアロン受信機および/または送信機、ならびに1つまたは複数のトランシーバを用いて構成され得る。図示の例では、通信インターフェース1202は、送信機1214および受信機1216を含む。
【０１０２】
メモリデバイス1208は、1つまたは複数のメモリデバイスを表し得る。図示のように、メモリデバイス1208は、暗号情報1218を、装置1200によって使用される他の情報とともに維持し得る。いくつかの実装形態では、メモリデバイス1208および記憶媒体1204は、共通のメモリ構成要素として実装される。メモリデバイス1208はまた、装置1200の処理回路1210または何らかの他の構成要素によって操作されるデータを記憶するために使用され得る。
【０１０３】
記憶媒体1204は、プロセッサ実行可能コードもしくは命令(たとえば、ソフトウェア、ファームウェア)などのコード、電子データ、データベース、または他のデジタル情報を記憶するための1つまたは複数のコンピュータ可読、機械可読、および/またはプロセッサ可読デバイスを表し得る。記憶媒体1204はまた、コードを実行するときに処理回路1210によって操作されるデータを記憶するために使用され得る。記憶媒体1204は、ポータブルまたは固定の記憶デバイスと、光記憶デバイスと、コードを記憶する、含むまたは搬送することが可能な様々な他の媒体とを含む、汎用または専用プロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。
【０１０４】
限定ではなく例として、記憶媒体1204は、磁気記憶デバイス(たとえば、ハードディスク、フロッピーディスク、磁気ストリップ)、光ディスク(たとえば、コンパクトディスク(CD)またはデジタル多用途ディスク(DVD))、スマートカード、フラッシュメモリデバイス(たとえば、カード、スティック、またはキードライブ)、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、プログラマブルROM(PROM)、消去可能PROM(EPROM)、電気的消去可能PROM(EEPROM)、レジスタ、リムーバブルディスク、ならびに、コンピュータによってアクセスされ、読み取られ得るコードを記憶するための任意の他の好適な媒体を含み得る。記憶媒体1204は、製造品(たとえば、コンピュータプログラム製品)において具現化され得る。例として、コンピュータプログラム製品は、パッケージング材料の中のコンピュータ可読媒体を含み得る。上記に鑑みて、いくつかの実装形態では、記憶媒体1204は非一時的(たとえば、有形)記憶媒体であり得る。
【０１０５】
記憶媒体1204は、処理回路1210が記憶媒体1204から情報を読み取り、記憶媒体1204に情報を書き込むことができるように、処理回路1210に結合され得る。すなわち、記憶媒体1204は、少なくとも1つの記憶媒体が処理回路1210と一体である例および/または少なくとも1つの記憶媒体が処理回路1210から分離されている(たとえば、装置1200内にある、装置1200の外部にある、複数のエンティティにわたって分散されている、など)例を含め、記憶媒体1204が少なくとも処理回路1210によってアクセス可能であるように、処理回路1210に結合され得る。
【０１０６】
記憶媒体1204によって記憶されているコードは、処理回路1210によって実行されると、処理回路1210に、本明細書で説明する様々な機能および/またはプロセス動作のうちの1つまたは複数を実行させる。たとえば、記憶媒体1204は、処理回路1210の1つまたは複数のハードウェアブロックにおける動作を統制するように、ならびにそれらのそれぞれの通信プロトコルを利用するワイヤレス通信に対する通信インターフェース1202を利用するように構成された動作を含み得る。
【０１０７】
処理回路1210は、一般に、記憶媒体1204上に記憶されたそのようなコードの実行を含む処理のために適合される。本明細書で使用される「コード」または「命令」という用語は、ソフトウェアと呼ばれるか、ファームウェアと呼ばれるか、ミドルウェアと呼ばれるか、マイクロコードと呼ばれるか、ハードウェア記述言語と呼ばれるか、またはそれ以外で呼ばれるかにかかわらず、限定はしないが、プログラミング、命令、命令セット、データ、コード、コードセグメント、プログラムコード、プログラム、サブプログラム、ソフトウェアモジュール、アプリケーション、ソフトウェアアプリケーション、ソフトウェアパッケージ、ルーチン、サブルーチン、オブジェクト、実行ファイル、実行スレッド、手順、関数などを含むように広く解釈されなければならない。
【０１０８】
処理回路1210は、データを取得し、処理し、かつ/または送り、データのアクセスおよび記憶を制御し、コマンドを発行し、他の所望の動作を制御するように構成される。処理回路1210は、少なくとも1つの例において、適切な媒体によって与えられる所望のコードを実装するように構成された回路を含み得る。たとえば、処理回路1210は、1つもしくは複数のプロセッサ、1つもしくは複数のコントローラ、および/または実行可能なコードを実行するように構成された他の構造として実装され得る。処理回路1210の例は、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)もしくは他のプログラマブル論理構成要素、個別ゲートもしくはトランジスタ論理、個別ハードウェア構成要素、または本明細書で説明する機能を実行するように設計されたそれらの任意の組合せを含み得る。汎用プロセッサは、マイクロプロセッサ、ならびに任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械を含み得る。処理回路1210はまた、DSPとマイクロプロセッサの組合せ、いくつかのマイクロプロセッサ、DSPコアと連携する1つもしくは複数のマイクロプロセッサ、ASICとマイクロプロセッサ、または任意の他の数の様々な構成などのコンピューティング構成要素の組合せとして実装され得る。処理回路1210のこれらの例は説明のためであり、本開示の範囲内の他の好適な構成も企図される。
【０１０９】
本開示の1つまたは複数の態様によれば、処理回路1210は、本明細書で説明する装置のいずれかまたはすべてのための特徴、プロセス、機能、動作および/またはルーチンのいずれかまたはすべてを実行するように適合され得る。処理回路1210に関して本明細書で使用する「適合される」という用語は、本明細書で説明する様々な特徴による特定のプロセス、機能、動作および/またはルーチンを実行するように構成されること、採用されること、実装されること、および/またはプログラムされることのうちの1つまたは複数が行われる処理回路1210を指し得る。
【０１１０】
装置1200の少なくとも1つの例によれば、処理回路1210は、信号を受信するための回路/モジュール1220、状態値を決定するための回路/モジュール1222、回転距離を決定するための回路/モジュール1224、置換ボックス値を回転させるための回路/モジュール1226、結合するための回路/モジュール1228、および信号を生成するための回路/モジュール1230のうちの1つまたは複数を含み得る。
【０１１１】
信号を受信するための回路/モジュール1220は、たとえば、電気信号の形態における平文、暗号文、または他の情報を受信することに関するいくつかの機能を実行するように適合された回路および/またはコード(たとえば、記憶媒体1204上に記憶された、信号を受信するためのコード1232)を含み得る。最初に、信号を受信するための回路/モジュール1220は、受信された情報を取得する。たとえば、信号を受信するための回路/モジュール1220は、このデータを装置の構成要素(たとえば、受信機1216、メモリデバイス1208、または何らかの他の構成要素)から直接取得し得る。いくつかの実装形態では、信号を受信するための回路/モジュール1220は、メモリデバイス1208内の値のメモリ位置を特定し、その位置の読取りを呼び出す。いくつかの実装形態では、信号を受信するための回路/モジュール1220は、受信された情報を処理する。次いで、信号を受信するための回路/モジュール1220は、受信された情報を出力する(たとえば、情報をメモリデバイス1208内に記憶するか、または情報を装置1200の別の構成要素に送る)。
【０１１２】
状態値を決定するための回路/モジュール1222は、たとえば、反復暗号の所与のインスタンスのために使用されるべき状態値を取得することに関するいくつかの機能を実行するように適合された回路および/またはコード(たとえば、記憶媒体1204上に記憶された、状態値を決定するためのコード1234)を含み得る。いくつかの実装形態では、初期状態値が暗号鍵と結合される。状態値を取得すると、状態値を決定するための回路/モジュール1222は、その値が暗号による演算を受けることを可能にする(たとえば、その指示をメモリデバイス1208内に記憶するか、またはその指示を装置1200の別の構成要素に送る)。
【０１１３】
回転距離を決定するための回路/モジュール1224は、たとえば、状態値を決定するための回路/モジュール1222によって決定された状態値から、回転値(すなわち、数)を計算することに関するいくつかの機能を実行するように適合された回路および/またはコード(たとえば、記憶媒体1204上に記憶された、回転距離を決定するためのコード1236)を含み得る。いくつかの実装形態では、これは、状態値のサブセットを取得すること(たとえば、マスクオフすること)、サブセットを拡大すること、および拡大値から少なくとも1つの回転値(たとえば、回転値のセット)を決定することを伴う。状態値を取得すると、回転距離を決定するための回路/モジュール1224は、その値を別の演算に渡す(たとえば、その指示をメモリデバイス1208内に記憶するか、またはその指示を装置1200の別の構成要素に送る)。
【０１１４】
置換ボックス値を回転させるための回路/モジュール1226は、たとえば、回転演算を実行することに関するいくつかの機能を実行するように適合された回路および/またはコード(たとえば、記憶媒体1204上に記憶された、置換ボックス値を回転させるためのコード1238)を含み得る。置換ボックス値を回転させるための回路/モジュール1226は、回転距離と置換ボックス値とを取得し、置換ボックス値を所望のビット数だけ回転(たとえば、シフト)させる。次いで、置換ボックス値を回転させるための回路/モジュール1226は、回転された値を出力する(たとえば、その値をメモリデバイス1208内に記憶するか、またはその指示を装置1200の別の構成要素に送る)。
【０１１５】
結合するための回路/モジュール1228は、たとえば、回転された置換ボックス値を状態値と結合することに関するいくつかの機能を実行するように適合された回路および/またはコード(たとえば、記憶媒体1204上に記憶された、結合するためのコード1240)を含み得る。結合するための回路/モジュール1228は、回転された置換ボックス値と状態値とを取得し、それらの2つの値を結合する(たとえば、XORをとる)。次いで、結合するための回路/モジュール1228は、結合された値を出力する(たとえば、その値をメモリデバイス1208内に記憶するか、またはその指示を装置1200の別の構成要素に送る)。
【０１１６】
信号を生成するための回路/モジュール1230は、たとえば、状態値の後続または最終の反復を生成することに関するいくつかの機能を実行するように適合された回路および/またはコード(たとえば、記憶媒体1204上に記憶された、信号を生成するためのコード1242)を含み得る。いくつかの実装形態では、信号を生成するための回路/モジュール1230は、状態値の反復を暗号鍵と結合する。次いで、信号を生成するための回路/モジュール1230は、その値に対応する信号を生成し、その信号を出力する(たとえば、その値をメモリデバイス1208内に記憶するか、またはその指示を装置1200の別の構成要素に送る)。
【０１１７】
上述のように、記憶媒体1204によって記憶されているコードは、処理回路1210によって実行されると、処理回路1210に、本明細書で説明する様々な機能および/またはプロセス動作のうちの1つまたは複数を実行させる。たとえば、記憶媒体1204は、信号を受信するためのコード1232、状態値を決定するためのコード1234、回転距離を決定するためのコード1236、置換ボックス値を回転させるためのコード1238、結合するためのコード1240、および信号を生成するためのコード1242のうちの1つまたは複数を含み得る。
【０１１８】
例示的なプロセス
図13は、本開示のいくつかの態様による暗号プロセス1300を示す。プロセス1300は、電子デバイス、トランシーバ、または何らかの他の好適な装置内に位置し得る、処理回路(たとえば、図7の処理回路702、図8の処理回路802、図9の処理回路902、図10の処理回路1002、または図12の処理回路1210)内で行われ得る。もちろん、本開示の範囲内の様々な態様では、プロセス1300は、暗号演算をサポートすることが可能な任意の好適な装置によって実施され得る。
【０１１９】
ブロック1302で、第1の信号が受信される。たとえば、処理回路は、メモリデバイスからデータ(たとえば、平文または暗号文)を取り出すことができる。
【０１２０】
ブロック1304で、状態値が、第1の信号に基づいて決定される。
【０１２１】
いくつかの実装形態では、ブロック1306〜1312の動作より前に、暗号にされるべき情報(たとえば、平文または暗号文)が、暗号鍵と結合される。たとえば、(たとえば、暗号化演算のための)いくつかの態様では、ブロック1304における状態値の決定は、暗号鍵と状態値の以前のインスタンスとを結合することによって、状態値の現在のインスタンスを生成することを伴う。本明細書で説明するように、結合することは、XOR演算、加算演算、減算演算、何らかの他の演算、またはこれらの演算のうちの1つもしくは複数の組合せを含み得る。
【０１２２】
いくつかの実装形態では、ブロック1306〜1312の動作より前に、暗号にされるべき情報(たとえば、平文または暗号文)が回転される。たとえば、(たとえば、解読演算のための)いくつかの態様では、ブロック1304における状態値の決定は、状態値の以前のインスタンスを回転させることによって、状態値の現在のインスタンスを生成することを伴う。
【０１２３】
ブロック1306で、回転距離が、状態値に基づいて決定される。たとえば、ブロック1306の演算は、式10の第2の命令において、式12の第2の命令において、式15の第2の命令において、式17の第2の命令および第3の命令において、図5のγ関数510によって、または図6のγ関数610によって、実行されるべき右回転(ROR)の量を決定することに対応し得る。
【０１２４】
ブロック1306の回転距離の決定は、異なる実装形態において異なる方法で実行され得る。いくつかの態様では、回転距離の決定は、状態値のサブセットに基づき得る。いくつかの態様では、回転距離の決定は、状態値からビットのサブセットを選択すること、選択されたビットのサブセットに対応する第1の数を決定すること、置換ボックス値のビット量に対応する第2の数を決定すること、および第1の数に第2の数を乗算することを含み得る。いくつかの態様では、回転距離の決定は、状態値をマスクすること、およびマスクされた状態値をシフトすることを含み得る。いくつかの態様では、回転距離の決定は、シフトされマスクされた状態値に基づいて、第2の値をシフトすること、シフトされた第2の値をマスクすること、およびシフトされマスクされた第2の値をシフトすることをさらに含み得る。
【０１２５】
ブロック1308で、第1の値(たとえば、置換ボックス値)が、ブロック1306で決定された回転距離に基づいて回転される。いくつかの態様では、第1の値は、置換ボックス値(たとえば、Sボックスからの値、Sボックスから導出された値、またはSボックスを生成するために使用された値)であり得る。いくつかの態様では、第1の値は、回転された置換ボックス値と状態値との結合が全単射であるような値を有し得る。いくつかの態様では、第1の値は、全単射であり得る。
【０１２６】
ブロック1308の回転させることは、異なる実装形態において異なる方法で実行され得る。いくつかの態様では、ブロック1308の回転させることは、回転命令を伴い得る。
【０１２７】
ブロック1310で、回転された第1の値が状態値と結合される。いくつかの態様では、ブロック1308の回転させること、およびブロック1310の結合することは、状態値の後続のインスタンス内で、状態値における非線形性を伝え、その結合を拡散することができる。ブロック1308の回転させること、およびブロック1310の結合することは、いくつかの実装形態では、(たとえば、式10、12、15、または17の場合のように)単一の命令において結合され得る。
【０１２８】
ブロック1310の結合することは、異なる実装形態において異なる方法で実行され得る。いくつかの態様では、結合することは、回転された第1の値をマスクすること、および回転されマスクされた第1の値と状態値とを結合することを含み得る。いくつかの態様では、結合することは、回転された第1の値と状態値とを結合することによって、状態値の中間インスタンスを生成することを含み得る。再度、本明細書で説明するように、結合することは、XOR演算、加算演算、減算演算、何らかの他の演算、またはこれらの演算のうちの1つもしくは複数の組合せを含み得る。
【０１２９】
ブロック1312で、第2の信号が、ブロック1310からの回転された第1の値と状態値との結合に基づいて生成される。たとえば、処理回路は、得られた状態値をメモリデバイス内に記憶することができる。
【０１３０】
ブロック1312の信号生成は、異なる実装形態において異なる方法で実行され得る。(たとえば、暗号化演算のための)いくつかの態様では、第2の信号の生成は、状態値の中間インスタンスを回転させることによって、状態値の後続のインスタンスを生成することを含み得る。状態値の中間インスタンスは、置換ボックス値のビット量に基づくビット量だけ回転され得る。(たとえば、解読演算のための)いくつかの態様では、状態値の中間インスタンスの生成は、暗号鍵を、回転された第1の値と状態値との結合と結合することを含み得る。
【０１３１】
破線1314によって表されるように、ブロック1306〜1312の動作は、所望のレベルの拡散およびかく乱が状態値において伝えられるまで繰り返され得る。したがって、回転距離の決定、置換ボックス値の回転、および回転された置換ボックス値と状態値とを結合することが、反復ベースで実行されて、受信された第1の信号に基づいて第2の信号が生成され得る。
【０１３２】
図5とともに上記で説明したように、第1の暗号では、回転距離の決定、第1の値の回転、および回転された第1の値と状態値との結合は、演算s ^= ROR(sbox, (s & M1) << S1) & MASK、およびs = ROR(s, R1)によって実行され得、ただし、^=はXOR演算であり、RORは右回転演算であり、&はAND演算であり、<<はビット左シフト演算であり、sは状態値のインスタンスに対応し、M1は第1のマスク値(たとえば、0xF)であり、MASKは第2のマスク値であり、S1はシフト値(たとえば、2)であり、R1は回転値(たとえば、4)であり、sboxは第1の値のインスタンスに対応する。
【０１３３】
また、図5とともに上記で説明したように、第1の暗号の逆では、回転距離の決定、第1の値の回転、および回転された第1の値と状態値との結合は、演算s = ROL(s, R1)、およびs ^= ROR(sbox, (s & M1) << S1) & MASKによって実行され得、ただし、^=はXOR演算であり、ROLは左回転演算であり、RORは右回転演算であり、&はAND演算であり、<<はビット左シフト演算であり、sは状態値のインスタンスに対応し、M1は第1のマスク値(たとえば、0xF)であり、MASKは第2のマスク値であり、R1は回転値(たとえば、4)であり、S1はシフト値(たとえば、2)であり、sboxは第1の値のインスタンスに対応する。
【０１３４】
図6とともに上記で説明したように、第2の暗号では、回転距離の決定、第1の値の回転、および回転された第1の値と状態値との結合は、演算s ^= ROR(sbox, (s & M1) << S1)、およびs = ROR(s, R1)によって実行され得、ただし、^=はXOR演算であり、RORは右回転演算であり、&はAND演算であり、<<はビット左シフト演算であり、sは状態値のインスタンスに対応し、M1はマスク値(たとえば、0xF)であり、S1はシフト値(たとえば、2)であり、R1は回転値(たとえば、4)であり、sboxは第1の値のインスタンスに対応する。
【０１３５】
また、図6とともに上記で説明したように、第2の暗号の逆では、回転距離の決定、第1の値の回転、および回転された第1の値と状態値との結合は、演算s = ROL(s, R1)、shift = (tinv >> ((state & M1) << S1)) << S2、およびs ^= ROR(sbox, shift)によって実行され得、ただし、^=はXOR演算であり、ROLは左回転演算であり、RORは右回転演算であり、&はAND演算であり、<<はビット左シフト演算であり、>>はビット右シフト演算であり、sは状態値のインスタンスに対応し、M1はマスク値(たとえば、0xF)であり、S1は第1のシフト値(たとえば、2)であり、S2は第2のシフト値(たとえば、2)であり、R1は第1の回転値(たとえば、4)であり、shiftは第2の回転値であり、tinvは逆置換ボックス値であり、sboxは第1の値のインスタンスに対応する。
【０１３６】
図14は、本開示のいくつかの態様による、暗号プロセス1400の別の例を示す。プロセス1400は、電子デバイス、トランシーバ、または何らかの他の好適な装置内に位置し得る、処理回路(たとえば、図7の処理回路702、図9の処理回路902、または図12の処理回路1210)内で行われ得る。もちろん、本開示の範囲内の様々な態様では、プロセス1400は、暗号演算をサポートすることが可能な任意の好適な装置によって実施され得る。
【０１３７】
ブロック1402で、第1のパラメータのための値が受信される。たとえば、暗号デバイスは、暗号化されるべきである平文を受信することができる。別の例として、暗号デバイスは、解読されるべきである暗号文を受信することができる。したがって、この平文または暗号文は、暗号プロセス1400において使用される状態パラメータ(第1のパラメータ)の第1のインスタンスとして働き得る。いくつかの態様では、平文または暗号文が暗号鍵とのXORをとられて、(たとえば、上記の「paul」暗号の場合のように)所与のラウンドのための状態パラメータの第1のインスタンスが与えられ得る。
【０１３８】
ブロック1404で、第2のパラメータが、第1のパラメータの現在のインスタンスのサブセットに基づいて回転される。たとえば、Sボックスベクトル(第2のパラメータ)は、状態パラメータのニブルに基づく量だけ回転され得る。いくつかの態様では、第1のパラメータの現在のインスタンスのサブセットに基づく第2のパラメータの回転は、第1のパラメータの現在のインスタンスから、ビットのサブセットを選択すること、および、選択されたビットのサブセットに、置換ボックスのうちの所与のものにおけるビット量(たとえば、4ビット)に対応する数(たとえば、4)を乗算することを含む。
【０１３９】
ブロック1406で、第1のパラメータの中間インスタンスが、ブロック1404の結果と第1のパラメータの現在のインスタンスとを結合することによって生成される。たとえば、状態パラメータのための新しい値は、Sボックスベクトルと状態パラメータとを結合することによって生成され得る。ブロック1404〜1406の動作は、たとえば、式10の第2の命令において、または式15の第2の命令において実行され得ることを諒解されたい。
【０１４０】
いくつかの態様では、第1のパラメータの中間インスタンスの生成はまた、暗号鍵と状態パラメータのこの新しい値とを結合することを含む(たとえば、式10参照)。ブロック1406の動作のこの態様は、たとえば、図7の式706の第2の命令行、または図9の式906の第2の命令行において示すように実行され得る。
【０１４１】
ブロック1408で、第1のパラメータの後続のインスタンスが、第1のパラメータの中間インスタンスを回転させることによって生成される。たとえば、ブロック1406で生成された状態パラメータのための新しい値は、定義されたビット数だけ回転され得る。いくつかの態様では、第1のパラメータの中間インスタンスは、置換ボックスのうちの所与のものにおけるビット量(たとえば、4ビット)に対応するビット量だけ回転される。ブロック1406の動作は、たとえば、式10の第3の命令において、または式15の第3の命令において実行され得る。
【０１４２】
図15は、本開示のいくつかの態様による、図14の暗号プロセス1400のより詳細な例を与える暗号プロセス1500を示す。プロセス1500は、電子デバイス、トランシーバ、または何らかの他の好適な装置内に位置し得る、処理回路(たとえば、図7の処理回路702、図9の処理回路902、または図12の処理回路1210)内で行われ得る。もちろん、本開示の範囲内の様々な態様では、プロセス1500は、暗号演算をサポートすることが可能な任意の好適な装置によって実施され得る。
【０１４３】
ブロック1502で、状態パラメータが初期化される。たとえば、ブロック1502の動作は、図13のブロック1302の動作に対応し得、それによって、状態パラメータのための初期値が入力値(たとえば、平文または暗号文)に基づく。
【０１４４】
ブロック1504で、状態パラメータのサブセット(たとえば、1ニブル)を除いて、状態パラメータのビットのすべてがマスクオフされる。式10および12に示すように、これは、状態パラメータと値0xFとのANDをとることによって達成され得る。
【０１４５】
ブロック1506で、ブロック1504の結果が、定義された値(たとえば、4)によって乗算されて、第1の回転値が生成される。式10および12に示すように、これは、AND演算の結果を2ビットだけ左にシフトして達成され得る。
【０１４６】
ブロック1508で、Sボックス値(たとえば、ベクトル)が、ブロック1506で生成された第1の回転値によって指定されたビット数だけ右に回転される。
【０１４７】
ブロック1510で、ブロック1508の結果が、状態パラメータと結合されて(たとえば、XORをとられて)、状態パラメータのための更新された値が与えられる。ブロック1504〜1510の動作は、たとえば、式10または式15の第2の命令行において実行され得ることを諒解されたい。
【０１４８】
ブロック1512で、ブロック1510の結果が暗号鍵値と結合されて(たとえば、XORをとられて)、状態パラメータのための別の更新された値が与えられる。ブロック1512の動作は、たとえば、図7の式706の第2の命令行、または図9の式906の第2の命令行において示すように実行され得る。上記で説明した「paul」暗号において示したように、たとえば、状態パラメータは、暗号の他の部分において鍵値とのXORをとられ得る。
【０１４９】
ブロック1514で、ブロック1512の結果が、第2の回転値に従って右に回転されて、暗号の次のラウンドのための状態パラメータの次の反復が与えられる。ブロック1514の動作は、たとえば、式10または15の第3の命令行において実行され得る。
【０１５０】
ブロック1504〜1514の動作は、入力値(平文)に基づいて、暗号化された値(暗号文)を生成するために、または、入力値(暗号文)に基づいて、解読された値(平文)を生成するために、反復ベースで実行される。
【０１５１】
図16は、本開示のいくつかの態様による別の暗号プロセス1600を示す。プロセス1600は、図14のプロセス1400の逆である。たとえば、プロセス1400は暗号化のために使用され得、プロセス1600は解読のために使用され得、またはその逆も同様であり得る。
【０１５２】
プロセス1600は、電子デバイス、トランシーバ、または何らかの他の好適な装置内に位置し得る、処理回路(たとえば、図8の処理回路802、図10の処理回路1002、または図12の処理回路1210)内で行われ得る。もちろん、本開示の範囲内の様々な態様では、プロセス1600は、暗号演算をサポートすることが可能な任意の好適な装置によって実施され得る。
【０１５３】
ブロック1602で、第1のパラメータのための値が受信される。たとえば、暗号デバイスは、解読されるべきである暗号文を受信することができる。別の例として、暗号デバイスは、暗号化されるべきである平文を受信することができる。したがって、この平文または暗号文は、暗号プロセス1600において使用される状態パラメータ(第1のパラメータ)の第1のインスタンスとして働き得る。いくつかの態様では、平文または暗号文が暗号鍵とのXORをとられて、(たとえば、上記の「paul」暗号の場合のように)状態パラメータの第1のインスタンスが与えられ得る。
【０１５４】
ブロック1604で、第1のパラメータの中間インスタンスが、第1のパラメータの現在のインスタンスを回転させることによって生成される。たとえば、状態パラメータの新しい現在の値が、定義されたビット数だけ回転され得る。いくつかの態様では、第1のパラメータの中間インスタンスは、置換ボックスのうちの所与のものにおけるビット量(たとえば、4ビット)に対応するビット量だけ回転される。ブロック1606の動作は、たとえば、式12または17の第1の命令行において実行され得る。
【０１５５】
いくつかの態様では、第1のパラメータの中間インスタンスの生成はまた、暗号鍵と状態パラメータのこの新しい値とを結合することを含む(たとえば、式12参照)。ブロック1604の動作のこの態様は、たとえば、図8の式806の第2の命令行、または図10の式1006の第2の命令行において示すように実行され得る。
【０１５６】
ブロック1606で、第2のパラメータが、第1のパラメータの中間インスタンスのサブセットに基づいて回転される。たとえば、Sボックスベクトル(第2のパラメータ)は、状態パラメータのニブルに基づく量だけ回転され得る。いくつかの態様では、第1のパラメータの現在のインスタンスのサブセットに基づく第2のパラメータの回転は、第1のパラメータの現在のインスタンスから、ビットのサブセットを選択すること、および、選択されたビットのサブセットに、置換ボックスのうちの所与のものにおけるビット量(たとえば、4ビット)に対応する数(たとえば、4)を乗算することを含む。
【０１５７】
ブロック1608で、第1のパラメータの後続のインスタンスが、ブロック1606の結果と第1のパラメータの中間インスタンスとを結合することによって生成される。たとえば、状態パラメータのための新しい値は、Sボックスベクトルと状態パラメータとを結合することによって生成され得る。ブロック1606〜1608の動作は、たとえば、式12の第2の命令行、または式17の第3の命令行において実行され得ることを諒解されたい。
【０１５８】
図17は、本開示のいくつかの態様による、図16の暗号プロセス1600のより詳細な例を与える暗号プロセス1700を示す。プロセス1700は、図15のプロセス1500の逆である。たとえば、プロセス1500は暗号化のために使用され得、プロセス1700は解読のために使用され得、またはその逆も同様であり得る。
【０１５９】
プロセス1700は、電子デバイス、トランシーバ、または何らかの他の好適な装置内に位置し得る、処理回路(たとえば、図8の処理回路802、図10の処理回路1002、または図12の処理回路1210)内で行われ得る。もちろん、本開示の範囲内の様々な態様では、プロセス1700は、暗号演算をサポートすることが可能な任意の好適な装置によって実施され得る。
【０１６０】
ブロック1702で、状態パラメータが初期化される。たとえば、ブロック1702の動作は、図13のブロック1302の動作に対応し得、それによって、状態パラメータのための初期値が入力値(たとえば、平文または暗号文)に基づく。
【０１６１】
ブロック1704で、状態パラメータが、第1の回転値に従って左に回転されて、暗号の次のラウンドのための状態パラメータの次の反復が与えられる。ブロック1704の動作は、式12または17の第1の命令行によって実行され得る。
【０１６２】
ブロック1706で、ブロック1704の結果が暗号鍵値と結合されて(たとえば、XORをとられて)、状態パラメータのための別の更新された値が与えられる。ブロック1706の動作は、たとえば、図8の式806または図10の式1006の第2の命令行において実行され得る。上記で説明した「paul」暗号において示したように、状態パラメータは、暗号の他の部分において鍵値とのXORをとられ得る。
【０１６３】
ブロック1708で、状態パラメータのサブセット(たとえば、1ニブル)を除いて、状態パラメータのビットのすべてがマスクオフされる。式12および17に示すように、これは、状態パラメータと値0xFとのANDをとることによって達成され得る。
【０１６４】
ブロック1710で、ブロック1708の結果が4によって乗算されて、第2の回転値が生成される。式12および17に示すように、これは、AND演算の結果を2ビットだけ左にシフトして達成され得る。
【０１６５】
ブロック1712で、Sボックスベクトルが、ブロック1710で生成された第2の回転値によって指定されたビット数だけ右に回転される。
【０１６６】
ブロック1714で、ブロック1712の結果が、状態パラメータと結合されて(たとえば、XORをとられて)、状態パラメータのための更新された値が与えられる。ブロック1708〜1714の動作は、式12の第2の命令行、または式17の第2の命令行および第3の命令行によって実行され得ることを諒解されたい。
【０１６７】
ブロック1704〜1714の動作は、入力値(暗号文)に基づいて、解読された値(平文)を生成するために、または、入力値(平文)に基づいて、暗号化された値(暗号文)を生成するために、反復ベースで実行される。
【０１６８】
結論
図面に示す構成要素、ステップ、特徴および/または機能のうちの1つまたは複数は、単一の構成要素、ステップ、特徴、または機能に再構成かつ/または結合されてよく、あるいは、いくつかの構成要素、ステップまたは機能に組み込まれてもよい。追加の要素、構成要素、ステップ、および/または機能も、本明細書で開示する新規の特徴から逸脱することなく追加され得る。図に示す装置、デバイス、および/または構成要素は、本明細書で説明する方法、特徴、またはステップのうちの1つまたは複数を実行するように構成され得る。本明細書で説明する新規のアルゴリズムはまた、効率的にソフトウェアで実装されてもよく、かつ/またはハードウェアに埋め込まれてもよい。
【０１６９】
開示した方法におけるステップの具体的な順序または階層は、例示的プロセスの例示であることを理解されたい。設計の選好に基づいて、方法におけるステップの具体的な順序または階層は、再構成され得ることを理解されたい。添付の方法クレームは、様々なステップの要素を例示的な順序で提示したものであり、そのクレーム内で具体的に列挙されない限り、提示された具体的な順序または階層に限定されるものではない。本開示から逸脱することなく、追加の要素、構成要素、ステップ、および/または機能が追加されることもあり、または利用されないことがある。
【０１７０】
本開示の特徴について、いくつかの実装形態および図面に関して説明した場合があるが、本開示のすべての実装形態は、本明細書で説明した有利な特徴のうちの1つまたは複数を含み得る。言い換えれば、1つまたは複数の実装形態について、いくつかの有利な特徴を有するものとして説明した場合があるが、そのような特徴のうちの1つまたは複数は、本明細書で説明した様々な実装形態のいずれかに従って使用されてもよい。同様に、例示的実装形態について、デバイスの実装形態、システムの実装形態、または方法の実装形態として本明細書で説明した場合があるが、そのような例示的実装形態が様々なデバイス、システム、および方法において実装され得ることを理解されたい。
【０１７１】
また、少なくともいくつかの実装形態について、フローチャート、流れ図、構造図、またはブロック図として示されるプロセスとして説明したことに留意されたい。フローチャートは動作を逐次プロセスとして説明する場合があるが、動作の多くを並列にまたは同時に実行することができる。さらに、動作の順序は、並べ替えられてもよい。プロセスは、その動作が完了するときに終了する。いくつかの態様では、プロセスは、方法、関数、手順、サブルーチン、サブプログラムなどに対応し得る。プロセスが関数に対応するとき、その終了は、呼出し側関数またはメイン関数への関数の戻りに対応する。本明細書で説明する様々な方法のうちの1つまたは複数は、機械可読、コンピュータ可読、および/またはプロセッサ可読記憶媒体内に記憶され、1つまたは複数のプロセッサ、機械、および/またはデバイスによって実行され得る、コード(たとえば、命令および/またはデータ)によって、部分的にまたは完全に実装され得る。
【０１７２】
さらに、本明細書で開示した実装形態に関して説明した様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップは、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、またはそれらの任意の組合せとして実装されてもよいことが当業者には諒解されよう。この互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップについて、全般的にそれらの機能に関して上記で説明した。そのような機能がハードウェアとして実装されるかソフトウェアとして実装されるかは、特定の適用例および全体的なシステムに課された設計制約に依存する。
【０１７３】
本開示内で、「例示的」という語は、「一例、事例、または例示としての役割を果たすこと」を意味するために使用される。「例示的」として本明細書で説明する任意の実装形態または態様は、必ずしも本開示の他の態様よりも好ましいまたは有利であると解釈されるべきではない。同様に、「態様」という用語は、説明される特徴、利点、または動作モードを本開示のすべての態様が含むことを必要としない。「結合された」という用語は、本明細書では、2つの物体間の直接的または間接的な結合を指すために使用される。たとえば、物体Aが物体Bに物理的に接触し、物体Bが物体Cに接触する場合、物体Aと物体Cとは、互いに物理的に直接接触していない場合でも、それでも互いに結合されていると見なすことができる。たとえば、第1のダイがパッケージ内の第2のダイに物理的に直接接触していない場合でも、第1のダイは第2のダイに結合されている可能性がある。「回路(circuit)」および「回路(circuitry)」という用語は広義に使用され、電子回路のタイプに関する制限なく、接続され、構成されると、本開示で説明した機能の性能を可能にする電気デバイスおよび導体のハードウェア実装と、プロセッサによって実行されると、本開示で説明した機能の性能を可能にする情報および命令のソフトウェア実装の両方を含むものとする。
【０１７４】
本明細書で使用する「決定する」という用語は、多種多様なアクションを包含する。たとえば、「決定する」ことは、計算すること(calculating、computing)、処理すること、導出すること、調査すること、ルックアップすること(たとえば、テーブル、データベース、または別のデータ構造をルックアップすること)、確認することなどを含み得る。さらに、「決定する」ことは、受信すること(たとえば、情報を受信すること)、アクセスすること(たとえば、メモリ内のデータにアクセスすること)などを含み得る。さらに、「決定する」ことは、解決すること、選択すること、選ぶこと、確立することなどを含み得る。
【０１７５】
上記の説明は、本明細書で説明する様々な態様を、いかなる当業者も実践できるようにするために提供される。これらの態様に対する様々な修正が当業者に容易に明らかになり、本明細書において規定される一般原理は他の態様に適用され得る。したがって、特許請求の範囲は、本明細書に示された態様に限定されるものではなく、特許請求の範囲の文言と整合するすべての範囲を与えられるものであり、単数形の要素への言及は、「唯一の」と明記されていない限り、「唯一の」を意味するものではなく、「1つまたは複数の」を意味するものである。別段に明記されていない限り、「いくつか」という用語は、1つまたは複数を指す。項目のリスト「のうちの少なくとも1つ」を言及する句は、単一のメンバーを含むそれらの項目の任意の組合せを指す。一例として、「a、b、またはcのうちの少なくとも1つ」は、a、b、c、aおよびb、aおよびc、bおよびc、ならびにa、bおよびcを含むものとする。当業者に知られているまたは後で当業者に知られることになる、本開示全体にわたって説明する様々な態様の要素のすべての構造的および機能的等価物は、参照により本明細書に明確に組み込まれ、特許請求の範囲によって包含されるものとする。その上、本明細書において開示されるものは、そのような開示が特許請求の範囲において明示的に列挙されているかどうかにかかわらず、公に供されることは意図されていない。いかなるクレーム要素も、「のための手段」という句を使用して要素が明確に列挙されていない限り、または方法クレームの場合、「のためのステップ」という句を使用して要素が列挙されていない限り、米国特許法第112条第6項の規定に基づいて解釈されるべきではない。
【０１７６】
したがって、本明細書で説明し、添付の図面に示す例に関連する様々な特徴は、本開示の範囲から逸脱することなく、異なる例および実装形態において実装され得る。したがって、いくつかの特定の構成および配置について説明し、添付の図面において図示したが、説明した実装形態への様々な他の追加および変更、ならびに実装形態からの削除が当業者には明らかであるので、そのような実装形態は例示にすぎず、本開示の範囲を制限するものではない。したがって、本開示の範囲は、以下の特許請求の範囲の文言、および法的均等物によってのみ決定される。
【符号の説明】
【０１７７】
100  システム
102  エンサイファ構成要素
104、704、808、904、1008  平文
106、708、804、908、1004  暗号文
108  デサイファ構成要素
200  DESブロック暗号
202、402  入力情報(平文)
204、404  出力情報(暗号文)
206  第1の線形層、線形層
208、406  非線形層
210  第2の線形層、線形層
300、520、620  テーブル
400  AESブロック暗号
408  線形層
500、600  回転ベース暗号、暗号
502、602  サブセット
504、604  現在の状態、状態、64ビット状態
506、606  θ関数
508、608  拡大出力、64ビット拡大出力
510、610  γ関数
524  マスク
512、612  XOR
514、614  回転
516、616  θ記述
518、618  γ記述
702、802、902、1002、1210  処理回路
706、806、906、1006  式
1100  回路
1102  プロセス実行回路
1104  メモリデバイス
1106  シフト回路
1108  マスク回路
1110  結合回路
1200  装置
1202  通信インターフェース
1204  記憶媒体
1206  ユーザインターフェース
1208  メモリデバイス
1212  アンテナ
1214  送信機
1216  受信機
1218  暗号情報
1220  信号を受信するための回路/モジュール
1222  状態値を決定するための回路/モジュール
1224  回転距離を決定するための回路/モジュール
1226  置換ボックス値を回転させるための回路/モジュール
1228  結合するための回路/モジュール
1230  信号を生成するための回路/モジュール
1232  信号を受信するためのコード
1234  状態値を決定するためのコード
1236  回転距離を決定するためのコード
1238  置換ボックス値を回転させるためのコード
1240  結合するためのコード
1242  信号を生成するためのコード
【図１】
2017531209.tif 000003
【図２】
2017531209.tif 000004
【図３】
2017531209.tif 000005
【図４】
2017531209.tif 000006
【図５】
2017531209.tif 000007
【図６】
2017531209.tif 000008
【図７】
2017531209.tif 000009
【図８】
2017531209.tif 000010
【図９】
2017531209.tif 000011
【図１０】
2017531209.tif 000012
【図１１】
2017531209.tif 000013
【図１２】
2017531209.tif 000014
【図１３】
2017531209.tif 000015
【図１４】
2017531209.tif 000016
【図１５】
2017531209.tif 000017
【図１６】
2017531209.tif 000018
【図１７】
2017531209.tif 000019
【国際調査報告】
2017531209.tif 000020
2017531209.tif 000021
2017531209.tif 000022