説明

マスク生成関数演算装置、そのプログラム及び記録媒体

【課題】 少ない演算量で高速に演算可能とする。
【解決手段】 乱数の種Cと所望出力長TLenが入力され(S1)、[TLen/DLen]によりハッシュ演算回数Nを、[CLen+4+1+8/BLen]により各ハッシュ演算におけるブロック(要素)ハッシュ演算の繰返回数Mを求める。CLen:Cの長さ、4:符号化部I2OSP(n,4)の長さ、1:パディング長、8:Cを符号化した長さ、[A]はA以上の最少整数。nをN−1に初期化し、次回n−1の演算で利用できる、つまり入出力が同一となる共通演算部分を計算し(S4)、その部分の各演算を実行し、その演算結果を演算中間値として記憶部に保存し(S6)、非共通演算部分の各演算は演算中間値をも入力して演算し、各ハッシュ演算の結果h(n)を保存し(S7)、nを−1して同様のことを繰返し、n=0で全てのh(n)を連結して出力する。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、例えば情報セキュリティ技術に利用されハッシュ関数を用いて、乱数を生成するマスク生成関数の演算装置、そのプログラム及びその記録媒体に関する。
【背景技術】
【0002】
情報セキュリティ技術で用いる乱数生成法は、順に生成される乱数値間の相関が低くなることが求められている。このような乱数を生成する方法として、マスク生成関数という演算方法がIEEEやPKCSで標準化されている。このマスク生成関数は、任意長の乱数の種から、ハッシュ関数演算を繰り返し行うことで、任意長の乱数を生成する。具体的な演算内容は、下記の数式で表され、この式中の先頭からTLenオクテットをマスク生成関数とする。
T(C,TLen)=
H(C‖I2OSP(0,4))‖H(C‖I2OSP(1,4))‖
…‖H(C‖I2OSP(N−1,4)) ……(1)
ここで、Cは乱数の種となる任意長の入力データ(以下乱数の種Cという)、TLenは所望の出力オクテット長である。1オクテットは8ビットを表わす単位である。また、H(X)はXのハッシュ関数演算を、I2OSP(a,4)(符号化部という)はオクテット長4である整数aの符号化した表現を、A‖BはAとBの連結を表す。Nは、所望するマスク生成関数の出力オクテット長TLenと、ハッシュ関数出力の固定オクテット長Dから計算され、下記の数式で表される。
【0003】
N=[TLen/D] ([G]はG以上の最小整数を表す。)
上述したハッシュ関数演算H(X)は、任意のハッシュ関数を使用できるが、従来はFIPS180−2で規定されているSHA−1,SHA−256,SHA−384,SHA−512などのSHA系のアルゴリズムが使用される。SHA系のそれぞれのアルゴリズムは、パラメータのサイズ等が異なるが、演算の構造はほぼ同じなので、代表して以下にSHA−1のアルゴリズムを説明する。
SHA−1の演算は、メッセージと呼ばれる261オクテット以下の任意長の入力データ、この例ではC‖I2OSP(n,4)(n=0,1,…,N−1)から、ダイジェストと呼ばれる20オクテットの長さを出力する演算である。入力データはブロックと呼ばれる64オクテット単位に演算されるため、下記手順で入力データを64オクテットの整数倍に拡張する。すなわち、入力データの終端にビット“1”を結合し、(ブロック長64オクテットの整数倍−8)オクテットまでビット“0”を結合し、最後に入力データ長を符号化した8オクテットデータを結合する処理が行われる。この処理をパディングという。
【0004】
各ブロックに対する要素ハッシュ演算は以下のように演算される。即ち、入力された64オクテットのブロックをそのまま4オクテット単位に分割してワードW0〜W15とする。更にこれらW0〜W15からW=(Wt−16(+)Wt−14(+)Wt−8(+)Wt−3)<<<1,…,t=16,…,76,W<<<1はWを1ビット左巡環シフトすることを表わし、A(+)BはAとBのビット単位の排他的論理和を表わす。これら求めたワードW0〜W79を、ダイジェストと同じ長さの中間バッファの内容に、順に混ぜ込みながら同様な演算を80ステップ行う。中間バッファの初期値は、最初のブロックの要素ハッシュ演算の場合には、イニシャルベクタと呼ばれる予め定められた一定値であり、2番目以降のブロックの要素ハッシュ演算の場合には、前のブロックの要素ハッシュ演算の出力とする。前記中間バッファの内容に対する混ぜ込み演算は周知であるから説明を省略する(例えば……を参照)。全てのワードについて混ぜ込み演算を行った後、最終処理として、中間バッファの初期値を再度加算し、そのときのバッファ値を要素ハッシュ演算の出力とする。
【0005】
なお、SHA−256,SHA−384,SHA−512などの他のSHA系アルゴリズムにおいては、上述したSHA−1アルゴリズムにおける混ぜ込み演算式や、ブロックやワードやダイジェストの長さが異なるだけで、演算の構造はほとんど同じである。
ここで、前述した通り、マスク生成関数演算処理は、ハッシュ演算の連結であるため、その演算処理量は、所望する出力オクテット長TLenにほぼ比例して大きくなる。また、一般的なハッシュ関数の演算処理は逐次的であるため、その演算処理量は入力オクテット長にほぼ比例する。よって、乱数の種と所望する出力オクテット長が増大すると、それに応じて演算処理量が増大する。
【0006】
なお、特許文献1において、マスク生成関数演算処理と同様の演算を、入力された乱数部と結合する符号化部をそれぞれ別に演算することで、高速に演算する方法が示されている。つまり乱数の種Cを分割し、その各分割データごとに順次ハッシュ関数演算を行い、その演算結果と、各I2OSP(n,4)(n=0,1,…,N)(符号化部)とについてハッシュ関数演算を行い、その演算結果を連結して出力する。
【特許文献1】特開2002−304121号公報
【発明の開示】
【発明が解決しようとする課題】
【0007】
前記特許文献1に示す方法は、演算の内部処理がハッシュ関数の入力ブロックサイズ単位でしか処理できないため効率が悪いという問題があった。また、符号化部を含むデータは必ず繰り返し演算するため、実際には値が変わらない場合でも繰り返し演算するため、効率が悪いという問題があった。
この発明の目的は、値が変わらない繰り返し演算を行うことなく、入力である乱数の種のオクテット長と、所望する出力のオクテット長が大きいときに、演算処理量が増大するという課題を解決するマスク生成関数演算装置、そのプログラム及びその記録媒体を提供することにある。
【課題を解決するための手段】
【0008】
この発明によるマスク生成関数演算装置においては、演算に先立ち、入力データから共通に行われる共通演算部分を判定し、その共通演算部分の演算結果を保存し、その共通演算部の演算結果を、非共通演算部分の演算に利用する。即ち、入力データと所望する出力長とが入力され、これらとハッシュアルゴリズムに基づくパラメータとからマスク生成関数演算の繰り返し内容が計算され、繰り返し演算の中途で入出力が同一となる共通演算部分が入力データ及び上記パラメータから計算され、共通演算部分について演算された演算中間値が記憶部に保存され、その記憶部に保存した共通演算部分の演算結果も、非共通演算部分の演算の入力として演算が行われる。
【発明の効果】
【0009】
この発明によれば、演算の中途で入出力が同一となる共通演算部分が計算され、共通演算部分の演算結果をそれ以外の演算に適宜使用するため、少ない計算量で高速に演算が可能となる。
【発明を実施するための最良の形態】
【0010】
(第1の実施形態)
以下、図面を参照してこの発明装置の第1の実施の形態を説明する。その機能構成の主要部を示し、この装置は、乱数の種(入力データ)Cと、所望の出力オクテット長TLenが入力され乱数T(C)を出力する。
このマスク生成関数演算装置は、各部の動作を適切に制御することで、マスク生成関数演算装置の動作を制御する制御部10と、入力から演算内容および演算動作内容を判定する判定部20と、ブロック(要素)SHA−1演算の途中の中間バッファ値、ステップ数、および演算結果であるダイジェストを出力できる要素SHA−1演算部30と、要素SHA−1演算部30の出力であるダイジェストを記憶するダイジェスト記憶部40と、要素SHA−1演算部30の出力である中間バッファ値およびステップ数を記憶するバッファ記憶部50と、ブロック(要素)SHA−1演算を繰り返し行って得られるマスク値を記憶しておく出力記憶部60を有する。この装置の処理手順の例を図2に示す。189オクテットの乱数の種Cと、所望の出力オクテット長TLen=6400オクテットが入力したときを例として処理内容を説明する。
【0011】
本実施例におけるマスク生成関数演算装置に、入力として乱数の種Cと、所望の出力オクテット長TLen=6400が入力される(ステップS1)。
次に、判定部20において演算内容の判定を行う(ステップS2)。異なる符号化部(CI2OSP(n,4)(n=0,1,…,N−1)のSHA−1演算の回数NはN=[TLen/DLen]を計算することで得られ、この数値例ではN=[6400/20]=320回と判定される。Nを符号化部数という。また、各n(n=0,…,N−1)の値に対するブロック(要素)SHA−1演算の回数MはM=[(CLen+4+1+8)/BLen]を計算することで得られる。ここでSHA−1演算に対する入力メッセージはC‖I2OSP(n,4)であり、分子はSHA−1演算処理に使用されるデータのオクテット数で、CLenは乱数の種Cのオクテット長であり、4はI2OSP(n,4)のオクテット長であり、1はメッセージがブロック長BLen整数後でも必ず1ビットの“1”が付加されるから1オクテット分は長くなるからであり、8はメッセージの長さを表わす8オクテット長である。分母のBLenはSHA−1の入力ブロックのオクテット長を表している。この数値例ではCLenは189オクテットであるからmはm=[(189+4+1+8)/64]=4と判定される。
【0012】
以上により、この数値では図3に示すような演算を行うと判定部20により判定されることになる。189オクテット長の乱数の種Cと各符号化部(I2OSP(n,4)(n=0,1,…,319)との結合およびパディングとメッセージ長に対するブロック(要素)SHA−1演算は4回の繰返演算Cn,m(m=0,1,…,3)を行うことになる。その結果、各20オクテット長の演算結果h(n)が得られる。なおSHA−1演算の数N、つまり異なる符号化部との組み合せSHA−1演算回数(符号化部数という)Nと各SHA−1演算におけるブロック(要素)SHA−1演算の繰り返し回数(繰返回数という)Mは、判定部20内の演算内容計算部21に、TLen,CLen(乱数の種Cより得られる)と、パラメータレジスタ24よりのDLen,BLenが入力されて演算される。
【0013】
次に、ステップS2で判定したNを用いて、判定部20の内部に有するnカウンタをN−1である319に初期化する(ステップS3)。その後、nカウンタをカウント値nが319から0になるまで減算しながら、ブロック(要素)SHA−1演算を繰り返して演算を進める(ステップS4〜S8)。
ここで、nを降順に演算する理由について説明する。即ち、乱数の種Cはnによらずすべて一定値であるため、入力データC‖I2OSP(n,4)の先頭からCLenオクテットは全てのnに対して同じデータ値である。また、I2OSP(n,4)は、オクテット長4であり、かつ整数nを符号化したものを表わすため、先頭から(4−[(n+1)mod256])オクテットは、全ビット“0”である。I2OSP(n,4)の先頭部分にある全ビット“0”となるオクテット長は、nが大きくなるほど短くなる。よって、あるnのSHA−1演算の入力データのうち、Cと、I2OSP(n,4)の先頭部分にある全ビット“0”となるオクテットまでの入力データ(メッセージ)は、n−1におけるSHA−1演算の入力データC‖I2OSP(n−1,4)でも同一となる。よってSHA−1演算を逐次処理する際にはnの最大値N−1から降順に演算しながら、前の演算の中間値を利用することが効率的である。よってこの実施形態ではn=319から降順に演算を行う。
【0014】
次に、初回(n=319)におけるブロック(要素)SHA−1演算について説明する。
はじめに、演算のどの時点での中間値を次回(n=318)のSHA−1演算で利用できるかを判定部20内の保存位置計算部20cで判定する(ステップS4)。判定される中間値はブロック(要素)SHA−1演算のダイジェスト出力か、ブロック(要素)SHA−1演算のブロックW0〜W15のいずれかまでの演算の中間値である。これは、SHA−1演算の場合、W0〜W15については、64オクテットの入力を先頭から順番に4オクテット単位で割り付けたものである。したがって、イニシャルベクタもしくは前ブロックの要素SHA−1演算の結果が等しく、入力ブロックの内容が途中から異なる場合には、4オクテット単位で割り付けたW0〜W15のうち、先頭からのデータが等しくなるところまでの演算内容は同じであり、そこまで演算したときの中間バッファ値は同じとなる。つまり、中間バッファの初期値と、共通演算部分だけ混ぜ込んだバッファを記憶しておき、それらを入力として異なる入力ブロックの割付部分から演算を行うことで、SHA−1演算を中途から演算できる。
【0015】
初回(n=319)のSHA−1演算の入力データのうち、次回(n=318)の演算の入力データでも同一になるオクテット長ZLenはZLen=CLen+4−[n mod256]で計算される。ここで、第2項以降は、I2OSP(n,4)の先頭部分にある全ビット“0”となるオクテット長の計算である。数値例では同一データ長ZLen=189+4−[319mod256]=191となる。この同一データ長ZLenから、演算のどの時点での中間値を次回(n=318)のSHA−1演算で利用できるかを判定する。これは同一データ長ZLenをブロック長BLenで割ったときの商Rと余りSから判定する。ZLenをBLenで割ると、数値例では商Rが2で余りSが63となる。次回(n=318)の演算では、2回の繰り返しブロック(要素)SHA−1演算と、そのあとの63オクテット分のブロック(要素)SHA−1演算入力までは、今回のブロック(要素)SHA−1演算と同一の入力データとなる。なお63オクテット分が何個分のワードに相当するかは、余りSをワード長をWLenで割った商から1を減算し値U=[S/WLen]−1で計算され、この数値例の場合は[63/4]−1=15ワード分に相当する。以上より、初回(n=319)の演算において、2回の繰り返しブロック(要素)SHA−1演算の後、15ワード分の演算を行った時点における演算結果を中間値バッファに保存することを判定できる。
【0016】
次に、SHA−1演算を行う入力データを生成する(ステップS5)。初回(n=319)の入力データはC‖I2OSP(319,4)である。
次に、ステップS5で生成されたデータに対して、要素SHA−1演算部30で繰り返し演算を行う(ステップS6)。ここで、ステップS4での判定に従い、2回の繰り返しブロック(要素)SHA−1演算の後のダイジェスト出力Dをダイジェスト記憶部40に、その後15ワード分の演算を行った時点における演算中間値bをバッファ記憶部50に記憶する。その後n=319に対するSHA−1演算における残りの全ての演算を行う。
【0017】
次に、ステップS6で演算したSHA−1演算結果h(319)を、出力記憶部60に保存し、初回(n=319)の演算を終了する(ステップS7)。
次にステップS8でn=0か否かの判定を行い、その判定結果が0でなければステップS8aでnを−1してステップS4に戻る。
以下に2回目(n=318)以降の演算SHA−1を説明する。
2回目(n=318)の演算SHA−1演算の前に、初回(n=319)の演算と同様に、次回(n=317)の演算で利用できる中間値の判定を行う(ステップS4)。その判定の結果、2回の繰り返しブロック(要素)SHA−1演算のダイジェスト出力と、その後15ワード分のブロック(要素)SHA−1演算を行った時点におけるバッファ値の両方を保存すると判定されるが、これは初回(n=319)における判定結果と同じであるため、保存すべきダイジェスト出力Dおよび演算中間値は初回保存されたものと同一である。よって、ダイジェスト出力Dおよび演算中間値bの保存(更新)を省略することができる。
【0018】
2回目(n=318)の入力データの生成では、C‖I2OSP(318,4)から先頭の2ブロックC318,0、C318,1を除いたデータを生成する(ステップS5)。これは、次ステップで、要素SHA−1演算部に、初回(n=319)に保存したダイジェスト出力Dおよび演算中間値bを入力することで、途中から演算を開始することで、先頭の2ブロック分の演算を代用するためである。
次に、ステップS5で生成されたデータと、ダイジェスト出力Dおよび演算中間値bを用いて、要素SHA−1演算部で繰り返し演算を途中から行う(ステップS6)。なお、ステップ4で、ダイジェスト出力Dおよび演算中間値bの保存(更新)が省略可能であると判定されたため、中間結果の保存は行わない。SHA−1演算結果h(318)を、出力記憶部60に保存して、2回目(n=318)の演算を終了する。
【0019】
このようにして、前回の演算で判定保存されたダイジェスト出力Dおよび演算中間値bの保存を利用して、SHA−1演算を途中から行いながら、次回の演算で利用できるダイジェスト出力Dおよび演算中間値bを更新し、最終結果h(n)を蓄積保存していく。
なお、このように演算を進めていくと、n=256の演算におけるダイジェストDおよび演算中間値bの判定では、ZLen=189−4[256mod256]=192をBLen=64で割ると、商が3で余りが0となる。よって、n=256における3回の繰り返しブロック(要素)SHA−1演算のダイジェスト出力Dを保存しておき、次回のSHA−1演算でこれを入力とすることで、3回の繰り返し演算を省略することができる。このように、余りの0になるなど、0ワード目に相当する余りの場合、その次回のSHA−1演算では演算中間値bは使用されないため、演算中間値bの保存は省略される。
【0020】
このような演算を全てのnに対して行った後、出力記憶部60に保存されているh(0)からh(319)をh(0)‖h(1)‖…‖h(319)のように連結し(ステップS9)、これをその先頭からTLenの長さだけ出力とする。
図2中のステップS2における演算内容N,Mの計算は判定部20における演算内容計算部21で行われる。図4中に示すように演算内容計算部21内の符号化数計算部21aにTLenとDLenが入力されN=[TLen/DLen]が計算される。また演算内容計算部21内の繰返回数計算部21bにC,BLenが入力されM=[(CLen+4+1+8)/BLen]が計算される。図2中のステップS3での初期化は判定部20内のnカウンタ(演算要素カウンタ)21cに計数値nとしてN−1を設定することにより行われる。nカウンタ21cは1回のSHA−1演算が終了するごとに制御部10からの指示により1減算される。また判定部20内のパラメータレジスタ25にSHA−1演算出力長DLen、ブロック長BLen、ワード長WLen、乱数の種長CLenなどが格納されている。CLenは前処理として予め求められているものとする。
【0021】
上述した保存位置R,S,Uの計算、ダイジェストD、演算中間値bの保存、再利用処理などのための機能構成例および処理手順の例を図4および図5を参照して説明する。
ステップS11でバッファ記憶部50内の中間値バッファ(以下Bバッファという)50aの内容BをSHA−1で規定されるイニシャルベクタ値IVに初期化し、ダイジェスト記憶部40内のダイジェストバッファ(以下Dバッファという)の内容D,SHA−1演算の中間値(20オクテット)b、SHA−1演算の入力値で最終処理に使用する初期データdをそれぞれ0に初期化し、判定部20内のmカウンタ21dの計数値mを0に、要素SHA−1演算部30内の演算ステップ数0〜79を計数するwカウンタ30aの計数値wを0に初期化する。
【0022】
ステップS12で入力データにおいて、次のSHA−1演算においても同一となる同一長ZLen=CLen+4−[n mod256]の計算が行われる。この計算は判定部20における保存位置計算部22内の同一長計算部22aにCとnが入力されて行われる。その後、ステップS13で位置計算部22bでZLenとBLenが入力されてその商Rと余りSとが計算され、更にステップ計算部22cでU=[S/WLen]−1が計算される。これらが図2中のステップS4と対応する。商Rは共通演算部分のブロック数であるから位置計算部22bは共通ブロック数計算部ともいえる。
【0023】
ステップS14で演算開始時の各種データ、つまりBバッファ50aの内容がSHA−1演算の中間値bとして、Dバッファ40aの内容がブロック(要素)SHA−1演算の入力値で最終処理に使用するデータdとして、またmバッファ40bの内容m、wバッファ50bの内容wがそれぞれ取り出される。
ステップS15でnカウンタ21c及びmカウンタ21dの各カウント値n,mからブロック(要素)SHA−1演算に対する入力データCn,mが、判定部20におけるデータ生成部23内のn,mブロック生成部23aで生成される。ステップS16でその入力データCn,mに対する演算はそのブロック(入力データ)の先頭、つまりw=0回目から開始するか否かが、判定部20内の先頭判定部24aにより判定される。
【0024】
w=0と判定されるとステップS17で演算中間値b(最初(N−1,0)では0)が最終処理用入力値dとしてステップS18に移り、第n,mブロック(要素)のデータCn,mのステップwのブロック(要素)SHA−1演算が要素SHA−1演算部30で行われる。ステップS16でw=0でないと判定されると直ちにステップS18での演算が行われる。
次にステップS19は演算中間値を保存すべき位置、つまりm=Rかつw=Uであるか否かの判定を中間値保存判定部24bで行う。この判定保存位置でなければ、ステップS20はブロックSHA−1演算が終了したか、つまりw=79か否かの判定をブロック演算終了判定部24cで行い、w=79ではなく、つまり終了でなければステップS21でステップ数wを+1して、ステップS18に戻る。
【0025】
ステップS19の判定が保存位置であれば、ステップS22でステップS18で得られたSHA−1演算の中間値bをBバッファ50aに格納保存すると共に、その時のステップ数wをwバッファ50bに格納保存してステップS20へ移る。
ステップS20でそのブロック(要素)SHA−1演算が終了と判定すると、ステップS23はブロック(要素)SHA−1演算の最終処理、つまり、SHA−1演算の最終(ステップw=79)の演算結果bとその要素SHA−1演算の初期入力値dを要素SHA−1演算部30内の加算部30bで加算し、その加算結果を演算中間値bとする。
【0026】
次にステップS24はダイジェスト保存位置か否か、つまりm=R−1か否かの判定をダイジェスト保存判定部24bで行う。この判定が保存位置でなければステップS25はそのnにおけるSHA−1演算が終了したか、つまりm=M−1となったか否かの判定を要素演算終了判定部24eで行う。ステップS24でダイジェスト保存位置である、つまり共通演算部分におけるブロック単位の演算が終了したと判定されると、ステップS26はBバッファ50aにステップS23で求めた演算中間値bを、またその時のステップ数wをwバッファ50bにそれぞれ格納保存してステップS25に移る。
【0027】
ダイジェスト保存判定部24dは(共通演算部分のブロック単位演算)終了判定部ともいえる。
ステップS25の判定がそのnにおけるSHA−1の演算が終了していなければ、ステップS27はmカウンタ21dを+1し、かつwカウンタ30aを0にリセットしてステップS15に戻る。ステップS25の判定が終了していればステップS28はその時のステップS23の最終処理結果(演算中間値)bをその第nSHA−1演算結果h(n)として出力記憶部60に格納保存する。次のステップS29は全ての演算が終了したか、つまりn=0であるか否かを最終判定部24fで判定し、その判定が終了でなければステップS30でnカウンタ21cを1減算してステップS12に戻る。ステップS28,S29,S30は図2中のステップS7,S8,S8aとそれぞれ対応する。ステップS29の判定が終了であれば、その後の処理は図2に示した処理と同様である。
【0028】
上述した処理において、各種パラメータの取り出し、各種判定結果に基づく、カウンタの歩進制御、各種データの保存処理、次の処理へ歩進、各部に対する動作指令などは制御部10が行う。なおステップS11の初期化処理は、図2中のステップS3の初期化処理で行ってもよい。ステップS18〜S27が図2中のステップS6と対応する。上述から理解されるように保存位置計算部22で計算されたR,S,Tに基づいて、その時の演算中間値bを保存し、次のnのSHA−1演算の前回と同一データでない部分の入力データ、つまりデータ生成部23aで生成されたデータであり、そのSHA−1演算としては途中からの演算となるが、それまでの演算結果として、前記保存した中間値bが再利用される。この点で保存位置計算部22は共通演算計算部ともいえ、また前記途中からの演算は非共通部分の演算であり、データ生成部23aは非共通演算データ生成部といえる。
【0029】
以上のように演算したときの、演算対象データを図6に示す。図中実線部分がSHA−1演算に利用されたデータを示し、破線部分は中間値bおよびダイジェストdを利用することで省略されたデータを示す。最初のn=N−1のSHA−1演算はすべてのブロックC319,0、C319,1、C319,2、C319,3に対し行われ、つまりすべてが非共通演算部分であるが、n=N−2のSHA−1演算は前記商Rと対応する最初の2つのブロックC318,0とC318,1はC319,0とC319,1と同一入力データとなり、またブロックC318,2中の最初の前記余りSのワード数Uと対応する15ワードはC319,2の対応ワードの入力データと同一であるから、これら同一データに対する演算中間値d,bと、前回と異なる入力データ(非共通演算部分)C318,2の残りのワードデータ及びC318,3とが入力されて演算されることになる。n=255になるとその入力データは、その前のn=256に対する入力データと最初から3つのブロックが同一となるため、非共通演算部分はC256,3のみとなり、これと前回演算中間値d,bが演算に利用されることになる。
【0030】
このように、入力である乱数の種のオクテット長と、所望する出力のオクテット長が大きいときにも、演算に先立ち、入力データから共通に行われる共通演算部分を判定し、その共通演算部分を繰り返し演算しないよう適切に演算を行うことで、演算処理量を削減することができる。
なお、この実施例では、すべてのnに対するSHA−1演算結果h(n)を保存しておき、全ての演算が終了したときに、それらを連結して出力したが、各nにおけるSHA−1演算が終了次第、それらを順次出力しても良い。また、演算の効率を鑑みるとnが大きいほうから降順でSHA−1演算するのが好適であるが、nを小さいほうから昇順で演算しても良い。
(第2の実施形態)
第2の実施形態はISO/IEC18033−2で規定されているPSEC−KEMの暗復号化システムにおいてそのマスク生成関数演算にこの発明によるマスク生成関数演算装置を適用したものである。以下では体が163ビットのPSEC−KEMの暗号演算手順における、マスク生成関数演算装置の動作について説明する。
【0031】
PSEC−KEMの暗号化演算での過程で、KDF(I0‖C,[Log256μ]+16+KeyLen)の演算を行う。ここで、I0はI2OSP(0,4)であり、μおよびKeyLenはPSEC−KEMで使用するパラメータである。また、KDF(X,P)は、KDF(X,P)=H(X‖I2OSP(0,4))‖H(X‖I2OSP(1,4))…‖H(X‖I2OSP(N−1,4))の演算を表している。ただしH(X)はXのハッシュ演算を表しP=[Log256μ]+16+KeyLen=TLen、N=[TLen/DLen],TLenは出力オクテット長、DLenはハッシュ関数演算結果長をそれぞれ表わしている。この演算をこの発明によるマスク生成関数演算装置によって行う。この暗号化演算装置の機能構成例を図7に示す。PSEC−KEM演算部100から乱数の種C(seed)、出力オクテット長TLenおよび使用ハッシュ関数を表わす関数符号HAがこの発明によるマスク生成関数演算装置200に入力され、マスク生成関数演算装置200から、生成乱数T(seed)がPSEC−KEM演算部100に入力される。
【0032】
この実施例では、[Log256μ]=21オクテット、KeyLen=64オクテット、Cは128オクテットの乱数の種seedを使用する。したがって、マスク生成関数演算装置200の2つの入力である乱数の種Cと所望の出力長TLenは、それぞれ、132オクテットのI0‖seedと、101オクテット(21+16+64)であり、その出力は、KDF(I0‖seed,[Log256μ]+16+KeyLen)の演算結果である。
マスク生成関数演算装置200の機能構成例は図7に示すように、制御部210と、判定部220と、複数の要素ハッシュ関数演算部としての要素SHA−1演算部230、要素SHA−256演算部240、要素SHA−384演算部250、要素SHA−512演算部260と、中間データ記憶部270と、出力記憶部280とを備える。
【0033】
この第2の実施形態におけるマスク生成関数演算装置200による処理を、図8に示すフローチャートを基に説明する。また判定部220の具体的機能構成例を図9に示す。
PSEC−KEM演算部100において生成されたseed(C)、所望の出力長TLen、例えば101オクテット、および、KDFに使用するハッシュ演算アルゴリズムを表わす関数符号HA、例えば0が、マスク生成関数演算装置200に入力される(ステップS1)。
次に、判定部220において演算内容の計算を演算内容計算部221で行う(ステップS2)。
【0034】
演算で使用するKDFのアルゴリズムは、ステップS1で入力されたHAから、判定部220に設定したアルゴリズムテーブル222を参照することで判定する。例えばHA=0であって、KDFのアルゴリズムはSHA−1を選択する。
SHA−1演算の繰り返し回数、つまり符号化部数NはN=[TLen/DLen]を符号化部数計算部221aで計算することで得られ、この数値例ではN=[101/20]=6回と計算される。また、各n(n=0,1,…,N−1)の値に対するブロック(要素)SHA−1演算の回数MはM=[(CLen+4+8)/BLen]を繰返回数計算部221bで計算することで得られる。この数値例ではM=[(128+4+1+8)/64]=3回と計算される。
【0035】
以上によりこのマスク生成関数演算は図10に示すようにI0‖CとI2OSP(0,4)及びパディング〜I0‖CとI2OSP(5,4)及びパディングの6回のSHA−1演算を行い、各SHA−1演算では3回のブロック(要素)SHA−1演算を繰り返し行うことになる。
次に、判定部220において、共通演算部分の共通演算部分および個別演算部分の判定を行う(ステップS3)。共通演算部分は、全てのnに対して、先頭から同一となるブロック数kを判定することで行う。共通演算数計算部223にC,N、ブロック長BLenが入力されてk=[(CLen+4−[log256(N+1)])/BLen]−1が計算される。この数値例ではk=[(128+4−[log256(6+1)])/64]−1=2と演算される。つまり、全てのnに対して共通演算部分は先頭から2ブロック(128オクテット)であり、3ブロック目は個別演算部分であると判定される。以降は、この判定結果に従って制御部210の制御によって演算を進めていく。
【0036】
次に、共通演算部分のSHA−1演算を行う。共通演算部分である、I0‖seedの先頭2ブロックに対して、SHA−1演算を行う。まずステップS4でnカウンタ221c、mカウンタ221dの各計数値n,mをそれぞれ0に初期化し、ステップS5で入力データ生成部224aにて、mが入力されてデータ(I0‖C,I2OSP(n,4)に対する第0ブロック目のデータC0,0が生成され、ステップS6でそのデータC0,0に対し要素SHA−1演算部230によるSHA−1演算を行い、ステップS7でその演算結果であるダイジェストDを中間データ記憶部270に保存する。
【0037】
ステップS8で共通演算部分のブロックでないか、つまりm=k−1であるか否かを共通部判定部225で判定し、その判定が否であればステップS9でmカウンタ221dを1歩進してステップS5に移る。これらステップS4〜S9の処理は共通演算部分の第0回目(n=0)における入力データを(I0‖C)とイニシャルベクタ又は記憶部270中のダイジェストDを入力とするSHA−1演算である。機能構成的にはこの演算が共通部計算部を構成することになる。
ステップS8での判定がm=k−1、この例ではm=1つまり共通演算部分に対する計算の終了であればステップS10でmカウンタ221dを1歩進し、ステップS11で第n回目のSHA−1演算SHA−1のデータ(I0‖C,I2OSP(N−1,4)における第m回目のブロックデータC0,m、この例ではC0,2がデータ生成部224bで生成される。なおこの時共通部判定部225の判定出力が否定であってデータ生成部224aではなくデータ生成部224bが動作するステップS12ではステップS7で保存したダイジェストDに対してこのデータC0,2を用いて要素SHA−1演算部230でSHA−1演算を行い、ステップS13ではmカウンタ221dの計数値mが繰返回数と等しいか、つまりm=M−1か否かを繰返終了判定部226で判定する。この判定結果が終了でなければステップS14でその演算結果であるダイジェストDを中間データ記憶部270に保存してステップS10に戻る。ステップS13の判定が終了であればステップS15でステップS12の演算結果h(n)を出力記憶部280に保存し、ステップS16ではnカウンタ221cの計数値nがn=N−1か、つまりSHA−1の演算が終了したか否かの判定が最終判定部227で行う。この判定が終了でなければステップS17ではnカウンタ221cを1歩進させ、更にステップS18ではmカウンタ221dをk−1に初期化してステップS10に戻る。この数値例ではk=2,M=3であるから、ステップS13,S14,S18を省略し、破線で示すようにステップS12より直ちにステップS15に移り、ステップS17よりステップS11に直ちに移ることになる。なおこの第2の実施形態の説明を簡略にするため中間データ記憶部270に保存したデータと、これより取り出して要素SHA−1演算部230で使用するデータとして同一表記とした。
【0038】
これらステップS10〜S17は非共通部の演算であり、機能構成的には個別計算部を構成することになる。
ステップS16での判定が終了であれば、ステップS19では出力記憶部に保存されているh(0)からh(5)をh(0)‖h(1)‖…‖h(5)のように連結し、その先頭からTLenオクテット長だけPSEC−KEM演算部100への出力とする。PSEC−KEM演算部100は、マスク生成関数演算装置200の出力を基に、PSEC−KEMの暗号演算を行う。
【0039】
制御部210は各部の初期化、判定部220の各判定結果に基づく次の処理をその機能構成部に行わせるが、各演算結果の記憶部に対する保存、取り出し、処理の進行などを行う。pカウンタ221c、mカウンタ221dなどは制御部210に設けるなどの変形をしてもよい、このことは第1の実施形態でも同様である。
以上のように演算したときの、演算対象データを図11に示す。図中実線部分がSHA−1演算に利用されたデータを示し、破線部分はダイジェストDを利用することで省略されたデータを示す。つまり第1回目のSHA−1演算はその全ブロックデータC0,0、C0,1、C0,2に対し行い、第2回目以後は入力データが共通とならないブロックデータC1,2,…,C5,2に対してのみ行う。このように計算することによって、少ない計算量でマスク生成関数演算が実行でき、これによりPSEC−KEMの演算時間の短縮が出来る。
【0040】
上述した各マスク生成関数演算装置はコンピュータにより機能させることもできる。例えば図1及び図4に示した機能構成による図2及び図5に示した処理を行う装置としてコンピュータを機能させるためのプログラムを、CD−ROM、磁気ディスク、半導体記憶装置などの記録媒体からコンピュータにインストールし、又は通信回線を介してダウンロードし、そのプログラムを実行させればよい。第2の実施形態についても同様にコンピュータにより機能させることもできる。
【図面の簡単な説明】
【0041】
【図1】この発明における装置の一実施形態における機能ブロック図。
【図2】この発明における装置の一実施形態における処理手順の例を示す流れ図。
【図3】第1の実施形態のマスク生成関数演算における各処理段階の各データを示した図。
【図4】図1中の判定部20内の具体的機能構成例を示すブロック図。
【図5】図2中のステップS6における処理を中心とした具体例を示す流れ図。
【図6】第1の実施形態における実際に演算される各ブロックデータを示す図。
【図7】この発明における装置の他の実施形態における機能ブロック図。
【図8】この発明における装置の他の実施形態における処理手順の例を示す流れ図。
【図9】図7中の判定部220内の具体的機能構成例を示すブロック図。
【図10】第2の実施形態のマスク生成関数演算における各処理段階の各データを示す図。
【図11】第2の実施形態における実際に演算されるブロックデータを示す図。

【特許請求の範囲】
【請求項1】
入力データと所望する出力長が入力され、入力データに符号化した数値(以下符号化部という)を結合させたもののハッシュ演算を、上記符号化部の上記数値を変更しながら繰り返し行い、それらを結合することで上記所望する出力長の乱数を生成するマスク生成関数演算装置において、
予め設定されたハッシュアルゴリズムに基づくハッシュ演算を行うハッシュ演算部と、
上記入力データ及び所望出力長とハッシュアルゴリズムにより決るパラメータとからマスク生成関数演算の繰り返し内容を計算する演算内容計算部と、
繰り返し演算の中途で入出力が同一となる共通演算部分を、上記入力データ及び上記パラメータから計算する共通演算数計算部と、
マスク生成関数演算の演算中間値を記憶する記憶部とを備え、
上記ハッシュ演算部は上記計算した繰り返し内容に基づき、上記記憶部に保存した共通演算部分の演算中間値を、上記共通部分でない演算の入力としての演算をも行う演算部であることを特徴とするマスク生成関数演算装置。
【請求項2】
請求項1の装置において、上記演算内容計算部は上記出力長と上記ハッシュ演算の演算結果長とからハッシュ演算数(符号化部数という)を計算する符号化部数計算部と、
上記入力データの長さと上記ハッシュ演算の単位であるブロック長とから各ブロックハッシュ演算の繰り返し演算回数を計算する繰返回数計算部とよりなり、
上記共通演算数計算部は少くとも上記入力データ長と上記符号化部長との和を上記ブロック長で割算して計算する計算部であることを特徴とするマスク生成関数演算装置。
【請求項3】
請求項2の装置において、上記ハッシュ演算部の演算が上記共通演算部分の最後のブロック単位の演算であるか否かを上記割算結果により判定し、最後のものであればその演算結果をダイジェストとして上記記憶部に記憶する終了判定部を備えることを特徴とするマスク生成関数演算装置。
【請求項4】
請求項3の装置において、
上記演算結果の余りを、上記ブロック演算の単位であるワード長で割算するステップ計算部を上記共通演算数計算部は含み、
上記ハッシュ演算部の演算が、上記共通演算部分の最後のワード単位の演算であるか否かを上記割算結果と上記ステップ計算部の計算結果とより判定し、最後のものであればその演算結果を演算中間値として上記記憶部に保存する中間値保存判定部を備えることを特徴とするマスク生成関数演算装置。
【請求項5】
請求項2の装置において、上記割算結果と、上記符号化部数と、上記繰返回数が入力され、上記符号化部数及び繰返回数の組みに対し、共通演算部分か否かを判定する共通部判定部と、
上記共通部判定部が共通演算部分であると判定すると、上記入力データ及び上記繰返回数の中の何回目かを示す数より共通演算部分のデータを生成して上記ハッシュ演算部に演算されるべき入力データとして入力する第1データ生成部と、
上記共通部判定部が共通演算部分でないと判定すると、上記入力データ、上記符号化部数の中の何回目かを示す数及び上記繰返回数の中の何回目かを示す数より非共通演算部分のデータを生成して上記ハッシュ演算部に演算されるべき入力データとして入力する第2データ生成部とを備えることを特徴とするマスク生成関数演算装置。
【請求項6】
請求項1〜4のいずれかの装置において、上記符号化部ごとのハッシュ演算の終了ごとに、上記繰り返し内容における上記符号化した数値の最大値から順次1減算される演算要素カウンタが設けられ、
上記演算要素カウンタの計数値に基づき、上記ハッシュ演算部の演算が上記符号化した数値が大きいものから降順に行われることを特徴とするマスク生成関数演算装置。
【請求項7】
請求項1〜5のいずれかの装置において、ハッシュ関数の種類を示す関数符号も入力され、上記ハッシュ演算部は複数種類のハッシュ演算を有し、
上記入力された関数符号に応じた種類のハッシュ演算を上記ハッシュ演算部に実行させる手段を備えることを特徴とするマスク生成関数演算装置。
【請求項8】
請求項1〜7のいずれかに記載したマスク生成関数演算装置としてコンピュータを機能させるためのマスク生成関数演算プログラム。
【請求項9】
請求項8に記載したマスク生成関数演算プログラムを記録したコンピュータ読み取り可能な記録媒体。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate