【課題を解決するための手段】
【0006】
この目的のために、第1の態様によれば、本発明は、少なくとも1つの定数値を備えたソフトウェアコードをセキュアにする方法に関し、前記方法は、セキュアなソフトウェアコードを生成し:
− 保護されるべき定数値を、ソフトウェアコードにおいて、プロセッサによって決定するステップと、
− プロセッサによって、値のインデクス付けされた配列をソフトウェアコードに挿入し、配列の1つの値から、保護されるべき定数値が決定され得るようにするステップと、
− 保護されるべき定数値を、ソフトウェアコードにおいて、プロセッサによって、置換変数によって置換するステップと、
− 命令の第1のシーケンスを、プロセッサによってソフトウェアコードに挿入するステップであって、命令の第1のシーケンスは、ランタイムにおいて実行されたとき:
・ 保護されるべき定数値が決定され得る値の配列におけるインデクスを計算し、
・ 前記配列における前記計算されたインデクスに位置する値を、前記配列から抽出し、
・ 前記抽出された値から、保護されるべき定数値を決定し、
・ 前記置換変数の値を、決定された定数値に等しく設定する、ステップと
を備えている。
【0007】
定数値は、ソフトウェアコードにおいて、もはやそれとして出現しないため、定数値を攻撃者から隠すことができる一方、ランタイムにおいて、攻撃者によって容易に理解および再現されない手法で定数値を取得することを可能にする。結果として、セキュアなソフトウェアコードは、少なくともコードの静的解析に抵抗する可能性がより高くなる。
【0008】
実施形態では、命令の第1のシーケンスは、ランタイムにおいて実行されたとき、第1の中間値を返す、命令の第2のシーケンスと、ランタイムにおいて実行されたとき、前記インデクスを計算するために、第1の変換関数を前記第1の中間値に適用する、命令の第3のシーケンスとを備えている。
【0009】
保護されるべき定数値が決定され得る、値の配列におけるインデクスの2ステップの決定は、攻撃者が自分で前記インデクスを決定することを難しくし、したがって、この方法のセキュリティを強化する。
【0010】
実施形態では、第1の変換関数は、所定の変換関数の第1のセットにおいてランダムに選択される。
【0011】
変換関数をランダムに選択することが、異なる変数を保護するために異なる変換関数を使用することを可能にする。またこれは、保護されるべき定数値が決定され得る、値の配列におけるインデクスを検索するために、攻撃者が、使用する変換関数を予測することも不可能にする。
【0012】
実施形態では、保護されるべき定数値が決定され得る、配列における前記値は、保護されるべき定数値に等しい。
【0013】
これは、第1の変換関数によって返されたインデクスにおける配列における値を読み取ることにより、定数値のすばやく簡単な決定を可能とする。
【0014】
保護されるべき定数値は、メモリアドレスであり得、ソフトウェアコードがプロセッサによって実行されるとき、前記配列における値は、有効なメモリアドレスであり得る。
【0015】
こうすることで、攻撃者は、配列におけるアドレスの有効性に基づいて配列における定数値を認識できない。
【0016】
実施形態では、命令の第1のシーケンスは:
− ランタイムにおいて実行されたとき、第2の変換関数を前記第1の中間値に適用することによって、第2の中間値を決定する命令の第4のシーケンスと、
− ランタイムにおいて実行されたとき、抽出された値および第2の中間値に基づいて、保護されるべき定数値を決定する命令の第5のシーケンスとを含んでいる。
【0017】
このような実施形態は、配列における値からの定数値の間接的な決定を実施することを可能にする。こうすることで、定数値は、セキュアなソフトウェアコードのどこにも出現しなくなり、配列にさえも出現しなくなる。このような定数値の2ステップの決定が、攻撃者がプロセスを理解し、定数値を自分で検索することを、より困難にする。
【0018】
実施形態では、第2の変換関数は、所定の変換関数の第2のセットにおいてランダムに選択される。
【0019】
このような第2の変換関数のランダムな選択は、上記の第1の変換関数のランダムな選択と同じ利点を有する。これは、定数値が検索され得る、値のインデクスを決定することを可能にするプロセスを多様化し、したがって、リバースエンジニアリングをより困難にする。
【0020】
実施形態では、保護されるべき定数値は、メモリアドレスであり、ソフトウェアコードがプロセッサによって実行されるとき、前記配列における値は、無効なメモリアドレスである。
【0021】
配列における無効なメモリアドレスのみを使用するので、攻撃者は、どのアドレスであれば定数値の取得を可能にするのかを推測できない。
【0022】
保護されるべき定数値は、第3の変換関数を、抽出された値および第2の中間値に適用することによって決定され得る。実施形態では、第3の変換関数は、所定の変換関数の第3のセットにおいてランダムに選択される。
【0023】
これは、攻撃者が、使用されるべき関数を知らずに、定数値を決定することを不可能にする。
【0024】
第2の態様によれば、本発明は、プロセッサによる実行のためのセキュアなソフトウェアコードの命令でエンコードされた非一時的な機械可読記憶媒体に関し:
・ 前記セキュアなソフトウェアコードは、保護されるべき定数値を備えたセキュアでないソフトウェアコードの変更されたバージョンであり、
・ 保護されるべき前記定数値は、セキュアなコードにおいて、置換変数によって置換され、
・ 非一時的な機械可読記憶媒体は:
− 値のインデクス付けされた配列であって、保護されるべき前記定数値が配列の1つの値から決定され得る、配列と、
− 命令の第1のシーケンスと
でエンコードもされ、命令の第1のシーケンスは、ランタイムにおいて実行されたとき:
〇 保護されるべき前記定数値が決定され得る値の配列におけるインデクスを計算し、
〇 前記配列における前記計算されたインデクスに位置する値を、前記配列から抽出し、
〇 前記抽出された値から、保護されるべき前記定数値を決定し、
〇 前記置換変数の値を、前記決定された定数値に等しく設定する命令の第1のシーケンスでエンコードもされる。
【0025】
第3の態様によれば、本発明は、プロセッサによる実行のためのセキュアなソフトウェアコードの命令を実行する方法に関し:
・ 前記セキュアなソフトウェアコードは、保護されるべき定数値を備えたセキュアでないソフトウェアコードの変更されたバージョンであり、
・ 保護されるべき前記定数値は、セキュアなコードにおいて、置換変数によって置換され、
・ 前記セキュアなソフトウェアコードは、値のインデクス付けされた配列も備え、保護されるべき前記定数値が配列の1つの値から決定され得るようにされ、
前記方法は:
・ 保護されるべき前記定数値が決定され得る値の配列におけるインデクスを計算するステップと、
・ 前記配列における前記計算されたインデクスに位置する値を、前記配列から抽出するステップと、
・ 前記抽出された値から、保護されるべき前記定数値を決定するステップと、
・ 前記置換変数の値を、前記決定された定数値に等しく設定するステップとを備えている。
【0026】
第2の態様によるこのような非一時的機械可読記憶媒体、および第3の態様による方法は、第1の態様による方法のものと同じ利点を示す。
【0027】
前述の目的および関連する目的を達成するために、1つ以上の実施形態は、以下で十分に説明され、特に特許請求の範囲で指摘される特徴を備えている。
【0028】
以下の説明および添付の図面は、特定の例示的な態様を詳細に説明し、実施形態の原理が採用され得る様々な方法のほんのわずかを示している。他の利点および新規の特徴は、図面と併せて考慮されるとき、後続する詳細な説明から明らかになり、開示される実施形態は、このようなすべての態様およびそれらの均等物を含むことが意図される。