(57)【特許請求の範囲】
【請求項１】
ＢＬＡＫＥ−２５６に規定された圧縮関数の演算を含むハッシュ演算によってハッシュ値を算出するハッシュ関数演算装置であって、
前記ハッシュ演算を示す演算プログラムを記憶するプログラム記憶手段と、
複数の３２ビット幅または６４ビット幅のデータ記憶領域を有して、初期値、定数、メッセージブロック及び処理過程のデータを記憶する揮発性メモリと、
メッセージデータ及びハッシュ値を記憶する不揮発性メモリと、
前記ハッシュ演算を実行する前に、ＣＰＵ環境が３２ビットＣＰＵ環境であるか又は６４ビットＣＰＵ環境であるかを判定するＣＰＵ環境判定手段と、
前記ＣＰＵ環境判定手段による判定結果が６４ビットＣＰＵ環境である旨を示すと、前記演算プログラムに記述された圧縮関数の演算の初期値及び定数を前記６４ビット幅のデータ記憶領域の上位３２ビットに書込む手段と、
前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記６４ビット幅のデータ記憶領域の上位３２ビットに書込む手段と、
前記記憶された初期値、定数及びメッセージブロックに基づいて、前記演算プログラムに記述されたハッシュ演算を実行する手段と、
前記実行中のハッシュ演算における前記圧縮関数の演算において、当該圧縮関数の変数ｘに対してのローテーション基数３２のｎビット左ローテーション演算処理（ｘ＜＜＜ｎ）を実行する左ローテーション演算実行手段（但し、変数ｘは、ＢＬＡＫＥ−２５６に規定された変数ｄ，ｂの処理過程のデータを表す）と、
前記左ローテーション演算実行手段の実行結果を用いて前記圧縮関数の演算を含むハッシュ演算を更に実行することにより算出されたハッシュ値を前記不揮発性メモリに書込む手段と
を備え、
前記左ローテーション演算実行手段は、
前記変数ｘのｎビット左シフト演算処理（ｘ＜＜ｎ）を実行する左シフト演算実行手段と、
前記変数ｘの（３２−ｎ）ビット右シフト演算処理（ｘ＞＞（３２−ｎ））を実行する右シフト演算実行手段と、
前記左シフト演算実行手段の実行結果と前記右シフト演算実行手段の実行結果との論理和演算を実行する論理和演算実行手段と、
前記論理和演算実行手段の実行結果の下位３２ビットをゼロ値でマスクする処理により、前記ｎビット左ローテーション演算処理（ｘ＜＜＜ｎ）の実行結果を得るマスク処理手段と
を備えたことを特徴とするハッシュ関数演算装置。
【請求項２】
請求項１に記載のハッシュ関数演算装置において、
前記ＣＰＵ環境判定手段による判定結果が３２ビットＣＰＵ環境である旨を示すと、前記演算プログラムに記述された圧縮関数の演算の初期値及び定数を前記３２ビット幅のデータ記憶領域に書込む手段と、
前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記３２ビット幅のデータ記憶領域に書込む手段と
を更に備えたことを特徴とするハッシュ関数演算装置。
【請求項３】
コンピュータにハッシュ演算を行なわせる演算プログラムを記憶するプログラム記憶手段と、複数の３２ビット幅または６４ビット幅のデータ記憶領域を有して、初期値、定数、メッセージブロック及び処理過程のデータを記憶する揮発性メモリと、メッセージデータ及びハッシュ値を記憶する不揮発性メモリとを備え、前記ハッシュ演算によってハッシュ値を算出するハッシュ関数演算装置に用いられ、ＢＬＡＫＥ−２５６に規定された圧縮関数の演算を含むハッシュ演算を行なわせる演算プログラムであって、
前記ハッシュ関数演算装置を、
前記ハッシュ演算を実行する前に、ＣＰＵ環境が３２ビットＣＰＵ環境であるか又は６４ビットＣＰＵ環境であるかを判定するＣＰＵ環境判定手段、
前記ＣＰＵ環境判定手段による判定結果が６４ビットＣＰＵ環境である旨を示すと、前記演算プログラム本体に記述された圧縮関数の演算の初期値及び定数を前記６４ビット幅のデータ記憶領域の上位３２ビットに書込む手段、
前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記６４ビット幅のデータ記憶領域の上位３２ビットに書込む手段、
前記記憶された初期値、定数及びメッセージブロックに基づいて、前記演算プログラム本体に記述されたハッシュ演算を実行する手段、
前記実行中のハッシュ演算における前記圧縮関数の演算において、当該圧縮関数の変数ｘに対してのローテーション基数３２のｎビット左ローテーション演算処理（ｘ＜＜＜ｎ）を実行する左ローテーション演算実行手段（但し、変数ｘは、ＢＬＡＫＥ−２５６に規定された変数ｄ，ｂの処理過程のデータを表す）、
前記左ローテーション演算実行手段の実行結果を用いて前記圧縮関数の演算を含むハッシュ演算を更に実行することにより算出されたハッシュ値を前記不揮発性メモリに書込む手段、
として機能させ、
前記左ローテーション演算実行手段は、
前記変数ｘのｎビット左シフト演算処理（ｘ＜＜ｎ）を実行する左シフト演算実行手段と、
前記変数ｘの（３２−ｎ）ビット右シフト演算処理（ｘ＞＞（３２−ｎ））を実行する右シフト演算実行手段と、
前記左シフト演算実行手段の実行結果と前記右シフト演算実行手段の実行結果との論理和演算を実行する論理和演算実行手段と、
前記論理和演算実行手段の実行結果の下位３２ビットをゼロ値でマスクする処理により、前記ｎビット左ローテーション演算処理（ｘ＜＜＜ｎ）の実行結果を得るマスク処理手段と
を含んでいる演算プログラム。
【請求項４】
請求項３に記載の演算プログラムにおいて、
前記ハッシュ関数演算装置を、
前記ＣＰＵ環境判定手段による判定結果が３２ビットＣＰＵ環境である旨を示すと、前記演算プログラム本体に記述された圧縮関数の演算の初期値及び定数を前記３２ビット幅のデータ記憶領域に書込む手段、
前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記３２ビット幅のデータ記憶領域に書込む手段、
として更に機能させるための演算プログラム。
【請求項５】
ＳＨＡ−２５６に規定されたハッシュ演算によってハッシュ値を算出するハッシュ関数演算装置であって、
前記ハッシュ演算を示す演算プログラムを記憶するプログラム記憶手段と、
複数の３２ビット幅または６４ビット幅のデータ記憶領域を有して、初期値、定数、メッセージブロック及び処理過程のデータを記憶する揮発性メモリと、
メッセージデータ及びハッシュ値を記憶する不揮発性メモリと、
前記ハッシュ演算を実行する前に、ＣＰＵ環境が３２ビットＣＰＵ環境であるか又は６４ビットＣＰＵ環境であるかを判定するＣＰＵ環境判定手段と、
前記ＣＰＵ環境判定手段による判定結果が６４ビットＣＰＵである旨を示すと、前記演算プログラムに記述されたハッシュ演算の初期値及び定数を前記６４ビット幅のデータ記憶領域の下位３２ビットに書込む手段と、
前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記データ記憶領域の下位３２ビットに書込む手段と、
前記記憶された初期値、定数及びメッセージブロックに基づいて、前記演算プログラムに記述されたハッシュ演算を実行する手段と、
前記実行中のハッシュ演算における変数ｘに対してのローテーション基数３２のｎビット右ローテーション演算処理（ｘ＞＞＞ｎ）を実行する右ローテーション演算実行手段（但し、変数ｘは、ＳＨＡ−２５６に規定された変数Ｔ1，Ｔ2の処理過程のデータを表す）と、
前記右ローテーション演算実行手段の実行結果を用いて前記ハッシュ演算を更に実行することによって算出されたハッシュ値を前記不揮発性メモリに書込む手段と
を備え、
前記右ローテーション演算実行手段は、
前記変数ｘのｎビット右シフト演算処理（ｘ＞＞ｎ）を実行する右シフト演算実行手段と、
前記変数ｘの（３２−ｎ）ビット左シフト演算処理（ｘ＜＜（３２−ｎ））を実行する左シフト演算実行手段と、
前記右シフト演算実行手段の実行結果と前記左シフト演算実行手段の実行結果との論理和演算を実行する論理和演算実行手段と、
前記論理和演算実行手段の実行結果の上位３２ビットをゼロ値でマスクする処理により、前記ｎビット右ローテーション演算処理（ｘ＞＞＞ｎ）の実行結果を得るマスク処理手段と
を備えたことを特徴とするハッシュ関数演算装置。
【請求項６】
請求項５に記載のハッシュ関数演算装置において、
前記ＣＰＵ環境判定手段による判定結果が３２ビットＣＰＵ環境である旨を示すと、前記演算プログラムに記述されたハッシュ演算の初期値及び定数を前記３２ビット幅のデータ記憶領域に書込む手段と、
前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記３２ビット幅のデータ記憶領域に書込む手段と
を更に備えたことを特徴とするハッシュ関数演算装置。
【請求項７】
コンピュータにハッシュ演算を行なわせる演算プログラムを記憶するプログラム記憶手段と、複数の３２ビット幅または６４ビット幅のデータ記憶領域を有して、初期値、定数、メッセージブロック及び処理過程のデータを記憶する揮発性メモリと、メッセージデータ及びハッシュ値を記憶する不揮発性メモリとを備え、前記ハッシュ演算によってハッシュ値を算出するハッシュ関数演算装置に用いられるＳＨＡ−２５６に規定されたハッシュ演算を行なわせる演算プログラムであって、
前記ハッシュ関数演算装置を、
前記ハッシュ演算を実行する前に、ＣＰＵ環境が３２ビットＣＰＵ環境であるか又は６４ビットＣＰＵ環境であるかを判定するＣＰＵ環境判定手段、
前記ＣＰＵ環境判定手段による判定結果が６４ビットＣＰＵ環境である旨を示すと、前記演算プログラム本体に記述されたハッシュ演算の初期値及び定数を前記６４ビット幅のデータ記憶領域の下位３２ビットに書込む手段、
前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記データ記憶領域の下位３２ビットに書込む手段、
前記記憶された初期値、定数及びメッセージブロックに基づいて、前記演算プログラム本体に記述されたハッシュ演算を実行する手段、
前記実行中のハッシュ演算における変数ｘに対してのローテーション基数３２のｎビット右ローテーション演算処理（ｘ＞＞＞ｎ）を実行する右ローテーション演算実行手段（但し、変数ｘは、ＳＨＡ−２５６に規定された変数Ｔ1，Ｔ2の処理過程のデータを表す）、
前記右ローテーション演算実行手段の実行結果を用いて前記ハッシュ演算を更に実行することによって算出されたハッシュ値を前記不揮発性メモリに書込む手段、
として機能させ、
前記右ローテーション演算実行手段は、
前記変数ｘのｎビット右シフト演算処理（ｘ＞＞ｎ）を実行する右シフト演算実行手段と、
前記変数ｘの（３２−ｎ）ビット左シフト演算処理（ｘ＜＜（３２−ｎ））を実行する左シフト演算実行手段と、
前記右シフト演算実行手段の実行結果と前記左シフト演算実行手段の実行結果との論理和演算を実行する論理和演算実行手段と、
前記論理和演算実行手段の実行結果の上位３２ビットをゼロ値でマスクする処理により、前記ｎビット右ローテーション演算処理（ｘ＞＞＞ｎ）の実行結果を得るマスク処理手段と
を含んでいる演算プログラム。
【請求項８】
請求項７に記載の演算プログラムにおいて、
前記ハッシュ関数演算装置を、
前記ＣＰＵ環境判定手段による判定結果が３２ビットＣＰＵ環境である旨を示すと、前記演算プログラムに記述されたハッシュ演算の初期値及び定数を前記３２ビット幅のデータ記憶領域に書込む手段、
前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記３２ビット幅のデータ記憶領域に書込む手段、
として更に機能させるための演算プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、ハッシュ関数演算装置及び演算プログラムに関する。
【背景技術】
【０００２】
一般に、ハッシュ関数は、ネットワークを介して通信されるデータの書換えを検出するために用いられ、通信されるデータからハッシュ値と呼ばれる固定長のデータを生成する関数である。この種のハッシュ関数は、ハッシュ値から元のデータが特定されない旨の一方向性の性質をもっている。このようなハッシュ関数には、例えば、ＳＨＡ−２５６、ＳＨＡ−５１２、ＢＬＡＫＥ−２５６及びＢＬＡＫＥ−５１２等のアルゴリズムが存在し、ハッシュ値は通信されるデータとハッシュ関数のアルゴリズムとに基づいて生成される。
【０００３】
ユーザは、ハッシュ関数を含む演算プログラムをパーソナルコンピュータ（personal computer）等にインストールし、この演算プログラムをパーソナルコンピュータ内のＣＰＵ（central processing unit）で実行することによって、データの書換え等を検出可能としている。
【０００４】
一方、現行のパーソナルコンピュータに搭載されるＣＰＵは、３２ビットＣＰＵまたは６４ビットＣＰＵのいずれかであり、３２ビットＣＰＵと６４ビットＣＰＵとでは処理可能なデータのビット幅が異なっている。このため、ハッシュ関数のアルゴリズムを含む演算プログラムを管理する管理者は、ハッシュ関数の同じアルゴリズムであっても、３２ビットＣＰＵ用の演算プログラムと、６４ビットＣＰＵ用の演算プログラムとを別々に用意する必要がある。例えば、ＢＬＡＫＥ−２５６では、３２ビット幅のワード長で計算を行うためのソースコードが実装されており、ＢＬＡＫＥ−５１２では、６４ビット幅のワード長で計算を行うためのソースコードが実装されている。同様に、ＳＨＡ−２５６では、３２ビット幅のワード長で計算を行うためのソースコードが実装されており、ＳＨＡ−５１２では、６４ビット幅のワード長で計算を行うためのソースコードが実装されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００４−５３７１６号公報
【非特許文献】
【０００６】
【非特許文献１】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>.
【非特許文献２】“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>.
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、ハッシュ関数の同じアルゴリズムに対し、３２ビットＣＰＵ用の演算プログラムと６４ビットＣＰＵ用の演算プログラムとを別々に用意して二重管理することは、通常は特に問題はないが、本発明者の検討によれば、演算プログラムのソースコードのメンテナンス性を低下させる不都合がある。
【０００８】
また、この不都合を解消する観点から、本発明者により、６４ビットＣＰＵが３２ビットＣＰＵ用の既存の演算プログラムを実行することにより、ハッシュ関数のアルゴリズムを含む演算プログラムのソースコードの共通化を図る方式を考察してみる。
【０００９】
しかしながら、この方式は、３２ビットＣＰＵと６４ビットＣＰＵとにおけるローテーション演算処理やパティング処理が異なるため、同一のデータから互いに異なるハッシュ値を算出してしまい、ソースコードの共通化を実現できないといった不都合がある。
【００１０】
本発明が解決しようとする課題は、３２ビットＣＰＵ及び６４ビットＣＰＵのいずれに利用されても互いに同一のハッシュ値を算出でき、ソースコードの共通化を実現し得るハッシュ関数演算装置及び演算プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
実施形態のハッシュ関数演算装置は、ＢＬＡＫＥ−２５６に規定された圧縮関数の演算を含むハッシュ演算によってハッシュ値を算出する。
【００１２】
前記ハッシュ関数演算装置においては、プログラム記憶手段が、前記ハッシュ演算を示す演算プログラムを記憶する。
【００１３】
前記ハッシュ関数演算装置においては、揮発性メモリが、複数の３２ビット幅または６４ビット幅のデータ記憶領域を有して、初期値、定数、メッセージブロック及び処理過程のデータを記憶する。
【００１４】
前記ハッシュ関数演算装置においては、不揮発性メモリが、メッセージデータ及びハッシュ値を記憶する。
【００１５】
前記ハッシュ関数演算装置においては、ＣＰＵ環境判定手段が、前記ハッシュ演算を実行する前に、ＣＰＵ環境が３２ビットＣＰＵ環境であるか又は６４ビットＣＰＵ環境であるかを判定する。
【００１６】
前記ハッシュ関数演算装置においては、前記ＣＰＵ環境判定手段による判定結果が６４ビットＣＰＵである旨を示すと、前記演算プログラムに記述された圧縮関数の演算の初期値及び定数を前記６４ビット幅のデータ記憶領域の上位３２ビットに書込む。
【００１７】
前記ハッシュ関数演算装置においては、前記記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割した前記メッセージブロックを生成し、当該生成されたメッセージブロックを前記６４ビット幅のデータ記憶領域の上位３２ビットに書込む。
【００１８】
前記ハッシュ関数演算装置においては、前記記憶された初期値、定数及びメッセージブロックに基づいて、前記演算プログラムに記述されたハッシュ演算を実行する。
【００１９】
前記ハッシュ関数演算装置においては、左ローテーション演算実行手段が、前記実行中のハッシュ演算における前記圧縮関数の演算において、当該圧縮関数の変数ｘに対してのローテーション基数３２のｎビット左ローテーション演算処理（ｘ＜＜＜ｎ）を実行する（但し、変数ｘは、ＢＬＡＫＥ−２５６に規定された変数ｄ，ｂの処理過程のデータを表す）。
【００２０】
前記ハッシュ関数演算装置においては、前記左ローテーション演算実行手段の実行結果を用いて前記圧縮関数の演算を含むハッシュ演算を更に実行することにより算出されたハッシュ値を前記不揮発性メモリに書込む。
【００２１】
ここで、前記左ローテーション演算実行手段は、左シフト演算実行手段、右シフト演算実行手段、論理和演算実行手段及びマスク処理手段を備えている。
【００２２】
前記左シフト演算実行手段は、前記変数ｘのｎビット左シフト演算処理（ｘ＜＜ｎ）を実行する。
【００２３】
前記右シフト演算実行手段は、前記変数ｘの（３２−ｎ）ビット右シフト演算処理（ｘ＞＞（３２−ｎ））を実行する。
【００２４】
前記論理和演算実行手段は、前記左シフト演算実行手段の実行結果と前記右シフト演算実行手段の実行結果との論理和演算を実行する。
【００２５】
前記マスク処理手段は、前記論理和演算実行手段の実行結果の下位３２ビットをゼロ値でマスクする処理により、前記ｎビット左ローテーション演算処理（ｘ＜＜＜ｎ）の実行結果を得る。
【図面の簡単な説明】
【００２６】
【図１】第１の実施形態に係るハッシュ関数演算装置の構成の一例を示す機能ブロック図である。
【図２】同実施形態におけるハッシュ関数演算装置の動作の一例を示すフローチャートである。
【図３】同実施形態における揮発性メモリ内の６４ビット幅のデータ記憶領域に記憶されたデータの一例を示す模式図である。
【図４】同実施形態におけるパティング処理の一例を示す模式図である。
【図５】同実施形態におけるローテーション演算処理の一例を示す模式図である。
【図６】同実施形態におけるマスク処理の一例を示す模式図である。
【図７】第２の実施形態に係るハッシュ関数演算装置の構成の一例を示す機能ブロック図である。
【図８】同実施形態におけるハッシュ関数演算装置の動作の一例を示すフローチャートである。
【図９】同実施形態における揮発性メモリ内の６４ビット幅のデータ記憶領域に記憶されたデータの一例を示す模式図である。
【図１０】同実施形態におけるパティング処理の一例を示す模式図である。
【図１１】同実施形態におけるローテーション演算処理の一例を示す模式図である。
【図１２】同実施形態におけるマスク処理の一例を示す模式図である。
【発明を実施するための形態】
【００２７】
以下、各実施形態について図面を参照して説明する。なお、以下のハッシュ関数演算装置は、ハードウェア構成、又はハードウェア資源とソフトウェアとの組合せ構成のいずれでも実施可能となっている。組合せ構成のソフトウェアとしては、予めネットワーク又は記憶媒体からコンピュータにインストールされ、ハッシュ関数演算装置の機能を当該コンピュータに実現させるための演算プログラムが用いられる。
【００２８】
（第１の実施形態）
図１は、第１の実施形態に係るハッシュ関数演算装置の構成の一例を示す機能ブロック図である。ハッシュ関数演算装置１０は、プログラム記憶部１０１、揮発性メモリ１０２、不揮発性メモリ１０３、ＣＰＵ１０４及び演算部１０５を備えている。
【００２９】
ここで、プログラム記憶部１０１は、ＣＰＵ１０４から読出可能な記憶装置であり、例えばＲＯＭ（リードオンリーメモリ）であって、ＢＬＡＫＥ−２５６に規定された圧縮関数の演算を含むハッシュ演算を示す演算プログラムを記憶している。なお、プログラム記憶部１０１は、演算プログラムを外部からインストールして保持する構成でもよい。
【００３０】
揮発性メモリ１０２は、ＣＰＵ１０４から読出／書込可能な記憶装置であり、例えばＲＡＭ（ランダムアクセスメモリ）であって、初期値、定数、メッセージブロック、計算に必要なデータ及び計算途中のデータ等を記憶している。なお、揮発性メモリ１０２は、複数の３２ビット幅または６４ビット幅のデータ記憶領域を有しており、このデータ記憶領域内に計算に必要なデータ等を適宜格納している。また、初期値の語は、「初期ベクトル」としてもよい。
【００３１】
不揮発性メモリ１０３は、ＣＰＵ１０４から読出／書込可能な記憶装置であり、例えばＥＥＰＲＯＭ（電気的に書換え可能なＲＯＭ）であって、メッセージデータ及びハッシュ値等を記憶している。なお、メッセージデータは、ＣＰＵ１０４によってメッセージ長が５１２ビットの倍数となるようなパティング処理が実行された後に、１６個の３２ビット長のメッセージブロックに分割され、これらメッセージブロックは揮発性メモリ１０２に記憶される。
【００３２】
また、不揮発性メモリ１０３は、揮発性メモリ１０２と同様に、複数の３２ビット幅または６４ビット幅のデータ記憶領域を有しており、このデータ記憶領域内に計算結果等を適宜記憶している。
【００３３】
ＣＰＵ１０４は、プログラム記憶部１０１に記憶された演算プログラムを読出し、この演算プログラムを実行する。また、ＣＰＵ１０４は、揮発性メモリ１０２及び不揮発性メモリ１０３に記憶されたデータの読出／書込処理を実行する。具体的には、以下の各機能(f104-1)〜(f104-4)をもっている。
【００３４】
(f104-1)  ハッシュ演算を実行する前に、ＣＰＵ環境が３２ビットＣＰＵ環境であるか又は６４ビットＣＰＵ環境であるかを判定するＣＰＵ環境判定機能。
【００３５】
(f104-2)  ＣＰＵ環境判定機能による判定結果が６４ビットＣＰＵである旨を示すと、プログラム記憶部１０１に記憶された演算プログラムに記述された圧縮関数の演算の初期値及び定数を揮発性メモリ１０２内の６４ビット幅のデータ記憶領域の上位３２ビットに書込む機能。
【００３６】
(f104-3)  不揮発性メモリ１０３に記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割したメッセージブロックを生成し、当該生成されたメッセージブロックを揮発性メモリ１０２内の６４ビット幅のデータ記憶領域の上位３２ビットに書込む機能。
【００３７】
(f104-4)  揮発性メモリ１０２に書込まれた初期値、定数及びメッセージブロックに基づいて、演算プログラムに記述されたハッシュ演算を実行する機能。
【００３８】
なお、ＣＰＵ環境判定機能による判定結果が３２ビットＣＰＵである旨を示すとき、ＣＰＵ１０４は、演算プログラムに記述された圧縮関数の演算の初期値及び定数を揮発性メモリ１０２内の３２ビット幅のデータ記憶領域に書込む処理と、記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割したメッセージブロックを生成し、当該生成されたメッセージブロックを揮発性メモリ１０２内の３２ビット幅のデータ記憶領域に書込む処理といった非特許文献１に示される処理と同一の処理を実行するため、ここでは詳細な説明を省略する。
【００３９】
演算部１０５は、ＣＰＵ１０４によって実行中のハッシュ演算における圧縮関数の演算を実行する。具体的には、例えば、以下の各機能(f105-1)〜(f105-2)をもっている。
【００４０】
(f105-1)  ＣＰＵ１０４によって実行中のハッシュ演算における圧縮関数の演算において、当該圧縮関数の変数ｘに対してのローテーション基数３２のｎビット左ローテーション演算処理（ｘ＜＜＜ｎ）を実行する左ローテーション演算実行機能（但し、変数ｘは、ＢＬＡＫＥ−２５６に規定された変数ｄ，ｂの処理過程のデータを表す）。
【００４１】
(f105-2)  左ローテーション演算実行機能の実行結果を用いて圧縮関数の演算を含むハッシュ演算を更に実行することにより算出されたハッシュ値を不揮発性メモリ１０３内の６４ビット幅のデータ記憶領域の上位３２ビットに書込む機能。
【００４２】
ここで、左ローテーション演算実行機能(f105-1)は、例えば、以下の各機能(f105-1-1)〜(f105-1-4)をもっている。
【００４３】
(f105-1-1)  変数ｘのｎビット左シフト演算処理（ｘ＜＜ｎ）を実行する左シフト演算実行機能。
【００４４】
(f105-1-2)  変数ｘの（３２−ｎ）ビット右シフト演算処理（ｘ＞＞（３２−ｎ））を実行する右シフト演算実行機能。
【００４５】
(f105-1-3)  左シフト演算実行機能の実行結果と右シフト演算実行機能の実行結果との論理和演算を実行する論理和演算実行機能。
【００４６】
(f105-1-4)  論理和演算実行機能の実行結果の下位３２ビットをゼロ値でマスクする処理により、ｎビット左ローテーション演算処理（ｘ＜＜＜ｎ）の実行結果を得るマスク処理機能。
【００４７】
次に、以上のように構成されたハッシュ関数演算装置の動作について、図２のフローチャートと、図３〜図６の模式図とを参照しながら説明する。但し、ＣＰＵ１０４が６４ビットＣＰＵであると仮定する。
【００４８】
始めに、ＣＰＵ１０４は、プログラム記憶部１０１に記憶された演算プログラムを読出し、図３に示すように、当該読出された演算プログラムに記述された初期値ＩＶ０〜ＩＶ７及び定数ｃ０〜ｃ１５を揮発性メモリ１０２内の複数の６４ビット幅のデータ記憶領域の上位３２ビットにそれぞれ書込む（ステップＳ１）。なお、初期値ＩＶ０〜ＩＶ７及び定数ｃ０〜ｃ１５の具体的な値については、非特許文献１を参照されたい。
【００４９】
続いて、ＣＰＵ１０４は、当該読出された演算プログラムに記述された定数ν０〜ν１５を、ステップＳ１と同様に、揮発性メモリ１０２内の６４ビット幅データ記憶領域の上位３２ビットにそれぞれ書込む（ステップＳ２）。なお、定数ν０〜ν１５の具体的な値については、非特許文献１を参照されたい。
【００５０】
次に、ＣＰＵ１０４は、当該読出された演算プログラムに記述された変数σと圧縮関数Ｇｉとの対応情報を揮発性メモリ１０２に書込む（ステップＳ３）。なお、変数σと圧縮関数Ｇｉとの対応情報についての詳細は、非特許文献１を参照されたい。
【００５１】
続いて、ＣＰＵ１０４は、不揮発性メモリ１０３に記憶されたメッセージデータを読出し、図４ａに示すように、当該読出されたメッセージデータのうちの５１２ビット長のメッセージデータを１６個に分割したメッセージブロックｍ０〜ｍ１５を生成し、図４ｂに示すように、当該生成されたメッセージブロックｍ０〜ｍ１５を揮発性メモリ１０２内の６４ビット幅データ記憶領域の上位３２ビットにそれぞれ書込む（ステップＳ４）。
【００５２】
次に、演算部１０５は、以下の式（１）に示す演算処理を実行する（ステップＳ５）。
【００５３】
ａ←ａ＋ｂ＋（ｍσｒ（２ｉ）(＋)ｃσｒ（２ｉ＋１））                        式（１）
なお、式（１）に示す演算処理の出力“ａ”は、揮発性メモリ１０２内の６４ビット幅のデータ記憶領域の上位３２ビットに記憶される。また、以下に示す演算処理の出力についても、揮発性メモリ１０２内の６４ビット幅データ記憶領域の上位３２ビットに適宜記憶されるものとする。
【００５４】
なお、ｉは圧縮関数Ｇｉの識別番号を示し、０〜７のいずれかの値を示す。また、ａ〜ｄは変数であり、揮発性メモリ１０２に記憶されたν０〜ν１５のいずれかを示す。更に、ｒはラウンド数を示し、０〜１５のいずれかの値を示す。
【００５５】
また、式（１）において用いられた記号“(＋)”は排他的論理和のＸＯＲを示し、記号“←”は右辺を左辺に代入することを示している。
【００５６】
ここで、識別番号ｉ及びラウンド数ｒが共に０を示すと仮定した場合の演算処理について説明する。識別番号ｉ及びラウンド数ｒが０を示すと仮定すると、演算部１０５は、以下の式（１）´に示す演算処理を実行する。
【００５７】
ν０←ν０＋ν４＋（ｍ０(＋)ｃ０）                                  式（１）´
なお、演算部１０５は、式（１）´に示す演算処理を実行するために、定数ｃ０、定数ν０，ν４、及びメッセージブロックｍ０を揮発性メモリ１０２から読出し、演算処理を実行する。
【００５８】
以下に示す演算処理についても、演算部１０５は、演算処理を実行するために必要となる値を揮発性メモリ１０２から適宜読出し、演算処理を実行する。
【００５９】
続いて、演算部１０５は、以下の式（２）に示す演算処理を実行する（ステップＳ６）。
【００６０】
ｄ←（ｄ(＋)ａ）<<<１６                                          式（２）
なお、ＣＰＵ１０４が６４ビットＣＰＵであると、演算部１０５は、図５に示すように、式（２）に示したローテーション演算の一部を以下の式（３）に基づいて実行する。
【００６１】
ｘ<<<ｎ＝ｘ<<ｎ‖ｘ>>（３２−ｎ）                              式（３）
すなわち、演算部１０５は、以下の式（４）に示すように、ローテーション演算処理の一部を実行する。
【００６２】
（ｄ(＋)ａ）<<<１６＝（ｄ(＋)ａ）<<１６‖（ｄ(＋)ａ）>>（３２−１６）      式（４）
なお、式（３）に用いられた記号“<<<”は左方向にローテーションすることを示し、記号“<<”は左側にシフトすることを示し、記号“>>”は右側にシフトすることを示している。例えば、“ｘ<<ｎ”は、変数ｘをｎビット左側にシフトすることを示している。また、記号“‖”は論理和のＯＲを示している。記号“＝”は、左辺が右辺の結果にステップＳ７のマスク処理を施して得られることから、厳密にはイコールとは言えないが、近似的にイコールである両辺の関係を表している。
【００６３】
次に、演算部１０５は、図６に示すように、ステップＳ６において出力された“ｄ”が記憶されている揮発性メモリ１０２内の６４ビット幅のデータ記憶領域の下位３２ビットを０でマスクする（ステップＳ７）。これにより、ステップＳ７の実行結果の上位３２ビットデータが、変数（ｄ(＋)ａ）に対するローテーション基数３２の１６ビット左ローテーション演算処理の実行結果として得られる。
【００６４】
続いて、演算部１０５は、以下の式（５）に示す演算処理を実行する（ステップＳ８）。
【００６５】
ｃ←ｃ＋ｄ                                                        式（５）
次に、演算部１０５は、ステップＳ６と同様に、以下の式（６）に示すローテーション演算処理の一部を式（３）に基づいて実行する（ステップＳ９）。
【００６６】
ｂ←（ｂ(＋)ｃ）<<<１２                                          式（６）
続いて、演算部１０５は、ステップＳ７と同様に、ステップＳ９において出力された“ｂ”が記憶されているデータ記憶領域の下位３２ビットを０でマスクする（ステップＳ１０）。これにより、ステップＳ１０の実行結果の上位３２ビットデータが、変数（ｂ(＋)ｃ）に対するローテーション基数３２の１２ビット左ローテーション演算処理の実行結果として得られる。
【００６７】
次に、演算部１０５は、以下の式（７）に示す演算処理を実行する（ステップＳ１１）。
【００６８】
ａ←ａ+ｂ+（ｍσｒ（２ｉ+１）(＋)ｃσｒ（２ｉ））                          式（７）
続いて、演算部１０５は、ステップＳ６と同様に、以下の式（８）に示すローテーション演算処理の一部を式（３）に基づいて実行する（ステップＳ１２）。
【００６９】
ｄ←（ｄ(＋)ａ）<<<８                                            式（８）
次に、演算部１０５は、ステップＳ７と同様に、ステップＳ１２において出力された“ｄ”が記憶されているデータ記憶領域の下位３２ビットを０でマスクする（ステップＳ１３）。
【００７０】
続いて、演算部１０５は、以下の式（９）に示す演算処理を実行する(ステップＳ１４)。
【００７１】
ｃ←ｃ+ｄ                                                        式（９）
次に、演算部１０５は、ステップＳ６と同様に、以下の式（１０）に示すローテーション演算処理の一部を式（３）に基づいて実行する（ステップＳ１５）。
【００７２】
ｂ←（ｂ(＋)ｃ）<<<７                                          式（１０）
続いて、演算部１０５は、ステップＳ７と同様に、ステップＳ１５において出力された“ｂ”が記憶されているデータ記憶領域の下位３２ビットを０でマスクし、ハッシュ値を算出する（ステップＳ１６）。
【００７３】
しかる後に、演算部１０５は、当該算出されたハッシュ値を不揮発性メモリ１０３内の６４ビット幅のデータ記憶領域の上位３２ビットに書込む（ステップＳ１７）。
【００７４】
なお、全ての識別番号ｉ及びラウンド数ｒについての演算処理が終了するまで、ステップＳ５〜ステップＳ１７の処理は繰り返し実行される。例えば、識別番号ｉ及びラウンド数ｒが共に０を示す場合の演算処理が終了すると、識別番号ｉが０を示し、ラウンド数ｒが１を示す場合の演算処理が再度実行される。
【００７５】
なお、ＣＰＵ１０４が３２ビットＣＰＵである場合の動作については、非特許文献１に示される動作と同一であるため、非特許文献１を参照されたい。
【００７６】
以上説明した第１の実施形態によれば、計算に必要なデータを６４ビット幅のデータ記憶領域の上位３２ビットに書込むＣＰＵ１０４と、演算プログラムに含まれるローテーション基数３２のｎビット左ローテーション演算処理を式（３）と下位３２ビットのマスク処理とにより実行する演算部１０５とを備えた構成により、ＣＰＵ環境が６４ビットＣＰＵであってもＢＬＡＫＥ−２５６に規定されたハッシュ演算を実行することが可能となり、演算プログラムのソースコードを共通化することができる。
【００７７】
また、第１の実施形態によれば、左ローテーション演算処理を下位３２ビットのマスク処理により実行する構成により、圧縮関数の演算におけるマスク処理を４回で済ませることができる（ステップＳ７，Ｓ１０，Ｓ１３，Ｓ１６の４回）。一方、左ローテーション演算処理を上位３２ビットのマスク処理により実行する場合、本発明者の検討によれば、圧縮関数の演算におけるマスク処理が８回必要となる。従って、第１の実施形態によれば、左ローテーション演算処理を上位３２ビットのマスク処理により実行する場合に比べ、圧縮関数の演算におけるマスク処理を４回減らすことができる。
【００７８】
（第２の実施形態）
図７は、第２の実施形態に係るハッシュ関数演算装置の構成の一例を示す機能ブロック図である。ハッシュ関数演算装置２０は、プログラム記憶部２０１、揮発性メモリ２０２、不揮発性メモリ２０３、ＣＰＵ２０４及び演算部２０５を備えている。
【００７９】
ここで、プログラム記憶部２０１は、ＣＰＵ２０４から読出可能な記憶装置であり、例えばＲＯＭ（リードオンリーメモリ）であって、ＳＨＡ−２５６に規定されたハッシュ演算を示す演算プログラムを記憶している。なお、プログラム記憶部２０１は、プログラムを外部からインストールして保持する構成でもよい。
【００８０】
揮発性メモリ２０２は、ＣＰＵ２０４から読出／書込可能な記憶装置であり、例えばＲＡＭ（ランダムアクセスメモリ）であって、初期値、定数、メッセージブロック、計算に必要なデータ及び計算途中のデータ等を記憶している。なお、揮発性メモリ２０２は、複数の３２ビット幅または６４ビット幅のデータ記憶領域を有しており、このデータ記憶領域内に計算に必要なデータ等を適宜格納している。また、初期値の語は、「初期ベクトル」又は「初期ハッシュ値（the initial hash value）」としてもよい。
【００８１】
不揮発性メモリ２０３は、ＣＰＵ２０４から読出／書込可能な記憶装置であり、例えばＥＥＰＲＯＭ（電気的に書換え可能なＲＯＭ）であって、メッセージデータ及びハッシュ値等を記憶している。なお、メッセージデータは、ＣＰＵ２０４によってメッセージ長が５１２ビットの倍数となるようなパティング処理が実行された後に、１６個の３２ビット長のメッセージブロックに分割され、これらメッセージブロックは揮発性メモリ２０２に記憶される。
【００８２】
また、不揮発性メモリ２０３は、揮発性メモリ２０２と同様に、複数の３２ビット幅または６４ビット幅のデータ記憶領域を有しており、このデータ記憶領域内に計算結果等を適宜記憶している。
【００８３】
ＣＰＵ２０４は、プログラム記憶部２０１に記憶された演算プログラムを読出し、この演算プログラムを実行する。また、ＣＰＵ２０４は、揮発性メモリ２０２及び不揮発性メモリ２０３に記憶されたデータの読出／書込処理を実行する。具体的には、以下の各機能(f204-1)〜(f204-4)をもっている。
【００８４】
(f204-1)  ハッシュ演算を実行する前に、ＣＰＵ環境が３２ビットＣＰＵ環境であるか又は６４ビットＣＰＵ環境であるかを判定するＣＰＵ環境判定機能。
【００８５】
(f204-2)  ＣＰＵ環境判定機能による判定結果が６４ビットＣＰＵである旨を示すと、プログラム記憶部２０１に演算プログラムに記述されたハッシュ演算の初期値及び定数を揮発性メモリ２０２内の６４ビット幅のデータ記憶領域の下位３２ビットに書込む機能。
【００８６】
(f204-3)  不揮発性メモリ２０３に記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割したメッセージブロックを生成し、当該生成されたメッセージブロックを揮発性メモリ２０２内の６４ビット幅のデータ記憶領域の下位３２ビットに書込む機能。
【００８７】
(f204-4)  揮発性メモリ２０２に書込まれた初期値、定数及びメッセージブロックに基づいて、プログラム記憶部２０１から読出された演算プログラムを実行する機能。
【００８８】
なお、ＣＰＵ環境判定機能による判定結果が３２ビットＣＰＵである旨を示すとき、ＣＰＵ２０４は、演算プログラムに記述されたハッシュ演算の初期値及び定数を揮発性メモリ２０２内の３２ビット幅のデータ記憶領域に書込む処理と、記憶されたメッセージデータを読出し、当該読出されたメッセージデータを分割したメッセージブロックを生成し、当該生成されたメッセージブロックを揮発性メモリ２０２内の３２ビット幅のデータ記憶領域に書込む処理といった非特許文献２に示される処理と同一の処理を実行するため、ここでは詳細な説明を省略する。
【００８９】
演算部２０５は、ＣＰＵ２０４によって実行中のハッシュ演算におけるローテーション等の演算を実行する。具体的には、例えば、以下の各機能(f205-1)〜(f205-2)をもっている。
【００９０】
(f205-1)  ＣＰＵ２０４によって実行中のハッシュ演算における変数ｘに対してのローテーション基数３２の右ローテーション演算処理（ｘ＞＞＞ｎ）を実行する右ローテーション演算機能（但し、変数ｘは、ＳＨＡ−２５６に規定された変数Ｔ1，Ｔ2の処理過程のデータを表す）。
【００９１】
(f205-2)  右ローテーション演算実行機能の実行結果を用いてハッシュ演算を更に実行することにより算出されたハッシュ値を不揮発性メモリ２０３内の６４ビット幅のデータ記憶領域の下位３２ビットに書込む機能。
【００９２】
ここで、右ローテーション演算実行機能(f205-1)は、例えば、以下の各機能(f205-1-1)〜(f205-1-4)をもっている。
【００９３】
(f205-1-1)  変数ｘのｎビット右シフト演算処理（ｘ＞＞ｎ）を実行する右シフト演算実行機能。
【００９４】
(f205-1-2)  変数ｘの（３２−ｎ）ビット左シフト演算処理（ｘ＜＜（３２−ｎ））を実行する左シフト演算実行機能。
【００９５】
(f205-1-3)  右シフト演算実行機能の実行結果と左シフト演算実行機能の実行結果との論理和演算を実行する論理和演算実行機能。
【００９６】
(f205-1-4)  論理和演算実行機能の実行結果の上位３２ビットをゼロ値でマスクする処理により、ｎビット右ローテーション演算処理（ｘ＞＞＞ｎ）の実行結果を得るマスク処理機能。
【００９７】
次に、以上のように構成されたハッシュ関数演算装置の動作について、図８のフローチャートと、図９〜図１２の模式図とを参照しながら説明する。但し、ＣＰＵ２０４が６４ビットＣＰＵであると仮定する。
【００９８】
始めに、ＣＰＵ２０４は、プログラム記憶部２０１に記憶された演算プログラムを読出し、図９に示すように、当該読出された演算プログラムに記述された初期値Ｈ０（０）〜Ｈ７（０）及び定数Ｋ０（２５６）〜Ｋ６３（２５６）を揮発性メモリ２０２内の複数の６４ビット幅のデータ記憶領域の下位３２ビットにそれぞれ書込む（ステップＳ２１）。なお、初期値Ｈ０（０）〜Ｈ７（０）及び定数Ｋ０（２５６）〜Ｋ６３（２５６）の具体的な値については、非特許文献２を参照されたい。
【００９９】
続いて、ＣＰＵ２０４は、不揮発性メモリ２０３に記憶されたメッセージデータを読出し、図１０ａに示すように、当該読出されたメッセージデータのうちの５１２ビット長のメッセージデータを１６個に分割したメッセージブロックＭ０（ｉ）〜Ｍ１５（ｉ）を生成し、図１０ｂに示すように、当該生成されたメッセージブロックＭ０（ｉ）〜Ｍ１５（ｉ）を揮発性メモリ２０２内の６４ビット幅データ記憶領域の下位３２ビットにそれぞれ書込む（ステップＳ２２）。
【０１００】
次に、演算部２０５は、以下の式（１１）に示すローテーション演算処理を実行する（ステップＳ２３）。
【０１０１】
Ｔ１＝ｈ＋Σ１｛２５６｝（ｅ）＋Ｃｈ（ｅ，ｆ，ｇ）＋Ｋｔ｛２５６｝＋Ｗｔ      式（１１）
なお、式（１１）に示すローテーション演算処理の出力“Ｔ１”は、揮発性メモリ２０２内の６４ビット幅のデータ記憶領域の下位３２ビットに記憶される。また、以下に示す演算処理の出力についても、揮発性メモリ２０２内の６４ビット幅データ記憶領域の下位３２ビットに適宜記憶されるものとする。
【０１０２】
なお、Ｗｔはメッセージスケジュールを示し、ｔはメッセージスケジュールＷｔ及び定数Ｋｔの識別番号を示している。また、ａ〜ｈは変数であり、揮発性メモリ２０２に記憶された初期値Ｈ０（０）〜Ｈ７（０）のいずれかを示している。更に、Σ１｛２５６｝（ｅ）及びＣｈ（ｅ，ｆ，ｇ）は論理関数を示している。なお、メッセージスケジュールＷｔ、論理関数Σ１｛２５６｝（ｅ）及びＣｈ（ｅ，ｆ，ｇ）、及び後述する論理関数についての詳細は、非特許文献２を参照されたい。
【０１０３】
また、演算部２０５は、演算処理を実行するために必要となる値を揮発性メモリ２０２から適宜読出し、演算処理を実行する。
【０１０４】
なお、ＣＰＵ２０４が６４ビットＣＰＵであると、演算部２０５は、図１１に示すように、式（１１）に示したローテーション演算の一部を以下の式（１２）に基づいて実行する。
【０１０５】
ｘ>>>ｎ＝ｘ<<ｎ‖ｘ>>（３２−ｎ）                                式（１２）
続いて、演算部２０５は、図１２に示すように、ステップＳ２３において出力された“Ｔ１”が記憶されている揮発性メモリ２０２内の６４ビット幅のデータ記憶領域の上位３２ビットを０でマスクする（ステップＳ２４）。これにより、ステップＳ２４の実行結果の下位３２ビットデータが、変数Ｔ1の途中経過のデータに対するローテーション基数３２のｎビット右ローテーション演算処理の実行結果として得られる。
【０１０６】
次に、演算部２０５は、ステップＳ２３と同様に、以下の式（１３）に示すローテーション演算処理を式（１２）に基づいて実行する（ステップＳ２５）。
【０１０７】
Ｔ２＝Σ０｛２５６｝（ａ）＋Ｍａｊ（ａ，ｂ，ｃ）                        式（１３）
なお、Σ０｛２５６｝（ａ）及びＭａｊ（ａ，ｂ，ｃ）は論理関数を示している。
【０１０８】
続いて、演算部２０５は、ステップＳ２４と同様に、ステップＳ２５において出力された“Ｔ２”が記憶されているデータ記憶領域の上位３２ビットを０でマスクする（ステップＳ２６）。これにより、ステップＳ２６の実行結果の下位３２ビットデータが、変数Ｔ2の途中経過のデータに対するローテーション基数３２のｎビット右ローテーション演算処理の実行結果として得られる。
【０１０９】
次に、演算部２０５は、以下の式（１４）に示す演算処理を実行する（ステップＳ２７）。
【０１１０】
ｈ＝ｇ                                                              式（１４）
続いて、演算部２０５は、以下の式（１５）に示す演算処理を実行する（ステップＳ２８）。
【０１１１】
ｇ＝ｆ                                                              式（１５）
次に、演算部２０５は、以下の式（１６）に示す演算処理を実行する（ステップＳ２９）。
【０１１２】
ｆ＝ｅ                                                              式（１６）
続いて、演算部２０５は、ステップＳ２３と同様に、以下の式（１７）に示すローテーション演算処理を式（１２）に基づいて実行する（ステップＳ３０）。
【０１１３】
ｅ＝ｄ＋Ｔ１                                                        式（１７）
次に、演算部２０５は、ステップＳ２４と同様に、ステップＳ３０において出力された“ｅ”が記憶されているデータ記憶領域の上位３２ビットを０でマスクする（ステップＳ３１）。
【０１１４】
続いて、演算部２０５は、以下の式（１８）に示す演算処理を実行する（ステップＳ３２）。
【０１１５】
ｄ＝ｃ                                                              式（１８）
次に、演算部２０５は、以下の式（１９）に示す演算処理を実行する（ステップＳ３３）。
【０１１６】
ｃ＝ｂ                                                              式（１９）
続いて、演算部２０５は、以下の式（２０）に示す演算処理を実行する（ステップＳ３４）。
【０１１７】
ｂ＝ａ                                                              式（２０）
次に、演算部２０５は、ステップＳ２３と同様に、以下の式（２１）に示すローテーション演算処理を式（１２）に基づいて実行する（ステップＳ３５）。
【０１１８】
ａ＝Ｔ１＋Ｔ２                                                        式(２１)
続いて、演算部２０５は、ステップＳ２４と同様に、ステップＳ３５において出力された“ａ”が記憶されているデータ記憶領域の上位３２ビットを０でマスクし、ハッシュ値を算出する（ステップＳ３６）。
【０１１９】
次に、ＣＰＵ２０４は、ステップＳ２１〜ステップＳ３６の処理が識別番号ｔを６３として実行されたか否かを判定し、この判定結果が実行されていない旨を示す場合には、識別番号ｔをｔ＋１とした後に、ステップＳ２１〜ステップＳ３６の処理を繰り返し実行するように制御する（ステップＳ３７）。なお、ステップＳ３７において、ステップＳ２１〜ステップＳ３６の処理が識別番号ｔを６３として実行された旨を示す場合には、ステップＳ３８の処理に進む。
【０１２０】
しかる後に、演算部２０５は、当該算出されたハッシュ値を不揮発性メモリ２０３内の６４ビット幅のデータ記憶領域の下位３２ビットにそれぞれ書込む（ステップＳ３８）。
【０１２１】
なお、ＣＰＵ２０４が３２ビットＣＰＵである場合の動作については、非特許文献２に示される動作と同一であるため、非特許文献２を参照されたい。
【０１２２】
以上説明した第２の実施形態によれば、計算に必要なデータを６４ビット幅のデータ記憶領域の下位３２ビットに書込むＣＰＵ２０４と、演算プログラムに含まれるローテーション基数３２のｎビット右ローテーション演算処理を式（１２）と上位３２ビットのマスク処理とにより実行する演算部２０５とを備えた構成により、ＣＰＵ環境が６４ビットＣＰＵであってもＳＨＡ−２５６に規定されたハッシュ演算を実行することが可能となり、演算プログラムのソースコードを共通化することができる。
【０１２３】
また、本発明者の検討によれば、第２の実施形態における右ローテーション演算処理を上位３２ビットのマスク処理により実行する構成により、右ローテーション演算処理を下位３２ビットのマスク処理により実行する場合に比べ、シフト処理を６回減らすことができる。
【０１２４】
以上説明した少なくともひとつの実施形態によれば、計算に必要なデータを６４ビット幅のデータ記憶領域の上位または下位３２ビットに書込む機能と、式（３）または式（１２）に基づいてローテーション演算処理の一部を実行し、ローテーション演算処理の一部が実行される毎に、出力が記憶されている６４ビット幅データ記憶領域の上位または下位３２ビットに対してマスク処理を加える機能とを備えた構成により、３２ビットＣＰＵ及び６４ビットＣＰＵのいずれに利用されても互いに同一のハッシュ値を算出でき、ソースコードの共通化を実現させることができる。
【０１２５】
補足すると、従来のローテーション演算は、６４ビット変数ｘに対してのローテーション基数６４のｎビット右ローテーションの場合（０＜ｎ＜６４）、次式によって実行される。
【０１２６】
ｘ＞＞＞ｎ＝ｘ＞＞ｎ‖ｘ＜＜（６４−ｎ）
一方、第２実施形態のローテーション演算は、６４ビット変数ｘに対してのローテーション基数３２のｎビット右ローテーションの場合（０＜ｎ＜３２）、次式及び上位３２ビットのマスク処理によって実行される。
【０１２７】
ｘ＞＞＞ｎ＝ｘ＞＞ｎ‖ｘ＜＜（３２−ｎ）
このように、第２実施形態のローテーション演算は、ローテーション時の格納方法だけでなく、シフトさせるビット数を変えている構成により、６４ビットＣＰＵ環境においてローテーション基数３２のローテーション演算結果（＝３２ビットＣＰＵ環境でのローテーション演算結果）を得られる効果がある。このような構成及び効果は、従来のローテーション演算手法から得られるものではない。なお、第２実施形態の右ローテーション演算を例に挙げて説明したが、第１実施形態の左ローテーション演算も同様の構成により、同様の効果を得ることができる。
【０１２８】
なお、上記の各実施形態に記載した手法は、コンピュータに実行させることのできるプログラムとして、磁気ディスク（フロッピー（登録商標）ディスク、ハードディスクなど）、光ディスク（ＣＤ−ＲＯＭ、ＤＶＤなど）、光磁気ディスク（ＭＯ）、半導体メモリなどの記憶媒体に格納して頒布することもできる。
【０１２９】
また、この記憶媒体としては、プログラムを記憶でき、かつコンピュータが読み取り可能な記憶媒体であれば、その記憶形式は何れの形態であっても良い。
【０１３０】
また、記憶媒体からコンピュータにインストールされたプログラムの指示に基づきコンピュータ上で稼働しているＯＳ（オペレーティングシステム）や、データベース管理ソフト、ネットワークソフト等のＭＷ（ミドルウェア）等が上記実施形態を実現するための各処理の一部を実行しても良い。
【０１３１】
さらに、各実施形態における記憶媒体は、コンピュータと独立した媒体に限らず、ＬＡＮやインターネット等により伝送されたプログラムをダウンロードして記憶または一時記憶した記憶媒体も含まれる。
【０１３２】
また、記憶媒体は１つに限らず、複数の媒体から上記の各実施形態における処理が実行される場合も本発明における記憶媒体に含まれ、媒体構成は何れの構成であっても良い。
【０１３３】
なお、各実施形態におけるコンピュータは、記憶媒体に記憶されたプログラムに基づき、上記の各実施形態における各処理を実行するものであって、パソコン等の１つからなる装置、複数の装置がネットワーク接続されたシステム等の何れの構成であっても良い。
【０１３４】
また、各実施形態におけるコンピュータとは、パソコンに限らず、情報処理機器に含まれる演算処理装置、マイコン等も含み、プログラムによって本発明の機能を実現することが可能な機器、装置を総称している。
【０１３５】
なお、本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１３６】
１０，２０…ハッシュ関数演算装置、１０１，２０１…プログラム記憶部、１０２，２０２…揮発性メモリ、１０３，２０３…不揮発性メモリ、１０４，２０４…ＣＰＵ、１０５，２０５…演算部。
【図１】
0005433621.tif 000002
【図２】
0005433621.tif 000003
【図３】
0005433621.tif 000004
【図４】
0005433621.tif 000005
【図５】
0005433621.tif 000006
【図６】
0005433621.tif 000007
【図７】
0005433621.tif 000008
【図８】
0005433621.tif 000009
【図９】
0005433621.tif 000010
【図１０】
0005433621.tif 000011
【図１１】
0005433621.tif 000012
【図１２】
0005433621.tif 000013