説明

演算装置およびコンピュータプログラム

【課題】メモリ上に連続して配置される多倍長整数に着目してメモリから秘密鍵情報の抽出を試みる攻撃に耐性を有することができる演算装置を提供する。
【解決手段】符号化部3は、入力される秘密鍵及び平文に対して符号変換、ハッシュ関数によるハッシュ処理、意味を持たないデータを付与してデータサイズを整えるパディング処理等を行い、連続する配列構造の多倍長整数のデータを出力する。多倍長演算部4−1は、符号化部3から入力される配列構造のデータを、本発明特有なデータ構造であるリスト構造のデータに変換してメモリ5に書込みを行う。データ構造変換部4−2は、メモリ5上に離散的に配置されているリスト構造のデータに対し、先頭要素のアドレスを用いて、先頭要素からポインタを順に追跡し、配列構造のデータに変換する。制御部2は、制御部2が配列構造に変換された署名を外部へ出力する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、例えば、秘密鍵情報に対する攻撃に耐性を有することを可能とする演算装置およびコンピュータプログラムに関する。
【背景技術】
【0002】
従来、多くの暗号方式では、多倍長の整数を対象とした有限体上での演算が利用される。ここで、多倍長の整数とは、一般的なCPUの語長(32ビット等)を超える語長の整数、例えば、1024ビット長の整数をいう。このような暗号方式を計算機等に実装するには、多倍長演算装置が必要とされる。多倍長演算装置の多くは、多倍長整数を、CPUの語長で区切った整数の配列およびその配列長等の情報とを一まとめにした構造体として実装されることが多く、そのデータ構造を基にして、有限体上の四則演算、べき乗剰余演算、楕円スカラー倍演算などが構築され、それらを効率的に実現するための技術が多く提案されている
【0003】
近年、これらの暗号装置の外部から、秘密鍵に基づく一連の処理の処理時間を計測したり、消費電力等を観測したりすることにより、秘密鍵情報を取得する攻撃(サイドチャネル攻撃)が注目され始め、これらの攻撃に対して耐性を持たせた暗号装置が提案されている(例えば特許文献1、特許文献2参照)。
【特許文献1】特開2002−261753号公報
【特許文献2】特開2002−268547号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
ところで、さらに近年、サイドチャネル攻撃とは本質的に前提が異なる、さらに強力な攻撃として、何らかの手法で暗号装置が保有するメモリを監視することで秘密鍵を取得する攻撃(ホワイトボックス攻撃)が危惧されている。その攻撃手法の1つとして、メモリを常時監視し、秘密鍵に基づく一連の処理が行われる際にメモリ上に瞬間的に出現する秘密鍵情報の候補を捕捉・抽出し、得られた秘密鍵候補集合から全数試行により、真の秘密鍵を特定する攻撃がある。しかし、従来技術では、上記ホワイトボックス攻撃、すなわちメモリを監視して秘密鍵を特定する攻撃に対しては何ら対策が講じられていないという問題があった。
【0005】
本発明は、このような事情を考慮してなされたものであり、その目的は、メモリ上に連続して配置される多倍長整数に着目してメモリから秘密鍵情報の抽出を試みる攻撃に耐性を有することができる演算装置およびコンピュータプログラムを提供することにある。
【課題を解決するための手段】
【0006】
上述した課題を解決するために、本発明は、多倍長整数で構成される秘密鍵を離散的にメモリ上に配置する演算装置であって、多倍長整数で構成される秘密鍵を入力する手段と、前記秘密鍵を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、メモリ上に当該要素を配置する領域を確保する手段と、前記確保されたメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する手段と、前記決定されたメモリ上の各要素の位置に基づいて、各要素のデータ本体及びポインタを、メモリに書き込む手段と、を備えることを特徴とする演算装置である。
【0007】
本発明は、多倍長整数で構成される秘密鍵、平文、秘密鍵と平文の演算により得られる署名を離散的にメモリ上に配置する演算装置であって、多倍長整数で構成される秘密鍵及び平文を入力する手段と、前記秘密鍵、平文及び署名を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、前記メモリ上に当該要素を配置する領域をそれぞれ確保する手段と、前記確保されたそれぞれのメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する手段と、前記決定されたメモリ上の各要素の位置に基づいて、秘密鍵及び平文の各要素のデータ本体及びポインタ、署名の各要素のポインタを、それぞれメモリに書き込む手段と、前記メモリ上に離散的に配置された秘密鍵と平文から署名を算出する手段と、前記決定されたメモリ上の各要素の位置に基づいて、算出された署名のデータ本体を、メモリに書き込む手段と、前記メモリ上に離散的に配置された署名の各要素を、前記ポインタを用いて順次メモリから読出し、連続的な配列構造のデータとして出力する手段と、を備えることを特徴とする演算装置である。
【0008】
本発明は、多倍長整数で構成される秘密鍵、暗号文、秘密鍵と暗号文の演算により得られる復号文を離散的にメモリ上に配置する演算装置であって、多倍長整数で構成される秘密鍵及び暗号文を入力する手段と、前記秘密鍵、暗号文及び復号文を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、前記メモリ上に当該要素を配置する領域をそれぞれ確保する手段と、前記確保されたそれぞれのメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する手段と、前記決定されたメモリ上の各要素の位置に基づいて、秘密鍵及び暗号文の各要素のデータ本体及びポインタ、復号文の各要素のポインタを、それぞれメモリに書き込む手段と、前記メモリ上に離散的に配置された秘密鍵と暗号文から復号文を算出する手段と、前記決定されたメモリ上の各要素の位置に基づいて、算出された復号文のデータ本体を、メモリに書き込む手段と、前記メモリ上に離散的に配置された復号文の各要素を、前記ポインタを用いて順次メモリから読出し、連続的な配列構造のデータとして出力する手段と、を備えることを特徴とする演算装置である。
【0009】
本発明は、上記に記載の発明において、ランダムな値であるデータ本体と、各要素のリンク情報であるポインタの組からなる要素としてダミーデータを配置するよう、前記確保されたメモリ領域において、ダミーデータの各要素を配置する位置をランダムに決定する手段と、前記決定されたメモリ上のダミーデータの各要素の位置に基づいて、各要素のポインタをメモリに書き込む手段と、ダミーデータのデータ本体として、ランダムな値をメモリに書き込む手段と、
を備えることを特徴とする。
【0010】
本発明は、多倍長整数で構成される秘密鍵を離散的にメモリ上に配置する演算装置のコンピュータを、多倍長整数で構成される秘密鍵を入力する手段、前記秘密鍵を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、メモリ上に当該要素を配置する領域を確保する手段、前記確保されたメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する手段、前記決定されたメモリ上の各要素の位置に基づいて、各要素のデータ本体及びポインタを、前記メモリに書き込む手段、として機能させるためのコンピュータプログラムである。
【0011】
本発明は、多倍長整数で構成される秘密鍵、平文、秘密鍵と平文の演算により得られる署名を離散的にメモリ上に配置する演算装置のコンピュータを、多倍長整数で構成される秘密鍵及び平文を入力する手段、前記秘密鍵、平文及び署名を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、前記メモリ上に当該要素を配置する領域をそれぞれ確保する手段、前記確保されたそれぞれのメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する手段、前記決定されたメモリ上の各要素の位置に基づいて、秘密鍵及び平文の各要素のデータ本体及びポインタ、署名の各要素のポインタを、それぞれメモリに書き込む手段、前記メモリ上に離散的に配置された秘密鍵と平文から署名を算出する手段、前記決定されたメモリ上の各要素の位置に基づいて、算出された署名のデータ本体を、メモリに書き込む手段、前記メモリ上に離散的に配置された署名の各要素を、前記ポインタを用いて順次メモリから読出し、連続的な配列構造のデータとして出力する手段、として機能させるためのコンピュータプログラムである。
【0012】
本発明は、多倍長整数で構成される秘密鍵、暗号文、秘密鍵と暗号文の演算により得られる復号文を離散的にメモリ上に配置する演算装置のコンピュータを、多倍長整数で構成される秘密鍵及び暗号文を入力する手段、前記秘密鍵、暗号文及び復号文を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、前記メモリ上に当該要素を配置する領域をそれぞれ確保する手段、前記確保されたそれぞれのメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する手段、前記決定されたメモリ上の各要素の位置に基づいて、秘密鍵及び暗号文の各要素のデータ本体及びポインタ、復号文の各要素のポインタを、それぞれメモリに書き込む手段、前記メモリ上に離散的に配置された秘密鍵と暗号文から復号文を算出する手段、前記決定されたメモリ上の各要素の位置に基づいて、算出された復号文のデータ本体を、メモリに書き込む手段、前記メモリ上に離散的に配置された復号文の各要素を、前記ポインタを用いて順次メモリから読出し、連続的な配列構造のデータとして出力する手段、として機能させるためのコンピュータプログラムである。
【0013】
本発明は、上記に記載の発明において、前記コンピュータを、さらにランダムな値であるデータ本体と、各要素のリンク情報であるポインタの組からなる要素としてダミーデータを配置するよう、前記確保されたメモリ領域において、ダミーデータの各要素を配置する位置をランダムに決定する手段、前記決定されたメモリ上のダミーデータの各要素の位置に基づいて、各要素のポインタをメモリに書き込む手段、ダミーデータのデータ本体として、ランダムな値をメモリに書き込む手段、として機能させるためコンピュータプログラムである。
【発明の効果】
【0014】
この発明によれば、多倍長整数で構成される秘密鍵を入力し、秘密鍵を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、メモリ上に当該要素を配置する領域を確保する。確保されたメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する。そして、決定されたメモリ上の各要素の位置に基づいて、各要素のデータ本体及びポインタを、メモリに書き込む構成とした。したがって、多倍長整数を表現する整数配列がなくなり、また、秘密鍵の構成要素がメモリ上で離散的に配置されているため、メモリ上の一定領域における個々の整数データを単に並べただけでは秘密鍵を再現することができないため、攻撃に耐性を有することができるという利点が得られる。
【0015】
また、本発明によれば、多倍長整数で構成される秘密鍵及び平文を入力し、秘密鍵、平文及び署名を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、メモリ上に当該要素を配置する領域をそれぞれ確保する。次に、確保されたそれぞれのメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定し、決定されたメモリ上の各要素の位置に基づいて、秘密鍵及び平文の各要素のデータ本体及びポインタ、署名の各要素のポインタを、それぞれメモリに書き込む。また、メモリ上に離散的に配置された秘密鍵と平文から署名を算出し、決定されたメモリ上の各要素の位置に基づいて、算出された署名のデータ本体を、メモリに書き込む。また、さらに、メモリ上に離散的に配置された署名の各要素を、ポインタを用いて順次メモリから読出し、連続的な配列構造のデータとして出力する構成とした。したがって、多倍長整数を表現する整数配列がなくなり、また、秘密鍵、平文及び署名の構成要素がメモリ上で離散的に配置されているため、メモリ上の一定領域における個々の整数データを単に並べただけでは秘密鍵、平文、署名を再現することができないため、攻撃に耐性を有することができるという利点が得られる。
【0016】
また、本発明によれば、多倍長整数で構成される秘密鍵及び暗号文を入力し、秘密鍵、暗号文及び復号文を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、メモリ上に当該要素を配置する領域をそれぞれ確保する。次に、確保されたそれぞれのメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定し、決定されたメモリ上の各要素の位置に基づいて、秘密鍵及び暗号文の各要素のデータ本体及びポインタ、復号文の各要素のポインタを、それぞれメモリ上の各要素の位置に書き込む。そして、メモリ上に離散的に配置された秘密鍵と暗号文から復号文を算出し、決定されたメモリ上の各要素の位置に基づいて、算出された復号文のデータ本体を、メモリに書き込む。また、メモリ上に離散的に配置された復号文の各要素を、ポインタを用いて順次メモリから読出し、連続的な配列構造のデータとして出力する構成とした。したがって、多倍長整数を表現する整数配列がなくなり、また、秘密鍵、暗号文及び復号文の構成要素がメモリ上で離散的に配置されているため、メモリ上の一定領域における個々の整数データを単に並べただけでは秘密鍵、暗号文及び復号文を再現することができないため、攻撃に耐性を有することができるという利点が得られる。
【0017】
また、本発明によれば、ランダムな値であるデータ本体と、各要素のリンク情報であるポインタの組からなる要素としてダミーデータを配置するよう、確保されたメモリ領域において、ダミーデータの各要素を配置する位置をランダムに決定し、決定されたメモリ上のダミーデータの各要素の位置に基づいて、各要素のポインタをメモリに書き込む。そして、ダミーデータのデータ本体として、ランダムな値をメモリに書き込む構成とした。したがって、データの再現がより困難になり、攻撃に耐性を有することができるという利点が得られる。
【発明を実施するための最良の形態】
【0018】
本発明は、上記したように、メモリ上に配置される秘密鍵を特定されないようにすることを目的とする。秘密鍵は、平文に秘密鍵を作用させて署名を生成するいわゆるデジタル署名を生成する処理、或いは、暗号文に秘密鍵を作用させて、暗号化された文章を復号する処理で用いられるが、以降、本件明細書においては、デジタル署名を生成する署名処理装置の処理について説明を行う。
【0019】
以下、本発明の一実施形態によるデジタル署名処理を、図面を参照して説明する。
図1は、本発明の実施形態によるデジタル署名処理を示すブロック図である。図において、署名処理装置1は、制御部2、符号化部3、署名演算部4からなる。また、外部装置としてメモリ5を備えている。制御部2は、署名処理装置1の全体的な制御および外部(メモリ5等)との入出力の制御を行う。符号化部3は、文字列データである平文及び秘密鍵を入力し、符号変換、ハッシュ関数によるハッシュ処理、意味を持たないデータを付与してデータサイズを整えるパディング処理等を行い、連続する配列構造の多倍長整数のデータ(以後、配列構造のデータ)として出力する。
【0020】
署名演算部4は、多倍長演算部4−1およびデータ構造変換部4−2からなり、秘密鍵および平文を入力とし、RSA暗号、RSA署名、DSA署名などであれば、べき乗剰余演算を行い、楕円曲線暗号、ECDSA署名などであれば、楕円スカラー倍演算を行う。なお、べき乗剰余演算や楕円スカラー倍演算は、共に、多倍長整数の四則演算の組み合わせからなる。
【0021】
多倍長演算部4−1は、上記符号化部3から入力される配列構造のデータを、本発明特有なデータ構造であるリスト構造のデータに変換してメモリ5に書込みを行う。また、メモリ5上にあるリスト構造のデータに対して、加算、減算、乗算、除算等の各種演算を行い、演算結果をリスト構造のデータとしてメモリに書き込む。データ構造変換部4−2は、メモリ5上に離散的に配置されているリスト構造のデータに対し、図示しない先頭アドレス管理部に格納されている先頭要素のアドレスを用いて、先頭要素からポインタを順に追跡し、配列構造のデータに変換する。データ構造変換部4−2は、演算結果である署名を相手側に送信する場合等において、演算結果をメモリ5から読み出す際に用いられる。
【0022】
すなわち、本実施形態では、メモリ5上に配置するデータである秘密鍵は、多倍長演算部4−1により、離散的なリスト構造として配置され、また演算結果である署名においても、リスト構造で配置されることになる。このように構成することによって、従来は、固定長の連続する配列構造のデータに着目することで秘密鍵を容易に補足することができたが、本実施形態では、メモリ5上ではリスト構造により、離散的にかつランダムな順序で配置されるため、メモリ5を監視して秘密鍵を抽出することを困難にしている。
【0023】
さらに、説明すれば、従来技術では、上記攻撃に対して脆弱である理由の1つに、多倍長演算装置に十分な耐タンパー性が具備されていないことがある。従来の多倍長演算装置では、多倍長整数を連続する配列構造として保持しており、現在、よく用いられる1024ビット長整数は、固有の配列長(16ビットのワード長で64語、32ビットのワード長で32語)を示すため、語長に着目してメモリから秘密鍵を抽出する攻撃に対して良い手がかりを与えてしまう。また、有限体上の四則演算を効率的に実現するため、連続する配列構造に一定の順序(昇順または降順)で、語長で区切られた整数を格納していることから、捕捉された後にそれが秘密鍵であるか否かを特定することも容易にしている(昇順または降順と見当をつけて高々2回の検証で特定できる)。
【0024】
本発明では、多倍長演算部4−1が扱う多倍長整数を表現するデータ構造として、整数配列を廃止し、リスト構造を用いている。本発明におけるリスト構造とは、列を表現するデータ構造の1つであり、データ本体と次のデータを示すポインタから構成される要素の集合で構成される(詳細は後述する)。また、リスト構造の各要素がメモリ上に連続的に配置されるのでは、容易に解析されてしまうため、本発明のリスト構造では、これらの要素がメモリ内で連続せず離散的に配置されるようにしている。また、必要に応じて、実際のデータと同様の構成からなるダミーを同時に配置することで、解析をより困難にさせている。
【0025】
さらに、従来の配列表現による四則演算を、リスト構造上で実現することで四則演算等を実現する。具体的には、従来、配列で添字による要素参照を利用している処理を、本実施形態では、リスト構造において、先頭からポインタを順に辿ることで参照し、さらに双方向リストでは逆方向ポインタも利用しながら要素を参照する。
【0026】
ここで、本実施形態による多倍長演算部4−1による四則演算方法について説明する。図2は、本実施形態による多倍長演算部4−1による四則演算方法を説明するための概念図である。従来技術による四則演算(加算)では、添字によって各要素へランダムアクセスが可能であるので、単純に添字で特定の要素(図示の例では、a[1]、b[1])を参照して加算(図示の例では、c[1]=a[1]+b[1])することが可能である。これに対して、本実施形態では、a[0]からポインタを参照してリンクを辿ってa[1]を取得し、b[0]からポインタを参照してリンクを辿ってb[1]を取得して加算(図示の例では、c[1]=a[1]+b[1])することになる。
したがって、本実施形態では、図示から明らかなようにステップ数が増加して演算速度が低下するが、安全性は向上する。
また、本実施形態においては、多倍長演算部4−1における演算がメモリ5上で行われるが、この演算は全てリスト構造で行われる。このように演算においても常にリスト構造とすることで、解析を困難にさせている。
【0027】
次に、上述した実施形態の署名処理装置1の動作について説明する。ここで、図3は、本実施形態の署名処理装置1の動作を説明するためのフローチャートである。文字列で構成されている平文が符号化部3に入力され、符号化部3において、符号変換、ハッシュ処理、パディング処理が行われ、多倍長整数に符号化される。この段階での多倍長整数は、連続する配列構造となっている。また、平文同様、秘密鍵についても符号化部において、連続する配列構造の多倍長整数に変換される(ステップS10)。なお、入力として多倍長整数のデータが入力される場合は、この符号化部3での動作は必要ない。
【0028】
次に、配列構造の整数となっている平文及び秘密鍵に対し、多倍長演算部4−1において、リスト構造への変換が行われ、メモリ5に配置される。この構成により配列構造であった平文及び秘密鍵はメモリ5上では離散的なリスト構造で配置される。また、平文及び秘密鍵による演算によって得られる署名を離散的なリスト構造でメモリ上に配置するために、当該署名を配置するためのリスト構造も配置する。このときには署名のデータ自体は入っておらず、リスト構造のみ(リンク情報であるポインタのみ)が配置される(ステップS11)。
【0029】
この多倍長演算部4−1による離散化処理についての詳細は後述する。そして、リスト構造となっている平文及び秘密鍵を多倍長演算部4−1によって演算し、演算結果である署名を求め、署名をメモリ5上に離散的なリスト構造で配置する。つまり、先のステップで予め離散的に配置されたリスト構造に、演算結果である署名のデータ(データ本体)を代入する(ステップS12)。最後に、メモリ5上にリスト構造で配置された署名を、メモリから読み出す際には、データ構造変換部4−2で、連続する配列構造に変換する(ステップS14)。
【0030】
ここで、図4は、データ構造変換部4−2の動作について説明するための概念図である。データ構造変換部4−2では、メモリ5上にリスト構造で表現されている多倍長整数を、そのポインタを参照することで、連続する配列構造に変換する。図示の例では、まず、a[0]を先頭に配置し、次いで、ポインタを参照することで、a[1]を配置し、同様にポインタを参照しながら、a[2]、a[3]、…と順次配置していく。次に、制御部2が配列構造に変換された暗号演算結果(すなわち署名)を外部へ出力する(ステップS16)。
【0031】
次に、上述した多倍長演算部4−1の構成例について説明する。ここで、図5は、本実施形態による署名処理装置1の多倍長演算部4−1の一構成例を示すブロック図である。
図5において、初期化部10は、メモリ5上に領域を確保、すなわち領域を割り当てる。本発明においては、連続ではなく離散的に配置することを目的とすること、また後で説明するダミーを同時に配置するため、配置する多倍長整数より大きい領域を確保する必要がある。一例としては、配置する多倍長整数の3倍の領域を確保する。領域は、図6に示されるように、データの値が格納される実データ(以下、データ本体)と、データ同士のポインタとの組で構成される要素の集合となっている。破棄部12は、初期化部10で確保した領域において、実データ或いはダミーデータが配置されなかった領域を開放する。代入部13は、各領域の要素におけるデータ本体にデータを代入する(コピーする)。
【0032】
算術演算部14は、多倍長整数の加算、減算、乗算、除算を行う。論理演算部15は、多倍長整数に対して、ビット単位のシフト、論理和、論理積、排他的論理和などを求める。比較部16は、多倍長整数同士の大小を比較する。これら算術演算部14、論理演算部15、比較部16は従来から行われている処理を行う。多倍長整数データ構造生成部17は、本発明に特有の構成であり、符号化部3で符号化された配列構造の整数である平文及び秘密鍵、演算により求められる署名を、離散的なリスト構造としてメモリ5に配置するための処理を行う。
【0033】
ここで、図6は、本実施形態の署名処理装置のメモリ5上におけるリスト構造を示す概念図である。図6(a)は、各要素がデータ本体と、次の要素を示すポインタとから構成されている単方向リストの構造を示している。また、図6(b)には、各要素がデータ本体と、次の要素を示すポインタ及び前の要素を示すポインタとから構成される双方向リストの構造を示している。本件発明は、どちらの構造であっても実施可能であるが、以後単方向リストの構造を用いて説明する。
【0034】
次に、上述した多倍長整数データ構造生成部17の動作について説明する。当該処理は前述のフローチャートのステップS11に相当する構成であり、平文及び秘密鍵、署名を格納するための要素が配置されることになる。
【0035】
最初に、初期化部10を呼び出し、図8(a)に示すように、平文及び秘密鍵、署名をメモリ5上にデータ本体と各要素のリンク情報であるポインタの組からなる要素として配置するための領域を確保する。図8には、便宜上にメモリ上でのアドレス(01〜24)を付している。ここでは、アドレス01〜02が一つの要素を構成している(図8の太線で示される領域が一つの要素を示す)。上述したように確保する領域は配置する整数のデータより大きい領域を確保する必要がある。本実施形態では、実際のデータのサイズに加え、後に説明するダミーデータ用の領域及び、離散化させるための領域を加えるため、整数のデータの3倍程度の領域を確保する(ステップS20)。この領域は、連続した領域であっても、不連続な領域でもよいが、ここでは連続した領域として12個の領域を確保した例を示す。
【0036】
次に、乱数生成部11により、生成された乱数を用いて、図8(b)に示すように、多倍長整数の各要素を格納する位置をランダムに決定して、それぞれの要素のポインタ部分に、次の要素のメモリ上での位置(リンク)を書き込むことでリンクが形成される(ステップS22)。
【0037】
図8の例において、各要素の先頭アドレスは必ず奇数となるので、この例では、乱数生成部11では、01〜23の奇数がランダムに(かつ重複なく)生成されることになる。本実施形態は、a[0]〜a[3]の4つの要素で表される秘密鍵を離散的に配置する例とするため、4つの奇数がランダムに生成される。この例では、05、21、13、17が生成された例である。乱数によって要素の位置が決定され、それぞれの要素のポインタ部分には、次の要素のメモリ上での位置が書き込まれる。今回の例では、05に配置されるa[0]のポインタとしては、次の要素であるa[1]のメモリ上のアドレスである21が書き込まれる。同様にa[1]、a[2]のポインタには、それぞれ13、17が書き込まれる。最後の要素であるa[3]のポインタはnullとなる。ポインタが書き込まれると、それぞれの要素のデータ本体が書き込まれる(ステップS23)。
【0038】
この例では、図8(b)に示すように、05、21、13、17で示されるアドレスにそれぞれの要素のデータ本体が書き込まれる。今回の説明では、先にポインタを全て書込み、その後にデータ本体を全て書き込む例を示したが、要素ごとに書き込んでもよいし、データ本体から書き込んでもよい。しかしながら、署名を格納する場合には、演算を行うより先にデータ本体を書き込むことはできないため、先にポインタを全て書き込むことになる。
【0039】
次に、ダミーデータの配置を行う。ダミーデータは実際のデータ(例えば秘密鍵)と同じサイズのデータとすることが、セキュリティ上は望ましい。したがって、上記のステップS22とほぼ同様の動作を行うことで、ダミーデータの配置が可能である。
この例では、データと同様4つの要素からなるダミーデータを配置するために、4つの奇数15、11、01、19がランダムに生成され、同様に、ポインタに次の要素のメモリ上のアドレスが書き込まれる(ステップS24)。
【0040】
さらに、ダミーデータとしてデータ本体を書き込むために、乱数生成部11で乱数を発生させ、当該乱数をダミーデータの各要素のデータ本体として書き込む。この例では、図8(c)に示されるように、メモリ上の15、11、01、19で示されるアドレスに、それぞれ乱数がデータ本体として書き込まれる(ステップS26)。そして、実際のデータ或いはダミーデータが書き込まれなかった要素に関して、破棄部12によって当該領域のメモリを解放する(ステップS28)。
【0041】
この例では、図8(d)で示されるようにメモリ上の03〜04、07〜10、23〜24が解放される。この例で示したように、大きな領域を確保して、そこにランダムに配置して、空いた領域を開放することで、連続した領域を確保して処理を行った場合においても、離散的な要素の配置を行うことが可能となる。
【0042】
最後に、実際のデータ及びダミーデータの先頭要素のアドレスを図示しない先頭アドレス管理部に出力する(ステップS30)。この例では、実際のデータの先頭アドレスとして05が、ダミーデータの先頭アドレスとして15が出力される。先頭要素のアドレスは、データ構造変換部4−2でデータ構造を変換する際に用いられる。また、先頭からリンクを追跡して、メモリ上でリンク付けられた全要素の領域を解放するときにも当該先頭要素のアドレスは用いられる。上記では、ダミーデータの個数が1個の場合を説明したが、ダミーデータを複数個配置する場合は、ダミーの個数分だけ上記を繰り返し、全てのダミーデータの先頭アドレスを先頭アドレス管理部に出力する。
【0043】
以上のような動作により、多倍長整数データを連続された配列構造から離散化されたリスト構造に変換してメモリ5に配置することができる。
【0044】
上述した実施形態によれば、従来技術に特有な連続された配列構造ではなく、離散化されたリスト構造としてメモリ5上に配置されるため、整数配列に着目してメモリから秘密鍵情報の抽出を試みる攻撃が困難になる。また、リストの構成要素がメモリ上で離散的に配置されているため、メモリ上の一定領域における個々の整数データを単に並べただけでは秘密鍵を再現することができず、再現には組み合わせ的な作業が必要となるため、攻撃を困難にすることができる。
また、上述の実施形態では、平文に秘密鍵を作用させて署名を生成する例としたが、平文に変えて暗号文とすることで、暗号文に秘密鍵を作用させて復号鍵を生成する場合においても適用できることは言うまでもない。
【0045】
なお、上述した実施形態においては、制御部2、署名演算部4などは、コンピュータシステム内で実行される。そして、上述した制御部2、署名演算部4による一連の処理の過程は、プログラムの形式でコンピュータ読み取り可能な記録媒体に記憶されており、このプログラムをコンピュータが読み出して実行することによって、上記処理が行われる。すなわち、制御部2、署名演算部4における、各処理手段、処理部は、CPU等の中央演算処理装置がROMやRAM等の主記憶装置に上記プログラムを読み出して、情報の加工・演算処理を実行することにより、実現されるものである。
【0046】
ここでコンピュータ読み取り可能な記録媒体とは、磁気ディスク、光磁気ディスク、CD−ROM、DVD−ROM、半導体メモリ等をいう。また、このコンピュータプログラムを通信回線によってコンピュータに配信し、この配信を受けたコンピュータが当該プログラムを実行するようにしても良い。
【図面の簡単な説明】
【0047】
【図1】本発明の実施形態による署名処理装置を示すブロック図である。
【図2】本実施形態による多倍長演算部4−1による四則演算方法を説明するための概念図である。
【図3】本実施形態の署名処理装置1の動作(デジタル署名)を説明するためのフローチャートである。
【図4】本実施形態による署名処理装置1のデータ構造変換部4−2の動作について説明するための概念図である。
【図5】本実施形態による署名処理装置1の多倍長演算部4−1の一構成例を示すブロック図である。
【図6】本実施形態の署名処理装置で用いる多倍長整数データの構造を示す概念図である。
【図7】多倍長整数データ構造生成部17の動作を説明するためのフローチャートである。
【図8】多倍長整数データ構造生成部17の動作を説明するための概念図である。
【符号の説明】
【0048】
1 署名処理装置
2 制御部
3 符号化部(符号化手段)
4 署名演算部
4−1 多倍長演算部(多倍長整数配置手段、暗号化手段)
4−2 データ構造変換部(データ構造変換手段)
5 メモリ
10 初期化部
11 乱数生成部
12 破棄部
13 代入部
14 算術演算部
15 論理演算部
16 比較部
17 多倍長整数データ構造生成部(多倍長整数配置手段、ダミー要素配置手段)


【特許請求の範囲】
【請求項1】
多倍長整数で構成される秘密鍵を離散的にメモリ上に配置する演算装置であって、
多倍長整数で構成される秘密鍵を入力する手段と、
前記秘密鍵を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、メモリ上に当該要素を配置する領域を確保する手段と、
前記確保されたメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する手段と、
前記決定されたメモリ上の各要素の位置に基づいて、各要素のデータ本体及びポインタを、メモリに書き込む手段と、
を備えることを特徴とする演算装置。
【請求項2】
多倍長整数で構成される秘密鍵、平文、秘密鍵と平文の演算により得られる署名を離散的にメモリ上に配置する演算装置であって、
多倍長整数で構成される秘密鍵及び平文を入力する手段と、
前記秘密鍵、平文及び署名を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、前記メモリ上に当該要素を配置する領域をそれぞれ確保する手段と、
前記確保されたそれぞれのメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する手段と、
前記決定されたメモリ上の各要素の位置に基づいて、秘密鍵及び平文の各要素のデータ本体及びポインタ、署名の各要素のポインタを、それぞれメモリに書き込む手段と、
前記メモリ上に離散的に配置された秘密鍵と平文から署名を算出する手段と、
前記決定されたメモリ上の各要素の位置に基づいて、算出された署名のデータ本体を、メモリに書き込む手段と、
前記メモリ上に離散的に配置された署名の各要素を、前記ポインタを用いて順次メモリから読出し、連続的な配列構造のデータとして出力する手段と、
を備えることを特徴とする演算装置。
【請求項3】
多倍長整数で構成される秘密鍵、暗号文、秘密鍵と暗号文の演算により得られる復号文を離散的にメモリ上に配置する演算装置であって、
多倍長整数で構成される秘密鍵及び暗号文を入力する手段と、
前記秘密鍵、暗号文及び復号文を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、前記メモリ上に当該要素を配置する領域をそれぞれ確保する手段と、
前記確保されたそれぞれのメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する手段と、
前記決定されたメモリ上の各要素の位置に基づいて、秘密鍵及び暗号文の各要素のデータ本体及びポインタ、復号文の各要素のポインタを、それぞれメモリに書き込む手段と、
前記メモリ上に離散的に配置された秘密鍵と暗号文から復号文を算出する手段と、
前記決定されたメモリ上の各要素の位置に基づいて、算出された復号文のデータ本体を、メモリに書き込む手段と、
前記メモリ上に離散的に配置された復号文の各要素を、前記ポインタを用いて順次メモリから読出し、連続的な配列構造のデータとして出力する手段と、
を備えることを特徴とする演算装置。
【請求項4】
ランダムな値であるデータ本体と、各要素のリンク情報であるポインタの組からなる要素としてダミーデータを配置するよう、前記確保されたメモリ領域において、ダミーデータの各要素を配置する位置をランダムに決定する手段と、
前記決定されたメモリ上のダミーデータの各要素の位置に基づいて、各要素のポインタをメモリに書き込む手段と、
ダミーデータのデータ本体として、ランダムな値をメモリに書き込む手段と、
を備えることを特徴とする前記請求項1から3のいずれか1つに記載の演算装置。
【請求項5】
多倍長整数で構成される秘密鍵を離散的にメモリ上に配置する演算装置のコンピュータを、
多倍長整数で構成される秘密鍵を入力する手段、
前記秘密鍵を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、メモリ上に当該要素を配置する領域を確保する手段、
前記確保されたメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する手段、
前記決定されたメモリ上の各要素の位置に基づいて、各要素のデータ本体及びポインタを、前記メモリに書き込む手段、
として機能させるためのコンピュータプログラム。
【請求項6】
多倍長整数で構成される秘密鍵、平文、秘密鍵と平文の演算により得られる署名を離散的にメモリ上に配置する演算装置のコンピュータを、
多倍長整数で構成される秘密鍵及び平文を入力する手段、
前記秘密鍵、平文及び署名を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、前記メモリ上に当該要素を配置する領域をそれぞれ確保する手段、
前記確保されたそれぞれのメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する手段、
前記決定されたメモリ上の各要素の位置に基づいて、秘密鍵及び平文の各要素のデータ本体及びポインタ、署名の各要素のポインタを、それぞれメモリに書き込む手段、
前記メモリ上に離散的に配置された秘密鍵と平文から署名を算出する手段、
前記決定されたメモリ上の各要素の位置に基づいて、算出された署名のデータ本体を、メモリに書き込む手段、
前記メモリ上に離散的に配置された署名の各要素を、前記ポインタを用いて順次メモリから読出し、連続的な配列構造のデータとして出力する手段、
として機能させるためのコンピュータプログラム。
【請求項7】
多倍長整数で構成される秘密鍵、暗号文、秘密鍵と暗号文の演算により得られる復号文を離散的にメモリ上に配置する演算装置のコンピュータを、
多倍長整数で構成される秘密鍵及び暗号文を入力する手段、
前記秘密鍵、暗号文及び復号文を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、前記メモリ上に当該要素を配置する領域をそれぞれ確保する手段、
前記確保されたそれぞれのメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する手段、
前記決定されたメモリ上の各要素の位置に基づいて、秘密鍵及び暗号文の各要素のデータ本体及びポインタ、復号文の各要素のポインタを、それぞれメモリに書き込む手段、
前記メモリ上に離散的に配置された秘密鍵と暗号文から復号文を算出する手段、
前記決定されたメモリ上の各要素の位置に基づいて、算出された復号文のデータ本体を、メモリに書き込む手段、
前記メモリ上に離散的に配置された復号文の各要素を、前記ポインタを用いて順次メモリから読出し、連続的な配列構造のデータとして出力する手段、
として機能させるためのコンピュータプログラム。
【請求項8】
前記コンピュータを、さらに
ランダムな値であるデータ本体と、各要素のリンク情報であるポインタの組からなる要素としてダミーデータを配置するよう、前記確保されたメモリ領域において、ダミーデータの各要素を配置する位置をランダムに決定する手段、
前記決定されたメモリ上のダミーデータの各要素の位置に基づいて、各要素のポインタをメモリに書き込む手段、
ダミーデータのデータ本体として、ランダムな値をメモリに書き込む手段、
として機能させるための請求項5から7のいずれか1つに記載のコンピュータプログラム。


【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公開番号】特開2006−203822(P2006−203822A)
【公開日】平成18年8月3日(2006.8.3)
【国際特許分類】
【出願番号】特願2005−16131(P2005−16131)
【出願日】平成17年1月24日(2005.1.24)
【出願人】(000102728)株式会社エヌ・ティ・ティ・データ (438)
【Fターム(参考)】