(57)【特許請求の範囲】
【請求項１】
入力、出力、および中間値が観察できる演算環境において、暗号ハッシュ関数の実行を保護する、コンピュータで実行される方法であって、
前記コンピュータのプロセッサが、符号化された入力メッセージを提供するために、入力メッセージを符号化し、少なくとも一時的にメモリへ記憶する工程と、
前記コンピュータのプロセッサが、パディングされたメッセージを提供するために、１つ以上の符号化されていないパディングバイトを含む１つ以上のパディング用バイトを用いて、前記符号化された入力メッセージを、暗号ハッシュ関数で定められたメッセージ長になるまでパディングし、少なくとも一時的にメモリへ記憶する工程と、
前記コンピュータのプロセッサが、出力ダイジェストを生成するために、変換された暗号ハッシュ関数を、前記メモリ上で前記パディングされたメッセージへ適用する工程とを備え、
前記変換された暗号ハッシュ関数は、前記変換された暗号ハッシュ関数を符号化されたメッセージへ適用することにより生成されたダイジェストが、前記暗号ハッシュ関数を符号化されていないメッセージに適用することで生成されるであろうダイジェストと等価となるように変更されたバージョンの前記暗号ハッシュ関数を含む、方法。
【請求項２】
前記コンピュータのプロセッサが、前記出力ダイジェストを符号化することで、符号化された出力ダイジェストを提供する工程をさらに備える、請求項１に記載の方法。
【請求項３】
前記入力メッセージは、符号化された形式で受信され、前記入力メッセージを符号化する工程は、内部符号化により前記入力メッセージを再符号化する工程を含む、請求項１または請求項２に記載の方法。
【請求項４】
前記暗号ハッシュ関数は、ＳＨＡ−１、ＳＨＡ−２２４、ＳＨＡ−２５６、ＳＨＡ−３８４、またはＳＨＡ−５１２である、請求項１から請求項３のいずれか１項に記載の方法。
【請求項５】
パディングされたメッセージを生成するために前記符号化された入力メッセージを１つ以上のパディングバイトでパディングすることは、
前記符号化された入力メッセージを前記１つ以上の符号化されていないパディングバイトでパディングする前に、当該符号化された入力メッセージを、１つ以上の符号化されたパディングバイトでパディングすることを含み、
前記符号化されたパディングバイトの数は、前記メッセージ長のバイト数を４の倍数とするために必要な数である、請求項１から請求項４のいずれか１項に記載の方法。
【請求項６】
符号化されたワードの配列を少なくとも１つ、および、符号化されていないパディング用ワードを提供するために、前記コンピュータのプロセッサが、前記パディングされたメッセージを分割する工程をさらに備える、請求項５に記載の方法。
【請求項７】
前記変換された暗号ハッシュ関数を適用する工程は、
前記入力メッセージのいずれかの部分を含む中間値が常に符号化されたものであるように、前記少なくとも１つの配列のそれぞれを、前記変換された安全なハッシュ関数によって処理する工程を備える、請求項６に記載の方法。
【請求項８】
前記少なくとも１つの配列のそれぞれを処理する工程は、
ハッシュ関数の反復で用いられる、初期状態変数と定数とを初期化する工程と、
更新された状態変数を提供するために、前記少なくとも１つの配列のそれぞれでハッシュ関数の反復を行う工程と、
符号化された状態変数を提供するために、前記更新された状態変数に出力の符号化を適用する工程と、
前記出力ダイジェストを提供するために、前記符号化された状態変数を連結する工程とを備える、請求項７に記載の方法。
【請求項９】
前記少なくとも１つの配列のそれぞれでハッシュ関数の反復を行う工程は、
前記ハッシュ関数で使用される成分関数のマッピングを決定する工程を備える、請求項８に記載の方法。
【請求項１０】
前記マッピングはルックアップテーブルに格納される、請求項９に記載の方法。
【請求項１１】
前記マッピングは、前記少なくとも１つの配列内のワードの数を拡張するために用いられる、請求項９または請求項１０に記載の方法。
【請求項１２】
前記マッピングは、前記状態変数の中間値を提供するために用いられる、請求項９から請求項１１のいずれか１項に記載の方法。
【請求項１３】
命令を含む非一時性コンピュータ可読媒体であって、
前記命令は、コンピュータのプロセッサによって実行されると、入力、出力、および中間値が観察できる演算環境において、暗号ハッシュ関数の実行を保護するために、前記プロセッサに、
符号化された入力メッセージを提供するために、入力メッセージを符号化し、少なくとも一時的にメモリへ記憶する工程と、
パディングされたメッセージを提供するために、１つ以上の符号化されていないパディングバイトを含む１つ以上のパディング用バイトを用いて、前記符号化された入力メッセージを、暗号ハッシュ関数で定められたメッセージ長になるまでパディングし、少なくとも一時的にメモリへ記憶する工程と、
出力ダイジェストを生成するために、変換された暗号ハッシュ関数を、前記メモリ上で前記パディングされたメッセージへ適用する工程とを実行させ、
前記変換された暗号ハッシュ関数は、前記変換された暗号ハッシュ関数を符号化されたメッセージへ適用することにより生成されたダイジェストが、前記暗号ハッシュ関数を符号化されていないメッセージに適用することで生成されるであろうダイジェストと等価となるように変更されたバージョンの前記暗号ハッシュ関数を含む、非一時性コンピュータ可読媒体。
【請求項１４】
符号化された出力ダイジェストを提供するために、前記コンピュータのプロセッサが、前記出力ダイジェストを符号化する工程を前記プロセッサに実行させるための命令をさらに含む、請求項１３に記載のコンピュータ可読媒体。
【請求項１５】
前記入力メッセージは、符号化された形式で受信され、前記入力メッセージを符号化する工程は、内部符号化により前記入力メッセージを再符号化する工程を含む、請求項１３または請求項１４に記載のコンピュータ可読媒体。
【請求項１６】
前記暗号ハッシュ関数は、ＳＨＡ−１、ＳＨＡ−２２４、ＳＨＡ−２５６、ＳＨＡ−３８４、またはＳＨＡ−５１２である、請求項１３から請求項１５のいずれか１項に記載のコンピュータ可読媒体。
【請求項１７】
パディングされたメッセージを生成するために前記符号化された入力メッセージを１つ以上のパディングバイトでパディングすることは、
前記符号化された入力メッセージを前記１つ以上の符号化されていないパディングバイトでパディングする前に、当該符号化された入力メッセージを、１つ以上の符号化されたパディングバイトでパディングすることを含み、
前記符号化されたパディングバイトの数は、前記メッセージ長のバイト数を４の倍数とするために必要な数である、請求項１３から請求項１６のいずれか１項に記載のコンピュータ可読媒体。
【請求項１８】
符号化されたワードの配列を少なくとも１つ、および、符号化されていないパディング用ワードを提供するために、前記パディングされたメッセージを分割する工程を前記プロセッサに実行させる命令をさらに含む、請求項１７に記載のコンピュータ可読媒体。
【請求項１９】
前記変換された暗号ハッシュ関数を適用する工程は、
前記入力メッセージのいずれかの部分を含む中間値が常に符号化されたものであるように、前記少なくとも１つの配列のそれぞれを前記変換された保護ハッシュ関数によって処理する工程を備える、請求項１８に記載のコンピュータ可読媒体。
【請求項２０】
前記少なくとも１つの配列のそれぞれを処理する工程は、
ハッシュ関数の反復で用いられる、初期状態変数と定数とを初期化する工程と、
更新された状態変数を提供するために、前記少なくとも１つの配列のそれぞれでハッシュ関数の反復を行う工程と、
符号化された状態変数を提供するために、前記更新された状態変数に出力符号化を適用する工程と、
前記出力ダイジェストを提供するために、前記符号化された状態変数を連結する工程とを備える、請求項１９に記載のコンピュータ可読媒体。
【請求項２１】
前記少なくとも１つの配列のそれぞれでハッシュ関数の反復を行う工程は、
前記ハッシュ関数で使用される前記成分関数のマッピングを決定する工程を備える、請求項２０に記載のコンピュータ可読媒体。
【請求項２２】
前記マッピングはルックアップテーブルに格納される、請求項２１に記載のコンピュータ可読媒体。
【請求項２３】
前記マッピングは、前記少なくとも１つの配列内のワードの数を拡張するために用いられる、請求項２１または請求項２２に記載のコンピュータ可読媒体。
【請求項２４】
前記マッピングは、前記状態変数の中間値を提供するために用いられる、請求項２１から請求項２３のいずれか１項に記載のコンピュータ可読媒体。
【請求項２５】
暗号ハッシュ関数を用いて、デジタル著作権管理（ＤＲＭ）コンテンツのための暗号化キーを派生させる、コンピュータで実行可能な方法であって、
前記コンピュータのプロセッサが、符号化された入力メッセージを提供するために、入力メッセージを符号化し、少なくとも一時的にメモリへ記憶する工程と、
前記コンピュータのプロセッサが、パディングされたメッセージを提供するために、１つ以上の符号化されていないパディングバイトを含む１つ以上のパディング用バイトを用いて、前記符号化された入力メッセージを、暗号ハッシュ関数で定められたメッセージ長になるまでパディングし、少なくとも一時的にメモリへ記憶する工程と、
前記コンピュータのプロセッサが、前記暗号化キーを生成するために、変換された暗号ハッシュ関数を、前記メモリ上で前記パディングされたメッセージへ適用する工程と、
前記コンピュータのプロセッサが、前記暗号化キーを符号化し、少なくとも一時的にメモリへ記憶する工程とを備え、
前記変換された暗号ハッシュ関数は、前記変換された暗号ハッシュ関数を符号化されたメッセージへ適用することにより生成された暗号化キーが、前記暗号ハッシュ関数を符号化されていないメッセージに適用することで生成されるであろう暗号化キーと等価となるように変更されたバージョンの前記暗号ハッシュ関数を含む、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的にデジタル暗号に関する。より具体的には、ホワイトボックス攻撃環境での暗号ハッシュ関数の動作の保護に関する。
【背景技術】
【０００２】
暗号ハッシュ関数は、データのデジタル「フィンガープリント」を作成する際に用いられ、多くの暗号システムの構成要素となっている。このようなハッシュ関数は入力として任意の長さのビット列を取り、出力として固定長ビット列にマッピングする。入力は、通常、メッセージと呼ばれ、その出力は、通常、ダイジェストと呼ばれる。
【０００３】
ハッシュ関数と他の暗号プリミティブ（例えば、ブロック暗号）との重要な違いは、ハッシュ関数が鍵を持たないことである（つまり、ハッシュ関数は鍵なしプリミティブである）。これは、メッセージを与えられた場合、誰でもそのダイジェストを計算できるということを意味する。公開されている規格で規定されている暗号ハッシュ関数は数多くある。例えば、２００８年１０月のＦＩＰＳ  ＰＵＢ  １８０−３（米国商務省）のＳｅｃｕｒｅ  Ｈａｓｈ  Ｓｔａｎｄａｒｄ（ＳＨＳ）は、５つの暗号ハッシュ関数、ＳＨＡ−１、ＳＨＡ−２２４、ＳＨＡ−２５６、ＳＨＡ−３８４、ＳＨＡ−５１２を規定している。その文書の全内容は、引用することにより本明細書に含まれる。ハッシュ関数の入力が与えられた場合、その出力を計算するのは至って簡単である。しかしながら、安全な暗号ハッシュ関数は、原像計算困難性、つまり、「一方向性」として知られる数学的特性を満たさなければならない。これは、出力を与えられた場合、その出力にハッシュされた入力を計算するのはとても困難であることを意味する。よって、ハッシュ関数は重要な非対称性を有する。つまり、ハッシュ関数は、値を求めるのは簡単であるが、反転するのは難しい。
【０００４】
ハッシュ関数の応用としては、デジタル署名方式、メッセージ認証コード、疑似乱数の生成、コード署名方式、パスワードによる認証、キー派生関数などがよく知られている。ハッシュ関数は、デジタル著作権管理（ＤＲＭ）方式でのコンテンツキーの復元にも用いられる。これは、携帯電話などの携帯電子機器で使用される、オープン・モバイル・アライアンス（ＯＭＡ）によるＤＲＭの場合である。コンテンツのプロバイダは、ＯＭＡのＤＲＭシステムにおいて、コンテンツ暗号化キーと呼ばれる対称キーを用いて暗号化することによって、自身のコンテンツ（例えば、動画、楽曲、ゲームなど）を保護し、エンドユーザに配信する。ユーザが、保護されたコンテンツを自分の受信機で再生することをリクエストした場合、受信機のＤＲＭエージェントは、まず、そのコンテンツに対して発行された権利オブジェクト内に規定されている許可を確認する。そのリクエストが認証されると見なすと、ＤＲＭエージェントは、権利オブジェクト内のデータから、必要とされるコンテンツ暗号化キーを復元する演算を行う。そして、コンテンツが解読され、再生される。コンテンツ暗号化キーを復元するための、ＤＲＭエージェントによる暗号操作については、２００８年１１月６日付けのＯＭＡのＤＲＭ仕様書２．１版の７．１．２節に記載されており、その全内容が、引用することにより本明細書に含まれる。この演算は、ＳＨＡ−１、ＳＨＡ−２５６などのハッシュ関数に基づくキー派生関数の使用を含む。
【０００５】
悪意のあるユーザは、ＤＲＭエージェントを実行するソフトウェアを分析して、コンテンツキーを抽出しようと試みるであろう。特に、（演算装置が物理的に保護されている場合を除いて）攻撃者が実行環境やソフトウェアの実行を完全にコントロールするホワイトボックス環境において、攻撃者は、コード、データ構成、および、実行環境へのアクセス権を所有する。このような環境で操作を行う攻撃者は、メモリーダンプを行うことにより、もしくは、デバッガでＤＲＭエージェントを実行することにより、ハッシュ関数の出力を観察することができる。ＤＲＭエージェントが復元したコンテンツ暗号化キーが露出された場合、悪意のある攻撃者は、それらコンテンツ暗号化キーにアクセスすることができるであろう。そして、それらを用いてオフラインのコンテンツを解読し、権利オブジェクトによる制限からコンテンツを解除するであろう（つまり、攻撃者はＤＲＭを回避できるであろう）。よって、ＤＲＭエージェントによって実行される暗号操作がユーザから隠蔽されていることが、重要である。
【０００６】
従って、ハッシュ操作そのものがホワイトボックス攻撃に対抗できるように、メッセージ、ダイジェスト、もしくは、それらの間に介在するもののいずれもが明らかにされることなく、メッセージをハッシングすることが望ましい。
【発明の概要】
【０００７】
本発明の一態様によると、入力、出力、および、中間値が観察できる演算環境で、ＳＨＡ−１、ＳＨＡ−２２４、ＳＨＡ−２５６、ＳＨＡ−３８４、および、ＳＨＡ−５１２などの暗号ハッシュ関数の実行を保護するための、コンピュータで実行可能な方法が提供される。本方法は、入力メッセージを符号化し、変換されたドメインに符号化した入力メッセージを提供することを含む。そして、変換された暗号ハッシュ関数が適用され、出力ダイジェストが提供される。その変換された暗号ハッシュ関数は、変換されたドメイン内の暗号ハッシュ関数を実行する。そこで、出力ダイジェストが符号化され、符号化された出力ダイジェストが提供される。プロセッサによって実行されることによりプロセッサに本方法を実行させる命令を含む、非一時的なコンピュータ可読媒体も提供される。
【０００８】
本発明の実施形態によると、入力メッセージは符号化された形式で受信することができ、内部符号化により、再符号化することができる。符号化された入力メッセージは、符号化されていないパディング用バイトを用いて、パディングすることができ、パディングされたメッセージが提供される。そして、パディングされたメッセージは分割でき、符号化されたワードの配列を少なくとも一つと、符号化されていないパディング用ワードとが提供される。各配列は、変換された安全なハッシュ関数により処理できる。よって、入力メッセージのいずれかの部分を含む、中間値は、常に符号化されている。初期状態変数および定数は、初期化することができ、その後、ハッシュ関数の反復で使用され、更新された状態変数を提供する。出力符号化を更新された状態変数に適用することができ、符号化された状態変数を提供する。そして、符号化された状態変数は連結することができ、出力ダイジェストを提供する。変換されたドメイン内のハッシュ関数で使用される成分関数のマッピングを決定することができ、ハッシュ関数の反復毎に使用される。これらマッピングはルックアップテーブルに格納され、各配列内のワードの数を拡張するのに使用することができる。そして、状態関数の中間値を提供する。
【０００９】
本発明の更なる様態によると、暗号ハッシュ関数を用いて、デジタル著作権管理（ＤＲＭ）コンテンツの暗号化キーを派生させる、コンピュータで実行される方法が提供される。本方法は、入力メッセージを符号化し、変換されたドメインに符号化された入力メッセージを提供することを含む。変換された暗号ハッシュ関数は、変換されたドメインの暗号ハッシュ関数を実行するものであって、暗号化キーを提供するために適用される。そして、暗号化キーは符号化される。
【図面の簡単な説明】
【００１０】
以下、添付の図面を参照し、本発明の実施形態を説明する。実施形態は、単なる例である。
【００１１】
【図１】ＳＨＡ−２５６アルゴリズムの従来の実行の高レベルでの概観を示すフローチャートである。
【図２】ＳＨＡ−２５６アルゴリズムのためのメッセージのパディング処理を示すフローチャートである。
【図３】ＳＨＡ−２５６アルゴリズムのためのメッセージブロックの拡張処理を示すフローチャートである。
【図４】ＳＨＡ−２５６アルゴリズムのための、圧縮アルゴリズムを用いる一時的な値の処理を示すフローチャートである。
【図５】変換されたドメインおよび変換されていないドメインでの暗号化関数および暗号解読関数の一般的な実行を示す。
【図６】実施形態による暗号ハッシュ関数演算を保護するためのシステムを示すブロック図である。
【図７】実施形態によるＳＨＡ−２５６アルゴリズムの保護された実行を示すフローチャートである。
【図８】実施形態によるＳＨＡ−２５６アルゴリズムの符号化された実行のためのパディング処理を示すフローチャートである。
【図９】実施形態によるＷｉ配列メッセージの拡張の保護された実行を示すフローチャートである。
【図１０】実施形態によるＨｉ配列を処理する保護されたＳＨＡ−２５６の実行を示すフローチャートである。
【発明を実施するための形態】
【００１２】
一般的に、本発明は、ホワイトボックス環境での攻撃に対抗する暗号ハッシュ関数の保護されたソフトウェアの実行を生成する方法およびシステムを提供する。本明細書で、ホワイトボックス環境とは、ある攻撃者が実行環境およびソフトウェアの実行を完全にコントロールする環境のことをいう。つまり、その攻撃者は、コード、データ構成、および実行環境に対するアクセス権を持つ。ジョンソン氏らへ付与された米国特許７，３９７，９１６号、発明の名称「ＳＹＳＴＥＭ  ＡＮＤ  ＭＥＴＨＯＤ  ＦＯＲ  ＯＢＳＣＵＲＩＮＧ  ＢＩＴ−ＷＩＳＥ  ＡＮＤ  ＴＷＯ’Ｓ  ＣＯＭＰＬＥＭＥＮＴ  ＩＮＴＥＧＥＲ  ＣＯＭＰＵＴＡＴＩＯＮＳ  ＩＮ  ＳＯＦＴＷＡＲＥ」は、ホワイトボックス攻撃環境に関する背景情報を含み、引用することにより本明細書に含まれる。
【００１３】
本明細書にて記載される保護された暗号ハッシュの実行により、ハッシュ演算の入力と出力を符号化することができる。本明細書で、符号化とは、可逆関数のことをいい（例えば、バイトからバイトへ、または、ワードからワードへ）、極秘データを隠すために使用される。本開示では、メモリ内の符号化されていない値（すなわち、メッセージ、ダイジェストおよびその中間値）を露出することなく、どのように符号化されたメッセージを受け付け、どのように符号化されたダイジェストを作成するかを記載する。
【００１４】
本開示の実施形態は、ハッシングアルゴリズムを変換し、変換されたドメイン内で演算を行う。そして、どんな場合でも保護された情報を露出することなく、効果的な方法で、変換された入力に作用する、および／または、変換された出力を作成する。これにより、ハッシュ関数の演算をホワイトボックス攻撃から保護する。実施形態は、元のハッシングアルゴリズムとの互換性を保ちながら、このような保護を実現する。本明細書内での互換性とは、符号化されたメッセージ入力を受信し、符号化されていない出力オブジェクトを作成する保護された実行が、符号化されていないメッセージ入力を受信する標準的なハッシュ関数の実行と同じ結果となるようにすることを意味する。
【００１５】
従来のハッシングアルゴリズム
暗号ハッシュ関数の一例としては、２００８年１０月のＦＩＰＳ  ＰＵＢ  １８０−３（米国商務省）のＳｅｃｕｒｅ  Ｈａｓｈ  Ｓｔａｎｄａｒｄ（ＳＨＳ）に記載されるようなＳＨＡ−２５６アルゴリズムがある。図１〜４と、それらに伴う記載によって、ＳＨＡ−２５６アルゴリズムの従来の実行が説明されている。ＳＨＡ−２５６アルゴリズムは、単なる例として提示され、本発明を示すために使用される。ただし、当然のことながら、当業者は、本開示の実施形態がいかなる暗号ハッシュ関数にも適用できることを理解するであろう。
【００１６】
図１は、ＳＨＡ−２５６アルゴリズムのバイト指向ハッシュの実行の高レベルでの概観を示すフローチャートである。当業者は当然理解するであろうが、ビット指向の実行も支持される。
【００１７】
まず、８個の初期ハッシュ値Ｈｉ（以下、状態変数とも言う）と、６４個の定数値Ｋｊとが、アルゴリズムの仕様内で定義されているように特定の定数値に初期化される（ステップ１０２および１０４）。
【００１８】
そして、入力メッセージＭが前処理される。メッセージはまず、図２のアルゴリズムによりパディングされる（ステップ１０６）。図２に示すように、０ｘ８０バイトがメッセージＭの最後に追加される（ステップ２０２）。それから、（バイトでの）Ｍの長さが６４を法として５６と合同になるまで、さらにパディング用の０ｘ００バイトがメッセージＭの最後に追加される（ステップ２０４、２０６）。そして、６４ビットでビッグエディアン方式の整数（つまり、８バイト）として、ビットでのＭの元の長さが、Ｍに追加される（ステップ２０８）。よって、パディング処理は、バイトでの長さが６４を法として０と合同である、パディングされたメッセージを生成する。再度、図１を参照すると、その後、そのメッセージは、６４バイトのブロックに分割され、各ブロックは、１６個の３２ビットでビッグエディアン方式のワードの配列ｍであると解釈される（ステップ１０８）。
【００１９】
中間値ａ、ｂ、・・・ｈが初期化された後（ステップ１１０）、図３で詳細に説明されるように、各配列ｍは、６４個の３２ビットのワードの配列Ｗに拡張される（ステップ１１２）。図３に示されるように、０≦ｉ≦１５の要素はＷｉ＝Ｍｉであり、１６≦ｉ≦６３の要素はＷｉ＝Ｗｉ−１６＋s０（Ｗｉ−１５）＋Ｗｉ−７＋s１（Ｗｉ−２）であり、ここで、s関数は、「右回りのローテート」（ＲＯＴＲ）関数と、「右シフト」（ＳＨＲ）関数とにより、図に示されたように定義される。
【００２０】
配列Ｗの各要素について、パディングされたメッセージＭの全てのブロックが処理される（ステップ１１８）まで、８個のハッシュ値Ｈｉが、一時的な処理のための値（ａ〜ｈ）にコピーされ（ステップ１１４）、８個の中間ダイジェスト値Ｈｉに返される（ステップ１１６）。値（ａ〜ｈ）は、図４のフロー図で示されるようにマッピングされる。最終的なハッシュダイジェストは、２５６ビットの値であり、全てのメッセージブロックｍが処理された後に最終的な８個の値Ｈｉを結合することによって形成される（ステップ１２０）。
【００２１】
以下は、標準的なＳＨＡ−２５６アルゴリズムの特徴であり、ホワイトボックスでの攻撃者がいかに実行を獲得するかを考える上で重要であり、上記の説明から推測することができる。
１．上記Ｗ配列を構築するために、入力メッセージはアクセス可能（可読）でなければならない。
２．図３で示すようなＷ配列の構築では、「シフト」演算、「排他的論理和」（ＸＯＲ）演算、「追加」演算のみが使用される。よく知られているように、ローテート演算は、「シフト」とＸＯＲにより実行することができる。例えば、３２ビットのワードｘがＮビット分回転する右回りの循環は、ｘを（３２−ｎ）分、左シフトさせ、ｘを排他的論理和ｎ分、右シフトさせることで行うことができる。
３．Ｗ配列内の最初の１６個の値は、ちょうど１６個のワードｍであり、その時点で処理されているＭの５１２ビットちょうどである。
４．パディング用ビットが、最後のメッセージブロックに存在し、メッセージＭの長さによっては、２番目以降のメッセージブロックに存在しうる。これらパディング用ビットは、既知値である。攻撃者は、Ｍの長さを知っていると考えられ、よって、全てのパディング用ビット、および、どこからパディングが開始されるかを知っていると考えられる。
５．図４で示される方法で最初のメッセージブロックが処理される間、値Ｈは、従って、値ａ〜ｈも、全て固定の既知値であり、使用されるアルゴリズムに基づいて予測できる。図４に示すように、「未知の」値（メッセージビット、または、メッセージビットから派生した値）は、Ｔ１の構成において、Ｗ配列を介してのみ、混ぜられる。これら未知の値は、ラウンド毎に２つの割合で、Ｔ１の追加を経た状態変数内に、また、状態変数を経た値の数列に広まる（ラウンド１の後にａとｅ、ラウンド２の後にａ、ｅ、ｂ、ｆなど）。最初のメッセージブロックのラウンド４が終了して初めて、状態値は全て、「未知の」データを含む。後続のメッセージブロックは、直前のブロックの最後の状態から始まるので、始めから未知のデータを含む。
６．図４のアルゴリズムのメッセージブロックの処理または圧縮では、シフト演算（ｓｈｉｆｔ）、排他的論理和演算（ｅｘｃｌｕｓｉｖｅ  ｏｒ）、論理積演算（ａｎｄ）、否定演算（ｎｏｔ）、および、加算演算（ａｄｄ）のみが使用される。排他的論理和は加算（ａｄｄ）と論理積（ａｎｄ）の組み合わせで表現することができる。
７．多くの応用において、メッセージとダイジェストとはバイトの配列として扱われるが、ＳＨＡ−２アルゴリズム内では、メッセージとダイジェストとは、３２ビットもしくは６４ビットのワードとして演算が行われる。
［符号化関数］
【００２２】
暗号関数および復号関数の保護されたソフトウェアの実行に対する、入力および／または出力は、符号化されたパラメータからなる。そのパラメータは、保護されたソフトウェアの実行と連動するモジュール内での特定の適応が必要なものである。図５は、関数Ｅを用いて入力ドメインＩＤを出力ドメインＯＤにマッピングする演算の応用を示す。逆算Ｄによって、出力値は入力ドメインＩＤ内の値にマッピングされる。図５はまた、入力ドメインＩＤを符号化された入力ドメインＩＤ’にマッピングする変換ＴＡと、符号化された出力ドメインＯＤ’内の値を出力ドメインＯＤにマッピングする変換ＴＢとを示す。ＴＡとＴＢとは、全単射である。
【００２３】
暗号関数ＥとＤと共に、符号化関数ＴＡとＴＢとを用いるということは、以下のことを意味する。つまり、入力ドメインＩＤのデータ要素を符号化関数Ｅに入力し、出力ドメインＯＤの暗号化されたデータ要素を得るのではなく、ＴＡを適用して、ドメインＩＤ’の変換されたデータ要素が、変換された暗号化関数Ｅ’に入力されることを意味する。変換された暗号化関数Ｅ’は、符号化演算において、逆変換関数ＴＡ−１および／またはＴＢ−１を組み合わせて、鍵などの機密情報を保護する。そして、ドメインＯＤ’の、変換され、暗号化されたデータ要素が得られる。同様に、Ｄ’が、ＯＤ’内のデータ値を復号し、ＩＤ’内の値にマッピングする。保護された実行内でＴＡとＴＢとを行うことにより、変換されたデータの空間内の入力データおよび出力データを分析した時に、暗号化関数Ｅと復号関数Ｄとの鍵を読み出すことはできない。
【００２４】
変換関数ＴＡとＴＢの少なくとも一つは、非自明の関数であるべきである（つまり、恒等関数とは異なるべきである）。ＴＡが恒等関数である場合、入力ドメインＩＤとＩＤ’は、当然、等しいドメインになるであろう。ＴＢが恒等関数である場合、出力ドメイン同士は、当然、等しいドメインになるであろう。
［ハッシングアルゴリズムにおける符号化］
【００２５】
ＯＭＡのＤＲＭの例では、ハッシュ関数の出力は、コンテンツ暗号化キーを復元するのに使用された。よって、この状況では、少なくとも、ダイジェストが符号化されるべきである。しかしながら、ダイジェストのみを符号化するのでは、十分な保護とはならない。ハッシュ関数には鍵がかけられていないので、攻撃者が符号化されていない入力を入手した場合、ＯＭＡの仕様書内で定義されているハッシュ関数を攻撃者自身が実行し、利用することで、符号化されていない出力を計算できてしまう。従って、実施形態においては、ハッシュ関数への入力も符号化される。
【００２６】
暗号ハッシュ関数の保護された実行が必要な状況では、ほとんどの場合、入力メッセージを符号化しなければならない。符号化することは、メッセージを攻撃者から守秘するのに役立つ（つまり、メッセージを簡単に読むことはできない）、そして、攻撃者が意図的にメッセージを変更するのが難しくなる。よって、メッセージの方式を完全性があるものにする。攻撃者が、中間状態からさかのぼって作業し、符号化されていない入力メッセージとなりうるものを計算するのが難しくなるように、符号化は、少なくともいくつかのハッシングアルゴリズムを通して維持されなければならない。
【００２７】
なお、符号化されたメッセージから符号化されていないダイジェストを作成すると、必ず符号化されていないメッセージが露呈するわけではない。保護暗号ハッシュ関数の一方向関数という特性は、コンピュータ上で、入手したダイジェストを作成する入力メッセージを探すのは不可能であることを意味する。よって、応用において、符号化されていない出力を伴うハッシュ関数の保護された実行を利用することが可能性である。しかしながら、ダイジェストを符号化することは、メッセージをホワイトボックス攻撃者から守秘するのに役立ち、攻撃者が意図的にメッセージを改竄するのを難しくする。
【００２８】
上記のように、本開示の実施形態は、ＳＨＡ−２５６ハッシュアルゴリズムを使用する。以下に、ホワイトボックス攻撃に対抗するＳＨＡ−２５６の実行の作成方法の例を説明する。当業者は当然理解するであろうが、説明される方法やシステムは、若干の変更のみを伴い、同様の方法で、ＳＨＡ−２族の他の暗号ハッシュ関数（ＳＨＡ−２２４、ＳＨＡ−３８４、ＳＨＡ−５１２）を保護するためにも使用されうる。さらに、当業者が、ＳＨＡ−１、ＭＤ５、それ以前のものなど、他の暗号ハッシュ関数を同様に保護するには、本方法および説明で十分足りる。
【００２９】
ホワイトボックス攻撃に対する耐性は、ハッシュアルゴリズムの入力、出力、その中間の状態値の符号化を利用することで達成される。メッセージ（入力）とダイジェスト（出力）は、別々に保護することができ、符号化してしまうと、メッセージやダイジェストは、実行中のいかなる時点でも、それぞれの元の、符号化されていない形式で現れることはない。アルゴリズムの基本的な機能性は変更されない、それは、保護された実行により作成された符号化されたダイジェストと、保護されていない実行により作成されたダイジェストを同様に符号化することによって作成された、符号化されたダイジェストとは、同一のものであることを意味する。
［強固なハッシング］
【００３０】
ハッシング演算を保護することとは、可逆符号化関数を適用して、ハッシュ関数のメッセージ（入力）および／またはダイジェスト（出力）を変換することを基本的に含んでいる。この符号化関数は、固定値を用いたＸＯＲと同じように簡単にできる、もしくは、任意の複合関数とすることができる。本開示の実施形態は、保護された情報をいかなる時も露出することなく、効率的な方法で、ハッシングアルゴリズムを変更し、変換された入力に作用する、および／または、変換された出力を作成する。その一方で、元のハッシングアルゴリズムとの互換性は維持される（つまり、実施形態が、変換されたメッセージ入力と符号化されていない出力ダイジェストを伴う、ホワイトボックスでの実行である場合、符号化されていない形式である同メッセージを伴う、標準的な実行と同じハッシュ効果がある）。本開示の実施形態は、（８ビットまたは３２ビットのそれぞれの変換係数を用いて、８ビットまたは３２ビットを同時に変換する）８ビットおよび３２ビットのサイズの変換により、変換空間をより大きくすることができる。ハッシングアルゴリズムのいくつかの部分は、変換方式の詳細を露出することなく、変換された入力を変換された出力に効果的にマッピングできる表参照演算に置き換えられる。
【００３１】
本開示のいくつかの実施形態では、メッセージとダイジェストの両方が変換されることを前提とする。この構成により、最高レベルのセキュリティが提供される。しかしながら、セキュリティ特性の弱体化という代償を伴いはするが、変換されていないメッセージ、または、変換されていないダイジェストを用いることもできる。限定的な保護はできるので、変換されていないメッセージと変換されていないダイジェストの両方を用いる構成とすることも可能であるが、推奨はしない。説明の実施形態では、メッセージとダイジェストの両方に対して、８ビット変換が用いられることを前提とするが、以下に説明するように、３２ビット変換も支持される。
【００３２】
図６は、暗号ハッシュ関数の演算を保護するシステムの高レベルでのブロック図である。図７〜１０を参照し、本開示のある実施形態による、ＳＨＡ−２５６アルゴリズムの保護された実行を説明する。入力の符号化または出力の符号化を利用しない実施形態は、恒等変換にＴＭまたはＴｄを設定することにより、容易に上記から導かれる（なお、ＴＭおよびＴｄは、それぞれ、メッセージ入力の符号化およびダイジェスト出力の符号化するものである）。これは、ＴＭからＴＩＭへのマッピング、および、ＴＨからＴｄへのマッピングにのみ影響する。しかしながら、これらのインスタンスは、既知値が内部変換によって符号化されるであろうし、攻撃者がその内部変換を攻撃し、符号化された情報を復元することができうるので、安全性が低い。
【００３３】
図６に示すように、入力メッセージＭは、符号化関数ＴＭにより符号化されており、再符号化され、符号化関数ＴＩＭ６０２を入力する。そして、その結果である、ＩＭドメイン内の符号化されたメッセージＴＩＭ（Ｍ）は、パディング関数６０４によって、暗号ハッシュ関数で決定された長さにパディングされる。例えば、ＳＨＡ−２５６に関しては、ＴＩＭ符号化された入力メッセージのパディング後の長さは、６４バイトを法として０に合同である。以下により詳しく述べられるように、パディング用バイトは、ある実施形態においては、メッセージの長さを４バイトの倍数にするのに必要な初期のパディング用バイトを除いて、符号化されていない。当該初期のパディング用バイトは、ＴＩＭドメイン内で符号化したものである。本実施形態は、符号化されていないパディング用バイトが、同一ワード境界内のメッセージバイトに付属しないことを確実にするので、追加的なセキュリティを提供する。これにより、ワードのある部分は符号化され、他の部分は符号化されないという心配なく、確実に、メッセージバイトが均一にワードに分割される。しかしながら、当業者は当然理解するであろうが、本開示の実施形態は、たとえ、全てのパディング用バイトが符号化されていなくても、機能するであろう。
【００３４】
パディング後のＴＩＭ符号化されたメッセージは、それから、前処理され、ブロッキングまたは分割の関数６０６により所定の長さのワードのブロックに分割される。例えば、ＳＨＡ−２５６の保護された実行において、パディング後のＴＩＭ符号化された入力メッセージは、まず、６４バイトの「チャンク」に分割され、続いて、各チャンクが１６ビット、３２ビットのワードのブロックに分割され、結果、１６ワードの符号化された配列ＴＩＭ（ｍ）となる。
【００３５】
それから、各配列ＴＩＭ（ｍ）は、ＴＩＭドメイン内の変換された関数を適用し、処理される。変換されたＳＨＡ−２ハッシュ関数に関しては、図に示すように、任意の配列ＴＩＭ（ｍ）が、まず、ＴＩＭドメイン内の拡張関数６０８により処理され、符号化された配列ＴＷ（Ｗ）が提供される。例えば、ＳＨＡ−２５６に関しては、拡張関数の結果、符号化された配列ＴＷ（Ｗ）は６４個の３２ビットのワードで構成される。そして、この拡張された配列は、ＴＷドメイン内にある圧縮関数６０１により圧縮され、その結果、符号化された、中間値ＴＷ（ａ、ｂ、・・・ｈ）となる。メッセージの全てのチャンクが処理されると、最終的な中間値は、符号化関数ＴH６１２を用いて、任意で符号化され、符号化された出力ハッシュ値ＴＷ（Ｈ０、Ｈ１、・・・Ｈ７）が提供される。そして、これら出力ハッシュ値は、連結関数６１４によって連結され、元の入力メッセージＭに対する符号化された出力ダイジェストＴｄ（Ｄ）が一つ生成される。
【００３６】
図７〜１０に示しながら、本方法の演算は、ＳＨＡ−２５６の変換された実行を参照し、より詳細に説明される。図７に示されるように、状態変数Ｈ０〜Ｈ７は、ハッシュ関数の基準により規定されるような値に初期化される（ステップ７０２）。６４個の値Ｋ０〜Ｈ６３も、ハッシュアルゴリズム仕様書内で定義されるような、それらの定数値に初期化される（ステップ７０４）。これらの変数は、初期の段階では、符号化されておらず、攻撃者が既知の定義された値を用いて、Ｈ０〜Ｈ７の変換を攻撃することを、確実にできないようにするのに役立っている。
【００３７】
メッセージデータＭは、符号化方式ＴＭを用いて符号化された形式のアルゴリズムに入力される。この変換は、バイト指向、または、ワード指向のものでありうる。ＴＭは、ハッシュ実行と保護されたハッシュ関数を用いるモジュールとの間の「インターフェイス」符号化である。ＴＭ符号化は、その応用特有の、もしくは、その応用内でのハッシングアルゴリズムの使用のインスタント特有のものでありえる。いくつかの実施形態において、外部の変換ＴＭは、内部の、任意に選ばれた、８ビットの変換ＴＩＭに変換される。ＴＭ符号化されたバイト／ワードは、ＴＩＭ符号化により、再符号化される（例えば、x’＝ＴＩＭ（Ｔ−１Ｍ（ｘ）））。好ましい実施形態によると、再符号化は、復号の後に符号化するよりも、組み合わせた操作として行われる方が好ましく、このやり方だと、符号化方式が露出することがない。以下に説明するように、ＴＩＭ変換は、変換ＴＭを露出することなくパディング用バイトを処理するのに有効である。そして、メッセージＭは、パディングされ（ステップ７０６）、パディング済みの符号化されたメッセージとなる。
【００３８】
パディング方法は、図８に示される。一般的に、パディング用バイトは、符号化されていない形式で追加され、既知のパディング用バイトが、メッセージ上のＴＩＭ変換を攻撃するために用いられるかもしれないリスクを減らす。メッセージバイトをメッセージワードに分割するのを容易にするために、符号化された形式から符号化されていない形式への移行は、３２ビットのワード境界で行われるのが好ましい。符号化されたメッセージＭの長さが、４を法として０と合同である場合、パディングされたメッセージの長さが、６４を法として５６と合同になるまで、符号化されていない０ｘ８０バイト、さらに必要であれば、符号化されていない０ｘ００バイトが、メッセージの最後に追加される（ステップ８０２，８０４）。符号化されたメッセージＭの長さが、４を法として０と合同でない場合、その長さが４を法として０になるまで、ＴＩＭ符号化された０ｘ８０バイト、および、０〜２個のＴＩＭ符号化された０ｘ００バイトが、符号化されたメッセージの最後に追加される（ステップ８０６，８０８）。その後、パディングされたメッセージの長さが、６４を法として５６と合同になるまで、符号化されていない０ｘ００バイトが、メッセージの最後に追加される（ステップ８０４）。これらＴＩＭ符号化された０ｘ８０および０ｘ００の値は、ランタイムで決められるのではなく、先に計算されうる。ＴＩＭ変換は、値０ｘ８０と０ｘ００とを露出することで、他の値の露出が必要とされることがないように、選ばれるのが好ましい。そして、（ビットでの）メッセージＭの元の長さが、６４ビットの整数として、パディングされたメッセージに追加される（ステップ８１０）。なお、この長さのフィールドは、常に８バイトであり、５１２ビットのチャンクで終わるので、常にワード整合される。なお、これは、簡潔化された実行であり、全てのメッセージがビット単位で、８を法として０と合同である長さである場合の応用に適している （つまり、メッセージは、ビット指向ではなく、バイト指向である）。（ＴＩＭ変換での露出よりもセキュリティに影響を及ぼす可能性がある）初期「１」のパディング用ビットを含むバイトの残りの値でありうるものを対象とする追加の符号化された値を用いて、この方式をビット指向メッセージに拡大して適用することができる。しかしながら、ハッシングアルゴリズムの様々な応用において、ビット単位のハッシングは必要とされない。
【００３９】
図７に戻ると、パディング処理により、バイト単位で６４を法として０と合同である長さのパディングされたメッセージが生じる。よって、ＴＩＭ符号化されたメッセージバイトは、６４バイトのチャンクに分割される（ステップ７０８）。各チャンク内のバイトは、さらに３２ビットのビッグエディアン形式のワードに分割され、１６個のワードの配列ｍを形成する。中間値ａ、ｂ、・・・ｈを現時点の値Ｈ０、・・・Ｈ７に初期化した（ステップ７１０）後、図９に示すメッセージ拡張関数を用いて、配列Wが構築される（ステップ７１２）。
【００４０】
図９に示すように、配列Ｗの最初の１６の要素（Ｗｉは０≦ｉ≦１５）が、まず決定され、格納される。処理中は、メッセージバイトが、いくつかのポイントで、符号化されていないパディング用バイトに移行する。符号化されていないパディング用バイトが、符号化されていない形式の配列Ｗに格納される。上記の図８に概要が示されるように、パディング処理は、符号化されたメッセージバイトから符号化されていないメッセージバイトへの移行は、ワード境界のみで起こりうることを確実にする。従って、メッセージワードｍｉのそれぞれは、４個の符号化されたバイトか、もしくは、４個の符号化されていないバイトからなり、符号化されたバイトと符号化されていないバイトとの組み合わせからなることはありえない。ｍｉが符号化されていない場合は（つまり、ｍｉがパディング用バイトのみからなる場合）、Ｗｉ＝ｍｉが成り立つ（ステップ９０２）。
【００４１】
ｍｉが符号化されている場合は、Ｗｉ＝Ｔｗ（Ｔ−１ＩＭ（ｍｉ））が成り立つ。好ましい実施形態によると、再符号化は、復号の後に符号化するよりも、組み合わせた操作として行われる方が好ましく、このやり方だと、符号化方式が露出することがない。（ステップ９０２）。Ｔｗは、バイトからワードへの関数である。
【００４２】
そして、配列Ｗのこれら初期の１６個のワードは、６４個の３２ビットの符号化されたワードの配列Ｗに拡張される。配列Ｗのこれらの残りの要素は、ルックアップテーブルＬＳ０、ＬＳ１、ＳＬＳ０、ＳＬＳ１を使って計算される。当業者は当然理解するであろうが、ＳＨＡ−２５６アルゴリズムは６つの論理関数を使用し、各関数は、ｘ、ｙ、ｚで表される、３２ビットのワードに作用する。関数は以下の通りである。
【数１】
0005930235.tif 000002
ここで、ＲＯＴＲｎ（ｘ）は「右回りのローテート」演算、もしくは、「右循環シフト」演算である。ｘがｗビットの符号なしのワードで、ｎが０≦ｎ＜ｗの整数である場合、その時は、ＲＯＴＲｎ（ｘ）は、以下のようになる。
【数２】
0005930235.tif 000003
同様に、ＳＨＲｎ（ｘ）は、以下のような「右シフト」演算である。
【数３】
0005930235.tif 000004
これらの関数それぞれの結果が、新しい３２ビットのワードとなる。
【００４３】
本開示のある実施形態によると、ルックアップテーブルは、ＴＩＭ変換されたドメイン内の関数s０およびs１を実行するのに使用される。関数s０およびs１は、３２ビットのワードに作用する。しかしながら、３２ビットのワードを３２ビットのワードにマッピングするルックアップテーブルはとても大きく、何らかの方法で、より小さいルックアップテーブルを使用することが望ましい。これは、関数sが共に、一次関数であることに注目すれば達成できうる。ワード入力ｘをバイトｂ０、ｂ１、ｂ２、ｂ３の配列で表した場合、関数sの線形から、以下の式を導くことができる。
【数４】
0005930235.tif 000005
式では、他のバイトをゼロに設定し、入力の個々のバイトに関数sを適用ことができることを示す。４つの関数を適用した結果、バイトｂｉごとに論理和を取ることが可能であり、ワードｘに関数sを適用した場合と同一の結果が得られる。
【００４４】
s演算を実行するにあたって、Ｔｗ符号化されたワードは、まず、ワードからバイトへの再符号化関数を用いて、任意のバイト単位の変換Ｔsに再符号化される。ルックアップテーブルＬＳ０、ＬＳ１（それぞれ４つが、関数s０およびs１に対応する）は、それぞれ、Ｔs符号化されたバイトをＴｗ符号化されたワードにマッピングする。Ｔｗ符号化されたワードは、ワード内の４か所のそれぞれで、関数sが特定のバイトに適応されることを表している。これらの４か所で部分的に結果が導かれているワードは、符号化された論理和演算を用いて、組み合わされ、完全なワードＳ０、Ｓ１が形成される（ステップ９０６、９０８）。従って、ルックアップテーブルＬＳ０、ＬＳ１はそれぞれ、入力の可能性があるバイトに対する２５６のエントリを持つ４つのテーブルを含み、出力ワードの各エントリは、４バイトから成り立ち、合計サイズは、４０９６バイトになる。
【００４５】
ルックアップテーブルＳＬＳ０、ＳＬＳ１（やはり、それぞれ、関数s０およびs１に対応する）は、符号化されていないバイトをＴｗ符号化され、シフトおよびローテートされたワードにマッピングする。表ＳＬＳｎは、メッセージ内の符号化されていないパディング用バイトをs演算するのに用いられる（ステップ９１０、９１２）。これら表は、Ｗｉ−２のワードもしくはＷｉ−１５のワードが符号化されていないパディング用ワードである時に使用される。これら表は、入力が符号化されないことを除けば、表ＬＳと同じような構造である。表ＳＬＳ、ＬＳは全く別の出力符号化方式を使用する。この表ＳＬＳ、ＬＳの全く別の出力符号化方式により、入力のＴｗ符号化方式を求めるのがさらに難しくなる。例えば、表ＳＬＳ、ＬＳが同じ符号化方式を作成し、ＳＬＳ（ｘ）＝ＬＳ（ｙ）である、符号化されていないワードｘおよび符号化されたワードｙが与えられたとすると、Ｔｗ（ｘ）＝ｙとなり、この情報は、変換Ｔｗの攻撃に使われかねない。
【００４６】
最終的なＷｉの値は、符号化された追加関数（＋ｔ）により計算される（ステップ９１４）。値Ｓ０、Ｓ１は常にＴｗ符号化されたものである一方で、値Ｗｉ−１６およびＷｉ−７は、符号化された、もしくは、符号化されていないパディング用ワードでありうる。別の追加関数が、別の符号化処理に使用されうる。
【００４７】
図１０に示される圧縮関数は、ひとつのチャンクのデータのハッシュを完結するために実行される。Ｍ内の各ｍｉにおいて、現時点のハッシュ値Ｈが一時的な処理値（ａ〜ｈ）にコピーされ、処理値（ａ〜ｈ）は図１０に示すようにマッピングされる。全ての演算（追加、論理和、否定）は、全てが符号化された値、もしくは、一方が符号化され、他方は符号化されていない値に作用し、符号化された値を作成する。値Ｗｉは、パッディング用ワードであるとき、符号化されていない値でありうる（これは、０≦ｉ＜１６の時のみ、真であるとされる）。表ＵＳｎは、上記の表ＬＳｎと同様である。これらの表は、Σ演算の実行表であり、σ操作と同様の方法により、ワードを構成するバイト上で、Σ関数の４つのｓｕｂ  ａｐｐｌｉｃａｔｉｏｎに分類される。アルゴリズム内の値ａとｅは常に符号化された値であるので、メッセージの拡張ステップにおいて、表ＳＬＳと対応する表ＳＵＳは存在しない。６４のＷｉの値がそれぞれ処理されると、値ＨをＴＨ変換する、符号化された追加関数を用いて、値ａ〜ｈは、それぞれ、存在するＨ０〜Ｈ７の値に追加される（ステップ１００２）。
【００４８】
先頭のメッセージチャンクの最初の４ラウンドは、特に、値Ｈｎおよび値ａ・・・ｈに作用する符号化方式をより良く保護するために処理することができる。各ワードＨｎにおいて、内部の変換ＴＨは外部のダイジェスト変換Ｔｄに変換することができ、結合して、出力ダイジェストを形成する。メッセージの初期の５１２バイトの最初の４ラウンドにおいて、状態変数ａ〜ｈのいくつか、もしくは、全てが、アルゴリズムにより固定された値となる。これにより、メッセージの最初のチャンクの最初の４ラウンドにたいして、上記「特別なケース」を利用しやすくなる。
１．第一のラウンドにおいて、値Ｔ１のみが未知の値となる。Ｔ１は、先に計算された定数値とＷ０を追加することによって計算される。よって、ラウンド１の終わりでは、ｅとａとを除いた全ての変数が既知の固定値となり、符号化されるべきではない。
２．ラウンド２において、Ｔ１、Ｔ２は共に、未知の値からなり、ｂ、ｃ、ｄ、ｆ、ｇ、ｈは全て、既知の固定値である。
３．ラウンド３において、ｃ、ｄ、ｇ、ｈは既知の固定値である。
４．ラウンド４において、ｄ、ｈのみが既知の固定値である。
５．最初のチャンクの残りのラウンドすべてにおいて、そして、後続のチャンクすべてにおいて、８つの中間状態値はすべてメッセージビットと混ぜ合わされ、「未知である」とされる。
【００４９】
これら「特別なケース」を利用することによって、８つの状態変数のすべてが「符号化されておらず」、元の符号化されていない値Ｈで初期化されていると、まず考えることができる。最初のメッセージチャンクの最初の４ラウンドそれぞれで、２つの状態変数が「符号化されていない」状態から「符号化された」状態に移行することが、データとして、Ｔ１の符号化された追加関数を用いて、値ａとｅに混ぜ合わされる。後続のラウンドのそれぞれで、これら変数の値は、操作で使用される時は、符号化されていると見なされる。これは、攻撃者が、最初の４ラウンドの状態変数の内容を予測し、それを使って、状態変数の変換を攻撃することを、確実に不可能とするために役立つ。最高の保護にするためには、符号化されたメッセージＭは、少なくとも４つのワードのデータを含み、各ステップにおいて、符号化されたデータが確実にＴ１に混ぜ合わされるようにするべきである。短いメッセージについてのこのような弱点は、多くの場合、顕著ではない。なぜならば、極端に短いメッセージは、容易に、総当たり攻撃（ブルートフォースアタック）の対象となりえるからである。
【００５０】
本実行の第一の目的は、攻撃者が、アルゴリズムの入力、出力、その中間の内部状態を観察し、符号化されていないメッセージもしくはダイジェストを断定するのを防ぐことである。入力メッセージとダイジェストが共に符号化されている場合において、本実行は、下記の特徴が見られる。
１．配列Ｗ内のワードはすべて、符号化されたメッセージワードであるか、１つ以上の符号化されたメッセージバイトと、それに付随する１つ以上の符号化されたパディング用バイトからなるワードであるか、もしくは、符号化されていないパディング用ワードである。Ｗ内のワードはいずれも、符号化されていないメッセージバイトを含まない。
２．パディング用バイトはいずれも、ＴＩＭ符号化されたものである値０ｘ８０と０ｘ００を除いて、符号化されない。この変換は、外部のメッセージ変換ＴＭとは明確に異なり、二つの既知値を露出することで、容易に攻撃者が他の値を断定できることがないように選択されるべきである。例えば、任意のバイトを任意のバイトにマッピングする関数（例えば、２５６バイトのルックアップテーブル）は、この特性を有する。この表では、値０ｘ８０と０ｘ００に対するマッピングのみが露出される必要があり、マッピングを完全に露出する必要はない。
３．符号化されたパディング用データから派生したＴｗ符号化されたＷワードはいずれも、少なくとも１バイトの符号化されたメッセージデータを含む。
４．入力としてＷワードを取る全ての演算は、符号化されたデータを出力する。
５．状態変数ａ〜ｈを計算する演算はすべて、符号化されていない入力を含み、その場合、その入力は符号化されないままである。もしくは、少なくとも一つの符号化された入力を含み、その場合は、その出力は符号化される。
６．最初のメッセージチャンクのラウンド４の後、状態変数ａ・・・ｈは全て符号化される。
７．最初のメッセージチャンクを処理した後、値Ｈ０〜Ｈ７は全て符号化される。
８．既知値（Ｈ０〜Ｈ７の初期値、値Ｋ）が、未知のデータとするために用いられるのと同じ符号化方式で符号化されることはない。
９．符号化されていないパディング用データを含むσ演算の出力（表ＳＬＳ）と符号化されたデータに対するσ演算の出力（表ＬＳ）は、全く異なる符号化方式を用いる。これらの値を用いた追加演算は、全く異なるものである。
【００５１】
上記の理由から、メッセージ拡張の間も、ハッシュ処理の間も、入力メッセージバイトが明かされることは絶対にない。それら入力メッセージバイトは、アルゴリズムの定数やパディング用の値などの既知の固定データを符号化するために用いられることのない符号化方式で符号化される。これにより、メッセージの値が符号化されていない形式で露出することは絶対にないこと、そして、また、プレーンテキスト形式の攻撃を頓挫させること、が確実になる。なぜなら、パディング用の値および固定値は、すべて、符号化されていないか、もしくは、メッセージや状態データとは異なる方法で符号化されるからである。本開示の実施形態のいくつかでは、追加的な保護特性を使用することができる。例えば、さらにアルゴリズムを難読化するために、制御フロー変換をアルゴリズムに用いることができる。
【００５２】
パディング用バイトを符号化されていない値として処理する手法は、メッセージＭの任意の部分が符号化されていない値を渡すことができるように、拡大して適用することができる。セキュリティの観点から、パディング用の値を符号化していない状態に保つことが望ましい。なぜなら、それによって、メッセージ変換に対する既知のプレーンテキスト形式の攻撃のいくつかが抑止されるからである。構造化文書やフォーマット済みデータなどの部分的に既知値（もしくは容易に推測できる値）を含むメッセージへの応用としては、メッセージの慎重に扱うべき部分のみ符号化するようにし、メッセージデータの残りの部分は符号化されないようにするのが望ましい。この一例として、既知もしくは容易に推測されるフォーマットのデータ構成内部に含まれる暗号キー（例えば、ＡＳＮ１で符号化されたＲＳＡキー）のハッシュを計算することである。ストリーム内のどこで移行が行われるかを示すように、適切なメタデータが維持されることにより、いずれのワード境界でも符号化された値と符号化されていない値の間の移行ができるように、上記の方式は、容易に拡大して適用される。パディングのメカニズムは、Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅｓ（ＭＡＣ）などの鍵がかけられた暗号ハッシュ関数においても、有効であり得る。
【００５３】
上記では、実施形態を完全に理解してもらうために、説明を目的として、具体的な数字が示された。しかしながら、当業者には当然のことながら、これら特定の詳細内容が必要であるわけではない。他の例では、理解をさまたげないように、ブロック図形式で既知の電気的構造や回路が示されている。例えば、特定の詳細内容は、本明細書に記載の実施形態が、ソフトウェアルーチンとして実施されるのか、ハードウェア回路としてなのか、ファームウェアとしてなのか、それとも、それらの組み合わせとして実施されるのかを示すものではない。
【００５４】
本開示の実施形態は、（単数または複数の）機械可読媒体（コンピュータ可読媒体、プロセッサ可読媒体、もしくは、コンピュータ可読プログラムコードを内部に含むコンピュータで使用可能な媒体とも言う）に格納されたコンピュータプログラム製品として表すことが可能である。機械可読媒体は、ディスケット、コンパクトディスクリードオンリーメモリ（ＣＤ−ＲＯＭ）、（揮発性もしくは不揮発性の）メモリ装置、あるいは、同様の記憶媒体を含む、磁気記憶媒体、光学記憶媒体、もしくは、電気的記憶媒体などの適切な具体的な非一時的媒体であってよい。機械可読媒体は、様々な指示、符号配列、構成情報、その他のデータを含んでよく、それらが実行されることで、プロセッサに、本開示の実施形態による方法のステップを実行させる。本件記載の実行を行うために必要な他の指示や操作も機械可読媒体に記憶されてもよいことは、当業者であれば、当然理解するであろう。記載の処理を行うために、機械可読媒体に記憶される指示は、プロセッサまたは、他の適切な処理装置で実行されてよく、回路と連動してもよい。
【００５５】
本発明の上記実施形態は、単なる例示のみを目的とする。当業者により、発明の範囲を逸脱することなく、特定の実施形態に対する変更、改良、変形が可能である。発明の範囲は、添付の特許請求の範囲によってのみ定義される。
【図１】
0005930235.tif 000006
【図２】
0005930235.tif 000007
【図３】
0005930235.tif 000008
【図４】
0005930235.tif 000009
【図５】
0005930235.tif 000010
【図６】
0005930235.tif 000011
【図７】
0005930235.tif 000012
【図８】
0005930235.tif 000013
【図９】
0005930235.tif 000014
【図１０】
0005930235.tif 000015