(57)【特許請求の範囲】
【請求項１】
素数ｐを法とする剰余体Ｆ上で定義された楕円曲線Ｅ上の離散対数問題を根拠として、楕円曲線Ｅ上の点Ｃに、素数ｐ未満の正整数である係数ｋを乗じて点ｋ＊Ｃを算出する楕円曲線演算を用いて、情報を安全又は確実に扱う情報セキュリティ装置であって、
楕円曲線Ｅ上の点Ｃを記憶している点記憶手段と、
係数ｋの全桁の値を記憶している桁記憶手段と、
桁記憶手段から１個の桁の値ｗを取得する取得手段と、
取得した前記桁により表現しうる値の種類の数と同数の乗算手段と、
取得した前記桁の値ｗに対応する乗算手段を選択する選択手段と、
係数ｋの全ての桁について、前記取得手段、前記選択手段及び前記乗算手段に対して、１個の桁の値ｗの取得と、取得した桁の値ｗに対応する乗算手段の選択と、選択された乗算手段による乗算とを繰り返すように制御する繰返制御手段とを備え、
各乗算手段は、楕円曲線Ｅ上において、前記点Ｃに取得した前記桁の値ｗを乗じて得られた乗算結果を、当該桁に相応する位置において加算し、
取得した前記桁の値ｗが２t で割り切れ、２t+1 で割り切れない条件を満たす非負整数ｔが存在する場合に、当該桁の値ｗに対応する前記乗算手段は、楕円曲線Ｅ上において、点Ｑにｗ／２t を乗じて得られる点の加算又は点Ｑに｜ｗ／２t ｜を乗じて得られる点の減算を含む演算を行い、
取得した前記桁は、ｓｗビット長であり、
前記非負整数ｔが存在する場合に、前記桁の値ｗに対応する前記乗算手段は、（ｓｗ＋１）回の演算を順次行い、前記複数の演算のうち（ｓｗ−ｔ＋１）番目の演算は、楕円曲線Ｅ上の前記加算又は前記減算であり、他の演算は、楕円曲線Ｅ上の２倍算である
ことを特徴とする情報セキュリティ装置。
【請求項２】
前記情報セキュリティ装置は、さらに、点Ｑを初期の加算点とし、加算点へ２＊Ｑを加算して新たな加算点を得ることを繰り返すことにより、点Ｑを除く２sw-1 個の加算点を生成するテーブル生成手段を含み、
非負整数ｔが存在する場合に、当該桁の値ｗに対応する前記乗算手段は、点Ｑにｗ／２t 又は｜ｗ／２t ｜を乗じて得られる点として、前記テーブル生成手段により生成された前記加算点を用いる
ことを特徴とする請求項１に記載の情報セキュリティ装置。
【請求項３】
取得した前記桁は、３ビット長であり、
前記桁の値ｗが２である場合に、対応する乗算手段は、楕円曲線Ｅ上の２倍算、２倍算、加算及び２倍算をこの順序で行い、前記加算は、前記点Ｃを加える演算であり、
前記桁の値ｗが４である場合に、対応する乗算手段は、楕円曲線Ｅ上の２倍算、加算、２倍算及び２倍算をこの順序で行い、前記加算は、前記点Ｃを加える演算であり、
前記桁の値ｗが−２である場合に、対応する乗算手段は、楕円曲線Ｅ上の２倍算、２倍算、減算及び２倍算をこの順序で行い、前記減算は、前記点Ｃを減ずる演算である
ことを特徴とする請求項１に記載の情報セキュリティ装置。
【請求項４】
取得した前記桁は、４ビット長であり、
前記桁の値ｗが２である場合に、対応する乗算手段は、楕円曲線Ｅ上の２倍算、２倍算、２倍算、加算及び２倍算をこの順序で行い、前記加算は、前記点Ｃを加える演算であり、
前記桁の値ｗが４である場合に、対応する乗算手段は、楕円曲線Ｅ上の２倍算、２倍算、加算、２倍算及び２倍算をこの順序で行い、前記加算は、前記点Ｃを加える演算であり、
前記桁の値ｗが６である場合に、対応する乗算手段は、楕円曲線Ｅ上の２倍算、２倍算、２倍算、加算及び２倍算をこの順序で行い、前記加算は、点３＊Ｃを加える演算であり、
前記桁の値ｗが８である場合に、対応する乗算手段は、楕円曲線Ｅ上の２倍算、加算、２倍算、２倍算及び２倍算をこの順序で行い、前記加算は、前記点Ｃを加える演算であり、
前記桁の値ｗが−６である場合に、対応する乗算手段は、楕円曲線Ｅ上の２倍算、２倍算、２倍算、減算及び２倍算をこの順序で行い、前記減算は、点３＊Ｃを減ずる演算であり、
前記桁の値ｗが−４である場合に、対応する乗算手段は、楕円曲線Ｅ上の２倍算、２倍算、減算、２倍算及び２倍算をこの順序で行い、前記減算は、点Ｃを減ずる演算であり、
前記桁の値ｗが−２である場合に、対応する乗算手段は、楕円曲線Ｅ上の２倍算、２倍算、２倍算、減算及び２倍算をこの順序で行い、前記減算は、点Ｃを減ずる演算である
ことを特徴とする請求項１に記載の情報セキュリティ装置。
【請求項５】
前記加算又は前記減算及び前記２倍算は、それぞれ、同じ順序で同じ種類の演算を実行するように、ダミーの演算を含む
ことを特徴とする請求項１に記載の情報セキュリティ装置。
【請求項６】
取得した前記桁がａビット長である場合に、前記非負整数ｔが存在するときに、前記桁の値ｗに対応する前記乗算手段は、（ａ＋１）回の演算を順次行い、前記複数の演算のうち（ａ−ｔ＋１）番目の演算は、楕円曲線Ｅ上の前記加算又は前記減算であり、他の演算は、楕円曲線Ｅ上の２倍算であり、
取得した前記桁がｂビット長である場合に、前記非負整数ｔが存在するときに、前記桁の値ｗに対応する前記乗算手段は、（ｂ＋１）回の演算を順次行い、前記複数の演算のうち（ｂ−ｔ＋１）番目の演算は、楕円曲線Ｅ上の前記加算又は前記減算であり、他の演算は、楕円曲線Ｅ上の２倍算である
ことを特徴とする請求項１に記載の情報セキュリティ装置。
【請求項７】
前記情報セキュリティ装置は、暗号化装置であって、
点ｋ＊Ｃを算出する楕円曲線演算を用いて、情報を暗号化する
ことを特徴とする請求項１に記載の情報セキュリティ装置。
【請求項８】
前記情報セキュリティ装置は、復号装置であって、
点ｋ＊Ｃを算出する楕円曲線演算を用いて、暗号化された情報を復号する
ことを特徴とする請求項１に記載の情報セキュリティ装置。
【請求項９】
前記情報セキュリティ装置は、デジタル署名生成装置であって、
点ｋ＊Ｃを算出する楕円曲線演算を用いて、情報にデジタル署名を施す
ことを特徴とする請求項１に記載の情報セキュリティ装置。
【請求項１０】
前記情報セキュリティ装置は、デジタル署名検証装置であって、
点ｋ＊Ｃを算出する楕円曲線演算を用いて、デジタル署名の検証を行う
ことを特徴とする請求項１に記載の情報セキュリティ装置。
【請求項１１】
前記情報セキュリティ装置は、鍵共有装置であって、
点ｋ＊Ｃを算出する楕円曲線演算を用いて、他の鍵共有装置との間で、共有する鍵を生成する
ことを特徴とする請求項１に記載の情報セキュリティ装置。
【請求項１２】
素数ｐを法とする剰余体Ｆ上で定義された楕円曲線Ｅ上の離散対数問題を根拠として、楕円曲線Ｅ上の点Ｃに、素数ｐ未満の正整数である係数ｋを乗じて点ｋ＊Ｃを算出する楕円曲線演算装置であって、
楕円曲線Ｅ上の点Ｃを記憶している点記憶手段と、
係数ｋの全桁の値を記憶している桁記憶手段と、
桁記憶手段から１個の桁の値ｗを取得する取得手段と、
取得した前記桁により表現しうる値の種類の数と同数の乗算手段と、
取得した前記桁の値ｗに対応する乗算手段を選択する選択手段と、
係数ｋの全ての桁について、前記取得手段、前記選択手段及び前記乗算手段に対して、１個の桁の値ｗの取得と、取得した桁の値ｗに対応する乗算手段の選択と、選択された乗算手段による乗算とを繰り返すように制御する繰返制御手段とを備え、
各乗算手段は、楕円曲線Ｅ上において、前記点Ｃに取得した前記桁の値ｗを乗じて得られた乗算結果を、当該桁に相応する位置において加算し、
取得した前記桁の値ｗが２t で割り切れ、２t+1 で割り切れない条件を満たす非負整数ｔが存在する場合に、当該桁の値ｗに対応する前記乗算手段は、楕円曲線Ｅ上において、点Ｑにｗ／２t を乗じて得られる点の加算又は点Ｑに｜ｗ／２t ｜を乗じて得られる点の減算を含む演算を行い、
取得した前記桁は、ｓｗビット長であり、
前記非負整数ｔが存在する場合に、前記桁の値ｗに対応する前記乗算手段は、（ｓｗ＋１）回の演算を順次行い、前記複数の演算のうち（ｓｗ−ｔ＋１）番目の演算は、楕円曲線Ｅ上の前記加算又は前記減算であり、他の演算は、楕円曲線Ｅ上の２倍算である
ことを特徴とする楕円曲線演算装置。
【請求項１３】
素数ｐを法とする剰余体Ｆ上で定義された楕円曲線Ｅ上の離散対数問題を根拠として、楕円曲線Ｅ上の点Ｃに、素数ｐ未満の正整数である係数ｋを乗じて点ｋ＊Ｃを算出する楕円曲線演算のための集積回路であって、
楕円曲線Ｅ上の点Ｃを記憶している点記憶手段と、
係数ｋの全桁の値を記憶している桁記憶手段と、
桁記憶手段から１個の桁の値ｗを取得する取得手段と、
取得した前記桁により表現しうる値の種類の数と同数の乗算手段と、
取得した前記桁の値ｗに対応する乗算手段を選択する選択手段と、
係数ｋの全ての桁について、前記取得手段、前記選択手段及び前記乗算手段に対して、１個の桁の値ｗの取得と、取得した桁の値ｗに対応する乗算手段の選択と、選択された乗算手段による乗算とを繰り返すように制御する繰返制御手段とを備え、
各乗算手段は、楕円曲線Ｅ上において、前記点Ｃに取得した前記桁の値ｗを乗じて得られた乗算結果を、当該桁に相応する位置において加算し、
取得した前記桁の値ｗが２t で割り切れ、２t+1 で割り切れない条件を満たす非負整数ｔが存在する場合に、当該桁の値ｗに対応する前記乗算手段は、楕円曲線Ｅ上において、点Ｑにｗ／２t を乗じて得られる点の加算又は点Ｑに｜ｗ／２t ｜を乗じて得られる点の減算を含む演算を行い、
取得した前記桁は、ｓｗビット長であり、
前記非負整数ｔが存在する場合に、前記桁の値ｗに対応する前記乗算手段は、（ｓｗ＋１）回の演算を順次行い、前記複数の演算のうち（ｓｗ−ｔ＋１）番目の演算は、楕円曲線Ｅ上の前記加算又は前記減算であり、他の演算は、楕円曲線Ｅ上の２倍算である
ことを特徴とする集積回路。
【請求項１４】
素数ｐを法とする剰余体Ｆ上で定義された楕円曲線Ｅ上の離散対数問題を根拠として、楕円曲線Ｅ上の点Ｃに、素数ｐ未満の正整数である係数ｋを乗じて点ｋ＊Ｃを算出する楕円曲線演算を用いて、情報を安全又は確実に扱う情報セキュリティ装置で用いられる方法であって、
前記情報セキュリティ装置は、楕円曲線Ｅ上の点Ｃを記憶している点記憶手段と、係数ｋの全桁の値を記憶している桁記憶手段とを備え、
前記方法は、
桁記憶手段から１個の桁の値ｗを取得する取得ステップと、
取得した前記桁により表現しうる値の種類の数と同数の乗算ステップと、
取得した前記桁の値ｗに対応する乗算ステップを選択する選択ステップと、
係数ｋの全ての桁について、前記取得ステップ、前記選択ステップ及び前記乗算ステップに対して、１個の桁の値ｗの取得と、取得した桁の値ｗに対応する乗算ステップの選択と、選択された乗算ステップによる乗算とを繰り返すように制御する繰返制御ステップとを含み、
各乗算ステップは、楕円曲線Ｅ上において、前記点Ｃに取得した前記桁の値ｗを乗じて得られた乗算結果を、当該桁に相応する位置において加算し、
取得した前記桁の値ｗが２t で割り切れ、２t+1 で割り切れない条件を満たす非負整数ｔが存在する場合に、当該桁の値ｗに対応する前記乗算ステップは、楕円曲線Ｅ上において、点Ｑにｗ／２t を乗じて得られる点の加算又は点Ｑに｜ｗ／２t ｜を乗じて得られる点の減算を含む演算を行い、
取得した前記桁は、ｓｗビット長であり、
前記非負整数ｔが存在する場合に、前記桁の値ｗに対応する前記乗算ステップは、（ｓｗ＋１）回の演算を順次行い、前記複数の演算のうち（ｓｗ−ｔ＋１）番目の演算は、楕円曲線Ｅ上の前記加算又は前記減算であり、他の演算は、楕円曲線Ｅ上の２倍算である
ことを特徴とする方法。
【請求項１５】
素数ｐを法とする剰余体Ｆ上で定義された楕円曲線Ｅ上の離散対数問題を根拠として、楕円曲線Ｅ上の点Ｃに、素数ｐ未満の正整数である係数ｋを乗じて点ｋ＊Ｃを算出する楕円曲線演算を用いて、情報を安全又は確実に扱う情報セキュリティ装置で用いられるコンピュータプログラムであって、
前記情報セキュリティ装置は、楕円曲線Ｅ上の点Ｃを記憶している点記憶手段と、係数ｋの全桁の値を記憶している桁記憶手段とを備え、
前記コンピュータプログラムは、
コンピュータである前記情報セキュリティ装置に、
桁記憶手段から１個の桁の値ｗを取得する取得ステップと、
取得した前記桁により表現しうる値の種類の数と同数の乗算ステップと、
取得した前記桁の値ｗに対応する乗算ステップを選択する選択ステップと、
係数ｋの全ての桁について、前記取得ステップ、前記選択ステップ及び前記乗算ステップに対して、１個の桁の値ｗの取得と、取得した桁の値ｗに対応する乗算ステップの選択と、選択された乗算ステップによる乗算とを繰り返すように制御する繰返制御ステップとを実行させ、
各乗算ステップは、楕円曲線Ｅ上において、前記点Ｃに取得した前記桁の値ｗを乗じて得られた乗算結果を、当該桁に相応する位置において加算し、
取得した前記桁の値ｗが２t で割り切れ、２t+1 で割り切れない条件を満たす非負整数ｔが存在する場合に、当該桁の値ｗに対応する前記乗算ステップは、楕円曲線Ｅ上において、点Ｑにｗ／２t を乗じて得られる点の加算又は点Ｑに｜ｗ／２t ｜を乗じて得られる点の減算を含む演算を行い、
取得した前記桁は、ｓｗビット長であり、
前記非負整数ｔが存在する場合に、前記桁の値ｗに対応する前記乗算ステップは、（ｓｗ＋１）回の演算を順次行い、前記複数の演算のうち（ｓｗ−ｔ＋１）番目の演算は、楕円曲線Ｅ上の前記加算又は前記減算であり、他の演算は、楕円曲線Ｅ上の２倍算である
ことを特徴とするコンピュータプログラム。
【請求項１６】
前記コンピュータプログラムは、コンピュータ読み取り可能な記録媒体に記録されている
ことを特徴とする請求項１５に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電力消費量の計測による電力解析攻撃に対抗でき、情報を安全、確実に扱うことができる情報セキュリティ技術に関する。
【背景技術】
【０００２】
近年、ハードウェアあるいはソフトウェアにより実装された暗号モジュールにおいて暗号処理が行われる際に、当該暗号処理における様々な副情報を手がかりにして、当該暗号処理において用いられている暗号鍵の解析を行う各種の解読法が考案されている。
例えば、タイミング攻撃と呼ばれる解読方法では、暗号モジュールにおいて暗号処理に要する時間が、当該暗号処理において用いられている暗号鍵の値により、わずかではあるが異なることを利用して、当該暗号鍵の解読を行う。また、SimplePower Analysis（単純電力解析攻撃）、やDifferential Power Analysis（差分電力解析攻撃）と呼ばれる解読方法では、暗号処理を行う際の暗号モジュールにおける電力消費量を副情報として用いる。
【０００３】
これらの解読方法は、近年、高性能な計測機器が安価で手に入るようになった背景もあって、ＩＣカードのような暗号モジュールが実装された実際の製品に対しても解析が可能であることが報告されている。
以下の記述では、上記のような暗号処理時における暗号モジュールの電力消費量の変化、すなわち、電力波形を手がかりにして、暗号鍵を解析する解読方法を総称して、「電力解析攻撃」と呼ぶ。なお、タイミング攻撃については、非特許文献１に、電力解析攻撃については、非特許文献２に詳しく述べられている。
【０００４】
次に、楕円曲線暗号への単純電力解析攻撃について説明する。なお、楕円曲線暗号については、非特許文献５に詳しく述べられており、また、楕円ＥｌＧａｍａｌ暗号や楕円ＤＳＡ署名方式に関しては、非特許文献３に詳しく述べられている。
（楕円曲線暗号の単純電力解析攻撃）
楕円曲線暗号の復号化処理において、正整数である秘密鍵ｋｓと暗号文の一部である楕円曲線上の点Ｃのスカラ倍点ｋｓ＊Ｃを計算する。ここで、ｋｓ＊Ｃは、ｋｓ個の点Ｃを加算することにより得られる楕円曲線上の点を表す。この計算方法として例えば、非特許文献５の６９ページにおける符号付Ｗｉｎｄｏｗ法が知られている。以下では、符号付Ｗｉｎｄｏｗ法について説明する。なお、以下では、Ｗｉｎｄｏｗの幅を３ビットとする。
【０００５】
ステップＳ８０１：ｖ←ｋｓとし、ｖ＝ｖ＿０＋ｖ＿１×２＾３＋ｖ＿２×２＾６＋・・・＋ｖ＿ｂ×２＾（ｂ×３）となるようにｖ＿０，ｖ＿１，ｖ＿２，・・・，ｖ＿ｂをとる。さらに、ｖ＿（ｂ＋１）←０とする。ここで、ｂは（ｌｅｎ／３以上の最も小さい整数）−１、ｌｅｎはｖのビット数、「×」は整数の乗算、ｘ＾ｙはｘのｙ乗を示している。例えば、ｌｅｎ＝５２の場合は、ｂ＝１８−１＝１７である。
【０００６】
ステップＳ８０２：以下のステップＳ８０２１〜Ｓ８０２６で、整数列｛ｗ＿ｉ｝（ｉ＝１，２，．．，ｂ＋１）を生成する。
ステップＳ８０２１：ｃ←０
ステップＳ８０２２：ｖ＿ｃ＞２＾２であるか判定。ｖ＿ｃ＞２＾２である場合、ステップＳ８０２３へ。それ以外は、ステップＳ８０２４へ。
【０００７】
ステップＳ８０２３：ｗ＿ｃ←ｖ＿ｃ−２＾３，ｖ＿（ｃ＋１）←ｖ＿（ｃ＋１）＋１，ステップＳ８０２５へ。
ステップＳ８０２４：ｗ＿ｃ←ｖ＿ｃ
ステップＳ８０２５：ｃ←ｃ＋１
ステップＳ８０２６：ｃ＞ｂ＋１であるか判定。ｃ＞ｂ＋１である場合、ステップＳ８０３へ。それ以外は、ステップＳ８０２２へ。
【０００８】
ステップＳ８０３：以下のステップＳ８０３１〜Ｓ８０３５で、テーブル｛Ｐ＿ｉ｝を生成する。
ステップＳ８０３１：Ｐ＿０←Ｏ，Ｐ＿２←Ｄｏｂ（Ｃ）。ここで、Ｏは楕円曲線の零元であり、Ｄｏｂは楕円曲線の２倍算を示し、Ｄｏｂ（Ｃ）はＣの２倍点である。
ステップＳ８０３２：ｃ←３
ステップＳ８０３３：Ｐ＿ｃ←Ｐ＿（ｃ−１）＋Ｃ
ステップＳ８０３４：ｃ←ｃ＋１
ステップＳ８０３５：ｃ＞２＾２＝４であるか判定。ｃ＞２＾２である場合、ステップＳ８０４へ。それ以外は、ステップＳ８０３３へ。
【０００９】
ステップＳ８０４：以下のステップＳ８０４１〜Ｓ８０４７で、スカラ倍点Ｒを計算する。
ステップＳ８０４１：ｃ←ｂ＋１
ステップＳ８０４２：ｗ＿ｃ＝０であるか判定。ｗ＿ｃ＝０である場合は、ｃ←ｃ−１。
【００１０】
ステップＳ８０４３：Ｒ←Ｐ＿（ｗ＿ｃ）
ステップＳ８０４４：ｃ←ｃ−１
ステップＳ８０４５：ｃ＜０であるか判定。ｃ＜０である場合は、ステップＳ８０５へ。
ステップＳ８０４６：Ｒ←Ｄｏｂ（Ｄｏｂ（Ｄｏｂ（Ｐ＿（ｗ＿ｃ））））
ステップＳ８０４７：ｗ＿ｃが正、負または０であるか判定する。ｗ＿ｃ＜０である場合は、Ｒ←Ａｄｄ（Ｒ，−Ｐ＿（−ｗ＿ｃ））、ｗ＿ｃ＞０である場合は、Ｒ←Ａｄｄ（Ｒ，Ｐ＿（ｗ＿ｃ））、ｗ＿ｃ＝０の場合は何もしない。ステップＳ８０４４へ。ここで、Ａｄｄは、楕円曲線の加算であり、Ａｄｄ（Ｒ，Ｐ＿（ｗ＿ｃ））は、ＲとＰ＿（ｗ＿ｃ）とに対する楕円曲線の加算の結果である。
【００１１】
ステップＳ８０５：Ｒを出力し終了。
上記方法では、スカラ倍点を整数列｛ｗ＿ｉ｝とテーブル｛Ｐ＿ｉ｝を用いて計算している。ステップＳ８０４７ではｗ＿ｃ＝０の場合は、楕円曲線の演算を実行していない。また、ステップＳ８０４２では、ｗ＿ｃ＝０である場合は、楕円曲線の演算を行わず、ｃをデクリメントするため、その分、楕円曲線の演算を実行しないことになる。このように、ｗ＿ｃ＝０の場合は、そうでない場合と処理が異なる。
【００１２】
（楕円曲線の２倍算と楕円曲線の加算の公式）
以下に、楕円曲線の２倍算と楕円曲線の加算の公式を示す。この公式について非特許文献４に詳しく述べられている。ここでは、点の座標をＪａｃｏｂｉａｎ座標として、楕円曲線の演算（加算及び２倍算）を行う。
（ａ）楕円曲線の加算公式
Ｐ１＝（Ｘ１，Ｙ１，Ｚ１），Ｐ２＝（Ｘ２，Ｙ２，Ｚ２）に対して、Ｐ３＝Ｐ１＋Ｐ２＝（Ｘ３，Ｙ３，Ｚ３）とする。
【００１３】
Ｘ３＝−Ｈ＾３−２×Ｕ１×Ｈ＾２＋ｒ＾２
Ｙ３＝−Ｓ１×Ｈ＾３＋ｒ×（Ｕ１×Ｈ＾２−Ｘ３）
Ｚ３＝Ｚ１×Ｚ２×Ｈ
ただし、Ｕ１＝Ｘ１×Ｚ２＾２，Ｕ２＝Ｘ２×Ｚ１＾２，Ｓ１＝Ｙ１×Ｚ２＾３，Ｓ２＝Ｙ２×Ｚ１＾３、Ｈ＝Ｕ１−Ｕ２，ｒ＝Ｓ２−Ｓ１である。
【００１４】
（ｂ）楕円曲線の２倍算公式
Ｐ１＝（Ｘ１，Ｙ１，Ｚ１）に対して、Ｐ４＝２＊Ｐ１＝（Ｘ４，Ｙ４，Ｚ４）とする。
Ｘ４＝Ｔ
Ｙ４＝−８×Ｙ１＾４＋Ｍ×（Ｓ−Ｔ）
Ｚ４＝２×Ｙ１×Ｚ１
ただし、Ｓ＝４×Ｘ１×Ｙ１＾２，Ｍ＝３×Ｘ１＾２＋ａ×Ｚ１＾４，Ｔ＝−２Ｓ＋Ｍ＾２である。
【００１５】
上記より、楕円曲線加算において、２乗算が４回実行され、乗算が１２回実行される。それに比べて、楕円曲線２倍算では、２乗算が６回実行され、乗算が４回実行される。
このように、楕円曲線加算と楕円曲線２倍算とは、２乗算及び乗算の回数が異なるため、暗号モジュールにおける消費電力の波形が異なる。したがって、電力波形を観測することにより、楕円曲線の２倍算、加算の演算の順序を解析することが可能になる。その解析結果から、ｗ＿ｃ＝０の場合の有無を攻撃者が知ることができる。さらに、攻撃者は、ｗ＿ｃ＝０であるか否かの情報から秘密鍵ｋｓの探索空間を狭めることが可能になる。
【００１６】
（従来の楕円曲線暗号の単純電力解析攻撃に対する対策方法）
上記の単純電力解析攻撃では、ｗ＿ｃ＝０の場合に計算処理が異なることを利用している。そこで、この攻撃から防御するためには、ｗ＿ｃ＝０の場合にダミーの計算処理を追加することにより、ｗ＿ｃ＝０の場合とそうでない場合の計算処理を同じにすればよい。具体的には、以下のアルゴリズムで計算する。
【００１７】
ステップＳ９０１：ｖ←ｋｓ、ｖ＝ｖ＿０＋ｖ＿１×２＾３＋ｖ＿２×２＾６＋…＋ｖ＿ｂ×２＾（ｂ×３）となるようにｖ＿０，ｖ＿１，ｖ＿２，…，ｖ＿ｂをとる。さらにｖ＿（ｂ＋１）←０とする。ここで、ｂは（ｌｅｎ／３以上の最も小さい整数）−１、ｌｅｎはｖのビット数、“×”は整数の乗算、ｘ＾ｙはｘのｙ乗を示している。例えば、ｌｅｎ＝５２の場合は、ｂ＝１８−１＝１７である。
【００１８】
ステップＳ９０２：以下のステップＳ９０２１〜Ｓ９０２６で、整数列｛ｗ＿ｉ｝（ｉ＝１，２，．．，ｂ＋１）を生成する。
ステップＳ９０２１：ｃ←０
ステップＳ９０２２：ｖ＿ｃ＞２＾２であるか判定。ｖ＿ｃ＞２＾２である場合、ステップＳ９０２３へ。それ以外は、ステップＳ９０２４へ。
【００１９】
ステップＳ９０２３：ｗ＿ｃ←ｖ＿ｃ−２＾３，ｖ＿（ｃ＋１）←ｖ＿（ｃ＋１）＋１，ステップＳ９０２５へ。
ステップＳ９０２４：ｗ＿ｃ←ｖ＿ｃ
ステップＳ９０２５：ｃ←ｃ＋１
ステップＳ９０２６：ｃ＞ｂ＋１であるか判定。ｃ＞ｂ＋１である場合、ステップＳ９０３へ。それ以外は、ステップＳ９０２２へ。
【００２０】
ステップＳ９０３：以下のステップＳ９０３１〜Ｓ９０３５で、テーブル｛Ｐ＿ｉ｝を生成する。
ステップＳ９０３１：Ｐ＿０←Ｏ，Ｐ＿２←Ｄｏｂ（Ｃ）。
ステップＳ９０３２：ｃ←３
ステップＳ９０３３：Ｐ＿ｃ←Ｐ＿（ｃ−１）＋Ｃ
ステップＳ９０３４：ｃ←ｃ＋１
ステップＳ９０３５：ｃ＞２＾２＝４であるか判定。ｃ＞２＾２である場合、ステップＳ９０４へ。それ以外は、ステップＳ９０３３へ。
【００２１】
ステップＳ９０４：以下のステップで、スカラ倍点Ｒを計算。
ステップＳ９０４１：ｃ←ｂ＋１
ステップＳ９０４２：ｗ＿ｃ＝０であるか判定。ｗ＿ｃ＝０である場合は、Ｄ←Ｄｏｂ（Ｄｏｂ（Ｄｏｂ（Ｃ））），Ｄ←Ａｄｄ（Ｒ，Ｃ），ｃ←ｃ−１。
ステップＳ９０４３：Ｒ←Ｐ＿（ｗ＿ｃ）
ステップＳ９０４４：ｃ←ｃ−１
ステップＳ９０４５：ｃ＜０であるか判定。ｃ＜０である場合は、ステップＳ９０５へ。
【００２２】
ステップＳ９０４６：Ｒ←Ｄｏｂ（Ｄｏｂ（Ｄｏｂ（Ｐ＿（ｗ＿ｃ））））
ステップＳ９０４７：ｗ＿ｃが正、負または０であるか判定する。ｗ＿ｃ＜０である場合は、Ｒ←Ａｄｄ（Ｒ，−Ｐ＿（−ｗ＿ｃ））、ｗ＿ｃ＞０である場合は、Ｒ←Ａｄｄ（Ｒ，Ｐ＿（ｗ＿ｃ））、ｗ＿ｃ＝０の場合は、Ｄ←Ａｄｄ（Ｒ，Ｃ）。ステップＳ９０４４へ。ここで、Ａｄｄは、楕円曲線の加算であり、Ａｄｄ（Ｒ，Ｐ＿（ｗ＿ｃ））は、ＲとＰ＿（ｗ＿ｃ）とに対する楕円曲線の加算の結果である。
【００２３】
ステップＳ９０５：Ｒを出力し終了。
上記単純電力攻撃に対する対策方法では、Ｄは計算結果に関係しないダミーの点であり、ステップＳ９０４２及びステップＳ９０４７で実行するＱの演算はダミー演算となる。ステップＳ９０４２ではｗ＿ｃ＝０の場合は、３回のダミーの楕円曲線２倍算と１回のダミーの楕円曲線加算を実行する。ｗ＿ｃ＝０でない場合においても、ステップＳ９０４６の３回の楕円曲線２倍算、ステップＳ９０４７で１回の楕円曲線加算を実行するため、ｗ＿ｃ＝０の場合と、ｗ＿ｃ≠０の場合で同じ演算を実行していることになる。また、ステップＳ９０４７においてｗ＿ｃ＝０の場合はダミーの加算を実行しており、ｗ＿ｃ≠０の場合と同じ演算を実行していることになる。
【００２４】
したがって、上記単純電力攻撃に対する対策方法では、ｗ＿ｃ＝０の場合も、ｗ＿ｃ≠０の場合と同じ演算を実行するため、電力波形が同じになり、攻撃者がｗ＿ｃ＝０であるか否かの情報を電力波形から知ることができなくなる。
【非特許文献１】Paul C. Kocher, " Timing attacks on implementations ofDiffie-Hellman,RSA,DSS,and Other Systems " ,In Neal Koblitz, editor,CRYPTO'96, LNCS 1109, Springer-Verlag,1996,pp.104-113.
【非特許文献２】P. Kocher,J. Jaffe,and B. Jun," Differential PowerAnalysis" ,Advances in Cryptology -CRYPTO '99,LNCS,1666,Springer-Verlag,1999,pp.388-397.
【非特許文献３】岡本龍明、山本博資、「現代暗号」、産業図書（１９９７年）
【非特許文献４】A. Miyaji,T. Ono and H. Cohen,“Efficient elliptic curveexponentiation",ICICS'97,Springer-Verlag,1999,pp.282-291.
【非特許文献５】I.Blake,G.Seroussi and N.Smart,“Elliptic Curves inCryptography",London Mathematical Society Lecture Note Series265,CAMBRIDGE UNIVERSITY PRESS,1999
【発明の開示】
【発明が解決しようとする課題】
【００２５】
上述した単純電力攻撃に対する対策方法では、Ｐ＿１＝Ｐ以外にＰ＿２，Ｐ＿３，Ｐ＿４の３点をテーブルに格納している。しかしながら、ＩＣカードなどのリソースが限られている状況では、テーブル量を小さくしたいとの要望がある。
本発明は、単純電力解析攻撃に対する耐性は保持しつつ、使用するテーブル量を削減することができる情報セキュリティ装置、楕円曲線演算装置、方法及びコンピュータプログラムを提供することを目的とする。
【課題を解決するための手段】
【００２６】
上記目的を達成するために、本発明は、素数ｐを法とする剰余体Ｆ上で定義された楕円曲線Ｅ上の離散対数問題を根拠として、楕円曲線Ｅ上の点Ｃに、素数ｐ未満の正整数である係数ｋを乗じて点ｋ＊Ｃを算出する楕円曲線演算を用いて、情報を安全又は確実に扱う情報セキュリティ装置であって、楕円曲線Ｅ上の点Ｃを記憶している点記憶手段と、係数ｋの全桁の値を記憶している桁記憶手段と、桁記憶手段から１個の桁の値ｗを取得する取得手段と、取得した前記桁により表現しうる値の種類の数と同数の乗算手段と、取得した前記桁の値ｗに対応する乗算手段を選択する選択手段と、係数ｋの全ての桁について、前記取得手段、前記選択手段及び前記乗算手段に対して、１個の桁の値ｗの取得と、取得した桁の値ｗに対応する乗算手段の選択と、選択された乗算手段による乗算とを繰り返すように制御する繰返制御手段とを備え、各乗算手段は、楕円曲線Ｅ上において、前記点Ｃに取得した前記桁の値ｗを乗じて得られた乗算結果を、当該桁に相応する位置において加算し、取得した前記桁の値ｗが２tで割り切れ、２t+1 で割り切れない条件を満たす非負整数ｔが存在する場合に、当該桁の値ｗに対応する前記乗算手段は、楕円曲線Ｅ上において、点Ｑにｗ／２tを乗じて得られる点の加算又は点Ｑに｜ｗ／２t ｜を乗じて得られる点の減算を含む演算を行うことを特徴とする。
【００２７】
ここで、点記憶手段は、実施の形態の被演算値格納部２２４に相当し、桁記憶手段は、分割情報格納部２２３に相当し、取得手段は、取得部２４１に相当し、選択手段は、選択部２４２に相当し、複数の乗算手段は、それぞれ、Ｗｉｎｄｏｗ演算部２５１〜２５８に相当し、繰返制御手段は、繰返制御部２４３に相当する。また、実施の形態におけるＷｉｎｄｏｗを、ここでは、桁と表現している。
【発明の効果】
【００２８】
この構成によると、当該桁の値ｗに対応する前記乗算手段は、楕円曲線Ｅ上において、点Ｑにｗ／２t を乗じて得られる点の加算又は点Ｑに｜ｗ／２t｜を乗じて得られる点の減算を含む演算を行うので、例えば、各桁のビット長が３である場合に、加算又は減算で用いられる点は、Ｃを除いて、３＊Ｃのみであり、各桁のビット長が４である場合に、加算又は減算で用いられる点は、Ｃを除いて、３＊Ｃ、５＊Ｃ及び７＊Ｃのみである。
【００２９】
従来技術によると、例えば、各桁のビット長が３である場合に、加算又は減算で用いられる点は、Ｃを除いて、２＊Ｃ、３＊Ｃ及び４＊Ｃであり、各桁のビット長が４である場合に、加算又は減算で用いられる点は、点Ｃを除いて、２＊Ｃ、３＊Ｃ、４＊Ｃ、５＊Ｃ、６＊Ｃ、７＊Ｃ及び８＊Ｃである。
このように、本発明によると、従来技術と比較して、加算又は減算において用いられる点を少なくすることができ、使用するテーブル量を削減することができる。
【００３０】
ここで、取得した前記桁は、ｓｗビット長であり、前記非負整数ｔが存在する場合に、前記桁の値ｗに対応する前記乗算手段は、（ｓｗ＋１）回の演算を順次行い、前記複数の演算のうち（ｓｗ−ｔ＋１）番目の演算は、楕円曲線Ｅ上の前記加算又は前記減算であり、他の演算は、楕円曲線Ｅ上の２倍算であるとしてもよい。
この構成によると、従来技術における場合と同じ演算結果が得られ、かつ、加算又は減算において用いる点の数を少なくすることができる。
【００３１】
ここで、前記情報セキュリティ装置は、さらに、点Ｑを初期の加算点とし、加算点へ２＊Ｑを加算して新たな加算点を得ることを繰り返すことにより、点Ｑを除く２sw-1個の加算点を生成するテーブル生成手段を含み、非負整数ｔが存在する場合に、当該桁の値ｗに対応する前記乗算手段は、点Ｑにｗ／２t 又は｜ｗ／２t｜を乗じて得られる点として、前記テーブル生成手段により生成された前記加算点を用いるとしてもよい。
【００３２】
この構成によると、テーブル生成手段により２sw-1 個の加算点が算出されているので、乗算手段における演算回数を減らすことができる。
ここで、取得した前記桁は、３ビット長であり、前記桁の値ｗが２である場合に、対応する乗算手段は、楕円曲線Ｅ上の２倍算、２倍算、加算及び２倍算をこの順序で行い、前記加算は、前記点Ｃを加える演算であり、前記桁の値ｗが４である場合に、対応する乗算手段は、楕円曲線Ｅ上の２倍算、加算、２倍算及び２倍算をこの順序で行い、前記加算は、前記点Ｃを加える演算であり、前記桁の値ｗが−２である場合に、対応する乗算手段は、楕円曲線Ｅ上の２倍算、２倍算、減算及び２倍算をこの順序で行い、前記減算は、前記点Ｃを減ずる演算であるとしてもよい。
【００３３】
この構成によると、加算又は減算で用いられる点は、Ｃを除いて、３＊Ｃのみであり、従来技術と比較して、使用するテーブル量を削減することができる。
ここで、取得した前記桁は、４ビット長であり、前記桁の値ｗが２である場合に、対応する乗算手段は、楕円曲線Ｅ上の２倍算、２倍算、２倍算、加算及び２倍算をこの順序で行い、前記加算は、前記点Ｃを加える演算であり、前記桁の値ｗが４である場合に、対応する乗算手段は、楕円曲線Ｅ上の２倍算、２倍算、加算、２倍算及び２倍算をこの順序で行い、前記加算は、前記点Ｃを加える演算であり、前記桁の値ｗが６である場合に、対応する乗算手段は、楕円曲線Ｅ上の２倍算、２倍算、２倍算、加算及び２倍算をこの順序で行い、前記加算は、点３＊Ｃを加える演算であり、前記桁の値ｗが８である場合に、対応する乗算手段は、楕円曲線Ｅ上の２倍算、加算、２倍算、２倍算及び２倍算をこの順序で行い、前記加算は、前記点Ｃを加える演算であり、前記桁の値ｗが−６である場合に、対応する乗算手段は、楕円曲線Ｅ上の２倍算、２倍算、２倍算、減算及び２倍算をこの順序で行い、前記減算は、点３＊Ｃを減ずる演算であり、前記桁の値ｗが−４である場合に、対応する乗算手段は、楕円曲線Ｅ上の２倍算、２倍算、減算、２倍算及び２倍算をこの順序で行い、前記減算は、点Ｃを減ずる演算であり、前記桁の値ｗが−２である場合に、対応する乗算手段は、楕円曲線Ｅ上の２倍算、２倍算、２倍算、減算及び２倍算をこの順序で行い、前記減算は、点Ｃを減ずる演算であるとしてもよい。
【００３４】
この構成によると、加算又は減算で用いられる点は、Ｃを除いて、３＊Ｃ、５＊Ｃ及び７＊Ｃのみであり、従来技術と比較して、使用するテーブル量を削減することができる。
ここで、前記加算又は前記減算及び前記２倍算は、それぞれ、同じ順序で同じ種類の演算を実行するように、ダミーの演算を含むとしてもよい。
この構成によると、加算又は減算及び２倍算は、それぞれ、同じ順序で同じ種類の演算を実行するので、電力波形を手がかりにして、解析しようとしても、加算又は減算及び２倍算において、同様の電力波形が出力され、２者を明確に区別することが困難となる。こうして、電力解析攻撃に対抗することができる。
【００３５】
ここで、取得した前記桁がａビット長である場合に、前記非負整数ｔが存在するときに、前記桁の値ｗに対応する前記乗算手段は、（ａ＋１）回の演算を順次行い、前記複数の演算のうち（ａ−ｔ＋１）番目の演算は、楕円曲線Ｅ上の前記加算又は前記減算であり、他の演算は、楕円曲線Ｅ上の２倍算であり、取得した前記桁がｂビット長である場合に、前記非負整数ｔが存在するときに、前記桁の値ｗに対応する前記乗算手段は、（ｂ＋１）回の演算を順次行い、前記複数の演算のうち（ｂ−ｔ＋１）番目の演算は、楕円曲線Ｅ上の前記加算又は前記減算であり、他の演算は、楕円曲線Ｅ上の２倍算であるとしてもよい。
【００３６】
この構成によると、異なるビット長の桁が混在すると想定する場合においても演算を行うことができる。
ここで、前記情報セキュリティ装置は、暗号化装置であって、点ｋ＊Ｃを算出する楕円曲線演算を用いて、情報を暗号化するとしてもよい。
この構成によると、情報の暗号化の際の電力解析攻撃に対抗することができる。
【００３７】
ここで、前記情報セキュリティ装置は、復号装置であって、点ｋ＊Ｃを算出する楕円曲線演算を用いて、暗号化された情報を復号するとしてもよい。
この構成によると、暗号化された情報を復号する際の電力解析攻撃に対抗することができる。
ここで、前記情報セキュリティ装置は、デジタル署名生成装置であって、点ｋ＊Ｃを算出する楕円曲線演算を用いて、情報にデジタル署名を施すとしてもよい。
【００３８】
この構成によると、デジタル署名の生成の際の電力解析攻撃に対抗することができる。
ここで、前記情報セキュリティ装置は、デジタル署名検証装置であって、点ｋ＊Ｃを算出する楕円曲線演算を用いて、デジタル署名の検証を行うとしてもよい。
この構成によると、デジタル署名の検証の際の電力解析攻撃に対抗することができる。
ここで、前記情報セキュリティ装置は、鍵共有装置であって、点ｋ＊Ｃを算出する楕円曲線演算を用いて、他の鍵共有装置との間で、共有する鍵を生成するとしてもよい。
【００３９】
この構成によると、鍵共有の際の電力解析攻撃に対抗することができる。
また、本発明は、素数ｐを法とする剰余体Ｆ上で定義された楕円曲線Ｅ上の離散対数問題を根拠として、楕円曲線Ｅ上の点Ｃに、素数ｐ未満の正整数である係数ｋを乗じて点ｋ＊Ｃを算出する楕円曲線演算装置であって、楕円曲線Ｅ上の点Ｃを記憶している点記憶手段と、係数ｋの全桁の値を記憶している桁記憶手段と、桁記憶手段から１個の桁の値ｗを取得する取得手段と、取得した前記桁により表現しうる値の種類の数と同数の乗算手段と、取得した前記桁の値ｗに対応する乗算手段を選択する選択手段と、係数ｋの全ての桁について、前記取得手段、前記選択手段及び前記乗算手段に対して、１個の桁の値ｗの取得と、取得した桁の値ｗに対応する乗算手段の選択と、選択された乗算手段による乗算とを繰り返すように制御する繰返制御手段とを備え、各乗算手段は、楕円曲線Ｅ上において、前記点Ｃに取得した前記桁の値ｗを乗じて得られた乗算結果を、当該桁に相応する位置において加算し、取得した前記桁の値ｗが２tで割り切れ、２t+1 で割り切れない条件を満たす非負整数ｔが存在する場合に、当該桁の値ｗに対応する前記乗算手段は、楕円曲線Ｅ上において、点Ｑにｗ／２tを乗じて得られる点の加算又は点Ｑに｜ｗ／２t ｜を乗じて得られる点の減算を含む演算を行うことを特徴とする。
【００４０】
この構成によると、従来技術と比較して、加算において用いられる点を少なくすることができ、使用するテーブル量を削減することができる。
以上説明したように、本発明の情報セキュリティ装置及び楕円曲線演算装置によると、単純電力解析攻撃の耐性を保持しつつ、従来技術と比較して、使用するテーブル量を削減することができるという優れた効果を奏する。
【発明を実施するための最良の形態】
【００４１】
１．実施の形態１
本発明に係る１の実施の形態としてのポイント発行システム１０について説明する。
１．１  ポイント発行システム１０の構成
ポイント発行システム１０は、図１に示すように、ＩＣカード１００及びポイント発行装置２００から構成されている。
【００４２】
ポイント発行装置２００の操作者によりＩＣカード１００がポイント発行装置２００に装着され、ポイント発行装置２００は、ポイントを生成し、生成したポイントに暗号化アルゴリズムを施して暗号化ポイントを生成し、生成した暗号化ポイントをＩＣカード１００へ送信する。
ここで、ポイントは、利用者が商品を購入したりサービスの提供を受けた場合に、販売者やサービス提供者から受け取る特典情報であり、次に利用者が商品を購入したりサービスの提供を受ける際に、販売者やサービス提供者への対価の支払いの一部又は全部として利用される。
【００４３】
ＩＣカード１００は、暗号化ポイントを受け取り、受け取った暗号化ポイントに前記暗号化に対応する復号アルゴリズムを施して、復号ポイントを生成し、生成した復号ポイントを内部に記憶する。
ポイント発行装置２００及びＩＣカード１００は、それぞれ、素数ｐを法とする剰余体Ｆ上で定義された楕円曲線Ｅ上の離散対数問題を根拠として、楕円曲線Ｅ上の点Ｃに、素数ｐ未満の正整数である係数ｋを乗じて点ｋ＊Ｃを算出する楕円曲線演算を用いて、情報を安全に扱う情報セキュリティ装置である。
【００４４】
ここで、情報を安全に扱うとは、例えば、情報を二者間で通信する場合において、当該情報が第三者に知られないようにすることを言い、この通信は、秘密の通信とも呼ばれる。
１．２  公開鍵暗号方式と離散対数問題
本実施の形態では、上記の暗号アルゴリズム及び復号アルゴリズムは、楕円曲線上の演算を用いる公開鍵暗号方式によるものである。
【００４５】
公開鍵暗号方式を用いる秘密通信では、暗号化鍵と復号化鍵とが異なり、復号化鍵は秘密にするが、暗号化鍵は公開する。
この公開鍵暗号方式の安全性の根拠として、楕円曲線上において定義される離散対数問題が用いられる。なお、離散対数問題については、ニイルコブリッツ著  ”ア  コウス  イン  ナンバア  セオリイ  アンド  クリプトグラヒイ”(NealKoblitz , " A Course in Number theory and Cryptography",Springer-Verlag,1987)に詳しく述べられている。
【００４６】
次に、楕円曲線上の離散対数問題について、以下に述べる。
楕円曲線上の離散対数問題とは、
Ｅ（ＧＦ（ｐ））を有限体ＧＦ（ｐ）上で定義された楕円曲線とし、楕円曲線Ｅの位数が大きな素数で割り切れる場合に、楕円曲線Ｅに含まれる元Ｇをベースポイントとする。このとき、楕円曲線Ｅに含まれる与えられた元Ｙに対して、
Ｙ＝ｘ＊Ｇ
となる整数ｘが存在するならば、ｘを求めよ、という問題である。
【００４７】
ここで、ｐは素数、ＧＦ（ｐ）はｐ個の元を持つ有限体である。また、この明細書において、記号＊は、楕円曲線に含まれる元を複数個加算する演算を示し、ｘ＊Ｇは、次式に示すように、楕円曲線に含まれる元Ｇをｘ個加算することを意味する。
ｘ＊Ｇ＝Ｇ＋Ｇ＋Ｇ＋・・・＋Ｇ
離散対数問題を公開鍵暗号の安全性の根拠とするのは、多くの元を有する有限体ＧＦ（ｐ）に対して、上記問題は極めて難しいからである。
【００４８】
１．３  ポイント発行装置２００の構成
ポイント発行装置２００は、図１に示すように、公開鍵記憶部２０１、暗号処理部２０２、通信部２０３、制御部２０４、情報記憶部２０５、入力受付部２０６、表示部２０７及び楕円曲線演算部２０８から構成されている。
また、楕円曲線演算部２０８は、図２に示すように、入力部２３０、べき倍係数格納部２２１、分割情報生成部２２２、分割情報格納部２２３、被演算値格納部２２４、テーブル生成部２２５、楕円曲線加算部２２６、楕円曲線２倍算部２２７、テーブル格納部２２８、スカラ倍演算部２２９及び出力部２３１から構成されている。
【００４９】
ポイント発行装置２００は、ポイントを生成し、生成したポイントを暗号化してＩＣカード１００に書き込む装置であるとともに、商品の販売の際に、販売額を計算し、計算した販売額を表示し、レシートを印刷し、生成した前記ポイントを内部に記憶し、利用者から支払われる代金の保管などを行う金銭レジスタ装置でもある。
ポイント発行装置２００は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレィユニット、キーボードなどから構成されるコンピュータシステムである。前記ＲＡＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、ポイント発行装置２００は、その一部の機能を達成する。
【００５０】
（１）情報記憶部２０５及び公開鍵記憶部２０１
情報記憶部２０５は、素数ｐ、素数ｐを法とする剰余体Ｆｐ上で定義された楕円曲線Ｅ（Ｆｐ）上のベースポイントＢ及び楕円曲線Ｅ（Ｆｐ）の係数を記憶している。また、生成されたポイントＰｍを記憶するための領域を備えている。
前記楕円曲線Ｅ（Ｆｐ）は、一例として、ｙ2＝ｘ3＋ａ×ｘ＋ｂであり、前記係数は、ａ及びｂである。
【００５１】
公開鍵記憶部２０１は、後述する秘密鍵（私有鍵）ｋｓに対応して生成された公開鍵Ｋｐを記憶している。ここで、公開鍵Ｋｐは、ＩＣカード１００又は鍵管理装置により、以下に示す式により算出されたものである。
公開鍵Ｋｐ＝秘密鍵ｋｓ＊ベースポイントＢ
（２）制御部２０４
制御部２０４は、前記特典情報としてのポイントＰｍを生成し、生成したポイントＰｍを情報記憶部２０５に書き込む。次に、暗号処理部２０２に対して、ポイントＰｍを暗号化してＩＣカード１００へ送信することを示す指示を出力する。
【００５２】
（３）通信部２０３、入力受付部２０６及び表示部２０７
通信部２０３は、暗号処理部２０２又は制御部２０４の制御の基に、ＩＣカード１００との間で、情報の送受信を行う。
入力受付部２０６は、ポイント発行装置２００の操作者からの情報又は指示の入力を受け付け、入力を受け付けた情報又は指示を制御部２０４へ出力する。
【００５３】
表示部２０７は、制御部２０４の制御により、様々な情報を表示する。
（４）暗号処理部２０２
暗号処理部２０２は、制御部２０４から、ポイントＰｍを暗号化してＩＣカード１００へ送信することを示す指示を受け取る。
前記指示を受け取ると、暗号処理部２０２は、乱数ｒを生成し、ベースポイントＢを情報記憶部２０５から読み出し、次に、生成した乱数ｒをべき倍係数ｋとして、楕円曲線演算部２０８の入力部２３０へ出力し、読み出したベースポイントＢを被べき倍点Ｃとして、入力部２３０へ出力する。次に、楕円曲線演算部２０８の出力部２３１から、演算結果としてべき倍点ｋ＊Ｃ＝ｒ＊Ｂを受け取り、第１暗号文ｓ１＝べき倍点ｒ＊Ｂとする。
【００５４】
次に、暗号処理部２０２は、公開鍵記憶部２０１から公開鍵Ｋｐを読み出し、次に、生成した乱数ｒをべき倍係数ｋとして、入力部２３０へ出力し、読み出した公開鍵ｋｐを被べき倍点Ｃとして、入力部２３０へ出力する。次に、出力部２３１から、演算結果としてべき倍点ｋ＊Ｃ＝ｒ＊Ｋｐを受け取る。
次に、暗号処理部２０２は、情報記憶部２０５からポイントＰｍを読み出し、読み出したポイントＰｍと受け取ったべき倍点ｒ＊Ｋｐのｘ座標値とに排他的論理和を施して、第２暗号文ｓ２＝ポイントＰｍ  xor  （べき倍点ｒ＊Ｋｐのｘ座標値）を生成する。ここで、「xor」は、排他的論理和を示す演算子である。
【００５５】
次に、暗号処理部２０２は、生成した第１暗号文ｓ１及び第２暗号文ｓ２を通信部２０３を介して、ＩＣカード１００へ送信する。
（５）楕円曲線演算部２０８
楕円曲線演算部２０８は、上述したように、入力部２３０、べき倍係数格納部２２１、分割情報生成部２２２、分割情報格納部２２３、被演算値格納部２２４、テーブル生成部２２５、楕円曲線加算部２２６、楕円曲線２倍算部２２７、テーブル格納部２２８、スカラ倍演算部２２９及び出力部２３１から構成されている。
【００５６】
（５−１）べき倍係数格納部２２１及び被演算値格納部２２４
べき倍係数格納部２２１は、ただ１個のべき倍係数ｋを記憶するための領域を備えている。べき倍係数ｋは、スカラであり、べき倍係数ｋのビット数は、ｌｅｎであるとする。
また、被演算値格納部２２４は、ただ１個の被べき倍点Ｇを記憶するための領域を備えている。被べき倍点Ｇは、楕円曲線上の点である。
【００５７】
（５−２）入力部２３０及び出力部２３１
入力部２３０は、暗号処理部２０２からべき倍係数ｋを受け取り、べき倍係数格納部２２１に既にべき倍係数が記憶されている場合には、受け取ったべき倍係数ｋをべき倍係数格納部２２１において上書きし、べき倍係数格納部２２１にべき倍係数が記憶されていない場合には、受け取ったべき倍係数ｋをべき倍係数格納部２２１に書き込む。
【００５８】
また、入力部２３０は、暗号処理部２０２から被べき倍点Ｃを受け取り、被演算値格納部２２４に既に被べき倍点が記憶されている場合には、受け取った被べき倍点Ｃを被演算値格納部２２４において上書きし、被演算値格納部２２４に被べき倍点が記憶されていない場合には、受け取った被べき倍点Ｃを被演算値格納部２２４に書き込む。
出力部２３１は、スカラ倍演算部２２９からべき倍点ｋ＊Ｃを受け取り、受け取ったべき倍点ｋ＊Ｃを暗号処理部２０２へ出力する。
【００５９】
（５−３）分割情報格納部２２３
分割情報格納部２２３は、後述する（ｂ＋１）個の整数ｗ＿ｉ（ｉ＝１、２、３、・・・、ｂ＋１）からなる整数列｛ｗ＿ｉ｝を記憶するための領域を備えている。
（５−４）分割情報生成部２２２
分割情報生成部２２２は、べき倍係数格納部２２１からべき倍係数ｋを読み出し、以下に示すようにして、読み出したべき倍係数ｋから分割情報である整数ｗ＿ｉ（ｉ＝１、２、３、・・・、ｂ＋１）からなる整数列｛ｗ＿ｉ｝を生成する。
【００６０】
ここで、ｗ＿ｉは、ｓｗビットの符号付整数値である。ｓｗは、符号付Ｗｉｎｄｏｗ法によるＷｉｎｄｏｗの幅であり、一例として、ｓｗ＝３である。この場合、ｗ＿ｉは「−３」、「−２」、「−１」、「０」、「１」、「２」、「３」及び「４」のいずれかの値を取る。ｂは、「（ｌｅｎ／ｓｗ以上の最も小さい整数）−１」であり、ｌｅｎは、後述する変数ｖのビット数であり、「×」は、整数の乗算を示す演算子であり、「ｘ＾ｙ」は、ｘのｙ乗を示す演算である。
【００６１】
例えば、ｌｅｎ＝５２の場合は、ｂ＝１８−１＝１７である。なお、以下では、一例として、ｓｗ＝３としているが、ｓｗは、「２」でもよいし、「４」以上でもよい。
分割情報生成部２２２の動作について、図３に示すフローチャートを用いて説明する。
分割情報生成部２２２は、べき倍係数ｋを変数ｖに代入し（ｖ←ｋｓ）、ｖ＝ｖ＿０＋ｖ＿１×２＾ｓｗ＋ｖ＿２×２＾（２×ｓｗ）＋・・・＋ｖ＿ｂ×２＾（ｂ×ｓｗ）となるように、ｖ＿０，ｖ＿１，ｖ＿２，・・・，ｖ＿ｂをとる。さらにｖ＿（ｂ＋１）←０とする（ステップＳ１３１）。ここで、ｖ＿ｉ（ｉ＝０、１、２、・・・、ｂ）は、ｓｗビットである。
【００６２】
次に、分割情報生成部２２２は、カウンタ変数ｃに０を代入する（ｃ←０）（ステップＳ１３２）。
次に、分割情報生成部２２２は、ｖ＿ｃ＞２＾（ｓｗ−１）であるか判定し、ｖ＿ｃ＞２＾（ｓｗ−１）である場合（ステップＳ１３３でＹＥＳ）、ｗ＿ｃ←ｖ＿ｃ−２＾３及びｖ＿（ｃ＋１）←ｖ＿（ｃ＋１）＋１を算出する（ステップＳ１３４）。ｖ＿ｃ≦２＾（ｓｗ−１）である場合（ステップＳ１３３でＮＯ）、ｗ＿ｃへｖ＿ｃを代入する（ｗ＿ｃ←ｖ＿ｃ）（ステップＳ１３５）。
【００６３】
次に、分割情報生成部２２２は、ｃ←ｃ＋１を算出する（ステップＳ１３６）。
次に、分割情報生成部２２２は、ｃ＞ｂ＋１であるか否かを判定し、ｃ＞ｂ＋１である場合（ステップＳ１３７でＹＥＳ）、整数列｛ｗ＿ｉ｝を分割情報として分割情報格納部２２３に格納し（ステップＳ１３８）、分割情報の生成の処理を終了する。ｃ≦ｂ＋１である場合（ステップＳ１３７でＮＯ）、ステップＳ１３３へ戻って処理を繰り返す。
【００６４】
（５−５）楕円曲線加算部２２６及び楕円曲線２倍算部２２７
楕円曲線加算部２２６は、テーブル生成部２２５又はスカラ倍演算部２２９から、楕円曲線上の２点Ｐ１＝（Ｘ１，Ｙ１，Ｚ１）及びＰ２＝（Ｘ２，Ｙ２，Ｚ２）並びにこれらの点の加算の指示を受け取り、受け取ったＰ１＝（Ｘ１，Ｙ１，Ｚ１）及びＰ２＝（Ｘ２，Ｙ２，Ｚ２）に対して、以下に示すようにして、Ｐ１とＰ２とを楕円曲線上で加算して点Ｐ３＝Ｐ１＋Ｐ２＝（Ｘ３，Ｙ３，Ｚ３）を計算し、次に、計算した点Ｐ３をテーブル生成部２２５又はスカラ倍演算部２２９へ出力する。
【００６５】
また、楕円曲線２倍算部２２７は、テーブル生成部２２５又はスカラ倍演算部２２９から、楕円曲線上の点Ｐ１＝（Ｘ１，Ｙ１，Ｚ１）及び点Ｐ１の２倍算の指示を受け取り、受け取った点Ｐ１＝（Ｘ１，Ｙ１，Ｚ１）に対して、以下に示すようにして、楕円曲線上で点Ｐ１に２倍算を施して、点Ｐ１の２倍点である点Ｐ４＝２＊Ｐ１＝（Ｘ４，Ｙ４，Ｚ４）を計算し、次に、計算した点Ｐ４をテーブル生成部２２５又はスカラ倍演算部２２９へ出力する。
【００６６】
（楕円曲線加算部２２６による加算の詳細及び楕円曲線２倍算部２２７による２倍算の詳細）
本実施の形態では、楕円曲線加算部２２６及び楕円曲線２倍算部２２７において使用される演算及びその順序が同じになるように、ダミー演算が追加される。
以下では、ダミー演算が「ダミー演算である」と明確に分かるようにするため、ダミー演算を結果の代入先を変数Ｄにより示す。なお、本実施の形態で使用する楕円曲線加算及び楕円曲線２倍算はJacobian座標に対するものである。Jacobian座標については非特許文献４に詳しく述べられている。
【００６７】
楕円曲線加算部２２６及び楕円曲線２倍算部２２７の詳細の演算について説明する前に、使用される演算関数を以下に定義する。
・Ｓｑｒ（Ｘ）：Ｘの２乗算を示す。
・Ｍｕｌ（Ｘ，Ｙ）：ＸとＹの乗算を示す。なお、Ｘ＝Ｙの場合においても、Ｍｕｌ（Ｘ,Ｙ）と記載している場合は、Ｓｑｒ（Ｘ）を用いて２乗算を行うのではなく、同じＸの乗算として計算を行う。
【００６８】
・Ｍｕｌ２（Ｘ）：Ｘと２との乗算を示す。
・Ｍｕｌ３（Ｘ）：Ｘと３との乗算を示す。
・Ｍｕｌ４（Ｘ）：Ｘと４との乗算を示す。
・Ｍｕｌ８（Ｘ）：Ｘと８との乗算を示す。
・Ｓｕｂ（Ｘ，Ｙ）ＸからＹを引く減算を示す。
【００６９】
（楕円曲線加算部２２６による加算の動作）
以下に、楕円曲線加算部２２６による加算の動作を、図４及び図５に示すフローチャートを用いて説明する。
楕円曲線加算部２２６は、以下に示すステップに従って、加算を行う。
Ｚ２２←Ｓｑｒ（Ｚ２）              （ステップＳ４０１）、
Ｄ←Ｍｕｌ４（Ｘ１）                （ステップＳ４０２）、
Ｕ１←Ｍｕｌ（Ｘ１，Ｚ２２）        （ステップＳ４０３）、
Ｚ１２←Ｓｑｒ（Ｚ１）              （ステップＳ４０４）、
Ｄ←Ｍｕｌ２（Ｙ１）                （ステップＳ４０５）、
Ｚ１３←Ｍｕｌ（Ｚ２２，Ｚ１）      （ステップＳ４０６）、
Ｚ２３←Ｍｕｌ（Ｚ２２，Ｚ２）      （ステップＳ４０７）、
Ｕ２←Ｍｕｌ（Ｘ２，Ｚ１２）        （ステップＳ４０８）、
Ｓ１←Ｍｕｌ（Ｙ１，Ｚ２３）        （ステップＳ４０９）、
Ｓ２←Ｍｕｌ（Ｙ２，Ｚ１３）        （ステップＳ４１０）、
Ｄ←Ｍｕｌ３（Ｚ１２）              （ステップＳ４１１）、
Ｈ←Ｓｕｂ（Ｕ２，Ｕ１）            （ステップＳ４１２）、
Ｈ２←Ｓｑｒ（Ｈ）                  （ステップＳ４１３）、
Ｕ１Ｈ←Ｍｕｌ（Ｕ１，Ｈ２）        （ステップＳ４１４）、
Ｕ２Ｈ←Ｍｕｌ２（Ｕ１Ｈ）          （ステップＳ４１５）、
ｒ←Ｓｕｂ（Ｓ２，Ｓ１）            （ステップＳ４１６）、
ｒ２←Ｓｑｒ（ｒ）                  （ステップＳ４１７）、
Ｄ←Ｍｕｌ８（ｒ）                  （ステップＳ４１８）、
ＵＨＸ←Ｓｕｂ（Ｕ１Ｈ，Ｘ３）      （ステップＳ４１９）、
Ｈ３←Ｍｕｌ（Ｈ２，Ｈ）            （ステップＳ４２０）、
Ｓ１Ｈ３←Ｍｕｌ（Ｓ１，Ｈ３）      （ステップＳ４２１）、
ｒＨ←Ｓｕｂ（ｒ２，Ｈ３）          （ステップＳ４２２）、
Ｘ３←Ｓｕｂ（ｒＨ，Ｕ２Ｈ）        （ステップＳ４２３）、
Ｚ１Ｚ２←Ｍｕｌ（Ｚ１，Ｚ２）      （ステップＳ４２４）、
Ｚ３←Ｍｕｌ（Ｚ１Ｚ２，Ｈ）        （ステップＳ４２５）、
ｒＵ←Ｍｕｌ（ｒ，ＵＨＸ）          （ステップＳ４２６）、
Ｙ３←Ｓｕｂ（ｒＵ，Ｓ１Ｈ３）      （ステップＳ４２７）。
【００７０】
（楕円曲線２倍算部２２７による２倍算の動作）
以下に、楕円曲線２倍算部２２７による２倍算の動作を、図４及び図５に示すフローチャートを用いて説明する。
楕円曲線加算部２２６は、以下に示すステップに従って、２倍算を行う。
Ｙ１２←Ｓｑｒ（Ｙ１）                （ステップＳ５０１）、  
Ｘ４１←Ｍｕｌ４（Ｘ１）              （ステップＳ５０２）、  
Ｓ←Ｍｕｌ（Ｘ４１，Ｙ１２）          （ステップＳ５０３）、  
Ｘ１２←Ｓｑｒ（Ｘ１）                （ステップＳ５０４）、  
Ｙ２１←Ｍｕｌ２（Ｙ１）              （ステップＳ５０５）、  
Ｚ４←Ｍｕｌ（Ｙ２１，Ｚ１）          （ステップＳ５０６）、  
Ｚ１２←Ｍｕｌ（Ｚ１，Ｚ１）          （ステップＳ５０７）、  
Ｚ１４←Ｍｕｌ（Ｚ１２，Ｚ１２）      （ステップＳ５０８）、  
Ｄ←Ｍｕｌ（Ｙ１，Ｚ１２）            （ステップＳ５０９）、  
ａＺ１４←Ｍｕｌ（（−ａ），Ｚ１４）  （ステップＳ５１０）、  
Ｘ３２←Ｍｕｌ３（Ｘ１２）            （ステップＳ５１１）、  
Ｍ←Ｓｕｂ（Ｘ３２，ａＺ１４）        （ステップＳ５１２）、  
Ｍ２←Ｓｑｒ（Ｍ）                    （ステップＳ５１３）、  
Ｄ←Ｍｕｌ（Ｓ，Ｍ２）                （ステップＳ５１４）、  
Ｓ２←Ｍｕｌ２（Ｓ）                  （ステップＳ５１５）、  
Ｘ４←Ｓｕｂ（Ｍ２，Ｓ２）            （ステップＳ５１６）、  
Ｙ１４←Ｓｑｒ（Ｙ１２）              （ステップＳ５１７）、  
Ｙ８１４←Ｍｕｌ８（Ｙ１４）          （ステップＳ５１８）、  
ＳＴ←Ｓｕｂ（Ｓ，Ｘ４）              （ステップＳ５１９）、  
ＭＳＴ←Ｍｕｌ（Ｍ，ＳＴ）            （ステップＳ５２０）、  
Ｄ←Ｍｕｌ（Ｄ，ＭＳＴ）              （ステップＳ５２１）、  
Ｙ４←Ｓｕｂ（ＭＳＴ，Ｙ８１４）      （ステップＳ５２２）、  
Ｄ←Ｓｕｂ（Ｙ４，Ｓ２）              （ステップＳ５２３）、  
Ｄ←Ｍｕｌ（Ｚ１，Ｚ１２）            （ステップＳ５２４）、  
Ｄ←Ｍｕｌ（Ｄ，Ｍ）                  （ステップＳ５２５）、  
Ｄ←Ｍｕｌ（Ｘ４，ＳＴ）              （ステップＳ５２６）、  
Ｄ←Ｓｕｂ（Ｄ，Ｙ４）                （ステップＳ５２７）。  
【００７１】
なお、ステップＳ５１０で現れる（−ａ）は、楕円曲線の方程式をｙ＾２＝ｘ＾３＋ａ×ｘ＋ｂとしたときのパラメータａの負の値であり、予め計算しておく。
図４及び図５に示すように、楕円曲線加算部２２６と楕円曲線２倍算部２２７とは、同じ順序で同じ演算を実行していることがわかる。
（５−６）テーブル格納部２２８
テーブル格納部２２８は、テーブル生成部２２５により生成された楕円曲線上の点を１個以上格納するための領域を備えている。
【００７２】
（５−７）テーブル生成部２２５
テーブル生成部２２５は、以下に説明するように、楕円曲線上の点からなるテーブル｛Ｐ＿ｉ｝を生成し、生成したテーブル｛Ｐ＿ｉ｝をテーブル格納部２２８へ格納する。
ここで、テーブル｛Ｐ＿ｉ｝は、１個以上の楕円曲線上の点Ｐ＿ｉ（ｉ＝１、２、３、・・・）を含む。
【００７３】
テーブル生成部２２５によるテーブル｛Ｐ＿ｉ｝の生成の動作について、図６に示すフローチャートを用いて、説明する。
テーブル生成部２２５は、被演算値格納部２２４から、被べき倍点Ｃを読み出し、テーブル生成部２２５は、Ｐ＿１←Ｃ及びＱ←ＥＣＤ（Ｃ）を演算する（ステップＳ１４１）。
【００７４】
ここで、ＥＣＤは、楕円曲線上の２倍算を示し、楕円曲線２倍算部２２７を用いて計算することを示している。例えば、ＥＣＤ（Ａ）は、楕円曲線上の点Ａに対して算出された２倍算の演算結果を示し、ＥＣＤ（Ａ）＝２＊Ａである。テーブル生成部２２５は、楕円曲線２倍算部２２７に対して、楕円曲線上の点Ｃ及び２倍算の指示を出力し、楕円曲線２倍算部２２７から２倍算の演算結果を受け取る。
【００７５】
次に、テーブル生成部２２５は、カウンタ変数ｉに対して、ｉ←１を算出する（ステップＳ１４２）。
次に、テーブル生成部２２５は、ｉ←ｉ＋１を算出し（ステップＳ１４３）、２sw-2 を算出し、ｉ＞２sw-2 であるか否かを判断する。ｉ＞２sw-2である場合には（ステップＳ１４４）、テーブル生成の処理を終了する。
【００７６】
ｉ＞２sw-2 でない場合には（ステップＳ１４４）、テーブル生成部２２５は、Ｐ＿ｉ←ＥＣＡ（Ｐ＿（ｉ−１），Ｑ）を算出する。つまり、ＥＣＡ（Ｐ＿（ｉ−１），Ｑ）＝Ｐ＿（ｉ−１）＋Ｑを算出する（ステップＳ１４５）。
ここで、ＥＣＡは、楕円曲線上の加算を示し、楕円曲線加算部２２６を用いて計算することを示している。例えば、ＥＣＡ（Ａ，Ｂ）は、楕円曲線上の点Ａ及び点Ｂに対して算出された加算の演算結果を示し、ＥＣＤ（Ａ）＝Ａ＋Ｂである。テーブル生成部２２５は、楕円曲線加算部２２６に対して、楕円曲線上の点Ａ及び点Ｂ並びに加算の指示を出力し、楕円曲線加算部２２６から加算の演算結果を受け取る。
【００７７】
次に、テーブル生成部２２５は、Ｐ＿ｉをテーブル格納部２２８に格納し（ステップＳ１４６）、ステップＳ１４３へ戻って処理を繰り返す。
上記の処理より、Ｐ＿ｉ＝（２×ｉ−１）＊Ｃとなっていることがわかる。
ｓｗ＝３、４及び５の場合において、テーブル生成部２２５により生成されるテーブル｛Ｐ＿ｉ｝の一例を、それぞれ、図７、図８及び図９に示す。
【００７８】
ｓｗ＝３の場合には、図７に示すように、テーブル３１１｛Ｐ＿ｉ｝＝｛３Ｃ｝である。また、ｓｗ＝４の場合には、図８に示すように、テーブル３１２｛Ｐ＿ｉ｝＝｛３Ｃ、５Ｃ、７Ｃ｝である。さらに、ｓｗ＝５の場合には、図９に示すように、テーブル３１３｛Ｐ＿ｉ｝＝｛３Ｃ、５Ｃ、７Ｃ、９Ｃ、１１Ｃ、１３Ｃ、１５Ｃ｝である。
（５−８）スカラ倍演算部２２９
スカラ倍演算部２２９は、分割情報格納部２２３に格納されている整数列｛ｗ＿ｉ｝とテーブル格納部２２８に格納されているテーブル｛Ｐ＿ｉ｝を用いて、以下に示すようにして、べき倍係数ｋに対して、ｋ倍した点ｋ＊Ｃを計算する。
【００７９】
スカラ倍演算部２２９は、図１８に示すように、取得部２４１、選択部２４２、繰返制御部２４３、Ｗｉｎｄｏｗ演算部２５１、２５２、２５３、２５４、２５５、２５６、２５７、２５８、初期演算部２４４、レジスタ部２４５及び演算値出力部２４６から構成されている。
スカラ倍演算部２２９による演算の手順について、図１０〜図１１に示すフローチャートを用いて説明する。
【００８０】
なお、下記の説明において、ＥＣＡは、楕円曲線加算部２２６による加算である。スカラ倍演算部２２９は、加算を行う際に、楕円曲線加算部２２６に対して、楕円曲線上の２点及び加算の指示を出力し、楕円曲線加算部２２６から加算の演算結果を受け取る。また、ＥＣＤは、楕円曲線２倍算部２２７による２倍算である。スカラ倍演算部２２９は、２倍算を行う際に、楕円曲線２倍算部２２７に対して、楕円曲線上の１点及び２倍算の指示を出力し、楕円曲線２倍算部２２７から２倍算の演算結果を受け取る。
【００８１】
また、下記においては、一例としてＷｉｎｄｏｗの幅が「３ビット」であるものとして、つまり、ｓｗ＝３であるとして、説明している。
スカラ倍演算部２２９の初期演算部２４４は、ｃ←ｂ＋１を算出する（ステップＳ１５１）。ここで、ｃは、処理回数を計数するカウンタ変数であり、レジスタ部２４５が有するレジスタにより構成されている。ｂは、上述したように、「（ｌｅｎ／ｓｗ以上の最も小さい整数）−１」である。レジスタ部２４５は、また、後述する変数Ｄ及び変数Ｒをそれぞれ構成する２個のレジスタを有している。
【００８２】
次に、スカラ倍演算部２２９の初期演算部２４４は、ｗ＿ｃ＝０であるか否かを判定する。ｗ＿ｃ＝０である場合（ステップＳ１５２）、Ｄ←ＥＣＤ（Ｃ），Ｄ←ＥＣＤ（Ｄ），Ｄ←ＥＣＤ（Ｄ），Ｄ←ＥＣＡ（Ｒ，Ｃ），ｃ←ｃ−１を演算する（ステップＳ１５３）。
次に、取得部２４１は、Ｐ＿（ｗ＿ｃ）を取得し、スカラ倍演算部２２９の初期演算部２４４は、Ｒ←Ｐ＿（ｗ＿ｃ）を演算し（ステップＳ１５４）、繰返制御部２４３は、ｃ←ｃ−１を演算する（ステップＳ１５５）。
【００８３】
次に、スカラ倍演算部２２９の繰返制御部２４３は、ｃ＜０であるか否かを判定し、ｃ＜０である場合は（ステップＳ１５６）、演算値出力部２４６は、Ｒを出力部２３１へ出力し（ステップＳ１５８）、演算処理を終了する。
ｃ≧０である場合は（ステップＳ１５６）、取得部２４１は、Ｐ＿（ｗ＿ｃ）を取得し、スカラ倍演算部２２９の選択部２４２は、ｗ＿ｃの値に応じて（ステップＳ１５７）、以下の処理を行う。
【００８４】
ｗ＿ｃ＝−３の場合（ステップＳ１５７）、選択部２４２は、Ｗｉｎｄｏｗ演算部２５１を選択し、Ｗｉｎｄｏｗ演算部２５１は、Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＡ（Ｒ，−Ｐ＿２）を演算する（ステップＳ１６１）。
ｗ＿ｃ＝−２の場合（ステップＳ１５７）、選択部２４２は、Ｗｉｎｄｏｗ演算部２５２を選択し、Ｗｉｎｄｏｗ演算部２５２は、Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＡ（Ｒ，−Ｐ＿１），Ｒ←ＥＣＤ（Ｒ）を演算する（ステップＳ１６２）。
【００８５】
ｗ＿ｃ＝−１の場合（ステップＳ１５７）、選択部２４２は、Ｗｉｎｄｏｗ演算部２５３を選択し、Ｗｉｎｄｏｗ演算部２５３は、Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＤ（Ｒ，−Ｐ＿１）を演算する（ステップＳ１６３）。
ｗ＿ｃ＝０の場合（ステップＳ１５７）、選択部２４２は、Ｗｉｎｄｏｗ演算部２５４を選択し、Ｗｉｎｄｏｗ演算部２５４は、Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＤ（Ｒ），Ｄ←ＥＣＡ（Ｒ，Ｐ＿１）を演算する（ステップＳ１６４）。
【００８６】
ｗ＿ｃ＝１の場合（ステップＳ１５７）、選択部２４２は、Ｗｉｎｄｏｗ演算部２５５を選択し、Ｗｉｎｄｏｗ演算部２５５は、Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＡ（Ｒ，Ｐ＿１）を演算する（ステップＳ１６５）。
ｗ＿ｃ＝２の場合（ステップＳ１５７）、選択部２４２は、Ｗｉｎｄｏｗ演算部２５６を選択し、Ｗｉｎｄｏｗ演算部２５６は、Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＡ（Ｒ，Ｐ＿１），Ｒ←ＥＣＤ（Ｒ）を演算する（ステップＳ１６６）。
【００８７】
ｗ＿ｃ＝３の場合（ステップＳ１５７）、選択部２４２は、Ｗｉｎｄｏｗ演算部２５７を選択し、Ｗｉｎｄｏｗ演算部２５７は、Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＡ（Ｒ，Ｐ＿２）を演算する（ステップＳ１６７）。
ｗ＿ｃ＝４の場合（ステップＳ１５７）、選択部２４２は、Ｗｉｎｄｏｗ演算部２５８を選択し、Ｗｉｎｄｏｗ演算部２５８は、Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＡ（Ｒ，Ｐ＿１），Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＤ（Ｒ）を演算する（ステップＳ１６８）。
【００８８】
次に、ステップＳ１５５へ戻って処理を繰り返す。
（ステップＳ１６１〜Ｓ１６８における各演算について）
ここで、図１１のステップＳ１６１〜Ｓ１６８における各演算の意味について、図１２に示す演算変換表３２０を用いて説明する。
ここで、ｗ＿ｃの値に応じて、なされる複数の演算を、便宜上、Ｗｉｎｄｏｗ演算と呼ぶこととする。
【００８９】
例えば、ステップＳ１６４において、なされるＲ←ＥＣＤ（Ｒ），Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＤ（Ｒ）及びＤ←ＥＣＡ（Ｒ，Ｐ＿１）が、１個のＷｉｎｄｏｗ演算であり、ステップＳ１６５において、なされるＲ←ＥＣＤ（Ｒ），Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＤ（Ｒ）及びＲ←ＥＣＡ（Ｒ，Ｐ＿１）が、１個のＷｉｎｄｏｗ演算である。
また、Ｗｉｎｄｏｗ演算に含まれるＥＣＡ及びＥＣＤを、便宜上、基本演算と呼ぶ。
【００９０】
演算変換表３２０は、一例としてＷｉｎｄｏｗの幅が「３ビット」である場合において、つまり、ｓｗ＝３である場合において、取り得るｗ＿ｃの値毎に、当該ｗ＿ｃの値と、これに対応する従来のＷｉｎｄｏｗ演算と、これに対応するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算（本発明に関連するＷｉｎｄｏｗ演算）と、スカラ倍演算部２２９によるＷｉｎｄｏｗ演算に含まれる基本演算の演算順序を示す基本演算順序と、Ｗｉｎｄｏｗ演算に含まれる基本演算の個数を示す基本演算回数との関係を示している。
【００９１】
ここで、一例としてＷｉｎｄｏｗの幅は「３ビット」であるので、ｗ＿ｃは、８個の値「０」、「１」、「２」、「３」、「４」、「−３」、「−２」及び「−１」のいずれかをとる。
次に、ｗ＿ｃが各値をとる場合について、従来のＷｉｎｄｏｗ演算、スカラ倍演算部２２９によるＷｉｎｄｏｗ演算、基本演算順序及び基本演算回数について説明する。
【００９２】
（ａ）ｗ＿ｃ＝０の場合
ｗ＿ｃ＝０に対する従来のＷｉｎｄｏｗ演算は、「Ｒ←２3 Ｒ」である。「Ｒ←２3 Ｒ」は、変数Ｒの値を、Ｗｉｎｄｏｗの幅の示すビット（ここでは、３ビット）だけ、上位にシフトすることを示している。
一方、ｗ＿ｃ＝０に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算は、「Ｒ←２3 Ｒ」及び「Ｄ←Ｒ＋Ｃ」である。ここで、「Ｒ←２3Ｒ」については、上述した通りである。また、「Ｄ←Ｒ＋Ｃ」は、ダミーの加算であり、ｗ＿ｃ＝０の場合におけるＷｉｎｄｏｗ演算に含まれる基本演算の種類とその数と、他の場合における（つまり、ｗ＿ｃ≠０の場合における）Ｗｉｎｄｏｗ演算基本に含まれる基本演算の種類とその数とを一致させるためのものである。
【００９３】
ここで、「Ｒ←２3 Ｒ」は、スカラ倍演算部２２９において、Ｒ←２×Ｒ、Ｒ←２×Ｒ、Ｒ←２×Ｒ、により、演算される。
これは、２3 Ｒ＝２×（２×（２×Ｒ））であることによる。
従って、ｗ＿ｃ＝０に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算では、２倍算、２倍算、２倍算、ダミーの加算の順序で、複数の基本演算が行われる。（ステップＳ１６４参照）
このように、ｗ＿ｃ＝０に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算に含まれる基本演算の個数は、「４」である。
【００９４】
（ｂ）ｗ＿ｃ＝１の場合
ｗ＿ｃ＝１に対する従来のＷｉｎｄｏｗ演算は、「Ｒ←２3 Ｒ＋Ｃ」である。「Ｒ←２3 Ｒ＋Ｃ」は、変数Ｒの値を、Ｗｉｎｄｏｗの幅の示すビット（ここでは、３ビット）だけ、上位にシフトし、その後、変数ＲにＣを加算することを示している。
また、ｗ＿ｃ＝１に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算は、「Ｒ←２3 Ｒ＋Ｃ」である。
【００９５】
このように、ｗ＿ｃ＝１に対する従来のＷｉｎｄｏｗ演算と、スカラ倍演算部２２９によるＷｉｎｄｏｗ演算とは、同一である。
ここで、「Ｒ←２3 Ｒ＋Ｃ」は、スカラ倍演算部２２９において、Ｒ←２×Ｒ、Ｒ←２×Ｒ、Ｒ←２×Ｒ、Ｒ←Ｒ＋Ｃにより、演算される。（ステップＳ１６５参照）
従って、ｗ＿ｃ＝１に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算では、２倍算、２倍算、２倍算、加算の順序で、複数の基本演算が行われる。
【００９６】
このように、ｗ＿ｃ＝１に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算に含まれる基本演算の個数は、「４」である。
（ｃ）ｗ＿ｃ＝２の場合
ｗ＿ｃ＝２に対する従来のＷｉｎｄｏｗ演算は、「Ｒ←２3 Ｒ＋２Ｃ」である。「Ｒ←２3 Ｒ＋２Ｃ」は、変数Ｒの値を、Ｗｉｎｄｏｗの幅の示すビット（ここでは、３ビット）だけ、上位にシフトし、その後、変数Ｒに２Ｃを加算することを示している。
【００９７】
一方、ｗ＿ｃ＝２に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算は、「Ｒ←２（２2 Ｒ＋Ｃ）」である。
２（２2 Ｒ＋Ｃ）＝２3 Ｒ＋２Ｃであることにより、ｗ＿ｃ＝２に対する従来のＷｉｎｄｏｗ演算による結果と、スカラ倍演算部２２９によるＷｉｎｄｏｗ演算による結果とは、同一であることが分かる。
【００９８】
ここで、「Ｒ←２（２2 Ｒ＋Ｃ）」は、スカラ倍演算部２２９において、Ｒ←２×Ｒ、Ｒ←２×Ｒ、Ｒ←Ｒ＋Ｃ、Ｒ←２×Ｒにより、演算される。（ステップＳ１６６参照）
これは、２（２2 Ｒ＋Ｃ）＝２×（２×（２×Ｒ）＋Ｃ）であることによる。
従って、ｗ＿ｃ＝２に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算では、２倍算、２倍算、加算、２倍算の順序で、複数の基本演算が行われる。
【００９９】
ここで、前記加算は、点Ｃにｗ＿ｃ／２t を乗じて得られる点の加算である。
このように、ｗ＿ｃ＝２に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算に含まれる基本演算の個数は、「４」である。
（ｄ）ｗ＿ｃ＝３の場合
ｗ＿ｃ＝３に対する従来のＷｉｎｄｏｗ演算は、「Ｒ←２3 Ｒ＋３Ｃ」である。「Ｒ←２3 Ｒ＋３Ｃ」は、変数Ｒの値を、Ｗｉｎｄｏｗの幅の示すビット（ここでは、３ビット）だけ、上位にシフトし、その後、変数Ｒに３Ｃを加算することを示している。
【０１００】
また、ｗ＿ｃ＝３に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算は、「Ｒ←２3 Ｒ＋３Ｃ」である。
このように、ｗ＿ｃ＝３に対する従来のＷｉｎｄｏｗ演算と、スカラ倍演算部２２９によるＷｉｎｄｏｗ演算とは、同一である。
ここで、「Ｒ←２3 Ｒ＋３Ｃ」は、スカラ倍演算部２２９において、Ｒ←２×Ｒ、Ｒ←２×Ｒ、Ｒ←２×Ｒ、Ｒ←Ｒ＋３Ｃ、により演算される。（ステップＳ１６７参照）
これは、２3 Ｒ＋３Ｃ＝２×（２×（２×Ｒ））＋３Ｃであることによる。
【０１０１】
従って、ｗ＿ｃ＝３に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算では、２倍算、２倍算、２倍算、加算の順序で、複数の基本演算が行われる。
このように、ｗ＿ｃ＝３に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算に含まれる基本演算の個数は、「４」である。
（ｅ）ｗ＿ｃ＝４の場合
ｗ＿ｃ＝４に対する従来のＷｉｎｄｏｗ演算は、「Ｒ←２3 Ｒ＋４Ｃ」である。「Ｒ←２3 Ｒ＋４Ｃ」は、変数Ｒの値を、Ｗｉｎｄｏｗの幅の示すビット（ここでは、３ビット）だけ、上位にシフトし、その後、変数Ｒに４Ｃを加算することを示している。
【０１０２】
一方、ｗ＿ｃ＝４に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算は、「Ｒ←２2 （２Ｒ＋Ｃ）」である。
２2 （２Ｒ＋Ｃ）＝２3 Ｒ＋４Ｃであることにより、ｗ＿ｃ＝４に対する従来のＷｉｎｄｏｗ演算による結果と、スカラ倍演算部２２９によるＷｉｎｄｏｗ演算による結果とは、同一であることが分かる。
【０１０３】
ここで、「Ｒ←２2 （２Ｒ＋Ｃ）」は、スカラ倍演算部２２９において、Ｒ←２×Ｒ、Ｒ←Ｒ＋Ｃ、Ｒ←２×Ｒ、Ｒ←２×Ｒにより、演算される。（ステップＳ１６８参照）
これは、２2 （２Ｒ＋Ｃ）＝２×２×（（２×Ｒ）＋Ｃ））であることによる。
従って、ｗ＿ｃ＝４に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算では、２倍算、加算、２倍算、２倍算の順序で、複数の基本演算が行われる。
【０１０４】
ここで、前記加算は、点Ｃにｗ＿ｃ／２t を乗じて得られる点の加算である。
このように、ｗ＿ｃ＝４に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算に含まれる基本演算の個数は、「４」である。
（ｆ）ｗ＿ｃ＝−３の場合
ｗ＿ｃ＝−３に対する従来のＷｉｎｄｏｗ演算は、「Ｒ←２3 Ｒ−３Ｃ」である。「Ｒ←２3 Ｒ−３Ｃ」は、変数Ｒの値を、Ｗｉｎｄｏｗの幅の示すビット（ここでは、３ビット）だけ、上位にシフトし、その後、変数Ｒに−３Ｃを加算する（つまり、変数Ｒから３Ｃを減算する）ことを示している。
【０１０５】
また、ｗ＿ｃ＝−３に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算は、「Ｒ←２3 Ｒ＋３Ｃ」である。
このように、ｗ＿ｃ＝−３に対する従来のＷｉｎｄｏｗ演算と、スカラ倍演算部２２９によるＷｉｎｄｏｗ演算とは、同一である。
ここで、「Ｒ←２3 Ｒ−３Ｃ」は、スカラ倍演算部２２９において、Ｒ←２×Ｒ、Ｒ←２×Ｒ、Ｒ←２×Ｒ、Ｒ←Ｒ＋（−３Ｃ）、により演算される。（ステップＳ１６１参照）
これは、２3 Ｒ−３Ｃ＝２×（２×（２×Ｒ））＋（−３Ｃ）であることによる。
【０１０６】
従って、ｗ＿ｃ＝−３に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算では、２倍算、２倍算、２倍算、加算（ここでは減算）の順序で、複数の基本演算が行われる。
このように、ｗ＿ｃ＝−３に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算に含まれる基本演算の個数は、「４」である。
（ｇ）ｗ＿ｃ＝−２の場合
ｗ＿ｃ＝−２に対する従来のＷｉｎｄｏｗ演算は、「Ｒ←２3 Ｒ−２Ｃ」である。「Ｒ←２3 Ｒ−２Ｃ」は、変数Ｒの値を、Ｗｉｎｄｏｗの幅の示すビット（ここでは、３ビット）だけ、上位にシフトし、その後、変数Ｒに−２Ｃを加算する（つまり、変数Ｒから２Ｃを減算する）ことを示している。
【０１０７】
一方、ｗ＿ｃ＝−２に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算は、「Ｒ←２（２2 Ｒ−Ｃ）」である。
２（２2 Ｒ−Ｃ）＝２3 Ｒ−２Ｃであることにより、ｗ＿ｃ＝−２に対する従来のＷｉｎｄｏｗ演算による結果と、スカラ倍演算部２２９によるＷｉｎｄｏｗ演算による結果とは、同一であることが分かる。
【０１０８】
ここで、「Ｒ←２（２2 Ｒ−Ｃ）」は、スカラ倍演算部２２９において、Ｒ←２×Ｒ、Ｒ←２×Ｒ、Ｒ←Ｒ＋（−Ｃ）、Ｒ←２×Ｒにより、演算される。（ステップＳ１６２参照）
これは、２（２2 Ｒ−Ｃ）＝２×（２×（２×Ｒ）＋（−Ｃ））であることによる。
従って、ｗ＿ｃ＝−２に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算では、２倍算、２倍算、加算（ここでは減算）、２倍算の順序で、複数の基本演算が行われる。
【０１０９】
ここで、前記減算は、点Ｃに｜ｗ＿ｃ／２t ｜を乗じて得られる点の減算である。
このように、ｗ＿ｃ＝−２に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算に含まれる基本演算の個数は、「４」である。
（ｈ）ｗ＿ｃ＝−１の場合
ｗ＿ｃ＝−１に対する従来のＷｉｎｄｏｗ演算は、「Ｒ←２3 Ｒ−Ｃ」である。「Ｒ←２3 Ｒ−Ｃ」は、変数Ｒの値を、Ｗｉｎｄｏｗの幅の示すビット（ここでは、３ビット）だけ、上位にシフトし、その後、変数Ｒに−Ｃを加算する（つまり、変数ＲからＣを減算する）ことを示している。
【０１１０】
また、ｗ＿ｃ＝−１に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算は、「Ｒ←２3 Ｒ−Ｃ」である。
このように、ｗ＿ｃ＝−１に対する従来のＷｉｎｄｏｗ演算と、スカラ倍演算部２２９によるＷｉｎｄｏｗ演算とは、同一である。
ここで、「Ｒ←２3 Ｒ−Ｃ」は、スカラ倍演算部２２９において、Ｒ←２×Ｒ、Ｒ←２×Ｒ、Ｒ←２×Ｒ、Ｒ←Ｒ＋（−Ｃ）、により演算される。（ステップＳ１６３参照）
これは、２3 Ｒ−３Ｃ＝２×（２×（２×Ｒ））＋（−Ｃ）であることによる。
【０１１１】
従って、ｗ＿ｃ＝−１に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算では、２倍算、２倍算、２倍算、加算（ここでは、減算）の順序で、複数の基本演算が行われる。
このように、ｗ＿ｃ＝−１に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算に含まれる基本演算の個数は、「４」である。
１．４  楕円曲線演算部２０８の動作
楕円曲線演算部２０８の動作について、図１３に示すフローチャートを用いて説明する。
【０１１２】
入力部２３０は、暗号処理部２０２からべき倍係数ｋを受け取り、受け取ったべき倍係数ｋをべき倍係数格納部２２１に書き込み（ステップＳ１２１）、暗号処理部２０２から被べき倍点Ｃを受け取り、受け取った被べき倍点Ｃを被演算値格納部２２４に書き込む（ステップＳ１２２）。
次に、分割情報生成部２２２は、べき倍係数ｋから分割情報である整数列｛ｗ＿ｉ｝を生成し、生成した整数列｛ｗ＿ｉ｝を分割情報格納部２２３に格納する（ステップＳ１２３）。
【０１１３】
次に、テーブル生成部２２５は、被べき倍点Ｃを用いてテーブル｛Ｐ＿ｉ｝を生成し、テーブル｛Ｐ＿ｉ｝をテーブル格納部２２８に格納する（ステップＳ１２４）。
次に、スカラ倍演算部２２９は、分割情報格納部２２３に格納されている整数列｛ｗ＿ｉ｝とテーブル格納部２２８に格納されているテーブル｛Ｐ＿ｉ｝とを使用して、べき倍点ｋ＊Ｃを計算する（ステップＳ１２５）。
【０１１４】
次に、出力部２３１は、スカラ倍演算部２２９からべき倍点ｋ＊Ｃを受け取り、受け取ったべき倍点ｋ＊Ｃを暗号処理部２０２へ出力する（ステップＳ１２６）。
１．５  ＩＣカード１００の構成
ＩＣカード１００は、図１に示すように、秘密鍵記憶部１０１、復号処理部１０２、通信部１０３、制御部１０４、情報記憶部１０５及び楕円曲線演算部１０８から構成されている。
【０１１５】
ＩＣカード１００は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどから構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、ＩＣカード１００は、その一部の機能を達成する。
（１）情報記憶部１０５及び秘密鍵記憶部１０１
情報記憶部１０５は、素数ｐ、楕円曲線Ｅ（Ｆｐ）の係数及びベースポイントＢを記憶している。また、生成された復号ポイントＰｍ’を記憶するための領域を備えている。
【０１１６】
秘密鍵記憶部１０１は、秘密鍵ｋｓを記憶している。
（２）通信部１０３
通信部１０３は、ポイント発行装置２００から第１暗号文ｓ１及び第２暗号文ｓ２を受信する。第１暗号文ｓ１及び第２暗号文ｓ２を受信すると、制御部１０４に対して、受信した旨を制御部１０４に対して通知する。また、受信した第１暗号文ｓ１及び第２暗号文ｓ２を復号処理部１０２へ出力する。
【０１１７】
（３）制御部１０４
制御部１０４は、通信部１０３から第１暗号文ｓ１及び第２暗号文ｓ２を受信した旨の通知を受け取る。前記通知を受け取ると、復号処理部１０２に対して、第１暗号文ｓ１及び第２暗号文ｓ２を復号して復号ポイントを生成することを示す指示を出力する。
（４）復号処理部１０２
復号処理部１０２は、制御部１０４から、第１暗号文ｓ１及び第２暗号文ｓ２を復号して復号ポイントを生成することを示す指示を受け取る。また、通信部１０３から第１暗号文ｓ１及び第２暗号文ｓ２を受け取る。
【０１１８】
前記指示を受け取ると、復号処理部１０２は、秘密鍵記憶部１０１から秘密鍵ｋｓを読み出し、次に、受け取った第１暗号文ｓ１を被べき倍点ｋとして、楕円曲線演算部１０８へ出力し、読み出した秘密鍵ｋｓをべき倍係数Ｃとして、楕円曲線演算部１０８へ出力する。次に、楕円曲線演算部１０８から演算結果ｋｓ＊ｓ１を受け取り、復号ポイントＰｍ’＝第２暗号文ｓ２  xor  （演算結果ｋｓ＊ｓ１のｘ座標値）を計算する。
【０１１９】
ここで、
Ｐｍ’＝ｓ２  xor  （ｋｓ＊ｓ１のｘ座標値）
＝（Ｐｍ  xor  （ｒ＊Ｋｐのｘ座標値））  
xor  （ｋｓ・ｒ＊Ｂのｘ座標値）
＝Ｐｍ  xor（ｒ・ｋｓ＊Ｂのｘ座標値）  xor  （ｒ・ｋｓ＊Ｂのｘ座標値）
＝Ｐｍ
従って、復号ポイントＰｍ’は、ポイントＰｍに一致することが分かる。
【０１２０】
次に、復号処理部１０２は、生成した復号ポイントＰｍ’を情報記憶部１０５へ書き込む。
（５）楕円曲線演算部１０８
楕円曲線演算部１０８は、ポイント発行装置２００が有する楕円曲線演算部２０８と同一の構成を有しているので、詳細な説明を省略する。
【０１２１】
楕円曲線演算部１０８は、復号処理部１０２から、被べき倍点ｋ及びべき倍係数Ｃを受け取り、べき倍点ｋ＊Ｃを算出し、算出したべき倍点ｋ＊Ｃを復号処理部１０２へ出力する。
１．６  ポイント発行システム１０の動作
ポイント発行システム１０の動作について、図１４に示すフローチャートを用いて説明する。
【０１２２】
（１）秘密鍵ｋｓ及び公開鍵Ｋｐの生成の動作
以下に示す動作は、ポイント発行装置２００がポイントを発行する前に行われる。
ＩＣカード１００の復号処理部１０２は、秘密鍵ｋｓを生成し、生成した秘密鍵ｋｓを秘密鍵記憶部１０１へ書き込む（ステップＳ１０１）。次に、復号処理部１０２は、情報記憶部１０５からベースポイントＢを読み出し、生成した前記秘密鍵ｋｓと読み出したべースポイントＢに楕円べき倍演算を施して、公開鍵Ｋｐ＝ｋｓ＊Ｂを生成する。この際、楕円べき倍演算は、楕円曲線演算部１０８により行われる（ステップＳ１０２）。次に、復号処理部１０２は、生成した公開鍵Ｋｐを通信部１０３を介して、ポイント発行装置２００へ送信する（ステップＳ１０３）。
【０１２３】
ポイント発行装置２００の暗号処理部２０２は、ＩＣカード１００から通信部２０３を介して、公開鍵Ｋｐを受信し、受信した公開鍵Ｋｐを公開鍵記憶部２０１へ書き込む（ステップＳ１０４）。
ここでは、ＩＣカード１００が秘密鍵ｋｓを生成し、生成した秘密鍵ｋｓを基にして公開鍵Ｋｐを生成し、生成した公開鍵Ｋｐをポイント発行装置２００へ送信するとしているが、次に示すようにしてもよい。
【０１２４】
つまり、ポイント発行システム１０は、さらに、鍵管理装置（公開鍵生成装置）を含む。ＩＣカード１００は、秘密鍵ｋｓを生成し、生成した秘密鍵ｋｓを内部に記憶する。
鍵管理装置は、ＩＣカード１００から秘密鍵ｋｓを安全に取得し、取得した秘密鍵ｋｓを記憶する秘密鍵記憶部と、ベースポイントＢを記憶しているベースポイント記憶部と、秘密鍵記憶部から秘密鍵ｋｓを読み出し、ベースポイント記憶部からベースポイントＢを読み出し、秘密鍵ｋｓとベースポイントＢとを用いて、公開鍵Ｋｐ＝ｋｓ＊Ｂを生成する楕円曲線演算部と、生成した公開鍵Ｋｐをポイント発行装置２００へ送信する送信部とを備える。ここで、鍵管理装置が有する楕円曲線演算部は、ＩＣカード１００が有する楕円曲線演算部と同一である。
【０１２５】
（２）ポイントの発行の動作
ポイント発行装置２００の制御部２０４は、ポイントＰｍを生成し、生成したポイントＰｍを情報記憶部２０５に書き込み、次に、暗号処理部２０２に対して、ポイントＰｍを暗号化してＩＣカード１００へ送信することを示す指示を出力する（ステップＳ１１１）。
【０１２６】
暗号処理部２０２は、制御部２０４から、ポイントＰｍを暗号化してＩＣカード１００へ送信することを示す指示を受け取ると、乱数ｒを生成し（ステップＳ１１２）、ベースポイントＢを情報記憶部２０５から読み出し、生成した乱数ｒをべき倍係数として、楕円曲線演算部２０８へ出力し、読み出したベースポイントＢを被べき倍点として、楕円曲線演算部２０８へ出力し、楕円曲線演算部２０８から、演算結果としてべき倍点ｒ＊Ｂを受け取り、第１暗号文ｓ１＝べき倍点ｒ＊Ｂとする（ステップＳ１１３）。
【０１２７】
次に、暗号処理部２０２は、公開鍵記憶部２０１から公開鍵Ｋｐを読み出し、生成した乱数ｒをべき倍係数として、楕円曲線演算部２０８へ出力し、読み出した公開鍵Ｋｐを被べき倍点として、楕円曲線演算部２０８へ出力し、楕円曲線演算部２０８から、演算結果としてべき倍点ｒ＊Ｋｐを受け取り、暗号処理部２０２は、情報記憶部２０５からポイントＰｍを読み出し、読み出したポイントＰｍと受け取ったべき倍点ｒ＊Ｋｐとを加算して、第２暗号文ｓ２＝ポイントＰｍ  xor  （べき倍点ｒ＊Ｋｐのｘ座標値）を生成する（ステップＳ１１４）。
【０１２８】
次に、暗号処理部２０２は、生成した第１暗号文ｓ１及び第２暗号文ｓ２を通信部２０３を介して、ＩＣカード１００へ送信する（ステップＳ１１５）。
復号処理部１０２は、ポイント発行装置２００から通信部１０３を介して、第１暗号文ｓ１及び第２暗号文ｓ２を受け取る（ステップＳ１１５）。
次に、復号処理部１０２は、秘密鍵記憶部１０１から秘密鍵ｋｓを読み出し、受け取った第１暗号文ｓ１を被べき倍点として、楕円曲線演算部１０８へ出力し、読み出した秘密鍵ｋｓをべき倍係数として、楕円曲線演算部１０８へ出力する。楕円曲線演算部１０８は、ｋｓ＊ｓ１を演算し、復号処理部１０２は、楕円曲線演算部１０８から演算結果ｋｓ＊ｓ１を受け取り、復号ポイントＰｍ’＝第２暗号文ｓ２  xor  （演算結果ｋｓ＊ｓ１のｘ座標値）を計算する（ステップＳ１１６）。
【０１２９】
次に、復号処理部１０２は、計算して得られた復号ポイントＰｍ’を情報記憶部１０５へ書き込む（ステップＳ１１７）。
２．実施の形態２
本発明に係る別の実施の形態としてのデジタル署名システム（図示していない）について説明する。
【０１３０】
デジタル署名システムは、ユーザＡ装置（署名生成装置とも呼ぶ）、ユーザＢ装置（署名検証装置とも呼ぶ）及び管理センタ装置（管理装置とも呼ぶ）から構成されており（それぞれの装置を図示していない）、ユーザＡ装置、ユーザＢ装置及び管理センタ装置は、それぞれ、インターネットを介して接続されている。
ユーザＡ装置、ユーザＢ装置及び管理センタ装置は、それぞれ、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレィユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、各装置は、その一部の機能を達成する。
【０１３１】
ユーザＡ装置、ユーザＢ装置及び管理センタ装置は、それぞれ、素数ｐを法とする剰余体Ｆ上で定義された楕円曲線Ｅ上の離散対数問題を根拠として、楕円曲線Ｅ上の点Ｃに、素数ｐ未満の正整数である係数ｋを乗じて点ｋ＊Ｃを算出する楕円曲線演算を用いて、情報を確実に扱う情報セキュリティ装置である。
ここで、情報を確実に扱うとは、例えば、情報を二者間で通信する場合において、送信者が送信した情報が、改変されることなく、受信者に届くようにすることを言う。
【０１３２】
ユーザＡ装置は、デジタル署名データとともにメッセージをユーザＢ装置へ送信し、ユーザＢ装置は、デジタル署名データとともにメッセージを受け取り、受け取ったデジタル署名データにより、署名検証を行う。
ここで、素数ｐを法とする剰余体Ｆｐ上で定義された楕円曲線Ｅ（Ｆｐ）を想定し、Ｅの位数をｑとする。また、Ｂは、楕円曲線Ｅ上のベースポイントである。
【０１３３】
ユーザＡ装置は、秘密鍵ｘＡを生成する秘密鍵生成部と、生成した秘密鍵ｘＡを安全に管理センタ装置へ送信する秘密鍵送信部と、送信すべきメッセージｍを記憶しているメッセージ記憶部と、素数ｐ、楕円曲線Ｅの係数、ベースポイントＢを管理センタ装置から受信するパラメタ受信部と、受信した素数ｐ、楕円曲線Ｅの係数、ベースポイントＢを記憶するパラメタ記憶部と、乱数ｒを生成する乱数生成部と、第１署名データＲ１＝（ｒｘ，ｒｙ）＝ｒ＊Ｂを生成し、ｓ×ｒ＝ｍ＋ｒｘ×ＸＡ  （ｍｏｄ  ｑ）  から第２署名データｓを計算する署名生成部と、得られた署名データ（Ｒ１、ｓ）とメッセージｍとをユーザＢ装置へ送信する送信部と、署名生成部の指示により、楕円曲線上の点の楕円べき倍演算を行う楕円曲線演算部とを備える。
【０１３４】
管理センタ装置は、ユーザＡ装置から、秘密鍵ｘＡを安全に取得する取得部と、素数ｐ、楕円曲線Ｅの係数、ベースポイントＢを記憶しているパラメタ記憶部と、取得した秘密鍵ｘＡを用いて、公開鍵ＹＡ＝ｘＡ＊Ｇを算出する公開鍵算出部と、素数ｐ、楕円曲線Ｅの係数及びベースポイントＧを公開する公開部と、インターネットを介して、公開鍵ＹＡをユーザＢ装置へ送信する送信部と、公開鍵算出部の指示により、楕円曲線上の点の楕円べき倍演算を行う楕円曲線演算部とを備える。
【０１３５】
ユーザＢ装置は、管理センタ装置から、素数ｐ、楕円曲線Ｅの係数及びベースポイントＧを受信するパラメタ受信部と、取得した素数ｐ、楕円曲線Ｅの係数及びベースポイントＧを記憶するパラメタ記憶部と、管理センタ装置から、公開鍵ＹＡを受信する公開鍵受信部と、受信した公開鍵ＹＡを記憶する公開鍵記憶部と、ユーザＡ装置から署名データ（Ｒ１、Ｓ）を受信する署名データ受信部と、ユーザＡ装置からメッセージｍを受信するメッセージ受信部と、ユーザＢ装置は、Ｓ＊Ｒ１及びｍ＊Ｇ＋ｒｘ＊ＹＡを計算し、Ｓ＊Ｒ１＝ｍ＊Ｇ＋ｒｘ＊ＹＡが成立するかどうか判定し、成立する場合には、検証の成功を示す成功情報を出力し、検証に失敗した場合に、検証の失敗を示す失敗情報を出力する検証部と、検証部の指示により、楕円曲線上の点の楕円べき倍演算を行う楕円曲線演算部とを備える。
【０１３６】
ユーザＡ装置、ユーザＢ装置及び管理センタ装置がそれぞれ、有する楕円曲線演算部は、実施の形態１に示す楕円曲線演算部２０８と同一である。
以下において、デジタル署名システムの動作について図１５に示すフローチャートを用いて説明する。
（秘密鍵ｘＡ及び公開鍵ＹＡの生成）
ユーザＡ装置は、秘密鍵ｘＡを生成する（ステップＳ２０１）。
【０１３７】
管理センタ装置は、ユーザＡ装置から、秘密鍵ｘＡを安全に取得し、取得した秘密鍵ｘＡを用いて、公開鍵ＹＡ＝ｘＡ＊Ｂを算出する（ステップＳ２０２）。
次に、管理センタ装置は、素数ｐ、楕円曲線Ｅの係数及びベースポイントＢを公開し（ステップＳ２０４、ステップＳ２０７）、インターネットを介して、公開鍵ＹＡをユーザＢ装置へ送信する（ステップＳ２０５）。
【０１３８】
ユーザＢ装置は、素数ｐ、楕円曲線Ｅの係数及びベースポイントＢを取得し（ステップＳ２０４）、公開鍵ＹＡを受信し（ステップＳ２０５）、受信した公開鍵ＹＡを内部に記憶する（ステップＳ２０６）。
ユーザＡ装置も、素数ｐ、楕円曲線Ｅの係数及びベースポイントＧを取得する（ステップＳ２０７）。
【０１３９】
（デジタル署名データの生成と署名検証）
ユーザＡ装置は、乱数ｒを生成し（ステップＳ２１１）、第１署名データＲ１＝（ｒｘ，ｒｙ）＝ｒ＊Ｂを生成し（ステップＳ２１２）、
ｓ×ｒ＝ｍ＋ｒｘ×ｘＡ  （ｍｏｄ  ｑ）  から第２署名データｓを計算する（ステップＳ２１３）。ここで、ｍは、ユーザＡ装置からユーザＢ装置へ送信するメッセージである。
【０１４０】
次に、ユーザＡ装置は、得られた署名データ（Ｒ１、ｓ）とメッセージｍとをユーザＢ装置へ送信する（ステップＳ２１４）。
ユーザＢ装置は、ユーザＡ装置から署名データ（Ｒ１、ｓ）とメッセージｍとを受信する（ステップＳ２１４）。
次に、ユーザＢ装置は、ｓ＊Ｒ１及びｍ＊Ｇ＋ｒｘ＊ＹＡを計算し（ステップＳ２１５）、Ｓ＊Ｒ１＝ｍ＊Ｇ＋ｒｘ＊ＹＡが成立するかどうか判定し（ステップＳ２１６）、成立する場合には（ステップＳ２１６でＹＥＳ）、検証に成功し、ユーザＡ装置の身元の確認ができたこととなる。成立しない場合には（ステップＳ２１６でＮＯ）、検証に失敗し、ユーザＡ装置の身元が確認できなかったこととなる。
【０１４１】
５．実施の形態３
本発明に係るまた別の実施の形態としての鍵共有システム（図示していない）について説明する。
鍵共有システムは、ユーザＡ装置（鍵利用装置とも呼ぶ）、ユーザＢ装置（鍵利用装置とも呼ぶ）及び管理センタ装置（管理装置とも呼ぶ）から構成されており（それぞれの装置を図示していない）、ユーザＡ装置、ユーザＢ装置及び管理センタ装置は、それぞれ、インターネットを介して接続されている。ユーザＡ装置、ユーザＢ装置及び管理センタ装置は、それぞれ、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどを含んで構成されるコンピュータシステムである。マイクロプロセッサが、コンピュータプログラムに従って動作することにより、各装置は、その機能を達成する。
【０１４２】
ユーザＡ装置及びユーザＢ装置は、素数ｐを法とする剰余体Ｆ上で定義された楕円曲線Ｅ上の離散対数問題を根拠として、楕円曲線Ｅ上の点Ｃに、素数ｐ未満の正整数である係数ｋを乗じて点ｋ＊Ｃを算出する楕円曲線演算を用いて、情報を安全に扱う情報セキュリティ装置である。
ここで、情報を安全に扱うとは、上述したように、例えば、情報を二者間で通信する場合において、当該情報が第三者に知られないようにすることを言う。
【０１４３】
ユーザＡ装置とユーザＢ装置とは、以下に示すようにして、第三者に知られることなく、同一の共有鍵を取得する。
管理センタ装置は、楕円曲線Ｅ（Ｆｐ）の係数及びベースポイントＢを選択する選択部と、選択した楕円曲線Ｅの係数、ベースポイントＢ及び素数ｐを記憶しているパラメタ記憶部と、素数ｐ、楕円曲線Ｅ（Ｆｐ）及びベースポイントＧを公開する公開部とを備えている。
【０１４４】
ここで、素数ｐを法とする剰余体Ｆｐ上で定義された前記楕円曲線Ｅを想定し、Ｂは、楕円曲線Ｅ上のベースポイントである。
ユーザＡ装置は、管理センタ装置から、素数ｐ、楕円曲線Ｅの係数及びベースポイントＢを取得するパラメタ取得部と、乱数を用いて、秘密鍵ｘＡを設定する秘密鍵設定部と、公開鍵ＹＡ＝ｘＡ＊Ｂを算出する公開鍵算出部と、算出した公開鍵ＹＡをユーザＢ装置へ送信する送信する公開鍵送信部と、ユーザＢ装置から、公開鍵ＹＢを受信する公開鍵受信部と、共有鍵ｘＡ＊ＹＢ＝（ｘＡ×ｘＢ）＊Ｂを算出する共有鍵算出部と、公開鍵算出部及び共有鍵算出部の指示により、楕円曲線上の点の楕円べき倍演算を行う楕円曲線演算部とを備える。
【０１４５】
ユーザＢ装置もユーザＡ装置と同様の構成を有している。
ユーザＢ装置は、管理センタ装置から、素数ｐ、楕円曲線Ｅの係数及びベースポイントＢを取得するパラメタ取得部と、乱数を用いて、秘密鍵ｘＢを設定する秘密鍵設定部と、公開鍵ＹＢ＝ｘＢ＊Ｂを算出する公開鍵算出部と、算出した公開鍵ＹＢをユーザＡ装置へ送信する送信する公開鍵送信部と、ユーザＡ装置から、公開鍵ＹＡを受信する公開鍵受信部と、共有鍵ｘＢ＊ＹＡ＝（ｘＢ×ｘＡ）＊Ｂを算出する共有鍵算出部と、公開鍵算出部及び共有鍵算出部の指示により、楕円曲線上の点の楕円べき倍演算を行う楕円曲線演算部とを備える。
【０１４６】
ユーザＡ装置及びユーザＢ装置がそれぞれ有する楕円曲線演算部は、実施の形態１のポイント発行装置２００が有する楕円曲線演算部と同一である。
以下において、鍵共有システムの動作について図１６に示すフローチャートを用いて説明する。
管理センタ装置は、楕円曲線Ｅの係数及びベースポイントＢを選択し（ステップＳ３１１）、素数ｐ、楕円曲線Ｅの係数及びベースポイントＢを公開する（ステップＳ３１２）。
【０１４７】
ユーザＡ装置は、秘密鍵ｘＡを設定し（ステップＳ３０１）、公開鍵ＹＡ＝ｘＡ＊Ｂを算出し（ステップＳ３０２）、公開鍵ＹＡをユーザＢ装置へ送信する（ステップＳ３０３）。
一方、ユーザＢ装置は、秘密鍵ｘＢを設定し（ステップＳ３２１）、公開鍵ＹＢ＝ｘＢ＊Ｂを算出し（ステップＳ３２２）、公開鍵ＹＢをユーザＡ装置へ送信する（ステップＳ３２３）。
【０１４８】
ユーザＡ装置は、共有鍵ｘＡ＊ＹＢ＝（ｘＡ×ｘＢ）＊Ｂを算出する（ステップＳ３０４）。
一方、ユーザＢ装置は、共有鍵ｘＢ＊ＹＡ＝（ｘＢ×ｘＡ）＊Ｂを算出する（ステップＳ３２４）。
ここで、共有鍵ｘＢ＊ＹＡ＝（ｘＢ×ｘＡ）＊Ｂ
＝（ｘＡ×ｘＢ）＊Ｂ
＝共有鍵ｘＡ＊ＹＢ
である。
【０１４９】
こうして、ユーザＡ装置とユーザＢ装置とは、第三者に知られることなく、同一の共有鍵を取得することができる。
６．実施の形態１の効果
実施の形態１におけるポイント発行装置２００が有する楕円曲線演算部２０８において、楕円曲線加算部２２６及び楕円曲線２倍算部２２７は、それぞれ同じ順序で同じ演算を実行しているため（図４〜図５を参照）、電力波形を解析する攻撃者は、電力波形から楕円曲線加算及び楕円曲線２倍算のどちらを実行しているかが区別できない。
【０１５０】
また、スカラ倍演算部２２９では、カウンタｃに対するｗ＿ｃの値によらず、楕円曲線加算と楕円曲線２倍算の演算回数の合計が４回と同じであるため、べき倍係数の値によらず、楕円曲線加算と楕円曲線２倍算の演算回数の合計は同じになっている。したがって、攻撃者が演算回数を知った場合においても、べき倍係数に関する情報が攻撃者に漏れない。そのため、実施の形態１は、単純電力解析攻撃に対して安全である。
【０１５１】
また、Ｗｉｎｄｏｗの幅ｓｗ＝３の場合、テーブル格納部２２８のテーブルに格納される点は、Ｐ＿１＝Ｃを除いて、Ｐ＿２＝３＊Ｃのみの１点である。従来の単純電力解析攻撃対策方法では、テーブルに格納される点は、Ｐ＿１＝Ｃを除いて、Ｐ＿２，Ｐ＿３，Ｐ＿４の３点であり、本実施の形態１では、従来方法より、テーブルサイズを１／３に削減している。
【０１５２】
実施の形態１では、ｓｗビットの分割情報ごとに演算回数の合計を一定にしているが、１個のべき倍係数についての演算全体で演算回数の合計を一定になるようにしてもよい。この場合、１個のべき倍係数についての演算全体で演算回数を調整するためには、演算回数を計測しながら、演算処理を行う。この場合に比べて、実施の形態１では、ｓｗビットごとに演算回数の合計を一定にしており、１個のべき倍係数についての演算全体でも演算回数に注意する必要がなく、制御が容易になるというさらなる効果がある。
【０１５３】
上記の効果は、実施の形態２及び３についても同様である。
７．その他の変形例
上記に説明した各実施の形態は、本発明の実施の一例であり、本発明はこれらの実施の形態に何ら限定されるものではなく、その主旨を逸脱しない範囲において種々なる態様で実施し得るものである。例えば、以下のような場合も本発明に含まれる。
【０１５４】
（１）実施の形態１において、テーブル生成部２２５は、楕円曲線加算部２２６及び楕円曲線２倍算部２２７を使用して、楕円曲線加算及び楕円曲線２倍算を計算しているが、テーブル生成部２２５が、楕円曲線加算部２２６及び楕円曲線２倍算部２２７におけるダミー演算を除去した通常の楕円曲線加算及び楕円曲線２倍算を実行するとしてもよい。
（２）実施の形態では、ｓｗ＝３としたが、ｓｗを２や４以上の値としてもよい。このとき、スカラ倍演算部２２９において、ｗ＿ｃの値に応じたｗｉｎｄｏｗ演算（図１０〜図１１のステップＳ１５７、ステップＳ１６１〜Ｓ１６８に相当）は、以下のようになる。
【０１５５】
ｗ＿ｃの値に応じたｗｉｎｄｏｗ演算では、（ｓｗ＋１）回の基本演算が行われる。
（ｉ）ｗ＿ｃが０以外の場合で、かつ、ｗ＿ｃが２＾ｔで割り切れて、２＾（ｔ＋１）で割り切れないことを満たす非負整数ｔが存在する場合、（ｓｗ＋１）回の基本演算のうち、最初から（ｓｗ−ｔ＋１）番目の基本演算をＲ←ＥＣＡ（Ｒ，ｓｇｎ（ｗ＿ｃ）＊Ｐ＿（（ａｂｓ（ｗ＿ｃ／２＾ｔ）＋１）／２））とし、（ｓｗ＋１）回の基本演算のうち、その他のｓｗ回の基本演算をＲ←ＥＣＤ（Ｒ）とする。
【０１５６】
ここで、ｓｇｎ（ｗ＿ｃ）は、ｗ＿ｃの符号である。ｗ＿ｃ＞０の場合、ｓｇｎ（ｗ＿ｃ）＝１、ｗ＿ｃ＜０の場合、ｓｇｎ（ｗ＿ｃ）＝−１である。
また、ａｂｓ（ｗ＿ｃ）はｗ＿ｃの絶対値である。
（ii）ｗ＿ｃ＝０の場合は、Ｒ←ＥＣＤ（Ｒ）の基本演算をｓｗ回行う、その後、Ｄ←ＥＣＡ（Ｒ,Ｐ＿１）を実行する。例えば、ｓｗ＝５，ｗ＿ｃ＝−１２の場合、Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＡ（Ｒ，−Ｐ＿２），Ｒ←ＥＣＤ（Ｒ），Ｒ←ＥＣＤ（Ｒ）となる。
【０１５７】
ｓｗ＝２の場合は、Ｐ＿１を除いて、テーブルに含まれる点は存在しないので、新たに点を計算してテーブルの要素を求める必要はない。このため、テーブル生成部２２５による処理を含めてテーブル生成部２２５及びテーブル格納部２２８は、無くてもよい。この場合は、テーブルサイズは、Ｐ＿１以外の点がないため、０となり、テーブル削減度合の効果が顕著となる。
【０１５８】
（３）ｓｗ＝３の場合の演算変換表３２０を図１２に示している。ここでは、ｓｗ＝４の場合の演算変換表３３０を図１７に示す。
ここで、Ｗｉｎｄｏｗの幅は「４ビット」であるので、ｗ＿ｃは、１６個の値「０」、「１」、「２」、「３」、「４」、「５」、「６」、「７」、「８」、「−７」、「−６」、「−５」「−４」、「−３」、「−２」及び「−１」のいずれかをとる。
【０１５９】
次に、ｗ＿ｃが各値をとる場合について、従来のＷｉｎｄｏｗ演算、スカラ倍演算部２２９によるＷｉｎｄｏｗ演算、基本演算順序及び基本演算回数について説明する。
（ａ）ｗ＿ｃ＝０の場合
ｗ＿ｃ＝０に対する従来のＷｉｎｄｏｗ演算は、「Ｒ←２4 Ｒ」である。「Ｒ←２4 Ｒ」は、変数Ｒの値を、Ｗｉｎｄｏｗの幅の示すビット（ここでは、４ビット）だけ、上位にシフトすることを示している。
【０１６０】
一方、ｗ＿ｃ＝０に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算は、「Ｒ←２4 Ｒ」及び「Ｄ←Ｒ＋Ｃ」である。ここで、「Ｒ←２4Ｒ」については、上述した通りである。また、「Ｄ←Ｒ＋Ｃ」は、ダミーの加算であり、ｗ＿ｃ＝０の場合におけるＷｉｎｄｏｗ演算に含まれる基本演算の種類とその数と、他の場合における（つまり、ｗ＿ｃ≠０の場合における）Ｗｉｎｄｏｗ演算基本に含まれる基本演算の種類とその数とを一致させるためのものである。
【０１６１】
ここで、「Ｒ←２4 Ｒ」は、スカラ倍演算部２２９において、Ｒ←２×Ｒ、Ｒ←２×Ｒ、Ｒ←２×Ｒ、Ｒ←２×Ｒ、により、演算される。
これは、２4 Ｒ＝２×（２×（２×（２×Ｒ）））であることによる。
従って、ｗ＿ｃ＝０に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算では、２倍算、２倍算、２倍算、２倍算、ダミーの加算の順序で、複数の基本演算が行われる。
【０１６２】
このように、ｗ＿ｃ＝０に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算に含まれる基本演算の個数は、「５」である。
（ｂ）ｗ＿ｃ＝１、３、５、７、−７、−５、−３、−１の場合
ｗ＿ｃ＝１、３、５、７、−７、−５、−３、−１の場合、それぞれ、従来のＷｉｎｄｏｗ演算は、「Ｒ←２4 Ｒ＋Ｃ」、「Ｒ←２4 Ｒ＋３Ｃ」、「Ｒ←２4Ｒ＋５Ｃ」、「Ｒ←２4 Ｒ＋７Ｃ」、「Ｒ←２4 Ｒ−７Ｃ」、「Ｒ←２4 Ｒ−５Ｃ」、「Ｒ←２4Ｒ−３Ｃ」、「Ｒ←２4 Ｒ−１Ｃ」である。
【０１６３】
「Ｒ←２4 Ｒ＋Ｃ」は、変数Ｒの値を、Ｗｉｎｄｏｗの幅の示すビット（ここでは、４ビット）だけ、上位にシフトし、その後、変数ＲにＣを加算することを示している。その他の演算についても同様である。
また、ｗ＿ｃ＝１、３、５、７、−７、−５、−３、−１の場合におけるスカラ倍演算部２２９によるＷｉｎｄｏｗ演算は、従来のＷｉｎｄｏｗ演算と同一である。
【０１６４】
この場合におけるスカラ倍演算部２２９による各Ｗｉｎｄｏｗ演算では、２倍算、２倍算、２倍算、２倍算、加算の順序で、複数の基本演算が行われる。
このように、この場合におけるスカラ倍演算部２２９によるＷｉｎｄｏｗ演算に含まれる基本演算の個数は、「５」である。
（ｃ）ｗ＿ｃ＝２、４、６、８、−６、−４、−２の場合
ｗ＿ｃ＝２、４、６、８、−６、−４、−２の場合、それぞれ、従来のＷｉｎｄｏｗ演算は、「Ｒ←２4 Ｒ＋２Ｃ」、「Ｒ←２4 Ｒ＋４Ｃ」、「Ｒ←２4Ｒ＋６Ｃ」、「Ｒ←２4 Ｒ＋８Ｃ」、「Ｒ←２4 Ｒ−６Ｃ」、「Ｒ←２4 Ｒ−４Ｃ」、「Ｒ←２4Ｒ−２Ｃ」である。
【０１６５】
「Ｒ←２4 Ｒ＋２Ｃ」は、変数Ｒの値を、Ｗｉｎｄｏｗの幅の示すビット（ここでは、４ビット）だけ、上位にシフトし、その後、変数Ｒに２Ｃを加算することを示している。その他の演算についても同様である。
また、ｗ＿ｃ＝２、４、６、８、−６、−４、−２の場合におけるスカラ倍演算部２２９によるＷｉｎｄｏｗ演算は、それぞれ、「Ｒ←２（２3 Ｒ＋Ｃ）」、「Ｒ←２2（２2 Ｒ＋Ｃ）」、「Ｒ←２（２3 Ｒ＋３Ｃ）」、「Ｒ←２3 （２Ｒ＋Ｃ）」、「Ｒ←２（２3Ｒ−３Ｃ）」、「Ｒ←２2 （２2 Ｒ−Ｃ）」、「Ｒ←２（２3 Ｒ−Ｃ）」である。これらの演算結果は、従来のＷｉｎｄｏｗ演算による結果と、同一である。
【０１６６】
ここで、例えば、ｗ＿ｃ＝２の場合における「Ｒ←２（２3 Ｒ＋Ｃ）」は、スカラ倍演算部２２９において、Ｒ←２×Ｒ、Ｒ←２×Ｒ、Ｒ←２×Ｒ、Ｒ←Ｒ＋Ｃ、Ｒ←２×Ｒにより、演算される。
従って、ｗ＿ｃ＝２に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算では、２倍算、２倍算、２倍算、加算、２倍算の順序で、複数の基本演算が行われる。
【０１６７】
このように、ｗ＿ｃ＝２に対するスカラ倍演算部２２９によるＷｉｎｄｏｗ演算に含まれる基本演算の個数は、「５」である。
ｗ＿ｃ＝４、６、８、−６、−４、−２の場合についても、図１７に示す通りである。
（４）各実施の形態では、べき倍係数をすべてｓｗビットの一定ビット列ごとに分割して、ｓｗビットの分割情報を生成しているが、これに限らない。ビット数が一定でなくてもよい。分割情報のビット数が一定でない場合、分割情報を用いたスカラ倍演算部の演算処理も一定回数でなくてもよい。この場合は、分割情報ごとの演算処理の回数は、分割情報のビット長に依存してもよいが、それ以外の分割情報のビット長以外の情報には依存しない。
【０１６８】
分割情報のビット数がａビット長である場合に、分割情報の値に対応するｗｉｎｄｏｗ演算部は、（ａ＋１）回の演算を順次行う。ここで、前記複数の演算のうち（ａ−ｔ＋１）番目の演算は、楕円曲線Ｅ上の前記加算であり、他の演算は、楕円曲線Ｅ上の２倍算である。
また、分割情報のビット数がｂビット長である場合に（ここで、ａ≠ｂ）、分割情報の値に対応するｗｉｎｄｏｗ演算部は、（ｂ＋１）回の演算を順次行う。ここで、前記複数の演算のうち（ｂ−ｔ＋１）番目の演算は、楕円曲線Ｅ上の前記加算であり、他の演算は、楕円曲線Ｅ上の２倍算である。
【０１６９】
（５）各実施の形態では、ｗ＿ｃ＝０の場合は、ｓｗ回のＲ←ＥＣＤ（Ｒ）の基本演算の後、Ｄ←ＥＣＡ（Ｒ,Ｐ＿１）を実行しているが、ダミーの演算処理は他の点との加算であってもよいし、楕円曲線２倍算であってもよい。
（６）各実施の形態では、方程式はｙ＾２＝ｘ＾３＋ａ×ｘ＋ｂの形をしたワイヤーシュトラス型の楕円曲線を使用しており、Jacobian座標を使用しているが、これだけには限らない。例えば、他の座標（Projective座標）を使用してもよい。その場合においてもダミー演算を付加して、楕円曲線加算と楕円曲線２倍算の区別をできなくしてもよい。また、楕円曲線２倍算を楕円曲線加算に置き換えて演算可能なHessian楕円（ヘッセ型楕円）やJacobian楕円（ヤコビ型楕円）を使用してもよい。その場合は、楕円曲線加算及び楕円曲線２倍算の内部の演算にダミー演算はなくてもよい。
【０１７０】
（７）各実施の形態では、楕円曲線を使用してべき倍演算を実行しているが、超楕円曲線またはその他の代数曲線のヤコビアン群のべき倍演算を実行してもよい。
（８）本発明は、各実施の形態の楕円曲線演算部を楕円ＥｌＧａｍａｌ暗号、ＰＳＥＣ−ＫＥＭやその他の楕円曲線またはその他の代数曲線上の暗号方式に適用してもよい。
例えば、暗号方式の暗号化アルゴリズムにおける秘密鍵をべき倍係数としたへぎ倍演算に、各実施の形態の楕円曲線演算部を適用し、暗号方式の復号化アルゴリズムにおける秘密鍵をべき倍係数としたへぎ倍演算に、各実施の形態の楕円曲線演算部を適用してもよい。
【０１７１】
また、楕円ＤＳＡ署名方式、楕円ＥｌＧａｍａｌ署名方式、楕円ＮＲ署名方式、楕円ＭＲ署名方式、楕円ＰＶ署名方式、楕円ＡＯ署名方式などの楕円曲線上の署名方式、もしくは、代数曲線上の署名方式に、各実施の形態の楕円曲線演算部を適用してもよい。
上述したように、楕円曲線上の署名方式の署名生成アルゴリズムにおける乱数をべき倍係数としたべき倍演算に楕円曲線演算部を適用してもよい。
【０１７２】
楕円ＥｌＧａｍａｌ暗号や楕円ＤＳＡ署名方式に関しては、非特許文献３が詳しい。
（９）実施の形態１のポイント発行システム１０では、利用者が商品を購入したりサービスの提供を受けた場合に、販売者やサービス提供者から受け取る特典情報であり、次に利用者が商品を購入したりサービスの提供を受ける際に、販売者やサービス提供者への対価の支払いの一部又は全部として利用されるポイントを秘密通信の対象とし、ポイント発行装置２００は、生成したポイントを暗号化し、暗号化ポイントをＩＣカード１００へ送信し、ＩＣカード１００は、暗号化ポイントを復号して復号ポイントを生成し、生成した復号ポイントを記憶するようにしている。
【０１７３】
しかし、秘密通信の対象は、上記のポイントには限定されない。
次に示すような金銭の決済システムに適用することもできる。
例えば、通貨の代わりに用いることができる電子マネーを秘密通信の対象とし、ＩＣカードは、電子マネーを記憶しており、利用者が、商品を購入する際に、ＩＣカードは、商品の購入額に相当する電子マネーを暗号化して送信し、また、内部に記憶している電子マネーから送信した分を減じる。ポイント発行装置２００に代えて同様の構成を有するレジスタ装置は、暗号化電子マネーを受信し、受信した暗号化電子マネーを復号して電子マネーを再生し、記憶する。
【０１７４】
また、上記のＩＣカードに代えて、美術館や博物館などの各種施設を利用のためのＩＣカードタイプの電子チケットが、上記のように、電子マネーに相当する情報を記憶しているとしてもよい。各種施設の入り口に設けられた入場管理装置は、各種施設の利用料金に相当する額の電子マネーを要求し、前記電子チケットは、要求された額の電子マネーを暗号化して送信し、入場管理装置は、暗号化電子マネーを受信し、受信した暗号化電子マネーを復号して電子マネーを生成し、記憶するとしてもよい。
【０１７５】
また、鉄道、バスなどの交通機関を利用する際に用いられるＩＣカードタイプのＩＣカード乗車券が、上記のように、電子マネーに相当する情報を記憶しているとしてもよい。交通機関の駅の入り口に設けられた入場管理装置は、当該駅を識別する識別情報を送信し、ＩＣカード乗車券は、前記識別情報を受信し、記憶する。交通機関の駅の出口に設けられた出場管理装置は、前記識別情報をＩＣカード乗車券から受信し、受信した識別情報と当該出場管理装置が設けられた駅とを用いて、料金表により乗車料金を算出し、算出した乗車料金に相当する額の電子マネーを要求し、ＩＣカード乗車券は、要求された額の電子マネーを暗号化して送信し、出場管理装置は、暗号化電子マネーを受信し、受信した暗号化電子マネーを復号して電子マネーを生成し、記憶する。
【０１７６】
上記における暗号化及び復号化において、楕円曲線上の離散対数問題が安全性の根拠として用いられ、楕円べき倍演算が行われる。この楕円べき倍演算を行う各装置は、楕円曲線演算部２０８と同一の楕円曲線演算部を備えている。
上記の各装置は、素数ｐを法とする剰余体Ｆ上で定義された楕円曲線Ｅ上の離散対数問題を根拠として、楕円曲線Ｅ上の点Ｃに、素数ｐ未満の正整数である係数ｋを乗じて点ｋ＊Ｃを算出する楕円曲線演算を用いて、情報を安全に扱う情報セキュリティ装置である。
【０１７７】
（１０）上記のような金銭の決済システムにおいて、送信される金銭の額、送信元、送信先などについては、その正当性の証明が要求される場合がある。このような場合において、実施の形態２に示すデジタル署名や署名検証が適用される。
このようなデジタル署名や署名検証において、楕円曲線上の離散対数問題が安全性の根拠として用いれ、楕円べき倍演算が行われる。この楕円べき倍演算を行う各装置は、楕円曲線演算部２０８と同一の楕円曲線演算部を備えている。
【０１７８】
上記の各装置は、素数ｐを法とする剰余体Ｆ上で定義された楕円曲線Ｅ上の離散対数問題を根拠として、楕円曲線Ｅ上の点Ｃに、素数ｐ未満の正整数である係数ｋを乗じて点ｋ＊Ｃを算出する楕円曲線演算を用いて、情報を確実に扱う情報セキュリティ装置である。
（１１）秘密通信の対象は、上記のようなポイントや電子マネーなどには限定されない。
【０１７９】
本発明は、コンテンツ暗号化装置とコンテンツ再生装置とから構成されるコンテンツ配信システムにおいて適用され、例えば、映画、動画像、音声、音楽、小説、データベースなどのデジタル情報を秘密通信の対象としてもよい。これらのコンテンツは、コンテンツ供給者から利用者に対して、これらのコンテンツを記録している記録媒体を販売したり、レンタルすることにより、提供される。また、デジタル放送やインターネットを介して、コンテンツ供給者から利用者に提供される。
【０１８０】
コンテンツ供給者の有するコンテンツ暗号化装置は、デジタル著作物である映画を暗号化してＤＶＤに記録する。利用者の有するコンテンツ再生装置は、ＤＶＤから暗号化デジタル著作物を読み出し、復号して、映画を生成し、生成した映画を音声及び映像として再生して、表示及び出力する。
上記における暗号化及び復号化において、楕円曲線上の離散対数問題が安全性の根拠として用いられ、楕円べき倍演算が行われる。この楕円べき倍演算を行うコンテンツ暗号化装置とコンテンツ再生装置は、楕円曲線演算部２０８と同一の楕円曲線演算部を備えている。
【０１８１】
上記の例において、コンテンツを暗号化及び復号するためのコンテンツ鍵を、実施の形態１に示す秘密通信の対象としてもよい。この場合、コンテンツ鍵は、実施の形態１に示す方法と同様にして、暗号化され、また復号される。
この場合に、コンテンツは、コンテンツ鍵により、後述する共通鍵暗号方式を用いて、暗号化され、復号される。
【０１８２】
上記の各装置は、素数ｐを法とする剰余体Ｆ上で定義された楕円曲線Ｅ上の離散対数問題を根拠として、楕円曲線Ｅ上の点Ｃに、素数ｐ未満の正整数である係数ｋを乗じて点ｋ＊Ｃを算出する楕円曲線演算を用いて、情報を安全に扱う情報セキュリティ装置である。
（１２）上記のコンテンツ配信システムにおいて、デジタル著作物を暗号化する際に用いる暗号化技術として、例えば、ＤＥＳ（Data EncryptionStandard）又はＡＥＳ（Advanced Encryption Standard）を用いるとしてもよい。ＤＥＳ及びＡＥＳなどの暗号化技術は、いわゆる共通鍵暗号方式（又は秘密鍵暗号方式）と呼ばれる。
【０１８３】
上記のコンテンツ配信システムにおいて、このような共通鍵暗号方式を採用する場合に、コンテンツ配信システムを構成する暗号化装置と再生装置との間で、いかにして安全に同一の秘密鍵を共有するかが課題となる。
実施の形態３に示す鍵共有システムは、この課題を解消するための手段を提供する。
実施の形態３に示す鍵共有システムにより、コンテンツ暗号化装置（実施の形態３のユーザＡ装置に相当する）とコンテンツ再生装置（実施の形態３のユーザＢ装置に相当する）との間で、第三者に知られることなく、秘密鍵を共有し、その後は、共有鍵暗号方式による暗号化アルゴリズムを適用し、コンテンツ暗号化装置において、共有している秘密鍵を用いて、デジタル著作物を暗号化して暗号化デジタル著作物を生成し、次に、コンテンツ再生装置において、共有している秘密鍵を用いて、暗号化デジタル著作物を復号する。
【０１８４】
上記における鍵共有において、楕円曲線上の離散対数問題が安全性の根拠として用いられ、楕円べき倍演算が行われる。この楕円べき倍演算を行うコンテンツ暗号化装置及びコンテンツ再生装置は、楕円曲線演算部２０８と同一の楕円曲線演算部を備えている。
（１３）上記の各実施の形態及び変形例は、次に示すような場合において適用される。
（ａ）各実施の形態及び変形例は、秘密のメッセージ伝送において適用される。これについては、上記において、秘密通信として説明をした。
【０１８５】
（ｂ）各実施の形態及び変形例は、認証において適用される。認証とは、メッセージが自称どおりの人物によって送られたこと、またメッセージが改竄されなかったということの検証である。また、各実施の形態及び変形例は、身分の証明において適用される。身分の証明とは、例えば、データへのアクセス権、又は施設へのアクセス権（入室権）を持つことの証明、又は自分が主張どおりの人物であることの証明である。さらに、各実施の形態及び変形例は、否認防止において適用される。否認防止とは、例えば、実は何かに同意したのに、同意していないと主張する者に対抗することをいう。
【０１８６】
（ｃ）各実施の形態及び変形例は、鍵交換において適用される。鍵交換とは、例えば、２人の人が放送電波を使ってある秘密鍵暗号方式で使うための秘密鍵に同意することである。上記において、鍵共有として説明をした。
（ｄ）各実施の形態及び変形例は、硬貨投げ（ビットコミットメントとも呼ばれる）において適用される。硬貨投げとは、例えば、別々の市に住む２人のチェスプレーヤが、電子メールで、誰が白を持つのかを決めることである。
【０１８７】
（ｅ）各実施の形態及び変形例は、秘密分散において適用される。秘密分散とは、例えば、ある秘密の情報が、共に働くｋ人の人によって利用可能であるが、ｋ−１人の人では、利用できないようにすることを言う。
（ｆ）各実施の形態及び変形例は、零知識証明において適用される。零知識証明とは、例えば、ある人が、数論的あるいは組合せ論的問題を解くことに成功したことを、解が何であるかのわずかの情報さえ与えることなく、他人にこのことを納得させることを言う。
【０１８８】
（１４）上記の各装置は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレィユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。ここで、コンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、各装置は、その機能を達成する。つまり、前記マイクロプロセッサは、前記コンピュータプログラムに含まれる各命令を１個ずつ読み出し、読み出した命令を解読し、解読結果に従って動作する。
【０１８９】
（１５）上記の各装置を構成する構成要素の一部又は全部は、１個のシステムＬＳＩ（Large Scale Integration：大規模集積回路）から構成されているとしてもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどを含んで構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、システムＬＳＩは、その機能を達成する。
【０１９０】
また、上記の各装置を構成する構成要素の各部は、個別に１チップ化されても良いし、一部又は全てを含むように１チップ化されてもよい。また、ここでは、ＬＳＩとしたが、集積度の違いにより、ＩＣ、システムＬＳＩ、スーパーＬＳＩ、ウルトラＬＳＩと呼称されることもある。
また、集積回路化の手法はＬＳＩに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。ＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（FieldProgrammable Gate Array）やＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用しても良い。
【０１９１】
（１６）上記の各装置を構成する構成要素の一部又は全部は、各装置に脱着可能なＩＣカード又は単体のモジュールから構成されているとしてもよい。前記ＩＣカード又は前記モジュールは、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、などから構成されるコンピュータシステムである。前記ＩＣカード又は前記モジュールは、上記の超多機能ＬＳＩを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムに従って動作することにより、前記ＩＣカード又は前記モジュールは、その機能を達成する。このＩＣカード又はこのモジュールは、耐タンパ性を有するとしてもよい。
【０１９２】
（１７）本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラム又は前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ―ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリなど、に記録したものとしてもよい。また、これらの記録媒体に記録されている前記コンピュータプログラム又は前記デジタル信号であるとしてもよい。
【０１９３】
また、本発明は、前記コンピュータプログラム又は前記デジタル信号を、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
また、本発明は、マイクロプロセッサとメモリとを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムに従って動作するとしてもよい。
【０１９４】
また、前記プログラム又は前記デジタル信号を前記記録媒体に記録して移送することにより、又は前記プログラム又は前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
（１８）上述したように、本発明は、予め与えられる秘密情報と入力である楕円曲線上の点に対し、楕円曲線上のスカラ倍演算を実行する楕円曲線演算装置であって、前記秘密情報を分割して分割情報を生成する分割情報生成部と、２個の前記楕円曲線上の点に対し、前記楕円曲線の群において加算した結果得られる点を生成する楕円曲線加算部と、１個の前記楕円曲線上の点に対し、前記楕円曲線の群において２倍した結果得られる点を生成する楕円曲線２倍算部と、第１の前記楕円曲線上の点と前記分割情報に基づいて、前記楕円曲線加算部と前記楕円曲線２倍算部を使用して第２の前記楕円曲線上の点を生成するスカラ倍演算部と、を備え、前記スカラ倍演算部は、前記楕円曲線加算部と前記楕円曲線２倍算部を使用する回数を合計した値が前記秘密情報のビット長以外の情報に依らず一定になるように制御し、前記楕円曲線加算部と前記楕円曲線２倍算部の各々は、楕円曲線の定義体における乗算を実行する乗算手段、前記定義体における２乗算を実行する２乗算手段、前記定義体における加算を実行する加算手段を有し、前記楕円曲線加算部と前記楕円曲線２倍算部は、実行する前記乗算、前記２乗算及び前記加算の順序が同じであることを特徴とする。
【０１９５】
ここで、前記スカラ倍演算部は、一つの前記分割情報に基づいて、前記楕円曲線加算部と前記楕円曲線２倍算部を使用する回数を合計した値が前記分割情報のビット長以外の情報に依らず一定になるように制御してもよい。
ここで、前記楕円曲線演算装置は、さらに１以上の予め与えられた正整数に対して、前記正整数をスカラとする前記楕円曲線上の点のスカラ倍点を計算し、その結果のそれぞれをテーブルに格納するテーブル生成部を備え、前記楕円曲線加算部で使用する２個の前記楕円曲線上の点の内、少なくとも一つは前記テーブルに格納されている前記スカラ倍点であるとしてもよい。
【０１９６】
ここで、前記分割情報生成部は、前記秘密情報を予め与えられたビット数をもつ複数の前記分割情報に分割してもよい。
ここで、前記楕円曲線２倍算部は、さらに計算結果に影響のないダミーとなる前記乗算を実行するダミー乗算手段を有するとしてもよい。
ここで、前記楕円曲線２倍算部は、さらに定義体の元の２乗算した結果を、前記元と前記元の乗算を使用して得る２乗算代替手段を有するとしてもよい。
【０１９７】
ここで、前記正整数は奇数であるとしてもよい。
ここで、前記分割情報生成部は、複数のｓｗビットの前記分割情報を生成し、前記スカラ倍演算部は、（ｓｗ＋１）回の演算処理を実行し、前記分割情報ｗが０以外かつ、前記分割情報ｗが２＾ｔ（ｔは非負整数）で割り切れて、２＾（ｔ＋１）で割り切れない場合に、（ｓｗ−ｔ＋１）番目の前記演算処理は前記楕円曲線加算部を使用し、その他の前記演算処理は前記楕円曲線２倍算部を使用するとしてもよい。
【０１９８】
また、本発明は、予め与えられる秘密情報と入力である楕円曲線上の点に対し、楕円曲線上のスカラ倍演算を実行する楕円曲線演算方法であって、前記秘密情報を分割して分割情報を生成する分割情報生成ステップと、２個の前記楕円曲線上の点に対し、前記楕円曲線の群において加算した結果得られる点を生成する楕円曲線加算ステップと、１個の前記楕円曲線上の点に対し、前記楕円曲線の群において２倍した結果得られる点を生成する楕円曲線２倍算ステップと、第１の前記楕円曲線上の点と前記分割情報に基づいて、前記楕円曲線加算ステップと前記楕円曲線２倍算ステップを使用して第２の前記楕円曲線上の点を生成するスカラ倍演算ステップとを含み、前記スカラ倍演算ステップは、前記楕円曲線加算ステップと前記楕円曲線２倍算ステップを使用する回数を合計した値が前記秘密情報のビット長以外の情報に依らず一定になるように制御し、前記楕円曲線加算ステップと前記楕円曲線２倍算ステップの各々は、楕円曲線の定義体における乗算を実行する乗算手段、前記定義体における２乗算を実行する２乗算手段、前記定義体における加算を実行する加算手段を有し、前記楕円曲線加算ステップと前記楕円曲線２倍算ステップは、実行する前記乗算、前記２乗算及び前記加算の順序が同じであることを特徴とする。
【０１９９】
ここで、前記スカラ倍演算ステップは、一つの前記分割情報に基づいて、前記楕円曲線加算部と前記楕円曲線２倍算部を使用する回数を合計した値が前記秘密情報に依らず一定になるように制御するとしてもよい。
ここで、前記楕円曲線演算方法は、さらに１以上の予め与えられた正整数に対して、前記正整数をスカラとする前記楕円曲線上の点のスカラ倍点を計算し、その結果のそれぞれをテーブルに格納するテーブル生成ステップを含み、前記楕円曲線加算ステップで使用する２個の前記楕円曲線上の点の内、少なくとも一つは前記テーブルに格納されている前記スカラ倍点であるとしてもよい。
【０２００】
ここで、前記分割情報生成ステップは、前記秘密情報を予め与えられたビット数をもつ複数の前記分割情報に分割するとしてもよい。
ここで、前記正整数は奇数であるとしてもよい。
ここで、前記分割情報生成ステップは、複数のｓｗビットの前記分割情報を生成し、前記スカラ倍演算ステップは、（ｓｗ＋１）回の演算処理を実行し、前記分割情報ｗが０以外かつ、前記分割情報ｗが２＾ｔ（ｔは非負整数）で割り切れて、２＾（ｔ＋１）で割り切れない場合に、（ｓｗ−ｔ＋１）番目の前記演算処理は前記楕円曲線加算ステップを使用し、その他の前記演算処理は前記楕円曲線２倍算ステップを使用するとしてもよい。
【０２０１】
また、本発明は、予め与えられる秘密情報と入力である楕円曲線上の点に対し、楕円曲線上のスカラ倍演算を実行する楕円曲線演算装置に実行させるプログラムであって、前記秘密情報を分割して分割情報を生成する分割情報生成ステップと、２個の前記楕円曲線上の点に対し、前記楕円曲線の群において加算した結果得られる点を生成する楕円曲線加算ステップと、１個の前記楕円曲線上の点に対し、前記楕円曲線の群において２倍した結果得られる点を生成する楕円曲線２倍算ステップと、第１の前記楕円曲線上の点と前記分割情報に基づいて、前記楕円曲線加算ステップと前記楕円曲線２倍算ステップを使用して第２の前記楕円曲線上の点を生成するスカラ倍演算ステップとを前記楕円曲線演算装置に実行させ、前記スカラ倍演算ステップは、前記楕円曲線加算ステップと前記楕円曲線２倍算ステップを使用する回数を合計した値が前記秘密情報のビット長以外の情報に依らず一定になるように制御し、前記楕円曲線加算ステップと前記楕円曲線２倍算ステップの各々は、楕円曲線の定義体における乗算を実行する乗算手段、前記定義体における２乗算を実行する２乗算手段、前記定義体における加算を実行する加算手段を有し、前記楕円曲線加算ステップと前記楕円曲線２倍算ステップは、実行する前記乗算、前記２乗算及び前記加算の順序が同じであることを特徴とする。
【０２０２】
ここで、前記スカラ倍演算ステップは、一つの前記分割情報に基づいて、前記楕円曲線加算部と前記楕円曲線２倍算部を使用する回数を合計した値が前記秘密情報に依らず一定になるように制御するとしてもよい。
ここで、前記楕円曲線演算方法は、さらに１以上の予め与えられた正整数に対して、前記正整数をスカラとする前記楕円曲線上の点のスカラ倍点を計算し、その結果のそれぞれをテーブルに格納するテーブル生成ステップを含み、前記楕円曲線加算ステップで使用する２個の前記楕円曲線上の点の内、少なくとも一つは前記テーブルに格納されている前記スカラ倍点であるとしてもよい。
【０２０３】
ここで、前記分割情報生成ステップは、前記秘密情報を予め与えられたビット数をもつ複数の前記分割情報に分割するとしてもよい。
ここで、前記正整数は奇数であるとしてもよい。
ここで、前記分割情報生成ステップは、複数のｓｗビットの前記分割情報を生成し、前記スカラ倍演算ステップは、（ｓｗ＋１）回の演算処理を実行し、前記分割情報ｗが０以外かつ、前記分割情報ｗが２＾ｔ（ｔは非負整数）で割り切れて、２＾（ｔ＋１）で割り切れない場合に、（ｓｗ−ｔ＋１）番目の前記演算処理は前記楕円曲線加算ステップを使用し、その他の前記演算処理は前記楕円曲線２倍算ステップを使用するとしてもよい。
【０２０４】
また、本発明は、予め与えられる秘密情報と入力である楕円曲線上の点に対し、楕円曲線上のスカラ倍演算を実行する楕円曲線演算装置の集積回路であって、前記秘密情報を分割して分割情報を生成する分割情報生成部と、２個の前記楕円曲線上の点に対し、前記楕円曲線の群において加算した結果得られる点を生成する楕円曲線加算部と、１個の前記楕円曲線上の点に対し、前記楕円曲線の群において２倍した結果得られる点を生成する楕円曲線２倍算部と、第１の前記楕円曲線上の点と前記分割情報に基づいて、前記楕円曲線加算部と前記楕円曲線２倍算部を使用して第２の前記楕円曲線上の点を生成するスカラ倍演算部と、を備え、前記スカラ倍演算部は、前記楕円曲線加算部と前記楕円曲線２倍算部を使用する回数を合計した値が前記秘密情報のビット長以外の情報に依らず一定になるように制御し、前記楕円曲線加算部と前記楕円曲線２倍算部の各々は、楕円曲線の定義体における乗算を実行する乗算手段、前記定義体における２乗算を実行する２乗算手段、前記定義体における加算を実行する加算手段を有し、前記楕円曲線加算部と前記楕円曲線２倍算部は、実行する前記乗算、前記２乗算及び前記加算の順序が同じであることを特徴とする。
【０２０５】
ここで、前記スカラ倍演算部は、一つの前記分割情報に基づいて、前記楕円曲線加算部と前記楕円曲線２倍算部を使用する回数を合計した値が前記秘密情報に依らず一定になるように制御するとしてもよい。
（１９）上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
【産業上の利用可能性】
【０２０６】
以上説明したように、本発明によると、単純電力解析攻撃により安全性を低下することを防ぐことができる。
本発明を構成する各装置、各方法及び各コンピュータプログラムは、情報を安全に確実に扱う必要があるあらゆる産業において、経営的に、また継続的及び反復的に使用することができる。また、本発明を構成する各装置は、電器機器製造産業において、経営的に、また継続的及び反復的に、製造し、販売することができる。
【図面の簡単な説明】
【０２０７】
【図１】本発明に係る１の実施の形態としてのポイント発行システム１０の構成を示すシステム構成図である。
【図２】楕円曲線演算部２０８の構成を示すブロック図である。
【図３】分割情報生成部２２２の動作を示すフローチャートである。
【図４】楕円曲線加算部２２６による加算の動作及び楕円曲線２倍算部２２７による２倍算の動作示すフローチャートである。図５へ続く。
【図５】楕円曲線加算部２２６による加算の動作及び楕円曲線２倍算部２２７による２倍算の動作示すフローチャートである。図４から続く。
【図６】テーブル生成部２２５によるテーブル｛Ｐ＿ｉ｝の生成の動作を示すフローチャートである。
【図７】ｓｗ＝３の場合において、テーブル生成部２２５により生成されるテーブル｛Ｐ＿ｉ｝の一例を示す。
【図８】ｓｗ＝４の場合において、テーブル生成部２２５により生成されるテーブル｛Ｐ＿ｉ｝の一例を示す。
【図９】ｓｗ＝５の場合において、テーブル生成部２２５により生成されるテーブル｛Ｐ＿ｉ｝の一例を示す。
【図１０】スカラ倍演算部２２９による演算の手順を示すフローチャートである。図１１へ続く。
【図１１】スカラ倍演算部２２９による演算の手順を示すフローチャートである。図１０から続く。
【図１２】図１１のステップＳ１６１〜Ｓ１６８における各演算の意味を説明するためのｓｗ＝３の場合の演算変換表３２０である。
【図１３】楕円曲線演算部２０８の動作を示すフローチャートである。
【図１４】ポイント発行システム１０の動作を示すフローチャートである。
【図１５】デジタル署名システムの動作を示すフローチャートである。
【図１６】鍵共有システムの動作を示すフローチャートである。
【図１７】ｓｗ＝４の場合の演算変換表３３０を示す。
【図１８】スカラ倍演算部２２９の構成を示すブロック図である。
【符号の説明】
【０２０８】
１０    ポイント発行システム
１００    ＩＣカード
１０１    秘密鍵記憶部
１０２    復号処理部
１０３    通信部
１０４    制御部
１０５    情報記憶部
１０８    楕円曲線演算部
２００    ポイント発行装置
２０１    公開鍵記憶部
２０２    暗号処理部
２０３    通信部
２０４    制御部
２０５    情報記憶部
２０６    入力受付部
２０７    表示部
２０８    楕円曲線演算部
２２１    べき倍係数格納部
２２２    分割情報生成部
２２３    分割情報格納部
２２４    被演算値格納部
２２５    テーブル生成部
２２６    楕円曲線加算部
２２７    楕円曲線２倍算部
２２８    テーブル格納部
２２９    スカラ倍演算部
２３０    入力部
２３１    出力部
【図１】
0004825199.tif 000002
【図２】
0004825199.tif 000003
【図３】
0004825199.tif 000004
【図４】
0004825199.tif 000005
【図５】
0004825199.tif 000006
【図６】
0004825199.tif 000007
【図７】
0004825199.tif 000008
【図８】
0004825199.tif 000009
【図９】
0004825199.tif 000010
【図１０】
0004825199.tif 000011
【図１１】
0004825199.tif 000012
【図１２】
0004825199.tif 000013
【図１３】
0004825199.tif 000014
【図１４】
0004825199.tif 000015
【図１５】
0004825199.tif 000016
【図１６】
0004825199.tif 000017
【図１７】
0004825199.tif 000018
【図１８】
0004825199.tif 000019