(57)【要約】【課題】メモリ上に連続して配置される多倍長整数に着目してメモリから秘密鍵情報の抽出を試みる攻撃に耐性を有することができる演算装置を提供する。【解決手段】符号化部３は、入力される秘密鍵及び平文に対して符号変換、ハッシュ関数によるハッシュ処理、意味を持たないデータを付与してデータサイズを整えるパディング処理等を行い、連続する配列構造の多倍長整数のデータを出力する。多倍長演算部４−１は、符号化部３から入力される配列構造のデータを、本発明特有なデータ構造であるリスト構造のデータに変換してメモリ５に書込みを行う。データ構造変換部４−２は、メモリ５上に離散的に配置されているリスト構造のデータに対し、先頭要素のアドレスを用いて、先頭要素からポインタを順に追跡し、配列構造のデータに変換する。制御部２は、制御部２が配列構造に変換された署名を外部へ出力する。【選択図】    図１
2006203822.tif 000002
【特許請求の範囲】
【請求項１】
多倍長整数で構成される秘密鍵を離散的にメモリ上に配置する演算装置であって、
多倍長整数で構成される秘密鍵を入力する手段と、
前記秘密鍵を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、メモリ上に当該要素を配置する領域を確保する手段と、
前記確保されたメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する手段と、
前記決定されたメモリ上の各要素の位置に基づいて、各要素のデータ本体及びポインタを、メモリに書き込む手段と、
を備えることを特徴とする演算装置。
【請求項２】
多倍長整数で構成される秘密鍵、平文、秘密鍵と平文の演算により得られる署名を離散的にメモリ上に配置する演算装置であって、
多倍長整数で構成される秘密鍵及び平文を入力する手段と、
前記秘密鍵、平文及び署名を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、前記メモリ上に当該要素を配置する領域をそれぞれ確保する手段と、
前記確保されたそれぞれのメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する手段と、
前記決定されたメモリ上の各要素の位置に基づいて、秘密鍵及び平文の各要素のデータ本体及びポインタ、署名の各要素のポインタを、それぞれメモリに書き込む手段と、
前記メモリ上に離散的に配置された秘密鍵と平文から署名を算出する手段と、
前記決定されたメモリ上の各要素の位置に基づいて、算出された署名のデータ本体を、メモリに書き込む手段と、
前記メモリ上に離散的に配置された署名の各要素を、前記ポインタを用いて順次メモリから読出し、連続的な配列構造のデータとして出力する手段と、
を備えることを特徴とする演算装置。
【請求項３】
多倍長整数で構成される秘密鍵、暗号文、秘密鍵と暗号文の演算により得られる復号文を離散的にメモリ上に配置する演算装置であって、
多倍長整数で構成される秘密鍵及び暗号文を入力する手段と、
前記秘密鍵、暗号文及び復号文を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、前記メモリ上に当該要素を配置する領域をそれぞれ確保する手段と、
前記確保されたそれぞれのメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する手段と、
前記決定されたメモリ上の各要素の位置に基づいて、秘密鍵及び暗号文の各要素のデータ本体及びポインタ、復号文の各要素のポインタを、それぞれメモリに書き込む手段と、
前記メモリ上に離散的に配置された秘密鍵と暗号文から復号文を算出する手段と、
前記決定されたメモリ上の各要素の位置に基づいて、算出された復号文のデータ本体を、メモリに書き込む手段と、
前記メモリ上に離散的に配置された復号文の各要素を、前記ポインタを用いて順次メモリから読出し、連続的な配列構造のデータとして出力する手段と、
を備えることを特徴とする演算装置。
【請求項４】
ランダムな値であるデータ本体と、各要素のリンク情報であるポインタの組からなる要素としてダミーデータを配置するよう、前記確保されたメモリ領域において、ダミーデータの各要素を配置する位置をランダムに決定する手段と、
前記決定されたメモリ上のダミーデータの各要素の位置に基づいて、各要素のポインタをメモリに書き込む手段と、
ダミーデータのデータ本体として、ランダムな値をメモリに書き込む手段と、
を備えることを特徴とする前記請求項１から３のいずれか１つに記載の演算装置。
【請求項５】
多倍長整数で構成される秘密鍵を離散的にメモリ上に配置する演算装置のコンピュータを、
多倍長整数で構成される秘密鍵を入力する手段、
前記秘密鍵を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、メモリ上に当該要素を配置する領域を確保する手段、
前記確保されたメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する手段、
前記決定されたメモリ上の各要素の位置に基づいて、各要素のデータ本体及びポインタを、前記メモリに書き込む手段、
として機能させるためのコンピュータプログラム。
【請求項６】
多倍長整数で構成される秘密鍵、平文、秘密鍵と平文の演算により得られる署名を離散的にメモリ上に配置する演算装置のコンピュータを、
多倍長整数で構成される秘密鍵及び平文を入力する手段、
前記秘密鍵、平文及び署名を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、前記メモリ上に当該要素を配置する領域をそれぞれ確保する手段、
前記確保されたそれぞれのメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する手段、
前記決定されたメモリ上の各要素の位置に基づいて、秘密鍵及び平文の各要素のデータ本体及びポインタ、署名の各要素のポインタを、それぞれメモリに書き込む手段、
前記メモリ上に離散的に配置された秘密鍵と平文から署名を算出する手段、
前記決定されたメモリ上の各要素の位置に基づいて、算出された署名のデータ本体を、メモリに書き込む手段、
前記メモリ上に離散的に配置された署名の各要素を、前記ポインタを用いて順次メモリから読出し、連続的な配列構造のデータとして出力する手段、
として機能させるためのコンピュータプログラム。
【請求項７】
多倍長整数で構成される秘密鍵、暗号文、秘密鍵と暗号文の演算により得られる復号文を離散的にメモリ上に配置する演算装置のコンピュータを、
多倍長整数で構成される秘密鍵及び暗号文を入力する手段、
前記秘密鍵、暗号文及び復号文を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、前記メモリ上に当該要素を配置する領域をそれぞれ確保する手段、
前記確保されたそれぞれのメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する手段、
前記決定されたメモリ上の各要素の位置に基づいて、秘密鍵及び暗号文の各要素のデータ本体及びポインタ、復号文の各要素のポインタを、それぞれメモリに書き込む手段、
前記メモリ上に離散的に配置された秘密鍵と暗号文から復号文を算出する手段、
前記決定されたメモリ上の各要素の位置に基づいて、算出された復号文のデータ本体を、メモリに書き込む手段、
前記メモリ上に離散的に配置された復号文の各要素を、前記ポインタを用いて順次メモリから読出し、連続的な配列構造のデータとして出力する手段、
として機能させるためのコンピュータプログラム。
【請求項８】
前記コンピュータを、さらに
ランダムな値であるデータ本体と、各要素のリンク情報であるポインタの組からなる要素としてダミーデータを配置するよう、前記確保されたメモリ領域において、ダミーデータの各要素を配置する位置をランダムに決定する手段、
前記決定されたメモリ上のダミーデータの各要素の位置に基づいて、各要素のポインタをメモリに書き込む手段、
ダミーデータのデータ本体として、ランダムな値をメモリに書き込む手段、
として機能させるための請求項５から７のいずれか１つに記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば、秘密鍵情報に対する攻撃に耐性を有することを可能とする演算装置およびコンピュータプログラムに関する。
【背景技術】
【０００２】
従来、多くの暗号方式では、多倍長の整数を対象とした有限体上での演算が利用される。ここで、多倍長の整数とは、一般的なＣＰＵの語長（３２ビット等）を超える語長の整数、例えば、１０２４ビット長の整数をいう。このような暗号方式を計算機等に実装するには、多倍長演算装置が必要とされる。多倍長演算装置の多くは、多倍長整数を、ＣＰＵの語長で区切った整数の配列およびその配列長等の情報とを一まとめにした構造体として実装されることが多く、そのデータ構造を基にして、有限体上の四則演算、べき乗剰余演算、楕円スカラー倍演算などが構築され、それらを効率的に実現するための技術が多く提案されている
【０００３】
近年、これらの暗号装置の外部から、秘密鍵に基づく一連の処理の処理時間を計測したり、消費電力等を観測したりすることにより、秘密鍵情報を取得する攻撃（サイドチャネル攻撃）が注目され始め、これらの攻撃に対して耐性を持たせた暗号装置が提案されている（例えば特許文献１、特許文献２参照）。
【特許文献１】特開２００２−２６１７５３号公報
【特許文献２】特開２００２−２６８５４７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、さらに近年、サイドチャネル攻撃とは本質的に前提が異なる、さらに強力な攻撃として、何らかの手法で暗号装置が保有するメモリを監視することで秘密鍵を取得する攻撃（ホワイトボックス攻撃）が危惧されている。その攻撃手法の１つとして、メモリを常時監視し、秘密鍵に基づく一連の処理が行われる際にメモリ上に瞬間的に出現する秘密鍵情報の候補を捕捉・抽出し、得られた秘密鍵候補集合から全数試行により、真の秘密鍵を特定する攻撃がある。しかし、従来技術では、上記ホワイトボックス攻撃、すなわちメモリを監視して秘密鍵を特定する攻撃に対しては何ら対策が講じられていないという問題があった。
【０００５】
本発明は、このような事情を考慮してなされたものであり、その目的は、メモリ上に連続して配置される多倍長整数に着目してメモリから秘密鍵情報の抽出を試みる攻撃に耐性を有することができる演算装置およびコンピュータプログラムを提供することにある。
【課題を解決するための手段】
【０００６】
上述した課題を解決するために、本発明は、多倍長整数で構成される秘密鍵を離散的にメモリ上に配置する演算装置であって、多倍長整数で構成される秘密鍵を入力する手段と、前記秘密鍵を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、メモリ上に当該要素を配置する領域を確保する手段と、前記確保されたメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する手段と、前記決定されたメモリ上の各要素の位置に基づいて、各要素のデータ本体及びポインタを、メモリに書き込む手段と、を備えることを特徴とする演算装置である。
【０００７】
本発明は、多倍長整数で構成される秘密鍵、平文、秘密鍵と平文の演算により得られる署名を離散的にメモリ上に配置する演算装置であって、多倍長整数で構成される秘密鍵及び平文を入力する手段と、前記秘密鍵、平文及び署名を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、前記メモリ上に当該要素を配置する領域をそれぞれ確保する手段と、前記確保されたそれぞれのメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する手段と、前記決定されたメモリ上の各要素の位置に基づいて、秘密鍵及び平文の各要素のデータ本体及びポインタ、署名の各要素のポインタを、それぞれメモリに書き込む手段と、前記メモリ上に離散的に配置された秘密鍵と平文から署名を算出する手段と、前記決定されたメモリ上の各要素の位置に基づいて、算出された署名のデータ本体を、メモリに書き込む手段と、前記メモリ上に離散的に配置された署名の各要素を、前記ポインタを用いて順次メモリから読出し、連続的な配列構造のデータとして出力する手段と、を備えることを特徴とする演算装置である。
【０００８】
本発明は、多倍長整数で構成される秘密鍵、暗号文、秘密鍵と暗号文の演算により得られる復号文を離散的にメモリ上に配置する演算装置であって、多倍長整数で構成される秘密鍵及び暗号文を入力する手段と、前記秘密鍵、暗号文及び復号文を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、前記メモリ上に当該要素を配置する領域をそれぞれ確保する手段と、前記確保されたそれぞれのメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する手段と、前記決定されたメモリ上の各要素の位置に基づいて、秘密鍵及び暗号文の各要素のデータ本体及びポインタ、復号文の各要素のポインタを、それぞれメモリに書き込む手段と、前記メモリ上に離散的に配置された秘密鍵と暗号文から復号文を算出する手段と、前記決定されたメモリ上の各要素の位置に基づいて、算出された復号文のデータ本体を、メモリに書き込む手段と、前記メモリ上に離散的に配置された復号文の各要素を、前記ポインタを用いて順次メモリから読出し、連続的な配列構造のデータとして出力する手段と、を備えることを特徴とする演算装置である。
【０００９】
本発明は、上記に記載の発明において、ランダムな値であるデータ本体と、各要素のリンク情報であるポインタの組からなる要素としてダミーデータを配置するよう、前記確保されたメモリ領域において、ダミーデータの各要素を配置する位置をランダムに決定する手段と、前記決定されたメモリ上のダミーデータの各要素の位置に基づいて、各要素のポインタをメモリに書き込む手段と、ダミーデータのデータ本体として、ランダムな値をメモリに書き込む手段と、
を備えることを特徴とする。
【００１０】
本発明は、多倍長整数で構成される秘密鍵を離散的にメモリ上に配置する演算装置のコンピュータを、多倍長整数で構成される秘密鍵を入力する手段、前記秘密鍵を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、メモリ上に当該要素を配置する領域を確保する手段、前記確保されたメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する手段、前記決定されたメモリ上の各要素の位置に基づいて、各要素のデータ本体及びポインタを、前記メモリに書き込む手段、として機能させるためのコンピュータプログラムである。
【００１１】
本発明は、多倍長整数で構成される秘密鍵、平文、秘密鍵と平文の演算により得られる署名を離散的にメモリ上に配置する演算装置のコンピュータを、多倍長整数で構成される秘密鍵及び平文を入力する手段、前記秘密鍵、平文及び署名を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、前記メモリ上に当該要素を配置する領域をそれぞれ確保する手段、前記確保されたそれぞれのメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する手段、前記決定されたメモリ上の各要素の位置に基づいて、秘密鍵及び平文の各要素のデータ本体及びポインタ、署名の各要素のポインタを、それぞれメモリに書き込む手段、前記メモリ上に離散的に配置された秘密鍵と平文から署名を算出する手段、前記決定されたメモリ上の各要素の位置に基づいて、算出された署名のデータ本体を、メモリに書き込む手段、前記メモリ上に離散的に配置された署名の各要素を、前記ポインタを用いて順次メモリから読出し、連続的な配列構造のデータとして出力する手段、として機能させるためのコンピュータプログラムである。
【００１２】
本発明は、多倍長整数で構成される秘密鍵、暗号文、秘密鍵と暗号文の演算により得られる復号文を離散的にメモリ上に配置する演算装置のコンピュータを、多倍長整数で構成される秘密鍵及び暗号文を入力する手段、前記秘密鍵、暗号文及び復号文を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、前記メモリ上に当該要素を配置する領域をそれぞれ確保する手段、前記確保されたそれぞれのメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する手段、前記決定されたメモリ上の各要素の位置に基づいて、秘密鍵及び暗号文の各要素のデータ本体及びポインタ、復号文の各要素のポインタを、それぞれメモリに書き込む手段、前記メモリ上に離散的に配置された秘密鍵と暗号文から復号文を算出する手段、前記決定されたメモリ上の各要素の位置に基づいて、算出された復号文のデータ本体を、メモリに書き込む手段、前記メモリ上に離散的に配置された復号文の各要素を、前記ポインタを用いて順次メモリから読出し、連続的な配列構造のデータとして出力する手段、として機能させるためのコンピュータプログラムである。
【００１３】
本発明は、上記に記載の発明において、前記コンピュータを、さらにランダムな値であるデータ本体と、各要素のリンク情報であるポインタの組からなる要素としてダミーデータを配置するよう、前記確保されたメモリ領域において、ダミーデータの各要素を配置する位置をランダムに決定する手段、前記決定されたメモリ上のダミーデータの各要素の位置に基づいて、各要素のポインタをメモリに書き込む手段、ダミーデータのデータ本体として、ランダムな値をメモリに書き込む手段、として機能させるためコンピュータプログラムである。
【発明の効果】
【００１４】
この発明によれば、多倍長整数で構成される秘密鍵を入力し、秘密鍵を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、メモリ上に当該要素を配置する領域を確保する。確保されたメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定する。そして、決定されたメモリ上の各要素の位置に基づいて、各要素のデータ本体及びポインタを、メモリに書き込む構成とした。したがって、多倍長整数を表現する整数配列がなくなり、また、秘密鍵の構成要素がメモリ上で離散的に配置されているため、メモリ上の一定領域における個々の整数データを単に並べただけでは秘密鍵を再現することができないため、攻撃に耐性を有することができるという利点が得られる。
【００１５】
また、本発明によれば、多倍長整数で構成される秘密鍵及び平文を入力し、秘密鍵、平文及び署名を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、メモリ上に当該要素を配置する領域をそれぞれ確保する。次に、確保されたそれぞれのメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定し、決定されたメモリ上の各要素の位置に基づいて、秘密鍵及び平文の各要素のデータ本体及びポインタ、署名の各要素のポインタを、それぞれメモリに書き込む。また、メモリ上に離散的に配置された秘密鍵と平文から署名を算出し、決定されたメモリ上の各要素の位置に基づいて、算出された署名のデータ本体を、メモリに書き込む。また、さらに、メモリ上に離散的に配置された署名の各要素を、ポインタを用いて順次メモリから読出し、連続的な配列構造のデータとして出力する構成とした。したがって、多倍長整数を表現する整数配列がなくなり、また、秘密鍵、平文及び署名の構成要素がメモリ上で離散的に配置されているため、メモリ上の一定領域における個々の整数データを単に並べただけでは秘密鍵、平文、署名を再現することができないため、攻撃に耐性を有することができるという利点が得られる。
【００１６】
また、本発明によれば、多倍長整数で構成される秘密鍵及び暗号文を入力し、秘密鍵、暗号文及び復号文を、データ本体と各要素のリンク情報であるポインタの組からなる要素として配置するよう、メモリ上に当該要素を配置する領域をそれぞれ確保する。次に、確保されたそれぞれのメモリ上の領域において、多倍長整数の各要素を配置する位置をランダムに決定し、決定されたメモリ上の各要素の位置に基づいて、秘密鍵及び暗号文の各要素のデータ本体及びポインタ、復号文の各要素のポインタを、それぞれメモリ上の各要素の位置に書き込む。そして、メモリ上に離散的に配置された秘密鍵と暗号文から復号文を算出し、決定されたメモリ上の各要素の位置に基づいて、算出された復号文のデータ本体を、メモリに書き込む。また、メモリ上に離散的に配置された復号文の各要素を、ポインタを用いて順次メモリから読出し、連続的な配列構造のデータとして出力する構成とした。したがって、多倍長整数を表現する整数配列がなくなり、また、秘密鍵、暗号文及び復号文の構成要素がメモリ上で離散的に配置されているため、メモリ上の一定領域における個々の整数データを単に並べただけでは秘密鍵、暗号文及び復号文を再現することができないため、攻撃に耐性を有することができるという利点が得られる。
【００１７】
また、本発明によれば、ランダムな値であるデータ本体と、各要素のリンク情報であるポインタの組からなる要素としてダミーデータを配置するよう、確保されたメモリ領域において、ダミーデータの各要素を配置する位置をランダムに決定し、決定されたメモリ上のダミーデータの各要素の位置に基づいて、各要素のポインタをメモリに書き込む。そして、ダミーデータのデータ本体として、ランダムな値をメモリに書き込む構成とした。したがって、データの再現がより困難になり、攻撃に耐性を有することができるという利点が得られる。
【発明を実施するための最良の形態】
【００１８】
本発明は、上記したように、メモリ上に配置される秘密鍵を特定されないようにすることを目的とする。秘密鍵は、平文に秘密鍵を作用させて署名を生成するいわゆるデジタル署名を生成する処理、或いは、暗号文に秘密鍵を作用させて、暗号化された文章を復号する処理で用いられるが、以降、本件明細書においては、デジタル署名を生成する署名処理装置の処理について説明を行う。
【００１９】
以下、本発明の一実施形態によるデジタル署名処理を、図面を参照して説明する。
図１は、本発明の実施形態によるデジタル署名処理を示すブロック図である。図において、署名処理装置１は、制御部２、符号化部３、署名演算部４からなる。また、外部装置としてメモリ５を備えている。制御部２は、署名処理装置１の全体的な制御および外部（メモリ５等）との入出力の制御を行う。符号化部３は、文字列データである平文及び秘密鍵を入力し、符号変換、ハッシュ関数によるハッシュ処理、意味を持たないデータを付与してデータサイズを整えるパディング処理等を行い、連続する配列構造の多倍長整数のデータ（以後、配列構造のデータ）として出力する。
【００２０】
署名演算部４は、多倍長演算部４−１およびデータ構造変換部４−２からなり、秘密鍵および平文を入力とし、ＲＳＡ暗号、ＲＳＡ署名、ＤＳＡ署名などであれば、べき乗剰余演算を行い、楕円曲線暗号、ＥＣＤＳＡ署名などであれば、楕円スカラー倍演算を行う。なお、べき乗剰余演算や楕円スカラー倍演算は、共に、多倍長整数の四則演算の組み合わせからなる。
【００２１】
多倍長演算部４−１は、上記符号化部３から入力される配列構造のデータを、本発明特有なデータ構造であるリスト構造のデータに変換してメモリ５に書込みを行う。また、メモリ５上にあるリスト構造のデータに対して、加算、減算、乗算、除算等の各種演算を行い、演算結果をリスト構造のデータとしてメモリに書き込む。データ構造変換部４−２は、メモリ５上に離散的に配置されているリスト構造のデータに対し、図示しない先頭アドレス管理部に格納されている先頭要素のアドレスを用いて、先頭要素からポインタを順に追跡し、配列構造のデータに変換する。データ構造変換部４−２は、演算結果である署名を相手側に送信する場合等において、演算結果をメモリ５から読み出す際に用いられる。
【００２２】
すなわち、本実施形態では、メモリ５上に配置するデータである秘密鍵は、多倍長演算部４−１により、離散的なリスト構造として配置され、また演算結果である署名においても、リスト構造で配置されることになる。このように構成することによって、従来は、固定長の連続する配列構造のデータに着目することで秘密鍵を容易に補足することができたが、本実施形態では、メモリ５上ではリスト構造により、離散的にかつランダムな順序で配置されるため、メモリ５を監視して秘密鍵を抽出することを困難にしている。
【００２３】
さらに、説明すれば、従来技術では、上記攻撃に対して脆弱である理由の１つに、多倍長演算装置に十分な耐タンパー性が具備されていないことがある。従来の多倍長演算装置では、多倍長整数を連続する配列構造として保持しており、現在、よく用いられる１０２４ビット長整数は、固有の配列長（１６ビットのワード長で６４語、３２ビットのワード長で３２語）を示すため、語長に着目してメモリから秘密鍵を抽出する攻撃に対して良い手がかりを与えてしまう。また、有限体上の四則演算を効率的に実現するため、連続する配列構造に一定の順序（昇順または降順）で、語長で区切られた整数を格納していることから、捕捉された後にそれが秘密鍵であるか否かを特定することも容易にしている（昇順または降順と見当をつけて高々２回の検証で特定できる）。
【００２４】
本発明では、多倍長演算部４−１が扱う多倍長整数を表現するデータ構造として、整数配列を廃止し、リスト構造を用いている。本発明におけるリスト構造とは、列を表現するデータ構造の１つであり、データ本体と次のデータを示すポインタから構成される要素の集合で構成される（詳細は後述する）。また、リスト構造の各要素がメモリ上に連続的に配置されるのでは、容易に解析されてしまうため、本発明のリスト構造では、これらの要素がメモリ内で連続せず離散的に配置されるようにしている。また、必要に応じて、実際のデータと同様の構成からなるダミーを同時に配置することで、解析をより困難にさせている。
【００２５】
さらに、従来の配列表現による四則演算を、リスト構造上で実現することで四則演算等を実現する。具体的には、従来、配列で添字による要素参照を利用している処理を、本実施形態では、リスト構造において、先頭からポインタを順に辿ることで参照し、さらに双方向リストでは逆方向ポインタも利用しながら要素を参照する。
【００２６】
ここで、本実施形態による多倍長演算部４−１による四則演算方法について説明する。図２は、本実施形態による多倍長演算部４−１による四則演算方法を説明するための概念図である。従来技術による四則演算（加算）では、添字によって各要素へランダムアクセスが可能であるので、単純に添字で特定の要素（図示の例では、ａ［１］、ｂ［１］）を参照して加算（図示の例では、ｃ［１］＝ａ［１］＋ｂ［１］）することが可能である。これに対して、本実施形態では、ａ［０］からポインタを参照してリンクを辿ってａ［１］を取得し、ｂ［０］からポインタを参照してリンクを辿ってｂ［１］を取得して加算（図示の例では、ｃ［１］＝ａ［１］＋ｂ［１］）することになる。
したがって、本実施形態では、図示から明らかなようにステップ数が増加して演算速度が低下するが、安全性は向上する。
また、本実施形態においては、多倍長演算部４−１における演算がメモリ５上で行われるが、この演算は全てリスト構造で行われる。このように演算においても常にリスト構造とすることで、解析を困難にさせている。
【００２７】
次に、上述した実施形態の署名処理装置１の動作について説明する。ここで、図３は、本実施形態の署名処理装置１の動作を説明するためのフローチャートである。文字列で構成されている平文が符号化部３に入力され、符号化部３において、符号変換、ハッシュ処理、パディング処理が行われ、多倍長整数に符号化される。この段階での多倍長整数は、連続する配列構造となっている。また、平文同様、秘密鍵についても符号化部において、連続する配列構造の多倍長整数に変換される（ステップＳ１０）。なお、入力として多倍長整数のデータが入力される場合は、この符号化部３での動作は必要ない。
【００２８】
次に、配列構造の整数となっている平文及び秘密鍵に対し、多倍長演算部４−１において、リスト構造への変換が行われ、メモリ５に配置される。この構成により配列構造であった平文及び秘密鍵はメモリ５上では離散的なリスト構造で配置される。また、平文及び秘密鍵による演算によって得られる署名を離散的なリスト構造でメモリ上に配置するために、当該署名を配置するためのリスト構造も配置する。このときには署名のデータ自体は入っておらず、リスト構造のみ（リンク情報であるポインタのみ）が配置される（ステップＳ１１）。
【００２９】
この多倍長演算部４−１による離散化処理についての詳細は後述する。そして、リスト構造となっている平文及び秘密鍵を多倍長演算部４−１によって演算し、演算結果である署名を求め、署名をメモリ５上に離散的なリスト構造で配置する。つまり、先のステップで予め離散的に配置されたリスト構造に、演算結果である署名のデータ（データ本体）を代入する（ステップＳ１２）。最後に、メモリ５上にリスト構造で配置された署名を、メモリから読み出す際には、データ構造変換部４−２で、連続する配列構造に変換する（ステップＳ１４）。
【００３０】
ここで、図４は、データ構造変換部４−２の動作について説明するための概念図である。データ構造変換部４−２では、メモリ５上にリスト構造で表現されている多倍長整数を、そのポインタを参照することで、連続する配列構造に変換する。図示の例では、まず、ａ［０］を先頭に配置し、次いで、ポインタを参照することで、ａ［１］を配置し、同様にポインタを参照しながら、ａ［２］、ａ［３］、…と順次配置していく。次に、制御部２が配列構造に変換された暗号演算結果（すなわち署名）を外部へ出力する（ステップＳ１６）。
【００３１】
次に、上述した多倍長演算部４−１の構成例について説明する。ここで、図５は、本実施形態による署名処理装置１の多倍長演算部４−１の一構成例を示すブロック図である。
図５において、初期化部１０は、メモリ５上に領域を確保、すなわち領域を割り当てる。本発明においては、連続ではなく離散的に配置することを目的とすること、また後で説明するダミーを同時に配置するため、配置する多倍長整数より大きい領域を確保する必要がある。一例としては、配置する多倍長整数の３倍の領域を確保する。領域は、図６に示されるように、データの値が格納される実データ（以下、データ本体）と、データ同士のポインタとの組で構成される要素の集合となっている。破棄部１２は、初期化部１０で確保した領域において、実データ或いはダミーデータが配置されなかった領域を開放する。代入部１３は、各領域の要素におけるデータ本体にデータを代入する（コピーする）。
【００３２】
算術演算部１４は、多倍長整数の加算、減算、乗算、除算を行う。論理演算部１５は、多倍長整数に対して、ビット単位のシフト、論理和、論理積、排他的論理和などを求める。比較部１６は、多倍長整数同士の大小を比較する。これら算術演算部１４、論理演算部１５、比較部１６は従来から行われている処理を行う。多倍長整数データ構造生成部１７は、本発明に特有の構成であり、符号化部３で符号化された配列構造の整数である平文及び秘密鍵、演算により求められる署名を、離散的なリスト構造としてメモリ５に配置するための処理を行う。
【００３３】
ここで、図６は、本実施形態の署名処理装置のメモリ５上におけるリスト構造を示す概念図である。図６（ａ）は、各要素がデータ本体と、次の要素を示すポインタとから構成されている単方向リストの構造を示している。また、図６（ｂ）には、各要素がデータ本体と、次の要素を示すポインタ及び前の要素を示すポインタとから構成される双方向リストの構造を示している。本件発明は、どちらの構造であっても実施可能であるが、以後単方向リストの構造を用いて説明する。
【００３４】
次に、上述した多倍長整数データ構造生成部１７の動作について説明する。当該処理は前述のフローチャートのステップＳ１１に相当する構成であり、平文及び秘密鍵、署名を格納するための要素が配置されることになる。
【００３５】
最初に、初期化部１０を呼び出し、図８（ａ）に示すように、平文及び秘密鍵、署名をメモリ５上にデータ本体と各要素のリンク情報であるポインタの組からなる要素として配置するための領域を確保する。図８には、便宜上にメモリ上でのアドレス（０１〜２４）を付している。ここでは、アドレス０１〜０２が一つの要素を構成している（図８の太線で示される領域が一つの要素を示す）。上述したように確保する領域は配置する整数のデータより大きい領域を確保する必要がある。本実施形態では、実際のデータのサイズに加え、後に説明するダミーデータ用の領域及び、離散化させるための領域を加えるため、整数のデータの３倍程度の領域を確保する（ステップＳ２０）。この領域は、連続した領域であっても、不連続な領域でもよいが、ここでは連続した領域として１２個の領域を確保した例を示す。
【００３６】
次に、乱数生成部１１により、生成された乱数を用いて、図８（ｂ）に示すように、多倍長整数の各要素を格納する位置をランダムに決定して、それぞれの要素のポインタ部分に、次の要素のメモリ上での位置（リンク）を書き込むことでリンクが形成される（ステップＳ２２）。
【００３７】
図８の例において、各要素の先頭アドレスは必ず奇数となるので、この例では、乱数生成部１１では、０１〜２３の奇数がランダムに（かつ重複なく）生成されることになる。本実施形態は、a[0]〜a[3]の４つの要素で表される秘密鍵を離散的に配置する例とするため、４つの奇数がランダムに生成される。この例では、０５、２１、１３、１７が生成された例である。乱数によって要素の位置が決定され、それぞれの要素のポインタ部分には、次の要素のメモリ上での位置が書き込まれる。今回の例では、05に配置されるa[0]のポインタとしては、次の要素であるa[1]のメモリ上のアドレスである２１が書き込まれる。同様にa[1]、a[2]のポインタには、それぞれ１３、１７が書き込まれる。最後の要素であるa[3]のポインタはnullとなる。ポインタが書き込まれると、それぞれの要素のデータ本体が書き込まれる（ステップＳ２３）。
【００３８】
この例では、図８（ｂ）に示すように、０５、２１、１３、１７で示されるアドレスにそれぞれの要素のデータ本体が書き込まれる。今回の説明では、先にポインタを全て書込み、その後にデータ本体を全て書き込む例を示したが、要素ごとに書き込んでもよいし、データ本体から書き込んでもよい。しかしながら、署名を格納する場合には、演算を行うより先にデータ本体を書き込むことはできないため、先にポインタを全て書き込むことになる。
【００３９】
次に、ダミーデータの配置を行う。ダミーデータは実際のデータ（例えば秘密鍵）と同じサイズのデータとすることが、セキュリティ上は望ましい。したがって、上記のステップＳ２２とほぼ同様の動作を行うことで、ダミーデータの配置が可能である。
この例では、データと同様４つの要素からなるダミーデータを配置するために、４つの奇数１５、１１、０１、１９がランダムに生成され、同様に、ポインタに次の要素のメモリ上のアドレスが書き込まれる（ステップＳ２４）。
【００４０】
さらに、ダミーデータとしてデータ本体を書き込むために、乱数生成部１１で乱数を発生させ、当該乱数をダミーデータの各要素のデータ本体として書き込む。この例では、図８（ｃ）に示されるように、メモリ上の１５、１１、０１、１９で示されるアドレスに、それぞれ乱数がデータ本体として書き込まれる（ステップＳ２６）。そして、実際のデータ或いはダミーデータが書き込まれなかった要素に関して、破棄部１２によって当該領域のメモリを解放する（ステップＳ２８）。
【００４１】
この例では、図８（ｄ）で示されるようにメモリ上の０３〜０４、０７〜１０、２３〜２４が解放される。この例で示したように、大きな領域を確保して、そこにランダムに配置して、空いた領域を開放することで、連続した領域を確保して処理を行った場合においても、離散的な要素の配置を行うことが可能となる。
【００４２】
最後に、実際のデータ及びダミーデータの先頭要素のアドレスを図示しない先頭アドレス管理部に出力する（ステップＳ３０）。この例では、実際のデータの先頭アドレスとして０５が、ダミーデータの先頭アドレスとして１５が出力される。先頭要素のアドレスは、データ構造変換部４−２でデータ構造を変換する際に用いられる。また、先頭からリンクを追跡して、メモリ上でリンク付けられた全要素の領域を解放するときにも当該先頭要素のアドレスは用いられる。上記では、ダミーデータの個数が１個の場合を説明したが、ダミーデータを複数個配置する場合は、ダミーの個数分だけ上記を繰り返し、全てのダミーデータの先頭アドレスを先頭アドレス管理部に出力する。
【００４３】
以上のような動作により、多倍長整数データを連続された配列構造から離散化されたリスト構造に変換してメモリ５に配置することができる。
【００４４】
上述した実施形態によれば、従来技術に特有な連続された配列構造ではなく、離散化されたリスト構造としてメモリ５上に配置されるため、整数配列に着目してメモリから秘密鍵情報の抽出を試みる攻撃が困難になる。また、リストの構成要素がメモリ上で離散的に配置されているため、メモリ上の一定領域における個々の整数データを単に並べただけでは秘密鍵を再現することができず、再現には組み合わせ的な作業が必要となるため、攻撃を困難にすることができる。
また、上述の実施形態では、平文に秘密鍵を作用させて署名を生成する例としたが、平文に変えて暗号文とすることで、暗号文に秘密鍵を作用させて復号鍵を生成する場合においても適用できることは言うまでもない。
【００４５】
なお、上述した実施形態においては、制御部２、署名演算部４などは、コンピュータシステム内で実行される。そして、上述した制御部２、署名演算部４による一連の処理の過程は、プログラムの形式でコンピュータ読み取り可能な記録媒体に記憶されており、このプログラムをコンピュータが読み出して実行することによって、上記処理が行われる。すなわち、制御部２、署名演算部４における、各処理手段、処理部は、ＣＰＵ等の中央演算処理装置がＲＯＭやＲＡＭ等の主記憶装置に上記プログラムを読み出して、情報の加工・演算処理を実行することにより、実現されるものである。
【００４６】
ここでコンピュータ読み取り可能な記録媒体とは、磁気ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、半導体メモリ等をいう。また、このコンピュータプログラムを通信回線によってコンピュータに配信し、この配信を受けたコンピュータが当該プログラムを実行するようにしても良い。
【図面の簡単な説明】
【００４７】
【図１】本発明の実施形態による署名処理装置を示すブロック図である。
【図２】本実施形態による多倍長演算部４−１による四則演算方法を説明するための概念図である。
【図３】本実施形態の署名処理装置１の動作（デジタル署名）を説明するためのフローチャートである。
【図４】本実施形態による署名処理装置１のデータ構造変換部４−２の動作について説明するための概念図である。
【図５】本実施形態による署名処理装置１の多倍長演算部４−１の一構成例を示すブロック図である。
【図６】本実施形態の署名処理装置で用いる多倍長整数データの構造を示す概念図である。
【図７】多倍長整数データ構造生成部１７の動作を説明するためのフローチャートである。
【図８】多倍長整数データ構造生成部１７の動作を説明するための概念図である。
【符号の説明】
【００４８】
１  署名処理装置
２  制御部
３  符号化部（符号化手段）
４  署名演算部
４−１  多倍長演算部（多倍長整数配置手段、暗号化手段）
４−２  データ構造変換部（データ構造変換手段）
５  メモリ
１０  初期化部
１１  乱数生成部
１２  破棄部
１３  代入部
１４  算術演算部
１５  論理演算部
１６  比較部
１７  多倍長整数データ構造生成部（多倍長整数配置手段、ダミー要素配置手段）
【図１】
2006203822.tif 000003
【図２】
2006203822.tif 000004
【図３】
2006203822.tif 000005
【図４】
2006203822.tif 000006
【図５】
2006203822.tif 000007
【図６】
2006203822.tif 000008
【図７】
2006203822.tif 000009
【図８】
2006203822.tif 000010