(57)【要約】      （修正有）【課題】デジタルデータの不連続なハッシュ化に対する解決策を提供する。【解決手段】暗号化ハッシュ値が計算されるデータを取得することによってＳ３０、装置のハードウェア処理ユニットにおいて、暗号化ハッシュ値が計算されこれを、関数をブロックに適用することによって、ブロックに対する少なくとも１つの中間値を取得するＳ３３。各ブロックに対して所定のオーダーでデータブロックを反復的に処理し、重み関数の値を計算しＳ３４、重み関数の値が、少なくとも１つの所定の値と等しい場合のみ、対応する中間値で少なくとも１つのハッシュ変数を更新するＳ３５。処理ユニットは、次に、少なくとも１つのハッシュ変数から暗号化ハッシュ値を生成するＳ３６。【選択図】図３
2017098944.tif 000002
【特許請求の範囲】
【請求項１】
暗号化ハッシュ値を計算する装置であって、前記デバイスは、処理手段とインタフェース手段を有し、
前記処理手段は、
所定のオーダーで前記暗号化ハッシュ値が計算されるデータブロックを繰り返し処理し、ここで、前記データは、前記暗号化ハッシュ値に影響を及ぼさない少なくとも１つのデータブロックを含み、
各データブロックに対して：
前記データブロックを処理することによって前記データブロックに対する少なくとも１つの第１の値を取得し、
前記データブロックが前記暗号化ハッシュ値に影響を与えるか否かを示す、前記データブロックに基づく第２の値を計算し、
前記第２の値が、前記データブロックが前記暗号化ハッシュ値に影響を与えることを示している場合のみ、前記第１の値に対応する第３の値で少なくとも１つのレジスタを更新し、
前記少なくとも１つのレジスタから前記暗号化ハッシュ値を生成し、
前記インタフェース手段は、前記暗号化ハッシュ値が計算される前記データを受信すること及び前記暗号化ハッシュ値を出力することのうち少なくとも１つに関するものである、暗号化ハッシュ値を計算する装置。
【請求項２】
前記処理手段が、追加の計算に対して暗号化ハッシュ値を使うようにさらに構成されている請求項１に記載のデバイス。
【請求項３】
前記第２の値は、０又は１に等しく、前記処理手段が、前記第２の値と前記第３の値の積を前記レジスタに加えることによって前記少なくとも１つのレジスタを更新するように構成されている、請求項１に記載のデバイス。
【請求項４】
前記第２の値は、前記データブロックのオフセットがブロックオフセットのリストにあるか否かに依存する、請求項３に記載の装置。
【請求項５】
前記第２の値は、前記第１の値が前記データブロックに対する参照値の組に含まれているか否かに依存する、請求項３に記載のデバイス。
【請求項６】
暗号化ハッシュ値を計算する方法であって、
前記方法は、
処理手段によって、前記暗号化ハッシュ値が計算されるデータを取得し、前記データは、前記暗号化ハッシュ値に影響を与えない少なくとも１つのデータブロックを含み、
前記処理手段によって、所定のオーダーでデータブロックを繰り返し処理し、
各データブロックに対して：
前記データブロックを処理することによって前記データブロックに対する少なくとも１つの第１の値を取得し、
前記データブロックが前記暗号化ハッシュ値に影響を与えるか否かを示す、前記データブロックに基づく第２の値を計算し、
前記第２の値が、前記データブロックが前記暗号化ハッシュ値に影響を与えることを示している場合のみ前記第１の値に対応する第３の値で少なくとも１つのレジスタを更新し、
前記処理手段によって、前記暗号化ハッシュ値を前記少なくとも１つのハッシュ変数から生成する、暗号化ハッシュ値を計算する方法。
【請求項７】
前記処理手段によって、さらなる計算のために前記暗号化ハッシュ値を出力又は使用することをさらに含む、請求項６に記載の方法。
【請求項８】
前記第２の値は０又は１に等しく、前記第２の値と前記第３の値の積を前記レジスタに加えることによって、前記少なくとも１つのレジスタが更新される、請求項６に記載の方法。
【請求項９】
前記第２の値は、前記データブロックのオフセットがブロックオフセットのリストにあるか否かに依存する、請求項８に記載の方法。
【請求項１０】
前記第２の値は、前記第１の値が前記データブロックに対する参照値の組に含まれているか否かに依存する、請求項８に記載の方法。
【請求項１１】
前記データの長さが前記データブロックの長さの倍数になるように、前記処理手段によってパディングすることをさらに含む請求項６に記載の方法。
【請求項１２】
前記処理手段によって、前記少なくとも１つのレジスタを初期化することをさらに含む、請求項６に記載の方法。
【請求項１３】
前記データは、インタフェース手段を経由して追加的なデバイスから取得される、請求項６に記載の方法。
【請求項１４】
請求項６乃至１３の少なくとも１つに従った方法のステップを実施するためのプロセッサによって実行可能なプログラムコード命令を含むコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般に暗号作成法（cryptography）、具体的にはデジタルデータのハッシュ法（hashing）に関する。
【背景技術】
【０００２】
この章では、技術のいくつかの態様を読者に紹介することを意図し、それらは、以下で説明され及び／又は請求される本開示のいくつかの態様に関連し得る。本考察は、本開示のいくつかの態様のより良い理解を容易にする背景情報を読者に提供するのに役に立つと考えられる。その結果、本明細書はそのような観点で読まれるべきであり、先行技術の自認としてではないと理解されたい。
【０００３】
デジタルデータのインテグリティ（integrity：完全性、正真性）は、ＳＨＡ−１及びＭＤ５のような異なる暗号作成ハッシュ技術（cryptographic  hash  techniques）を使用することにより検証できる。これらのハッシュ技術は、最終的なハッシュ値が得られるまで、任意長の入力文字列（input  string）が反復して処理されるブロックに分割され、処理される。
【０００４】
例えば、ＳＨＡ−１は、いかなる入力長の文字列に関して、２０バイトのハッシュ値（技術分野によりチェックサム（checksum）又はダイジェスト（digest）とも呼ばれる）を出力する。入力文字列又はメッセージは、６４バイトの倍数の長さを得るためにパディングされる。ＳＨＡ−１は、次に、以下の圧縮関数（compression  function）を使う。
１．標準ＦＩＰＳ  １８０−４に定義された特定の定数のために５つのハッシュ変数（Ｕ，Ｖ，Ｘ，Ｙ，Ｚ）が提案される。
２．入力メッセージＭのＮ個のブロックの各６４バイトブロックに関して、アルゴリズムが圧縮関数Ｆを入力ブロックＭｉに適用し、各ブロックに関する５つの４バイト中間変数（intermediate  variable：中間媒介変数）（Ａ＝ａｉ，Ｂ＝ｂｉ，Ｃ＝ｃｉ，Ｄ＝ｄｉ，Ｅ＝ｅｉ）が決定される。
３．５つのハッシュ変数（Ｕ、Ｖ、Ｘ、Ｙ、Ｚ）は、メッセージブロックＭｉに対して計算されたハッシュブロックを含み、下記の通り更新される。
【数１】
2017098944.tif 000003
したがって、
【数２】
2017098944.tif 000004
ここで＋は、加算モジュロ（additional  modulo）２３２である。
４．ステップ３がＮ回繰り返された後、連結（concatenation）Ｕ｜Ｖ｜Ｘ｜Ｙ｜Ｚが２０バイトメッセージダイジェストの結果として出力される。
圧縮関数Ｆは、下記のように機能する。
１．６４バイトのブロックＢを４バイトの８０ワードＭｊに拡張する。
２．（Ｕ＝ｕｉ−１，Ｖ＝ｖｉ−１，Ｘ＝ｘｉ−１，Ｙ＝ｙｉ−１，Ｚ＝ｚｉ−１）の値を中間変数（Ａ，Ｂ，Ｃ，Ｄ，Ｅ）にコピーする。
【数３】
2017098944.tif 000005
３．下記を８０回回す（ｊ＝０から７９まで）
【数４】
2017098944.tif 000006
ここで、ｒｏｔｎはｎビットの左回転を意味し、Ｋｊは定数で、関数ｇは概数に依存する。
【数５】
2017098944.tif 000007
ここで、
［外１］
2017098944.tif 000008
及び
［外２］
2017098944.tif 000009
は、ブール演算のＮＯＴ、ＡＮＤ、ＯＲ及び排他的ＯＲを表す。検証されるデジタルデータは、ソフトウェアアプリケーションのコンピュータコードであり得る。このことは、プロセッサによって実行されるコードが改ざんされないことを保証する。
【０００５】
一旦コードがコンパイルされた後は、ソフトウェアアプリケーションのインテグリティを保護するプロセスは、バイナリコードに通常適用される。ポストビルドツール（post-build  tool）は、バイナリ内の選択された領域のチェックサムを計算し、バイナリ内部にチェックサム参照値（checksum  reference  value）を書き込む。チェックサム参照値は、選択された領域のチェックサムにその存在により影響を及ぼすようには、選択された領域に含めることはできない。したがって、選択された領域及びチェックサム参照値は、別々に位置し、例えば、選択された領域はコードセクションにあり、チェックサム値はデータセクションに挿入される。
【０００６】
この例において、コード領域は、インテグリティによって保護され、一方、チェックサム参照値を含む領域（例えば、データセクション）は、改ざんに対して弱い。保護を向上するために、複数のインテグリティベリフィケーションが展開され、バイナリのあらゆる位置にチェックサム参照値が分散される。オーバーラップし得る領域は、ポストビルド時において挿入された他のブロックのチェックサムを含むので、計算できるインテグリティのデータの連続領域であるという仮定が、その結果もはや有効ではない。
【０００７】
図１は、従来技術に従った、２つのオーバーラップする領域及びチェックサム参照値を有するコードのセクションを説明する。コードセクション１００は、２つの領域、領域Ｏ１１２及び領域Ｐ１１４、２つのチェックサム参照値、チェックサムＯ１２４及びチェックサムＰ１２２並びにキー１３２を包含する。分かるように、領域Ｏは、チェックサムＯ及びチェックサムＰを含み、一方、領域Ｐは、チェックサムＯ及びキーを含む。このことは、領域Ｏに関するインテグリティが、チェックサムＯ及びチェックサムＰを引いた全領域に亘って生成されることを意味する。同様に、領域Ｐのインテグリティは、チェックサムＯ及びキーを引いた全領域に亘って生成される。チェックサム及び大抵の場合キーは、チェックサムの計算後に導入されるので、次のチェックサムの計算において挿入されたチェックサム及びキーは破棄される必要がある。
【０００８】
多くの既存の市販製品は、インテグリティ保護を提供する。そのような製品を用いたアプリケーションの保護は、アプリケーションを保護する特定のスクリプトを定義せざるを得ない当業者のインタラクションを通常必要とする。保護領域における不連続の問題点を解決するためには、インテグリティチェックが実行されるときに保護領域から差し引かれる除外領域のリストをセキュリティの専門家が宣言しなくてはならない。このことは、バイナリが、除外される位置を説明する情報のテーブルを埋め込まなければならいことを意味し、その結果センシティブな情報及び秘密が保存され得る可能性のある位置のリストを攻撃者（attacker）が作成することを可能にする情報をそれ自体が漏えいすることになる。
【０００９】
さらに、情報自身（保護領域の境界、チェックサムの開始アドレス、長さ、値等）が秘密の又はセンシティブなデータを包含しなくても、それでもなお動的な攻撃に利用され得る脆弱性を示す。デバッガーを用いて、攻撃者は、チェックサムの位置にハードウェアブレークポイントを置き、それに対するリード／ライトアクセスをモニタできる。このように、スタブ攻撃するために、インテグリティルーチンの呼び出し及びそれらの起動ポイントを検出することは容易である。
【００１０】
今日、進化した時間的なモニタリングツールは、ハイパーバイザ又は仮想マシンのような新しい、先進的な技術、すなわち、各ファンクションのリード／ライトメモリアクセスを使用して、アプリケーションをひそかに追跡する。以前の例において、インテグリティルーチンは、オラクル攻撃を可能な状態にする除外された位置へのリードアクセスができない。リードできない各アドレスは、疑わしく、ポストビルド時に挿入された情報のようなセンシティブな情報がどこにあるかというヒントを与える。
【００１１】
当然のことながら、特にソフトウェアアプリケーションにおけるデジタルデータのインテグリティに関連する従来技術の問題を少なくとも部分的にでも克服する解決策を持つことが望まれている。本原理は、そのような解決策を提供する。
【発明の概要】
【００１２】
第１の態様において、本原理は、暗号化ハッシュ値を計算する装置を対象とする。所定のオーダーにおいて計算される暗号化ハッシュ値に亘るデータブロックを反復的に処理するように構成された処理手段を含むデバイスであって、データは、暗号化ハッシュ値に影響を及ぼさない少なくとも１つのブロックを含み、各ブロックに対して：ブロックを処理することによってブロックに対する少なくとも１つの第１の値を取得し、暗号化ハッシュ値に影響を及ぼすか否かを示すブロックに基づいて第２の値を計算し、第２の値がブロックが暗号化ハッシュ値に影響を及ぼすことを示す場合のみ第１の値に対応する第３の値で少なくとも１つのレジスタを更新し、少なくとも１つのレジスタから暗号化ハッシュ値を生成する。デバイスは、暗号化ハッシュ値が計算されるデータを受信する及び暗号化ハッシュ値を出力するうち少なくとも１つをするように構成されたインタフェース手段をさらに含む。
【００１３】
第１の態様のいくつかの実施形態は以下を含む：
・処理手段がさらなる計算のために暗号化ハッシュ値を使用するようにさらに構成される。
・第２の値は、０又は１に等しくなることができ、処理手段は、第２の値と第３の値の積をレジスタに加えることによって少なくとも１つのレジスタを更新するように構成されている。第２の値は、ブロックのオフセットがブロックオフセットのリストにあるか否かに依存し得る。第２の値は、また、第１の値がブロックに対する参照値の組に含まれているか否かに依存し得る。
【００１４】
第２の態様において、本原理は、暗号化ハッシュ値を計算する方法を対象とする。処理手段は、暗号化ハッシュ値が計算されるデータを取得し、データは暗号化ハッシュ値に影響を与えない少なくとも１つのブロックを含み、所定のオーダーでデータブロックを反復的に処理し、各ブロックに対して：ブロックを処理することによってブロックに対する少なくとも１つの第１の値を取得し、ブロックが暗号化ハッシュ値に影響を及ぼすか否かを示すブロックに基づいて第２の値を計算し、第２の値が、そのブロックが暗号化ハッシュ値に影響を及ぼすことを示している場合のみ第１の値に対応する第３の値で少なくとも１つのレジスタを更新し、少なくとも１つのハッシュ変数から暗号化ハッシュ値を生成する。
【００１５】
第２の態様のいくつかの実施形態は以下を含む：
・処理手段は、さらなる計算に対して暗号化ハッシュ値を使用するようにさらに構成される。
・第２の値は、０又は１に等しくなることができ、処理手段は、第２の値と第３の値の積をレジスタに加えることによって少なくとも１つのレジスタを更新するように構成される。第２の値は、ブロックのオフセットがブロックのオフセットのリストに入っているか否かに依存し得る。第２の値は、また第１の値がブロックに対する参照値の組に含まれているか否かに依存し得る。
・処理手段は、データの長さがブロックの長さの倍数になるようにさらにパディングする。
・処理手段は、少なくとも１つのレジスタを初期化する。
・データは、インタフェースを介して追加的なデバイスから取得される。
【００１６】
第３の態様において、本原理は、第２の態様の実施形態に従った方法のステップを実施するための、プロセッサによって実行可能なプログラムコード命令を含むコンピュータプログラムを対象とする。
【図面の簡単な説明】
【００１７】
本原理の好ましい特徴が、これから、添付図面を参照して、非制限的な例を用いて説明される。
【００１８】
【図１】図１は、従来技術に従った２つのオーバーラップする領域及びチェックサム参照値を有するコードセクションを説明する。
【図２】図２は、本原理に従ったデジタルデータに対するチェックサムを生成する装置を説明する。
【図３】図３は、本原理に従ったデジタルデータをハッシュする方法を説明する。
【図４】図４は、本原理に従った、ソフトウェアコードを保護するポストビルドツール装置４００を説明する。
【図５】図５は、保護方法の一例を説明する。
【発明を実施するための形態】
【００１９】
図２は、本原理に従ったデジタルデータに対してチェックサムを生成する装置２００を説明する。デバイス２００は、少なくとも１つのハードウェア処理ユニット（「プロセッサ」）２１０、メモリ２２０及び他のデバイスと通信する少なくとも１つの通信インタフェース２３０を含む。当業者であれば、明確化の理由で説明されるデバイスが非常に単純化されており、実際のデバイスは、さらに内部接続及び電源のような機能を含み得ることが理解される。不揮発性記憶媒体２４０は、プロセッサ（プロセッサ２１０のような）により実行されたときに、本明細書でさらに説明されるようなデジタルデータに対するチェックサムを生成する命令を保存する。
【００２０】
本原理の概念は、ソフトウェアコード（の領域）のような入力データ全体に、除外された領域が含まれているか否かに関していかなる推定もせずに、インテグリティ検証（integrity  verification）を適用することである。一方、インテグリティ検証メカニズムは、除外された領域のバイトが最終的なインテグリティ値に影響を与えないように修正できる。
【００２１】
修正の特質は、使用されるインテグリティ関数／（）の種類に依存する。本原理の態様は、ＳＨＡ−１又はＭＤ５のように／（）が一方向関数であり、入力データがブロック毎に反復して処理されることを対象としている。この場合、インテグリティ関数／（）は、重み関数（weight  function）を含むように内部的に修正される。重み関数は、これから説明されるように、重み関数を知る除外された領域の位置を見つけることは計算的に難しくなるように設計される。
【００２２】
本原理のハッシュ関数は、したがって、各領域に対してハッシュ演算を常に実行する。非制限的な例としてＳＨＡ−１を続けると、以下のハッシュ関数を与える。
【００２３】
従来技術のＳＨＡ−１アルゴリズムのステップ１、２及び４は、同じで、ステップ３のみが修正される。
【００２４】
好ましい実施形態において、修正したステップ３は、以下を含む：
【数６】
2017098944.tif 000010
Ｗ（ｉ）は、Ｗ（ｉ）が以下に等しいように定義された重み関数を意味する。
・ブロックｉが、予約済みの領域（reserved  region）（及び従ってインテグリティ計算から除外された）であれば、０
・その他であれば、１
【００２５】
最終的に、結合Ｕ｜Ｖ｜Ｘ｜Ｙ｜Ｚは、結果として生じる２０バイトのメッセージダイジェストとして出力される。
【００２６】
変形の実施形態において、例えば、（Ｕ，Ｖ，Ｘ，Ｙ，Ｚ）［０］及び（Ｕ，Ｖ，Ｘ，Ｙ，Ｚ）［１］という、２組の５変数が使用され、ステップ３は、下記の通り修正される：
【数７】
2017098944.tif 000011
非除外領域の中間ハッシュブロックは、（Ｕ，Ｖ，Ｘ，Ｙ，Ｚ）［１］に保存され、一方、除外領域の中間ハッシュブロックは、（Ｕ，Ｖ，Ｘ，Ｙ，Ｚ）［０］に保存される。最後のブロックＢＮを処理した後、Ｕ［１］｜Ｖ［１］｜Ｘ［１］｜Ｙ［１］｜Ｚ［１］は、結果として生じる２０バイトメッセージダイジェストとして出力される。
【００２７】
重み関数の例は、ブロックオフセットのリストＬを使用し、そして、ｉがＬの中にあるときＷ（ｉ）＝０で、その他はＷ（ｉ）＝１となる。リストＬは、ハッシュ検証の間、利用可能でなければならない。
【００２８】
好ましくは、重み関数は、ブロックオフセットのリストＬを漏えいしないように設計される。言い換えれば、攻撃者が、好ましくは、例えば予約された領域のリスト、Ｗ−１（０）のプリイメージを容易に見つけることができないようでなければならない。予約された領域のリストを隠すための解決策は、領域のオフセット自体を比較する代わりに、参照値に対して除外領域の暗号化されたオフセットを比較することである。
【００２９】
これを達成する別の方法は、参照値のリストＬ’を生成することである。これらの参照値は、Ｆ（Ｍｊ，．．．）＝（ａｊ，ｂｊ，ｃｊ，ｄｊ，ｅｊ）の結果であり、ここでｊは、予約された領域のオフセットである。リストＬ’は、例えばバイナリコードに加えられ、ハッシュ検証の間、ステップｉ中の圧縮関数Ｆ（Ｍｉ，．．．）＝（ａｉ，ｂｉ，ｃｉ，ｄｉ，ｅｉ）の現在の結果が参照値のリストＬ’に存在するか否かチェックされる。新たな重み関数は、リストＬ’を使用し、もしＦ（Ｍｉ，．．．）＝（ａｉ，ｂｉ，ｃｉ，ｄｉ，ｅｉ）がＬ’の中にあればＷ（ｉ）＝０と、それ以外は、Ｗ（ｉ）＝１と定義される。Ｆ（．）は、一方向関数であるＳＨＡ−１圧縮関数である。一方向関数の結果は、オフセット以外と比較される。この比較は、予約された領域のオフセットが漏えいすることを避ける。（ａｊ，ｂｊ，ｃｊ，ｄｊ，ｅｊ）の代わりに、例えばＱ＝ａｊ＋ｂｊ＋ｃｊ＋ｄｊ＋ｅｊのような５つの中間値の組合せを保存することによってメモリスペースをセーブすることができる。加算は置き換えることができ、他の演算と組み合わせることもできる。さらに、リストＬ’は、予約された領域の総計を隠すために、追加のランダム値又はダミーの値を含むこともできる。例えば、リストＬ’＝｛Ｑ０，．．．，Ｑ９｝に１０個の予約された領域がある場合、例えば、１００個の値（１０個が参照値で、＋９０個がダミー値）、すなわち、Ｌ’＝｛Ｑ０，Ｑ１，．．．，Ｑ９９｝までリストを膨張させることができる。
【００３０】
図３は、本原理に従った、デジタルデータをハッシュする方法を説明する。ステップＳ３０において、デバイス２００のような装置は、ハッシュされるデジタルデータを取得する。デジタルデータは、外部デバイスから受信するか、又は内部で生成することができる。６４バイトの倍数になるように、ステップＳ３１において、データは任意にパディングされ得る。５つのハッシュ変数Ｕ−ＺがステップＳ３２で初期化される。Ｎ回の反復がステップＳ３３、Ｓ３４及びＳ３５で行われ得る。ステップＳ３３は、中間変数（Ａ，．．．，Ｅ）＝Ｆ（Ｍｉ，（Ｕ，Ｖ，Ｘ，Ｙ，Ｚ））の更新を含み得る。ステップＳ３４において、重み関数Ｗ（ｉ）の値が、現在のブロック（例えば、Ｍｉ）に対して、例えば、Ａ＋Ｂ＋Ｃ＋Ｄ＋ＥがＬ’の中にある場合にはＷ（ｉ）＝０、それ以外はＷ（ｉ）＝１と決定され得る。ステップＳ３５は、例えば、好ましい実施形態に従って（Ｕ，Ｖ，Ｘ，Ｙ，Ｚ）←Ｗ（ｉ）＊（Ａ，Ｂ，Ｃ，Ｄ，Ｅ）＋（Ｕ，Ｖ，Ｘ，Ｙ，Ｚ）、又は変形の実施形態に従って、（Ｕ，Ｖ，Ｘ，Ｙ，Ｚ）［Ｗ（ｉ）］←（Ａ，Ｂ，Ｃ，Ｄ，Ｅ）＋（Ｕ，Ｖ，Ｘ，Ｙ，Ｚ）［Ｗ（ｉ）］とハッシュ変数Ｕ−Ｚの新たな値を決定することができる。ステップＳ３６において、結果として生じるハッシュ値は、ハッシュブロックの連結として生成され得る。ステップＳ３７において、結果として生じるハッシュ値は、出力され、又は使用されることができる。例えば、ステップＳ３５において、結果として生じるハッシュ値は、追加的なデバイスへ出力され、又はさらなる内部的な計算（例えば、暗号化、参照チェックサム値との比較、又は電子署名の生成又は検証）に使用され得る。ステップＳ３１−３７は、装置又は図２のプロセッサ２１０及びメモリ２２０の組合せを含む図２で説明されたデバイス２００によって実行され得る。
【００３１】
図４は、本原理に従ったソフトウェアコードを保護するためのポストビルドツール装置４００を説明する。ポストビルドツール４００は、少なくとも１つのハードウェア処理ユニット（「プロセッサ」）４１０、メモリ４２０、他のデバイスと通信するように構成された少なくとも１つの通信インタフェース（Ｉ／Ｏ）４３０及びユーザインタフェース（ＵＩ）４４０を含む。説明したポストビルドツールは、明確化のために非常に単純化されており、実際のデバイスは、さらに内部接続及び電源の構成を含み得ることを当業者であれば理解できる。非一時的記憶媒体４５０は、プロセッサ（例えばプロセッサ４１０）によって実行されたときに、さらに以下で説明されるようにソフトウェアコードを保護する命令を保存する。
【００３２】
ポストビルドツール４００は、保護すべきアプリケーションのバイナリを修正するプロセス及び／又は方法を実行するように構成されている。予約された領域の数、それらの位置、又はそれらの内容が変更されるや否や、重み関数によって考慮されるべき圧縮関数の中間値も変更される。
【００３３】
除外された領域に対してエリアを予約するため、ソースコードは最初に変更される。古典的な方法は、デッドコード命令（dead  code  instructions）を挿入する呼び出しマクロ（calling  macro）を含む。これは、ポストビルド時にデータ中に予約の余地を許可する。
【００３４】
図５は、保護方法（例えば、検証コードの変更）の例を説明する。
【００３５】
ステップＳ５１において、デフォルトの重み関数Ｗ（．）は、修正したインテグリティ関数に、ｋ個のランダム又はダミー値を含む参照値Ｌ’＝｛Ｒ１，．．．，Ｒｋ｝のリストと共に組み込まれる。
【００３６】
ステップＳ５２において、１つ以上の予約された領域のコンテンツが修正され得る。追加されたデータは、有利には、バイナリの１つ又は数個のインスタンスに秘密且つ固有である。
【００３７】
ステップＳ５３において、ｌ参照値のリストＬ’＝｛Ｑ１，．．．，Ｑｌ｝は、予約された領域に属する各ブロックＭｉに対して「通常の」中間値（Ａ＝ａｊ，Ｂ＝ｂｊ，Ｃ＝ｃｊ，Ｄ＝ｄｊ，Ｅ＝ｅｊ）を計算することによって、そして、もしメモリをセーブするトリックＱ＝ａｊ＋ｂｊ＋ｃｊ＋ｄｊ＋ｅｊを使用して、すべての予約された領域に対して決定され得る。
【００３８】
ステップＳ５４において、ステップＳ５３において計算された参照値は、リストＬ’内のランダムな位置に挿入され得る。リストＬ’は、最後にｌ＋ｋ個の値を含む。
【００３９】
ステップＳ５１−Ｓ５４は、図４のプロセッサ４１０及びメモリ４２０の組合せを含む、図４で説明された装置又はデバイス４００によって実行され得る。
【００４０】
例としてＳＨＡ−１を使って本原理を説明したが、例えばＳＨＡ−２５６、ＳＨＡ−５１２及びＳＨＡ−３のような、ブロックにおける中間値を累積する他の暗号化ハッシュ関数に容易に一般化できることを、当業者は理解する。
【００４１】
したがって、本原理は、デジタルデータの不連続なハッシュ化に対する解決策を提供することが理解される。
【００４２】
本明細書、（適切な場合には）請求項及び図面において開示された各機能は、独立に又は適切な組み合わせとして提供され得る。ハードウェアに実装して説明した機能は、ソフトウェアとして実装することもでき、又逆も同様である。請求項に現れる参照番号は、説明の目的のためだけであり、請求項の範囲を制限する効果を持たない。
【図１】
2017098944.tif 000012
【図２】
2017098944.tif 000013
【図３】
2017098944.tif 000014
【図４】
2017098944.tif 000015
【図５】
2017098944.tif 000016
【外国語明細書】
2017098944000001.pdf