(57)【要約】      （修正有）【課題】所与の秘密鍵を有する暗号アルゴリズムを実装するための暗号化／復号化方法を提供する。【解決手段】機器１０ａのデータ処理手段１１ａによって、機器１０ａのデータ記憶手段１２ａ上に格納された暗号アルゴリズムを実装するコードを実行する。所与の秘密鍵でパラメータ化されたコードの少なくとも１つのいわゆる難読化された部分が、命令の第２オペランドの命令の第１オペランドにおける条件付き移動命令である１つのいわゆるｃｍｏｖ命令のみを使用し、コードの上記難読化された部分における上記ｃｍｏｖ命令の少なくとも１回の発生がダミーである。【選択図】図１
2020194157.tif 000002
【特許請求の範囲】
【請求項１】
所与の秘密鍵を有する暗号アルゴリズムを実装するための方法であって、機器（１０ａ）のデータ処理手段（１１ａ）によって、前記機器（１０ａ）のデータ記憶手段（１２ａ）上に格納された前記暗号アルゴリズムを実装するコードを実行することを含み、前記方法は、前記秘密鍵でパラメータ化された前記コードの少なくとも１つのいわゆる難読化された部分が、命令の第２オペランドの前記命令の第１オペランドにおける条件付き移動命令である１つのいわゆるｃｍｏｖ命令のみを使用し、前記コードの前記難読化された部分における前記ｃｍｏｖ命令の少なくとも１回の発生がダミーであることを特徴とする、方法。
【請求項２】
前記命令の第２オペランドの前記命令の第１オペランドにおける前記条件付き移動ｃｍｏｖ命令は、
−条件が検証される場合の、前記第２オペランドの前記第１オペランドにおける実際の移動、
−又は、前記条件が検証されない場合の、前記第２オペランドの前記第１オペランドにおける移動のシミュレーションのいずれかを実装し、
前記ｃｍｏｖ命令の前記ダミー発生は、前記コードの通常の実行中に前記第２オペランドの前記第１オペランドにおける前記移動シミュレーションを実装することを意図する、請求項１に記載の方法。
【請求項３】
前記第２オペランドの前記第１オペランドにおける前記移動シミュレーションは、前記第１オペランドの前記第１オペランドにおける前記実際の移動、又は前記第１オペランド以外の他の場所における前記第２オペランドの前記実際の移動のいずれかを含む、請求項２に記載の方法。
【請求項４】
前記命令の第２オペランドの前記命令の第１オペランドにおける各々の条件付き移動ｃｍｏｖ命令は、前記第２オペランドの前記第１オペランドにおける組み込まれたいわゆるｍｏｖ無条件移動命令から表現される、請求項１及び３のいずれか一項に記載の方法。
【請求項５】
前記データ処理手段（１１ａ）は、前記暗号アルゴリズムを実装する前記コードが実行される、安全なガードエクステンション環境などの安全な実行環境を実装する、請求項１及び４のいずれか一項に記載の方法。
【請求項６】
前記難読化されたコードの部分は、ｃｍｏｖ命令の各々の実際の発生について、ｃｍｏｖ命令の複数のダミー発生を含む、請求項１及び５のいずれか一項に記載の方法。
【請求項７】
期待される値ｒを含む、ｏで示されるオブジェクトの全てのＭ個の可能性のある値ｏｉに対応する、ｃｍｏｖ命令の実際の発生及び対応するＭ−１個のダミー発生のセットについて、結果として、
−前記セットの第ｉ番目の発生について、置換条件は「ｏがｏｉに等しいこと」であって、
−実際の発生は、ｏｊ＝ｒとなるような第ｊ番目であって、
−前記セットにおける全ての他の発生は、ダミー発生である、請求項６に記載の方法。
【請求項８】
前記コードが、前記データ処理手段（１１ａ）のアセンブリ言語にある、請求項１〜７のいずれか一項に記載の方法。
【請求項９】
前記アセンブリ言語が、ｘ８６アセンブラである、請求項８に記載の方法。
【請求項１０】
前記暗号アルゴリズムは、対称暗号化アルゴリズムであって、前記コードの前記難読化された部分は、前記対称暗号化アルゴリズムの少なくとも１回のラウンドを実装する、請求項１〜９のいずれか一項に記載の方法。
【請求項１１】
第１コンピュータコードによって表される秘密鍵を有する暗号アルゴリズムを難読化するための方法であって、サーバ（１０ｂ）のデータ処理手段（１１ｂ）によって以下のステップ、すなわち、
（ａ）前記第１コードを第２コードに書き換えるステップであって、前記秘密鍵を使用する前記コードの少なくとも１つのいわゆる難読化された部分が、命令の第２オペランドの前記命令の第１オペランドにおける無条件移動についての命令である１つのいわゆるｍｏｖ命令のみを使用する、ステップと、
（ｂ）前記第２コードに対応する第３コードを生成するステップであって、前記難読化された部分の各々のｍｏｖ命令が、前記命令の第２オペランドの前記命令の第１オペランドにおける条件付き移動についての命令であるいわゆるｃｍｏｖ命令によって置き換えられ、少なくとも１つのダミーｃｍｏｖ命令が追加される、ステップと、を実装することを含む、方法。
【請求項１２】
前記暗号アルゴリズムの実装について機器（１０ａ）のデータ処理手段（１１ａ）によって実行する目的で、前記機器（１０ａ）の記憶手段（１２ａ）上に記憶するために前記第３コードを前記機器（１０ａ）に送信するステップ（ｃ）を含む、請求項１１に記載の方法。
【請求項１３】
前記プログラムがコンピュータによって実行されるとき、所与の秘密鍵を有する暗号アルゴリズムを実装又は難読化するための請求項１〜１２のいずれか一項に記載の方法を実行するためのコード命令を含む、コンピュータプログラム製品。
【請求項１４】
コンピュータプログラム製品が、所与の秘密鍵を有する暗号アルゴリズムを実装又は難読化するための請求項１〜１２のいずれか一項に記載の方法を実行するためのコード命令を含む、コンピュータ機器によって読み取り可能な記憶手段。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号化技術の分野に関し、特に、「ホワイトボックス」タイプの暗号化／復号化方法に関する。
【背景技術】
【０００２】
機能は、その内部動作にアクセスすることができないとき、すなわち、その入力及び出力を知ることができるが、その秘密パラメータ又はその中間状態を知ることができないとき、「ブラックボックス」とみなされる。
【０００３】
したがって、（例えば、暗号化又はシグネチャのための）暗号アルゴリズムは、従来、その信頼性（攻撃に対する耐性）が評価されるとき、ブラックボックスであると想定される。
【０００４】
例えば、ＤＥＳ（「データ暗号化標準（Ｄａｔａ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）」）、３ＤＥＳ（トリプルＤＥＳ）又はＡＥＳ（「高度暗号化標準（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）」）などの典型的な暗号アルゴリズムを取る場合、これらは６４又は１２８ビットサイズのブロック（そして将来では２５６ビット）で機能するが、そのようなブロックを単一の動作で処理することはできない（既に、６４ビットブロックの１０１９個よりも多い可能性のある値がある）。したがって、非線形動作を線形動作と連結することによって、より小さい要素、典型的には８ビットサイズ（２５６の可能性のみ）のブロック内で機能する必要がある。
【０００５】
ブラックボックス仮定は、この場合、鍵又は中間状態がアクセス不可能であると想定する。この仮定は、これらのパラメータの記憶及び操作に強い制約を課す。実際、補助チャネル又は欠陥攻撃と呼ばれる、ハードウェア実装上の攻撃の自動化を可能にするために、ツールが最近公開されている。
【０００６】
今日、モバイル決済を含む使用の多くの場合について、ターゲットハードウェアのセキュリティについて可能性が最も少ない想定を行う暗号アルゴリズムを展開することが必要である。そして、秘密パラメータの記憶及び操作が、適用レベルで保証されなければならない。
【０００７】
いわゆるホワイトボックス暗号化技術は、攻撃者が攻撃によりアルゴリズムのソフトウェア実装に完全にアクセスできる場合でさえ秘密の抽出を不可能にすることを想定する暗号アルゴリズムの実装を提案することによって、この課題に応じることをねらいとする。より正確には、機能は、そのメカニズムが視認可能であるとき、「ホワイトボックス」とみなされる。換言すれば、攻撃者が、望むものに何でもアクセスする（バイナリは、攻撃者によって完全に視認可能で修正可能であって、後者は実行プラットフォームを完全に制御する）ことが直接想定される。結果として、実装そのものが、唯一の防衛線である。
【０００８】
開発された製品の強さは、数学的原理とソフトウェア難読化との混合に基づく。例えば、内部エンコードと呼ばれる不規則な（未知であるが一定の）並び替えによって内部状態を「マスク」することが提案されている。しかしながら、今日、数学的原理にのみ基づく保護の強さは、十分ではないように思われる。参照Ｂｒｅｃｈｔ  Ｗｙｓｅｕｒ  Ｓｏｆｔｗａｒｅ  Ｓｅｃｕｒｉｔｙ：Ｗｈｉｔｅ−Ｂｏｘ  Ｃｒｙｐｔｏｇｒａｐｈｙ．ＰｈＤ  Ｔｈｅｓｉｓ  ２００９。
【０００９】
更に、論文に示されている。論文Ｊｏｐｐｅ  Ｗ．Ｂｏｓ，Ｃｈａｒｌｅｓ  Ｈｕｂａｉｎ，Ｗｉｌ  Ｍｉｃｈｉｅｌｓ，Ｐｈｉｌｉｐｐｅ  Ｔｅｕｗｅｎ：Ｄｉｆｆｅｒｅｎｔｉａｌ  Ｃｏｍｐｕｔａｔｉｏｎ  Ａｎａｌｙｓｉｓ：Ｈｉｄｉｎｇ  Ｙｏｕｒ  Ｗｈｉｔｅ−Ｂｏｘ  Ｄｅｓｉｇｎｓ  ｉｓ  Ｎｏｔ  Ｅｎｏｕｇｈ，ＣＨＥＳ２０１６，Ｓａｎｆｅｌｉｘ，Ｅｌｏｉ，Ｃｒｉｓｔｏｆａｒｏ  Ｍｕｎｅ，ａｎｄ  Ｊｏｂ  ｄｅ  Ｈａａｓ．「Ｕｎｂｏｘｉｎｇ  ｔｈｅ  ｗｈｉｔｅ−ｂｏｘ．」Ｂｌａｃｋ  Ｈａｔ  ＥＵ  ２０１５．２０１５，ａｎｄ  Ｊａｃｏｂ，Ｍ．，Ｂｏｎｅｈ，Ｄ．，＆  Ｆｅｌｔｅｎ，Ｅ．（２００２，Ｎｏｖｅｍｂｅｒ）．Ａｔｔａｃｋｉｎｇ  ａｎ  ｏｂｆｕｓｃａｔｅｄ  ｃｉｐｈｅｒ  ｂｙ  ｉｎｊｅｃｔｉｎｇ  ｆａｕｌｔｓ．Ｉｎ  ＡＣＭ  Ｗｏｒｋｓｈｏｐ  ｏｎ  Ｄｉｇｉｔａｌ  Ｒｉｇｈｔｓ  Ｍａｎａｇｅｍｅｎｔ（ｐｐ．１６−３１）．Ｓｐｒｉｎｇｅｒ，Ｂｅｒｌｉｎ，Ｈｅｉｄｅｌｂｅｒｇ，そのいわゆる補助チャネル又は欠陥攻撃が、ホワイトボックス暗号化技術にうまく転置され得る。
【００１０】
したがって、（チャネル分析、欠陥などによる）全ての既知の攻撃に対して完全に耐性のあるＤＥＳ及びＡＥＳなどの標準的なメカニズムを使用する新しい「ホワイトボックス」暗号化技術ソリューションを有することが望ましいであろう。
【発明の概要】
【００１１】
第１態様によれば、所与の秘密鍵を有する暗号アルゴリズムを実装するための方法であって、機器のデータ処理手段によって、機器のデータ記憶手段上に格納された上記暗号アルゴリズムを実装するコードを実行することを含み、本方法は、上記秘密鍵でパラメータ化された上記コードの少なくとも１つのいわゆる難読化された部分が、命令の第２オペランドの命令の第１オペランドにおける条件付き移動命令である１つのいわゆるｃｍｏｖ命令のみを使用し、コードの上記難読化された部分における上記ｃｍｏｖ命令の少なくとも１回の発生がダミーであることを特徴とする、方法に関する。
【００１２】
有利であって非限定的な特徴によれば、
命令の第２オペランドの命令の第１オペランドにおける上記条件付き移動命令ｃｍｏｖは、
−条件が検証される場合の、第２オペランドの第１オペランドにおける実際の移動、
−又は、上記条件が検証されない場合の、第２オペランドの第１オペランドにおけるシミュレーション移動のいずれかを実装し、
ｃｍｏｖ命令の上記ダミー発生は、上記コードの通常の実行中に第２オペランドの第１オペランドにおける上記移動シミュレーションを実装することを意図し、
第２オペランドの第１オペランドにおける上記移動シミュレーションは、第１オペランドの第１オペランドにおける実際の移動、又は第１オペランド以外の他の場所における第２オペランドの実際の移動のいずれかを含み、
命令の第２オペランドの命令の第１オペランドにおける各々の条件付き移動命令ｃｍｏｖは、第２オペランドの第１オペランドにおける組み込まれたいわゆる無条件移動命令ｍｏｖから表現され、
データ処理手段は、上記暗号アルゴリズムを実装する上記コードが実行される、安全なガードエクステンション環境などの安全な実行環境を実装し、
上記難読化されたコードの部分は、ｃｍｏｖ命令の各々の実際の発生について、ｃｍｏｖ命令の複数のダミー発生を含み、
期待される値ｒを含む、ｏで示されるオブジェクトの全てのＭ個の可能性のある値ｏｉに対応する、ｃｍｏｖ命令の実際の発生及び対応するＭ−１個のダミー発生のセットについて、結果として、
−セットの第ｉ番目の発生について、移動条件は「ｏがｏｉに等しいこと」であって、
−実際の発生は、ｏｊ＝ｒとなるような第ｊ番目であって、
−セットの全ての他の発生は、ダミー発生であって、
上記コードが、データ処理手段を組み立てるための言語にあって、
上記アセンブリ言語が、ｘ８６アセンブラであって、
上記暗号アルゴリズムは、対称暗号化アルゴリズムであって、コードの上記難読化された部分は、上記対称暗号化アルゴリズムの少なくとも１回のラウンドを実装する。
【００１３】
第２態様によれば、本発明は、第１コンピュータコードによって表される所与の秘密鍵を有する暗号アルゴリズムを難読化するための方法であって、サーバのデータ処理手段によってステップ、すなわち、
（ａ）第１コードを第２コードに書き換えるステップであって、上記秘密鍵を使用する上記コードの少なくとも１つのいわゆる難読化された部分が、命令の第２オペランドの命令の第１オペランドにおける無条件移動についての命令である１つのいわゆるｍｏｖ命令のみを使用する、ステップと、
（ｂ）第２コードに対応する第３コードを生成するステップであって、難読化された部分の各々のｍｏｖ命令が、命令の第２オペランドの命令の第１オペランドにおける条件付き移動についての命令であるいわゆるｃｍｏｖ命令によって置き換えられ、少なくとも１つのダミーｃｍｏｖ命令が追加される、ステップと、を実装することを含む、方法に関する。
【００１４】
有利だが非限定的な特徴によれば、本方法は、上記暗号アルゴリズムを実装するために機器のデータ処理手段によって実行する目的で、機器の記憶手段上に記憶するために第３コードを機器に送信するステップ（ｃ）を含む。
【００１５】
第３及び第４態様によれば、本発明は、所与の秘密鍵を有する暗号アルゴリズムを実装又は難読化するための第１態様による又は第２態様による方法を実行するためのコード命令を含む、コンピュータプログラム製品、及びコンピュータプログラム製品が、所与の秘密鍵を有する暗号アルゴリズムの難読化を実装する第１態様による又は第２態様による方法を実行するためのコード命令を含む、コンピュータ機器によって読み取り可能な記憶手段に関する。
【図面の簡単な説明】
【００１６】
本発明の他の特徴及び利点は、好ましい実施形態の以下の説明を読むと見えてくる。この説明は、添付図面を参照して与えられる。
【図１】本発明による方法の実装のためのアーキテクチャの図である。
【図２】本発明による難読化のための方法の実施形態を示す。
【発明を実施するための形態】
【００１７】
アーキテクチャ
図１を参照して、モバイル端末（スマートフォン、タッチパッドなど）などの機器１０ａ、すなわち、特定の安全なハードウェアを有さずハードウェア実装への攻撃の対象となり得、ホワイトボックスアプローチが最大の関心事である機器の一部内に実装された「ホワイトボックス」暗号アルゴリズムを実装するための方法も、このホワイトボックス実装を可能にする暗号アルゴリズムを難読化する方法も提案される。
【００１８】
機器１０ａは、データ処理手段１１ａ（プロセッサ）及びデータ記憶手段１２ａ（メモリ、例えば、フラッシュメモリ）を備える。
【００１９】
機器１０ａは、例えば、インターネットネットワーク２０を介してサーバ１０ｂに接続される。それは、このサーバ１０ｂ（例えば、セキュリティソリューションのプロバイダのもの）から、メモリ１２ａに格納され、本方法の実装のために使用される秘密を含むコード（以下で説明する）の一部を受信することを必要とし得る。
【００２０】
機器１０ａそのものは、本方法によって暗号化データを交換することができる他の第三者サーバ１０ｃに接続され得る。
【００２１】
暗号化技術方法
第１態様による方法は、暗号アルゴリズムを実装するための方法、特に、場合に応じて、データを暗号化又は復号化することを可能にすることを意味する「暗号化又は復号化」方法である。したがって、それは、特に、対称タイプ、又は「秘密鍵」タイプ、又は非対称タイプ（例えば、第三者が公開鍵を有するシグネチャアルゴリズム）である。
【００２２】
本方法は、現在の標準である３ＤＥＳ又はＡＥＳなどの既知のアルゴリズムの新しい実装であることが理解されるであろう。より正確には、新しい暗号化ストラテジを提案するものではないが、アルゴリズムの新しい実装のみを提案するものであって、したがって、全ての「ホワイトボックス」攻撃に対して耐性のあるアルゴリズム内のデータを操作する新しい方法を提案する。したがって、本方法は、従来、機器１０ａのデータ処理手段１１ａによって、難読化された方法で（難読化された部分と称されるコードの少なくとも一部について）データ記憶手段１２ａ上に格納された上記暗号機能を実装するコードを実行することを含む。上記コードは、好ましくは、アセンブリ言語と称されるデータ手段１１ａによって直接解釈可能な言語にある。例えば、（現在、サービスにおいてプロセッサの大多数を構成する）ｘ８６ファミリのプロセッサは、命令のｘ８６セットを使用してｘ８６アセンブリ言語を認識する。本開示の残りの部分では、ｘ８６の例が取られる。
【００２３】
「難読化」は、本明細書では、リバースエンジニアリングを一般的に防止するために、特にアルゴリズム及びその鍵へのアクセスを防止するために、コンピュータコードを「判読しにくくするか、又は理解しにくくする」という事実を意味する。
【００２４】
全体のアルゴリズムのコードは、開示される方法で必ずしも完全に難読化される必要はなく、実際には、いわゆる「センシティブな」部分について、特に、上記秘密鍵でパラメータ化された動作を表すもの、最も特に、置換機能の適用を含むものについて難読化されることが十分であることに留意すべきである。
【００２５】
より正確には、従来のスキームによれば、実装されるアルゴリズムは、ブロックによってデータブロックを処理し、ブロック内で、より小さいサイズの要素、例えば、（例えば、ＡＥＳの場合における）１２８ビットブロックについてのバイトの１６個の要素を操作する。これらの要素は、典型的には対で操作される。
【００２６】
したがって、本方法は、好ましくは、ｎタプルのデータ｛ａｉ｝ｉ＜ｎを、ｎタプルの既定の秘密鍵｛ｋｉ｝ｉ＜ｎで暗号化又は復号化する。
【００２７】
上記データｎタプル｛ａｉ｝ｉ＜ｎの各々の要素ａｉは、
【００２８】
【数１】
2020194157.tif 000003
【００２９】
で示される空間部｛０；１｝ｋにおける値を有し、有利には、１バイト（８ビットの「バイト」、すなわちｋ＝８）のサイズを有する。
【００３０】
より小さい要素から完全なブロックを処理するために、ブロック内の動作を掛け合わせることが必要であり、この目的のために、本方法は、従来の方法で、実装される暗号アルゴリズムに基づいて各々与えられる、線形多重化関数Ｌの使用と結合された置換非線形関数ｆの使用を有利に含む。
【００３１】
置換関数ｆは、入力として
【００３２】
【数２】
2020194157.tif 000004
【００３３】
の入力要素を取り、同じサイズの（すなわち、
【００３４】
【数３】
2020194157.tif 000005
【００３５】
の）出力要素を生成する秘密鍵ｋｉでパラメータ化された関数である。これらの関数は周知であり、例えば、ＤＥＳ及びＡＥＳの場合において、関数ｆは、多くの場合、表にされ、そしてＳボックスと呼ばれる。
【００３６】
アルゴリズムは、典型的には、全体のブロックが処理されるまで、要素を入れ替えるためにｆを使用するステップ、そしてデータを送信するためにＬを使用するステップを交互にすることなどを含み、これは、いわゆるアルゴリズムのラウンドである。したがって、本方法は、上記ｎタプル｛ａｉ｝ｉ＜ｎのデータのセットを含むデータのセットを暗号化又は復号化するようにこの繰り返しを有利に含むことが理解されるであろう。
【００３７】
以下に開示されるように難読化されるセンシティブな部分は、特に、最初の及び／又は最後のラウンド（例えば、ＡＥＳにおける最初の／最後の３つ）、換言すれば、上記秘密鍵を使用する置換機能の最初の及び／又は最後のラウンドにおける適用に限定され得る。
【００３８】
中間ラウンドのみを標的にする攻撃があることに留意すべきである。したがって、完全な保護が求められる場合、全てのラウンドに対応する部分を難読化することができる。
【００３９】
置換機能のみを保護することは、必ずしも十分ではないことにも留意すべきである。鍵ビットが多すぎて攻撃が可能でないことによるまで、全ての動作を通じてセンシティブなデータを保護することに関心があり得る。例えば、ＡＥＳについて、これは、第２ラウンドの「混合カラム」まで進むことに対応する。
【００４０】
本発明の原理
本方法は、上記コードの少なくとも１つのいわゆる難読化された部分が、命令の第２オペランドの命令の第１オペランドにおける条件付き移動のための命令である１つのいわゆるｃｍｏｖ命令のみを使用し、コードの上記難読化された部分における上記ｃｍｏｖ命令の少なくとも１回の発生がダミーであることに注目すべきである。
【００４１】
より正確には、上記難読化された部分は、それぞれがｃｍｏｖ命令である複数の命令からなる、すなわち、ｃｍｏｖ命令以外の命令はない。当然、上記部分のうちの２つのｃｍｏｖ命令は、同一ではなく、それらは、異なるオペランド（すなわち、引数、パラメータ）を有し得る。各々のオペランドは、レジスタ、メモリアドレス、文字どおりの値、又はラベルであり得、典型的な場合では、これらは２つのレジスタであって、移動が、第２オペランドによって指定されたレジスタの内容を第１オペランドによって指定されたレジスタに書き込むことにあることに留意すべきである。
【００４２】
条件付き移動命令ｃｍｏｖは、命令の第２オペランドの第１オペランドにおける無条件移動ｍｏｖ、すなわち移動のみ、と称される従来の命令（特に、命令のｘ８６セット）と比較することによって理解される。
【００４３】
実際、ｃｍｏｖは、条件が検証される場合、及び条件が検証される場合にのみ移動を実装するのに対し、ｍｏｖは常にそれを実装する。典型的には、この条件は、「フラグ」と呼ばれるブール変数の値である。
【００４４】
有利に、ｃｍｏｖ命令は、より正確に、
−条件が検証される場合の、第２オペランドの第１オペランドにおける実際の移動（すなわち、通常のｍｏｖ命令）、
−又は、条件が検証されない場合の、第２オペランドの第１オペランドにおける移動のシミュレーションのいずれかを実装する。
【００４５】
この考え方は、機器へのアクセスを有する攻撃者が、命令の２つのブランチ間を区別することができない、すなわち、移動が実際に行われたか否かを述べることができないということである。
【００４６】
したがって、シミュレーションは、有利に、真の移動として、メモリアクセス及び書き込みメモリを含むが、当然、シミュレーションは、第２オペランドの第１オペランドにおける実際の移動を含まない。
【００４７】
特に、デスティネーション（第１オペランド）がアクセスされるが、その現在の内容は、第２オペランドの代わりにそこでコピーされる。したがって、特定の方法では、第２オペランドの第１オペランドにおける移動のシミュレーションは、（メモリをそのまま残す）第１オペランドの第１オペランドにおける移動とみなされ得る。
【００４８】
あるいは、シミュレーションは、使用されない別のデスティネーションへの移動を含み得、すなわち、第２オペランドの第１オペランドにおける移動のシミュレーションを、第１オペランド以外の他の場所における第２オペランドの移動とみなす。
【００４９】
ｃｍｏｖ命令は、データ処理手段によって認識される命令のセットにおいて自然に存在し得るか（これは、命令の元のｘ８６セットにおける場合ではないが、より最新のバージョンはそれを含むことに留意すべきである。命令の元のセットは、条件付きであるがパラメータ条件を有しない「ゼロの場合の条件付き移動」についてのｃｍｏｖｚ命令を含み、より正確には、ゼロインジケータ（ゼロフラグ（Ｚｅｒｏ  Ｆｌａｇ、ＺＦ））が値１を有する場合に移動がもたらされることに留意すべきである。）又は基本命令を使用して「ラッパー」によって取得されることに留意すべきである。より正確には、基本ｍｏｖ命令がラッパーに組み込まれる。
【００５０】
特に、例えば、文書において提案される（ｃｍｏｖｚ命令を使用する）以下の元のｘ８６命令におけるラッパーを使用することができる。文書Ａｓｈａｙ  Ｒａｎｅ，Ｃａｌｖｉｎ  Ｌｉｎ，Ｍｏｈｉｔ  Ｔｉｗａｒｉ：Ｒａｃｃｏｏｎ：Ｃｌｏｓｉｎｇ  Ｄｉｇｉｔａｌ  Ｓｉｄｅ−Ｃｈａｎｎｅｌｓ  ｔｈｒｏｕｇｈ  Ｏｂｆｕｓｃａｔｅｄ  Ｅｘｅｃｕｔｉｏｎ．ＵＳＥＮＩＸ  Ｓｅｃｕｒｉｔｙ  Ｓｙｍｐｏｓｉｕｍ  ２０１５：
【００５１】
【数４】
2020194157.tif 000006
【００５２】
このラッパーのコードのサイズが小さいことにより、各々の命令が、任意の最終的な情報漏洩を検出するために完全に検査されることを可能にする。コードがプロセッサレジスタにのみ作用しメモリに決してアクセスしないため、プロセッサの安全なゾーンの制限内で動作することができる。秘密状態はレジスタ％１にロードされる。ライン４のｍｏｖ命令は、デスティネーションレジスタをｔ＿ｖａｌで初期化する。ライン５におけるテスト命令は、ｐｒｅｄがゼロに等しいかどうかをチェックし、ゼロインジケータ（ゼロフラグ、ＺＦ）、サインインジケータ（サインフラグ（Ｓｉｇｎ  Ｆｌａｇ、ＳＦ））及びパリティインジケータ（パリティフラグ（Ｐａｒｉｔｙ  Ｆｌａｇ、ＰＦ））を更新して、比較を反映する。以下のｃｍｏｖｚ命令は、ｐｒｅｄがゼロに等しい場合にのみ、デスティネーションレジスタ内の値ｆ＿ｖａｌをコピーする。この段階で、ＺＦ、ＳＦ、及びＰＦは、比較の結果をまだ含んでいる。ライン７上のテスト命令は、既知の秘密でない値を比較することによって、これらのインジケータを上書きする。
【００５３】
ｃｍｏｖ命令の使用は、ＳＧＸ（セキュアガードエクステンションズ）環境における欠陥に対するソリューションとして当業者が参照し得る文書に開示された。文書Ａｄｉｌ  Ａｈｍａｄ，Ｂｙｕｎｇｇｉｌｌ  Ｊｏｅ，Ｙｕａｎ  Ｘｉａｏ，Ｙｉｎｑｉａｎ  Ｚｈａｎｇ，Ｉｎｓｉｋ  Ｓｈｉｎ，ａｎｄ  Ｂｙｏｕｎｇｙｏｕｎｇ  Ｌｅｅ，ＯＢＦＳＣＵＲＯ：Ａ  Ｃｏｍｍｏｄｉｔｙ  Ｏｂｆｕｓｃａｔｉｏｎ  Ｅｎｇｉｎｅ  ｏｎ  Ｉｎｔｅｌ  ＳＧＸ，ＮＤＳＳ  ２０１９，（Ａｄｉｌ  Ａｈｍａｄ，Ｋｙｕｎｇｔａｅ  Ｋｉｍ，Ｍｕｈａｍｍａｄ  Ｉｈｓａｎｕｌｈａｑ  Ｓａｒｆａｒａｚ，Ｂｙｏｕｎｇｙｏｕｎｇ  Ｌｅｅ：ＯＢＬＩＶＩＡＴＥ：Ａ  Ｄａｔａ  Ｏｂｌｉｖｉｏｕｓ  Ｆｉｌｅｓｙｓｔｅｍ  ｆｏｒ  Ｉｎｔｅｌ  ＳＧＸ．ＮＤＳＳ  ２０１８も参照）。
【００５４】
より正確には、完全なセキュリティでセンシティブなアルゴリズムを実装する目的で、ＳＧＸは、内容が読み込み又は書き込みの目的のために保護されてアクセス不可能であってより高い特権レベルで実行されるプロセスによるものを含む、（セキュアエンクレーブと称される）プライベートメモリ領域を割り当てること、すなわち、プログラムが秘密性及び完全性をもって保護されて実行され得る、特にＯＳから保護され得る空間部を有することを提案する。エンクレーブは、「反転されたサンドボックス」とみなされ得、より堅牢なブラックボックス実装を可能にする。換言すれば、ＳＧＸは、そのものによっていかなるホワイトボックス保護も提供しないことが理解される。エンクレーブにおいて実行されるプログラムは、一般的に、アクセス可能な内部鍵及び状態で通常の方法で書き込まれ、保護はエンクレーブの漏洩防止によってもたらされる。
【００５５】
更に、このアーキテクチャは、多くの方法で、例えば、補助チャネルを通じた攻撃（データへのアクセスのパターンにおける、漏洩、キャッシュ攻撃）によって、又はスペクトルタイプの攻撃によって攻撃されやすいことが証明されている。
【００５６】
ＯＢＬＩＶＩＡＴＥ／ＯＢＦＳＣＵＲＯソリューションは、「忘却性」、すなわち、補助チャネル攻撃によって検出され得る跡（例えば、キャッシュ）を残さないという事実を追加することによって、いくつかのこれらの脆弱性を修正しようとする。このために、ｃｍｏｖ命令と結合されたリソースへのアクセスを隠すために忘却性のＲＡＭタイプのアルゴリズム（Ｅ．Ｓｔｅｆａｎｏｖ，Ｍ．Ｖａｎ  Ｄｉｊｋ，Ｅ．Ｓｈｉ，Ｃ．Ｆｌｅｔｃｈｅｒ，Ｌ．Ｒｅｎ，Ｘ．Ｙｕ，ａｎｄ  Ｓ．Ｄｅｖａｄａｓ，「Ｐａｔｈ  ｏｒａｍ：ａｎ  ｅｘｔｒｅｍｅｌｙ  ｓｉｍｐｌｅ  ｏｂｌｉｖｉｏｕｓ  ｒａｍ  ｐｒｏｔｏｃｏｌ，」ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ２０ｔｈ  ＡＣＭ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｃｏｍｐｕｔｅｒ  ａｎｄ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ  Ｓｅｃｕｒｉｔｙ（ＣＣＳ），Ｂｅｒｌｉｎ，Ｇｅｒｍａｎｙ，Ｏｃｔ．２０１３）の使用が提案される。
【００５７】
したがって、ＯＢＦＳＣＵＲＯは、補助チャネルを通じた特定の攻撃、この場合においてタイミングを通じた又はキャッシュを通じたものを防止することに成功している。
【００５８】
しかしながら、補助チャネルを通じた多くの他の攻撃、特に、消費、電磁気放射、故障、及び一般的には、ハードウェアへの完全なアクセスが利用可能であるときに可能性のある攻撃が可能なままであることが見つけられている。
【００５９】
換言すれば、ＯＢＦＳＣＵＲＯが、サーバなどのリモート機器上に実装された暗号アルゴリズムの場合に有効であるなら、これは、モバイル端末タイプの機器１０ａの場合ではない。
【００６０】
本方法の背景の考え方は、任意のコンピュータコードが、ｃｍｏｖ命令を使用してのみ書き込まれ得、それによってＯＢＦＳＣＵＲＯの制限を解決するということである。
【００６１】
実際、ｍｏｖ（無条件）命令は、チューリング完全であり、したがって、任意のコードを、ｍｏｖ命令から完全に書き換えることができることが実証されている。
【００６２】
特に、入力としてｘ８６コードを取りｍｏｖ命令のみを使用してそれを書き換える、Ｍ／ｏ／Ｖｆｕｓｃａｔｏｒコンパイラがある。当然、取得されたコードは、不必要に長く複雑であり、したがって難読化される。平均して、コードファイルのサイズは、書き換えにより、３５で掛け合わされることに留意すべきである。
【００６３】
そこから、アクセス可能なハードウェアの場合、したがってホワイトボックス環境においてさえも、ｍｏｖの代わりにｃｍｏｖ命令でこの時書き込まれた同じコードは、その条件付き性質の事実によりコードの各々の命令が追跡できないので攻撃できなくなる。
【００６４】
当然、コードの上記難読化された部分における上記ｃｍｏｖ命令の少なくとも１回の発生はダミーでなければならない。「ダミー」は、上記コードの通常の実行中に条件が真ではないことを意味し、したがって、この命令によって定義される移動は、実装されることを意図していないことを意味する。攻撃者をだますためだけにあってアルゴリズムに寄与しないという意味で、デコイ命令という用語もある。換言すれば、この命令によって指示された移動が実際に実行された場合、実行は、結果としてエラーを生じるであろう。
【００６５】
より正確には、コードがＮ個のｍｏｖ命令で書くことができると仮定し、Ｎ個のｃｍｏｖ命令のみが使用される場合、その理由は条件が全ての時間に真であって移動のシミュレーションはないためである。Ｎ’＞Ｎのｃｍｏｖ命令が使用される場合、実際に実装されるＮ個の命令のみがあることを知っていたとしても、攻撃者は、それらがどのものであり、それらをＮ’−Ｎ＞０ダミー命令から区別しないであろう。
【００６６】
各々のｃｍｏｖ命令が、実際の移動又はシミュレーションを引き起こす、好ましい実施形態では、ダミー命令は、第２オペランドの第１オペランドにおける移動シミュレーションを実装することを意図する。
【００６７】
要するに、難読化された部分を実行するとき、各々のｃｍｏｖ命令は、実際又はダミーであるか否かにかかわらず実行されるが、実際のｃｍｏｖｓの実行のみが有効かつ正しい移動を生じさせる（ダミーｃｍｏｖｓの実行は偽の移動又は誤った移動のいずれかを生じさせる）。
【００６８】
第１実施形態によれば、例えば、各々のｃｍｏｖについて上記で定義したようなラッパーを使用することによって、ＳＧＸなどの安全な実行環境において難読化されたコードを実行することが可能である。
【００６９】
完全にホワイトボックス環境が望まれる（すなわち、任意のプロセッサ上で従来の安全でない方法で実行される）場合、第２実施形態によれば、文書に開示されることによって与えられるラッパーが使用され得る。文書Ｅｍｍａｎｕｅｌ  Ｐｒｏｕｆｆ，Ｍａｔｔｈｉｅｕ  Ｒｉｖａｉｎ：Ａ  Ｇｅｎｅｒｉｃ  Ｍｅｔｈｏｄ  ｆｏｒ  Ｓｅｃｕｒｅ  ＳＢｏｘ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ．ＷＩＳＡ  ２００７。
【００７０】
この文書は、オブジェクトの０〜２ｋ−１（
【００７１】
【数５】
2020194157.tif 000007
【００７２】
の値でＳボックスを想定する）の全ての可能性のある値が、１つを除いて全て偽であるとみなされるＳボックスの実装を提案する。この原理は、ｃｍｏｖ命令に拡張することができ、各々のｍｏｖ命令は、複数のｃｍｏｖ命令に複製され、そのうちの１つは「真」であり、残りはダミーである。換言すれば、コードをＮ個のｍｏｖ命令で書き込むことができ、オブジェクトのＭ個の可能性のある値があると想定すると、Ｎ個の実際の命令及びＮ×（Ｍ−１）個のダミー命令を含むＮ×Ｍ個のｃｍｏｖ命令が使用される。
【００７３】
より正確には、期待される値ｒを含む、ｏで示されるオブジェクトの全てのＭ個のｏｉの可能性のある値に対応する、１つの実際の命令及びＭ−１個のダミー命令を含む、命令の「関連付けられた」セットｃｍｏｖｉ，ｉ＜Ｍ（ｃｍｏｖｉはセットの第ｉ番目のｃｍｏｖ命令を指し示す）について、結果として、
−各々のｃｍｏｖｉについて、条件は「ｏがｏｉに等しい」であって、
−実際の命令は、ｊ＝ｒとなるようなｃｍｏｖｊであって、
−全ての他のｃｍｏｖｉ（すなわち、ｏｉ≠ｒ）はダミー命令である。
【００７４】
そのように、当業者は、この文書のアルゴリズムの１つをラッパーとして使用し得る。文書Ｅｍｍａｎｕｅｌ  Ｐｒｏｕｆｆ，Ｍａｔｔｈｉｅｕ  Ｒｉｖａｉｎ：Ａ  Ｇｅｎｅｒｉｃ  Ｍｅｔｈｏｄ  ｆｏｒ  Ｓｅｃｕｒｅ  ＳＢｏｘ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ．ＷＩＳＡ  ２００７。
【００７５】
あるいは又はそれに加えて、実行に不正を働きたい相手に確実に対抗できるようにするために、異なる代替のｃｍｏｖ命令の並行実行（実際又はダミー、特に、オブジェクトのＭ個の異なる値に対応するＭ個のｃｍｏｖ命令の同時実行）についてのスレッドを実装することによって複製技術を使用することができる。文書参照Ｏｓｃａｒ  Ｒｅｐａｒａｚ，Ｌａｕｒｅｎ  Ｄｅ  Ｍｅｙｅｒ，Ｂｅｇｕｌ  Ｂｉｌｇｉｎ，Ｖｉｃｔｏｒ  Ａｒｒｉｂａｓ，Ｓｖｅｔｌａ  Ｎｉｋｏｖａ，Ｖｅｎｔｚｉｓｌａｖ  Ｎｉｋｏｖ，Ｎｉｇｅｌ  Ｐ．Ｓｍａｒｔ：ＣＡＰＡ：Ｔｈｅ  Ｓｐｉｒｉｔ  ｏｆ  Ｂｅａｖｅｒ  Ａｇａｉｎｓｔ  Ｐｈｙｓｉｃａｌ  Ａｔｔａｃｋｓ．ＣＲＹＰＴＯ（１）２０１８。
【００７６】
これらの難読化技術の全てを結合して、Ｍ＝２８＝２５６を取ることによって、暗号アルゴリズムを実装する元のコードのサイズは、典型的には、少なくとも１００００掛け合わされることに留意する。命令の各々が実際及びダミーの両方であり得ることを知ると、任意の補助チャネルを通じた任意の攻撃によって、使用可能な情報を識別することは、もはや可能ではないことが理解される。
【００７７】
難読化方法
第２態様によれば、図２に戻って参照して、第１コンピュータコードによって表される所与の秘密鍵で暗号アルゴリズムを難読化するための方法、すなわち、第１態様による、アルゴリズムの実装についての（第３コードとして指し示されるであろう）上記難読化されたコードを取得するための方法が提案される。第１コードは、典型的には、従来の、すなわち難読化されていないプログラミング言語から、様々な命令を使用して、直接書き込まれるか又はコンパイルされるようなアセンブリ言語コードである。
【００７８】
この方法は、典型的には、サーバ１０ｂ上で安全な方法で実装される。
【００７９】
したがって、サーバ１０ｂのデータ処理手段１１ｂは、第１コードを第２コードに書き換えるステップ（ａ）であって、上記秘密鍵を使用する上記コードの少なくともいわゆる難読化された部分が、命令の第２オペランドの命令の第１オペランドにおける無条件移動についての命令である単一のいわゆるｍｏｖ命令のみを使用する、ステップ（ａ）を開始する。
【００８０】
換言すれば、元のコードは、Ｍ／ｏ／Ｖｆｕｓｃａｔｏｒなどのツールを使用することによって、ｍｏｖ−ｏｎｌｙに変換される。
【００８１】
第２コードは、アセンブリ言語にないであろう第１コードから直接コンパイルされ得ることに留意すべきである。
【００８２】
以下のステップ（ｂ）において、第２コードに対応する第３コードが生成され、難読化された部分の各々のｍｏｖ命令が、命令の第２オペランドの命令の第１オペランドにおける条件付き移動についての命令であるいわゆるｃｍｏｖ命令によって置き換えられる。この段階で、それぞれのｃｍｏｖ命令は、実際の命令であって、そのため、ステップ（ｂ）が少なくとも１つのダミーｃｍｏｖ命令を第３コードに追加することを含む。
【００８３】
この目的のために、上記で説明したように、特に、オブジェクトが値を取ることができる回数と同じ回数で実際のｃｍｏｖ命令を複製することによって、各々の実際のｃｍｏｖ命令についての複数のダミーｃｍｏｖ命令を追加することが可能である。
【００８４】
最後に、難読化するための方法は、上記暗号アルゴリズムの実装、すなわち、第１態様による方法について機器１０ａのデータ処理手段１１ａによって実行する目的で、機器１０ａの記憶手段１２ａ上に記憶するために第３コードを機器１０ａに送信するステップ（ｃ）を含み得る。
【００８５】
コンピュータプログラム製品
第３及び第４態様によれば、本発明は、所与の秘密鍵で暗号アルゴリズムを実装又は難読化する本発明の第１態様又は第２態様による方法を（特に、機器１０ａ及び／又はサーバ１０ｂのデータ処理手段１１ａ、１１ｂ上で）実行するためのコード命令を含む、コンピュータプログラム製品にも、このコンピュータプログラム製品が見つけられるコンピュータ機器（機器１０ａ及び／又はサーバ１０ｂのメモリ１２ａ、１２ｂ）によって読み取り可能な記憶手段にも関する。
【図１】
2020194157.tif 000008
【図２】
2020194157.tif 000009