(57)【要約】  アーベル群Ｎにおける符号化加算用に構成された電子計算デバイス１００が提供される。この計算デバイスは、アーベル群Ｎの符号化された要素を記憶するように設定された記憶装置１４０と、複数の符号化された加数を加算するように構成された加算ユニットであって、複数の符号化された加数のうち少なくとも符号化された部分を含む符号化された要素を形成するように設定されている加算ユニットと、符号化された要素のシーケンスにおいて、２つの符号化された要素をさらなる符号化された要素で置換することにより、符号化された要素を減少させるように構成された減少ユニット１６０とを備える。
2020515093.tif 000002
【特許請求の範囲】
【請求項１】
アーベル群Ｎにおけるホワイトボックス符号化加算用に構成された電子計算デバイスであって、前記電子計算デバイスは、
前記アーベル群Ｎの符号化された要素を記憶するように設定された記憶装置とプロセッサ回路とを備え、前記記憶装置は、
１つ又は複数のタイプの第１の形式であって、前記第１の形式のタイプ（Ｈ（Ｘ，ｂ））が、集合Ｘ、群Ａの要素ｂ、及びマップ［  ］：Ｘ→Ｍによって定義され、
前記集合Ｘの要素ｘが前記アーベル群Ｎの要素π（［ｘ］ｂ）を表現し、
πはアーベル群Ｍから前記アーベル群Ｎへの準同形の全射投影π：Ｍ→Ｎであり、
前記群Ａと群Ｇとは、一緒に、自己同形群Ａｕｔ（Ｍ）のサブ群Ｈを分解し、Ｈ＝ＧＡであり、前記群Ａと前記群Ｇとは、任意の、Ａにおけるａ及びＧにおけるｇについて、ｇａ＝ａｇとなる特性を有し、前記群Ｈが前記集合Ｘに対するアクションを有し、
前記マップ［  ］は、前記マップが定義されている、任意の、Ｘにおけるｘ及びＨにおけるｈについて［ｘｈ］＝［ｘ］ｈとなるような少なくとも部分的なマップ［  ］：Ｘ→Ｍであり、合成π［  ］：Ｘ→Ｎが全射である、第１の形式と、
少なくとも１つのタイプの第２の形式であって、前記第２の形式のタイプ（Ｌ（ｍ，ｂ’））が、前記アーベル群Ｍの要素ｍ及び前記群Ａの要素ｂ’によって定義され、前記群Ｇの要素ｇがアーベル群Ｎの要素π（ｍｇｂ’）を表現する、第２の形式と、
アーベル群Ｎの要素が、符号化された要素のシーケンスとして符号化される第３の形式であって、前記第３の形式の前記シーケンスが、前記第１の形式又は前記第２の形式によって符号化された、少なくとも２つの符号化された要素を含み、符号化された要素の前記シーケンスが、前記シーケンスの前記要素によって表現される前記アーベル群Ｎの前記要素の、前記アーベル群Ｎにおける和を表現する、第３の形式とで符号化された要素を記憶し、
前記プロセッサ回路は、
複数の符号化された加数を加算するように構成された加算ユニットであって、前記複数の符号化された加数のうち少なくとも符号化された部分を含む前記第３の形式の符号化された要素を形成する加算ユニットと、
前記符号化された要素の前記シーケンスにおいて、前記集合Ｘ及び前記群Ａの要素ａｂによって定義されるタイプの前記第１の形式の第１の符号化された要素ｘと、前記アーベル群Ｍの要素ｍ及び前記群Ａの要素ｂによって定義されるタイプの第２の形式の第２の符号化された要素ｇとを、第２の集合Ｙ及び要素ａ’と前記要素ｂの積（ａ’ｂ）によって定義されるタイプ（Ｈ（Ｙ，ａ’ｂ））の前記第１の形式の符号化された要素Ｗ（ｘｇ−１）ｇで置換することにより、前記第３の形式の符号化された要素を減少させる減少ユニットであって、
前記減少ユニットには、第１の集合Ｘから第２の集合Ｙへの関数である減少関数Ｗが備わっており、前記減少関数Ｗが、第１の集合Ｘ、第２の集合Ｙ、Ａの前記要素ａ、Ａの前記要素ａ’、及び前記アーベル群Ｍの前記要素ｍによって定義されるタイプ（（Ｘ，ａ，Ｙ，ａ’，ｍ））を有し、前記減少関数Ｗが、前記マップ［  ］が定義されている、Ｘにおけるｘ、Ａにおけるａ及びａ’、Ｍにおけるｍのすべてについて［ｘａ］＋ｍ＝［Ｗ（ｘ）ａ’］という特性を有する、減少ユニットとで構成されている、電子計算デバイス。
【請求項２】
前記第１の集合Ｘと前記第２の集合Ｙとが同一のものである、請求項１に記載の電子計算デバイス。
【請求項３】
前記記憶装置が、第２の集合Ｙによって定義されるタイプの前記第１の形式の要素、前記群Ａの要素ｂ、及びマップ［  ］：Ｙ→Ｍを含み、前記第２の集合Ｙの要素ｘが前記アーベル群Ｎの前記要素π（［ｘ］ｂ）を表現し、前記マップ［  ］が、前記マップが定義されている、任意の、Ｙにおけるｘ及びＨにおけるｈについて［ｘｈ］＝［ｘ］ｈとなるような少なくとも部分的なマップ［  ］：Ｙ→Ｍであり、合成π［  ］：Ｙ→Ｎが全射である、請求項１又は２に記載の電子計算デバイス。
【請求項４】
前記減少ユニットがもう１つの減少関数Ｗで構成されており、前記第１の形式のタイプ（Ｈ（Ｘ，ａｂ））の符号化された要素が、集合Ｘによって定義され、前記減少ユニットがタイプ（Ｘ，ａ，Ｙ，ａ’，ｍ）の減少関数Ｗで構成されている場合には、前記群Ａの要素ａｂと、前記群Ｍの要素ｍ及び前記群Ａの要素ｂによって定義される前記第２の形式のタイプ（Ｌ（ｍ，ｂ））の符号化された要素とに、互換性があり、前記減少ユニットが、前記第３の形式の符号化された要素のシーケンスにおいて、２つである互換性のある前記第１の形式の符号化された要素と前記第２の形式の符号化された要素とに対して、対応する減少関数を適用する、請求項１乃至３のいずれか一項に記載の電子計算デバイス。
【請求項５】
前記第３の形式の第１の加数が、互換性のない前記第１の形式の符号化された要素と前記第２の形式の符号化された要素とを含み、
第２の加数が、前記第１の加数における前記第１の形式の符号化された要素と互換性のある前記第２の形式の符号化された要素を含む、請求項４に記載の電子計算デバイス。
【請求項６】
前記合成π（［Ｗ（  ）］）がＮ上の全射である、請求項１乃至５のいずれか一項に記載の電子計算デバイス。
【請求項７】
アーベル群Ｎの要素を受け取って、当該受け取った要素を、例えばルックアップ表を使用して、前記第１の形式の、前記第２の形式の、又は前記第３の形式の符号化された要素に変換するように構成されたプレーン入力、及び／又は
前記第１の形式の、前記第２の形式の、又は前記第３の形式の符号化された要素を受け取って、当該受け取った要素をアーベル群Ｎの符号化されていない要素に変換するように構成されたプレーン出力を備える、請求項１乃至６のいずれか一項に記載の電子計算デバイス。
【請求項８】
前記アーベル群ＭとＮとが同一のものであり、前記全射投影πが同一性である、請求項１乃至７のいずれか一項に記載の電子計算デバイス。
【請求項９】
前記アーベル群Ｍ及びＮが、グランドリングの上のモジュールであり、前記群Ｈ、前記群Ｇ及び前記群Ａが前記グランドリングの上のマトリクスの群である、請求項１乃至８のいずれか一項に記載の電子計算デバイス。
【請求項１０】
前記群Ａが対角マトリクス及び／又は反対角マトリクスのみを含むマトリクス群である、請求項１乃至９のいずれか一項に記載の電子計算デバイス。
【請求項１１】
前記アーベル群Ｎが、ｎ≧２について、群
【数１】
2020515093.tif 000048
である、請求項１乃至１０のいずれか一項に記載の電子計算デバイス。
【請求項１２】
前記第１の集合及び／又は前記第２の集合が、前記群Ｈの１つ又は複数のコピーの互いに素の結合である、請求項１乃至１１のいずれか一項に記載の電子計算デバイス。
【請求項１３】
前記プロセッサ回路が、符号化された要素に対して線形演算子を適用するように構成された線形演算子ユニットで構成されている、請求項１乃至１２のいずれか一項に記載の電子計算デバイス。
【請求項１４】
前記群Ｈが前記自己同形群Ａｕｔ（Ｘ）と前記自己同形群Ａｕｔ（Ｍ）との共通のサブ群であるように、前記第１の集合Ｘがアーベル群Ｘである、請求項１乃至１３のいずれか一項に記載の電子計算デバイス。
【請求項１５】
アーベル群Ｎにおけるホワイトボックス符号化加算用に構成された電子計算方法であって、前記電子計算方法は、
前記アーベル群Ｎの符号化された要素を記憶するステップであって、当該記憶するステップは、
１つ又は複数のタイプの第１の形式であって、前記第１の形式のタイプ（Ｈ（Ｘ，ｂ））が、集合Ｘ、群Ａの要素ｂ、及びマップ［  ］：Ｘ→Ｍによって定義され、前記集合Ｘの要素ｘが前記アーベル群Ｎの要素π（［ｘ］ｂ）を表現し、
πはアーベル群Ｍから前記アーベル群Ｎへの準同形の全射投影π：Ｍ→Ｎであり、
前記群Ａと群Ｇは、一緒に、自己同形群Ａｕｔ（Ｍ）のサブ群Ｈを分解し、Ｈ＝ＧＡであり、前記群Ａと前記群Ｇは、任意の、Ａにおけるａ及びＧにおけるｇについて、ｇａ＝ａｇとなる特性を有し、前記群Ｈが前記集合Ｘに対するアクションを有し、
前記マップ［  ］が、前記マップ［  ］が定義されている、任意の、Ｘにおけるｘ及びＨにおけるｈについて［ｘｈ］＝［ｘ］ｈとなるような少なくとも部分的なマップ［  ］：Ｘ→Ｍであり、合成π［  ］：Ｘ→Ｎが全射である、第１の形式と、
少なくとも１つのタイプの第２の形式であって、前記第２の形式のタイプ（Ｌ（ｍ，ｂ’））が、前記アーベル群Ｍの要素ｍ及び前記群Ａの要素ｂ’によって定義され、前記群Ｇの要素ｇがアーベル群Ｎの要素π（ｍｇｂ’）を表現する、第２の形式と、
アーベル群Ｎの要素が、符号化された要素のシーケンスとして符号化される第３の形式であって、前記第３の形式の前記シーケンスが、前記第１の形式又は前記第２の形式によって符号化された、少なくとも２つの符号化された要素を含み、符号化された要素の前記シーケンスが、前記シーケンスの前記要素によって表現される前記アーベル群Ｎの要素の、前記アーベル群Ｎにおける和を表現する、第３の形式とで、前記符号化された要素を記憶するステップと、
複数の符号化された加数を加算するステップであって、加算ユニットが、前記複数の符号化された加数のうち少なくとも符号化された部分を含む前記第３の形式の符号化された要素を形成するように設定されている、加算するステップと、
前記符号化された要素の前記シーケンスにおいて、前記集合Ｘ及び前記群Ａの要素ａｂによって定義されるタイプの前記第１の形式の第１の符号化された要素ｘと、前記アーベル群Ｍの要素ｍ及び前記群Ａの要素ｂによって定義されるタイプの第２の形式の第２の符号化された要素ｇとを、第２の集合Ｙ及び要素ａ’と前記要素ｂの積（ａ’ｂ）によって定義されるタイプ（Ｈ（Ｙ，ａ’ｂ））の前記第１の形式の符号化された要素Ｗ（ｘｇ−１）ｇで置換することにより、前記第３の形式の符号化された要素を減少させるステップとを有し、
減少ユニットには、第１の集合Ｘから第２の集合Ｙへの関数である減少関数Ｗが備わっており、前記減少関数Ｗが、第１の集合Ｘ、第２の集合Ｙ、Ａの前記要素ａ、Ａの前記要素ａ’、及び前記アーベル群Ｍの前記要素ｍによって定義されるタイプ（（Ｘ，ａ，Ｙ，ａ’，ｍ））を有し、前記減少関数Ｗが、前記マップ［  ］が定義されている、Ｘにおけるｘ、Ａにおけるａ及びａ’、Ｍにおけるｍのすべてについて［ｘａ］＋ｍ＝［Ｗ（ｘ）ａ’］という特性を有する、電子計算方法。
【請求項１６】
請求項１５に記載の方法をプロセッサシステムに実施させる命令を表現する一時的データ又は非一時的データを含む、コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子計算デバイス、電子計算方法、及びコンピュータ可読媒体に関する。
【背景技術】
【０００２】
コンピュータでは様々なタスクのために計算が実施される。コンピュータが有限であるので、これらの計算は多くの場合有限群において行われる。これらの群は通常はアーベル群である。群の一例には、
【数１】
2020515093.tif 000003
と表記される、素数を法とする計算がある。コンピュータに関して特に重要な群は、２ｎの要素を伴う群
【数２】
2020515093.tif 000004
である。群は様々なやり方で構築され得、例えば、より大きい群はより小さい群を掛け合わせることによって構築され得る。
【０００３】
いくつかの用途では、プログラムの実行に関する情報を攻撃者から隠すという要求がある。いわゆるホワイトボックス攻撃モデルでは、攻撃者は動作中のコンピュータプログラムの詳細な情報を入手することができると想定される。このモデルであっても、できるだけ攻撃者から隠したいという要求がある。特に、攻撃者から情報を隠すために暗号手法を使用する銀行業務アプリケーション、コンテンツ保護などの機密のアプリケーションは、ホワイトボックスモデルでは脆弱である。例えば、情報を暗号化するのに使用された秘密キーを攻撃者が読み取ると、攻撃者は上記情報を解読することができ、したがって財務報告書、プレーンコンテンツなどを取得してしまう。
【０００４】
現在のホワイトボックス技術を使用して一般的な計算の流れを保護するのは困難である。例えば（参照によって本明細書に含まれる）Ｃｈｏｗらの「Ｗｈｉｔｅ−Ｂｏｘ  Ｃｒｙｐｔｏｇｒａｐｈｙ  ａｎｄ  ａｎ  ＡＥＳ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ」という論文は、ホワイトボックスモデルにおいて特定のアルゴリズム（ＡＥＳ）を保護するやり方を示している。この技術は、汎用コンピュータプログラムを保護するために直接適用されるわけではなく、すなわち、適用するには人によるプログラムの広汎な解析を必要とする。例えば、Ｃｈｏｗらの論文で説明されたタイプの表又は表ネットワークに対する加算又は乗算の演算といった直接的な変換は、攻撃者が、単にどの表ネットワークがアクセスされているかを観察することによって加算又は乗算が実施されたときを推定することを許容してしまう。
【０００５】
残念ながら、攻撃者には、ホワイトボックスの実装形態を攻撃するための多様な選択肢がある。攻撃者は、例えばプログラムにおいて使用される中間値を狙うサイドチャネルタイプ攻撃といったパッシブな攻撃に加えて、アクティブな攻撃を使用することもできる。例えば、攻撃者は、実行中に使用される中間値を作表することができ、実行中に、中間値を、プログラムの異なる位置で観測された中間値又は異なる実行中に観測された中間値と交換する。このように、攻撃者は、中間値に対して使用される符号化に関する情報を学習することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ホワイトボックス耐性のある実装形態においてデータを隠すことを改善するという要求がある。
【課題を解決するための手段】
【０００７】
アーベル群Ｎにおける符号化加算用に構成された電子計算デバイス（１００）が提供される。この計算デバイスは、アーベル群Ｎの符号化された要素を記憶するように設定された記憶装置（１４０）と、複数の符号化された加数を加算するように構成された加算ユニット（１５０）であって、複数の符号化された加数の少なくとも符号化された部分を含む符号化された要素を形成するように設定された加算ユニットと、符号化された要素のシーケンスにおいて、２つの符号化された要素をさらなる符号化された要素で置換することにより、符号化された要素を減少させるように構成された減少ユニット（１６０）とを備える。
【０００８】
要素が、計算デバイスにおいて明示的に表現される必要のない群Ａ又は群Ｍの要素に基づいて符号化されるので、群Ｎの要素が符号化される。しかしながら、これらの要素が符号化されたとしても、この場合は加算である計算は、符号化された形式のまま依然として可能である。これは利点である。その上、計算デバイスには、可変値を互換性のないタイプと交換すると未定義の結果をもたらし、攻撃者が得られる情報がより少なくなるというさらなる利点がある。
【０００９】
本明細書で説明される計算デバイス及び方法は、アーベル群におけるホワイトボックス符号化加算に適するものである。ホワイトボックス符号化加算では、攻撃者が加算に関する詳細を取得するのを困難にする対策が採用されている。取得されるホワイトボックス保護をさらに改善するために、これらのデバイス及び方法は、例えばコード難読化といった既知の難読化技術と組み合わされる。ホワイトボックス符号化加算は、暗号アプリケーションを保護するのに特に適する。例えば、暗号アプリケーションでは、キーはデバイスに備わっていて、例えばキーの不正使用を防止するためにデバイスの攻撃者にはアクセスできないものにするべきである。ホワイトボックス符号化は、非暗号の状況においても適用される。例えば、本明細書で説明されるものなどのホワイトボックス符号化が採用されていると、例えば画像改善アルゴリズムといった著作権付きアルゴリズムをリバースエンジニアリングするのがより困難になる。
【００１０】
本発明による方法は、コンピュータで実施される方法として、コンピュータ上で、専用ハードウェアにおいて、又は両方の組合せにおいて実施される。本発明による方法に関する実行可能コードは、コンピュータプログラム製品に記憶される。コンピュータプログラム製品の例は、記憶デバイス、光記憶デバイス、集積回路、サーバ、オンラインソフトウェアなどを含む。好ましくは、コンピュータプログラム製品は、コンピュータ上で実行されたとき、本発明による方法を実施するための、コンピュータ可読媒体に記憶された非一時的プログラムコードを含む。
【００１１】
好ましい実施形態では、コンピュータプログラムが含むコンピュータプログラムコードは、コンピュータプログラムがコンピュータ上で実行されたとき本発明による方法のステップをすべて実施するように適合されている。好ましくは、コンピュータプログラムはコンピュータ可読媒体上に具現される。
【００１２】
本発明の別の態様は、コンピュータプログラムをダウンロード可能にする方法を提供する。この態様は、コンピュータプログラムが、例えばＡｐｐｌｅ社のＡｐｐ  Ｓｔｏｒｅ、Ｇｏｏｇｌｅ社のＰｌａｙ  Ｓｔｏｒｅ、又はＭｉｃｒｏｓｏｆｔ社のＷｉｎｄｏｗｓ  Ｓｔｏｒｅにアップロードされていて、そのようなＳｔｏｒｅからダウンロード可能なとき使用される。
【００１３】
「Ｅｌｅｃｔｒｏｎｉｃ  ｃａｌｃｕｌａｔｉｎｇ  ｄｅｖｉｃｅ  ｆｏｒ  ｐｅｒｆｏｒｍｉｎｇ  ｏｂｆｕｓｃａｔｅｄ  ａｒｉｔｈｍｅｔｉｃ」という名称の、国際特許出願ＷＯ２０１６／０５０８８４  Ａ１が参照される。
【００１４】
本発明のさらなる詳細、態様、及び実施形態を、図面を参照しながら、例としてのみ説明する。図における要素は簡単さ及び明瞭さのために示されており、必ずしも原寸に比例しない。図では、既に説明された要素に対応する要素は同一の参照数字を有する。
【図面の簡単な説明】
【００１５】
【図１】電子計算デバイスの実施形態の一例を示す概略図である。
【図２ａ】符号化加算の一例を示す概略図である。
【図２ｂ】減少の一例を示す概略図である。
【図３】ＡＥＳ用に構成された電子計算デバイスの実施形態の一例を示す概略図である。
【図４】電子計算方法の実施形態の一例を示す概略図である。
【図５ａ】一実施形態による、コンピュータプログラムを含む書込み可能部分を有するコンピュータ可読媒体を示す概略図である。
【図５ｂ】一実施形態によるプロセッサシステムの表現を示す概略図である。
【図６】図の表現を示す概略図である。
【発明を実施するための形態】
【００１６】
この発明は多くの異なる形式における実施形態の余地があるが、１つ又は複数の特定の実施形態が図面に示されて本明細書で詳細に説明され、本開示は、本発明の原理の例示と見なされるべきであり、本発明を、示されて説明された特定の実施形態に限定するように意図されたものではないという理解を伴う。
【００１７】
以下では、理解のために、実施形態の要素が動作において説明される。しかしながら、それぞれの要素が、実施すると説明されている機能を実施するように構成されていることは明らかであろう。
【００１８】
さらに、本発明は、実施形態に限定されることなく、本明細書で説明されるあらゆる斬新な特徴若しくは特徴の組合せにあり、又は互いに異なる従属請求項において詳述される。
【００１９】
図１は電子計算デバイス１００の実施形態の一例を概略的に示すものである。電子計算デバイス１００はアーベル群Ｎにおける符号化加算用に構成されている。例えば、アーベル群Ｎは
【数３】
2020515093.tif 000005
である。例えば、アーベル群Ｎは
【数４】
2020515093.tif 000006
である。詳細には、アーベル群Ｎは
【数５】
2020515093.tif 000007
又は
【数６】
2020515093.tif 000008
である。後の２つの例は、既存のコンピュータプログラム又はプロトコルなどに生じる普通のデータサイズに対応するものであり、したがって一実施形態による符号化方法に変換するのがより容易になる。
【００２０】
以下では、実行中に、符号化された値が攻撃者によって交換されると、少なくともいくつかの事例ではプログラムが機能不全になって、例えば無意味な結果をもたらすように、アーベル群の要素を符号化するやり方を示す。結果として、攻撃者が使用されている符号化について、アクティブ攻撃、詳細には計算デバイスの実行中に中間値を交換することに基づく攻撃によって学習する範囲は、結果を出す可能性が低下する。
【００２１】
いくつかの実施形態では、以下の数学的オブジェクトのうち１つ又は複数を使用する。
【００２２】
アーベル群Ｍと、ＭからＮへの準同形の全射投影π：Ｍ→Ｎとが定義される。群Ｍはアーベルである。このオブジェクトは任意選択であり、Ｍ＝Ｎを採用する。この場合、投影πは同一性である。より小さい群Ｎを表現するためにより大きい群Ｍを使用することにはいくつかの利点がある。例えば、Ｍは、Ｎの自己同形群よりも大きい自己同形群を有するように選択され得る。その結果、ＮよりもＭに関して、より多くの符号化が直接利用可能である。その上、Ｍは計算を簡単にするように選択され得、例えば、Ｍは、
【数７】
2020515093.tif 000009
といった群の直積でよい。有限的に生成されたアーベル群の基本的な定理は、これが常に可能であることを保証する。例えば
【数８】
2020515093.tif 000010
であり、８４＝３・４・７であるため、
【数９】
2020515093.tif 000011
を選択する。一実施形態では、例えばこの場合は数字ｎであるＭの次数は、少なくとも２、又は少なくとも３などである。
【００２３】
Ｍの自己同形群のサブ群Ｈが選択される。群Ｈは、２つの非自明なサブ群ＧとＡの積と書かれる。すなわちＨ＝ＧＡである。サブ群は、Ａ及びＧにおける任意のａ及びｇに関してｇａ＝ａｇとなる特性を有するように選択される。一実施形態では、簡単にＨ＝Ａｕｔ（Ｍ）が採用される。しかし、Ｈのサブ群をより小さくすることを可能にするには、可能な符号化の選択肢がより少なくなる。特に、例えば非線形演算及び同種のものといった表ルックアップとしていくつかの演算を実施する必要がある場合、これは利点である。
【００２４】
群Ｎ及びＭを加法群と書き、群Ｈ、Ｇ、及びＡを乗法群と書くことにする。しかしながら、当業者には群の書き方は重要ではないことが明らかである。乗法的に書かれた同一の群は、単に異なる語法で加法的に書かれたときも、同じ作用をする。どちらの場合も、この同一性をｅと書くことにする。
【００２５】
群Ｍは（Ｎさえも）グランド（接地）リングの上のモジュールであり、群Ｈ、Ｇ及びＡはグランドリングの上のマトリクスの群である。例えば、Ｍの要素は、群のグランドリングの（場合により、符号化された）要素を用いてベクトルとして書かれる。例えば
【数１０】
2020515093.tif 000012
であれば、Ｍの要素は次数ｎのベクトルとして表現される。この場合、Ｍの自己同形群はｎ×ｎのマトリクスのセットとして書かれる。例えば、正常に機能する群Ａを選択するための簡単なやり方には、例えばそれぞれのマトリクスが対角又は反対角の等しい要素を有するすべての対角マトリクス及び／又は反対角マトリクスのセットを採用することがある。Ｇの要素は、線形方程式としてｇａ＝ａｇの条件を明示することによって見いだされ得る。一実施形態では、Ａは、例えば３次の循環群といった循環群である。一実施形態では、Ａはベキ等である。後の２つの実施形態は、どちらも対角マトリクス及び／又は反対角マトリクスとして実施される。
【００２６】
基底Ｘは集合Ｘ及びマップ［  ］：Ｘ→Ｍとして定義される。マップ［  ］は部分関数であり、例えばある値Ｘにおいて未定義であるが、合成π［  ］：Ｘ→Ｎは全射である。以下の要件が基底として課される。集合ＸはＨアクションを有し、したがって、Ｈにおける任意のｈ１、ｈ２及びＸにおけるｘについて、（ｈ１ｈ２）ｘ＝ｈ１（ｈ２ｘ）、及びｅｘ＝ｘとなる。マップはこのアクションを守り、その結果、関数が定義されていれば、任意のＸにおけるｘ及びＨにおけるｈについて［ｘｈ］＝［ｘ］ｈとなる。
【００２７】
アーベル群Ｎに関して少なくとも１つの基底が定義される。実際には、難読化する有効な符号化は単一の基底を使用して行われる。しかしながら、複数の基底が同様に使用されてもよい。第２の基底はＹとして表され、Ｙのマップ［  ］：Ｙ→Ｍには同一の表記法［  ］が使用されることが状況から明らかであろう。
【００２８】
基底を構築するための実際的なやり方は、Ｈのコピー、又はＨの多重コピーの互いに素の結合である。Ｈの多重コピーの互いに素の結合を表現するやり方の１つには対（ｉ，ｈ）とするものがあり、ここでｉはＨのコピーを表すインデックスであり、ｈはＨの要素である。例えば、ｋ個のコピーが使用される場合、Ｘ＝｛（ｉ，ｈ）：１≦ｉ≦ｋ，ｈ∈Ｈ｝を採用する。必要なＨアクションは普通の群アクションである。例えば、ＸがＨの互いに素のｋ個のコピーであり、ｈがＨの要素であり、ｘ＝（ｉ，ｈ１）がＸの要素であれば、アクションｈｘは（ｉ，ｈｈ１）となる。基底を構築するための別のやり方には、Ｇの多重コピーの１つ又は複数の互いに素の結合、或いはＧ及び／又はＨのコピーの互いに素の結合を得るものがある。例えば、Ｇ∩Ａ＝｛ｅ｝、且つＡ＝｛ａ１，ａ２，．．．，ａｋ｝であれば、Ｈ＝ＧＡ＝Ｇａ１∪Ｇａ２∪．．．∪Ｇａｋであり、したがって上記の構成が使用され得る。部分関数を回避するために、マップ［  ］を、定義されていない場合は常に、ランダムな値に設定する。正確な実行では、マップが定義されていない値は使用されない。
【００２９】
少なくとも１つの減少関数Ｗが定義され、関数Ｗは第１の集合Ｘから第２の集合Ｙへの関数であり、タイプ（（Ｘ，ａ，Ｙ，ａ’，ｍ））を有する。減少関数は「ボックス」関数とも名付けられる。減少関数のタイプは、第１の集合Ｘ、第２の集合Ｙ、Ａの要素ａ、Ａの要素ａ’、及び群Ｍの要素ｍを含む。減少関数Ｗは、マップ［  ］が定義されている、Ｘにおけるｘ、Ａにおけるａ及びａ’、Ｍにおけるｍのすべてについて［ｘａ］＋ｍ＝［Ｗ（ｘ）ａ’］という特性を有する。左側の［  ］はＸからＭへのマップであり、右側の［  ］はＹからＭへのマップであることに留意されたい。減少関数の定義では、第１の集合Ｘと第２の集合Ｙが同一であることが許される。複数の減少関数が定義される。集合Ｘ及びＹに対してマップ［  ］が一旦固定されると、そこから減少関数Ｗが計算されることに留意されたい。例えば、Ｘにおけるｘを所与として、Ｍの要素である（［ｘａ］＋ｍ）ａ’−１が計算される。Ｙのマップ向けにこの要素を反転するとＷ（ｘ）向けの値が得られ、複数解があり得ることに留意されたい。減少関数Ｗは部分関数でもあり得るが、合成π（［Ｗ（  ）］）はＮ上の全射である。
【００３０】
次にアーベル群Ｎの要素の符号化を定義することができる。群要素は３つの主要なやり方又は形式で符号化され得る。第１の形式及び第２の形式には複数のタイプがある。第３の形式は第１の形式と第２の形式のハイブリッドである。
【００３１】
第１の形式では、アーベル群Ｎの要素は、計算デバイスにおいて集合Ｘの要素として表現される。第１の形式はフックとも呼ばれる。フックは、集合Ｘによって定義されるタイプと、群Ａの要素ｂとを有する。フックのタイプはＨ（Ｘ，ｂ）と表される。タイプＨ（Ｘ，ｂ）の要素ｘはアーベル群Ｎの要素π（［ｘ］ｂ）を表現する。本明細書では集合Ｘは基底である。単一の基底Ｘに対しても、Ａの要素ｂを変化させることによって様々なタイプのフックが定義され得ることに留意されたい。複数の集合が可能であれば、タイプの数がさらに増加する。プログラムにおいて要素ｘが生じても、攻撃者は、値ｂを知らなので、要素ｘが表現するＮにおける値を知り得ないことに留意されたい。値ｂがプログラムのどこかに生じる必要はない。
【００３２】
第２の形式では、アーベル群Ｎの要素は、計算デバイスにおいて群Ｇの要素として表現される。第２の形式はリンクとも呼ばれる。リンクは、Ｍの要素ｍ及びＡの要素ｂ’によって定義されるタイプを有する。リンクのタイプはＬ（ｍ，ｂ’）と表される。例えばＧの要素ｇであるタイプＬ（ｍ，ｂ’）の要素ｇは、Ｎの要素π（ｍｇｂ’）を表現する。
【００３３】
第３の形式では、アーベル群Ｎの要素は、符号化された要素のシーケンスとして符号化され、第３の形式のシーケンスは、第１の形式又は第２の形式によって符号化された、少なくとも２つの符号化された要素を含む。第３の形式は、符号化された要素を含む形式和又は集合として実施される。符号化された要素は、第１の符号化及び第２の符号化によって符号化されている。符号化された要素のシーケンスは、シーケンスの要素によって表現されるアーベル群Ｎの要素の、アーベル群Ｎにおける和を表現する。第３の形式の符号化は例えば形式和と称される。一実施形態では、形式和は、２つの符号化された要素を非常に直接的に加算する。２つの加数を単純に結合するか又は連結して、第３の形式で符号化された加算を得ることができる。
【００３４】
例えば、第１のオペランドはフック及びゼロ以上のリンクの第１のシーケンスとして表現され、フックのタイプ及びリンクは異なるものであり得る。第１のオペランドによって表現されるＮの要素は、第１のシーケンスにおけるフック及びリンクによって表現されるＮの要素の和である。第２のオペランドは、少なくとも１つのリンクの第２のシーケンスとして表現される。第２のシーケンスにおけるリンクのタイプは異なり得る。第２のオペランドによって表現されるＮの要素は、第２のシーケンスにおけるリンクによって表現されるＮの要素の和である。第１のオペランドと第２のオペランドの和は、第１のシーケンスのフック及びゼロ以上のリンク並びに第２のシーケンスのリンクを含む第３のシーケンスによって表現される。
【００３５】
減少関数を使用すると、いくつかの対のフック及びリンクを減少することができる。しかしながら、フックとリンクとのすべての対が削減可能であるわけではなく、削減可能なすべての対は同一の減少関数により削減可能でなければならない。減少ステップは、第３のシーケンスにおけるタイプＨ（Ｘ，ａｂ）のフックｘ及びタイプＬ（ｍ，ｂ）のリンクｇをタイプＨ（Ｘ，ａ’ｂ）のフックＷ（ｘｇ−１）ｇで置換することにより、第３のシーケンスに対して適用される。これはタイプ（Ｘ，ａ，Ｙ，ａ’，ｍ）の減少関数Ｗを必要とする。攻撃者がデータを交換すると、入れ替えられたデータ要素がもはや特定の減少関数の正確なタイプではないという見込みがかなりある。その結果、プログラムは未定義値を作成する。
【００３６】
第３の形式要素に対して減少演算を適用した結果、同一の値を表現する第１の形式又は第３の形式の新規の符号化された要素を得ることを、数学的に検証することができる。
【００３７】
このように、Ｎの要素は、第１又は第２の形式によってそれぞれ異なるタイプで符号化され、或いは第１の形式の符号化された要素及び／又は第２の形式の符号化された要素のうちの１つ又は複数のシーケンスとして符号化される。減少ユニットがタイプ（Ｘ，ａ，Ｙ，ａ’，ｍ）の減少関数Ｗで構成されている場合、集合Ｘによって定義される第１の形式のタイプ（Ｈ（Ｘ，ａｂ））の符号化された要素と、群Ｍの要素ｍ及び群Ａの要素ｂによって定義される群Ａの要素ａｂ及び第２の形式のタイプ（Ｌ（ｍ，ｂ））の符号化された要素とは、互換性がある。この場合、フック及びリンクは、例えば新規のフックによって交換されることにより、新規のフックへと減少される。リンクは、Ｎの同一性を表現するフックを加算することによってフックに変換され得る。そのようなフックはあらかじめ計算することができる。２つのフックの加算は、より複雑である。加算は、例えば、フックをリンクに変換するルックアップ表を得ることにより、又はフックなしでリンクのみを含む第３の形式の符号化によって、行われ得る。
【００３８】
一実施形態では、様々な集合及び群の値、詳細には基底Ｘの要素又は群Ｇの要素は、従来の符号化された形式で表現される。それらは、例えば、群のより大きなセットにおけるインデックスとして符号化される。例えば、上記の減少を実行するために、例えば集合Ｘにおけるインデックスといったｘの従来の符号化であるｘの表現を採用するルックアップ表を使用して、値ｘｇ−１を計算してよい。この結果が、Ｗに関するルックアップ表に対して提示される。最後に、例えば第３のルックアップ表を使用してｇとの乗算が実施されてよい。第１のルックアップ表と第２のルックアップ表が、又はすべての３つの表などが、単一の表へと組み合わされてよいことに留意されたい。例えば、単一の表が、ｘ及びｇの表現を入力として採用する。インデックス表現はランダム化されてよく、インデックスの値と表現されたＸ又はＧの要素との間に論理関係がなくてもよいことに留意されたい。例えば、Ｘ及び／又はＧに対してランダム置換が適用され、その後、要素は、置換された集合又は群におけるインデックスとして表現される。
【００３９】
図１に戻る。計算デバイス１は、アーベル群Ｎの符号化された要素を記憶するように設定された記憶装置１３０を備える。記憶装置は、３つの形式のうちいずれかによって符号化された要素を含み得る。
【００４０】
図１に示された記憶装置１４０は、フックとしても知られている第１の形式の３つの要素を含む。例えば、フック１１２とフック１１４は同一のタイプＨ（Ｘ，ｂ）を有し得るが、フック１１６は、Ｙが異なる基底であり、且つ／又はｃがＡの異なる要素であるという状況で、例えばＨ（Ｘ，ｃ）又はＨ（Ｙ，ｃ）といった異なるタイプを有し得る。
【００４１】
図２に示された記憶装置１４０は、リンクとしても知られている第２の形式の３つの要素を含む。例えば、リンク１２２及びリンク１２４はＬ（ｍ，ｂ’）のタイプでよいが、リンク１２６は例えばタイプＬ（ｍ，ｂ’’）及び／又はＬ（ｍ’，ｂ’’）などの異なるタイプを有し得る。
【００４２】
図２に示された記憶装置１４０は、第３の形式の３つの要素を含む。第３の形式の要素は、フック及び／又は複数のリンクをつなぎ合わせるものである。２つのフックに関する減少は、１つのフック及び１つのリンクに関する減少よりも複雑なので、第３の形式の符号化された要素は高々１つしかフックを含まないのが望ましい。例えば、符号化された要素１３１は、例えば互換性のないフックとリンクといったフックとリンクの和である可能性がある。例えば、符号化された要素１３２は、例えばタイプの異なるリンクとリンクの和である可能性がある。計算デバイスは、アプリケーションに依拠して、第３の形式が２つ以上のフックを含むことを可能にする。例えば、異なるソースからのデータを加算する必要がある場合、単一の第３の形式の符号化された要素が２つのフックを有するのを回避するのは困難であろう。他方では、符号化された計算が、例えばコンパイラ又は人間のコーダによる単一の制御下で完全に行われる場合、全体で２つのフックを有する第３の形式の符号化された要素を有するのを回避することが可能になる。例えば、一実施形態では、ほとんどの符号化された要素はリンクのみから成る符号化された第２又は第３の形式であり、フックを含むのは、これらの符号化されたリンクのみの要素が加算されるアキュムレータのみである。その場合、減少が行われるのはアキュムレータにおいてのみである。加算については、例えば連結といった加数の単なる結合であるので、要素のタイプ又は形式は重要ではないことに留意されたい。
【００４３】
計算デバイス１００は、複数の符号化された加数を加算するように構成された加算ユニット１５０をさらに備える。例えば、加算ユニット１５０は、例えば加算するための入力といった２つの加数を加算するように構成され、且つ／又は３つ以上の要素を加算するように構成されている。興味深いことに、このシステムでは、加算は意外にも簡単である。２つの数字を加算するには、加数の符号化された要素を含む第３の形式の要素を作成すれば十分である。第３の形式の要素は、それが含む符号化された要素のアーベル群Ｎにおける和を表現すると定義されるので、加数の結合は、例えば加算される値である加数の和を自動的に表現する。群Ｎがアーベルであるため、第３の形式のコンポーネントが列記される順序は無関係であり、例えば第１又は第２の形式の要素である第３の形式の要素のコンポーネントが列記されるいかなる順序も、同一の加算結果を表現する。
【００４４】
例えば、加算ユニット１５０は、記憶装置１４０から第１の加数及び第２の加数を取り出して、加算結果を第３の形式で記憶装置１４０に書き込むように構成される。例えば、第３の形式は、リンクのリスト又は配列などとして実施される。例えば、前者の場合には、例えば加数に含まれる第１又は第２の形式の符号化された要素である加数のコンポーネントに対するポインタを生成すれば十分であるため、加算結果は加数のコンポーネントをコピーする必要はない。それにもかかわらず、ポインタが使用される場合には入力コンポーネントのコピーも作成される。
【００４５】
図２ａは、符号化された要素に加算するやり方を概略的に図示するものである。図２ａには、要素２１０及び要素２２０といった、第３の形式の２つの符号化された要素が示されている。それぞれの要素が、第１又は第２の形式の複数の符号化された要素を含む。例えば、第３の形式の要素２１０は符号化された要素２１２及び２１４を含む。例えば、要素２１４はフックであり、要素２１２はリンクである。例えば、第３の形式の要素２２０は、符号化された要素２２２、２２４、及び２２６を含み、例えばこれらのすべてがリンクである。このようにしてフックを互いに加算することが禁止されていないので、この加算機構は非常に柔軟である。しかしながら、２つのフックの減少は、高々１つのフックを含む第１の／第２の又は第３の形式の要素に対して、例えば２つのフックの組合せをマッピングする表、又はいくつかのタイプの少なくとも２つのフックといった、追加のインフラストラクチュアを必要とする。例えば、第１のフック及び第２のフックの加算表が含まれるのは、第１のフックが特定の第１のタイプであって第２のフックが特定の第２のタイプである場合のみである。そのような１つ又は少数の表により、要素を加算する範囲が既にかなり大きくなっているはずである。減少システムを用いると、例えばゼロを表現する既知の値及びタイプのリンクを加算することにより、フックのタイプを変更し得ることを特に考慮に入れる。
【００４６】
図２ａは、加数２１０と加数２２０の加算、すなわち加算結果２３０をさらに示すものである。結果２３０は第３の形式の要素でもあり、加数２１０及び２２０における要素を含む。
【００４７】
図１に戻る。計算デバイス１００は、第３の形式の符号化された要素を減少するように構成された減少ユニット１６０をさらに備える。減少なしでは加算結果がますます長くなってしまうが、減少は第３の形式の表現を短くする。減少ユニット１６０は、第３の形式の符号化された要素のシーケンスにおいて、フック及びリンクを新規のフックで置換し、元のフック及びリンクを置換するように構成されている。その結果、表現が、１つのコンポーネント分、より短くなる。その上、減少の結果として、第３の形式の要素におけるフックの数は変化しない。詳細には、すべての要素が最大数のフック（詳細には高々１つのフック）を含む場合、この不変量は減少演算によって尊重される。興味深いことに、任意のフックとリンクの組合せに対して同一の減少演算が必ずしも作用するわけではなく、むしろ、減少演算は、例えばフックのタイプ及びリンクのタイプといった入力のタイプに対して要件を適用する。これは、減少が互換性のないタイプを用いて試行されるので、一実施形態による動作中のコンピュータプログラムにおいて再構成されたデータは、恐らく無意味な結果もたらすことを意味する。
【００４８】
減少ユニット１６０には減少関数Ｗが備わっている。例えば、減少ユニット１６０は減少関数Ｗのユニットを含む。例えば、減少ユニット１６０は、減少関数を実施するコンピュータプログラムコードを含む。例えば、減少関数Ｗはルックアップ表として実施される。
【００４９】
減少関数Ｗは、第１の集合Ｘから第２の集合Ｙへの関数であり、第１の集合Ｘ、第２の集合Ｙ、Ａの要素ａ、Ａの要素ａ’、及び群Ｍの要素ｍによって定義されるタイプ（（Ｘ，ａ，Ｙ，ａ’，ｍ））を有する。減少関数のタイプは、減少関数によって減少され得るフックとリンク組合せと、結果として生じるフックのタイプを判定するものである。関数Ｗは、マップ［  ］が定義されている、Ｘにおけるｘ、Ａにおけるａ及びａ’、Ｍにおけるｍのすべてについて［ｘａ］＋ｍ＝［Ｗ（ｘ）ａ’］という特性も有する。
【００５０】
減少ユニット１６０は、
−  集合Ｘによって定義されるタイプの第１の形式の第１の符号化された要素ｘ及び群Ａの要素ａｂと、
−  群Ｍの要素ｍによって定義されるタイプの第２の形式の第２の符号化された要素ｇ及び群Ａの要素ｂとを得るように構成されている。
【００５１】
言い換えれば、フックのタイプを定義するＡの要素は、リンクのタイプを定義するＡの要素のａ倍程度である。
【００５２】
減少ユニット１６０は、入力として取得されたフック及びリンクを、例えば第２の集合Ｙによって定義されるタイプ（Ｈ（Ｙ，ａ’ｂ））のフックＷ（ｘｇ−１）ｇといった第１の形式の符号化された要素及び要素ａ’と要素ｂの積（ａ’ｂ）で置換する。
【００５３】
計算ユニット１００は、加算ユニット１５０のそれぞれの加算の後に減少ユニット１６０を活性化するように構成されている。これによって、第３の形式の要素ができるだけ短く保たれる。減少は、それ以上の減少が不可能になるまで複数回適用される。或いは、計算ユニット１００は、例えば所定回数である複数の加算が実施された後まで減少を先送りするようにも構成される。例えば、数が、例えばフック及び／又はリンクである若干のコンポーネント以上であると、計算デバイス１００は減少を適用する。例えば、減少は、４つ以上のフック及び／又はリンクを有する任意の第３の形式の要素に対して適用される。４つという数は、２つ以上、３つ以上などでもよい。
【００５４】
興味深いことに、一実施形態では、記憶装置１４０は、互換性がなく、例えば適合する減少ユニット１６０の減少関数がない、第１の形式の符号化された要素及び第２の形式の符号化された要素を含む第３の形式の第１の加数を記憶することがある。したがって、この第２の形式はさらに減少することができない。記憶装置１４０は、第１の加数における第１の形式の符号化された要素と互換性のある第２の形式の符号化された要素を含んでいる第２の加数をさらに含み得る。これら第１の加数と第２の加数が加算された後に、互換性のあるフック及びリンクを含んでいる第３の形式がもたらされる。第１の加数と第２の加数の和に対して減少ユニットが適用され得て、より短い第３の形式がもたらされる。攻撃者が、悪意を持って、第１の加数又は第２の加数を、プログラムのどこか他のところに見られる数字と交換した場合には、それらは不適当なタイプであり得る。そこで、結果として生じる加算は偽りの結果をもたらすことになる。或いは、交換によって未定義値がコールされる場合、これは、例えば所定値といったランダム値の代用により、又は、場合により、例えばエラーメッセージ、クラッシュなどの他の未定義動作を生成することによってさえ、解決される。ランダム値又は何か所定の非ランダム値などを代用することの利点は、攻撃者が、交換が不当だったかどうかということに関するフィードバックを受け取らないことである。
【００５５】
図２ｂは、減少プロセスを実施するためのやり方を概略的に示すものである。図２ｂには、図２ａに関して与えられた例から取得された加算結果２３０が示されている。加算結果２３０は、フック２１４及び互換性のあるリンク２２６を含む。減少プロセスは、フック２１４及びリンク２２６を新規のフック２４２で置換する。減少結果２３１は、新規のフック２４２と、加算結果２３０にもあったリンク２１２、２２２及び２２４とを含む。減少結果２３１には、フック２１４及びリンク２２６がない。
【００５６】
フックとチェーンとの加算は、より長いチェーンを作成する、両方のオペランドの形式的な加算でしかない。減少ステップは、少なくとも１つのリンクを有するフックに対して適用され、フックをこのリンクと組み合わせる。減少経路は、いくつかのリンクを有するフックが減少され得る正確な順序であり、例えばチェーンＨ＋Ｌ１＋Ｌ２＋Ｌ３を検討する。減少経路は、（１，３，２）及び他のもの（３，１，２）とする。これらの経路は、演算の順序が、
−  減少経路（１，３，２）については、
１．  Ｈ＋Ｌ１→Ｈ’
２．  Ｈ’＋Ｌ３→Ｈ’’
３．  Ｈ’’＋Ｌ２→Ｈ’’’であり、
−  減少経路（３，１，２）については、
１．  Ｈ＋Ｌ３→Ｋ’
２．  Ｋ’＋Ｌ１→Ｋ’’
３．  Ｋ’’＋Ｌ２→Ｈ’’’
であることを意味する。
【００５７】
第１の場合の結果はＨ’’’であり、第２の場合の結果はＫ’’’である。どちらもＭにおける同一の要素を表現しているが、減少経路が異なる軌跡を辿ったので、恐らくタイプは異なる。一般に、多くのタイプがある状況では、各減少経路がタイプにおける同一の起点及び終端を有するとしても、固有の結果をもたらす可能性は低い。
【００５８】
減少経路が、場合によっては、例えば第１の形式の要素に対して完全なものではない部分的減少である可能性があり、これは、リンクのいくつかが、さらなる減少又は演算の余地があるので、結果がすべてのリンクを削除するわけではないことを意味することに留意されたい。
【００５９】
興味深いことに、Ｍ又はＡの要素はプログラムの中で表現される必要はなく、この態様は非常に望ましいものである。これらの要素は、仮想要素又は「架空の」要素と見なされ、例えばコンピュータプログラムといった実装形態、又は、結果が正確であることを示す、プログラムに出現することのない正当性の証明において、暗黙的にのみ使用される。プログラムはＸの要素及びＧの要素を有する。これらは、例えば従来のやり方といった様々なやり方でも符号化され得る。
【００６０】
設計によって、すべての可能な加算が減少され得るわけではない。減少が可能であっても、減少が可能であることを保証するために正確な順序が必要である。場合によっては、リンク及び／又はフックを、同一の値を表現するが異なるタイプを有する他のものに変換することに関心がある場合がある。これはジャンプと呼ばれる。例えばｇ１ａ１＋．．．＋ｇｋａｋ＝ＩｄＭとなるようなＧの要素ｇ１、．．．、ｇｋ及びａ１、．．．、ａｋを想定すると、後者の要素は主対角線上のもののみを有する同一性マトリクスである。値ｍｇａを有するリンクを所与として、ｍｇａ＝ｍｇａ・ＩｄＭ＝ｍｇａ（ｇ１ａ１＋．．．＋ｇｋａｋ）＝ｍｇｇ１ａ１ａ＋．．．＋ｍｇｇｋａｋａを計算することができる。後者は、タイプが異なるリンクの和と見なすことができる。このようにして、単一のリンクが、例えば少なくとも２つといった複数の、タイプの異なる新規のリンクに拡張される。新規のリンクは他のフックと組み合わされ得る。例えば、この機能を用いて減少ユニット１６０が拡張されてよく、又はこの拡張用に構成された新規の拡張ユニットが導入されてもよい。
【００６１】
図１に戻る。計算デバイス１００は、任意選択の入力ユニット及び／又は任意選択の出力ユニットを備える。図１に示された実施形態では、組み合わされた入出力ユニット１７０が示されている。一実施形態では、個別の入力ユニット及び出力ユニットが使用される。
【００６２】
例えば、Ｉ／Ｏユニット１７０は、プレーン入力がアーベル群Ｎの要素を受け取り、例えばルックアップ表を使用して、受け取った要素を第１、第２、又は第３の形式の符号化された要素に変換するように構成されるプレーン入力で構成されている。例えば、Ｉ／Ｏユニット１７０は、プレーン出力が第１、第２、又は第３の形式の符号化された要素を受け取り、受け取った要素をアーベル群Ｎの符号化されていない要素に変換するように構成されるプレーン出力で構成されている。この状況では、「符号化されていない」は、第１、第２、又は第３の形式によって符号化されていないことを意味する。入力及び出力は、外部符号化方式によって確実に符号化される。
【００６３】
例えば、入力及び／又は出力は、群Ｎの１つ又は複数の要素を、例えば群Ｎのいくつかの標準的な表現で、例えば係数を法とする整数として、例えばコンポーネントのような係数を法とするベクトルとしてなど、プレーン形式で受け取るか又は生成する。例えば、入力及び／又は出力は、例えば群Ｎにおけるインデックスとして、詳細には群Ｎが例えば群Ｎの符号化といった何かの符号化置換で置換された後に、群Ｎの１つ又は複数の要素を符号化された形式で受け取るか又は生成する。使用される符号化は、群Ｎの等しい要素が常に同一の符号化に対応するのを回避するために、例えば状態といったある形式の機知を含む。
【００６４】
入力又は出力は、ルックアップ表によって好都合に符号化される。例えば、入力では、Ｎの入力要素が、いくつかの同一の要素の、第１、第２、又は第３の形式の表現にマッピングされる。同一の要素を表現するための複数のやり方がある。出力では、表が、第１、第２、又は第３の形式の要素を出力にマッピングする。これが必ずしも必要とは限らず、例えばデータが同一の計算デバイスによって後に使用するように記憶される場合には、第１／第２／第３の形式の符号化はそのままでよいことに留意されたい。表を小さく保つために、要素を出力用に変換する前に減少が適用されるのが望ましい。
【００６５】
計算デバイス１００は、任意選択で線形演算子ユニット１８０を備える。線形演算子ユニット１８０は、符号化された要素に線形演算子を適用するように構成されている。第３の形式の符号化された要素に適用される線形演算子は、第３の形式の符号化された要素におけるフック及びリンクに個々に適用される線形演算子と等しいものである。例えばｆ：Ｍ→Ｍ、又はＮからＮといった線形演算子は、ｆ（Ｌ１＋Ｌ２＋．．．＋Ｌｔ）＝ｆ（Ｌ１）＋ｆ（Ｌ２）＋．．．＋ｆ（Ｌｔ）という特性を有し、したがって、例えばＧの要素といった所与のリンクがＧの要素によって表現されることを再呼出しする表を得るのに十分なものであり、このリンクにわたって、ｆの値をリンクの和として与える。代表例には、Ｇ→ＧｘＧｘＧによって与えられる線形マップがある。特にＸがＧの多重コピーによって与えられ、Ｇ→Ｇｔの表はｔ｜Ｇ｜ｌｏｇ２（｜Ｇ｜）というサイズを有するが、Ｇｔ→Ｇｒの表は、ｒ｜Ｇ｜ｔｌｏｇ２（｜Ｇ｜）という、指数ｔのためにはるかに大きいサイズを有する、Ｘから他の集合への表と比較して、一般にＧがＭよりも小さく、これらの表は特に大きいものではない。
【００６６】
一実施形態では、線形演算子ユニット１８０は、例えば第２の形式の要素又は第３の形式のリンクのみの要素といったリンクに線形演算子を適用するように制限される。線形演算子を適用しなければならないときには、リンクを使用する方がよい。減少する必要があるときには、フックのみ使用するのが望ましい。例えば、ＡＥＳでは、フックが与えられると、Ｓ−Ｂｏｘの出力をリンクのセットとして与える、Ｓ−Ｂｏｘを使用して、ＭｉｘＣｏｌｕｍｎによって表現される線形演算子を作成し、ラウンドの最後においてキーによってもたらされるフック及び追加のリンクを用いて減少されるリンクの長いリストを生成する。
【００６７】
一実施形態では、群Ｈが、自己同形群Ａｕｔ（Ｘ）と自己同形群Ａｕｔ（Ｍ）の共通のサブ群であるように、基底Ｘはアーベル群Ｘである。この場合、基底Ｘは追加の付加構造を有する。例えば、ＨがＡｕｔ（Ｘ）とＡｕｔ（Ｍ）の共通のサブ群であるように、アーベル群Ｘを使用する。Ｘの付加構造は、演算に使用する必要はないが、Ｘの要素をコンパクトなやり方で表現するのにかなり便利である。例えば、Ｘの自己同形としてＨを表現するマトリクスが、異なる次数及び基底フィールドさえ伴って、Ｍのものとは完全に異なると想定する。また、これらのマトリクスは、Ａｕｔ（Ｘ）における任意の自己同形ｆについて、ｈ→ｆｈｆ−１によって与えられた同形Ｈ→ｆＨｆ−１を使用して容易に変更され得る。このようにしてコンパクトな表現が得られ、マトリクスとベクトルの間の実際の演算により、それらのうち多数が、実際にはそれらのうちボックス演算子以外のすべてが置換され得るので、表のサイズがさらに縮小する。その場合、セキュリティを改善するために、マップ［  ］が線形ではないことが重要であり、詳細には、加算を保存するとシステムがより簡単に解析されてしまうため、加算を保存しないことが重要である。
【００６８】
減少を行うとき、計算デバイス１００において、例えば記憶装置１４０において、様々なフック及びリンクのタイプに関して管理を続ける可能性がある。この場合、減少ユニット１６０は、互換性のあるフック及びリンクを同一の第３の形式で収集して、例えばフック及びリンクが互換性のあるタイプを有することの管理を検証することによってそれらを減少するための選択肢を有する。しかしながら、タイプ情報は、計算デバイスにおいて暗示でしかないのが望ましい。例えば、コンパイラは（実装者さえも）、変数のタイプの経過を追って、それらに正確な減少関数を適用することができる。このように、攻撃者は変数のタイプを判定することができない。一般に、どの変数がどの変数に加算されるかということはあらかじめ知られている。コンパイラは、これらの変数のタイプの経過を追うことができる。必要に応じて、コンパイラは、最初に、コンピュータコードの一部分に関する静的単一代入（ＳＳＡ）グラフを計算することができる。ループ展開することにより、単一のＳＳＡを与えられたコンピュータコードの一部分のサイズが増加する可能性がある。ＳＳＡグラフにおいて、コンパイラは、コンパイル時に変数に対してタイプを割り当てて、互換性がある変数とない変数とを判定することができる。例えば、コンパイラは、減少のためのその時その時の機会を用いて、変数における互換性のないタイプを最適化する。
【００６９】
加算の一部は定数の加算であり、定数のタイプはコンパイラによって判定される。定数は、例えば互換性のない要素を最適化するために、必要に応じて、第１／第２／第３の形式で符号化される。
【００７０】
減少ユニット、加算ユニット、線形演算子ユニット、及び／又はＩ／Ｏユニットは、プロセッサ回路により、例えばそれぞれのユニットを実施する複数のコンピュータプログラム命令、それぞれのユニットを実施する回路、及び／又は専用ハードウェアとソフトウェア命令のハイブリッドとして実施される。
【００７１】
一般に、ルックアップ表は、例えば大きな入力を複数のより小さい表に分割するために、ルックアップ表ネットワークとしても実施される。
【００７２】
様々な実施形態において、入力及び／又は出力のユニットのための入出力インターフェースは様々な選択肢から選択される。例えば、入力及び／又は出力のインターフェースは、ローカルエリアネットワーク又は広域ネットワークに対するネットワークインターフェースであり、例えばインターネット、内部又は外部のデータ記憶装置に対する記憶装置インターフェース、キーボードなどである。
【００７３】
記憶装置１４０は、例えばフラッシュメモリといった電子メモリ、又は例えばハードディスクなどの磁気メモリとして実施される。記憶装置１４０が備える複数の離散メモリが、ともに記憶装置１４０を構成する。記憶装置１４０は、例えばＲＡＭといった一時的メモリでもよい。一時的記憶装置１４０の場合には、記憶装置１４０は、例えば入力から、例えば任意選択のネットワーク接続（図示せず）などを通じて符号化された要素を取得することにより、使用される前に符号化された要素を取得するためのいくつかの手段を含有している。
【００７４】
一般的には、デバイス１００は、デバイス１００に記憶された適切なソフトウェアを実行するマイクロプロセッサ（別個には示されていない）を備え、例えば、そのソフトウェアは、例えばＲＡＭなどの揮発性メモリ又はフラッシュなどの不揮発性メモリ（別個には示されていない）といった対応するメモリにダウンロードされ、且つ／又は記憶されている。或いは、デバイス１００は、全体又は一部において、例えばフィールドプログラマブルゲートアレイ（ＦＰＧＡ）としてプログラマブルロジックで実施される。デバイス１００は、全体又は一部において、いわゆる特定用途向け集積回路（ＡＳＩＣ）すなわち特別な用途向けにカスタマイズされた集積回路（ＩＣ）として実施される。例えば、回路は、例えばＶｅｒｉｌｏｇ、ＶＨＤＬなどのハードウェア記述言語を使用してＣＭＯＳで実施される。
【００７５】
一実施形態では、デバイス１００は記憶回路、加算回路、減少回路を備える。デバイス１００は、例えば線形演算子回路、入力及び／又は出力の回路といった追加の回路を備えることがある。これらの回路は、本明細書で説明された対応するユニットを実施する。これらの回路はプロセッサ回路及び記憶回路であり、プロセッサ回路は、記憶回路において電子的に表現された命令を実行する。回路は、ＦＰＧＡ、ＡＳＩＣ又はその他同種のものでもよい。
【００７６】
プロセッサ回路は、例えば複数のサブプロセッサ回路として分散型で実施される。記憶装置は、複数の分散型サブ記憶装置にわたって分散している。メモリの一部又はすべてが、電子メモリ、磁気メモリなどである。例えば、記憶装置は揮発性の部分及び不揮発性の部分を有する。記憶装置の一部は読取り専用である。
【００７７】
図３は、ブロック暗号ＡＥＳ用に構成された電子計算デバイスの実施形態の一例を概略的に示すものである。計算デバイス３００は、ＡＥＳブロック暗号のいわゆるホワイトボックス実装形態でよい。これは、攻撃者が、ブロック暗号を実施するプログラムに対する完全な低レベルアクセスを得たとしても、暗号化演算及び／又は復号化演算を実施するために使用される暗号化キーを導出するのは不可能であることを意味する。
【００７８】
計算デバイス３００は、以下の演算を実施するユニットを備える。これらの演算は、図１に示されたユニットを使用して実施される。例えば、デバイス３００は図１による一実施形態でよいが、例えば以下に示される演算を実施する回路及び／又はプログラミングといった付加ユニットを伴う。ＡＥＳ実装形態は、参照により本明細書に含まれている、２００１年１１月２６日の連邦情報処理標準の公布１９７、「Ａｎｎｏｕｎｃｉｎｇ  ｔｈｅ  ＡＤＶＡＮＣＥＤ  ＥＮＣＲＹＰＴＩＯＮ  ＳＴＡＮＤＡＲＤ（ＡＥＳ）」に従うものでよい。
【００７９】
図３に示されるＡＥＳ実装形態３００は、ラウンドキー加算演算３１０、バイト置換演算３２０、行シフト演算３３０、列混合演算３４０、ラウンドキー加算演算３５０を含む。これらの演算は、例えばＦｉｐｓ  １９７で説明されているようなステート上で動作するものである。ステートは、一実施形態によって符号化されたバイトのシーケンスである。例えば、ステートはバイトごとに符号化され、各バイトは高々１つのフックを含む。完全なＡＥＳはこれらの演算以上のものを含有しているが、これらは十分に類似しており、図３には省略としてさらに示されているのみであることに留意されたい。
【００８０】
このＡＥＳ実装形態は、完全にループ展開されていることに留意されたい。ラウンドキーは固定され、プログラムにおいてハードコード化されている。ラウンドキーはまた、入力を通じて受け取られる。例えば、ＡＥＳ実装形態におけるステートはリンクしか含まないが、ラウンドキーはそれぞれの符号化されたバイトについてフックとリンクの両方を含む。これによってステートとラウンドキーの加算及び減少が可能になる。バイト置換演算３２０はルックアップ表として実施される。バイト置換演算３２０はフックを削除するのにも使用され、例えば、表は、入力としてフックを受け取り、出力としてもう１つのリンクを生成する。例えば、ＡＥＳ  ３００は、バイト置換演算３２０の前に、減少が、ステートのそれぞれのバイトをたった１つのフックへと完全に減少するように構成される。これによって演算３２０用の表のサイズが縮小する。行シフト演算３３０は、符号化されたバイト上で問題なく実施される。列混合演算３４０は線形であり、前述のように線形演算子ユニットを使用して実施される。
【００８１】
以下に、選択された実施形態の詳細な例を示す。
【００８２】
Ｎは７つの要素のアーベル群と見なされ、Ｎ＝Ｚ７である。アーベル群Ｍは
【数１１】
2020515093.tif 000013
となり、マップπ：Ｍ→Ｎはπ（ｘ，ｙ）＝２ｘ＋３ｙとなる。Ｍの要素は順序対（ｒ，ｓ）によって表現され、ｒ，ｓ∈Ｚ７である。アーベル群Ｍはベクトル空間であるため、その自己同形群の要素は正方マトリクスによって表現され得る。Ｈの要素、したがってＡ及びＧの要素は、マトリクスと見なされ得る。
【００８３】
次に、マトリクス
【数１２】
2020515093.tif 000014
によって生成される次数３の群Ａと、要素
【数１３】
2020515093.tif 000015
及び
【数１４】
2020515093.tif 000016
によって生成される群Ｇとを使用する。ｆの次数は２であり、ｇの次数は６である。これら２つのマトリクスは交換され、またａとも交換され、したがって群Ｈ＝ＧＡ＝ＡＧはアーベル群である。Ｇの要素の数は１２であり、Ｇ∩Ａが同一性であるため、Ｈの要素の数は３６である。
【００８４】
Ｇの要素は、ｉ∈｛０，１，２，３，４，５｝且つｊ∈｛０，１｝の状況でｇｉｆｊと書くことができる。これらを＜ｉ，ｊ＞と書くことにより、表記法を簡単にすることができる。群Ｇは、同形が＜ｉ，ｊ＞＝ｇｉｆｊと与えられる状況で、Ｚ６×Ｚ２と同形である。
【００８５】
Ｇにおける、ｇｉｆｊを表す＜ｉ，ｊ＞及びｇｒｆｓを表す＜ｒ，ｓ＞という２つの要素を所与とする。これらを掛け合わせると、マトリクスｆとｇは交換されるため、ｇｉｆｊｇｒｆｓ＝ｇｉ＋ｒｆｊ＋ｓとなる。したがって、＜ｉ，ｊ＞と＜ｒ，ｓ＞のこの演算は、正確に＜ｉ＋ｒ，ｊ＋ｓ＞となる。このルールにより、Ｇにおける演算の加法の表記法が使用され、これらは正確に指数であるため、＜ｉ，ｊ＞＋＜ｒ，ｓ＞＝＜ｉ＋ｒ，ｊ＋ｓ＞と書かれる。要素＜ｉ，ｊ＞の逆数は（ｇｉｆｊ）−１＝ｇ−ｉｆ−ｊであり、正確に＜−ｉ，−ｊ＞である。
【００８６】
この情報は計算するのに不可欠ではないが、すべての可能な表現の間の明瞭な対応を得るために、この表記法におけるＧのすべての値と、乗法の表記法におけるＧのすべての値と、マトリクスとを用いて表を書くことにする。
【数１５】
2020515093.tif 000017
【００８７】
ＭのＧ軌道の数は８である。要素を１つだけ有する０の軌道、２つの要素を有する３つの軌道、１２の要素を有する他の３つの軌道、及び６つの要素を有する１つの軌道がある。２つの要素を有するものは、
Ｃ＝｛（５，１），（２，６）｝
Ｃａ＝｛（３，２），（４，５）｝
Ｃａ２＝｛（６，４），（１，３）｝
となる。
【００８８】
１２の要素を有するものは、
Ｄ＝｛（１，０），（６，５），（２，１），（３，４），（２，３），（０，１），（５，４），（０，６），（４，３），（５，６），（６，０），（１，２）｝
Ｄａ＝｛（５，３），（４，２），（２，０），（４，６），（０，２），（６，１），（０，５），（１，６），（３，１），（５，０），（２，４），（３，５）｝
Ｄａ２＝｛（１，４），（４，０），（３，６），（０，４），（５，２），（１，５），（２，５），（６，２），（０，３），（４，１），（６，３），（３，０）｝となり、６つの要素を有するものは、
Ｅ＝Ｅａ＝Ｅａ２＝｛（１，１），（２，２），（４，４），（６，６），（５，５），（３，３）｝となる。
【００８９】
この場合、０の軌道は禁じられた軌道と見なされる。他のすべての軌道が許容される。
【００９０】
Ｘ及びＹの２つのＨ集合を選択する。前述のように、集合Ｘ及びＹを生成するやり方の１つには、Ｇの多重コピーを生成し、それらの互いに素の結合を作成するものがある。どちらの場合もＧの７つのコピーを使用する。Ｘ及びＹの要素は＜ｔ：ｉ，ｊ＞によって表現され、ここで、ｔは使用されるＧのコピーを表す０〜７のインデックスであり、値ｉ，ｊはこの集合から採用されるＧの要素を表現する。Ｍの要素ｘ０、ｘ１、．．．、ｘ６及びｙ０，ｙ１，．．．，ｙ６∈Ｍを選択し、値
【数１６】
2020515093.tif 000018
【数１７】
2020515093.tif 000019
を与えることにより、マップ［  ］：Ｘ→Ｍ及び［  ］：Ｙ→Ｍが生成される。
【００９１】
すべての可能な要素を表すことができるために、許容された軌道の各々に対して要素ｘｔ及びｙｔが１つずつ選択される。
【００９２】
Ｘの場合、これらの要素は、
ｘ０＝（５，５）∈Ｅ、ｘ１＝（３，１）∈Ｄａ、ｘ２＝（５，１）∈Ｃ、ｘ３＝（４，５）∈Ｃａ、ｘ４＝（１，３）∈Ｃａ２、ｘ５＝（４，１）∈Ｄａ２、及びｘ６＝（６，０）∈Ｄとなる。Ｙについては、それらは、
ｙ０＝（０，３）∈Ｄａ２、ｙ１＝（１，３）∈Ｃａ２、ｙ２＝（３，５）∈Ｄａ、ｙ３＝（３，４）∈Ｄ、ｙ４＝（４，４）∈Ｅ、ｙ５＝（２，６）∈Ｃ、及びｙ６＝（３，２）∈Ｃａとなる。
【００９３】
この場合、０の軌道についての表現はないため、［  ］の部分的マップを使用することは必須ではく、したがって、禁じられた要素はＸ又はＹにはない。マップ［  ］：Ｘ→Ｍ及び［  ］：Ｙ→Ｍは、それらの像には０がないため、全射ではない。しかし、π：Ｍ→Ｎがカーネルに非ゼロ要素を有するため、Ｎには０の表現があり、π（２，１）＝２・２＋３・１＝７≡０∈Ｚ７であるため、例えば対（２，１）によってＮにおける要素０を表現することができる。要素（２，１）が軌道Ｄにあるという事実を使用して、Ｘ及びＹにおけるこの要素を表現するために、Ｇにおける対応する要素とともにｘ３又はｙ２を使用することができる。
【００９４】
これらの禁じられた要素に対応するために、ｌ（ｘ，ｙ）＝ｙによって与えられるマップｌ：Ｍ→Ｚ７を検討する。適用されたｌが０と異なるように値を生成するような表現又は表現の組合せのみを容認する。部分和の値は、ｌが線形であるという事実によって制御される。
【００９５】
＜ｔ：ｉ，ｊ＞という表記法は、Ｘの要素及びＹの要素とＧの要素との間の演算を表現するのに非常に便利である。というのは、（ｘｌｇｉｆｊ）（ｇｒｆｓ）＝ｘｌｇｉ＋ｒｆｊ＋ｓであり、加法の表記法を使用すると、これは、両方の場合において、それらがＸ又はＹについて異なる要素を表現していても、＜ｔ：ｉ，ｊ＞＋＜ｒ，ｓ＞＝＜ｔ：ｉ＋ｒ，ｊ＋ｓ＞と書くことができるからである。
【００９６】
これらの演算は、Ｇにおける演算によって与えられたルールを守り、したがって、ｉ＋ｒはＺ６において計算され、ｊ＋ｓはＺ２において計算される。
【００９７】
次に２つのボックス演算子Ｗ０及びＷ１を定義する。演算子Ｗ０は値ｍ０＝（２，１）について（Ｘａ０，Ｙａ１，ｍ０）のタイプになり、演算子Ｗ１は値ｍ１＝（６，２）について（Ｙａ１，Ｘａ１，ｍ１）のタイプになる。これらの演算子はマップＷ０：Ｘ→Ｙ及びＷ１：Ｙ→Ｘを生成する。これらのマップはＸ又はＹにおいて要素＜ｔ：ｉ，ｊ＞を採用し、同一の表現の出力を与える。列に値ｔを適用し、行に値ｉ，ｊを適用する。この表記法を用いると、Ｗ０の表は
【数１８】
2020515093.tif 000020
となり、Ｗ１の表は
【数１９】
2020515093.tif 000021
となる。
【００９８】
演算子Ｗ０及びＷ１は部分的マップであり、すべての要素に対して定義されているわけではない。未定義の値は、結果が０である場合を想定して書かれてきたが、この要素は禁じられた軌道にあり、表現されない。計算においてこれらのエントリがアクセスされることはなく、完全な表が望まれるのであれば、コンピュータプログラムに任意の値を入れることができる。これらの値が使用されるのは攻撃者が何かのコードを挿入する場合のみであり、その目的は、その場合にはエラーを伝搬させることであり、したがって偽の値が許容され得る。
【００９９】
ｇ及びｆと交換するマトリクスａによって生成される群Ａは、次数３の群である。その要素はａ０、ａ１及びａ２である。Ａには２つの基底及び３つの要素があることを考慮して、フックには以下の６つのタイプがある。
Ｈ（Ｘ，ａ０）、Ｈ（Ｘ，ａ１）、Ｈ（Ｘ，ａ２）、Ｈ（Ｙ，ａ０）、Ｈ（Ｙ，ａ１）、Ｈ（Ｙ，ａ２）
【０１００】
２つの値ｍ０及びｍ１を使用するものとし、したがって、Ｌ（ｍ０，ａ０）、Ｌ（ｍ０，ａ１）、Ｌ（ｍ０，ａ２）、Ｌ（ｍ１，ａ０）、Ｌ（ｍ１，ａ１）、Ｌ（ｍ１，ａ２）といった６つのタイプのリンクも得られる。
【０１０１】
演算子Ｗ０はタイプ（Ｘａ０，Ｙａ１，ｍ０）を有し、Ｗ１はタイプ（Ｙａ１，Ｘａ１，ｍ１）を有し、したがって６つの可能な減少が得られる。以下の３つはＷ０によって与えられ、
Ｒ０：Ｈ（Ｘ，ａ０）×Ｌ（ｍ０，ａ０）→Ｈ（Ｙ，ａ１）
Ｒ１：Ｈ（Ｘ，ａ１）×Ｌ（ｍ０，ａ１）→Ｈ（Ｙ，ａ２）
Ｒ２：Ｈ（Ｘ，ａ２）×Ｌ（ｍ０，ａ２）→Ｈ（Ｙ，ａ０）
以下の３つはＷ１によって与えられる。
Ｔ０：Ｈ（Ｙ，ａ１）×Ｌ（ｍ１，ａ０）→Ｈ（Ｘ，ａ１）
Ｔ１：Ｈ（Ｙ，ａ２）×Ｌ（ｍ１，ａ１）→Ｈ（Ｘ，ａ２）
Ｔ２：Ｈ（Ｙ，ａ０）×Ｌ（ｍ１，ａ２）→Ｈ（Ｘ，ａ０）
【０１０２】
図６の図には６つのタイプのフック及び６つのタイプのリンクがそれらの減少とともに見られ、フックとリンクを（正確なタイプを有する場合には）加算する。難読化アルゴリズムにおいてこれを使用するやり方は以下の通りである。置換Ｓ：Ｎ→Ｎと、Ｓを適用して、ラウンドｉ＝０，１，．．．，ｒに関するラウンドキーＫｉを加算する必要のあるアルゴリズムとを有すると想定する。第１のラウンドはキーＫ０を加算するのみである。
【０１０３】
このアルゴリズムの実装形態は以下のようになる。
・入力は表であり、任意の可能なｎ∈Ｎについて、要素
【数２０】
2020515093.tif 000022
及びＩ（ｎ）∈Ｈ（Ｙ，ａ０）は、
【数２１】
2020515093.tif 000023
となるように選択される。
・キーＫ０について、値
【数２２】
2020515093.tif 000024
、
【数２３】
2020515093.tif 000025
及び
【数２４】
2020515093.tif 000026
は、
【数２５】
2020515093.tif 000027
となるように選択される。
・ｉ＝１，．．．，ｒ−１であるキーＫｉについて、値
【数２６】
2020515093.tif 000028
及び
【数２７】
2020515093.tif 000029
は、
【数２８】
2020515093.tif 000030
となるように選択される。
・最後のキーＫｒについて、値
【数２９】
2020515093.tif 000031
、
【数３０】
2020515093.tif 000032
及び
【数３１】
2020515093.tif 000033
は、
【数３２】
2020515093.tif 000034
となるように選択される。
・置換のために、任意のＪ∈Ｈ（Ｙ，ａ２）について、π（［Ｈ（Ｊ）］）＋π（Ｌ２（Ｊ））＝Ｓ（π（［Ｈ］））となるような要素Ｈ（Ｊ）∈Ｈ（Ｘ，ａ０）及びＬ２（Ｊ）∈Ｌ（ｍ１，ａ０）を得るように表を得る。
【０１０４】
入力表を定義する必要があり、すべての要素ｎ∈Ｎについて、Ｉ（ｎ）∈Ｈ（Ｙ，ａ０）及び
【数３３】
2020515093.tif 000035
は、所与の条件を満たすように選択される。
【数３４】
2020515093.tif 000036
【０１０５】
キーＫ０について、キーのすべての可能な値に対して可能なリンクを選択する必要があり、可能な選択肢の１つには
【数３５】
2020515093.tif 000037
がある。
【０１０６】
次に第１のラウンドにおける計算の一例を示す。初期値はｎ＝３であり、キーＫ０＝２を加算する必要があると想定する。表を見て、これらの要素は以下の要素によって表現される。
・初期値ｎ＝３は、
−  タイプＨ（Ｙ，ａ０）のフックＩ（３）＝＜３：２，１＞と、
−  タイプＬ（ｍ１，ａ０）のリンク
【数３６】
2020515093.tif 000038
とによって与えられる。
・キーＫ０＝２は、
−  タイプＬ（ｍ１，ａ２）のリンク
【数３７】
2020515093.tif 000039
−  タイプＬ（ｍ０，ａ０）のリンク
【数３８】
2020515093.tif 000040
−  タイプＬ（ｍ０，ａ１）のリンク
【数３９】
2020515093.tif 000041
といった３つのリンクによって与えられる。
【０１０７】
これらの要素の加算は
【数４０】
2020515093.tif 000042
となるが、これらの要素は正確な位置にないため、この順序で加算することはできない。減少するために使用する正確な順序を示す減少経路が必要である。この特定の例では可能性は１つしかないが、一般に複数の選択肢があり得る。順序は
【数４１】
2020515093.tif 000043
となる。初期値の一部分と、キーの一部分と、初期値の第２の部分と、キーの最後の部分とは、この順序で加算されなければならない。
【０１０８】
演算は以下のようになる。
１．フックＩ（３）＝＜３：２，１＞とリンク
【数４２】
2020515093.tif 000044
を加算する必要がある。適用される減少はボックス演算子Ｗ１を用いるＴ２である。この減少には、常に、リンクによって表現される群の逆数を用いる演算（ａ）と、ボックス演算子を適用する演算（ｂ）と、最後に、リンクによって表現される群を用いて元に戻す演算（ｃ）との、３つのステップがある。
（ａ）＜３：２−４，１−１＞＝＜３：４，０＞
（ｂ）Ｗ１（＜３：４，０＞）＝＜３：１，０＞
（ｃ）＜３：１＋４，０＋１＞＝＜３：５，１＞
２．タイプＨ（Ｘ，ａ０）のフックである第１の演算の出力＜３：５，１＞は、ボックス演算子Ｗ０によって誘導される減少Ｒ０を使用してリンク
【数４３】
2020515093.tif 000045
を用いて動作される。
（ａ）＜３：５−０，１−１＞＝＜３：５，０＞
（ｂ）Ｗ０（＜３：５，０＞）＝＜３：１，０＞
（ｃ）＜３：１＋０，０＋１＞＝＜３：１，１＞
３．タイプＨ（Ｙ，ａ１）のフックであるこの出力＜３：１，１＞は、ボックス演算子Ｗ１によって誘導される減少Ｔ０を使用してリンク
【数４４】
2020515093.tif 000046
を用いて動作される。
（ａ）＜３：１−４，１−０＞＝＜３：３，１＞
（ｂ）Ｗ１（＜３：３，１＞）＝＜５：４，１＞
（ｃ）＜４：４＋４，１＋０＞＝＜５：２，１＞
４．タイプＨ（Ｘ，ａ１）のフックであるこの出力＜５：２，１＞は、ボックス演算子Ｗ０によって誘導される減少Ｒ１を使用してリンク
【数４５】
2020515093.tif 000047
を用いて動作される。
（ａ）＜５：２−１，１−１＞＝＜５：１，０＞
（ｂ）Ｗ０（＜５：１，０＞）＝＜３：０，０＞
（ｃ）＜３：０＋１，０＋１＞＝＜３：１，１＞
５．このラウンドの最終結果は、タイプＨ（Ｙ，ａ２）のフックである＜３：１，１＞となる。この要素に対して演算子［  ］及びπを適用すれば初期値２とキー３の加算である５が正確に得られ、すなわちπ（［＜３：１，１＞］）＝π（ｙ３ｇ１ｆ１ａ２）＝π（２，５）＝２・２＋３・５＝１９＝５（ｍｏｄ７）である。
【０１０９】
図４は電子計算方法４００の実施形態の一例を概略的に示すものである。アーベル群Ｎにおける符号化加算用に構成された電子計算方法４００は、
−  アーベル群Ｎの符号化された要素を記憶するステップ（４１０）であって、これらの符号化された要素が、
−  １つ又は複数のタイプの第１の形式（１１０）であって、第１の形式のタイプ（Ｈ（Ｘ，ｂ））が、集合Ｘ、群Ａの要素ｂ、及びマップ［  ］：Ｘ→Ｍによって定義され、集合Ｘの要素ｘがアーベル群Ｎの要素π（［ｘ］ｂ）を表現し、
−  πはアーベル群Ｍから群Ｎへの準同形の全射投影π：Ｍ→Ｎであり、
−  群Ａと群Ｇは、一緒に、自己同形群Ａｕｔ（Ｍ）のサブ群Ｈを分解し、Ｈ＝ＧＡであり、群Ａと群Ｇは、任意の、Ａにおけるａ及びＧにおけるｇについて、ｇａ＝ａｇとなる特性を有し、群Ｈは集合Ｘに対するアクションを有し、
−  マップ［  ］は、このマップが定義されている、任意のＸにおけるｘ及びＨにおけるｈについて［ｘｈ］＝［ｘ］ｈとなるような少なくとも部分的なマップ［  ］：Ｘ→Ｍであり、合成π［  ］：Ｘ→Ｎが全射である、第１の形式（１１０）と、
−  少なくとも１つのタイプの第２の形式（１２０）であって、第２の形式のタイプ（Ｌ（ｍ，ｂ’））が、群Ｍの要素ｍ及び群Ａの要素ｂ’によって定義され、群Ｇの要素ｇがアーベル群Ｎの要素π（ｍｇｂ’）を表現する、第２の形式（１２０）と、
−  アーベル群Ｎの要素が、符号化された要素のシーケンスとして符号化される第３の形式（１３０）であって、第３の形式のシーケンスが、第１の形式又は第２の形式によって符号化された、少なくとも２つの符号化された要素を含み、符号化された要素のシーケンスが、シーケンスの要素によって表現されるアーベル群Ｎの要素の、アーベル群Ｎにおける和を表現する、第３の形式（１３０）とで記憶される、記憶するステップ（４１０）と、
−  複数の符号化された加数を加算するステップ（４２０）であって、加算ユニットが、複数の符号化された加数のうち少なくとも符号化された部分を含む第３の形式の符号化された要素を形成するように設定される、加算するステップ（４２０）と、
−  符号化された要素のシーケンスにおいて、集合Ｘ及び群Ａの要素ａｂによって定義されるタイプの第１の形式の第１の符号化された要素ｘと、群Ｍの要素ｍ及び群Ａの要素ｂによって定義されるタイプの第２の形式の第２の符号化された要素ｇとを、第２の集合Ｙ及び要素ａ’と要素ｂの積（ａ’ｂ）によって定義されるタイプ（Ｈ（Ｙ，ａ’ｂ））の第１の形式の符号化された要素Ｗ（ｘｇ−１）ｇで置換することにより、第３の形式の符号化された要素を減少するステップ（４３０）とを有し、
−  減少ユニットには、第１の集合Ｘから第２の集合Ｙへの関数である減少関数Ｗが備わっており、関数Ｗは、第１の集合Ｘ、第２の集合Ｙ、Ａの要素ａ、Ａの要素ａ’、及び群Ｍの要素ｍによって定義されるタイプ（（Ｘ，ａ，Ｙ，ａ’，ｍ））を有し、関数Ｗは、マップ［  ］が定義されている、Ｘにおけるｘ、Ａにおけるａ及びａ’、Ｍにおけるｍのすべてについて［ｘａ］＋ｍ＝［Ｗ（ｘ）ａ’］という特性を有する。
【０１１０】
当業者には明らかなように、方法を実行する様々なやり方が可能である。例えば、ステップの順序を変えることができ、又はいくつかのステップを並行して実行することができる。その上に、ステップの間で、他の方法のステップが挿入され得る。挿入されるステップは、本明細書で説明された方法などの改善を表現するものでよく、又は方法とは無関係でもよい。例えば、記憶するステップと、加算するステップと、減少するステップとは、少なくとも部分的に並行して実行され得る。その上に、所与のステップは、次のステップが開始される前に完了していなくてもよい。
【０１１１】
本発明による方法は、プロセッサシステムに方法４００を実施させるための命令を含むソフトウェアを使用して実行される。ソフトウェアは、システムの特定のサブエンティティによって採用されたステップのみ含めばよい。ソフトウェアは、ハードディスク、フロッピーディスク、メモリ、光ディスクなどの適切な記憶媒体に記憶される。ソフトウェアは、ワイヤに沿った信号、無線、又は例えばインターネットといったデータネットワークを使用して送られる。ソフトウェアは、ダウンロードして使用され得るように、且つ／又はサーバ上にあって遠隔で利用され得るように作成される。本発明による方法は、例えばフィールドプログラマブルゲートアレイ（ＦＰＧＡ）といったプログラマブルロジックを、方法を実施するように設定するように構成されたビットストリームを使用して実行される。
【０１１２】
本発明は、本発明を実施するように適合されたコンピュータプログラム、特にキャリア上のコンピュータプログラム又はキャリアにおけるコンピュータプログラムにも及ぶことが了解されよう。プログラムは、ソースコード、オブジェクトコード、コードの中間のソース、及び部分的にコンパイルされた形式などのオブジェクトコードの形式、又は本発明による方法の実装形態において使用するのに適した任意の他の形式でよい。コンピュータプログラム製品に関する一実施形態は、説明された方法のうちの少なくとも１つの処理ステップの各々に対応するコンピュータ実行可能命令を含む。これらの命令は、サブルーチンに細分され、並びに／或いは静的又は動的にリンクされる１つ若しくは複数のファイルに記憶される。コンピュータプログラム製品に関する別の実施形態は、説明されたシステム及び／又は製品のうちの少なくとも１つの手段の各々に対応するコンピュータ実行可能命令を含む。
【０１１３】
図５ａは、コンピュータプログラム１０２０を含む書込み可能な部分１０１０を有するコンピュータ可読媒体１０００を示すものであり、コンピュータプログラム１０２０は、プロセッサシステムに、一実施形態による計算方法を実施させるための命令を含む。コンピュータプログラム１０２０は、コンピュータ可読媒体１０００上の物理マークとして、又はコンピュータ可読媒体１０００を磁化することにより、具現され得る。しかしながら、任意の他の適切な実施形態も同様に考えられる。その上、コンピュータ可読媒体１０００は、ここでは光ディスクとして示されているが、ハードディスク、ソリッドステートメモリ、フラッシュメモリなどの任意の適切なコンピュータ可読媒体でよく、記録不可能でも記録可能でもよいことが了解されよう。コンピュータプログラム１０２０は、プロセッサシステムに、上記計算方法を実施させるための命令を含む。
【０１１４】
図５ｂは、一実施形態によるプロセッサシステム１１４０を概略的に示すものである。プロセッサシステムは１つ又は複数の集積回路１１１０を備える。図５ｂには１つ又は複数の集積回路１１１０のアーキテクチャが概略的に示されている。回路１１１０は、一実施形態による方法を実行するため、及び／又はそのモジュール若しくはユニットを実施するためのコンピュータプログラムコンポーネントを動作させるための、例えばＣＰＵである処理ユニット１１２０を備える。回路１１１０は、プログラムコード、データなどを記憶するためのメモリ１１２２を備える。メモリ１１２２の一部は読取り専用である。回路１１１０は、例えばアンテナ、コネクタ、又は両方などの通信要素１１２６を備える。回路１１１０は、方法において定義された処理の一部分又はすべてを実施するための専用の集積回路１１２４を備えてよい。プロセッサ１１２０と、メモリ１１２２と、専用のＩＣ１１２４と、通信要素１１２６とは、例えばバスである相互接続１１３０を介して互いに接続されてよい。プロセッサシステム１１１０は、コネクタを使用する接触型通信用、及び／又はアンテナを使用する非接触型通信用に構成されている。
【０１１５】
例えば、一実施形態では、計算デバイスはプロセッサ回路及びメモリ回路を備え、プロセッサはメモリ回路に記憶されたソフトウェアを実行するように構成されている。例えば、プロセッサ回路は、Ｉｎｔｅｌ社のＣｏｒｅ  ｉ７プロセッサ、ＡＲＭ社のＣｏｒｔｅｘ−Ｒ８などである。メモリ回路は、ＲＯＭ回路、すなわち、例えばフラッシュメモリといった不揮発性メモリでよい。メモリ回路は、例えばＳＲＡＭメモリである揮発性メモリでよい。後者の場合には、検証デバイスは、例えばハードドライブ、ネットワークインターフェースなど、ソフトウェアを供給するように構成され不揮発性のソフトウェアインターフェースを備える。ソフトウェアは、記憶命令、加算命令、及び減少命令を含む。ソフトウェアは、入力命令、出力命令及び／又は線形演算子命令も含み得る。これらの命令は、本明細書で説明された対応するユニットの一実施形態を実施するものである。
【０１１６】
前述の実施形態は、本発明を限定するのではなく、当業者が、多くの代替実施形態を設計することを可能にするように示されるものであることに留意されたい。
【０１１７】
特許請求の範囲では、括弧の間のいかなる参照符号も、特許請求の範囲の制限として解釈されないものとする。動詞「備える（ｃｏｍｐｒｉｓｅ）」及びその語形変化の使用は、特許請求の範囲において明示されたもの以外の要素又はステップの存在を排除するものではない。要素の前の冠詞「１つの（ａ）」又は「１つの（ａｎ）」は、そのような要素が複数存在すること排除するものではない。本発明は、いくつかの別個の要素を含むハードウェアと、適切にプログラムされたコンピュータとによって実施される。いくつかの手段を列挙しているデバイスの請求項では、これらの手段のいくつかは、ハードウェアの同一の品目によって具現され得る。特定の方策が互いに異なる従属請求項において詳述されるという単なる事実は、これらの方策の組合せが有利に使用され得ないことを指示するわけではない。
【０１１８】
特許請求の範囲では、括弧の中の参照は、実施形態を例示する図面における参照符号又は実施形態の式を参照するものであり、したがって特許請求の範囲における理解し易さが向上する。これらの参照は、特許請求の範囲の制限として解釈されることはないものとする。
【０１１９】
以下は図１〜図３における参照数字のリストである。
１００  計算デバイス
１１０  第１の形式の複数の符号化された要素
１１２  第１のタイプの第１の形式の符号化された要素
１１４  第２のタイプの第１の形式の符号化された要素
１１６  第３のタイプの第１の形式の符号化された要素
１２０  第２の形式の複数の符号化された要素
１２２  第１のタイプの第２の形式の符号化された要素
１２４  第２のタイプの第２の形式の符号化された要素
１２６  第３のタイプの第２の形式の符号化された要素
１３０  第３の形式の複数の符号化された要素
１３１  第３の形式の符号化された要素
１３２  第３の形式の符号化された要素
１４０  記憶装置
１５０  加算ユニット
１６０  減少ユニット
１７０  入出力ユニット
１８０  線形演算子ユニット
２１０  第３の形式の符号化された要素
２２０  第３の形式の符号化された要素
２１２、２１４、２２２〜２２６  第１又は第２の形式の符号化された要素
２１４  第１の形式の符号化された要素
２２６  第２の形式の符号化された要素
２３０  第３の形式の符号化された要素
２３１  第３の形式の符号化された要素
３００  ＡＥＳ実装形態
３１０  ラウンドキー加算演算
３２０  バイト置換演算
３３０  行シフト演算
３４０  列混合演算
３５０  ラウンドキー加算演算
【図１】
2020515093.tif 000049
【図２ａ】
2020515093.tif 000050
【図２ｂ】
2020515093.tif 000051
【図３】
2020515093.tif 000052
【図４】
2020515093.tif 000053
【図５ａ】
2020515093.tif 000054
【図５ｂ】
2020515093.tif 000055
【図６】
2020515093.tif 000056
【国際調査報告】
2020515093.tif 000057
2020515093.tif 000058