ハッシュ関数演算装置及び演算プログラム
【課題】 32ビットCPU及び64ビットCPUのいずれに利用されても互いに同一のハッシュ値を算出でき、ソースコードの共通化を実現できる。
【解決手段】 前記ハッシュ関数演算装置においては、CPU環境判定手段が、CPU環境が32ビットCPU環境であるか又は64ビットCPU環境であるかを判定し、この判定結果が64ビットCPU環境である旨を示すと、前記演算プログラムに記述された圧縮関数の演算の初期値及び定数をデータ記憶領域の上位32ビットに書込む。前記ハッシュ関数演算装置においては、当該生成されたメッセージブロックをデータ記憶領域の上位32ビットに書込む。左ローテーション演算実行手段は、左シフト演算実行手段、右シフト演算実行手段、論理和演算実行手段及びマスク処理手段を備え、圧縮関数の変数xに対してのローテーション基数32のnビット左ローテーション演算処理を実行する。
【解決手段】 前記ハッシュ関数演算装置においては、CPU環境判定手段が、CPU環境が32ビットCPU環境であるか又は64ビットCPU環境であるかを判定し、この判定結果が64ビットCPU環境である旨を示すと、前記演算プログラムに記述された圧縮関数の演算の初期値及び定数をデータ記憶領域の上位32ビットに書込む。前記ハッシュ関数演算装置においては、当該生成されたメッセージブロックをデータ記憶領域の上位32ビットに書込む。左ローテーション演算実行手段は、左シフト演算実行手段、右シフト演算実行手段、論理和演算実行手段及びマスク処理手段を備え、圧縮関数の変数xに対してのローテーション基数32のnビット左ローテーション演算処理を実行する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、ハッシュ関数演算装置及び演算プログラムに関する。
【背景技術】
【0002】
一般に、ハッシュ関数は、ネットワークを介して通信されるデータの書換えを検出するために用いられ、通信されるデータからハッシュ値と呼ばれる固定長のデータを生成する関数である。この種のハッシュ関数は、ハッシュ値から元のデータが特定されない旨の一方向性の性質をもっている。このようなハッシュ関数には、例えば、SHA−256、SHA−512、BLAKE−256及びBLAKE−512等のアルゴリズムが存在し、ハッシュ値は通信されるデータとハッシュ関数のアルゴリズムとに基づいて生成される。
【0003】
ユーザは、ハッシュ関数を含む演算プログラムをパーソナルコンピュータ(personal computer)等にインストールし、この演算プログラムをパーソナルコンピュータ内のCPU(central processing unit)で実行することによって、データの書換え等を検出可能としている。
【0004】
一方、現行のパーソナルコンピュータに搭載されるCPUは、32ビットCPUまたは64ビットCPUのいずれかであり、32ビットCPUと64ビットCPUとでは処理可能なデータのビット幅が異なっている。このため、ハッシュ関数のアルゴリズムを含む演算プログラムを管理する管理者は、ハッシュ関数の同じアルゴリズムであっても、32ビットCPU用の演算プログラムと、64ビットCPU用の演算プログラムとを別々に用意する必要がある。例えば、BLAKE−256では、32ビット幅のワード長で計算を行うためのソースコードが実装されており、BLAKE−512では、64ビット幅のワード長で計算を行うためのソースコードが実装されている。同様に、SHA−256では、32ビット幅のワード長で計算を行うためのソースコードが実装されており、SHA−512では、64ビット幅のワード長で計算を行うためのソースコードが実装されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2004−53716号公報
【非特許文献】
【0006】
【非特許文献1】Jean-Philippe Aumasson, Luca Henzen, Willi Meier, Raphael C.-W.Phan, “SHA-3 proposal BLAKE”, version1.3 December 16, 2010, pages 1-79, <URL: http://www.131002.net/blake/blake.pdf>.
【非特許文献2】“Federal Information Processing Standards Publication 180-2”, August 1, 2002, pages 1-71, <URL: http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf>.
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、ハッシュ関数の同じアルゴリズムに対し、32ビットCPU用の演算プログラムと64ビットCPU用の演算プログラムとを別々に用意して二重管理することは、通常は特に問題はないが、本発明者の検討によれば、演算プログラムのソースコードのメンテナンス性を低下させる不都合がある。
【0008】
また、この不都合を解消する観点から、本発明者により、64ビットCPUが32ビットCPU用の既存の演算プログラムを実行することにより、ハッシュ関数のアルゴリズムを含む演算プログラムのソースコードの共通化を図る方式を考察してみる。
【0009】
しかしながら、この方式は、32ビットCPUと64ビットCPUとにおけるローテーション演算処理やパティング処理が異なるため、同一のデータから互いに異なるハッシュ値を算出してしまい、ソースコードの共通化を実現できないといった不都合がある。
【0010】
本発明が解決しようとする課題は、32ビットCPU及び64ビットCPUのいずれに利用されても互いに同一のハッシュ値を算出でき、ソースコードの共通化を実現し得るハッシュ関数演算装置及び演算プログラムを提供することを目的とする。
【課題を解決するための手段】
【0011】
実施形態のハッシュ関数演算装置は、BLAKE−256に規定された圧縮関数の演算を含むハッシュ演算によってハッシュ値を算出する。
【0012】
前記ハッシュ関数演算装置においては、プログラム記憶手段が、前記ハッシュ演算を示す演算プログラムを記憶する。
【0013】
前記ハッシュ関数演算装置においては、揮発性メモリが、複数の32ビット幅または64ビット幅のデータ記憶領域を有して、初期値、定数、メッセージブロック及び処理過程のデータを記憶する。
【0014】
前記ハッシュ関数演算装置においては、不揮発性メモリが、メッセージデータ及びハッシュ値を記憶する。
【0015】
前記ハッシュ関数演算装置においては、CPU環境判定手段が、前記ハッシュ演算を実行する前に、CPU環境が32ビットCPU環境であるか又は64ビットCPU環境であるかを判定する。
【0016】
前記ハッシュ関数演算装置においては、前記CPU環境判定手段による判定結果が64ビットCPUである旨を示すと、前記演算プログラムに記述された圧縮関数の演算の初期値及び定数を前記64ビット幅のデータ記憶領域の上位32ビットに書込む。
【0017】
前記ハッシュ関数演算装置においては、前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記64ビット幅のデータ記憶領域の上位32ビットに書込む。
【0018】
前記ハッシュ関数演算装置においては、前記記憶された初期値、定数及びメッセージブロックに基づいて、前記演算プログラムに記述されたハッシュ演算を実行する。
【0019】
前記ハッシュ関数演算装置においては、左ローテーション演算実行手段が、前記実行中のハッシュ演算における前記圧縮関数の演算において、当該圧縮関数の変数xに対してのローテーション基数32のnビット左ローテーション演算処理(x<<<n)を実行する(但し、変数xは、BLAKE−256に規定された変数d,bの処理過程のデータを表す)。
【0020】
前記ハッシュ関数演算装置においては、前記左ローテーション演算実行手段の実行結果を用いて前記圧縮関数の演算を含むハッシュ演算を更に実行することにより算出されたハッシュ値を前記不揮発性メモリに書込む。
【0021】
ここで、前記左ローテーション演算実行手段は、左シフト演算実行手段、右シフト演算実行手段、論理和演算実行手段及びマスク処理手段を備えている。
【0022】
前記左シフト演算実行手段は、前記変数xのnビット左シフト演算処理(x<<n)を実行する。
【0023】
前記右シフト演算実行手段は、前記変数xの(32−n)ビット右シフト演算処理(x>>(32−n))を実行する。
【0024】
前記論理和演算実行手段は、前記左シフト演算実行手段の実行結果と前記右シフト演算実行手段の実行結果との論理和演算を実行する。
【0025】
前記マスク処理手段は、前記論理和演算実行手段の実行結果の下位32ビットをゼロ値でマスクする処理により、前記nビット左ローテーション演算処理(x<<<n)の実行結果を得る。
【図面の簡単な説明】
【0026】
【図1】第1の実施形態に係るハッシュ関数演算装置の構成の一例を示す機能ブロック図である。
【図2】同実施形態におけるハッシュ関数演算装置の動作の一例を示すフローチャートである。
【図3】同実施形態における揮発性メモリ内の64ビット幅のデータ記憶領域に記憶されたデータの一例を示す模式図である。
【図4】同実施形態におけるパティング処理の一例を示す模式図である。
【図5】同実施形態におけるローテーション演算処理の一例を示す模式図である。
【図6】同実施形態におけるマスク処理の一例を示す模式図である。
【図7】第2の実施形態に係るハッシュ関数演算装置の構成の一例を示す機能ブロック図である。
【図8】同実施形態におけるハッシュ関数演算装置の動作の一例を示すフローチャートである。
【図9】同実施形態における揮発性メモリ内の64ビット幅のデータ記憶領域に記憶されたデータの一例を示す模式図である。
【図10】同実施形態におけるパティング処理の一例を示す模式図である。
【図11】同実施形態におけるローテーション演算処理の一例を示す模式図である。
【図12】同実施形態におけるマスク処理の一例を示す模式図である。
【発明を実施するための形態】
【0027】
以下、各実施形態について図面を参照して説明する。なお、以下のハッシュ関数演算装置は、ハードウェア構成、又はハードウェア資源とソフトウェアとの組合せ構成のいずれでも実施可能となっている。組合せ構成のソフトウェアとしては、予めネットワーク又は記憶媒体からコンピュータにインストールされ、ハッシュ関数演算装置の機能を当該コンピュータに実現させるための演算プログラムが用いられる。
【0028】
(第1の実施形態)
図1は、第1の実施形態に係るハッシュ関数演算装置の構成の一例を示す機能ブロック図である。ハッシュ関数演算装置10は、プログラム記憶部101、揮発性メモリ102、不揮発性メモリ103、CPU104及び演算部105を備えている。
【0029】
ここで、プログラム記憶部101は、CPU104から読出可能な記憶装置であり、例えばROM(リードオンリーメモリ)であって、BLAKE−256に規定された圧縮関数の演算を含むハッシュ演算を示す演算プログラムを記憶している。なお、プログラム記憶部101は、演算プログラムを外部からインストールして保持する構成でもよい。
【0030】
揮発性メモリ102は、CPU104から読出/書込可能な記憶装置であり、例えばRAM(ランダムアクセスメモリ)であって、初期値、定数、メッセージブロック、計算に必要なデータ及び計算途中のデータ等を記憶している。なお、揮発性メモリ102は、複数の32ビット幅または64ビット幅のデータ記憶領域を有しており、このデータ記憶領域内に計算に必要なデータ等を適宜格納している。また、初期値の語は、「初期ベクトル」としてもよい。
【0031】
不揮発性メモリ103は、CPU104から読出/書込可能な記憶装置であり、例えばEEPROM(電気的に書換え可能なROM)であって、メッセージデータ及びハッシュ値等を記憶している。なお、メッセージデータは、CPU104によってメッセージ長が512ビットの倍数となるようなパティング処理が実行された後に、16個の32ビット長のメッセージブロックに分割され、これらメッセージブロックは揮発性メモリ102に記憶される。
【0032】
また、不揮発性メモリ103は、揮発性メモリ102と同様に、複数の32ビット幅または64ビット幅のデータ記憶領域を有しており、このデータ記憶領域内に計算結果等を適宜記憶している。
【0033】
CPU104は、プログラム記憶部101に記憶された演算プログラムを読出し、この演算プログラムを実行する。また、CPU104は、揮発性メモリ102及び不揮発性メモリ103に記憶されたデータの読出/書込処理を実行する。具体的には、以下の各機能(f104-1)〜(f104-4)をもっている。
【0034】
(f104-1) ハッシュ演算を実行する前に、CPU環境が32ビットCPU環境であるか又は64ビットCPU環境であるかを判定するCPU環境判定機能。
【0035】
(f104-2) CPU環境判定機能による判定結果が64ビットCPUである旨を示すと、プログラム記憶部101に記憶された演算プログラムに記述された圧縮関数の演算の初期値及び定数を揮発性メモリ102内の64ビット幅のデータ記憶領域の上位32ビットに書込む機能。
【0036】
(f104-3) 不揮発性メモリ103に記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割したメッセージブロックを生成し、当該生成されたメッセージブロックを揮発性メモリ102内の64ビット幅のデータ記憶領域の上位32ビットに書込む機能。
【0037】
(f104-4) 揮発性メモリ102に書込まれた初期値、定数及びメッセージブロックに基づいて、演算プログラムに記述されたハッシュ演算を実行する機能。
【0038】
なお、CPU環境判定機能による判定結果が32ビットCPUである旨を示すとき、CPU104は、演算プログラムに記述された圧縮関数の演算の初期値及び定数を揮発性メモリ102内の32ビット幅のデータ記憶領域に書込む処理と、記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割したメッセージブロックを生成し、当該生成されたメッセージブロックを揮発性メモリ102内の32ビット幅のデータ記憶領域に書込む処理といった非特許文献1に示される処理と同一の処理を実行するため、ここでは詳細な説明を省略する。
【0039】
演算部105は、CPU104によって実行中のハッシュ演算における圧縮関数の演算を実行する。具体的には、例えば、以下の各機能(f105-1)〜(f105-2)をもっている。
【0040】
(f105-1) CPU104によって実行中のハッシュ演算における圧縮関数の演算において、当該圧縮関数の変数xに対してのローテーション基数32のnビット左ローテーション演算処理(x<<<n)を実行する左ローテーション演算実行機能(但し、変数xは、BLAKE−256に規定された変数d,bの処理過程のデータを表す)。
【0041】
(f105-2) 左ローテーション演算実行機能の実行結果を用いて圧縮関数の演算を含むハッシュ演算を更に実行することにより算出されたハッシュ値を不揮発性メモリ103内の64ビット幅のデータ記憶領域の上位32ビットに書込む機能。
【0042】
ここで、左ローテーション演算実行機能(f105-1)は、例えば、以下の各機能(f105-1-1)〜(f105-1-4)をもっている。
【0043】
(f105-1-1) 変数xのnビット左シフト演算処理(x<<n)を実行する左シフト演算実行機能。
【0044】
(f105-1-2) 変数xの(32−n)ビット右シフト演算処理(x>>(32−n))を実行する右シフト演算実行機能。
【0045】
(f105-1-3) 左シフト演算実行機能の実行結果と右シフト演算実行機能の実行結果との論理和演算を実行する論理和演算実行機能。
【0046】
(f105-1-4) 論理和演算実行機能の実行結果の下位32ビットをゼロ値でマスクする処理により、nビット左ローテーション演算処理(x<<<n)の実行結果を得るマスク処理機能。
【0047】
次に、以上のように構成されたハッシュ関数演算装置の動作について、図2のフローチャートと、図3〜図6の模式図とを参照しながら説明する。但し、CPU104が64ビットCPUであると仮定する。
【0048】
始めに、CPU104は、プログラム記憶部101に記憶された演算プログラムを読出し、図3に示すように、当該読出された演算プログラムに記述された初期値IV0〜IV7及び定数c0〜c15を揮発性メモリ102内の複数の64ビット幅のデータ記憶領域の上位32ビットにそれぞれ書込む(ステップS1)。なお、初期値IV0〜IV7及び定数c0〜c15の具体的な値については、非特許文献1を参照されたい。
【0049】
続いて、CPU104は、当該読出された演算プログラムに記述された定数ν0〜ν15を、ステップS1と同様に、揮発性メモリ102内の64ビット幅データ記憶領域の上位32ビットにそれぞれ書込む(ステップS2)。なお、定数ν0〜ν15の具体的な値については、非特許文献1を参照されたい。
【0050】
次に、CPU104は、当該読出された演算プログラムに記述された変数σと圧縮関数Giとの対応情報を揮発性メモリ102に書込む(ステップS3)。なお、変数σと圧縮関数Giとの対応情報についての詳細は、非特許文献1を参照されたい。
【0051】
続いて、CPU104は、不揮発性メモリ103に記憶されたメッセージデータを読出し、図4aに示すように、当該読出されたメッセージデータのうちの512ビット長のメッセージデータを16個に分割したメッセージブロックm0〜m15を生成し、図4bに示すように、当該生成されたメッセージブロックm0〜m15を揮発性メモリ102内の64ビット幅データ記憶領域の上位32ビットにそれぞれ書込む(ステップS4)。
【0052】
次に、演算部105は、以下の式(1)に示す演算処理を実行する(ステップS5)。
【0053】
a←a+b+(mσr(2i)(+)cσr(2i+1)) 式(1)
なお、式(1)に示す演算処理の出力“a”は、揮発性メモリ102内の64ビット幅のデータ記憶領域の上位32ビットに記憶される。また、以下に示す演算処理の出力についても、揮発性メモリ102内の64ビット幅データ記憶領域の上位32ビットに適宜記憶されるものとする。
【0054】
なお、iは圧縮関数Giの識別番号を示し、0〜7のいずれかの値を示す。また、a〜dは変数であり、揮発性メモリ102に記憶されたν0〜ν15のいずれかを示す。更に、rはラウンド数を示し、0〜15のいずれかの値を示す。
【0055】
また、式(1)において用いられた記号“(+)”は排他的論理和のXORを示し、記号“←”は右辺を左辺に代入することを示している。
【0056】
ここで、識別番号i及びラウンド数rが共に0を示すと仮定した場合の演算処理について説明する。識別番号i及びラウンド数rが0を示すと仮定すると、演算部105は、以下の式(1)´に示す演算処理を実行する。
【0057】
ν0←ν0+ν4+(m0(+)c0) 式(1)´
なお、演算部105は、式(1)´に示す演算処理を実行するために、定数c0、定数ν0,ν4、及びメッセージブロックm0を揮発性メモリ102から読出し、演算処理を実行する。
【0058】
以下に示す演算処理についても、演算部105は、演算処理を実行するために必要となる値を揮発性メモリ102から適宜読出し、演算処理を実行する。
【0059】
続いて、演算部105は、以下の式(2)に示す演算処理を実行する(ステップS6)。
【0060】
d←(d(+)a)<<<16 式(2)
なお、CPU104が64ビットCPUであると、演算部105は、図5に示すように、式(2)に示したローテーション演算の一部を以下の式(3)に基づいて実行する。
【0061】
x<<<n=x<<n‖x>>(32−n) 式(3)
すなわち、演算部105は、以下の式(4)に示すように、ローテーション演算処理の一部を実行する。
【0062】
(d(+)a)<<<16=(d(+)a)<<16‖(d(+)a)>>(32−16) 式(4)
なお、式(3)に用いられた記号“<<<”は左方向にローテーションすることを示し、記号“<<”は左側にシフトすることを示し、記号“>>”は右側にシフトすることを示している。例えば、“x<<n”は、変数xをnビット左側にシフトすることを示している。また、記号“‖”は論理和のORを示している。記号“=”は、左辺が右辺の結果にステップS7のマスク処理を施して得られることから、厳密にはイコールとは言えないが、近似的にイコールである両辺の関係を表している。
【0063】
次に、演算部105は、図6に示すように、ステップS6において出力された“d”が記憶されている揮発性メモリ102内の64ビット幅のデータ記憶領域の下位32ビットを0でマスクする(ステップS7)。これにより、ステップS7の実行結果の上位32ビットデータが、変数(d(+)a)に対するローテーション基数32の16ビット左ローテーション演算処理の実行結果として得られる。
【0064】
続いて、演算部105は、以下の式(5)に示す演算処理を実行する(ステップS8)。
【0065】
c←c+d 式(5)
次に、演算部105は、ステップS6と同様に、以下の式(6)に示すローテーション演算処理の一部を式(3)に基づいて実行する(ステップS9)。
【0066】
b←(b(+)c)<<<12 式(6)
続いて、演算部105は、ステップS7と同様に、ステップS9において出力された“b”が記憶されているデータ記憶領域の下位32ビットを0でマスクする(ステップS10)。これにより、ステップS10の実行結果の上位32ビットデータが、変数(b(+)c)に対するローテーション基数32の12ビット左ローテーション演算処理の実行結果として得られる。
【0067】
次に、演算部105は、以下の式(7)に示す演算処理を実行する(ステップS11)。
【0068】
a←a+b+(mσr(2i+1)(+)cσr(2i)) 式(7)
続いて、演算部105は、ステップS6と同様に、以下の式(8)に示すローテーション演算処理の一部を式(3)に基づいて実行する(ステップS12)。
【0069】
d←(d(+)a)<<<8 式(8)
次に、演算部105は、ステップS7と同様に、ステップS12において出力された“d”が記憶されているデータ記憶領域の下位32ビットを0でマスクする(ステップS13)。
【0070】
続いて、演算部105は、以下の式(9)に示す演算処理を実行する(ステップS14)。
【0071】
c←c+d 式(9)
次に、演算部105は、ステップS6と同様に、以下の式(10)に示すローテーション演算処理の一部を式(3)に基づいて実行する(ステップS15)。
【0072】
b←(b(+)c)<<<7 式(10)
続いて、演算部105は、ステップS7と同様に、ステップS15において出力された“b”が記憶されているデータ記憶領域の下位32ビットを0でマスクし、ハッシュ値を算出する(ステップS16)。
【0073】
しかる後に、演算部105は、当該算出されたハッシュ値を不揮発性メモリ103内の64ビット幅のデータ記憶領域の上位32ビットに書込む(ステップS17)。
【0074】
なお、全ての識別番号i及びラウンド数rについての演算処理が終了するまで、ステップS5〜ステップS17の処理は繰り返し実行される。例えば、識別番号i及びラウンド数rが共に0を示す場合の演算処理が終了すると、識別番号iが0を示し、ラウンド数rが1を示す場合の演算処理が再度実行される。
【0075】
なお、CPU104が32ビットCPUである場合の動作については、非特許文献1に示される動作と同一であるため、非特許文献1を参照されたい。
【0076】
以上説明した第1の実施形態によれば、計算に必要なデータを64ビット幅のデータ記憶領域の上位32ビットに書込むCPU104と、演算プログラムに含まれるローテーション基数32のnビット左ローテーション演算処理を式(3)と下位32ビットのマスク処理とにより実行する演算部105とを備えた構成により、CPU環境が64ビットCPUであってもBLAKE−256に規定されたハッシュ演算を実行することが可能となり、演算プログラムのソースコードを共通化することができる。
【0077】
また、第1の実施形態によれば、左ローテーション演算処理を下位32ビットのマスク処理により実行する構成により、圧縮関数の演算におけるマスク処理を4回で済ませることができる(ステップS7,S10,S13,S16の4回)。一方、左ローテーション演算処理を上位32ビットのマスク処理により実行する場合、本発明者の検討によれば、圧縮関数の演算におけるマスク処理が8回必要となる。従って、第1の実施形態によれば、左ローテーション演算処理を上位32ビットのマスク処理により実行する場合に比べ、圧縮関数の演算におけるマスク処理を4回減らすことができる。
【0078】
(第2の実施形態)
図7は、第2の実施形態に係るハッシュ関数演算装置の構成の一例を示す機能ブロック図である。ハッシュ関数演算装置20は、プログラム記憶部201、揮発性メモリ202、不揮発性メモリ203、CPU204及び演算部205を備えている。
【0079】
ここで、プログラム記憶部201は、CPU204から読出可能な記憶装置であり、例えばROM(リードオンリーメモリ)であって、SHA−256に規定されたハッシュ演算を示す演算プログラムを記憶している。なお、プログラム記憶部201は、プログラムを外部からインストールして保持する構成でもよい。
【0080】
揮発性メモリ202は、CPU204から読出/書込可能な記憶装置であり、例えばRAM(ランダムアクセスメモリ)であって、初期値、定数、メッセージブロック、計算に必要なデータ及び計算途中のデータ等を記憶している。なお、揮発性メモリ202は、複数の32ビット幅または64ビット幅のデータ記憶領域を有しており、このデータ記憶領域内に計算に必要なデータ等を適宜格納している。また、初期値の語は、「初期ベクトル」又は「初期ハッシュ値(the initial hash value)」としてもよい。
【0081】
不揮発性メモリ203は、CPU204から読出/書込可能な記憶装置であり、例えばEEPROM(電気的に書換え可能なROM)であって、メッセージデータ及びハッシュ値等を記憶している。なお、メッセージデータは、CPU204によってメッセージ長が512ビットの倍数となるようなパティング処理が実行された後に、16個の32ビット長のメッセージブロックに分割され、これらメッセージブロックは揮発性メモリ202に記憶される。
【0082】
また、不揮発性メモリ203は、揮発性メモリ202と同様に、複数の32ビット幅または64ビット幅のデータ記憶領域を有しており、このデータ記憶領域内に計算結果等を適宜記憶している。
【0083】
CPU204は、プログラム記憶部201に記憶された演算プログラムを読出し、この演算プログラムを実行する。また、CPU204は、揮発性メモリ202及び不揮発性メモリ203に記憶されたデータの読出/書込処理を実行する。具体的には、以下の各機能(f204-1)〜(f204-4)をもっている。
【0084】
(f204-1) ハッシュ演算を実行する前に、CPU環境が32ビットCPU環境であるか又は64ビットCPU環境であるかを判定するCPU環境判定機能。
【0085】
(f204-2) CPU環境判定機能による判定結果が64ビットCPUである旨を示すと、プログラム記憶部201に演算プログラムに記述されたハッシュ演算の初期値及び定数を揮発性メモリ202内の64ビット幅のデータ記憶領域の下位32ビットに書込む機能。
【0086】
(f204-3) 不揮発性メモリ203に記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割したメッセージブロックを生成し、当該生成されたメッセージブロックを揮発性メモリ202内の64ビット幅のデータ記憶領域の下位32ビットに書込む機能。
【0087】
(f204-4) 揮発性メモリ202に書込まれた初期値、定数及びメッセージブロックに基づいて、プログラム記憶部201から読出された演算プログラムを実行する機能。
【0088】
なお、CPU環境判定機能による判定結果が32ビットCPUである旨を示すとき、CPU204は、演算プログラムに記述されたハッシュ演算の初期値及び定数を揮発性メモリ202内の32ビット幅のデータ記憶領域に書込む処理と、記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割したメッセージブロックを生成し、当該生成されたメッセージブロックを揮発性メモリ202内の32ビット幅のデータ記憶領域に書込む処理といった非特許文献2に示される処理と同一の処理を実行するため、ここでは詳細な説明を省略する。
【0089】
演算部205は、CPU204によって実行中のハッシュ演算におけるローテーション等の演算を実行する。具体的には、例えば、以下の各機能(f205-1)〜(f205-2)をもっている。
【0090】
(f205-1) CPU204によって実行中のハッシュ演算における変数xに対してのローテーション基数32の右ローテーション演算処理(x>>>n)を実行する右ローテーション演算機能(但し、変数xは、SHA−256に規定された変数T1,T2の処理過程のデータを表す)。
【0091】
(f205-2) 右ローテーション演算実行機能の実行結果を用いてハッシュ演算を更に実行することにより算出されたハッシュ値を不揮発性メモリ203内の64ビット幅のデータ記憶領域の下位32ビットに書込む機能。
【0092】
ここで、右ローテーション演算実行機能(f205-1)は、例えば、以下の各機能(f205-1-1)〜(f205-1-4)をもっている。
【0093】
(f205-1-1) 変数xのnビット右シフト演算処理(x>>n)を実行する右シフト演算実行機能。
【0094】
(f205-1-2) 変数xの(32−n)ビット左シフト演算処理(x<<(32−n))を実行する左シフト演算実行機能。
【0095】
(f205-1-3) 右シフト演算実行機能の実行結果と左シフト演算実行機能の実行結果との論理和演算を実行する論理和演算実行機能。
【0096】
(f205-1-4) 論理和演算実行機能の実行結果の上位32ビットをゼロ値でマスクする処理により、nビット右ローテーション演算処理(x>>>n)の実行結果を得るマスク処理機能。
【0097】
次に、以上のように構成されたハッシュ関数演算装置の動作について、図8のフローチャートと、図9〜図12の模式図とを参照しながら説明する。但し、CPU204が64ビットCPUであると仮定する。
【0098】
始めに、CPU204は、プログラム記憶部201に記憶された演算プログラムを読出し、図9に示すように、当該読出された演算プログラムに記述された初期値H0(0)〜H7(0)及び定数K0(256)〜K63(256)を揮発性メモリ202内の複数の64ビット幅のデータ記憶領域の下位32ビットにそれぞれ書込む(ステップS21)。なお、初期値H0(0)〜H7(0)及び定数K0(256)〜K63(256)の具体的な値については、非特許文献2を参照されたい。
【0099】
続いて、CPU204は、不揮発性メモリ203に記憶されたメッセージデータを読出し、図10aに示すように、当該読出されたメッセージデータのうちの512ビット長のメッセージデータを16個に分割したメッセージブロックM0(i)〜M15(i)を生成し、図10bに示すように、当該生成されたメッセージブロックM0(i)〜M15(i)を揮発性メモリ202内の64ビット幅データ記憶領域の下位32ビットにそれぞれ書込む(ステップS22)。
【0100】
次に、演算部205は、以下の式(11)に示すローテーション演算処理を実行する(ステップS23)。
【0101】
T1=h+Σ1{256}(e)+Ch(e,f,g)+Kt{256}+Wt 式(11)
なお、式(11)に示すローテーション演算処理の出力“T1”は、揮発性メモリ202内の64ビット幅のデータ記憶領域の下位32ビットに記憶される。また、以下に示す演算処理の出力についても、揮発性メモリ202内の64ビット幅データ記憶領域の下位32ビットに適宜記憶されるものとする。
【0102】
なお、Wtはメッセージスケジュールを示し、tはメッセージスケジュールWt及び定数Ktの識別番号を示している。また、a〜hは変数であり、揮発性メモリ202に記憶された初期値H0(0)〜H7(0)のいずれかを示している。更に、Σ1{256}(e)及びCh(e,f,g)は論理関数を示している。なお、メッセージスケジュールWt、論理関数Σ1{256}(e)及びCh(e,f,g)、及び後述する論理関数についての詳細は、非特許文献2を参照されたい。
【0103】
また、演算部205は、演算処理を実行するために必要となる値を揮発性メモリ202から適宜読出し、演算処理を実行する。
【0104】
なお、CPU204が64ビットCPUであると、演算部205は、図11に示すように、式(11)に示したローテーション演算の一部を以下の式(12)に基づいて実行する。
【0105】
x>>>n=x<<n‖x>>(32−n) 式(12)
続いて、演算部205は、図12に示すように、ステップS23において出力された“T1”が記憶されている揮発性メモリ202内の64ビット幅のデータ記憶領域の上位32ビットを0でマスクする(ステップS24)。これにより、ステップS24の実行結果の下位32ビットデータが、変数T1の途中経過のデータに対するローテーション基数32のnビット右ローテーション演算処理の実行結果として得られる。
【0106】
次に、演算部205は、ステップS23と同様に、以下の式(13)に示すローテーション演算処理を式(12)に基づいて実行する(ステップS25)。
【0107】
T2=Σ0{256}(a)+Maj(a,b,c) 式(13)
なお、Σ0{256}(a)及びMaj(a,b,c)は論理関数を示している。
【0108】
続いて、演算部205は、ステップS24と同様に、ステップS25において出力された“T2”が記憶されているデータ記憶領域の上位32ビットを0でマスクする(ステップS26)。これにより、ステップS26の実行結果の下位32ビットデータが、変数T2の途中経過のデータに対するローテーション基数32のnビット右ローテーション演算処理の実行結果として得られる。
【0109】
次に、演算部205は、以下の式(14)に示す演算処理を実行する(ステップS27)。
【0110】
h=g 式(14)
続いて、演算部205は、以下の式(15)に示す演算処理を実行する(ステップS28)。
【0111】
g=f 式(15)
次に、演算部205は、以下の式(16)に示す演算処理を実行する(ステップS29)。
【0112】
f=e 式(16)
続いて、演算部205は、ステップS23と同様に、以下の式(17)に示すローテーション演算処理を式(12)に基づいて実行する(ステップS30)。
【0113】
e=d+T1 式(17)
次に、演算部205は、ステップS24と同様に、ステップS30において出力された“e”が記憶されているデータ記憶領域の上位32ビットを0でマスクする(ステップS31)。
【0114】
続いて、演算部205は、以下の式(18)に示す演算処理を実行する(ステップS32)。
【0115】
d=c 式(18)
次に、演算部205は、以下の式(19)に示す演算処理を実行する(ステップS33)。
【0116】
c=b 式(19)
続いて、演算部205は、以下の式(20)に示す演算処理を実行する(ステップS34)。
【0117】
b=a 式(20)
次に、演算部205は、ステップS23と同様に、以下の式(21)に示すローテーション演算処理を式(12)に基づいて実行する(ステップS35)。
【0118】
a=T1+T2 式(21)
続いて、演算部205は、ステップS24と同様に、ステップS35において出力された“a”が記憶されているデータ記憶領域の上位32ビットを0でマスクし、ハッシュ値を算出する(ステップS36)。
【0119】
次に、CPU204は、ステップS21〜ステップS36の処理が識別番号tを63として実行されたか否かを判定し、この判定結果が実行されていない旨を示す場合には、識別番号tをt+1とした後に、ステップS21〜ステップS36の処理を繰り返し実行するように制御する(ステップS37)。なお、ステップS37において、ステップS21〜ステップS36の処理が識別番号tを63として実行された旨を示す場合には、ステップS38の処理に進む。
【0120】
しかる後に、演算部205は、当該算出されたハッシュ値を不揮発性メモリ203内の64ビット幅のデータ記憶領域の下位32ビットにそれぞれ書込む(ステップS38)。
【0121】
なお、CPU204が32ビットCPUである場合の動作については、非特許文献2に示される動作と同一であるため、非特許文献2を参照されたい。
【0122】
以上説明した第2の実施形態によれば、計算に必要なデータを64ビット幅のデータ記憶領域の下位32ビットに書込むCPU204と、演算プログラムに含まれるローテーション基数32のnビット右ローテーション演算処理を式(12)と上位32ビットのマスク処理とにより実行する演算部205とを備えた構成により、CPU環境が64ビットCPUであってもSHA−256に規定されたハッシュ演算を実行することが可能となり、演算プログラムのソースコードを共通化することができる。
【0123】
また、本発明者の検討によれば、第2の実施形態における右ローテーション演算処理を上位32ビットのマスク処理により実行する構成により、右ローテーション演算処理を下位32ビットのマスク処理により実行する場合に比べ、シフト処理を6回減らすことができる。
【0124】
以上説明した少なくともひとつの実施形態によれば、計算に必要なデータを64ビット幅のデータ記憶領域の上位または下位32ビットに書込む機能と、式(3)または式(12)に基づいてローテーション演算処理の一部を実行し、ローテーション演算処理の一部が実行される毎に、出力が記憶されている64ビット幅データ記憶領域の上位または下位32ビットに対してマスク処理を加える機能とを備えた構成により、32ビットCPU及び64ビットCPUのいずれに利用されても互いに同一のハッシュ値を算出でき、ソースコードの共通化を実現させることができる。
【0125】
補足すると、従来のローテーション演算は、64ビット変数xに対してのローテーション基数64のnビット右ローテーションの場合(0<n<64)、次式によって実行される。
【0126】
x>>>n=x>>n‖x<<(64−n)
一方、第2実施形態のローテーション演算は、64ビット変数xに対してのローテーション基数32のnビット右ローテーションの場合(0<n<32)、次式及び上位32ビットのマスク処理によって実行される。
【0127】
x>>>n=x>>n‖x<<(32−n)
このように、第2実施形態のローテーション演算は、ローテーション時の格納方法だけでなく、シフトさせるビット数を変えている構成により、64ビットCPU環境においてローテーション基数32のローテーション演算結果(=32ビットCPU環境でのローテーション演算結果)を得られる効果がある。このような構成及び効果は、従来のローテーション演算手法から得られるものではない。なお、第2実施形態の右ローテーション演算を例に挙げて説明したが、第1実施形態の左ローテーション演算も同様の構成により、同様の効果を得ることができる。
【0128】
なお、上記の各実施形態に記載した手法は、コンピュータに実行させることのできるプログラムとして、磁気ディスク(フロッピー(登録商標)ディスク、ハードディスクなど)、光ディスク(CD−ROM、DVDなど)、光磁気ディスク(MO)、半導体メモリなどの記憶媒体に格納して頒布することもできる。
【0129】
また、この記憶媒体としては、プログラムを記憶でき、かつコンピュータが読み取り可能な記憶媒体であれば、その記憶形式は何れの形態であっても良い。
【0130】
また、記憶媒体からコンピュータにインストールされたプログラムの指示に基づきコンピュータ上で稼働しているOS(オペレーティングシステム)や、データベース管理ソフト、ネットワークソフト等のMW(ミドルウェア)等が上記実施形態を実現するための各処理の一部を実行しても良い。
【0131】
さらに、各実施形態における記憶媒体は、コンピュータと独立した媒体に限らず、LANやインターネット等により伝送されたプログラムをダウンロードして記憶または一時記憶した記憶媒体も含まれる。
【0132】
また、記憶媒体は1つに限らず、複数の媒体から上記の各実施形態における処理が実行される場合も本発明における記憶媒体に含まれ、媒体構成は何れの構成であっても良い。
【0133】
なお、各実施形態におけるコンピュータは、記憶媒体に記憶されたプログラムに基づき、上記の各実施形態における各処理を実行するものであって、パソコン等の1つからなる装置、複数の装置がネットワーク接続されたシステム等の何れの構成であっても良い。
【0134】
また、各実施形態におけるコンピュータとは、パソコンに限らず、情報処理機器に含まれる演算処理装置、マイコン等も含み、プログラムによって本発明の機能を実現することが可能な機器、装置を総称している。
【0135】
なお、本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0136】
10,20…ハッシュ関数演算装置、101,201…プログラム記憶部、102,202…揮発性メモリ、103,203…不揮発性メモリ、104,204…CPU、105,205…演算部。
【技術分野】
【0001】
本発明の実施形態は、ハッシュ関数演算装置及び演算プログラムに関する。
【背景技術】
【0002】
一般に、ハッシュ関数は、ネットワークを介して通信されるデータの書換えを検出するために用いられ、通信されるデータからハッシュ値と呼ばれる固定長のデータを生成する関数である。この種のハッシュ関数は、ハッシュ値から元のデータが特定されない旨の一方向性の性質をもっている。このようなハッシュ関数には、例えば、SHA−256、SHA−512、BLAKE−256及びBLAKE−512等のアルゴリズムが存在し、ハッシュ値は通信されるデータとハッシュ関数のアルゴリズムとに基づいて生成される。
【0003】
ユーザは、ハッシュ関数を含む演算プログラムをパーソナルコンピュータ(personal computer)等にインストールし、この演算プログラムをパーソナルコンピュータ内のCPU(central processing unit)で実行することによって、データの書換え等を検出可能としている。
【0004】
一方、現行のパーソナルコンピュータに搭載されるCPUは、32ビットCPUまたは64ビットCPUのいずれかであり、32ビットCPUと64ビットCPUとでは処理可能なデータのビット幅が異なっている。このため、ハッシュ関数のアルゴリズムを含む演算プログラムを管理する管理者は、ハッシュ関数の同じアルゴリズムであっても、32ビットCPU用の演算プログラムと、64ビットCPU用の演算プログラムとを別々に用意する必要がある。例えば、BLAKE−256では、32ビット幅のワード長で計算を行うためのソースコードが実装されており、BLAKE−512では、64ビット幅のワード長で計算を行うためのソースコードが実装されている。同様に、SHA−256では、32ビット幅のワード長で計算を行うためのソースコードが実装されており、SHA−512では、64ビット幅のワード長で計算を行うためのソースコードが実装されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2004−53716号公報
【非特許文献】
【0006】
【非特許文献1】Jean-Philippe Aumasson, Luca Henzen, Willi Meier, Raphael C.-W.Phan, “SHA-3 proposal BLAKE”, version1.3 December 16, 2010, pages 1-79, <URL: http://www.131002.net/blake/blake.pdf>.
【非特許文献2】“Federal Information Processing Standards Publication 180-2”, August 1, 2002, pages 1-71, <URL: http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf>.
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、ハッシュ関数の同じアルゴリズムに対し、32ビットCPU用の演算プログラムと64ビットCPU用の演算プログラムとを別々に用意して二重管理することは、通常は特に問題はないが、本発明者の検討によれば、演算プログラムのソースコードのメンテナンス性を低下させる不都合がある。
【0008】
また、この不都合を解消する観点から、本発明者により、64ビットCPUが32ビットCPU用の既存の演算プログラムを実行することにより、ハッシュ関数のアルゴリズムを含む演算プログラムのソースコードの共通化を図る方式を考察してみる。
【0009】
しかしながら、この方式は、32ビットCPUと64ビットCPUとにおけるローテーション演算処理やパティング処理が異なるため、同一のデータから互いに異なるハッシュ値を算出してしまい、ソースコードの共通化を実現できないといった不都合がある。
【0010】
本発明が解決しようとする課題は、32ビットCPU及び64ビットCPUのいずれに利用されても互いに同一のハッシュ値を算出でき、ソースコードの共通化を実現し得るハッシュ関数演算装置及び演算プログラムを提供することを目的とする。
【課題を解決するための手段】
【0011】
実施形態のハッシュ関数演算装置は、BLAKE−256に規定された圧縮関数の演算を含むハッシュ演算によってハッシュ値を算出する。
【0012】
前記ハッシュ関数演算装置においては、プログラム記憶手段が、前記ハッシュ演算を示す演算プログラムを記憶する。
【0013】
前記ハッシュ関数演算装置においては、揮発性メモリが、複数の32ビット幅または64ビット幅のデータ記憶領域を有して、初期値、定数、メッセージブロック及び処理過程のデータを記憶する。
【0014】
前記ハッシュ関数演算装置においては、不揮発性メモリが、メッセージデータ及びハッシュ値を記憶する。
【0015】
前記ハッシュ関数演算装置においては、CPU環境判定手段が、前記ハッシュ演算を実行する前に、CPU環境が32ビットCPU環境であるか又は64ビットCPU環境であるかを判定する。
【0016】
前記ハッシュ関数演算装置においては、前記CPU環境判定手段による判定結果が64ビットCPUである旨を示すと、前記演算プログラムに記述された圧縮関数の演算の初期値及び定数を前記64ビット幅のデータ記憶領域の上位32ビットに書込む。
【0017】
前記ハッシュ関数演算装置においては、前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記64ビット幅のデータ記憶領域の上位32ビットに書込む。
【0018】
前記ハッシュ関数演算装置においては、前記記憶された初期値、定数及びメッセージブロックに基づいて、前記演算プログラムに記述されたハッシュ演算を実行する。
【0019】
前記ハッシュ関数演算装置においては、左ローテーション演算実行手段が、前記実行中のハッシュ演算における前記圧縮関数の演算において、当該圧縮関数の変数xに対してのローテーション基数32のnビット左ローテーション演算処理(x<<<n)を実行する(但し、変数xは、BLAKE−256に規定された変数d,bの処理過程のデータを表す)。
【0020】
前記ハッシュ関数演算装置においては、前記左ローテーション演算実行手段の実行結果を用いて前記圧縮関数の演算を含むハッシュ演算を更に実行することにより算出されたハッシュ値を前記不揮発性メモリに書込む。
【0021】
ここで、前記左ローテーション演算実行手段は、左シフト演算実行手段、右シフト演算実行手段、論理和演算実行手段及びマスク処理手段を備えている。
【0022】
前記左シフト演算実行手段は、前記変数xのnビット左シフト演算処理(x<<n)を実行する。
【0023】
前記右シフト演算実行手段は、前記変数xの(32−n)ビット右シフト演算処理(x>>(32−n))を実行する。
【0024】
前記論理和演算実行手段は、前記左シフト演算実行手段の実行結果と前記右シフト演算実行手段の実行結果との論理和演算を実行する。
【0025】
前記マスク処理手段は、前記論理和演算実行手段の実行結果の下位32ビットをゼロ値でマスクする処理により、前記nビット左ローテーション演算処理(x<<<n)の実行結果を得る。
【図面の簡単な説明】
【0026】
【図1】第1の実施形態に係るハッシュ関数演算装置の構成の一例を示す機能ブロック図である。
【図2】同実施形態におけるハッシュ関数演算装置の動作の一例を示すフローチャートである。
【図3】同実施形態における揮発性メモリ内の64ビット幅のデータ記憶領域に記憶されたデータの一例を示す模式図である。
【図4】同実施形態におけるパティング処理の一例を示す模式図である。
【図5】同実施形態におけるローテーション演算処理の一例を示す模式図である。
【図6】同実施形態におけるマスク処理の一例を示す模式図である。
【図7】第2の実施形態に係るハッシュ関数演算装置の構成の一例を示す機能ブロック図である。
【図8】同実施形態におけるハッシュ関数演算装置の動作の一例を示すフローチャートである。
【図9】同実施形態における揮発性メモリ内の64ビット幅のデータ記憶領域に記憶されたデータの一例を示す模式図である。
【図10】同実施形態におけるパティング処理の一例を示す模式図である。
【図11】同実施形態におけるローテーション演算処理の一例を示す模式図である。
【図12】同実施形態におけるマスク処理の一例を示す模式図である。
【発明を実施するための形態】
【0027】
以下、各実施形態について図面を参照して説明する。なお、以下のハッシュ関数演算装置は、ハードウェア構成、又はハードウェア資源とソフトウェアとの組合せ構成のいずれでも実施可能となっている。組合せ構成のソフトウェアとしては、予めネットワーク又は記憶媒体からコンピュータにインストールされ、ハッシュ関数演算装置の機能を当該コンピュータに実現させるための演算プログラムが用いられる。
【0028】
(第1の実施形態)
図1は、第1の実施形態に係るハッシュ関数演算装置の構成の一例を示す機能ブロック図である。ハッシュ関数演算装置10は、プログラム記憶部101、揮発性メモリ102、不揮発性メモリ103、CPU104及び演算部105を備えている。
【0029】
ここで、プログラム記憶部101は、CPU104から読出可能な記憶装置であり、例えばROM(リードオンリーメモリ)であって、BLAKE−256に規定された圧縮関数の演算を含むハッシュ演算を示す演算プログラムを記憶している。なお、プログラム記憶部101は、演算プログラムを外部からインストールして保持する構成でもよい。
【0030】
揮発性メモリ102は、CPU104から読出/書込可能な記憶装置であり、例えばRAM(ランダムアクセスメモリ)であって、初期値、定数、メッセージブロック、計算に必要なデータ及び計算途中のデータ等を記憶している。なお、揮発性メモリ102は、複数の32ビット幅または64ビット幅のデータ記憶領域を有しており、このデータ記憶領域内に計算に必要なデータ等を適宜格納している。また、初期値の語は、「初期ベクトル」としてもよい。
【0031】
不揮発性メモリ103は、CPU104から読出/書込可能な記憶装置であり、例えばEEPROM(電気的に書換え可能なROM)であって、メッセージデータ及びハッシュ値等を記憶している。なお、メッセージデータは、CPU104によってメッセージ長が512ビットの倍数となるようなパティング処理が実行された後に、16個の32ビット長のメッセージブロックに分割され、これらメッセージブロックは揮発性メモリ102に記憶される。
【0032】
また、不揮発性メモリ103は、揮発性メモリ102と同様に、複数の32ビット幅または64ビット幅のデータ記憶領域を有しており、このデータ記憶領域内に計算結果等を適宜記憶している。
【0033】
CPU104は、プログラム記憶部101に記憶された演算プログラムを読出し、この演算プログラムを実行する。また、CPU104は、揮発性メモリ102及び不揮発性メモリ103に記憶されたデータの読出/書込処理を実行する。具体的には、以下の各機能(f104-1)〜(f104-4)をもっている。
【0034】
(f104-1) ハッシュ演算を実行する前に、CPU環境が32ビットCPU環境であるか又は64ビットCPU環境であるかを判定するCPU環境判定機能。
【0035】
(f104-2) CPU環境判定機能による判定結果が64ビットCPUである旨を示すと、プログラム記憶部101に記憶された演算プログラムに記述された圧縮関数の演算の初期値及び定数を揮発性メモリ102内の64ビット幅のデータ記憶領域の上位32ビットに書込む機能。
【0036】
(f104-3) 不揮発性メモリ103に記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割したメッセージブロックを生成し、当該生成されたメッセージブロックを揮発性メモリ102内の64ビット幅のデータ記憶領域の上位32ビットに書込む機能。
【0037】
(f104-4) 揮発性メモリ102に書込まれた初期値、定数及びメッセージブロックに基づいて、演算プログラムに記述されたハッシュ演算を実行する機能。
【0038】
なお、CPU環境判定機能による判定結果が32ビットCPUである旨を示すとき、CPU104は、演算プログラムに記述された圧縮関数の演算の初期値及び定数を揮発性メモリ102内の32ビット幅のデータ記憶領域に書込む処理と、記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割したメッセージブロックを生成し、当該生成されたメッセージブロックを揮発性メモリ102内の32ビット幅のデータ記憶領域に書込む処理といった非特許文献1に示される処理と同一の処理を実行するため、ここでは詳細な説明を省略する。
【0039】
演算部105は、CPU104によって実行中のハッシュ演算における圧縮関数の演算を実行する。具体的には、例えば、以下の各機能(f105-1)〜(f105-2)をもっている。
【0040】
(f105-1) CPU104によって実行中のハッシュ演算における圧縮関数の演算において、当該圧縮関数の変数xに対してのローテーション基数32のnビット左ローテーション演算処理(x<<<n)を実行する左ローテーション演算実行機能(但し、変数xは、BLAKE−256に規定された変数d,bの処理過程のデータを表す)。
【0041】
(f105-2) 左ローテーション演算実行機能の実行結果を用いて圧縮関数の演算を含むハッシュ演算を更に実行することにより算出されたハッシュ値を不揮発性メモリ103内の64ビット幅のデータ記憶領域の上位32ビットに書込む機能。
【0042】
ここで、左ローテーション演算実行機能(f105-1)は、例えば、以下の各機能(f105-1-1)〜(f105-1-4)をもっている。
【0043】
(f105-1-1) 変数xのnビット左シフト演算処理(x<<n)を実行する左シフト演算実行機能。
【0044】
(f105-1-2) 変数xの(32−n)ビット右シフト演算処理(x>>(32−n))を実行する右シフト演算実行機能。
【0045】
(f105-1-3) 左シフト演算実行機能の実行結果と右シフト演算実行機能の実行結果との論理和演算を実行する論理和演算実行機能。
【0046】
(f105-1-4) 論理和演算実行機能の実行結果の下位32ビットをゼロ値でマスクする処理により、nビット左ローテーション演算処理(x<<<n)の実行結果を得るマスク処理機能。
【0047】
次に、以上のように構成されたハッシュ関数演算装置の動作について、図2のフローチャートと、図3〜図6の模式図とを参照しながら説明する。但し、CPU104が64ビットCPUであると仮定する。
【0048】
始めに、CPU104は、プログラム記憶部101に記憶された演算プログラムを読出し、図3に示すように、当該読出された演算プログラムに記述された初期値IV0〜IV7及び定数c0〜c15を揮発性メモリ102内の複数の64ビット幅のデータ記憶領域の上位32ビットにそれぞれ書込む(ステップS1)。なお、初期値IV0〜IV7及び定数c0〜c15の具体的な値については、非特許文献1を参照されたい。
【0049】
続いて、CPU104は、当該読出された演算プログラムに記述された定数ν0〜ν15を、ステップS1と同様に、揮発性メモリ102内の64ビット幅データ記憶領域の上位32ビットにそれぞれ書込む(ステップS2)。なお、定数ν0〜ν15の具体的な値については、非特許文献1を参照されたい。
【0050】
次に、CPU104は、当該読出された演算プログラムに記述された変数σと圧縮関数Giとの対応情報を揮発性メモリ102に書込む(ステップS3)。なお、変数σと圧縮関数Giとの対応情報についての詳細は、非特許文献1を参照されたい。
【0051】
続いて、CPU104は、不揮発性メモリ103に記憶されたメッセージデータを読出し、図4aに示すように、当該読出されたメッセージデータのうちの512ビット長のメッセージデータを16個に分割したメッセージブロックm0〜m15を生成し、図4bに示すように、当該生成されたメッセージブロックm0〜m15を揮発性メモリ102内の64ビット幅データ記憶領域の上位32ビットにそれぞれ書込む(ステップS4)。
【0052】
次に、演算部105は、以下の式(1)に示す演算処理を実行する(ステップS5)。
【0053】
a←a+b+(mσr(2i)(+)cσr(2i+1)) 式(1)
なお、式(1)に示す演算処理の出力“a”は、揮発性メモリ102内の64ビット幅のデータ記憶領域の上位32ビットに記憶される。また、以下に示す演算処理の出力についても、揮発性メモリ102内の64ビット幅データ記憶領域の上位32ビットに適宜記憶されるものとする。
【0054】
なお、iは圧縮関数Giの識別番号を示し、0〜7のいずれかの値を示す。また、a〜dは変数であり、揮発性メモリ102に記憶されたν0〜ν15のいずれかを示す。更に、rはラウンド数を示し、0〜15のいずれかの値を示す。
【0055】
また、式(1)において用いられた記号“(+)”は排他的論理和のXORを示し、記号“←”は右辺を左辺に代入することを示している。
【0056】
ここで、識別番号i及びラウンド数rが共に0を示すと仮定した場合の演算処理について説明する。識別番号i及びラウンド数rが0を示すと仮定すると、演算部105は、以下の式(1)´に示す演算処理を実行する。
【0057】
ν0←ν0+ν4+(m0(+)c0) 式(1)´
なお、演算部105は、式(1)´に示す演算処理を実行するために、定数c0、定数ν0,ν4、及びメッセージブロックm0を揮発性メモリ102から読出し、演算処理を実行する。
【0058】
以下に示す演算処理についても、演算部105は、演算処理を実行するために必要となる値を揮発性メモリ102から適宜読出し、演算処理を実行する。
【0059】
続いて、演算部105は、以下の式(2)に示す演算処理を実行する(ステップS6)。
【0060】
d←(d(+)a)<<<16 式(2)
なお、CPU104が64ビットCPUであると、演算部105は、図5に示すように、式(2)に示したローテーション演算の一部を以下の式(3)に基づいて実行する。
【0061】
x<<<n=x<<n‖x>>(32−n) 式(3)
すなわち、演算部105は、以下の式(4)に示すように、ローテーション演算処理の一部を実行する。
【0062】
(d(+)a)<<<16=(d(+)a)<<16‖(d(+)a)>>(32−16) 式(4)
なお、式(3)に用いられた記号“<<<”は左方向にローテーションすることを示し、記号“<<”は左側にシフトすることを示し、記号“>>”は右側にシフトすることを示している。例えば、“x<<n”は、変数xをnビット左側にシフトすることを示している。また、記号“‖”は論理和のORを示している。記号“=”は、左辺が右辺の結果にステップS7のマスク処理を施して得られることから、厳密にはイコールとは言えないが、近似的にイコールである両辺の関係を表している。
【0063】
次に、演算部105は、図6に示すように、ステップS6において出力された“d”が記憶されている揮発性メモリ102内の64ビット幅のデータ記憶領域の下位32ビットを0でマスクする(ステップS7)。これにより、ステップS7の実行結果の上位32ビットデータが、変数(d(+)a)に対するローテーション基数32の16ビット左ローテーション演算処理の実行結果として得られる。
【0064】
続いて、演算部105は、以下の式(5)に示す演算処理を実行する(ステップS8)。
【0065】
c←c+d 式(5)
次に、演算部105は、ステップS6と同様に、以下の式(6)に示すローテーション演算処理の一部を式(3)に基づいて実行する(ステップS9)。
【0066】
b←(b(+)c)<<<12 式(6)
続いて、演算部105は、ステップS7と同様に、ステップS9において出力された“b”が記憶されているデータ記憶領域の下位32ビットを0でマスクする(ステップS10)。これにより、ステップS10の実行結果の上位32ビットデータが、変数(b(+)c)に対するローテーション基数32の12ビット左ローテーション演算処理の実行結果として得られる。
【0067】
次に、演算部105は、以下の式(7)に示す演算処理を実行する(ステップS11)。
【0068】
a←a+b+(mσr(2i+1)(+)cσr(2i)) 式(7)
続いて、演算部105は、ステップS6と同様に、以下の式(8)に示すローテーション演算処理の一部を式(3)に基づいて実行する(ステップS12)。
【0069】
d←(d(+)a)<<<8 式(8)
次に、演算部105は、ステップS7と同様に、ステップS12において出力された“d”が記憶されているデータ記憶領域の下位32ビットを0でマスクする(ステップS13)。
【0070】
続いて、演算部105は、以下の式(9)に示す演算処理を実行する(ステップS14)。
【0071】
c←c+d 式(9)
次に、演算部105は、ステップS6と同様に、以下の式(10)に示すローテーション演算処理の一部を式(3)に基づいて実行する(ステップS15)。
【0072】
b←(b(+)c)<<<7 式(10)
続いて、演算部105は、ステップS7と同様に、ステップS15において出力された“b”が記憶されているデータ記憶領域の下位32ビットを0でマスクし、ハッシュ値を算出する(ステップS16)。
【0073】
しかる後に、演算部105は、当該算出されたハッシュ値を不揮発性メモリ103内の64ビット幅のデータ記憶領域の上位32ビットに書込む(ステップS17)。
【0074】
なお、全ての識別番号i及びラウンド数rについての演算処理が終了するまで、ステップS5〜ステップS17の処理は繰り返し実行される。例えば、識別番号i及びラウンド数rが共に0を示す場合の演算処理が終了すると、識別番号iが0を示し、ラウンド数rが1を示す場合の演算処理が再度実行される。
【0075】
なお、CPU104が32ビットCPUである場合の動作については、非特許文献1に示される動作と同一であるため、非特許文献1を参照されたい。
【0076】
以上説明した第1の実施形態によれば、計算に必要なデータを64ビット幅のデータ記憶領域の上位32ビットに書込むCPU104と、演算プログラムに含まれるローテーション基数32のnビット左ローテーション演算処理を式(3)と下位32ビットのマスク処理とにより実行する演算部105とを備えた構成により、CPU環境が64ビットCPUであってもBLAKE−256に規定されたハッシュ演算を実行することが可能となり、演算プログラムのソースコードを共通化することができる。
【0077】
また、第1の実施形態によれば、左ローテーション演算処理を下位32ビットのマスク処理により実行する構成により、圧縮関数の演算におけるマスク処理を4回で済ませることができる(ステップS7,S10,S13,S16の4回)。一方、左ローテーション演算処理を上位32ビットのマスク処理により実行する場合、本発明者の検討によれば、圧縮関数の演算におけるマスク処理が8回必要となる。従って、第1の実施形態によれば、左ローテーション演算処理を上位32ビットのマスク処理により実行する場合に比べ、圧縮関数の演算におけるマスク処理を4回減らすことができる。
【0078】
(第2の実施形態)
図7は、第2の実施形態に係るハッシュ関数演算装置の構成の一例を示す機能ブロック図である。ハッシュ関数演算装置20は、プログラム記憶部201、揮発性メモリ202、不揮発性メモリ203、CPU204及び演算部205を備えている。
【0079】
ここで、プログラム記憶部201は、CPU204から読出可能な記憶装置であり、例えばROM(リードオンリーメモリ)であって、SHA−256に規定されたハッシュ演算を示す演算プログラムを記憶している。なお、プログラム記憶部201は、プログラムを外部からインストールして保持する構成でもよい。
【0080】
揮発性メモリ202は、CPU204から読出/書込可能な記憶装置であり、例えばRAM(ランダムアクセスメモリ)であって、初期値、定数、メッセージブロック、計算に必要なデータ及び計算途中のデータ等を記憶している。なお、揮発性メモリ202は、複数の32ビット幅または64ビット幅のデータ記憶領域を有しており、このデータ記憶領域内に計算に必要なデータ等を適宜格納している。また、初期値の語は、「初期ベクトル」又は「初期ハッシュ値(the initial hash value)」としてもよい。
【0081】
不揮発性メモリ203は、CPU204から読出/書込可能な記憶装置であり、例えばEEPROM(電気的に書換え可能なROM)であって、メッセージデータ及びハッシュ値等を記憶している。なお、メッセージデータは、CPU204によってメッセージ長が512ビットの倍数となるようなパティング処理が実行された後に、16個の32ビット長のメッセージブロックに分割され、これらメッセージブロックは揮発性メモリ202に記憶される。
【0082】
また、不揮発性メモリ203は、揮発性メモリ202と同様に、複数の32ビット幅または64ビット幅のデータ記憶領域を有しており、このデータ記憶領域内に計算結果等を適宜記憶している。
【0083】
CPU204は、プログラム記憶部201に記憶された演算プログラムを読出し、この演算プログラムを実行する。また、CPU204は、揮発性メモリ202及び不揮発性メモリ203に記憶されたデータの読出/書込処理を実行する。具体的には、以下の各機能(f204-1)〜(f204-4)をもっている。
【0084】
(f204-1) ハッシュ演算を実行する前に、CPU環境が32ビットCPU環境であるか又は64ビットCPU環境であるかを判定するCPU環境判定機能。
【0085】
(f204-2) CPU環境判定機能による判定結果が64ビットCPUである旨を示すと、プログラム記憶部201に演算プログラムに記述されたハッシュ演算の初期値及び定数を揮発性メモリ202内の64ビット幅のデータ記憶領域の下位32ビットに書込む機能。
【0086】
(f204-3) 不揮発性メモリ203に記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割したメッセージブロックを生成し、当該生成されたメッセージブロックを揮発性メモリ202内の64ビット幅のデータ記憶領域の下位32ビットに書込む機能。
【0087】
(f204-4) 揮発性メモリ202に書込まれた初期値、定数及びメッセージブロックに基づいて、プログラム記憶部201から読出された演算プログラムを実行する機能。
【0088】
なお、CPU環境判定機能による判定結果が32ビットCPUである旨を示すとき、CPU204は、演算プログラムに記述されたハッシュ演算の初期値及び定数を揮発性メモリ202内の32ビット幅のデータ記憶領域に書込む処理と、記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割したメッセージブロックを生成し、当該生成されたメッセージブロックを揮発性メモリ202内の32ビット幅のデータ記憶領域に書込む処理といった非特許文献2に示される処理と同一の処理を実行するため、ここでは詳細な説明を省略する。
【0089】
演算部205は、CPU204によって実行中のハッシュ演算におけるローテーション等の演算を実行する。具体的には、例えば、以下の各機能(f205-1)〜(f205-2)をもっている。
【0090】
(f205-1) CPU204によって実行中のハッシュ演算における変数xに対してのローテーション基数32の右ローテーション演算処理(x>>>n)を実行する右ローテーション演算機能(但し、変数xは、SHA−256に規定された変数T1,T2の処理過程のデータを表す)。
【0091】
(f205-2) 右ローテーション演算実行機能の実行結果を用いてハッシュ演算を更に実行することにより算出されたハッシュ値を不揮発性メモリ203内の64ビット幅のデータ記憶領域の下位32ビットに書込む機能。
【0092】
ここで、右ローテーション演算実行機能(f205-1)は、例えば、以下の各機能(f205-1-1)〜(f205-1-4)をもっている。
【0093】
(f205-1-1) 変数xのnビット右シフト演算処理(x>>n)を実行する右シフト演算実行機能。
【0094】
(f205-1-2) 変数xの(32−n)ビット左シフト演算処理(x<<(32−n))を実行する左シフト演算実行機能。
【0095】
(f205-1-3) 右シフト演算実行機能の実行結果と左シフト演算実行機能の実行結果との論理和演算を実行する論理和演算実行機能。
【0096】
(f205-1-4) 論理和演算実行機能の実行結果の上位32ビットをゼロ値でマスクする処理により、nビット右ローテーション演算処理(x>>>n)の実行結果を得るマスク処理機能。
【0097】
次に、以上のように構成されたハッシュ関数演算装置の動作について、図8のフローチャートと、図9〜図12の模式図とを参照しながら説明する。但し、CPU204が64ビットCPUであると仮定する。
【0098】
始めに、CPU204は、プログラム記憶部201に記憶された演算プログラムを読出し、図9に示すように、当該読出された演算プログラムに記述された初期値H0(0)〜H7(0)及び定数K0(256)〜K63(256)を揮発性メモリ202内の複数の64ビット幅のデータ記憶領域の下位32ビットにそれぞれ書込む(ステップS21)。なお、初期値H0(0)〜H7(0)及び定数K0(256)〜K63(256)の具体的な値については、非特許文献2を参照されたい。
【0099】
続いて、CPU204は、不揮発性メモリ203に記憶されたメッセージデータを読出し、図10aに示すように、当該読出されたメッセージデータのうちの512ビット長のメッセージデータを16個に分割したメッセージブロックM0(i)〜M15(i)を生成し、図10bに示すように、当該生成されたメッセージブロックM0(i)〜M15(i)を揮発性メモリ202内の64ビット幅データ記憶領域の下位32ビットにそれぞれ書込む(ステップS22)。
【0100】
次に、演算部205は、以下の式(11)に示すローテーション演算処理を実行する(ステップS23)。
【0101】
T1=h+Σ1{256}(e)+Ch(e,f,g)+Kt{256}+Wt 式(11)
なお、式(11)に示すローテーション演算処理の出力“T1”は、揮発性メモリ202内の64ビット幅のデータ記憶領域の下位32ビットに記憶される。また、以下に示す演算処理の出力についても、揮発性メモリ202内の64ビット幅データ記憶領域の下位32ビットに適宜記憶されるものとする。
【0102】
なお、Wtはメッセージスケジュールを示し、tはメッセージスケジュールWt及び定数Ktの識別番号を示している。また、a〜hは変数であり、揮発性メモリ202に記憶された初期値H0(0)〜H7(0)のいずれかを示している。更に、Σ1{256}(e)及びCh(e,f,g)は論理関数を示している。なお、メッセージスケジュールWt、論理関数Σ1{256}(e)及びCh(e,f,g)、及び後述する論理関数についての詳細は、非特許文献2を参照されたい。
【0103】
また、演算部205は、演算処理を実行するために必要となる値を揮発性メモリ202から適宜読出し、演算処理を実行する。
【0104】
なお、CPU204が64ビットCPUであると、演算部205は、図11に示すように、式(11)に示したローテーション演算の一部を以下の式(12)に基づいて実行する。
【0105】
x>>>n=x<<n‖x>>(32−n) 式(12)
続いて、演算部205は、図12に示すように、ステップS23において出力された“T1”が記憶されている揮発性メモリ202内の64ビット幅のデータ記憶領域の上位32ビットを0でマスクする(ステップS24)。これにより、ステップS24の実行結果の下位32ビットデータが、変数T1の途中経過のデータに対するローテーション基数32のnビット右ローテーション演算処理の実行結果として得られる。
【0106】
次に、演算部205は、ステップS23と同様に、以下の式(13)に示すローテーション演算処理を式(12)に基づいて実行する(ステップS25)。
【0107】
T2=Σ0{256}(a)+Maj(a,b,c) 式(13)
なお、Σ0{256}(a)及びMaj(a,b,c)は論理関数を示している。
【0108】
続いて、演算部205は、ステップS24と同様に、ステップS25において出力された“T2”が記憶されているデータ記憶領域の上位32ビットを0でマスクする(ステップS26)。これにより、ステップS26の実行結果の下位32ビットデータが、変数T2の途中経過のデータに対するローテーション基数32のnビット右ローテーション演算処理の実行結果として得られる。
【0109】
次に、演算部205は、以下の式(14)に示す演算処理を実行する(ステップS27)。
【0110】
h=g 式(14)
続いて、演算部205は、以下の式(15)に示す演算処理を実行する(ステップS28)。
【0111】
g=f 式(15)
次に、演算部205は、以下の式(16)に示す演算処理を実行する(ステップS29)。
【0112】
f=e 式(16)
続いて、演算部205は、ステップS23と同様に、以下の式(17)に示すローテーション演算処理を式(12)に基づいて実行する(ステップS30)。
【0113】
e=d+T1 式(17)
次に、演算部205は、ステップS24と同様に、ステップS30において出力された“e”が記憶されているデータ記憶領域の上位32ビットを0でマスクする(ステップS31)。
【0114】
続いて、演算部205は、以下の式(18)に示す演算処理を実行する(ステップS32)。
【0115】
d=c 式(18)
次に、演算部205は、以下の式(19)に示す演算処理を実行する(ステップS33)。
【0116】
c=b 式(19)
続いて、演算部205は、以下の式(20)に示す演算処理を実行する(ステップS34)。
【0117】
b=a 式(20)
次に、演算部205は、ステップS23と同様に、以下の式(21)に示すローテーション演算処理を式(12)に基づいて実行する(ステップS35)。
【0118】
a=T1+T2 式(21)
続いて、演算部205は、ステップS24と同様に、ステップS35において出力された“a”が記憶されているデータ記憶領域の上位32ビットを0でマスクし、ハッシュ値を算出する(ステップS36)。
【0119】
次に、CPU204は、ステップS21〜ステップS36の処理が識別番号tを63として実行されたか否かを判定し、この判定結果が実行されていない旨を示す場合には、識別番号tをt+1とした後に、ステップS21〜ステップS36の処理を繰り返し実行するように制御する(ステップS37)。なお、ステップS37において、ステップS21〜ステップS36の処理が識別番号tを63として実行された旨を示す場合には、ステップS38の処理に進む。
【0120】
しかる後に、演算部205は、当該算出されたハッシュ値を不揮発性メモリ203内の64ビット幅のデータ記憶領域の下位32ビットにそれぞれ書込む(ステップS38)。
【0121】
なお、CPU204が32ビットCPUである場合の動作については、非特許文献2に示される動作と同一であるため、非特許文献2を参照されたい。
【0122】
以上説明した第2の実施形態によれば、計算に必要なデータを64ビット幅のデータ記憶領域の下位32ビットに書込むCPU204と、演算プログラムに含まれるローテーション基数32のnビット右ローテーション演算処理を式(12)と上位32ビットのマスク処理とにより実行する演算部205とを備えた構成により、CPU環境が64ビットCPUであってもSHA−256に規定されたハッシュ演算を実行することが可能となり、演算プログラムのソースコードを共通化することができる。
【0123】
また、本発明者の検討によれば、第2の実施形態における右ローテーション演算処理を上位32ビットのマスク処理により実行する構成により、右ローテーション演算処理を下位32ビットのマスク処理により実行する場合に比べ、シフト処理を6回減らすことができる。
【0124】
以上説明した少なくともひとつの実施形態によれば、計算に必要なデータを64ビット幅のデータ記憶領域の上位または下位32ビットに書込む機能と、式(3)または式(12)に基づいてローテーション演算処理の一部を実行し、ローテーション演算処理の一部が実行される毎に、出力が記憶されている64ビット幅データ記憶領域の上位または下位32ビットに対してマスク処理を加える機能とを備えた構成により、32ビットCPU及び64ビットCPUのいずれに利用されても互いに同一のハッシュ値を算出でき、ソースコードの共通化を実現させることができる。
【0125】
補足すると、従来のローテーション演算は、64ビット変数xに対してのローテーション基数64のnビット右ローテーションの場合(0<n<64)、次式によって実行される。
【0126】
x>>>n=x>>n‖x<<(64−n)
一方、第2実施形態のローテーション演算は、64ビット変数xに対してのローテーション基数32のnビット右ローテーションの場合(0<n<32)、次式及び上位32ビットのマスク処理によって実行される。
【0127】
x>>>n=x>>n‖x<<(32−n)
このように、第2実施形態のローテーション演算は、ローテーション時の格納方法だけでなく、シフトさせるビット数を変えている構成により、64ビットCPU環境においてローテーション基数32のローテーション演算結果(=32ビットCPU環境でのローテーション演算結果)を得られる効果がある。このような構成及び効果は、従来のローテーション演算手法から得られるものではない。なお、第2実施形態の右ローテーション演算を例に挙げて説明したが、第1実施形態の左ローテーション演算も同様の構成により、同様の効果を得ることができる。
【0128】
なお、上記の各実施形態に記載した手法は、コンピュータに実行させることのできるプログラムとして、磁気ディスク(フロッピー(登録商標)ディスク、ハードディスクなど)、光ディスク(CD−ROM、DVDなど)、光磁気ディスク(MO)、半導体メモリなどの記憶媒体に格納して頒布することもできる。
【0129】
また、この記憶媒体としては、プログラムを記憶でき、かつコンピュータが読み取り可能な記憶媒体であれば、その記憶形式は何れの形態であっても良い。
【0130】
また、記憶媒体からコンピュータにインストールされたプログラムの指示に基づきコンピュータ上で稼働しているOS(オペレーティングシステム)や、データベース管理ソフト、ネットワークソフト等のMW(ミドルウェア)等が上記実施形態を実現するための各処理の一部を実行しても良い。
【0131】
さらに、各実施形態における記憶媒体は、コンピュータと独立した媒体に限らず、LANやインターネット等により伝送されたプログラムをダウンロードして記憶または一時記憶した記憶媒体も含まれる。
【0132】
また、記憶媒体は1つに限らず、複数の媒体から上記の各実施形態における処理が実行される場合も本発明における記憶媒体に含まれ、媒体構成は何れの構成であっても良い。
【0133】
なお、各実施形態におけるコンピュータは、記憶媒体に記憶されたプログラムに基づき、上記の各実施形態における各処理を実行するものであって、パソコン等の1つからなる装置、複数の装置がネットワーク接続されたシステム等の何れの構成であっても良い。
【0134】
また、各実施形態におけるコンピュータとは、パソコンに限らず、情報処理機器に含まれる演算処理装置、マイコン等も含み、プログラムによって本発明の機能を実現することが可能な機器、装置を総称している。
【0135】
なお、本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0136】
10,20…ハッシュ関数演算装置、101,201…プログラム記憶部、102,202…揮発性メモリ、103,203…不揮発性メモリ、104,204…CPU、105,205…演算部。
【特許請求の範囲】
【請求項1】
BLAKE−256に規定された圧縮関数の演算を含むハッシュ演算によってハッシュ値を算出するハッシュ関数演算装置であって、
前記ハッシュ演算を示す演算プログラムを記憶するプログラム記憶手段と、
複数の32ビット幅または64ビット幅のデータ記憶領域を有して、初期値、定数、メッセージブロック及び処理過程のデータを記憶する揮発性メモリと、
メッセージデータ及びハッシュ値を記憶する不揮発性メモリと、
前記ハッシュ演算を実行する前に、CPU環境が32ビットCPU環境であるか又は64ビットCPU環境であるかを判定するCPU環境判定手段と、
前記CPU環境判定手段による判定結果が64ビットCPU環境である旨を示すと、前記演算プログラムに記述された圧縮関数の演算の初期値及び定数を前記64ビット幅のデータ記憶領域の上位32ビットに書込む手段と、
前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記64ビット幅のデータ記憶領域の上位32ビットに書込む手段と、
前記記憶された初期値、定数及びメッセージブロックに基づいて、前記演算プログラムに記述されたハッシュ演算を実行する手段と、
前記実行中のハッシュ演算における前記圧縮関数の演算において、当該圧縮関数の変数xに対してのローテーション基数32のnビット左ローテーション演算処理(x<<<n)を実行する左ローテーション演算実行手段(但し、変数xは、BLAKE−256に規定された変数d,bの処理過程のデータを表す)と、
前記左ローテーション演算実行手段の実行結果を用いて前記圧縮関数の演算を含むハッシュ演算を更に実行することにより算出されたハッシュ値を前記不揮発性メモリに書込む手段と
を備え、
前記左ローテーション演算実行手段は、
前記変数xのnビット左シフト演算処理(x<<n)を実行する左シフト演算実行手段と、
前記変数xの(32−n)ビット右シフト演算処理(x>>(32−n))を実行する右シフト演算実行手段と、
前記左シフト演算実行手段の実行結果と前記右シフト演算実行手段の実行結果との論理和演算を実行する論理和演算実行手段と、
前記論理和演算実行手段の実行結果の下位32ビットをゼロ値でマスクする処理により、前記nビット左ローテーション演算処理(x<<<n)の実行結果を得るマスク処理手段と
を備えたことを特徴とするハッシュ関数演算装置。
【請求項2】
請求項1に記載のハッシュ関数演算装置において、
前記CPU環境判定手段による判定結果が32ビットCPU環境である旨を示すと、前記演算プログラムに記述された圧縮関数の演算の初期値及び定数を前記32ビット幅のデータ記憶領域に書込む手段と、
前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記32ビット幅のデータ記憶領域に書込む手段と
を更に備えたことを特徴とするハッシュ関数演算装置。
【請求項3】
コンピュータにハッシュ演算を行なわせる演算プログラムを記憶するプログラム記憶手段と、複数の32ビット幅または64ビット幅のデータ記憶領域を有して、初期値、定数、メッセージブロック及び処理過程のデータを記憶する揮発性メモリと、メッセージデータ及びハッシュ値を記憶する不揮発性メモリとを備え、前記ハッシュ演算によってハッシュ値を算出するハッシュ関数演算装置に用いられ、BLAKE−256に規定された圧縮関数の演算を含むハッシュ演算を行なわせる演算プログラムであって、
前記ハッシュ関数演算装置を、
前記ハッシュ演算を実行する前に、CPU環境が32ビットCPU環境であるか又は64ビットCPU環境であるかを判定するCPU環境判定手段、
前記CPU環境判定手段による判定結果が64ビットCPU環境である旨を示すと、前記演算プログラム本体に記述された圧縮関数の演算の初期値及び定数を前記64ビット幅のデータ記憶領域の上位32ビットに書込む手段、
前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記64ビット幅のデータ記憶領域の上位32ビットに書込む手段、
前記記憶された初期値、定数及びメッセージブロックに基づいて、前記演算プログラム本体に記述されたハッシュ演算を実行する手段、
前記実行中のハッシュ演算における前記圧縮関数の演算において、当該圧縮関数の変数xに対してのローテーション基数32のnビット左ローテーション演算処理(x<<<n)を実行する左ローテーション演算実行手段(但し、変数xは、BLAKE−256に規定された変数d,bの処理過程のデータを表す)、
前記左ローテーション演算実行手段の実行結果を用いて前記圧縮関数の演算を含むハッシュ演算を更に実行することにより算出されたハッシュ値を前記不揮発性メモリに書込む手段、
として機能させ、
前記左ローテーション演算実行手段は、
前記変数xのnビット左シフト演算処理(x<<n)を実行する左シフト演算実行手段と、
前記変数xの(32−n)ビット右シフト演算処理(x>>(32−n))を実行する右シフト演算実行手段と、
前記左シフト演算実行手段の実行結果と前記右シフト演算実行手段の実行結果との論理和演算を実行する論理和演算実行手段と、
前記論理和演算実行手段の実行結果の下位32ビットをゼロ値でマスクする処理により、前記nビット左ローテーション演算処理(x<<<n)の実行結果を得るマスク処理手段と
を含んでいる演算プログラム。
【請求項4】
請求項3に記載の演算プログラムにおいて、
前記ハッシュ関数演算装置を、
前記CPU環境判定手段による判定結果が32ビットCPU環境である旨を示すと、前記演算プログラム本体に記述された圧縮関数の演算の初期値及び定数を前記32ビット幅のデータ記憶領域に書込む手段、
前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記32ビット幅のデータ記憶領域に書込む手段、
として更に機能させるための演算プログラム。
【請求項5】
SHA−256に規定されたハッシュ演算によってハッシュ値を算出するハッシュ関数演算装置であって、
前記ハッシュ演算を示す演算プログラムを記憶するプログラム記憶手段と、
複数の32ビット幅または64ビット幅のデータ記憶領域を有して、初期値、定数、メッセージブロック及び処理過程のデータを記憶する揮発性メモリと、
メッセージデータ及びハッシュ値を記憶する不揮発性メモリと、
前記ハッシュ演算を実行する前に、CPU環境が32ビットCPU環境であるか又は64ビットCPU環境であるかを判定するCPU環境判定手段と、
前記CPU環境判定手段による判定結果が64ビットCPUである旨を示すと、前記演算プログラムに記述されたハッシュ演算の初期値及び定数を前記64ビット幅のデータ記憶領域の下位32ビットに書込む手段と、
前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記データ記憶領域の下位32ビットに書込む手段と、
前記記憶された初期値、定数及びメッセージブロックに基づいて、前記演算プログラムに記述されたハッシュ演算を実行する手段と、
前記実行中のハッシュ演算における変数xに対してのローテーション基数32のnビット右ローテーション演算処理(x>>>n)を実行する右ローテーション演算実行手段(但し、変数xは、SHA−256に規定された変数T1,T2の処理過程のデータを表す)と、
前記右ローテーション演算実行手段の実行結果を用いて前記ハッシュ演算を更に実行することによって算出されたハッシュ値を前記不揮発性メモリに書込む手段と
を備え、
前記右ローテーション演算実行手段は、
前記変数xのnビット右シフト演算処理(x>>n)を実行する右シフト演算実行手段と、
前記変数xの(32−n)ビット左シフト演算処理(x<<(32−n))を実行する左シフト演算実行手段と、
前記右シフト演算実行手段の実行結果と前記左シフト演算実行手段の実行結果との論理和演算を実行する論理和演算実行手段と、
前記論理和演算実行手段の実行結果の上位32ビットをゼロ値でマスクする処理により、前記nビット右ローテーション演算処理(x>>>n)の実行結果を得るマスク処理手段と
を備えたことを特徴とするハッシュ関数演算装置。
【請求項6】
請求項5に記載のハッシュ関数演算装置において、
前記CPU環境判定手段による判定結果が32ビットCPU環境である旨を示すと、前記演算プログラムに記述されたハッシュ演算の初期値及び定数を前記32ビット幅のデータ記憶領域に書込む手段と、
前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記32ビット幅のデータ記憶領域に書込む手段と
を更に備えたことを特徴とするハッシュ関数演算装置。
【請求項7】
コンピュータにハッシュ演算を行なわせる演算プログラムを記憶するプログラム記憶手段と、複数の32ビット幅または64ビット幅のデータ記憶領域を有して、初期値、定数、メッセージブロック及び処理過程のデータを記憶する揮発性メモリと、メッセージデータ及びハッシュ値を記憶する不揮発性メモリとを備え、前記ハッシュ演算によってハッシュ値を算出するハッシュ関数演算装置に用いられるSHA−256に規定されたハッシュ演算を行なわせる演算プログラムであって、
前記ハッシュ関数演算装置を、
前記ハッシュ演算を実行する前に、CPU環境が32ビットCPU環境であるか又は64ビットCPU環境であるかを判定するCPU環境判定手段、
前記CPU環境判定手段による判定結果が64ビットCPU環境である旨を示すと、前記演算プログラム本体に記述されたハッシュ演算の初期値及び定数を前記64ビット幅のデータ記憶領域の下位32ビットに書込む手段、
前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記データ記憶領域の下位32ビットに書込む手段、
前記記憶された初期値、定数及びメッセージブロックに基づいて、前記演算プログラム本体に記述されたハッシュ演算を実行する手段、
前記実行中のハッシュ演算における変数xに対してのローテーション基数32のnビット右ローテーション演算処理(x>>>n)を実行する右ローテーション演算実行手段(但し、変数xは、SHA−256に規定された変数T1,T2の処理過程のデータを表す)、
前記右ローテーション演算実行手段の実行結果を用いて前記ハッシュ演算を更に実行することによって算出されたハッシュ値を前記不揮発性メモリに書込む手段、
として機能させ、
前記右ローテーション演算実行手段は、
前記変数xのnビット右シフト演算処理(x>>n)を実行する右シフト演算実行手段と、
前記変数xの(32−n)ビット左シフト演算処理(x<<(32−n))を実行する左シフト演算実行手段と、
前記右シフト演算実行手段の実行結果と前記左シフト演算実行手段の実行結果との論理和演算を実行する論理和演算実行手段と、
前記論理和演算実行手段の実行結果の上位32ビットをゼロ値でマスクする処理により、前記nビット右ローテーション演算処理(x>>>n)の実行結果を得るマスク処理手段と
を含んでいる演算プログラム。
【請求項8】
請求項7に記載の演算プログラムにおいて、
前記ハッシュ関数演算装置を、
前記CPU環境判定手段による判定結果が32ビットCPU環境である旨を示すと、前記演算プログラムに記述されたハッシュ演算の初期値及び定数を前記32ビット幅のデータ記憶領域に書込む手段、
前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記32ビット幅のデータ記憶領域に書込む手段、
として更に機能させるための演算プログラム。
【請求項1】
BLAKE−256に規定された圧縮関数の演算を含むハッシュ演算によってハッシュ値を算出するハッシュ関数演算装置であって、
前記ハッシュ演算を示す演算プログラムを記憶するプログラム記憶手段と、
複数の32ビット幅または64ビット幅のデータ記憶領域を有して、初期値、定数、メッセージブロック及び処理過程のデータを記憶する揮発性メモリと、
メッセージデータ及びハッシュ値を記憶する不揮発性メモリと、
前記ハッシュ演算を実行する前に、CPU環境が32ビットCPU環境であるか又は64ビットCPU環境であるかを判定するCPU環境判定手段と、
前記CPU環境判定手段による判定結果が64ビットCPU環境である旨を示すと、前記演算プログラムに記述された圧縮関数の演算の初期値及び定数を前記64ビット幅のデータ記憶領域の上位32ビットに書込む手段と、
前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記64ビット幅のデータ記憶領域の上位32ビットに書込む手段と、
前記記憶された初期値、定数及びメッセージブロックに基づいて、前記演算プログラムに記述されたハッシュ演算を実行する手段と、
前記実行中のハッシュ演算における前記圧縮関数の演算において、当該圧縮関数の変数xに対してのローテーション基数32のnビット左ローテーション演算処理(x<<<n)を実行する左ローテーション演算実行手段(但し、変数xは、BLAKE−256に規定された変数d,bの処理過程のデータを表す)と、
前記左ローテーション演算実行手段の実行結果を用いて前記圧縮関数の演算を含むハッシュ演算を更に実行することにより算出されたハッシュ値を前記不揮発性メモリに書込む手段と
を備え、
前記左ローテーション演算実行手段は、
前記変数xのnビット左シフト演算処理(x<<n)を実行する左シフト演算実行手段と、
前記変数xの(32−n)ビット右シフト演算処理(x>>(32−n))を実行する右シフト演算実行手段と、
前記左シフト演算実行手段の実行結果と前記右シフト演算実行手段の実行結果との論理和演算を実行する論理和演算実行手段と、
前記論理和演算実行手段の実行結果の下位32ビットをゼロ値でマスクする処理により、前記nビット左ローテーション演算処理(x<<<n)の実行結果を得るマスク処理手段と
を備えたことを特徴とするハッシュ関数演算装置。
【請求項2】
請求項1に記載のハッシュ関数演算装置において、
前記CPU環境判定手段による判定結果が32ビットCPU環境である旨を示すと、前記演算プログラムに記述された圧縮関数の演算の初期値及び定数を前記32ビット幅のデータ記憶領域に書込む手段と、
前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記32ビット幅のデータ記憶領域に書込む手段と
を更に備えたことを特徴とするハッシュ関数演算装置。
【請求項3】
コンピュータにハッシュ演算を行なわせる演算プログラムを記憶するプログラム記憶手段と、複数の32ビット幅または64ビット幅のデータ記憶領域を有して、初期値、定数、メッセージブロック及び処理過程のデータを記憶する揮発性メモリと、メッセージデータ及びハッシュ値を記憶する不揮発性メモリとを備え、前記ハッシュ演算によってハッシュ値を算出するハッシュ関数演算装置に用いられ、BLAKE−256に規定された圧縮関数の演算を含むハッシュ演算を行なわせる演算プログラムであって、
前記ハッシュ関数演算装置を、
前記ハッシュ演算を実行する前に、CPU環境が32ビットCPU環境であるか又は64ビットCPU環境であるかを判定するCPU環境判定手段、
前記CPU環境判定手段による判定結果が64ビットCPU環境である旨を示すと、前記演算プログラム本体に記述された圧縮関数の演算の初期値及び定数を前記64ビット幅のデータ記憶領域の上位32ビットに書込む手段、
前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記64ビット幅のデータ記憶領域の上位32ビットに書込む手段、
前記記憶された初期値、定数及びメッセージブロックに基づいて、前記演算プログラム本体に記述されたハッシュ演算を実行する手段、
前記実行中のハッシュ演算における前記圧縮関数の演算において、当該圧縮関数の変数xに対してのローテーション基数32のnビット左ローテーション演算処理(x<<<n)を実行する左ローテーション演算実行手段(但し、変数xは、BLAKE−256に規定された変数d,bの処理過程のデータを表す)、
前記左ローテーション演算実行手段の実行結果を用いて前記圧縮関数の演算を含むハッシュ演算を更に実行することにより算出されたハッシュ値を前記不揮発性メモリに書込む手段、
として機能させ、
前記左ローテーション演算実行手段は、
前記変数xのnビット左シフト演算処理(x<<n)を実行する左シフト演算実行手段と、
前記変数xの(32−n)ビット右シフト演算処理(x>>(32−n))を実行する右シフト演算実行手段と、
前記左シフト演算実行手段の実行結果と前記右シフト演算実行手段の実行結果との論理和演算を実行する論理和演算実行手段と、
前記論理和演算実行手段の実行結果の下位32ビットをゼロ値でマスクする処理により、前記nビット左ローテーション演算処理(x<<<n)の実行結果を得るマスク処理手段と
を含んでいる演算プログラム。
【請求項4】
請求項3に記載の演算プログラムにおいて、
前記ハッシュ関数演算装置を、
前記CPU環境判定手段による判定結果が32ビットCPU環境である旨を示すと、前記演算プログラム本体に記述された圧縮関数の演算の初期値及び定数を前記32ビット幅のデータ記憶領域に書込む手段、
前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記32ビット幅のデータ記憶領域に書込む手段、
として更に機能させるための演算プログラム。
【請求項5】
SHA−256に規定されたハッシュ演算によってハッシュ値を算出するハッシュ関数演算装置であって、
前記ハッシュ演算を示す演算プログラムを記憶するプログラム記憶手段と、
複数の32ビット幅または64ビット幅のデータ記憶領域を有して、初期値、定数、メッセージブロック及び処理過程のデータを記憶する揮発性メモリと、
メッセージデータ及びハッシュ値を記憶する不揮発性メモリと、
前記ハッシュ演算を実行する前に、CPU環境が32ビットCPU環境であるか又は64ビットCPU環境であるかを判定するCPU環境判定手段と、
前記CPU環境判定手段による判定結果が64ビットCPUである旨を示すと、前記演算プログラムに記述されたハッシュ演算の初期値及び定数を前記64ビット幅のデータ記憶領域の下位32ビットに書込む手段と、
前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記データ記憶領域の下位32ビットに書込む手段と、
前記記憶された初期値、定数及びメッセージブロックに基づいて、前記演算プログラムに記述されたハッシュ演算を実行する手段と、
前記実行中のハッシュ演算における変数xに対してのローテーション基数32のnビット右ローテーション演算処理(x>>>n)を実行する右ローテーション演算実行手段(但し、変数xは、SHA−256に規定された変数T1,T2の処理過程のデータを表す)と、
前記右ローテーション演算実行手段の実行結果を用いて前記ハッシュ演算を更に実行することによって算出されたハッシュ値を前記不揮発性メモリに書込む手段と
を備え、
前記右ローテーション演算実行手段は、
前記変数xのnビット右シフト演算処理(x>>n)を実行する右シフト演算実行手段と、
前記変数xの(32−n)ビット左シフト演算処理(x<<(32−n))を実行する左シフト演算実行手段と、
前記右シフト演算実行手段の実行結果と前記左シフト演算実行手段の実行結果との論理和演算を実行する論理和演算実行手段と、
前記論理和演算実行手段の実行結果の上位32ビットをゼロ値でマスクする処理により、前記nビット右ローテーション演算処理(x>>>n)の実行結果を得るマスク処理手段と
を備えたことを特徴とするハッシュ関数演算装置。
【請求項6】
請求項5に記載のハッシュ関数演算装置において、
前記CPU環境判定手段による判定結果が32ビットCPU環境である旨を示すと、前記演算プログラムに記述されたハッシュ演算の初期値及び定数を前記32ビット幅のデータ記憶領域に書込む手段と、
前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記32ビット幅のデータ記憶領域に書込む手段と
を更に備えたことを特徴とするハッシュ関数演算装置。
【請求項7】
コンピュータにハッシュ演算を行なわせる演算プログラムを記憶するプログラム記憶手段と、複数の32ビット幅または64ビット幅のデータ記憶領域を有して、初期値、定数、メッセージブロック及び処理過程のデータを記憶する揮発性メモリと、メッセージデータ及びハッシュ値を記憶する不揮発性メモリとを備え、前記ハッシュ演算によってハッシュ値を算出するハッシュ関数演算装置に用いられるSHA−256に規定されたハッシュ演算を行なわせる演算プログラムであって、
前記ハッシュ関数演算装置を、
前記ハッシュ演算を実行する前に、CPU環境が32ビットCPU環境であるか又は64ビットCPU環境であるかを判定するCPU環境判定手段、
前記CPU環境判定手段による判定結果が64ビットCPU環境である旨を示すと、前記演算プログラム本体に記述されたハッシュ演算の初期値及び定数を前記64ビット幅のデータ記憶領域の下位32ビットに書込む手段、
前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記データ記憶領域の下位32ビットに書込む手段、
前記記憶された初期値、定数及びメッセージブロックに基づいて、前記演算プログラム本体に記述されたハッシュ演算を実行する手段、
前記実行中のハッシュ演算における変数xに対してのローテーション基数32のnビット右ローテーション演算処理(x>>>n)を実行する右ローテーション演算実行手段(但し、変数xは、SHA−256に規定された変数T1,T2の処理過程のデータを表す)、
前記右ローテーション演算実行手段の実行結果を用いて前記ハッシュ演算を更に実行することによって算出されたハッシュ値を前記不揮発性メモリに書込む手段、
として機能させ、
前記右ローテーション演算実行手段は、
前記変数xのnビット右シフト演算処理(x>>n)を実行する右シフト演算実行手段と、
前記変数xの(32−n)ビット左シフト演算処理(x<<(32−n))を実行する左シフト演算実行手段と、
前記右シフト演算実行手段の実行結果と前記左シフト演算実行手段の実行結果との論理和演算を実行する論理和演算実行手段と、
前記論理和演算実行手段の実行結果の上位32ビットをゼロ値でマスクする処理により、前記nビット右ローテーション演算処理(x>>>n)の実行結果を得るマスク処理手段と
を含んでいる演算プログラム。
【請求項8】
請求項7に記載の演算プログラムにおいて、
前記ハッシュ関数演算装置を、
前記CPU環境判定手段による判定結果が32ビットCPU環境である旨を示すと、前記演算プログラムに記述されたハッシュ演算の初期値及び定数を前記32ビット幅のデータ記憶領域に書込む手段、
前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記32ビット幅のデータ記憶領域に書込む手段、
として更に機能させるための演算プログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【公開番号】特開2012−220789(P2012−220789A)
【公開日】平成24年11月12日(2012.11.12)
【国際特許分類】
【出願番号】特願2011−87690(P2011−87690)
【出願日】平成23年4月11日(2011.4.11)
【出願人】(000003078)株式会社東芝 (54,554)
【出願人】(301063496)東芝ソリューション株式会社 (1,478)
【Fターム(参考)】
【公開日】平成24年11月12日(2012.11.12)
【国際特許分類】
【出願日】平成23年4月11日(2011.4.11)
【出願人】(000003078)株式会社東芝 (54,554)
【出願人】(301063496)東芝ソリューション株式会社 (1,478)
【Fターム(参考)】
[ Back to top ]