特許第5930235号(P5930235)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ イルデト ビー ヴイの特許一覧

特許5930235暗号ハッシュ関数の実行を保護する方法とシステム
<>
  • 特許5930235-暗号ハッシュ関数の実行を保護する方法とシステム 図000006
  • 特許5930235-暗号ハッシュ関数の実行を保護する方法とシステム 図000007
  • 特許5930235-暗号ハッシュ関数の実行を保護する方法とシステム 図000008
  • 特許5930235-暗号ハッシュ関数の実行を保護する方法とシステム 図000009
  • 特許5930235-暗号ハッシュ関数の実行を保護する方法とシステム 図000010
  • 特許5930235-暗号ハッシュ関数の実行を保護する方法とシステム 図000011
  • 特許5930235-暗号ハッシュ関数の実行を保護する方法とシステム 図000012
  • 特許5930235-暗号ハッシュ関数の実行を保護する方法とシステム 図000013
  • 特許5930235-暗号ハッシュ関数の実行を保護する方法とシステム 図000014
  • 特許5930235-暗号ハッシュ関数の実行を保護する方法とシステム 図000015
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5930235
(24)【登録日】2016年5月13日
(45)【発行日】2016年6月8日
(54)【発明の名称】暗号ハッシュ関数の実行を保護する方法とシステム
(51)【国際特許分類】
   G09C 1/00 20060101AFI20160526BHJP
【FI】
   G09C1/00 650Z
【請求項の数】25
【全頁数】20
(21)【出願番号】特願2014-501369(P2014-501369)
(86)(22)【出願日】2011年3月31日
(65)【公表番号】特表2014-509755(P2014-509755A)
(43)【公表日】2014年4月21日
(86)【国際出願番号】CA2011050172
(87)【国際公開番号】WO2012129638
(87)【国際公開日】20121004
【審査請求日】2014年3月7日
(73)【特許権者】
【識別番号】513239771
【氏名又は名称】イルデト ビー ヴイ
【氏名又は名称原語表記】IRDETO B.V.
(74)【代理人】
【識別番号】100120662
【弁理士】
【氏名又は名称】川上 桂子
(74)【代理人】
【識別番号】100112715
【弁理士】
【氏名又は名称】松山 隆夫
(74)【代理人】
【識別番号】100104444
【弁理士】
【氏名又は名称】上羽 秀敏
(74)【代理人】
【識別番号】100125704
【弁理士】
【氏名又は名称】坂根 剛
(72)【発明者】
【氏名】エメット、 ジョナサン
(72)【発明者】
【氏名】アイゼン、 フィリップ アラン
(72)【発明者】
【氏名】ミューア、 ジェームス
(72)【発明者】
【氏名】マードック、 ダニエル
【審査官】 青木 重徳
(56)【参考文献】
【文献】 国際公開第2010/102960(WO,A1)
【文献】 特開平10−171350(JP,A)
【文献】 国際公開第01/015163(WO,A1)
【文献】 特表2010−510539(JP,A)
【文献】 国際公開第2010/146139(WO,A1)
【文献】 米国特許出願公開第2009/0279691(US,A1)
【文献】 S. Chow, P. Eisen, H. Johnson, P. C. Oorschot,“White-Box Cryptography and an AES Implementation”,SELECTED AREAS IN CRYPTOGRAPHY: 9TH ANNUAL INTERNATIONAL WORKSHOP,2002年 8月15日,VOL. 2595,PAGES 1-18
(58)【調査した分野】(Int.Cl.,DB名)
G09C 1/00
(57)【特許請求の範囲】
【請求項1】
入力、出力、および中間値が観察できる演算環境において、暗号ハッシュ関数の実行を保護する、コンピュータで実行される方法であって、
前記コンピュータのプロセッサが、符号化された入力メッセージを提供するために、入力メッセージを符号化し、少なくとも一時的にメモリへ記憶する工程と、
前記コンピュータのプロセッサが、パディングされたメッセージを提供するために、1つ以上の符号化されていないパディングバイトを含む1つ以上のパディング用バイトを用いて、前記符号化された入力メッセージを、暗号ハッシュ関数で定められたメッセージ長になるまでパディングし、少なくとも一時的にメモリへ記憶する工程と、
前記コンピュータのプロセッサが、出力ダイジェストを生成するために、変換された暗号ハッシュ関数を、前記メモリ上で前記パディングされたメッセージへ適用する工程とを備え、
前記変換された暗号ハッシュ関数は、前記変換された暗号ハッシュ関数を符号化されたメッセージへ適用することにより生成されたダイジェストが、前記暗号ハッシュ関数を符号化されていないメッセージに適用することで生成されるであろうダイジェストと等価となるように変更されたバージョンの前記暗号ハッシュ関数を含む、方法。
【請求項2】
前記コンピュータのプロセッサが、前記出力ダイジェストを符号化することで、符号化された出力ダイジェストを提供する工程をさらに備える、請求項1に記載の方法。
【請求項3】
前記入力メッセージは、符号化された形式で受信され、前記入力メッセージを符号化する工程は、内部符号化により前記入力メッセージを再符号化する工程を含む、請求項1または請求項2に記載の方法。
【請求項4】
前記暗号ハッシュ関数は、SHA−1、SHA−224、SHA−256、SHA−384、またはSHA−512である、請求項1から請求項3のいずれか1項に記載の方法。
【請求項5】
パディングされたメッセージを生成するために前記符号化された入力メッセージを1つ以上のパディングバイトでパディングすることは
前記符号化された入力メッセージを前記1つ以上の符号化されていないパディングバイトでパディングする前に、当該符号化された入力メッセージを、1つ以上の符号化されたパディングバイトでパディングすることを含み、
前記符号化されたパディングバイトの数は、前記メッセージ長のバイト数を4の倍数とするために必要な数である、請求項1から請求項4のいずれか1項に記載の方法。
【請求項6】
符号化されたワードの配列を少なくとも1つ、および、符号化されていないパディング用ワードを提供するために、前記コンピュータのプロセッサが、前記パディングされたメッセージを分割する工程をさらに備える、請求項5に記載の方法。
【請求項7】
前記変換された暗号ハッシュ関数を適用する工程は、
前記入力メッセージのいずれかの部分を含む中間値が常に符号化されたものであるように、前記少なくとも1つの配列のそれぞれを、前記変換された安全なハッシュ関数によって処理する工程を備える、請求項6に記載の方法。
【請求項8】
前記少なくとも1つの配列のそれぞれを処理する工程は、
ハッシュ関数の反復で用いられる、初期状態変数と定数とを初期化する工程と、
更新された状態変数を提供するために、前記少なくとも1つの配列のそれぞれでハッシュ関数の反復を行う工程と、
符号化された状態変数を提供するために、前記更新された状態変数に出力の符号化を適用する工程と、
前記出力ダイジェストを提供するために、前記符号化された状態変数を連結する工程とを備える、請求項7に記載の方法。
【請求項9】
前記少なくとも1つの配列のそれぞれでハッシュ関数の反復を行う工程は、
記ハッシュ関数で使用される成分関数のマッピングを決定する工程を備える、請求項8に記載の方法。
【請求項10】
前記マッピングはルックアップテーブルに格納される、請求項9に記載の方法。
【請求項11】
前記マッピングは、前記少なくとも1つの配列内のワードの数を拡張するために用いられる、請求項9または請求項10に記載の方法。
【請求項12】
前記マッピングは、前記状態変数の中間値を提供するために用いられる、請求項9から請求項11のいずれか1項に記載の方法。
【請求項13】
命令を含む非一時性コンピュータ可読媒体であって、
前記命令は、コンピュータのプロセッサによって実行されると、入力、出力、および中間値が観察できる演算環境において、暗号ハッシュ関数の実行を保護するために、前記プロセッサに、
符号化された入力メッセージを提供するために、入力メッセージを符号化し、少なくとも一時的にメモリへ記憶する工程と、
パディングされたメッセージを提供するために、1つ以上の符号化されていないパディングバイトを含む1つ以上のパディング用バイトを用いて、前記符号化された入力メッセージを、暗号ハッシュ関数で定められたメッセージ長になるまでパディングし、少なくとも一時的にメモリへ記憶する工程と、
出力ダイジェストを生成するために、変換された暗号ハッシュ関数を、前記メモリ上で前記パディングされたメッセージへ適用する工程とを実行させ
前記変換された暗号ハッシュ関数は、前記変換された暗号ハッシュ関数を符号化されたメッセージへ適用することにより生成されたダイジェストが、前記暗号ハッシュ関数を符号化されていないメッセージに適用することで生成されるであろうダイジェストと等価となるように変更されたバージョンの前記暗号ハッシュ関数を含む、非一時性コンピュータ可読媒体。
【請求項14】
符号化された出力ダイジェストを提供するために、前記コンピュータのプロセッサが、前記出力ダイジェストを符号化する工程を前記プロセッサに実行させるための命令をさらに含む、請求項13に記載のコンピュータ可読媒体。
【請求項15】
前記入力メッセージは、符号化された形式で受信され、前記入力メッセージを符号化する工程は、内部符号化により前記入力メッセージを再符号化する工程を含む、請求項13または請求項14に記載のコンピュータ可読媒体。
【請求項16】
前記暗号ハッシュ関数は、SHA−1、SHA−224、SHA−256、SHA−384、またはSHA−512である、請求項13から請求項15のいずれか1項に記載のコンピュータ可読媒体。
【請求項17】
パディングされたメッセージを生成するために前記符号化された入力メッセージを1つ以上のパディングバイトでパディングすることは
前記符号化された入力メッセージを前記1つ以上の符号化されていないパディングバイトでパディングする前に、当該符号化された入力メッセージを、1つ以上の符号化されたパディングバイトでパディングすることを含み、
前記符号化されたパディングバイトの数は、前記メッセージ長のバイト数を4の倍数とするために必要な数である、請求項13から請求項16のいずれか1項に記載のコンピュータ可読媒体。
【請求項18】
符号化されたワードの配列を少なくとも1つ、および、符号化されていないパディング用ワードを提供するために、前記パディングされたメッセージを分割する工程を前記プロセッサに実行させる命令をさらに含む、請求項17に記載のコンピュータ可読媒体。
【請求項19】
前記変換された暗号ハッシュ関数を適用する工程は、
前記入力メッセージのいずれかの部分を含む中間値が常に符号化されたものであるように、前記少なくとも1つの配列のそれぞれを前記変換された保護ハッシュ関数によって処理する工程を備える、請求項18に記載のコンピュータ可読媒体。
【請求項20】
前記少なくとも1つの配列のそれぞれを処理する工程は、
ハッシュ関数の反復で用いられる、初期状態変数と定数とを初期化する工程と、
更新された状態変数を提供するために、前記少なくとも1つの配列のそれぞれでハッシュ関数の反復を行う工程と、
符号化された状態変数を提供するために、前記更新された状態変数に出力符号化を適用する工程と、
前記出力ダイジェストを提供するために、前記符号化された状態変数を連結する工程とを備える、請求項19に記載のコンピュータ可読媒体。
【請求項21】
前記少なくとも1つの配列のそれぞれでハッシュ関数の反復を行う工程は、
記ハッシュ関数で使用される前記成分関数のマッピングを決定する工程を備える、請求項20に記載のコンピュータ可読媒体。
【請求項22】
前記マッピングはルックアップテーブルに格納される、請求項21に記載のコンピュータ可読媒体。
【請求項23】
前記マッピングは、前記少なくとも1つの配列内のワードの数を拡張するために用いられる、請求項21または請求項22に記載のコンピュータ可読媒体。
【請求項24】
前記マッピングは、前記状態変数の中間値を提供するために用いられる、請求項21から請求項23のいずれか1項に記載のコンピュータ可読媒体。
【請求項25】
暗号ハッシュ関数を用いて、デジタル著作権管理(DRM)コンテンツのための暗号化キーを派生させる、コンピュータで実行可能な方法であって、
前記コンピュータのプロセッサが、符号化された入力メッセージを提供するために、入力メッセージを符号化し、少なくとも一時的にメモリへ記憶する工程と、
前記コンピュータのプロセッサが、パディングされたメッセージを提供するために、1つ以上の符号化されていないパディングバイトを含む1つ以上のパディング用バイトを用いて、前記符号化された入力メッセージを、暗号ハッシュ関数で定められたメッセージ長になるまでパディングし、少なくとも一時的にメモリへ記憶する工程と、
前記コンピュータのプロセッサが、前記暗号化キー生成するために、変換された暗号ハッシュ関数を、前記メモリ上で前記パディングされたメッセージへ適用する工程と、
前記コンピュータのプロセッサが、前記暗号化キーを符号化し、少なくとも一時的にメモリへ記憶する工程とを備え、
前記変換された暗号ハッシュ関数は、前記変換された暗号ハッシュ関数を符号化されたメッセージへ適用することにより生成された暗号化キーが、前記暗号ハッシュ関数を符号化されていないメッセージに適用することで生成されるであろう暗号化キーと等価となるように変更されたバージョンの前記暗号ハッシュ関数を含む、方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般的にデジタル暗号に関する。より具体的には、ホワイトボックス攻撃環境での暗号ハッシュ関数の動作の保護に関する。
【背景技術】
【0002】
暗号ハッシュ関数は、データのデジタル「フィンガープリント」を作成する際に用いられ、多くの暗号システムの構成要素となっている。このようなハッシュ関数は入力として任意の長さのビット列を取り、出力として固定長ビット列にマッピングする。入力は、通常、メッセージと呼ばれ、その出力は、通常、ダイジェストと呼ばれる。
【0003】
ハッシュ関数と他の暗号プリミティブ(例えば、ブロック暗号)との重要な違いは、ハッシュ関数が鍵を持たないことである(つまり、ハッシュ関数は鍵なしプリミティブである)。これは、メッセージを与えられた場合、誰でもそのダイジェストを計算できるということを意味する。公開されている規格で規定されている暗号ハッシュ関数は数多くある。例えば、2008年10月のFIPS PUB 180−3(米国商務省)のSecure Hash Standard(SHS)は、5つの暗号ハッシュ関数、SHA−1、SHA−224、SHA−256、SHA−384、SHA−512を規定している。その文書の全内容は、引用することにより本明細書に含まれる。ハッシュ関数の入力が与えられた場合、その出力を計算するのは至って簡単である。しかしながら、安全な暗号ハッシュ関数は、原像計算困難性、つまり、「一方向性」として知られる数学的特性を満たさなければならない。これは、出力を与えられた場合、その出力にハッシュされた入力を計算するのはとても困難であることを意味する。よって、ハッシュ関数は重要な非対称性を有する。つまり、ハッシュ関数は、値を求めるのは簡単であるが、反転するのは難しい。
【0004】
ハッシュ関数の応用としては、デジタル署名方式、メッセージ認証コード、疑似乱数の生成、コード署名方式、パスワードによる認証、キー派生関数などがよく知られている。ハッシュ関数は、デジタル著作権管理(DRM)方式でのコンテンツキーの復元にも用いられる。これは、携帯電話などの携帯電子機器で使用される、オープン・モバイル・アライアンス(OMA)によるDRMの場合である。コンテンツのプロバイダは、OMAのDRMシステムにおいて、コンテンツ暗号化キーと呼ばれる対称キーを用いて暗号化することによって、自身のコンテンツ(例えば、動画、楽曲、ゲームなど)を保護し、エンドユーザに配信する。ユーザが、保護されたコンテンツを自分の受信機で再生することをリクエストした場合、受信機のDRMエージェントは、まず、そのコンテンツに対して発行された権利オブジェクト内に規定されている許可を確認する。そのリクエストが認証されると見なすと、DRMエージェントは、権利オブジェクト内のデータから、必要とされるコンテンツ暗号化キーを復元する演算を行う。そして、コンテンツが解読され、再生される。コンテンツ暗号化キーを復元するための、DRMエージェントによる暗号操作については、2008年11月6日付けのOMAのDRM仕様書2.1版の7.1.2節に記載されており、その全内容が、引用することにより本明細書に含まれる。この演算は、SHA−1、SHA−256などのハッシュ関数に基づくキー派生関数の使用を含む。
【0005】
悪意のあるユーザは、DRMエージェントを実行するソフトウェアを分析して、コンテンツキーを抽出しようと試みるであろう。特に、(演算装置が物理的に保護されている場合を除いて)攻撃者が実行環境やソフトウェアの実行を完全にコントロールするホワイトボックス環境において、攻撃者は、コード、データ構成、および、実行環境へのアクセス権を所有する。このような環境で操作を行う攻撃者は、メモリーダンプを行うことにより、もしくは、デバッガでDRMエージェントを実行することにより、ハッシュ関数の出力を観察することができる。DRMエージェントが復元したコンテンツ暗号化キーが露出された場合、悪意のある攻撃者は、それらコンテンツ暗号化キーにアクセスすることができるであろう。そして、それらを用いてオフラインのコンテンツを解読し、権利オブジェクトによる制限からコンテンツを解除するであろう(つまり、攻撃者はDRMを回避できるであろう)。よって、DRMエージェントによって実行される暗号操作がユーザから隠蔽されていることが、重要である。
【0006】
従って、ハッシュ操作そのものがホワイトボックス攻撃に対抗できるように、メッセージ、ダイジェスト、もしくは、それらの間に介在するもののいずれもが明らかにされることなく、メッセージをハッシングすることが望ましい。
【発明の概要】
【0007】
本発明の一態様によると、入力、出力、および、中間値が観察できる演算環境で、SHA−1、SHA−224、SHA−256、SHA−384、および、SHA−512などの暗号ハッシュ関数の実行を保護するための、コンピュータで実行可能な方法が提供される。本方法は、入力メッセージを符号化し、変換されたドメインに符号化した入力メッセージを提供することを含む。そして、変換された暗号ハッシュ関数が適用され、出力ダイジェストが提供される。その変換された暗号ハッシュ関数は、変換されたドメイン内の暗号ハッシュ関数を実行する。そこで、出力ダイジェストが符号化され、符号化された出力ダイジェストが提供される。プロセッサによって実行されることによりプロセッサに本方法を実行させる命令を含む、非一時的なコンピュータ可読媒体も提供される。
【0008】
本発明の実施形態によると、入力メッセージは符号化された形式で受信することができ、内部符号化により、再符号化することができる。符号化された入力メッセージは、符号化されていないパディング用バイトを用いて、パディングすることができ、パディングされたメッセージが提供される。そして、パディングされたメッセージは分割でき、符号化されたワードの配列を少なくとも一つと、符号化されていないパディング用ワードとが提供される。各配列は、変換された安全なハッシュ関数により処理できる。よって、入力メッセージのいずれかの部分を含む、中間値は、常に符号化されている。初期状態変数および定数は、初期化することができ、その後、ハッシュ関数の反復で使用され、更新された状態変数を提供する。出力符号化を更新された状態変数に適用することができ、符号化された状態変数を提供する。そして、符号化された状態変数は連結することができ、出力ダイジェストを提供する。変換されたドメイン内のハッシュ関数で使用される成分関数のマッピングを決定することができ、ハッシュ関数の反復毎に使用される。これらマッピングはルックアップテーブルに格納され、各配列内のワードの数を拡張するのに使用することができる。そして、状態関数の中間値を提供する。
【0009】
本発明の更なる様態によると、暗号ハッシュ関数を用いて、デジタル著作権管理(DRM)コンテンツの暗号化キーを派生させる、コンピュータで実行される方法が提供される。本方法は、入力メッセージを符号化し、変換されたドメインに符号化された入力メッセージを提供することを含む。変換された暗号ハッシュ関数は、変換されたドメインの暗号ハッシュ関数を実行するものであって、暗号化キーを提供するために適用される。そして、暗号化キーは符号化される。
【図面の簡単な説明】
【0010】
以下、添付の図面を参照し、本発明の実施形態を説明する。実施形態は、単なる例である。
【0011】
図1】SHA−256アルゴリズムの従来の実行の高レベルでの概観を示すフローチャートである。
図2】SHA−256アルゴリズムのためのメッセージのパディング処理を示すフローチャートである。
図3】SHA−256アルゴリズムのためのメッセージブロックの拡張処理を示すフローチャートである。
図4】SHA−256アルゴリズムのための、圧縮アルゴリズムを用いる一時的な値の処理を示すフローチャートである。
図5】変換されたドメインおよび変換されていないドメインでの暗号化関数および暗号解読関数の一般的な実行を示す。
図6】実施形態による暗号ハッシュ関数演算を保護するためのシステムを示すブロック図である。
図7】実施形態によるSHA−256アルゴリズムの保護された実行を示すフローチャートである。
図8】実施形態によるSHA−256アルゴリズムの符号化された実行のためのパディング処理を示すフローチャートである。
図9】実施形態によるW配列メッセージの拡張の保護された実行を示すフローチャートである。
図10】実施形態によるH配列を処理する保護されたSHA−256の実行を示すフローチャートである。
【発明を実施するための形態】
【0012】
一般的に、本発明は、ホワイトボックス環境での攻撃に対抗する暗号ハッシュ関数の保護されたソフトウェアの実行を生成する方法およびシステムを提供する。本明細書で、ホワイトボックス環境とは、ある攻撃者が実行環境およびソフトウェアの実行を完全にコントロールする環境のことをいう。つまり、その攻撃者は、コード、データ構成、および実行環境に対するアクセス権を持つ。ジョンソン氏らへ付与された米国特許7,397,916号、発明の名称「SYSTEM AND METHOD FOR OBSCURING BIT−WISE AND TWO’S COMPLEMENT INTEGER COMPUTATIONS IN SOFTWARE」は、ホワイトボックス攻撃環境に関する背景情報を含み、引用することにより本明細書に含まれる。
【0013】
本明細書にて記載される保護された暗号ハッシュの実行により、ハッシュ演算の入力と出力を符号化することができる。本明細書で、符号化とは、可逆関数のことをいい(例えば、バイトからバイトへ、または、ワードからワードへ)、極秘データを隠すために使用される。本開示では、メモリ内の符号化されていない値(すなわち、メッセージ、ダイジェストおよびその中間値)を露出することなく、どのように符号化されたメッセージを受け付け、どのように符号化されたダイジェストを作成するかを記載する。
【0014】
本開示の実施形態は、ハッシングアルゴリズムを変換し、変換されたドメイン内で演算を行う。そして、どんな場合でも保護された情報を露出することなく、効果的な方法で、変換された入力に作用する、および/または、変換された出力を作成する。これにより、ハッシュ関数の演算をホワイトボックス攻撃から保護する。実施形態は、元のハッシングアルゴリズムとの互換性を保ちながら、このような保護を実現する。本明細書内での互換性とは、符号化されたメッセージ入力を受信し、符号化されていない出力オブジェクトを作成する保護された実行が、符号化されていないメッセージ入力を受信する標準的なハッシュ関数の実行と同じ結果となるようにすることを意味する。
【0015】
従来のハッシングアルゴリズム
暗号ハッシュ関数の一例としては、2008年10月のFIPS PUB 180−3(米国商務省)のSecure Hash Standard(SHS)に記載されるようなSHA−256アルゴリズムがある。図1〜4と、それらに伴う記載によって、SHA−256アルゴリズムの従来の実行が説明されている。SHA−256アルゴリズムは、単なる例として提示され、本発明を示すために使用される。ただし、当然のことながら、当業者は、本開示の実施形態がいかなる暗号ハッシュ関数にも適用できることを理解するであろう。
【0016】
図1は、SHA−256アルゴリズムのバイト指向ハッシュの実行の高レベルでの概観を示すフローチャートである。当業者は当然理解するであろうが、ビット指向の実行も支持される。
【0017】
まず、8個の初期ハッシュ値H(以下、状態変数とも言う)と、64個の定数値Kとが、アルゴリズムの仕様内で定義されているように特定の定数値に初期化される(ステップ102および104)。
【0018】
そして、入力メッセージ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)。
【0019】
中間値a、b、・・・hが初期化された後(ステップ110)、図3で詳細に説明されるように、各配列mは、64個の32ビットのワードの配列Wに拡張される(ステップ112)。図3に示されるように、0≦i≦15の要素はW=Mであり、16≦i≦63の要素はW=Wi−16+s(Wi−15)+Wi−7+s(Wi−2)であり、ここで、s関数は、「右回りのローテート」(ROTR)関数と、「右シフト」(SHR)関数とにより、図に示されたように定義される。
【0020】
配列Wの各要素について、パディングされたメッセージMの全てのブロックが処理される(ステップ118)まで、8個のハッシュ値Hが、一時的な処理のための値(a〜h)にコピーされ(ステップ114)、8個の中間ダイジェスト値Hに返される(ステップ116)。値(a〜h)は、図4のフロー図で示されるようにマッピングされる。最終的なハッシュダイジェストは、256ビットの値であり、全てのメッセージブロックmが処理された後に最終的な8個の値Hを結合することによって形成される(ステップ120)。
【0021】
以下は、標準的な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に示すように、「未知の」値(メッセージビット、または、メッセージビットから派生した値)は、Tの構成において、W配列を介してのみ、混ぜられる。これら未知の値は、ラウンド毎に2つの割合で、Tの追加を経た状態変数内に、また、状態変数を経た値の数列に広まる(ラウンド1の後にaとe、ラウンド2の後にa、e、b、fなど)。最初のメッセージブロックのラウンド4が終了して初めて、状態値は全て、「未知の」データを含む。後続のメッセージブロックは、直前のブロックの最後の状態から始まるので、始めから未知のデータを含む。
6.図4のアルゴリズムのメッセージブロックの処理または圧縮では、シフト演算(shift)、排他的論理和演算(exclusive or)、論理積演算(and)、否定演算(not)、および、加算演算(add)のみが使用される。排他的論理和は加算(add)と論理積(and)の組み合わせで表現することができる。
7.多くの応用において、メッセージとダイジェストとはバイトの配列として扱われるが、SHA−2アルゴリズム内では、メッセージとダイジェストとは、32ビットもしくは64ビットのワードとして演算が行われる。
[符号化関数]
【0022】
暗号関数および復号関数の保護されたソフトウェアの実行に対する、入力および/または出力は、符号化されたパラメータからなる。そのパラメータは、保護されたソフトウェアの実行と連動するモジュール内での特定の適応が必要なものである。図5は、関数Eを用いて入力ドメインIDを出力ドメインODにマッピングする演算の応用を示す。逆算Dによって、出力値は入力ドメインID内の値にマッピングされる。図5はまた、入力ドメインIDを符号化された入力ドメインID’にマッピングする変換Tと、符号化された出力ドメインOD’内の値を出力ドメインODにマッピングする変換Tとを示す。TとTとは、全単射である。
【0023】
暗号関数EとDと共に、符号化関数TとTとを用いるということは、以下のことを意味する。つまり、入力ドメインIDのデータ要素を符号化関数Eに入力し、出力ドメインODの暗号化されたデータ要素を得るのではなく、Tを適用して、ドメインID’の変換されたデータ要素が、変換された暗号化関数E’に入力されることを意味する。変換された暗号化関数E’は、符号化演算において、逆変換関数T−1および/またはT−1を組み合わせて、鍵などの機密情報を保護する。そして、ドメインOD’の、変換され、暗号化されたデータ要素が得られる。同様に、D’が、OD’内のデータ値を復号し、ID’内の値にマッピングする。保護された実行内でTとTとを行うことにより、変換されたデータの空間内の入力データおよび出力データを分析した時に、暗号化関数Eと復号関数Dとの鍵を読み出すことはできない。
【0024】
変換関数TとTの少なくとも一つは、非自明の関数であるべきである(つまり、恒等関数とは異なるべきである)。Tが恒等関数である場合、入力ドメインIDとID’は、当然、等しいドメインになるであろう。Tが恒等関数である場合、出力ドメイン同士は、当然、等しいドメインになるであろう。
[ハッシングアルゴリズムにおける符号化]
【0025】
OMAのDRMの例では、ハッシュ関数の出力は、コンテンツ暗号化キーを復元するのに使用された。よって、この状況では、少なくとも、ダイジェストが符号化されるべきである。しかしながら、ダイジェストのみを符号化するのでは、十分な保護とはならない。ハッシュ関数には鍵がかけられていないので、攻撃者が符号化されていない入力を入手した場合、OMAの仕様書内で定義されているハッシュ関数を攻撃者自身が実行し、利用することで、符号化されていない出力を計算できてしまう。従って、実施形態においては、ハッシュ関数への入力も符号化される。
【0026】
暗号ハッシュ関数の保護された実行が必要な状況では、ほとんどの場合、入力メッセージを符号化しなければならない。符号化することは、メッセージを攻撃者から守秘するのに役立つ(つまり、メッセージを簡単に読むことはできない)、そして、攻撃者が意図的にメッセージを変更するのが難しくなる。よって、メッセージの方式を完全性があるものにする。攻撃者が、中間状態からさかのぼって作業し、符号化されていない入力メッセージとなりうるものを計算するのが難しくなるように、符号化は、少なくともいくつかのハッシングアルゴリズムを通して維持されなければならない。
【0027】
なお、符号化されたメッセージから符号化されていないダイジェストを作成すると、必ず符号化されていないメッセージが露呈するわけではない。保護暗号ハッシュ関数の一方向関数という特性は、コンピュータ上で、入手したダイジェストを作成する入力メッセージを探すのは不可能であることを意味する。よって、応用において、符号化されていない出力を伴うハッシュ関数の保護された実行を利用することが可能性である。しかしながら、ダイジェストを符号化することは、メッセージをホワイトボックス攻撃者から守秘するのに役立ち、攻撃者が意図的にメッセージを改竄するのを難しくする。
【0028】
上記のように、本開示の実施形態は、SHA−256ハッシュアルゴリズムを使用する。以下に、ホワイトボックス攻撃に対抗するSHA−256の実行の作成方法の例を説明する。当業者は当然理解するであろうが、説明される方法やシステムは、若干の変更のみを伴い、同様の方法で、SHA−2族の他の暗号ハッシュ関数(SHA−224、SHA−384、SHA−512)を保護するためにも使用されうる。さらに、当業者が、SHA−1、MD5、それ以前のものなど、他の暗号ハッシュ関数を同様に保護するには、本方法および説明で十分足りる。
【0029】
ホワイトボックス攻撃に対する耐性は、ハッシュアルゴリズムの入力、出力、その中間の状態値の符号化を利用することで達成される。メッセージ(入力)とダイジェスト(出力)は、別々に保護することができ、符号化してしまうと、メッセージやダイジェストは、実行中のいかなる時点でも、それぞれの元の、符号化されていない形式で現れることはない。アルゴリズムの基本的な機能性は変更されない、それは、保護された実行により作成された符号化されたダイジェストと、保護されていない実行により作成されたダイジェストを同様に符号化することによって作成された、符号化されたダイジェストとは、同一のものであることを意味する。
[強固なハッシング]
【0030】
ハッシング演算を保護することとは、可逆符号化関数を適用して、ハッシュ関数のメッセージ(入力)および/またはダイジェスト(出力)を変換することを基本的に含んでいる。この符号化関数は、固定値を用いたXORと同じように簡単にできる、もしくは、任意の複合関数とすることができる。本開示の実施形態は、保護された情報をいかなる時も露出することなく、効率的な方法で、ハッシングアルゴリズムを変更し、変換された入力に作用する、および/または、変換された出力を作成する。その一方で、元のハッシングアルゴリズムとの互換性は維持される(つまり、実施形態が、変換されたメッセージ入力と符号化されていない出力ダイジェストを伴う、ホワイトボックスでの実行である場合、符号化されていない形式である同メッセージを伴う、標準的な実行と同じハッシュ効果がある)。本開示の実施形態は、(8ビットまたは32ビットのそれぞれの変換係数を用いて、8ビットまたは32ビットを同時に変換する)8ビットおよび32ビットのサイズの変換により、変換空間をより大きくすることができる。ハッシングアルゴリズムのいくつかの部分は、変換方式の詳細を露出することなく、変換された入力を変換された出力に効果的にマッピングできる表参照演算に置き換えられる。
【0031】
本開示のいくつかの実施形態では、メッセージとダイジェストの両方が変換されることを前提とする。この構成により、最高レベルのセキュリティが提供される。しかしながら、セキュリティ特性の弱体化という代償を伴いはするが、変換されていないメッセージ、または、変換されていないダイジェストを用いることもできる。限定的な保護はできるので、変換されていないメッセージと変換されていないダイジェストの両方を用いる構成とすることも可能であるが、推奨はしない。説明の実施形態では、メッセージとダイジェストの両方に対して、8ビット変換が用いられることを前提とするが、以下に説明するように、32ビット変換も支持される。
【0032】
図6は、暗号ハッシュ関数の演算を保護するシステムの高レベルでのブロック図である。図7〜10を参照し、本開示のある実施形態による、SHA−256アルゴリズムの保護された実行を説明する。入力の符号化または出力の符号化を利用しない実施形態は、恒等変換にTまたはTを設定することにより、容易に上記から導かれる(なお、TおよびTは、それぞれ、メッセージ入力の符号化およびダイジェスト出力の符号化するものである)。これは、TからTIMへのマッピング、および、TからTへのマッピングにのみ影響する。しかしながら、これらのインスタンスは、既知値が内部変換によって符号化されるであろうし、攻撃者がその内部変換を攻撃し、符号化された情報を復元することができうるので、安全性が低い。
【0033】
図6に示すように、入力メッセージMは、符号化関数Tにより符号化されており、再符号化され、符号化関数TIM602を入力する。そして、その結果である、IMドメイン内の符号化されたメッセージTIM(M)は、パディング関数604によって、暗号ハッシュ関数で決定された長さにパディングされる。例えば、SHA−256に関しては、TIM符号化された入力メッセージのパディング後の長さは、64バイトを法として0に合同である。以下により詳しく述べられるように、パディング用バイトは、ある実施形態においては、メッセージの長さを4バイトの倍数にするのに必要な初期のパディング用バイトを除いて、符号化されていない。当該初期のパディング用バイトは、TIMドメイン内で符号化したものである。本実施形態は、符号化されていないパディング用バイトが、同一ワード境界内のメッセージバイトに付属しないことを確実にするので、追加的なセキュリティを提供する。これにより、ワードのある部分は符号化され、他の部分は符号化されないという心配なく、確実に、メッセージバイトが均一にワードに分割される。しかしながら、当業者は当然理解するであろうが、本開示の実施形態は、たとえ、全てのパディング用バイトが符号化されていなくても、機能するであろう。
【0034】
パディング後のTIM符号化されたメッセージは、それから、前処理され、ブロッキングまたは分割の関数606により所定の長さのワードのブロックに分割される。例えば、SHA−256の保護された実行において、パディング後のTIM符号化された入力メッセージは、まず、64バイトの「チャンク」に分割され、続いて、各チャンクが16ビット、32ビットのワードのブロックに分割され、結果、16ワードの符号化された配列TIM(m)となる。
【0035】
それから、各配列TIM(m)は、TIMドメイン内の変換された関数を適用し、処理される。変換されたSHA−2ハッシュ関数に関しては、図に示すように、任意の配列TIM(m)が、まず、TIMドメイン内の拡張関数608により処理され、符号化された配列T(W)が提供される。例えば、SHA−256に関しては、拡張関数の結果、符号化された配列T(W)は64個の32ビットのワードで構成される。そして、この拡張された配列は、Tドメイン内にある圧縮関数601により圧縮され、その結果、符号化された、中間値T(a、b、・・・h)となる。メッセージの全てのチャンクが処理されると、最終的な中間値は、符号化関数TH612を用いて、任意で符号化され、符号化された出力ハッシュ値T(H、H、・・・H)が提供される。そして、これら出力ハッシュ値は、連結関数614によって連結され、元の入力メッセージMに対する符号化された出力ダイジェストT(D)が一つ生成される。
【0036】
図7〜10に示しながら、本方法の演算は、SHA−256の変換された実行を参照し、より詳細に説明される。図7に示されるように、状態変数H〜Hは、ハッシュ関数の基準により規定されるような値に初期化される(ステップ702)。64個の値K〜H63も、ハッシュアルゴリズム仕様書内で定義されるような、それらの定数値に初期化される(ステップ704)。これらの変数は、初期の段階では、符号化されておらず、攻撃者が既知の定義された値を用いて、H〜Hの変換を攻撃することを、確実にできないようにするのに役立っている。
【0037】
メッセージデータMは、符号化方式Tを用いて符号化された形式のアルゴリズムに入力される。この変換は、バイト指向、または、ワード指向のものでありうる。Tは、ハッシュ実行と保護されたハッシュ関数を用いるモジュールとの間の「インターフェイス」符号化である。T符号化は、その応用特有の、もしくは、その応用内でのハッシングアルゴリズムの使用のインスタント特有のものでありえる。いくつかの実施形態において、外部の変換Tは、内部の、任意に選ばれた、8ビットの変換TIMに変換される。T符号化されたバイト/ワードは、TIM符号化により、再符号化される(例えば、x’=TIM(T−1(x)))。好ましい実施形態によると、再符号化は、復号の後に符号化するよりも、組み合わせた操作として行われる方が好ましく、このやり方だと、符号化方式が露出することがない。以下に説明するように、TIM変換は、変換Tを露出することなくパディング用バイトを処理するのに有効である。そして、メッセージMは、パディングされ(ステップ706)、パディング済みの符号化されたメッセージとなる。
【0038】
パディング方法は、図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」のパディング用ビットを含むバイトの残りの値でありうるものを対象とする追加の符号化された値を用いて、この方式をビット指向メッセージに拡大して適用することができる。しかしながら、ハッシングアルゴリズムの様々な応用において、ビット単位のハッシングは必要とされない。
【0039】
図7に戻ると、パディング処理により、バイト単位で64を法として0と合同である長さのパディングされたメッセージが生じる。よって、TIM符号化されたメッセージバイトは、64バイトのチャンクに分割される(ステップ708)。各チャンク内のバイトは、さらに32ビットのビッグエディアン形式のワードに分割され、16個のワードの配列mを形成する。中間値a、b、・・・hを現時点の値H、・・・Hに初期化した(ステップ710)後、図9に示すメッセージ拡張関数を用いて、配列Wが構築される(ステップ712)。
【0040】
図9に示すように、配列Wの最初の16の要素(Wは0≦i≦15)が、まず決定され、格納される。処理中は、メッセージバイトが、いくつかのポイントで、符号化されていないパディング用バイトに移行する。符号化されていないパディング用バイトが、符号化されていない形式の配列Wに格納される。上記の図8に概要が示されるように、パディング処理は、符号化されたメッセージバイトから符号化されていないメッセージバイトへの移行は、ワード境界のみで起こりうることを確実にする。従って、メッセージワードmのそれぞれは、4個の符号化されたバイトか、もしくは、4個の符号化されていないバイトからなり、符号化されたバイトと符号化されていないバイトとの組み合わせからなることはありえない。mが符号化されていない場合は(つまり、mがパディング用バイトのみからなる場合)、W=mが成り立つ(ステップ902)。
【0041】
が符号化されている場合は、W=T(T−1IM(m))が成り立つ。好ましい実施形態によると、再符号化は、復号の後に符号化するよりも、組み合わせた操作として行われる方が好ましく、このやり方だと、符号化方式が露出することがない。(ステップ902)。Tは、バイトからワードへの関数である。
【0042】
そして、配列Wのこれら初期の16個のワードは、64個の32ビットの符号化されたワードの配列Wに拡張される。配列Wのこれらの残りの要素は、ルックアップテーブルLS、LS、SLS、SLSを使って計算される。当業者は当然理解するであろうが、SHA−256アルゴリズムは6つの論理関数を使用し、各関数は、x、y、zで表される、32ビットのワードに作用する。関数は以下の通りである。
【数1】
ここで、ROTR(x)は「右回りのローテート」演算、もしくは、「右循環シフト」演算である。xがwビットの符号なしのワードで、nが0≦n<wの整数である場合、その時は、ROTR(x)は、以下のようになる。
【数2】
同様に、SHR(x)は、以下のような「右シフト」演算である。
【数3】
これらの関数それぞれの結果が、新しい32ビットのワードとなる。
【0043】
本開示のある実施形態によると、ルックアップテーブルは、TIM変換されたドメイン内の関数sおよびsを実行するのに使用される。関数sおよびsは、32ビットのワードに作用する。しかしながら、32ビットのワードを32ビットのワードにマッピングするルックアップテーブルはとても大きく、何らかの方法で、より小さいルックアップテーブルを使用することが望ましい。これは、関数sが共に、一次関数であることに注目すれば達成できうる。ワード入力xをバイトb、b、b、bの配列で表した場合、関数sの線形から、以下の式を導くことができる。
【数4】
式では、他のバイトをゼロに設定し、入力の個々のバイトに関数sを適用ことができることを示す。4つの関数を適用した結果、バイトbごとに論理和を取ることが可能であり、ワードxに関数sを適用した場合と同一の結果が得られる。
【0044】
s演算を実行するにあたって、T符号化されたワードは、まず、ワードからバイトへの再符号化関数を用いて、任意のバイト単位の変換Tsに再符号化される。ルックアップテーブルLS、LS(それぞれ4つが、関数sおよびsに対応する)は、それぞれ、Ts符号化されたバイトをT符号化されたワードにマッピングする。T符号化されたワードは、ワード内の4か所のそれぞれで、関数sが特定のバイトに適応されることを表している。これらの4か所で部分的に結果が導かれているワードは、符号化された論理和演算を用いて、組み合わされ、完全なワードS、Sが形成される(ステップ906、908)。従って、ルックアップテーブルLS、LSはそれぞれ、入力の可能性があるバイトに対する256のエントリを持つ4つのテーブルを含み、出力ワードの各エントリは、4バイトから成り立ち、合計サイズは、4096バイトになる。
【0045】
ルックアップテーブルSLS、SLS(やはり、それぞれ、関数sおよびsに対応する)は、符号化されていないバイトをT符号化され、シフトおよびローテートされたワードにマッピングする。表SLSは、メッセージ内の符号化されていないパディング用バイトをs演算するのに用いられる(ステップ910、912)。これら表は、Wi−2のワードもしくはWi−15のワードが符号化されていないパディング用ワードである時に使用される。これら表は、入力が符号化されないことを除けば、表LSと同じような構造である。表SLS、LSは全く別の出力符号化方式を使用する。この表SLS、LSの全く別の出力符号化方式により、入力のT符号化方式を求めるのがさらに難しくなる。例えば、表SLS、LSが同じ符号化方式を作成し、SLS(x)=LS(y)である、符号化されていないワードxおよび符号化されたワードyが与えられたとすると、T(x)=yとなり、この情報は、変換Tの攻撃に使われかねない。
【0046】
最終的なWの値は、符号化された追加関数(+)により計算される(ステップ914)。値S、Sは常にT符号化されたものである一方で、値Wi−16およびWi−7は、符号化された、もしくは、符号化されていないパディング用ワードでありうる。別の追加関数が、別の符号化処理に使用されうる。
【0047】
図10に示される圧縮関数は、ひとつのチャンクのデータのハッシュを完結するために実行される。M内の各mにおいて、現時点のハッシュ値Hが一時的な処理値(a〜h)にコピーされ、処理値(a〜h)は図10に示すようにマッピングされる。全ての演算(追加、論理和、否定)は、全てが符号化された値、もしくは、一方が符号化され、他方は符号化されていない値に作用し、符号化された値を作成する。値Wは、パッディング用ワードであるとき、符号化されていない値でありうる(これは、0≦i<16の時のみ、真であるとされる)。表USは、上記の表LSと同様である。これらの表は、Σ演算の実行表であり、σ操作と同様の方法により、ワードを構成するバイト上で、Σ関数の4つのsub applicationに分類される。アルゴリズム内の値aとeは常に符号化された値であるので、メッセージの拡張ステップにおいて、表SLSと対応する表SUSは存在しない。64のWの値がそれぞれ処理されると、値HをT変換する、符号化された追加関数を用いて、値a〜hは、それぞれ、存在するH〜Hの値に追加される(ステップ1002)。
【0048】
先頭のメッセージチャンクの最初の4ラウンドは、特に、値Hおよび値a・・・hに作用する符号化方式をより良く保護するために処理することができる。各ワードHにおいて、内部の変換Tは外部のダイジェスト変換Tに変換することができ、結合して、出力ダイジェストを形成する。メッセージの初期の512バイトの最初の4ラウンドにおいて、状態変数a〜hのいくつか、もしくは、全てが、アルゴリズムにより固定された値となる。これにより、メッセージの最初のチャンクの最初の4ラウンドにたいして、上記「特別なケース」を利用しやすくなる。
1.第一のラウンドにおいて、値Tのみが未知の値となる。Tは、先に計算された定数値とWを追加することによって計算される。よって、ラウンド1の終わりでは、eとaとを除いた全ての変数が既知の固定値となり、符号化されるべきではない。
2.ラウンド2において、T、Tは共に、未知の値からなり、b、c、d、f、g、hは全て、既知の固定値である。
3.ラウンド3において、c、d、g、hは既知の固定値である。
4.ラウンド4において、d、hのみが既知の固定値である。
5.最初のチャンクの残りのラウンドすべてにおいて、そして、後続のチャンクすべてにおいて、8つの中間状態値はすべてメッセージビットと混ぜ合わされ、「未知である」とされる。
【0049】
これら「特別なケース」を利用することによって、8つの状態変数のすべてが「符号化されておらず」、元の符号化されていない値Hで初期化されていると、まず考えることができる。最初のメッセージチャンクの最初の4ラウンドそれぞれで、2つの状態変数が「符号化されていない」状態から「符号化された」状態に移行することが、データとして、Tの符号化された追加関数を用いて、値aとeに混ぜ合わされる。後続のラウンドのそれぞれで、これら変数の値は、操作で使用される時は、符号化されていると見なされる。これは、攻撃者が、最初の4ラウンドの状態変数の内容を予測し、それを使って、状態変数の変換を攻撃することを、確実に不可能とするために役立つ。最高の保護にするためには、符号化されたメッセージMは、少なくとも4つのワードのデータを含み、各ステップにおいて、符号化されたデータが確実にTに混ぜ合わされるようにするべきである。短いメッセージについてのこのような弱点は、多くの場合、顕著ではない。なぜならば、極端に短いメッセージは、容易に、総当たり攻撃(ブルートフォースアタック)の対象となりえるからである。
【0050】
本実行の第一の目的は、攻撃者が、アルゴリズムの入力、出力、その中間の内部状態を観察し、符号化されていないメッセージもしくはダイジェストを断定するのを防ぐことである。入力メッセージとダイジェストが共に符号化されている場合において、本実行は、下記の特徴が見られる。
1.配列W内のワードはすべて、符号化されたメッセージワードであるか、1つ以上の符号化されたメッセージバイトと、それに付随する1つ以上の符号化されたパディング用バイトからなるワードであるか、もしくは、符号化されていないパディング用ワードである。W内のワードはいずれも、符号化されていないメッセージバイトを含まない。
2.パディング用バイトはいずれも、TIM符号化されたものである値0x80と0x00を除いて、符号化されない。この変換は、外部のメッセージ変換Tとは明確に異なり、二つの既知値を露出することで、容易に攻撃者が他の値を断定できることがないように選択されるべきである。例えば、任意のバイトを任意のバイトにマッピングする関数(例えば、256バイトのルックアップテーブル)は、この特性を有する。この表では、値0x80と0x00に対するマッピングのみが露出される必要があり、マッピングを完全に露出する必要はない。
3.符号化されたパディング用データから派生したT符号化されたWワードはいずれも、少なくとも1バイトの符号化されたメッセージデータを含む。
4.入力としてWワードを取る全ての演算は、符号化されたデータを出力する。
5.状態変数a〜hを計算する演算はすべて、符号化されていない入力を含み、その場合、その入力は符号化されないままである。もしくは、少なくとも一つの符号化された入力を含み、その場合は、その出力は符号化される。
6.最初のメッセージチャンクのラウンド4の後、状態変数a・・・hは全て符号化される。
7.最初のメッセージチャンクを処理した後、値H〜Hは全て符号化される。
8.既知値(H〜Hの初期値、値K)が、未知のデータとするために用いられるのと同じ符号化方式で符号化されることはない。
9.符号化されていないパディング用データを含むσ演算の出力(表SLS)と符号化されたデータに対するσ演算の出力(表LS)は、全く異なる符号化方式を用いる。これらの値を用いた追加演算は、全く異なるものである。
【0051】
上記の理由から、メッセージ拡張の間も、ハッシュ処理の間も、入力メッセージバイトが明かされることは絶対にない。それら入力メッセージバイトは、アルゴリズムの定数やパディング用の値などの既知の固定データを符号化するために用いられることのない符号化方式で符号化される。これにより、メッセージの値が符号化されていない形式で露出することは絶対にないこと、そして、また、プレーンテキスト形式の攻撃を頓挫させること、が確実になる。なぜなら、パディング用の値および固定値は、すべて、符号化されていないか、もしくは、メッセージや状態データとは異なる方法で符号化されるからである。本開示の実施形態のいくつかでは、追加的な保護特性を使用することができる。例えば、さらにアルゴリズムを難読化するために、制御フロー変換をアルゴリズムに用いることができる。
【0052】
パディング用バイトを符号化されていない値として処理する手法は、メッセージMの任意の部分が符号化されていない値を渡すことができるように、拡大して適用することができる。セキュリティの観点から、パディング用の値を符号化していない状態に保つことが望ましい。なぜなら、それによって、メッセージ変換に対する既知のプレーンテキスト形式の攻撃のいくつかが抑止されるからである。構造化文書やフォーマット済みデータなどの部分的に既知値(もしくは容易に推測できる値)を含むメッセージへの応用としては、メッセージの慎重に扱うべき部分のみ符号化するようにし、メッセージデータの残りの部分は符号化されないようにするのが望ましい。この一例として、既知もしくは容易に推測されるフォーマットのデータ構成内部に含まれる暗号キー(例えば、ASN1で符号化されたRSAキー)のハッシュを計算することである。ストリーム内のどこで移行が行われるかを示すように、適切なメタデータが維持されることにより、いずれのワード境界でも符号化された値と符号化されていない値の間の移行ができるように、上記の方式は、容易に拡大して適用される。パディングのメカニズムは、Message Authentication Codes(MAC)などの鍵がかけられた暗号ハッシュ関数においても、有効であり得る。
【0053】
上記では、実施形態を完全に理解してもらうために、説明を目的として、具体的な数字が示された。しかしながら、当業者には当然のことながら、これら特定の詳細内容が必要であるわけではない。他の例では、理解をさまたげないように、ブロック図形式で既知の電気的構造や回路が示されている。例えば、特定の詳細内容は、本明細書に記載の実施形態が、ソフトウェアルーチンとして実施されるのか、ハードウェア回路としてなのか、ファームウェアとしてなのか、それとも、それらの組み合わせとして実施されるのかを示すものではない。
【0054】
本開示の実施形態は、(単数または複数の)機械可読媒体(コンピュータ可読媒体、プロセッサ可読媒体、もしくは、コンピュータ可読プログラムコードを内部に含むコンピュータで使用可能な媒体とも言う)に格納されたコンピュータプログラム製品として表すことが可能である。機械可読媒体は、ディスケット、コンパクトディスクリードオンリーメモリ(CD−ROM)、(揮発性もしくは不揮発性の)メモリ装置、あるいは、同様の記憶媒体を含む、磁気記憶媒体、光学記憶媒体、もしくは、電気的記憶媒体などの適切な具体的な非一時的媒体であってよい。機械可読媒体は、様々な指示、符号配列、構成情報、その他のデータを含んでよく、それらが実行されることで、プロセッサに、本開示の実施形態による方法のステップを実行させる。本件記載の実行を行うために必要な他の指示や操作も機械可読媒体に記憶されてもよいことは、当業者であれば、当然理解するであろう。記載の処理を行うために、機械可読媒体に記憶される指示は、プロセッサまたは、他の適切な処理装置で実行されてよく、回路と連動してもよい。
【0055】
本発明の上記実施形態は、単なる例示のみを目的とする。当業者により、発明の範囲を逸脱することなく、特定の実施形態に対する変更、改良、変形が可能である。発明の範囲は、添付の特許請求の範囲によってのみ定義される。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10