"入力、出力、および中間値が観察できる演算環境において、暗号ハッシュ関数の実行を保護する、コンピュータで実行される方法であって、符号化された入力メッセージを変換されたドメイン内に提供するために、入力メッセージを符号化する工程と、出力ダイジェストを提供するために、変換された暗号ハッシュ関数を適用する工程とを備え、前記変換された暗号ハッシュ関数は、前記変換されたドメイン内で前記暗号ハッシュ関数を実行する、方法。前記出力ダイジェストを符号化することで、符号化された出力ダイジェストを提供する工程をさらに備える、請求項1に記載の方法。前記入力メッセージは、符号化された形式で受信され、前記入力メッセージを符号化する工程は、内部符号化により前記入力メッセージを再符号化する工程を含む、請求項1または請求項2に記載の方法。前記暗号ハッシュ関数は、SHA-1、SHA-224、SHA-256、SHA-384、またはSHA-512である、請求項1から請求項3のいずれか1項に記載の方法。パディングされたメッセージを提供するために、符号化されていないパディング用バイトを用いて、前記符号化された入力メッセージをパディングする工程をさらに含む、請求項1から請求項4のいずれか1項に記載の方法。符号化されたワードの配列を少なくとも1つ、および、符号化されていないパディング用ワードを提供するために、前記パディングされたメッセージを分割する工程をさらに備える、請求項5に記載の方法。前記変換された暗号ハッシュ関数を適用する工程は、前記入力メッセージのいずれかの部分を含む中間値が常に符号化されたものであるように、前記少なくとも1つの配列のそれぞれを、前記変換された安全なハッシュ関数によって処理する工程を備える、請求項6に記載の方法。前記少なくとも1つの配列のそれぞれを処理する工程は、ハッシュ関数の反復で用いられる、初期状態変数と定数とを初期化する工程と、更新された状態変数を提供するために、前記少なくとも1つの配列のそれぞれでハッシュ関数の反復を行う工程と、符号化された状態変数を提供するために、前記更新された状態変数に出力の符号化を適用する工程と、前記出力ダイジェストを提供するために、前記符号化された状態変数を連結する工程とを備える、請求項7に記載の方法。前記少なくとも1つの配列のそれぞれでハッシュ関数の反復を行う工程は、前記変換されたドメイン内の前記ハッシュ関数で使用される成分関数のマッピングを決定する工程を備える、請求項8に記載の方法。前記マッピングはルックアップテーブルに格納される、請求項9に記載の方法。前記マッピングは、前記少なくとも1つの配列内のワードの数を拡張するために用いられる、請求項9または請求項10に記載の方法。前記マッピングは、前記状態変数の中間値を提供するために用いられる、請求項9から請求項11のいずれか1項に記載の方法。命令を含む非一時性コンピュータ可読媒体であって、前記命令は、プロセッサによって実行されると、前記プロセッサに、入力、出力、および中間値が観察できる演算環境において、暗号ハッシュ関数の実行を保護する方法を実行させるものであり、前記方法が、変換されたドメイン内に符号化された入力メッセージを提供するために、入力メッセージを符号化する工程と、出力ダイジェストを提供するために、変換された暗号ハッシュ関数を適用する工程とを備え、前記変換された暗号ハッシュ関数は、前記変換されたドメイン内で前記暗号ハッシュ関数を実行する、非一時性コンピュータ可読媒体。符号化された出力ダイジェストを提供するために、前記出力ダイジェストを符号化する工程をさらに備える、請求項13に記載のコンピュータ可読媒体。前記入力メッセージは、符号化された形式で受信され、前記入力メッセージを符号化する工程は、内部符号化により前記入力メッセージを再符号化する工程を含む、請求項13または請求項14に記載のコンピュータ可読媒体。前記暗号ハッシュ関数は、SHA-1、SHA-224、SHA-256、SHA-384、またはSHA-512である、請求項13から請求項15のいずれか1項に記載のコンピュータ可読媒体。パディングされたメッセージを提供するために、符号化されていないパディング用バイトを用いて、前記符号化された入力メッセージをパディングする工程をさらに含む、請求項13から請求項16のいずれか1項に記載のコンピュータ可読媒体。符号化されたワードの配列を少なくとも1つ、および、符号化されていないパディング用ワードを提供するために、前記パディングされたメッセージを分割する工程をさらに備える、請求項17に記載のコンピュータ可読媒体。前記変換された暗号ハッシュ関数を適用する工程は、前記入力メッセージのいずれかの部分を含む中間値が常に符号化されたものであるように、前記少なくとも1つの配列のそれぞれを前記変換された保護ハッシュ関数によって処理する工程を備える、請求項18に記載のコンピュータ可読媒体。前記少なくとも1つの配列のそれぞれを処理する工程は、ハッシュ関数の反復で用いられる、初期状態変数と定数とを初期化する工程と、更新された状態変数を提供するために、前記少なくとも1つの配列のそれぞれでハッシュ関数の反復を行う工程と、符号化された状態変数を提供するために、前記更新された状態変数に出力符号化を適用する工程と、前記出力ダイジェストを提供するために、前記符号化された状態変数を連結する工程とを備える、請求項19に記載のコンピュータ可読媒体。前記少なくとも1つの配列のそれぞれでハッシュ関数の反復を行う工程は、前記変換されたドメイン内の前記ハッシュ関数で使用される前記成分関数のマッピングを決定する工程を備える、請求項20に記載のコンピュータ可読媒体。前記マッピングはルックアップテーブルに格納される、請求項21に記載のコンピュータ可読媒体。前記マッピングは、前記少なくとも1つの配列内のワードの数を拡張するために用いられる、請求項21または請求項22に記載のコンピュータ可読媒体。前記マッピングは、前記状態変数の中間値を提供するために用いられる、請求項21から請求項23のいずれか1項に記載のコンピュータ可読媒体。暗号ハッシュ関数を用いて、デジタル著作権管理DRMコンテンツのための暗号化キーを派生させる、コンピュータで実行可能な方法であって、変換されたドメイン内に符号化された入力メッセージを提供するために、入力メッセージを符号化する工程と、前記暗号化キーを提供するために、変換された暗号ハッシュ関数を適用する工程と、前記暗号化キーを符号化する工程とを備え、前記変換された暗号ハッシュ関数は、前記前記変換されたドメイン内で前記暗号ハッシュ関数を実行するものである、方法。一般的に、本発明は、ホワイトボックス環境での攻撃に対抗する暗号ハッシュ関数の保護されたソフトウェアの実行を生成する方法およびシステムを提供する。本明細書で、ホワイトボックス環境とは、ある攻撃者が実行環境およびソフトウェアの実行を完全にコントロールする環境のことをいう。つまり、その攻撃者は、コード、データ構成、および実行環境に対するアクセス権を持つ。ジョンソン氏らへ付与された米国特許7,397,916号、発明の名称SYSTEMANDMETHODFOROBSCURINGBIT-WISEANDTWO’SCOMPLEMENTINTEGERCOMPUTATIONSINSOFTWAREは、ホワイトボックス攻撃環境に関する背景情報を含み、引用することにより本明細書に含まれる。本明細書にて記載される保護された暗号ハッシュの実行により、ハッシュ演算の入力と出力を符号化することができる。本明細書で、符号化とは、可逆関数のことをいい例えば、バイトからバイトへ、または、ワードからワードへ、極秘データを隠すために使用される。本開示では、メモリ内の符号化されていない値すなわち、メッセージ、ダイジェストおよびその中間値を露出することなく、どのように符号化されたメッセージを受け付け、どのように符号化されたダイジェストを作成するかを記載する。本開示の実施形態は、ハッシングアルゴリズムを変換し、変換されたドメイン内で演算を行う。そして、どんな場合でも保護された情報を露出することなく、効果的な方法で、変換された入力に作用する、および/または、変換された出力を作成する。これにより、ハッシュ関数の演算をホワイトボックス攻撃から保護する。実施形態は、元のハッシングアルゴリズムとの互換性を保ちながら、このような保護を実現する。本明細書内での互換性とは、符号化されたメッセージ入力を受信し、符号化されていない出力オブジェクトを作成する保護された実行が、符号化されていないメッセージ入力を受信する標準的なハッシュ関数の実行と同じ結果となるようにすることを意味する。従来のハッシングアルゴリズム暗号ハッシュ関数の一例としては、2008年10月のFIPSPUB180-3米国商務省のSecureHashStandardSHSに記載されるようなSHA-256アルゴリズムがある。図1~4と、それらに伴う記載によって、SHA-256アルゴリズムの従来の実行が説明されている。SHA-256アルゴリズムは、単なる例として提示され、本発明を示すために使用される。ただし、当然のことながら、当業者は、本開示の実施形態がいかなる暗号ハッシュ関数にも適用できることを理解するであろう。図1は、SHA-256アルゴリズムのバイト指向ハッシュの実行の高レベルでの概観を示すフローチャートである。当業者は当然理解するであろうが、ビット指向の実行も支持される。まず、8個の初期ハッシュ値Hi以下、状態変数とも言うと、64個の定数値Kjとが、アルゴリズムの仕様内で定義されているように特定の定数値に初期化されるステップ102および104。そして、入力メッセージMが前処理される。メッセージはまず、図2のアルゴリズムによりパディングされるステップ106。図2に示すように、0x80バイトがメッセージMの最後に追加されるステップ202。それから、バイトでのMの長さが64を法として56と合同になるまで、さらにパディング用の0x00バイトがメッセージMの最後に追加されるステップ204、206。そして、64ビットでビッグエディアン方式の整数つまり、8バイトとして、ビットでのMの元の長さが、Mに追加されるステップ208。よって、パディング処理は、バイトでの長さが64を法として0と合同である、パディングされたメッセージを生成する。再度、図1を参照すると、その後、そのメッセージは、64バイトのブロックに分割され、各ブロックは、16個の32ビットでビッグエディアン方式のワードの配列mであると解釈されるステップ108。中間値a、b、hが初期化された後ステップ110、図3で詳細に説明されるように、各配列mは、64個の32ビットのワードの配列Wに拡張されるステップ112。図3に示されるように、0≦i≦15の要素はWi=Miであり、16≦i≦63の要素はWi=Wi-16s0Wi-15Wi-7s1Wi-2であり、ここで、s関数は、右回りのローテートROTR関数と、右シフトSHR関数とにより、図に示されたように定義される。配列Wの各要素について、パディングされたメッセージMの全てのブロックが処理されるステップ118まで、8個のハッシュ値Hiが、一時的な処理のための値a~hにコピーされステップ114、8個の中間ダイジェスト値Hiに返されるステップ116。値a~hは、図4のフロー図で示されるようにマッピングされる。最終的なハッシュダイジェストは、256ビットの値であり、全てのメッセージブロックmが処理された後に最終的な8個の値Hiを結合することによって形成されるステップ120。以下は、標準的なSHA-256アルゴリズムの特徴であり、ホワイトボックスでの攻撃者がいかに実行を獲得するかを考える上で重要であり、上記の説明から推測することができる。1.上記W配列を構築するために、入力メッセージはアクセス可能可読でなければならない。2.図3で示すようなW配列の構築では、シフト演算、排他的論理和XOR演算、追加演算のみが使用される。よく知られているように、ローテート演算は、シフトとXORにより実行することができる。例えば、32ビットのワードxがNビット分回転する右回りの循環は、xを32-n分、左シフトさせ、xを排他的論理和n分、右シフトさせることで行うことができる。3.W配列内の最初の16個の値は、ちょうど16個のワードmであり、その時点で処理されているMの512ビットちょうどである。4.パディング用ビットが、最後のメッセージブロックに存在し、メッセージMの長さによっては、2番目以降のメッセージブロックに存在しうる。これらパディング用ビットは、既知値である。攻撃者は、Mの長さを知っていると考えられ、よって、全てのパディング用ビット、および、どこからパディングが開始されるかを知っていると考えられる。5.図4で示される方法で最初のメッセージブロックが処理される間、値Hは、従って、値a~hも、全て固定の既知値であり、使用されるアルゴリズムに基づいて予測できる。図4に示すように、未知の値メッセージビット、または、メッセージビットから派生した値は、T1の構成において、W配列を介してのみ、混ぜられる。これら未知の値は、ラウンド毎に2つの割合で、T1の追加を経た状態変数内に、また、状態変数を経た値の数列に広まるラウンド1の後にaとe、ラウンド2の後にa、e、b、fなど。最初のメッセージブロックのラウンド4が終了して初めて、状態値は全て、未知のデータを含む。後続のメッセージブロックは、直前のブロックの最後の状態から始まるので、始めから未知のデータを含む。6.図4のアルゴリズムのメッセージブロックの処理または圧縮では、シフト演算shift、排他的論理和演算exclusiveor、論理積演算and、否定演算not、および、加算演算addのみが使用される。排他的論理和は加算addと論理積andの組み合わせで表現することができる。7.多くの応用において、メッセージとダイジェストとはバイトの配列として扱われるが、SHA-2アルゴリズム内では、メッセージとダイジェストとは、32ビットもしくは64ビットのワードとして演算が行われる。[符号化関数]暗号関数および復号関数の保護されたソフトウェアの実行に対する、入力および/または出力は、符号化されたパラメータからなる。そのパラメータは、保護されたソフトウェアの実行と連動するモジュール内での特定の適応が必要なものである。図5は、関数Eを用いて入力ドメインIDを出力ドメインODにマッピングする演算の応用を示す。逆算Dによって、出力値は入力ドメインID内の値にマッピングされる。図5はまた、入力ドメインIDを符号化された入力ドメインID’にマッピングする変換TAと、符号化された出力ドメインOD’内の値を出力ドメインODにマッピングする変換TBとを示す。TAとTBとは、全単射である。暗号関数EとDと共に、符号化関数TAとTBとを用いるということは、以下のことを意味する。つまり、入力ドメインIDのデータ要素を符号化関数Eに入力し、出力ドメインODの暗号化されたデータ要素を得るのではなく、TAを適用して、ドメインID’の変換されたデータ要素が、変換された暗号化関数E’に入力されることを意味する。変換された暗号化関数E’は、符号化演算において、逆変換関数TA-1および/またはTB-1を組み合わせて、鍵などの機密情報を保護する。そして、ドメインOD’の、変換され、暗号化されたデータ要素が得られる。同様に、D’が、OD’内のデータ値を復号し、ID’内の値にマッピングする。保護された実行内でTAとTBとを行うことにより、変換されたデータの空間内の入力データおよび出力データを分析した時に、暗号化関数Eと復号関数Dとの鍵を読み出すことはできない。変換関数TAとTBの少なくとも一つは、非自明の関数であるべきであるつまり、恒等関数とは異なるべきである。TAが恒等関数である場合、入力ドメインIDとID’は、当然、等しいドメインになるであろう。TBが恒等関数である場合、出力ドメイン同士は、当然、等しいドメインになるであろう。[ハッシングアルゴリズムにおける符号化]OMAのDRMの例では、ハッシュ関数の出力は、コンテンツ暗号化キーを復元するのに使用された。よって、この状況では、少なくとも、ダイジェストが符号化されるべきである。しかしながら、ダイジェストのみを符号化するのでは、十分な保護とはならない。ハッシュ関数には鍵がかけられていないので、攻撃者が符号化されていない入力を入手した場合、OMAの仕様書内で定義されているハッシュ関数を攻撃者自身が実行し、利用することで、符号化されていない出力を計算できてしまう。従って、実施形態においては、ハッシュ関数への入力も符号化される。暗号ハッシュ関数の保護された実行が必要な状況では、ほとんどの場合、入力メッセージを符号化しなければならない。符号化することは、メッセージを攻撃者から守秘するのに役立つつまり、メッセージを簡単に読むことはできない、そして、攻撃者が意図的にメッセージを変更するのが難しくなる。よって、メッセージの方式を完全性があるものにする。攻撃者が、中間状態からさかのぼって作業し、符号化されていない入力メッセージとなりうるものを計算するのが難しくなるように、符号化は、少なくともいくつかのハッシングアルゴリズムを通して維持されなければならない。なお、符号化されたメッセージから符号化されていないダイジェストを作成すると、必ず符号化されていないメッセージが露呈するわけではない。保護暗号ハッシュ関数の一方向関数という特性は、コンピュータ上で、入手したダイジェストを作成する入力メッセージを探すのは不可能であることを意味する。よって、応用において、符号化されていない出力を伴うハッシュ関数の保護された実行を利用することが可能性である。しかしながら、ダイジェストを符号化することは、メッセージをホワイトボックス攻撃者から守秘するのに役立ち、攻撃者が意図的にメッセージを改竄するのを難しくする。上記のように、本開示の実施形態は、SHA-256ハッシュアルゴリズムを使用する。以下に、ホワイトボックス攻撃に対抗するSHA-256の実行の作成方法の例を説明する。当業者は当然理解するであろうが、説明される方法やシステムは、若干の変更のみを伴い、同様の方法で、SHA-2族の他の暗号ハッシュ関数SHA-224、SHA-384、SHA-512を保護するためにも使用されうる。さらに、当業者が、SHA-1、MD5、それ以前のものなど、他の暗号ハッシュ関数を同様に保護するには、本方法および説明で十分足りる。ホワイトボックス攻撃に対する耐性は、ハッシュアルゴリズムの入力、出力、その中間の状態値の符号化を利用することで達成される。メッセージ入力とダイジェスト出力は、別々に保護することができ、符号化してしまうと、メッセージやダイジェストは、実行中のいかなる時点でも、それぞれの元の、符号化されていない形式で現れることはない。アルゴリズムの基本的な機能性は変更されない、それは、保護された実行により作成された符号化されたダイジェストと、保護されていない実行により作成されたダイジェストを同様に符号化することによって作成された、符号化されたダイジェストとは、同一のものであることを意味する。[強固なハッシング]ハッシング演算を保護することとは、可逆符号化関数を適用して、ハッシュ関数のメッセージ入力および/またはダイジェスト出力を変換することを基本的に含んでいる。この符号化関数は、固定値を用いたXORと同じように簡単にできる、もしくは、任意の複合関数とすることができる。本開示の実施形態は、保護された情報をいかなる時も露出することなく、効率的な方法で、ハッシングアルゴリズムを変更し、変換された入力に作用する、および/または、変換された出力を作成する。その一方で、元のハッシングアルゴリズムとの互換性は維持されるつまり、実施形態が、変換されたメッセージ入力と符号化されていない出力ダイジェストを伴う、ホワイトボックスでの実行である場合、符号化されていない形式である同メッセージを伴う、標準的な実行と同じハッシュ効果がある。本開示の実施形態は、8ビットまたは32ビットのそれぞれの変換係数を用いて、8ビットまたは32ビットを同時に変換する8ビットおよび32ビットのサイズの変換により、変換空間をより大きくすることができる。ハッシングアルゴリズムのいくつかの部分は、変換方式の詳細を露出することなく、変換された入力を変換された出力に効果的にマッピングできる表参照演算に置き換えられる。本開示のいくつかの実施形態では、メッセージとダイジェストの両方が変換されることを前提とする。この構成により、最高レベルのセキュリティが提供される。しかしながら、セキュリティ特性の弱体化という代償を伴いはするが、変換されていないメッセージ、または、変換されていないダイジェストを用いることもできる。限定的な保護はできるので、変換されていないメッセージと変換されていないダイジェストの両方を用いる構成とすることも可能であるが、推奨はしない。説明の実施形態では、メッセージとダイジェストの両方に対して、8ビット変換が用いられることを前提とするが、以下に説明するように、32ビット変換も支持される。図6は、暗号ハッシュ関数の演算を保護するシステムの高レベルでのブロック図である。図7~10を参照し、本開示のある実施形態による、SHA-256アルゴリズムの保護された実行を説明する。入力の符号化または出力の符号化を利用しない実施形態は、恒等変換にTMまたはTdを設定することにより、容易に上記から導かれるなお、TMおよびTdは、それぞれ、メッセージ入力の符号化およびダイジェスト出力の符号化するものである。これは、TMからTIMへのマッピング、および、THからTdへのマッピングにのみ影響する。しかしながら、これらのインスタンスは、既知値が内部変換によって符号化されるであろうし、攻撃者がその内部変換を攻撃し、符号化された情報を復元することができうるので、安全性が低い。図6に示すように、入力メッセージMは、符号化関数TMにより符号化されており、再符号化され、符号化関数TIM602を入力する。そして、その結果である、IMドメイン内の符号化されたメッセージTIMMは、パディング関数604によって、暗号ハッシュ関数で決定された長さにパディングされる。例えば、SHA-256に関しては、TIM符号化された入力メッセージのパディング後の長さは、64バイトを法として0に合同である。以下により詳しく述べられるように、パディング用バイトは、ある実施形態においては、メッセージの長さを4バイトの倍数にするのに必要な初期のパディング用バイトを除いて、符号化されていない。当該初期のパディング用バイトは、TIMドメイン内で符号化したものである。本実施形態は、符号化されていないパディング用バイトが、同一ワード境界内のメッセージバイトに付属しないことを確実にするので、追加的なセキュリティを提供する。これにより、ワードのある部分は符号化され、他の部分は符号化されないという心配なく、確実に、メッセージバイトが均一にワードに分割される。しかしながら、当業者は当然理解するであろうが、本開示の実施形態は、たとえ、全てのパディング用バイトが符号化されていなくても、機能するであろう。パディング後のTIM符号化されたメッセージは、それから、前処理され、ブロッキングまたは分割の関数606により所定の長さのワードのブロックに分割される。例えば、SHA-256の保護された実行において、パディング後のTIM符号化された入力メッセージは、まず、64バイトのチャンクに分割され、続いて、各チャンクが16ビット、32ビットのワードのブロックに分割され、結果、16ワードの符号化された配列TIMmとなる。それから、各配列TIMmは、TIMドメイン内の変換された関数を適用し、処理される。変換されたSHA-2ハッシュ関数に関しては、図に示すように、任意の配列TIMmが、まず、TIMドメイン内の拡張関数608により処理され、符号化された配列TWWが提供される。例えば、SHA-256に関しては、拡張関数の結果、符号化された配列TWWは64個の32ビットのワードで構成される。そして、この拡張された配列は、TWドメイン内にある圧縮関数601により圧縮され、その結果、符号化された、中間値TWa、b、hとなる。メッセージの全てのチャンクが処理されると、最終的な中間値は、符号化関数TH612を用いて、任意で符号化され、符号化された出力ハッシュ値TWH0、H1、H7が提供される。そして、これら出力ハッシュ値は、連結関数614によって連結され、元の入力メッセージMに対する符号化された出力ダイジェストTdDが一つ生成される。図7~10に示しながら、本方法の演算は、SHA-256の変換された実行を参照し、より詳細に説明される。図7に示されるように、状態変数H0~H7は、ハッシュ関数の基準により規定されるような値に初期化されるステップ702。64個の値K0~H63も、ハッシュアルゴリズム仕様書内で定義されるような、それらの定数値に初期化されるステップ704。これらの変数は、初期の段階では、符号化されておらず、攻撃者が既知の定義された値を用いて、H0~H7の変換を攻撃することを、確実にできないようにするのに役立っている。メッセージデータMは、符号化方式TMを用いて符号化された形式のアルゴリズムに入力される。この変換は、バイト指向、または、ワード指向のものでありうる。TMは、ハッシュ実行と保護されたハッシュ関数を用いるモジュールとの間のインターフェイス符号化である。TM符号化は、その応用特有の、もしくは、その応用内でのハッシングアルゴリズムの使用のインスタント特有のものでありえる。いくつかの実施形態において、外部の変換TMは、内部の、任意に選ばれた、8ビットの変換TIMに変換される。TM符号化されたバイト/ワードは、TIM符号化により、再符号化される例えば、x’=TIMT-1Mx。好ましい実施形態によると、再符号化は、復号の後に符号化するよりも、組み合わせた操作として行われる方が好ましく、このやり方だと、符号化方式が露出することがない。以下に説明するように、TIM変換は、変換TMを露出することなくパディング用バイトを処理するのに有効である。そして、メッセージMは、パディングされステップ706、パディング済みの符号化されたメッセージとなる。パディング方法は、図8に示される。一般的に、パディング用バイトは、符号化されていない形式で追加され、既知のパディング用バイトが、メッセージ上のTIM変換を攻撃するために用いられるかもしれないリスクを減らす。メッセージバイトをメッセージワードに分割するのを容易にするために、符号化された形式から符号化されていない形式への移行は、32ビットのワード境界で行われるのが好ましい。符号化されたメッセージMの長さが、4を法として0と合同である場合、パディングされたメッセージの長さが、64を法として56と合同になるまで、符号化されていない0x80バイト、さらに必要であれば、符号化されていない0x00バイトが、メッセージの最後に追加されるステップ802,804。符号化されたメッセージMの長さが、4を法として0と合同でない場合、その長さが4を法として0になるまで、TIM符号化された0x80バイト、および、0~2個のTIM符号化された0x00バイトが、符号化されたメッセージの最後に追加されるステップ806,808。その後、パディングされたメッセージの長さが、64を法として56と合同になるまで、符号化されていない0x00バイトが、メッセージの最後に追加されるステップ804。これらTIM符号化された0x80および0x00の値は、ランタイムで決められるのではなく、先に計算されうる。TIM変換は、値0x80と0x00とを露出することで、他の値の露出が必要とされることがないように、選ばれるのが好ましい。そして、ビットでのメッセージMの元の長さが、64ビットの整数として、パディングされたメッセージに追加されるステップ810。なお、この長さのフィールドは、常に8バイトであり、512ビットのチャンクで終わるので、常にワード整合される。なお、これは、簡潔化された実行であり、全てのメッセージがビット単位で、8を法として0と合同である長さである場合の応用に適しているつまり、メッセージは、ビット指向ではなく、バイト指向である。TIM変換での露出よりもセキュリティに影響を及ぼす可能性がある初期1のパディング用ビットを含むバイトの残りの値でありうるものを対象とする追加の符号化された値を用いて、この方式をビット指向メッセージに拡大して適用することができる。しかしながら、ハッシングアルゴリズムの様々な応用において、ビット単位のハッシングは必要とされない。図7に戻ると、パディング処理により、バイト単位で64を法として0と合同である長さのパディングされたメッセージが生じる。よって、TIM符号化されたメッセージバイトは、64バイトのチャンクに分割されるステップ708。各チャンク内のバイトは、さらに32ビットのビッグエディアン形式のワードに分割され、16個のワードの配列mを形成する。中間値a、b、hを現時点の値H0、H7に初期化したステップ710後、図9に示すメッセージ拡張関数を用いて、配列Wが構築されるステップ712。図9に示すように、配列Wの最初の16の要素Wiは0≦i≦15が、まず決定され、格納される。処理中は、メッセージバイトが、いくつかのポイントで、符号化されていないパディング用バイトに移行する。符号化されていないパディング用バイトが、符号化されていない形式の配列Wに格納される。上記の図8に概要が示されるように、パディング処理は、符号化されたメッセージバイトから符号化されていないメッセージバイトへの移行は、ワード境界のみで起こりうることを確実にする。従って、メッセージワードmiのそれぞれは、4個の符号化されたバイトか、もしくは、4個の符号化されていないバイトからなり、符号化されたバイトと符号化されていないバイトとの組み合わせからなることはありえない。miが符号化されていない場合はつまり、miがパディング用バイトのみからなる場合、Wi=miが成り立つステップ902。miが符号化されている場合は、Wi=TwT-1IMmiが成り立つ。好ましい実施形態によると、再符号化は、復号の後に符号化するよりも、組み合わせた操作として行われる方が好ましく、このやり方だと、符号化方式が露出することがない。ステップ902。Twは、バイトからワードへの関数である。そして、配列Wのこれら初期の16個のワードは、64個の32ビットの符号化されたワードの配列Wに拡張される。配列Wのこれらの残りの要素は、ルックアップテーブルLS0、LS1、SLS0、SLS1を使って計算される。当業者は当然理解するであろうが、SHA-256アルゴリズムは6つの論理関数を使用し、各関数は、x、y、zで表される、32ビットのワードに作用する。関数は以下の通りである。ここで、ROTRnxは右回りのローテート演算、もしくは、右循環シフト演算である。xがwビットの符号なしのワードで、nが0≦n<wの整数である場合、その時は、ROTRnxは、以下のようになる。同様に、SHRnxは、以下のような右シフト演算である。これらの関数それぞれの結果が、新しい32ビットのワードとなる。本開示のある実施形態によると、ルックアップテーブルは、TIM変換されたドメイン内の関数s0およびs1を実行するのに使用される。関数s0およびs1は、32ビットのワードに作用する。しかしながら、32ビットのワードを32ビットのワードにマッピングするルックアップテーブルはとても大きく、何らかの方法で、より小さいルックアップテーブルを使用することが望ましい。これは、関数sが共に、一次関数であることに注目すれば達成できうる。ワード入力xをバイトb0、b1、b2、b3の配列で表した場合、関数sの線形から、以下の式を導くことができる。式では、他のバイトをゼロに設定し、入力の個々のバイトに関数sを適用ことができることを示す。4つの関数を適用した結果、バイトbiごとに論理和を取ることが可能であり、ワードxに関数sを適用した場合と同一の結果が得られる。s演算を実行するにあたって、Tw符号化されたワードは、まず、ワードからバイトへの再符号化関数を用いて、任意のバイト単位の変換Tsに再符号化される。ルックアップテーブルLS0、LS1それぞれ4つが、関数s0およびs1に対応するは、それぞれ、Ts符号化されたバイトをTw符号化されたワードにマッピングする。Tw符号化されたワードは、ワード内の4か所のそれぞれで、関数sが特定のバイトに適応されることを表している。これらの4か所で部分的に結果が導かれているワードは、符号化された論理和演算を用いて、組み合わされ、完全なワードS0、S1が形成されるステップ906、908。従って、ルックアップテーブルLS0、LS1はそれぞれ、入力の可能性があるバイトに対する256のエントリを持つ4つのテーブルを含み、出力ワードの各エントリは、4バイトから成り立ち、合計サイズは、4096バイトになる。ルックアップテーブルSLS0、SLS1やはり、それぞれ、関数s0およびs1に対応するは、符号化されていないバイトをTw符号化され、シフトおよびローテートされたワードにマッピングする。表SLSnは、メッセージ内の符号化されていないパディング用バイトをs演算するのに用いられるステップ910、912。これら表は、Wi-2のワードもしくはWi-15のワードが符号化されていないパディング用ワードである時に使用される。これら表は、入力が符号化されないことを除けば、表LSと同じような構造である。表SLS、LSは全く別の出力符号化方式を使用する。この表SLS、LSの全く別の出力符号化方式により、入力のTw符号化方式を求めるのがさらに難しくなる。例えば、表SLS、LSが同じ符号化方式を作成し、SLSx=LSyである、符号化されていないワードxおよび符号化されたワードyが与えられたとすると、Twx=yとなり、この情報は、変換Twの攻撃に使われかねない。最終的なWiの値は、符号化された追加関数tにより計算されるステップ914。値S0、S1は常にTw符号化されたものである一方で、値Wi-16およびWi-7は、符号化された、もしくは、符号化されていないパディング用ワードでありうる。別の追加関数が、別の符号化処理に使用されうる。図10に示される圧縮関数は、ひとつのチャンクのデータのハッシュを完結するために実行される。M内の各miにおいて、現時点のハッシュ値Hが一時的な処理値a~hにコピーされ、処理値a~hは図10に示すようにマッピングされる。全ての演算追加、論理和、否定は、全てが符号化された値、もしくは、一方が符号化され、他方は符号化されていない値に作用し、符号化された値を作成する。値Wiは、パッディング用ワードであるとき、符号化されていない値でありうるこれは、0≦i<16の時のみ、真であるとされる。表USnは、上記の表LSnと同様である。これらの表は、Σ演算の実行表であり、σ操作と同様の方法により、ワードを構成するバイト上で、Σ関数の4つのsubapplicationに分類される。アルゴリズム内の値aとeは常に符号化された値であるので、メッセージの拡張ステップにおいて、表SLSと対応する表SUSは存在しない。64のWiの値がそれぞれ処理されると、値HをTH変換する、符号化された追加関数を用いて、値a~hは、それぞれ、存在するH0~H7の値に追加されるステップ1002。先頭のメッセージチャンクの最初の4ラウンドは、特に、値Hnおよび値ahに作用する符号化方式をより良く保護するために処理することができる。各ワードHnにおいて、内部の変換THは外部のダイジェスト変換Tdに変換することができ、結合して、出力ダイジェストを形成する。メッセージの初期の512バイトの最初の4ラウンドにおいて、状態変数a~hのいくつか、もしくは、全てが、アルゴリズムにより固定された値となる。これにより、メッセージの最初のチャンクの最初の4ラウンドにたいして、上記特別なケースを利用しやすくなる。1.第一のラウンドにおいて、値T1のみが未知の値となる。T1は、先に計算された定数値とW0を追加することによって計算される。よって、ラウンド1の終わりでは、eとaとを除いた全ての変数が既知の固定値となり、符号化されるべきではない。2.ラウンド2において、T1、T2は共に、未知の値からなり、b、c、d、f、g、hは全て、既知の固定値である。3.ラウンド3において、c、d、g、hは既知の固定値である。4.ラウンド4において、d、hのみが既知の固定値である。5.最初のチャンクの残りのラウンドすべてにおいて、そして、後続のチャンクすべてにおいて、8つの中間状態値はすべてメッセージビットと混ぜ合わされ、未知であるとされる。これら特別なケースを利用することによって、8つの状態変数のすべてが符号化されておらず、元の符号化されていない値Hで初期化されていると、まず考えることができる。最初のメッセージチャンクの最初の4ラウンドそれぞれで、2つの状態変数が符号化されていない状態から符号化された状態に移行することが、データとして、T1の符号化された追加関数を用いて、値aとeに混ぜ合わされる。後続のラウンドのそれぞれで、これら変数の値は、操作で使用される時は、符号化されていると見なされる。これは、攻撃者が、最初の4ラウンドの状態変数の内容を予測し、それを使って、状態変数の変換を攻撃することを、確実に不可能とするために役立つ。最高の保護にするためには、符号化されたメッセージMは、少なくとも4つのワードのデータを含み、各ステップにおいて、符号化されたデータが確実にT1に混ぜ合わされるようにするべきである。短いメッセージについてのこのような弱点は、多くの場合、顕著ではない。なぜならば、極端に短いメッセージは、容易に、総当たり攻撃ブルートフォースアタックの対象となりえるからである。本実行の第一の目的は、攻撃者が、アルゴリズムの入力、出力、その中間の内部状態を観察し、符号化されていないメッセージもしくはダイジェストを断定するのを防ぐことである。入力メッセージとダイジェストが共に符号化されている場合において、本実行は、下記の特徴が見られる。1.配列W内のワードはすべて、符号化されたメッセージワードであるか、1つ以上の符号化されたメッセージバイトと、それに付随する1つ以上の符号化されたパディング用バイトからなるワードであるか、もしくは、符号化されていないパディング用ワードである。W内のワードはいずれも、符号化されていないメッセージバイトを含まない。2.パディング用バイトはいずれも、TIM符号化されたものである値0x80と0x00を除いて、符号化されない。この変換は、外部のメッセージ変換TMとは明確に異なり、二つの既知値を露出することで、容易に攻撃者が他の値を断定できることがないように選択されるべきである。例えば、任意のバイトを任意のバイトにマッピングする関数例えば、256バイトのルックアップテーブルは、この特性を有する。この表では、値0x80と0x00に対するマッピングのみが露出される必要があり、マッピングを完全に露出する必要はない。3.符号化されたパディング用データから派生したTw符号化されたWワードはいずれも、少なくとも1バイトの符号化されたメッセージデータを含む。4.入力としてWワードを取る全ての演算は、符号化されたデータを出力する。5.状態変数a~hを計算する演算はすべて、符号化されていない入力を含み、その場合、その入力は符号化されないままである。もしくは、少なくとも一つの符号化された入力を含み、その場合は、その出力は符号化される。6.最初のメッセージチャンクのラウンド4の後、状態変数ahは全て符号化される。7.最初のメッセージチャンクを処理した後、値H0~H7は全て符号化される。8.既知値H0~H7の初期値、値Kが、未知のデータとするために用いられるのと同じ符号化方式で符号化されることはない。9.符号化されていないパディング用データを含むσ演算の出力表SLSと符号化されたデータに対するσ演算の出力表LSは、全く異なる符号化方式を用いる。これらの値を用いた追加演算は、全く異なるものである。上記の理由から、メッセージ拡張の間も、ハッシュ処理の間も、入力メッセージバイトが明かされることは絶対にない。それら入力メッセージバイトは、アルゴリズムの定数やパディング用の値などの既知の固定データを符号化するために用いられることのない符号化方式で符号化される。これにより、メッセージの値が符号化されていない形式で露出することは絶対にないこと、そして、また、プレーンテキスト形式の攻撃を頓挫させること、が確実になる。なぜなら、パディング用の値および固定値は、すべて、符号化されていないか、もしくは、メッセージや状態データとは異なる方法で符号化されるからである。本開示の実施形態のいくつかでは、追加的な保護特性を使用することができる。例えば、さらにアルゴリズムを難読化するために、制御フロー変換をアルゴリズムに用いることができる。パディング用バイトを符号化されていない値として処理する手法は、メッセージMの任意の部分が符号化されていない値を渡すことができるように、拡大して適用することができる。セキュリティの観点から、パディング用の値を符号化していない状態に保つことが望ましい。なぜなら、それによって、メッセージ変換に対する既知のプレーンテキスト形式の攻撃のいくつかが抑止されるからである。構造化文書やフォーマット済みデータなどの部分的に既知値もしくは容易に推測できる値を含むメッセージへの応用としては、メッセージの慎重に扱うべき部分のみ符号化するようにし、メッセージデータの残りの部分は符号化されないようにするのが望ましい。この一例として、既知もしくは容易に推測されるフォーマットのデータ構成内部に含まれる暗号キー例えば、ASN1で符号化されたRSAキーのハッシュを計算することである。ストリーム内のどこで移行が行われるかを示すように、適切なメタデータが維持されることにより、いずれのワード境界でも符号化された値と符号化されていない値の間の移行ができるように、上記の方式は、容易に拡大して適用される。パディングのメカニズムは、MessageAuthenticationCodesMACなどの鍵がかけられた暗号ハッシュ関数においても、有効であり得る。上記では、実施形態を完全に理解してもらうために、説明を目的として、具体的な数字が示された。しかしながら、当業者には当然のことながら、これら特定の詳細内容が必要であるわけではない。他の例では、理解をさまたげないように、ブロック図形式で既知の電気的構造や回路が示されている。例えば、特定の詳細内容は、本明細書に記載の実施形態が、ソフトウェアルーチンとして実施されるのか、ハードウェア回路としてなのか、ファームウェアとしてなのか、それとも、それらの組み合わせとして実施されるのかを示すものではない。本開示の実施形態は、単数または複数の機械可読媒体コンピュータ可読媒体、プロセッサ可読媒体、もしくは、コンピュータ可読プログラムコードを内部に含むコンピュータで使用可能な媒体とも言うに格納されたコンピュータプログラム製品として表すことが可能である。機械可読媒体は、ディスケット、コンパクトディスクリードオンリーメモリCD-ROM、揮発性もしくは不揮発性のメモリ装置、あるいは、同様の記憶媒体を含む、磁気記憶媒体、光学記憶媒体、もしくは、電気的記憶媒体などの適切な具体的な非一時的媒体であってよい。機械可読媒体は、様々な指示、符号配列、構成情報、その他のデータを含んでよく、それらが実行されることで、プロセッサに、本開示の実施形態による方法のステップを実行させる。本件記載の実行を行うために必要な他の指示や操作も機械可読媒体に記憶されてもよいことは、当業者であれば、当然理解するであろう。記載の処理を行うために、機械可読媒体に記憶される指示は、プロセッサまたは、他の適切な処理装置で実行されてよく、回路と連動してもよい。本発明の上記実施形態は、単なる例示のみを目的とする。当業者により、発明の範囲を逸脱することなく、特定の実施形態に対する変更、改良、変形が可能である。発明の範囲は、添付の特許請求の範囲によってのみ定義される。"