(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-04-03
(54)【発明の名称】集積回路内のプログラムを保護する方法
(51)【国際特許分類】
G06F 21/55 20130101AFI20240327BHJP
【FI】
G06F21/55 380
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2023563860
(86)(22)【出願日】2022-04-15
(85)【翻訳文提出日】2023-11-20
(86)【国際出願番号】 EP2022060195
(87)【国際公開番号】W WO2022223490
(87)【国際公開日】2022-10-27
(32)【優先日】2021-04-19
(33)【優先権主張国・地域又は機関】EP
(81)【指定国・地域】
(71)【出願人】
【識別番号】522230381
【氏名又は名称】タレス ディアイエス フランス エスアーエス
(74)【代理人】
【識別番号】100086368
【氏名又は名称】萩原 誠
(72)【発明者】
【氏名】ダヴィッド ヴィジラント
(72)【発明者】
【氏名】ジャン ロック クーロン
(72)【発明者】
【氏名】ジェローム ヴァスール
(57)【要約】
本発明は、集積回路製品内のプログラムを保護する方法であって、-プログラムの1つ以上の元の命令コードをそれぞれ置き換えるために1つ以上の命令コードブロックを作成する(205a、205b)ステップであって、命令コードブロックがある数の架空の命令コード及び対応する元の命令コードを含み、架空の命令コードが、その結果を考慮せず、プログラムの予想される結果に影響を与えることなく実行され、命令コードブロック内の数及び元の命令コードの位置が、集積回路製品の乱数又は擬似乱数発生器によってランダムに決定されるステップと、-1つ以上の命令コードブロックを実行する(206)ステップとを含む方法に関する。
【選択図】
図2
【特許請求の範囲】
【請求項1】
集積回路製品内のプログラムを保護する方法であって、前記方法が、
-前記プログラムの1つ以上の元の命令コードをそれぞれ置き換えるために1つ以上の命令コードブロックを作成する(205a、205b)ステップであって、前記命令コードブロックがある数(D)の架空の命令コード及び対応する元の命令コードを含み、前記架空の命令コードが、その結果を考慮せず、前記プログラムの予想される結果に影響を与えることなく実行され、前記命令コードブロック内の前記数(D)及び前記元の命令コードの位置(P)が、前記集積回路製品の乱数又は擬似乱数発生器によってランダムに決定されるステップと、
-前記1つ以上の命令コードブロックを実行する(206)ステップと
を含む方法。
【請求項2】
作成した前記架空の命令コードの少なくとも一部が、前記集積回路製品にあらかじめ記憶させた架空の命令コードのリストから選択される(205a)、請求項1に記載の方法。
【請求項3】
作成した前記架空の命令コードの少なくとも一部が、前記元の命令コードのコピーである(205b)、請求項1又は2に記載の方法。
【請求項4】
前記方法が更に、
-前記集積回路製品にあらかじめ記憶させたターゲット命令コードのリストから、置き換えるべき前記1つ以上の元の命令コードを特定する(204)こと
を含む、請求項1乃至3のいずれか一項に記載の方法。
【請求項5】
前記架空の命令コードに関連付けられたオペランドが、前記乱数又は擬似乱数発生器によって生成される、請求項1乃至4のいずれか一項に記載の方法。
【請求項6】
請求項1乃至5のいずれか一項に記載のプログラムを保護する方法を実装するプロセッサ。
【請求項7】
請求項6に記載のプロセッサを備えた集積回路製品。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラムを実行するように適合され、攻撃を受けやすい集積回路製品におけるプログラムを保護する方法に関する。本発明はまた上記方法を用いる集積回路にも関する。
【背景技術】
【0002】
物理的攻撃に対するシステム抵抗を高めることが常に求められている。サイドチャネル攻撃やフォールト攻撃などの攻撃は一般に、ターゲットに到達するまでに同じプロセスを膨大な回数実行する必要がある。
【0003】
一部の攻撃タイプは、レーザ攻撃のセットアップ及び再現、相関攻撃のためのいくつかの実行にわたるイベントの同期、又はタイミング攻撃のタイミング期間の測定など、予測可能なタイミング実行の恩恵を受けることがある。コンピュータのあらゆる論理演算の実行には時間がかかり、その時間は入力によって異なる可能性がある。各演算の時間を正確に測定することで、攻撃者は入力に遡る可能性がある。
【0004】
現在、予測可能なタイミング実行を変更するためのいくつかの反撃ソリューションが存在している。例えば、ランダムクロックスティーラソリューションは、クロックパルスを除去する(又は盗む)ことを提案する。クロックジッタソリューションは、クロック周波数を継続的に変更することを提案する。ソフトウェアにより挿入されるランダム遅延ソリューションは、機密コードを保護する必要がある場合に、処理ユニットが予測不可能な数の命令を実行する関数を実行することを提案している。
【0005】
しかしながら、これらの既存のソリューションは満足できるものではなく欠点がある。例えば、ランダムクロックスティーラ及びクロックジッタは、コード実行の全体又は大部分、コードの機密でない部分にも適用される。したがって、コードを実行する製品へのパフォーマンスインパクトは大きい。ランダムクロックスティーラがクロックを停止すると、消費電力が特徴的な痕跡を残して低下する。これによって対抗策の効率が制限される。
【0006】
ソフトウェアにより挿入されるランダム遅延は、コード内にコードサイズを大きくする関数を追加することを意味する。ランダム遅延は、呼び出す必要がある専用関数に実装されている。呼び出し機構及び復帰機構には、かなりのクロックサイクルがかかる。ランダム遅延関数を挿入するタイミングコストは高い。
【0007】
したがって、これらの反撃方法は十分に効率的ではないため、当技術分野では、これらの以前の反撃方法を補完して実装される更なる代替的かつ有利な解決策が望ましいものとなる。
【発明の概要】
【0008】
本発明は、効率的な方法で上述の悪意のある攻撃を回避する、又は少なくともより困難にすることを目的とする。
【0009】
本発明は、集積回路製品内のプログラムを保護する方法であって、方法が、
-プログラムの1つ以上の元の命令コードをそれぞれ置き換えるために1つ以上の命令コードブロックを作成するステップであって、命令コードブロックがある数の架空の命令コード及び対応する元の命令コードを含み、架空の命令コードが、その結果を考慮せず、上記プログラムの予想される結果に影響を与えることなく実行され、命令コードブロック内の数及び元の命令コードの実行位置が、集積回路製品の乱数又は擬似乱数発生器によってランダムに決定されるステップと、
-1つ以上の命令コードブロックを実行するステップと
を含む方法を提案する。
【0010】
したがって、本発明は、集積回路製品のプロセスが、そのプロセッサがプログラム(例えば、機密データを処理する暗号プログラム)の元の命令(例えば、OR、AND、XORなどの命令コード)を実行するときに、他の命令(例えば、架空の命令コード)であって、その演算や戻り値を考慮せずに実行され(例えば、これらの架空の命令の結果はプロセッサのガベージレジスタに記憶されるか又は記憶されない)、プログラムの予想される結果に影響を与えることなく実行される他の命令の実行をトリガすることを可能にする。
【0011】
結果として、プログラムの1つの元の(又は実際の)命令コードに対して、この元の命令コードと1つ以上の架空の(又は偽の)命令コードを含む置換命令コードブロックが生成及び実行される。あらゆる命令コードブロックの架空の命令コードの数は、乱数発生器を使用してランダム化される。また、あらゆる命令コードブロックにおける元の命令コードを実行する位置(又は順序)もランダム化される。
【0012】
したがって、本発明は、攻撃者がプログラムの通常の実行パターンを分析しセキュリティ侵害を発見することを防ぐために、プログラムの元の命令コードの実行タイミングをマスクする(又は隠す)ことを可能にする。
【0013】
本発明はまた、架空の命令コードの数と元の命令コードの実行位置のランダム化によって、元の命令コードの実行タイミングがプログラムが実行されるたびに異なるために、同じプログラムの実行パターンを動的に変更することを可能にする。
【0014】
提案する解決策は製品の機能に影響を与えることはない。架空の命令コードの性能消費は、通常の命令コード実行の性能消費と同様である。この方法はソフトウェア(すなわち関数呼び出し)ではなくハードウェア(すなわちプロセッサ設計)によって実装されるため、本発明は製品の性能に大きな影響を与えない。
【0015】
この解決策は更に、前述の既存の対抗策と互換性がある。
【0016】
したがって、本発明による方法は、単純かつ効率的な方法で悪意のある攻撃のリスクを軽減することを可能にする。少なくとも、悪意のある攻撃者にとって攻撃を実行するのが複雑になる。
【0017】
ある例では、上記作成した架空の命令コードの少なくとも一部は、上記集積回路製品にあらかじめ記憶させた架空の命令コードのリストから選択される。
【0018】
これによって、プロセッサは、例えば解読段階において、開発者にプログラムのアセンブリコードに架空の命令コードを手動で追加するように求めることなく、架空の命令コードを自動的に作成することができる。
【0019】
ある例では、作成した架空の命令コードの少なくとも一部は、元の命令コードのコピーである。
【0020】
このオプション機能は実現が簡単であり、プログラムの実際の命令コードの実行タイミングを隠すという同じ目的を達成することもできる。
【0021】
ある例では、作成した架空の命令コードに関連付けられたオペランド(あらかじめ記憶させたリストから選択されたもの又は元の命令コードからコピーされたもののいずれか)は、乱数又は擬似乱数発生器によって生成されることがある。代替的に、オペランドはプロセッサによってあらかじめ記憶させたリストからランダムに又は順番に選択されることもある。
【0022】
これらの架空のオペランドは、架空の命令コードによって使用されるように作られている。架空のオペランド及び命令コードを使用する目的は、攻撃者が機密命令(命令コード及びデータ)の実行タイミングをほとんど予測できないように、集積回路カードが機密プログラム(又は少なくともプログラムの機密部分)を実行できるようにすることである。
【0023】
前述のように、架空の命令コードの計算結果は、実際の命令コードの通常の(又は予想される)結果に影響を与えないように、ガベージレジスタに記憶されることも記憶されないこともある。
【0024】
ある例では、この方法は、集積回路製品にあらかじめ記憶させたターゲット命令コードのリストから置換されるべき1つ以上の元の命令コードを特定するステップを更に含む。
【0025】
これによって、プロセッサはプログラムの一部(例えば機密部分)のみのためにアセンブリコードを変更することができる。したがって、この方法は、大きな性能消費を必要としないという利点がある。
【0026】
本発明はまた、本発明による集積回路製品内のプログラムを保護する方法を実施するプロセッサに関する。
【0027】
本発明はまた、本発明によるプロセッサを備えた集積回路製品に関する。
【0028】
前述の及び関連する目的を達成するために、1つ以上の実施形態が、以下に十分に説明され、特に特許請求の範囲で指摘される特徴を含む。
【図面の簡単な説明】
【0029】
以下の説明及び添付の図面は、いくつかの例示的な態様を詳細に説明し、実施形態の原理を使用し得る様々な方法のうちのほんの数例を示すものである。他の利点及び新規な特徴は、図面と併せて考慮するときに以下の詳細な説明から明らかとなり、開示される実施形態はそのような態様及びそれらの均等物を全て含むものとする。
【0030】
【
図1】本発明のある実施形態に係る集積回路製品などのコンピューティングデバイスのハードウェア構造を模式的に示す図。
【
図2】本発明のある実施形態に係る方法のフローチャートを模式的に示す図。
【
図3】本発明のある実施形態に係る命令ブロック内の命令の実行順序を模式的に示す図。
【発明を実施するための形態】
【0031】
異なる図面において、同じ要素には同じ参照番号を付してある。明確にするために、本発明の理解に役立つ要素及びステップのみを図面に示し説明が行われる。
【0032】
図1を参照すると、集積回路又はスマートカードなどのコンピューティングデバイスが、コンピューティングデバイス、特にそのCPUが、機密性の高いプログラム(例えば暗号アルゴリズム)又はプログラムの少なくとも機密性の高い部分の元の命令を、その元の命令の実行タイミングを予測不可能にするためにランダムな架空の命令を追加することによって変更できるようにすることによって、物理的攻撃(レーザフォールト攻撃、サイドチャネル攻撃、相関攻撃及びタイミング攻撃など)から保護するように適合されることがある。
【0033】
本発明の一実施形態では、コンピュータデバイス100は、キャッシュ102を備えるCPU(又はプロセッサ)101を含むことがある。
【0034】
キャッシュ102は、コンパイラ110がプログラム109から変換する命令を記憶するためのコードキャッシュ103及びデータキャッシュ104を含むことがある。プロセッサ101は、コードキャッシュ103を使用して、現在実行中のアプリケーションプログラムに基づいて、実行前に命令(オペレーションコード、又は命令コード)を記憶し、適用可能な場合に、データキャッシュ104を使用して各命令コードのデータ引数(オペランド)を記憶する。プロセッサ101は、命令パイプライン機能を使用して命令(通常、命令コード及びオペランドを含む)をフェッチし、それらをコードキャッシュ103に記憶することがある。
【0035】
コンピューティングデバイス100はまた、RAM105及びROM(読み取り専用メモリ)106を含むことがある。また、コンピューティングデバイス100は、メモリ107(例えば、ハードディスク又は他の永続ストレージ)に、オペレーティングシステムモジュール108及びプログラム109、並びにコンパイラ110を格納することがある。コンパイラ110は、CPU101が命令を処理できるようにプログラム109を命令のリストに変換する。
【0036】
コンパイラ110は、(例えば、プログラム209のコードを命令に変換することによって)命令のリストを生成する。命令は、CPU101が命令をフェッチして順番に実行できるようにキャッシュ102に記憶されている。
【0037】
命令の少なくとも一部を実行する前に、CPU101は、以下に更に説明するように、ハードウェア層に(例えば、CPU命令解読モジュールを介して)新しい命令(例えば、架空の命令コード)を作成して、プログラム109の元の命令(例えば、元の命令コード)を自動的に変更する。オペレーティングシステムモジュール108は、オペレーティングシステムに関して当技術分野で知られているように、コンピュータデバイスの動作全体を制御する。
【0038】
脆弱なコード109は、上記のような攻撃を受けやすい任意のソフトウェアアプリケーション又はコードコンポーネントである場合がある。
【0039】
当業者であれば、他のタイプのコンピューティングデバイスが本発明に従って実行するように適合され得ることを理解するであろう。例えば、コンピューティングデバイス100は、代替的に携帯電話(又は他の携帯端末)、携帯情報端末、モトローラ又は他のタイプのプロセッサを使用するAPPLE(登録商標)コンピュータ、縮小命令セットコンピュータ(RISC)、又は任意の他のタイプのコンピュータ若しくはデータ処理システムである場合がある。本明細書で開示されるデバイス及び方法は、固定サイズ(RISCベースのシステム)及び可変サイズ(CISCベースのシステム)の両方の命令セットを使用するデバイスに利益をもたらすことがある。
【0040】
更に
図2を参照すると、本発明は、脆弱なコード(又はプログラム)109を攻撃(具体的にはタイミング攻撃)から保護する例示的な方法200を提供する。最初に、ユーザ又は自動化プロセス(例えば、別のプログラム)のいずれかが、コンピューティングデバイス100(具体的には、プロセッサ101)にプログラム109を実行するように命令する。プログラムを実行するように命令されると、コンパイラ110はプログラム109を命令のリストに変換する。CPU101は、命令を順番にフェッチすることを開始し、フェッチした命令をコードキャッシュ103に記憶し、フェッチしたデータをデータキャッシュ104に記憶する。
【0041】
この例では、CPU101がフェッチした命令I(すなわち、プログラムの元の命令)の実行(201)に進むと、CPU101は、命令I(例えば、ORなどの命令コード)がCPU101に(例えば、CPU101の所定のレジスタ、又はCPUの別の内部メモリに)あらかじめ記憶されているターゲット命令のリストに存在するかどうかを識別する(202)。このターゲット命令リストは、タイミング攻撃などの攻撃から保護すべき機能的な命令(例えば、mov、store、xorなど)をCPU101に示すために使用される。
【0042】
そのようなターゲット命令リストをCPU101にあらかじめ記憶しておくことによって、プログラム全体ではなく、プログラム109の1つ以上の重要な部分のみに本発明の方法を適用することが可能になる。したがって、パフォーマンスと保護の間のバランスが上手く取れるようになることがある。
【0043】
当業者であれば、変形例ではターゲット命令リストを省略し得ることを容易に理解するであろうことに留意されたい。その場合、CPU101は、プログラムの全ての命令に本発明の保護方法を適用することがある。これは、プログラム全体を保護することが重要な場合に有益である場合がある。別の例では、開発者は、プログラムの機密部分を手動で特定し、特定の命令(例えば、コンパイラが新しい方法を実行するために作成されたsecure_mov、secure_store、secure_xorなど)を使用して、架空の命令の追加をトリガするようにCPU101に命令することがある。したがって、これらの任意選択的で代替的な特徴は、本発明の実施に一定の柔軟性を提供することがある。
【0044】
任意選択的なステップ202の後、命令Iがあらかじめ記憶させたターゲット命令リストからCPU101によって識別されない場合、CPU101は命令Iを実行する(203)。換言すれば、命令は、非機密性であると判断されるためにCPU101のいかなる保護手段もなしに実行される。
【0045】
そうではなく、命令IがCPU101によってあらかじめ記憶させたターゲット命令リストから識別される場合、この例では、CPU101は、CPU101に(例えば、CPUの所定のレジスタに)あらかじめ記憶させた架空の命令のリストがあるかどうかを判断する(204)ことがある。又は、CPUはあらかじめ記憶させた架空の命令のリストが空であるか否かを判断する(204)ことがある。
【0046】
架空の命令リストが存在するか空ではないと判断される(204)場合、この例では、CPU101は、リストから数Dの架空の命令(例えば、XOR、AND、ORなどの命令コード)を選択して、選択した架空の命令及び命令Iで構成される命令ブロックを作成する(205a)。この命令ブロックは元の命令Iに取って代わる。
【0047】
したがって、CPU101は、攻撃を防ぐために命令Iの実行タイミングを隠すために、命令Iのみを実行する代わりに、作成した命令ブロックを実行する(206)ことになる。
【0048】
この例では、数Dは、例えばCPU101のレジスタ又は数Dを決定しCPUに送信する外部記憶デバイス(例えば周辺装置)に実装される乱数又は擬似乱数発生器によって決定されることがある。したがって、保護すべき各元の命令Iに対してCPU101により使用される架空の命令の数は異なる場合がある。数Dは、性能消費を制御するために、限られた範囲内になるようにCPU101によって定められることがある。
【0049】
CPU101による架空の命令の選択はランダムに行われることがある。
【0050】
架空の命令とともに使用されるデータ(架空のデータと呼ばれ得る)は、乱数又は擬似乱数発生器によって生成されることもある。
【0051】
命令ブロック内の架空の命令の位置0、...、P-1、P+1、...、D-1のうち、元の命令Iを実行するための位置P(又はクロックサイクル、0とDの間にある)が乱数又は擬似乱数発生器によってランダムに決定されることもある。換言すれば、元の命令Iは、実際の(又は予想される)データ(例えば、プログラム109により指定されるオペランド)を用いて、P番目のクロックサイクル中に一回だけCPU101によって実行される。追加された架空の命令は、偽の(又は架空の)データ(例えば、乱数発生器により生成されるオペランド)を使用して、CPU101によって0番目、...、P-1番目、P+1番目、...、D-1番目のクロックサイクル中にそれぞれD回実行される。
【0052】
上で述べたように、数D、位置P、及び場合によっては他のパラメータをランダム化することが、CPUが単なる命令Iの代わりに命令ブロックを実行するときに、実際の命令Iの実行タイミングの予測を非常に困難にし、ひいては不可能にすることができる。
【0053】
一方、本発明は、CPUの命令解読挙動を変更することによってハードウェアレベルで実施されるため、既存のソフトウェアレベルの対策ソリューションと比較して、より高い計算性能を可能にする。更に、本発明の解決策は、プログラム109自体を変更する必要がない。架空の命令は、CPU101の解読段階中に追加される。
【0054】
所定の架空命令リストが存在しない又は空であるとCPU101が判断する(204)場合に、CPU101は、依然として元の命令Iのコピーを架空の命令として直接使用することによって、数Dの架空の命令を作成する(205b)ことがある。架空の命令Iのうち実際の命令Iの実行位置(又は順序)Pはランダムに決定されることがある。架空のオペランドは、それらの架空の命令とともに使用されることがある。架空の命令からの結果は、CPU101によって考慮されず、記憶されないことさえある。
【0055】
次に、CPU101は、D+1個の命令Iからなる命令ブロックを実行し(206)、元の命令Iは、P番目のクロックサイクル中に一回だけ予想されるデータでCPU101によって実行される。追加した架空の命令(元の命令Iと同じ)は、偽の(又は架空の)データ(例えば、乱数発生器により生成されるオペランド)を用いてCPU101によって0番目、...、P-1番目、P+1番目、...、D-1番目のクロックサイクル中にそれぞれD回実行される。
【0056】
当業者であれば、本発明の方法の変形例では、あらかじめ記憶させた架空の命令リストの存在をチェックするステップ204を省略し得ることを容易に理解するであろうことに留意されたい。その場合、CPU101は、命令Iを保護する必要があると判断した後に、命令Iを所定の架空の命令(元の命令Iと同じか又は異なる場合がある)に自動的に置き換えることがある。
【0057】
ここで
図3を参照すると、模式図が、元の命令を置き換えるためにCPU101により作成される命令ブロック内の命令の実行順序/タイミングを示している。
【0058】
元の命令Iを保護するために追加される架空の命令の数D及び元の命令Iの実行位置Pは、乱数又は擬似乱数発生器によって決定されることがある。持続時間Dは、規定された限定範囲内である場合がある。位置Pは0~D-1の範囲にある。実際の命令IはPクロックサイクルで実行される。クロックサイクル0、..、P-1、P+1、..、Dの間、架空の命令はそれぞれ、ランダム又は擬似ランダムデータを用いて実行されることがある。これらの架空の命令の結果は、ガベージレジスタに記憶されるか又は記憶されない。
【0059】
上記の詳細な説明では、本発明を実施することができる特定の実施形態を例示として示す添付図面が参照されている。これらの実施形態は、当業者が本発明を実施できるように十分に詳細に説明されている。したがって、上記の詳細な説明は限定的な意味に解釈されるべきではなく、本発明の範囲は、特許請求の範囲が権利を有する均等物の全範囲とともに、適切に解釈される添付の特許請求の範囲によってのみ定義される。
【手続補正書】
【提出日】2023-11-20
【手続補正1】
【補正対象書類名】明細書
【補正対象項目名】0036
【補正方法】変更
【補正の内容】
【0036】
コンパイラ110は、(例えば、プログラム109のコードを命令に変換することによって)命令のリストを生成する。命令は、CPU101が命令をフェッチして順番に実行できるようにキャッシュ102に記憶されている。
【手続補正2】
【補正対象書類名】図面
【補正方法】変更
【補正の内容】
【手続補正3】
【補正対象書類名】図面
【補正方法】変更
【補正の内容】
【国際調査報告】