(57)【要約】  電力差分解析を用いた秘密鍵の解読を困難にする回路を備えている場合でも、回路規模が大きくならない暗号装置および方法を提供する。素数データ（ｐｉ）各々に対応する指数（ｒｐｉ）を示す乱数設定データ各々を用いて、素数データ各々に対してべき乗を求め、べき乗したデータ各々を乗算して乗算データを求め、乗算データにより秘密鍵データ（ｄ）を除算して求めた商を示す第１の鍵データ（ｄＱ）と、乗算データにより秘密鍵データを除算して求めた余りを示す第２の鍵データ（ｄＲ）と、を予め記憶部に記憶して、第１の鍵データと第２の鍵データを用いて、電力差分解析（ＤＰＡ）対策を有するＲＳＡまたはＥＣＣを用いた復号処理をする。
2013065117.tif 000002
【特許請求の範囲】
【請求項１】
基数を示す暗号データと指数を示す秘密鍵データと法を示す公開鍵データとを用いてべき乗剰余演算により復号データを求める暗号装置であって、
素数データ各々に対応する指数を示す乱数設定データ各々を用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して乗算データを求め、前記乗算データにより前記秘密鍵データを除算して求めた商を示す第１の鍵データと、前記乗算データにより前記秘密鍵データを除算して求めた余りを示す第２の鍵データと、を予め記憶する記憶部と、
前記素数データ各々に対応する指数を示す、前記乱数設定データ以下でかつ正の整数である第１の乱数データ各々を用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して第２の乱数データを求め、前記素数データ各々に対応する指数を示す、前記乱数設定データから前記乱数設定データに対応する前記第１の乱数データを減算した減算データ用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して耐タンパデータを求める乱数生成部と、
前記第１の鍵データと前記耐タンパデータとを基数に用い、乗算剰余演算において扱える最大ビット幅長から１を減算したデータを法とし、乗算剰余演算をして第１の変数を求め、あるいは、前記第1の鍵データと前記耐タンパデータとの乗算をして第1の変数を求め、前記暗号データを基数とし、前記第２の乱数データを指数とし、公開鍵データを法とし、べき乗剰余演算をして第２の変数を求め、前記第２の変数を基数とし、前記第１の変数を指数とし、公開鍵データを法とし、べき乗剰余演算をして第３の変数を求め、前記暗号データを基数とし、前記第２の鍵データを指数とし、公開鍵データを法とし、べき乗剰余演算をして第４の変数を求め、前記第３の変数と前記第４の変数とを基数に用い、公開鍵データを法とし、乗算剰余演算をして復号データを求めるべき乗剰余演算部と、
を備えることを特徴とする暗号装置。
【請求項２】
前記べき乗剰余演算部は、
前記第１の鍵データと前記耐タンパデータを基数に用い、２のモンゴメリ乗算剰余演算において扱える最大ビット幅長乗から１を減算したデータを法とし、モンゴメリ乗算剰余演算をして第１の変数を求め、前記第３の変数と前記第４の変数を基数に用い、公開鍵データを法とし、モンゴメリ乗算剰余演算をして第５の変数を求め、
前記第５の変数と前記モンゴメリパラメータの２乗を基数に用い、公開鍵データを法とし、モンゴメリ乗算剰余演算をして復号データを求める、
ことを特徴とする請求項１に記載の暗号装置。
【請求項３】
暗号データと秘密鍵データと公開鍵データとを用いて点のスカラー倍算演算により復号データを求める暗号装置であって、
素数データ各々に対応する指数を示す乱数設定データ各々を用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して乗算データを求め、前記乗算データにより前記秘密鍵データを除算して求めた商を示す第１の鍵データと、前記乗算データにより前記秘密鍵データを除算して求めた余りを示す第２の鍵データと、を予め記憶する記憶部と、
前記素数データ各々に対応する指数を示す、前記乱数設定データ以下でかつ正の整数である第１の乱数データ各々を用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して第２の乱数データを求め、前記素数データ各々に対応する指数を示す、前記乱数設定データから前記乱数設定データに対応する前記第１の乱数データを減算した減算データを用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して耐タンパデータを求める乱数生成部と、
前記第１の鍵データと前記耐タンパデータとを用いて乗算をして第１の変数を求める乗算部と、
前記暗号データと前記第２の乱数データとを用いて点のスカラー倍算演算をして第２の変数を求め、前記第２の変数と前記第１の変数とを用いて点のスカラー倍算演算をして第３の変数を求め、前記暗号データと前記第２の鍵データとを用いて点のスカラー倍算演算をして第４の変数を求め、前記第３の変数と前記第４の変数とを用いて点の加算演算をして復号データを求める点のスカラー倍算演算部と、
を備えることを特徴とする暗号装置。
【請求項４】
コンピュータによって実行される暗号処理方法であって、
素数データ各々に対応する指数を示す乱数設定データ各々を用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して乗算データを求め、前記乗算データにより前記秘密鍵データを除算して求めた商を示す第１の鍵データと、前記乗算データにより前記秘密鍵データを除算して求めた余りを示す第２の鍵データと、を予め記憶部に記憶し、
前記素数データ各々に対応する指数を示す、前記乱数設定データ以下でかつ正の整数である第１の乱数データ各々を用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して第２の乱数データを求め、前記素数データ各々に対応する指数を示す、前記乱数設定データから前記乱数設定データに対応する前記第１の乱数データを減算した減算データを用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して耐タンパデータを求め、
前記第１の鍵データと前記耐タンパデータとを基数に用い、２の乗算剰余演算において扱える最大ビット幅長乗から１を減算したデータを法とし、乗算剰余演算をして第１の変数を求め、あるいは、前記第1の鍵データと前記耐タンパデータとを乗算して第1の変数を求め、
前記暗号データを基数とし、前記第２の乱数データを指数とし、公開鍵データを法とし、べき乗剰余演算をして第２の変数を求め、
前記第２の変数を基数とし、前記第１の変数を指数とし、公開鍵データを法とし、べき乗剰余演算をして第３の変数を求め、
前記暗号データを基数とし、前記第２の鍵データを指数とし、公開鍵データを法とし、べき乗剰余演算をして第４の変数を求め、
前記第３の変数と前記第４の変数とを基数に用い、公開鍵データを法とし、乗算剰余演算をして復号データを求める、
ことを特徴とする処理方法。
【請求項５】
前記コンピュータが、
前記第１の鍵データと前記耐タンパデータを基数に用い、２のモンゴメリ乗算剰余演算において扱える最大ビット幅長乗から１を減算したデータを法とし、モンゴメリ乗算剰余演算をして第１の変数を求め、
前記第３の変数と前記第４の変数を基数に用い、公開鍵データを法とし、モンゴメリ乗算剰余演算をして第５の変数を求め、
前記第５の変数と前記モンゴメリパラメータの２乗を基数に用い、公開鍵データを法とし、モンゴメリ乗算剰余演算をして復号データを求める、
ことを特徴とする請求項４に記載の処理方法。
【請求項６】
コンピュータによって実行される暗号処理方法であって、
素数データ各々に対応する指数を示す乱数設定データ各々を用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して乗算データを求め、前記乗算データにより前記秘密鍵データを除算して求めた商を示す第１の鍵データと、前記乗算データにより前記秘密鍵データを除算して求めた余りを示す第２の鍵データと、を予め記憶部に記憶し、
前記素数データ各々に対応する指数を示す、前記乱数設定データ以下でかつ正の整数である第１の乱数データ各々を用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して第２の乱数データを求め、前記素数データ各々に対応する指数を示す、前記乱数設定データから前記乱数設定データに対応する前記第１の乱数データを減算した減算データを用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して耐タンパデータを求め、
前記第１の鍵データと前記耐タンパデータとを用いて乗算をして第１の変数を求め、
前記暗号データと前記第２の乱数データとを用いて点のスカラー倍算演算をして第２の変数を求め、
前記第２の変数と前記第１の変数とを用いて点のスカラー倍算演算をして第３の変数を求め、
前記暗号データと前記第２の鍵データとを用いて点のスカラー倍算演算をして第４の変数を求め、
前記第３の変数と前記第４の変数とを用いて点の加算演算をして復号データを求める、
ことを特徴とする処理方法。
【請求項７】
素数データ各々に対応する指数を示す乱数設定データ各々を用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して乗算データを求め、前記乗算データにより前記秘密鍵データを除算して求めた商を示す第１の鍵データと、前記乗算データにより前記秘密鍵データを除算して求めた余りを示す第２の鍵データと、を予め記憶部に記憶し、
前記素数データ各々に対応する指数を示す、前記乱数設定データ以下でかつ正の整数である第１の乱数データ各々を用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して第２の乱数データを求め、前記素数データ各々に対応する指数を示す、前記乱数設定データから前記乱数設定データに対応する前記第１の乱数データを減算した減算データを用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して耐タンパデータを求め、
前記第１の鍵データと前記耐タンパデータとを基数に用い、２の乗算剰余演算において扱える最大ビット幅長乗から１を減算したデータを法とし、乗算剰余演算をして第１の変数を求め、あるいは、前記第1の鍵データと前記耐タンパデータとの乗算を行って第1の変数を求め、
前記暗号データを基数とし、前記第２の乱数データを指数とし、公開鍵データを法とし、べき乗剰余演算をして第２の変数を求め、
前記第２の変数を基数とし、前記第１の変数を指数とし、公開鍵データを法とし、べき乗剰余演算をして第３の変数を求め、
前記暗号データを基数とし、前記第２の鍵データを指数とし、公開鍵データを法とし、べき乗剰余演算をして第４の変数を求め、
前記第３の変数と前記第４の変数とを基数に用い、公開鍵データを法とし、乗算剰余演算をして復号データを求める、
処理をコンピュータが実行することを特徴とする暗号プログラム。
【請求項８】
前記第１の鍵データと前記耐タンパデータを基数に用い、２のモンゴメリ乗算剰余演算において扱える最大ビット幅長乗から１を減算したデータを法とし、モンゴメリ乗算剰余演算をして第１の変数を求め、
前記第３の変数と前記第４の変数を基数に用い、公開鍵データを法とし、モンゴメリ乗算剰余演算をして第５の変数を求め、
前記第５の変数と前記モンゴメリパラメータの２乗を基数に用い、公開鍵データを法とし、モンゴメリ乗算剰余演算をして復号データを求める、
処理を前記コンピュータが実行することを特徴とする請求項７に記載の暗号プログラム。
【請求項９】
素数データ各々に対応する指数を示す乱数設定データ各々を用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して乗算データを求め、前記乗算データにより前記秘密鍵データを除算して求めた商を示す第１の鍵データと、前記乗算データにより前記秘密鍵データを除算して求めた余りを示す第２の鍵データと、を予め記憶部に記憶し、
前記素数データ各々に対応する指数を示す、前記乱数設定データ以下でかつ正の整数である第１の乱数データ各々を用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して第２の乱数データを求め、前記素数データ各々に対応する指数を示す、前記乱数設定データから前記乱数設定データに対応する前記第１の乱数データを減算した減算データを用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して耐タンパデータを求め、
前記第１の鍵データと前記耐タンパデータとを用いて乗算をして第１の変数を求め、
前記暗号データと前記第２の乱数データとを用いて点のスカラー倍算演算をして第２の変数を求め、
前記第２の変数と前記第１の変数とを用いて点のスカラー倍算演算をして第３の変数を求め、
前記暗号データと前記第２の鍵データとを用いて点のスカラー倍算演算をして第４の変数を求め、
前記第３の変数と前記第４の変数とを用いて点の加算演算をして復号データを求める、
処理をコンピュータが実行することを特徴とする暗号プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号処理を実行する暗号装置と方法およびプログラムに関する。
【背景技術】
【０００２】
近年、情報セキュリティ技術の重要性がますます高まってきている。また、情報セキュリティの基盤技術の１つとして、公開鍵暗号が盛んに研究されている。公開鍵暗号にはいくつか種類があり、べき乗剰余演算を利用するRivest Shamir Adleman（ＲＳＡ）暗号、Diffie-Hellman（ＤＨ）鍵交換や、楕円曲線上の点のスカラー倍算を利用する楕円曲線暗号（Elliptical Curve Cryptography）などのアルゴリズムが知られている。【０００３】
ＲＳＡ暗号、ＤＨについて説明する。ＲＳＡ暗号、ＤＨでは、べき乗剰余演算と呼ばれる処理を用いた演算が行われる。べき乗剰余演算とは、基数ａ、指数ｘ、法ｎに対してｚ＝ａｘｍｏｄ ｎを計算する演算である。ＲＳＡ暗号においては、指数ｘを秘密情報とした処理が行われる。例えば、ＲＳＡ暗号の復号演算においては、暗号文ｃ（暗号データ）、個人鍵（秘密鍵データ）ｄ、法ｎ（公開鍵データ）から、ｍ＝ｃｄｍｏｄ ｎを満たすｍを計算することで復号処理が行われる。例えば、電子署名においては、署名対象データｃ、個人鍵ｄ、法ｎから計算することで、電子署名ｍを得る。いずれの処理においても、個人鍵ｄの値を知らない第三者は、正しい復号処理や電子署名処理結果を算出することができない。【０００４】
ｍ＝ｃｄｍｏｄ ｎにおいては、共にｄが個人鍵であり、攻撃者などの不正な第三者に漏洩してはならない値である。すなわち、ＲＳＡ暗号においては個人鍵ｄの値の保護が重要となるため耐タンパ機能にて保護する必要がある。数学的には、ｍ＝ｃｄｍｏｄ ｎにおいて個人鍵ｄ以外の値が既知だとしても、個人鍵ｄを計算する計算量が大きすぎるため、現実的な時間内に個人鍵ｄを求めることが難しい問題として知られている(離散対数問題)。ｍ＝ｃｄｍｏｄ ｎの場合、ｎが１０２４ビット以上の値である場合、攻撃者はｃ、ｎ、ｍの値を知っていたとしても、ｄの値を求めることが困難であることが知られている。【０００５】
また、ＤＨにおいてもべき乗剰余演算が利用される。相手の公開鍵Ａ（＝ｇｙ:ｙは個人鍵）に対してＫ＝Ａｘｍｏｄ ｐを用いて共有鍵Ｋを得る。ここでｘは個人鍵であり、攻撃者などの不正な第三者に漏洩してはならない値である。すなわち、ＤＨにおいては個人鍵ｘの値の保護が重要となるため耐タンパ機能にて保護する必要がある。Ｋ＝Ａｘｍｏｄ ｐの場合、ｐが１０２４ビット以上の値である場合、攻撃者はＫ、Ａ、ｐの値を知っていたとしてもｘの値を求めることが困難であることが知られている。【０００６】
楕円曲線暗号（Elliptic Curve Cryptography：ＥＣＣ）について説明する。
ＥＣＣでは、点のスカラー倍算(Elliptic Scalar Multiplication)と呼ばれる処理を用いた演算が行われる。点のスカラー倍算は、楕円曲線上の点Ａ、スカラー値と呼ばれる整数ｘから、Ｖ＝ｘＡを満たす楕円曲線上の点Ｖを計算する処理である。ＲＳＡ暗号と同様に、ｘを秘密情報とした処理が行われる。例えばElliptic Curve Diffie-Hellman（ＥＣＤＨ）鍵交換の場合、通信相手の公開鍵となる楕円曲線上の点をＡ、個人鍵（秘密鍵データ）をｄとすると、Ｖ＝ｄＡを満たす楕円曲線上の点Ｖを計算することで、安全な鍵共有を実現する。個人鍵dの値を知らない第三者は正しい共有鍵の値を算出することができない。【０００７】
また、Ｖ＝ｄＡにおいては、共にｄが個人鍵であり、攻撃者などの不正な第三者に漏洩してはならない値である。すなわち、ＥＣＣにおいてはｄの値の保護が重要となるため耐タンパ機能にて保護する必要がある。数学的には、Ｖ＝ｄＡにおいて個人鍵ｄ以外の値が既知だとしても、個人鍵ｄを計算する計算量が大きすぎるため、現実的な時間内に個人鍵ｄを求めることが難しい問題として知られている（離散対数問題）。また、楕円曲線パラメータ（elliptic curve parameter）が１６０ビット以上の場合、Ａ、Ｖの値を知っていたとしても、個人鍵dの値を求めることが困難であることが知られている。【０００８】
ところが、近年では個人鍵を解読するためのいくつかの攻撃手法があり、例えば、サイドチャネル攻撃の１種として、電力差分解析（Differential Power Analysis：ＤＰＡ）を用いて秘密鍵の解読を行う方法が知られている。ＤＰＡは、例えば、スマートカードなどの処理中の消費電力を測定し、測定した複数の電力波形の差分を用いて個人鍵を解読する方法である。【０００９】
ＤＰＡを用いた攻撃への対策の１つとしてデータランダム化を用いた暗号処理する方法が知られている。データランダム化を用いた暗号処理とは、ｍ＝ｃｄｍｏｄ ｎを計算する際に、乱数ｒを毎回生成する。そして、指数ｄをｄ＝ｄ’×ｒ＋ｄ”と表現し、ｄ’＝ｄ÷ｒの商、ｄ”＝ｄ÷ｒの余りとして、除算器を用いて暗号処理の度に計算する。そして、乗算剰余演算器を有するべき乗剰余演算器が処理を実行して処理結果を得る。つまり、ｄ=ｄ’×ｒ+ｄ”において、ｒの値が処理の度に毎回変化し、ｄ’、ｄ”の値も処理の度に変化する。従って、ｃｒｍｏｄ Ｎ，（ｃ’）ｄ’ｍｏｄ Ｎ、ｃｄ”ｍｏｄ Ｎにおける指数は処理の度に毎回変化することになり、電力波形も毎回変化するため消費電力と個人鍵の相関がなくなり、ＤＰＡに対して安全は暗号処理が行える。【００１０】
また、乗算剰余演算器の代わりにモンゴメリ乗算剰余器を用いる方法が開示されている。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特表２００３−５１８８７２号公報
【特許文献２】特開２００６−２７６７８６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
本発明は、電力差分解析を用いた秘密鍵の解読を困難にする回路を備えている場合でも、回路規模が大きくならないようにできる暗号装置を提供することを目的とする。【００１３】
また、電力差分解析を用いた秘密鍵の解読を困難にする処理を有する場合に、処理速度を向上させることができる暗号の方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１４】
本実施態様のひとつである基数を示す暗号データと指数を示す秘密鍵データと法を示す公開鍵データとを用いてべき乗剰余演算により復号データを求める暗号装置は、記憶部、乱数生成部、べき乗剰余演算部を備えている。【００１５】
記憶部は、素数データ各々に対応する指数を示す乱数設定データ各々を用いて、上記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して乗算データを求める。続いて、上記乗算データにより上記秘密鍵データを除算して求めた商を示す第１の鍵データと、上記乗算データにより上記秘密鍵データを除算して求めた余りを示す第２の鍵データと、を予め記憶部に記憶する。【００１６】
乱数生成部は、上記素数データ各々に対応する指数を示す、上記乱数設定データ以下でかつ正の整数である第１の乱数データ各々を用いて、上記素数データ各々に対してべき乗を求める。続いて、乱数生成部は求めたべき乗したデータ各々を乗算して第２の乱数データを求める。続いて、乱数生成部は上記素数データ各々に対応する指数を示す、上記乱数設定データから上記乱数設定データに対応する上記第１の乱数データを減算した減算データ用いて、上記素数データ各々に対してべき乗を求める。続いて、乱数生成部は求めたべき乗したデータ各々を乗算して耐タンパデータを求める。【００１７】
べき乗剰余演算部は、上記第１の鍵データと上記耐タンパデータとを基数に用い、乗算剰余演算において扱える最大ビット幅長から１を減算したデータを法とし、乗算剰余演算をして第１の変数（ｄ’）を求める。あるいは、単に上記第1の鍵データと上記耐タンパデータとを乗算して第1の変数（ｄ‘）を求めてもよい。続いて、べき乗剰余演算部は上記暗号データを基数とし、上記第２の乱数データを指数とし、公開鍵データを法とし、べき乗剰余演算をして第２の変数（ｃ’）を求める。続いて、べき乗剰余演算部は上記第２の変数を基数とし、上記第１の変数を指数とし、公開鍵データを法とし、べき乗剰余演算をして第３の変数（ｔ）を求める。続いて、べき乗剰余演算部は上記暗号データを基数とし、上記第２の鍵データを指数とし、公開鍵データを法とし、べき乗剰余演算をして第４の変数（ｕ）を求める。続いて、べき乗剰余演算部は上記第３の変数と上記第４の変数とを基数に用い、公開鍵データを法とし、乗算剰余演算をして復号データを求める。なお、第２に変数及び第３の変数を求める処理と、第４の変数を求める処理の手順は逆であってもよい。【００１８】
また、べき乗剰余演算部は上記第１の鍵データと上記耐タンパデータを基数に用い、モンゴメリ乗算剰余演算において扱える最大ビット幅長から１を減算したデータを法とし、モンゴメリ乗算剰余演算をして第１の変数（ｄ’）を求める。あるいは、単に上記第1の鍵データと上記耐タンパデータを乗算して第１の変数（ｄ’）を求めてもよい。続いて、べき乗剰余演算部は上記第３の変数と上記第４の変数を基数に用い、公開鍵データを法とし、モンゴメリ乗算剰余演算をして第５の変数（ｍ’）を求める。続いて、べき乗剰余演算部は上記第５の変数と上記モンゴメリパラメータの２乗を基数に用い、公開鍵データを法とし、モンゴメリ乗算剰余演算をして復号データを求める。【００１９】
本実施態様のひとつである暗号データと秘密鍵データと公開鍵データとを用いて点のスカラー倍算演算により復号データを求める暗号装置は、記憶部、乱数生成部、乗算部、点のスカラー倍算演算部を備えている。【００２０】
記憶部は、素数データ各々に対応する指数を示す乱数設定データ各々を用いて、上記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して乗算データを求める。続いて、上記乗算データにより上記秘密鍵データを除算して求めた商を示す第１の鍵データと、上記乗算データにより上記秘密鍵データを除算して求めた余りを示す第２の鍵データと、を予め記憶部に記憶する。【００２１】
乱数生成部は、上記素数データ各々に対応する指数を示す、上記乱数設定データ以下でかつ正の整数である第１の乱数データ各々を用いて、上記素数データ各々に対してべき乗を求める。続いて、乱数生成部は求めたべき乗したデータ各々を乗算して第２の乱数データを求める。続いて、乱数生成部は上記素数データ各々に対応する指数を示す、上記乱数設定データから上記乱数設定データに対応する上記第１の乱数データを減算した減算データ用いて、上記素数データ各々に対してべき乗を求める。続いて、乱数生成部は求めたべき乗したデータ各々を乗算して耐タンパデータを求める。【００２２】
乗算部は、上記第１の鍵データと上記耐タンパデータとを用いて乗算をして第１の変数（ｄ’）を求める。また、モンゴメリ乗算剰余演算部を保有する場合、モンゴメリ乗算剰余演算部は、上記第１の鍵データと上記耐タンパデータを基数に用い、モンゴメリ乗算剰余演算において扱える最大ビット幅長から１を減算したデータを法とし、モンゴメリ乗算剰余演算をして第１の変数（ｄ’）を求める。乗算部、モンゴメリ乗算剰余演算部は点のスカラー倍算部に含まれていることもありうる。【００２３】
点のスカラー倍算演算部は、上記暗号データと上記第２の乱数データとを用いて点のスカラー倍算演算をして第２の変数（ｃ’）を求める。続いて、点のスカラー倍算演算部は上記第２の変数と上記第１の変数とを用いて点のスカラー倍算演算をして第３の変数（ｔ）を求め、上記暗号データと上記第２の鍵データとを用いて点のスカラー倍算演算をして第４の変数（ｕ）を求める。第２の変数及び第３の変数を求める処理と、第４の変数を求める処理は順番が逆であってもよい。続いて、点のスカラー倍算演算部は上記第３の変数と上記第４の変数とを用いて点の加算演算をして復号データを求める。
【発明の効果】
【００２４】
本実施形態によれば、電力差分解析を用いた秘密鍵の解読を困難にする回路を備えている場合でも、回路規模が大きくならないようにできるという効果を奏する。【００２５】
また、電力差分解析を用いた秘密鍵の解読を困難にする処理を有する場合に、処理速度を向上させることができるという効果を奏する。
【図面の簡単な説明】
【００２６】
【図１】暗号装置のハードウェアの一実施例を示す図である。
【図２】制御部の一実施例を示す図である。
【図３】暗号処理に用いるデータの生成処理の動作の一実施例を示すフロー図である。
【図４】事前生成情報のデータ構造の一実施例を示す図である。
【図５】暗号処理の動作の一実施例を示すフロー図である。
【図６】暗号処理情報のデータ構造の一実施例を示す図である。
【図７】実施形態２の制御部の一実施例を示す図である。
【図８】実施形態２の暗号処理の動作の一実施例を示すフロー図である。
【図９】実施形態２の事前生成情報と暗号処理情報のデータ構造の一実施例を示す図である。
【図１０】実施形態３の制御部の一実施例を示す図である。
【図１１】実施形態３の暗号処理の動作の一実施例を示すフロー図である。
【図１２】実施形態３の事前生成情報と暗号処理情報のデータ構造の一実施例を示す図である。
【発明を実施するための形態】
【００２７】
実施形態各々で説明する暗号装置は、電力差分解析（ＤＰＡ）を用いた秘密鍵の解読を困難にするデータランダム化を行う回路を備えている場合でも、回路規模が大きくならないようにできる。また、上記暗号装置で行われる暗号処理をコンピュータで実現する場合には、暗号処理を有するプログラムを、上記コンピュータを用いて実行させてもよい。
【００２８】
なお、暗号装置はintegrated circuit（ＩＣ）カード、認証機能付き組み込み機器などに搭載されるＩＣチップ（集積回路）または回路基板（プリント基板など）などが考えられる。
【００２９】
以下図面に基づいて、実施形態について詳細を説明する。
実施形態１について説明する。
【００３０】
実施形態１は、Rivest Shamir Adleman（ＲＳＡ）暗号を適用した暗号処理を図１のハードウェアに適用したものである。また、ＲＳＡ暗号で用いるべき乗剰余演算は計算量をｌｏｇ２ｄに削減するために、バイナリ法を用いる。
【００３１】
べき乗剰余において、例えば、公開鍵データｎ、暗号データｃ、秘密鍵データｄ全てが１０２４ビット以上の長さを持つ場合（１０２４に限定するものではない）に、べき乗剰余を単純に計算した場合、ｍｏｄ ｎを用いた掛け算をｄ回必要とするが、２１０２４以上の計算量を必要とするため現実的ではない。そこで、この計算量をｌｏｇ２ｄに削減するために、バイナリ法を用いる。べき乗剰余におけるバイナリ法は、ｕビットの秘密鍵データｄをｄ［ｕ−１］|| ・・・ ||ｄ［１］||ｄ［０］と表したとき、秘密鍵データｄのビット値ｄ［ｉ］を上位ビットから下位ビットの順にスキャンする。すなわち、ｉ=ｕ-１からｉ=０の順にスキャンする。ただし、ｄ［ｉ］はｄの最下位からｉ番目のビット値で、ｉ≧０である。なお、「||」はビット列の連結を示す。続いて、秘密鍵データｄのビット値ｄ［ｉ］に応じて、ｄ［ｉ］＝１の場合は２乗算（ｖ：=ｖ×ｖ（ｍｏｄ ｎ））の後に、乗算（ｖ：＝ｖ×ａ（ｍｏｄ ｎ））を実行し、ｄ［ｉ］＝０の場合は、２乗算（ｖ：＝ｖ×ｖ（ｍｏｄ ｎ））のみを実行する。なお、この部分はウィンドウ法などのべき乗剰余演算を高速に処理する一般的なアルゴリズムを用いても構わない。
【００３２】
図１は、暗号装置のハードウェアの一実施例を示す図である。暗号装置が集積回路である場合には、暗号装置は制御部２、記憶部３、通信インタフェース６などを備え、制御部２、記憶部３、通信インタフェース６各々はバス７によりそれぞれ接続される構成が望ましい。
【００３３】
また、暗号装置の回路基板に構築される場合には、制御部２、記憶部３、記録媒体読取装置４、入出力インタフェース５（入出力Ｉ／Ｆ）、通信インタフェース６（通信Ｉ／Ｆ）などを備え、上記した各構成要素はバス７により接続されている構成が望ましい。なお、記録媒体読取装置４は設けなくてもよい。また、入出力インタフェース５または通信インタフェース６のいずれか１つを備えるだけでもよい。
【００３４】
制御部２は、後述する処理部２０１（処理回路）、乱数生成部２０２（乱数生成回路）、べき乗剰余演算部２０３（べき乗剰余演算回路）、乗算剰余演算部２０４（乗剰余演算回路）などを有している。
【００３５】
また、制御部２はCentral Processing Unit（ＣＰＵ）やマルチコアＣＰＵなどを用いることが考えられる。また、制御部２としてプログラマブルなデバイス（Field Programmable Gate Array（ＦＰＧＡ）、Programmable Logic Device（ＰＬＤ）など）を用いてもよい。
【００３６】
記憶部３は、後述する事前生成情報、暗号処理情報などを記憶している。記憶部３は、例えばRead Only Memory（ＲＯＭ）、Ｆｌａｓｈ−ＲＯＭ、Random Access Memory（ＲＡＭ）、ＦｅＲＡＭなどのメモリやハードディスクなどが考えられる。なお、記憶部３にはパラメータ値、変数値などのデータを記録してもよいし、実行時のワークエリアとして用いてもよい。また、記憶部３（ＲＯＭ、Ｆｌａｓｈ−ＲＯＭ、ＦｅＲＡＭなどの不揮発性メモリ）にはプログラムが格納され、実行時に制御部が読み取りながら処理を実行する。
【００３７】
記録媒体読取装置４は、制御部２の制御に従って記録媒体８に対するデータのリード／ライトを制御する。そして、記録媒体８に記録媒体読取装置４の制御で書き込まれたデータを記録させたり、記録媒体８に記録されたデータを読み取らせたりする。また、着脱可能な記録媒体８は、コンピュータで読み取り可能なnon-transitory（非一時的）な記録媒体として、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置（ＨＤＤ）などがある。光ディスクには、Digital Versatile Disc（ＤＶＤ）、ＤＶＤ−ＲＡＭ、Compact Disc Read Only Memory（ＣＤ−ＲＯＭ）、ＣＤ−Ｒ(Recordable)／ＲＷ（ReWritable）などがある。光磁気記録媒体には、Magneto-Optical disk（ＭＯ）などがある。なお、記憶部３もnon-transitory（非一時的）な記録媒体に含まれる。
【００３８】
なお、記録媒体、記録媒体読み取り装置は、必須ではない。
入出力インタフェース５には、パーソナルコンピュータなどの入出力部９が接続され、利用者が入力した情報（例えば、暗号データ、公開鍵データなどのデータ）を受信し、バス７を介して制御部２または記憶部３などに送信する。入出力部９の入力装置は、例えば、キーボード、ポインティングデバイス（マウスなど）、タッチパネルなどが考えられる。なお、入出力部９の出力部であるディスプレイは、例えば、液晶ディスプレイなどが考えられる。また、出力部はCathode Ray Tube（ＣＲＴ）ディスプレイ、プリンタなどの出力装置であってもよい。
【００３９】
通信インタフェース６は、Local Area Network（ＬＡＮ）接続やインターネット接続や無線接続を行うためのインタフェースである。また、通信インタフェース６は必要に応じ、他のコンピュータとの間のＬＡＮ接続やインターネット接続や無線接続を行うためのインタフェースである。また、他の装置に接続され、外部装置からのデータの入出力を制御する。
【００４０】
また、上記に示したハードウェア構成を有するコンピュータを用いることによって、後述する各種処理機能（例えば、図５に示すフロー）を実現してもよい。その場合コンピュータが有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体８に記録しておくことができる。
【００４１】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの記録媒体８が販売される。また、プログラムをサーバコンピュータの記憶装置に記録しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【００４２】
プログラムを実行するコンピュータは、例えば、記録媒体８に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶部３に記録する。そして、コンピュータは、自己の記憶部３からプログラムを読み取り、プログラムに従った処理を実行する。
【００４３】
制御部２について説明する。
図２は、制御部の一実施例を示す図である。図２の制御部２は、処理部２０１（処理回路）、乱数生成部２０２（乱数生成回路）、べき乗剰余演算部２０３（べき乗剰余演算回路）、乗算剰余演算部２０４（乗剰余演算回路）などを有している。
【００４４】
処理部２０１は、入出力インタフェース５または通信インタフェース６を介して暗号データｃと公開鍵データＮを取得し、暗号データｃと公開鍵データＮを記憶部３に記憶する。または事前に記憶部３に暗号データｃと公開鍵データＮが格納されているケースもありうる。
【００４５】
また、処理部２０１が記憶部の３の後述する事前生成情報から乱数設定データｒｐｉ（ｉ＝０〜ｎ：ｎは正の整数）と素数データｐｉ（ｉ＝０〜ｎ：ｎは正の整数）を取得する。また、記憶部３から復号データｍを取得して、入出力インタフェース５または通信インタフェース６を介して復号データｍを出力する。
【００４６】
乱数生成部２０２は、乱数設定データｒｐｉを用いて第１の乱数データｓｉ（ｉ＝０〜ｎ：ｎは正の整数）を生成する。第１の乱数データｓｉの生成は、第１の乱数データｓｉそれぞれに対して０≦ｓｉ≦ｒｐｉを満たす数値とする。続いて、乱数生成部２０２は求めた第１の乱数データｓｉを、処理部２０１を介して記憶部３に記憶する。また、乱数生成部２０２は素数データｐｉと第１の乱数データｓｉとを用いて第２の乱数データｒを生成する。第２の乱数データｒは後述する式２を用いて求める。また、乱数生成部２０２は素数データｐｉと乱数設定データｒｐｉと第１の乱数データｓｉとを用いて耐タンパデータｒ’を生成する。耐タンパデータｒ’は後述する式３を用いて求める。続いて、乱数生成部２０２は求めた耐タンパデータｒ’を記憶部３に記憶する。なお、処理部２０１が耐タンパデータｒ’を生成し、記憶部３に記憶してもよい。
【００４７】
べき乗剰余演算部２０３は、記憶部３の暗号データｃを基数にし、第２の乱数データｒを指数にし、公開鍵データＮを法にして、変数ｃ’（第２の変数）を求める。変数ｃ’は後述する式５を用いて求める。また、べき乗剰余演算部２０３は記憶部３の変数ｃ’を基数にし、変数ｄ’を指数にし、公開鍵データＮを法にして、変数ｔ（第３の変数）を求める。変数ｔは後述する式６を用いて求める。続いて、べき乗剰余演算部２０３は求めた変数ｔを記憶部３に記憶する。また、べき乗剰余演算部２０３は記憶部３の暗号データｃを基数にし、第２の鍵データｄＲを指数にし、公開鍵データＮを法として、変数ｕ（第４の変数）を求める。変数ｕは後述する式７を用いて求める。続いて、べき乗剰余演算部２０３は求めた変数ｕを記憶部３に記憶する。
【００４８】
乗算剰余演算部２０４は、記憶部３の第１の鍵データｄＱと耐タンパデータｒ’を用い、乗算剰余演算部の処理可能なモジュラスのビット長を示すＸを法として、乗算剰余演算を実行して変数ｄ’（第１の変数）を求める。変数ｄ’は式４を用いて求める。なお、処理部がd’をｄＱとr’を乗算して求めてもよい。乗算剰余演算部２０４は、記憶部３の変数ｔと変数ｕを用いて、公開鍵データＮを法として、乗算剰余演算を実行して復号データｍを求める。復号データｍは後述する式８を用いて求める。続いて、乗算剰余演算部２０４は求めた復号データｍを記憶部３に記憶する。
【００４９】
暗号処理に用いるデータの生成処理について説明する。
生成処理は、暗号装置が暗号処理をする際に必要なデータを事前に求める処理で、例えば、コンピュータなどを用いて実行される。該コンピュータは、例えば、パーソナルコンピュータやサーバなどを用いることが考えられる。また、暗号装置内部で事前に処理を行っておいてもよい。
【００５０】
図３は、暗号処理に用いるデータの生成処理の動作の一実施例を示すフロー図である。
ステップＳ３０１では、コンピュータが利用者によって決められた素数データｐｉと乱数設定データｒｐｉを暗号装置１の通信インタフェース６または処理部２０１を介して記憶部３または乱数生成部２０２に出力する。暗号装置内部で処理を行う場合はこの処理は省略される。素数データｐｉ（ｉ＝０〜ｎ：ｎは正の整数）それぞれは素数とする。例えば、ｎ＝３のときｐ０＝２、ｐ１＝３、ｐ２＝５などが考えられる。乱数設定データｒｐｉ（ｉ＝０〜ｎ：ｎは正の整数）それぞれは正の整数とする。例えば、ｎ＝３のときｒｐ０＝３、ｒｐ１＝２、ｒｐ２＝２などが考えられる。
【００５１】
ステップＳ３０２では、コンピュータまたは暗号装置が秘密鍵データｄを生成する。秘密鍵データｄは、例えば、既知の鍵生成アルゴリズムを有するプログラムをコンピュータにより実行させることにより得られる。例えば、秘密鍵データｄとして７０６７などの正の整数が考えられる。
【００５２】
ステップＳ３０３では、コンピュータまたは暗号装置が素数データｐｉと秘密鍵データｄとを用いて第１の鍵データｄＱと第２の鍵データｄＲを生成する。第１の鍵データｄＱと第２の鍵データｄＲは式１で示すことができる。
【００５３】
ｄ＝ｄＱ×（ｐ０ｒｐ０×ｐ１ｒｐ１×ｐ２ｒｐ２×・・・×ｐ２ｒｐｎ）＋ｄＲ  
式１
ｄＱ：ｄ／（ｐ０ｒｐ０×ｐ１ｒｐ１×ｐ２ｒｐ２×・・・×ｐ２ｒｐｎ）の商
ｄＲ：ｄ／（ｐ０ｒｐ０×ｐ１ｒｐ１×ｐ２ｒｐ２×・・・×ｐ２ｒｐｎ）の余り
ｐｉ：素数データ
ｒｐｉ：乱数設定データ
このとき暗号装置で処理を行う場合には、ｐ０ｒｐ０×ｐ１ｒｐ１×ｐ２ｒｐ２×・・・×ｐ２ｒｐｎは事前に計算しておいたものを記憶部に格納しておくことで高速に処理できる。
【００５４】
例えば、秘密鍵データｄ＝７０６７で、素数データｐ０＝２、ｐ１＝３、ｐ２＝５で、乱数設定データｒｐ０＝３、ｒｐ１＝２、ｒｐ２＝２である場合、第１の鍵データｄＱは、７０６７を１８００（＝２３×３２×５２）で除算したときの商３となる。第２の鍵データｄＲは、７０６７を１８００で除算したときの余り１６６７となる。
【００５５】
ステップＳ３０４では、コンピュータが第１の鍵データｄＱと第２の鍵データｄＲを暗号装置１の通信インタフェース６または処理部２０１を介して記憶部３に出力する。
【００５６】
上記生成処理により、暗号装置１の記憶部３または乱数生成部２０２に素数データｐｉと乱数設定データｒｐｉを記憶し、記憶部３に第１の鍵データｄＱと第２の鍵データｄＲが記憶される。
【００５７】
図４は、事前生成情報のデータ構造の一実施例を示す図を示す。
事前生成情報４０１、４０２は、「素数データｐｉ」「乱数設定データｒｐｉ」「第１の鍵データｄＱ」「第２の鍵データｄＲ」に記憶される情報を有している。事前生成情報４０１の「素数データｐｉ」には生成処理において出力された素数データが記憶され、本例では「ｐ０」「ｐ１」「ｐ２」「ｐ３」「ｐ４」「ｐ５」「ｐ６」・・・・が記憶されている。なお、「ｐ０」「ｐ１」「ｐ２」に示されている（＝２）、（＝３）、（＝５）それぞれは、上記説明した３個の素数データｐ０〜ｐ２の値を示している。事前生成情報４０１の「乱数設定データｒｐｉ」には生成処理において出力された乱数設定データが記憶され、本例では「ｒｐ０」「ｒｐ１」「ｒｐ２」「ｒｐ３」「ｒｐ４」「ｒｐ５」「ｒｐ６」・・・・が記憶されている。なお、「ｒｐ０」「ｒｐ１」「ｒｐ２」に示されている（＝３）、（＝２）、（＝２）それぞれは、上記説明した３個の乱数設定データｒｐ０〜ｒｐ２の値を示している。
【００５８】
事前生成情報４０２の「第１の鍵データｄＱ」には生成処理において出力された第１の鍵データが記憶され、本例では「３」が記憶されている。「第２の鍵データｄＲ」には生成処理において出力された第２の鍵データが記憶され、本例では「１６６７」が記憶されている。
【００５９】
なお、本例では記憶部３に事前生成情報４０１、４０２がある場合について説明したが、「素数データｐｉ」「乱数設定データｒｐｉ」に記憶される情報は乱数生成部２０２に記憶してもよい。
【００６０】
暗号処理について説明する。
図５は、暗号処理の動作の一実施例を示すフロー図である。
【００６１】
ステップＳ５０１では、制御部２の処理部２０１が入出力インタフェース５または通信インタフェース６を介して暗号データｃと公開鍵データＮを取得する。例えば、暗号データｃ＝１２３４と公開鍵データＮ＝１０８０７を取得したとする。続いて、処理部２０１は暗号データｃと公開鍵データＮを記憶部３に記憶する。事前に記憶部３にｃ、Ｎが格納されていることもある。図６の暗号処理情報６０１を参照。図６は、暗号処理情報のデータ構造の一実施例を示す図である。図６の暗号処理情報６０１は、「暗号データｃ」「公開鍵データＮ」に記憶される情報を有している。本例では、上記説明した暗号データｃ「１２３４」と公開鍵データＮ「１０８０７」が記憶されている。
【００６２】
ステップＳ５０２では、制御部２の処理部２０１が記憶部の３の事前生成情報４０１から乱数設定データｒｐｉと素数データｐｉを取得する。例えば、乱数設定データｒｐ０＝３、ｒｐ１＝２、ｒｐ２＝２と、素数データｐ０＝２、ｐ１＝３、ｐ２＝５とを取得したとする。
【００６３】
ステップＳ５０３では、制御部２の乱数生成部２０２が乱数設定データｒｐｉを用いて第１の乱数データｓｉ（ｉ＝０〜ｎ：ｎは正の整数）を生成する。第１の乱数データｓｉの生成は、第１の乱数データｓｉそれぞれに対して０≦ｓｉ≦ｒｐｉを満たす数値とする。例えば、乱数設定データがｒｐ０＝３、ｒｐ１＝２、ｒｐ２＝２である場合、第１の乱数データｓ０＝１（０≦ｓ０≦３）、ｓ１＝０（０≦ｓ１≦２）、ｓ２＝２（０≦ｓ２≦２）とすることが考えられる。続いて、乱数生成部２０２は求めた第１の乱数データｓｉを、処理部２０１を介して記憶部３に記憶する。図６の暗号処理情報６０２を参照。図６の暗号処理情報６０２は、「第１の乱数データｓｉ」に記憶される情報を有している。本例では「ｓ０」「ｓ１」「ｓ２」「ｓ３」「ｓ４」「ｓ５」「ｓ６」・・・・が記憶されている。なお、「ｓ０」「ｓ１」「ｓ２」に示されている（＝１）、（＝０）、（＝２）それぞれは、上記説明した３個の第１の乱数データｓ０〜ｓ２の値を示している。
【００６４】
ステップＳ５０４では、制御部２の乱数生成部２０２が素数データｐｉと第１の乱数データｓｉとを用いて第２の乱数データｒを生成する。第２の乱数データｒは式２を用いて求める。
【００６５】
ｒ＝ｐ０ｓ０×ｐ１ｓ１×ｐ２ｓ２×・・・×ｐｎｓｎ      式２
ｒ  ：第２の乱数データ
ｐｉ：素数データ
ｓｉ：第１の乱数データ
例えば、素数データがｐ０＝２、ｐ１＝３、ｐ２＝５で、第１の乱数データがｓ０＝１、ｓ１＝０、ｓ２＝２である場合、２１×３０×５２＝５０を計算して第２の乱数データｒを求まる。続いて、乱数生成部２０２は求めた第２の乱数データｒを記憶部３に記憶する。図６の暗号処理情報６０３を参照。図６の暗号処理情報６０３は、「第２の乱数データｒ」「タンパデータｒ’」「変数ｄ’」「変数ｃ’」「変数ｔ」「変数ｕ」「復号データｍ」に記憶される情報を有している。本例では「第２の乱数データｒ」「タンパデータｒ’」「変数ｄ’」「変数ｃ’」「変数ｔ」「変数ｕ」「復号データｍ」に対応する「５０」「３６」「１０８」「１００００」「２８２９」「９２００」「３５４４」が記憶されている。「第２の乱数データｒ」は、ステップＳ５０４で求めた第２の乱数データｒが記憶される。「耐タンパデータｒ’」「変数ｄ’」「変数ｃ’」「変数ｔ」「変数ｕ」「復号データｍ」それぞれに記憶する情報については後述する。
【００６６】
ステップＳ５０５では、乱数生成部２０２または処理部２０１が素数データｐｉと乱数設定データｒｐｉと第１の乱数データｓｉとを用いて耐タンパデータｒ’を生成する。耐タンパデータｒ’は式３を用いて求める。
【００６７】
ｒ’＝ｐ０ｒｐ０−ｓ０×ｐ１ｒｐ１−ｓ１×ｐ２ｒｐ２−ｓ２×
・・・×ｐｎｒｐｎ−ｓｎ    式３
ｒ’：耐タンパデータ
ｐｉ：素数データ
ｓｉ：第１の乱数データ
ｒｐｉ：乱数設定データ
例えば、素数データがｐ０＝２、ｐ１＝３、ｐ２＝５で、第１の乱数データがｓ０＝１、ｓ１＝０、ｓ２＝２で、乱数設定データｒｐ０＝３、ｒｐ１＝２、ｒｐ２＝２である場合、２３−１×３２−０×５２−２＝３６を計算して耐タンパデータｒ’が求まる。続いて、乱数生成部２０２または処理部２０１は求めた耐タンパデータｒ’を記憶部３に記憶する。図６の暗号処理情報６０３の「耐タンパデータｒ’」にステップＳ５０５で求めた「３６」を記憶する。
【００６８】
ステップＳ５０６では、制御部２の乗算剰余演算部２０４が記憶部３の第１の鍵データｄＱと耐タンパデータｒ’を用いて、変数ｄ’を求める。変数ｄ’は式４を用いて求める。
【００６９】
ｄ’＝ｄＱ×ｒ’ｍｏｄＸ            式４
ｄＱ：第１の鍵データ
ｒ’：耐タンパデータ
【００７０】
【数１】
2013065117.tif 000003
【００７１】
例えば、第１の鍵データｄＱが３で、耐タンパデータｒ’が３６である場合に、乗算剰余演算部２０４の処理可能なモジュラス（公開鍵データＮ：法）のビット長が１６ビットであるときは、３×３６ ｍｏｄ ０ｘＦＦＦＦ＝１０８を計算して変数ｄ’を求める。ここで、０ｘＦＦＦＦは２１６−１を１６進数で表した数である。続いて、乗算剰余演算部２０４は求めた変数ｄ’を記憶部３に記憶する。ｄ'は処理部において、ｄＱとｒ'を乗算して求めてもよい。図６の暗号処理情報６０３の「変数ｄ’」にステップＳ５０６で求めた「１０８」を記憶する。
【００７２】
ステップＳ５０７では、制御部２のべき乗剰余演算部２０３が記憶部３の暗号データｃと第２の乱数データｒと公開鍵データＮを用いて、変数ｃ’を求める。変数ｃ’は式５を用いて求める。
【００７３】
ｃ’＝ｃｒｍｏｄ Ｎ            式５
ｃ：暗号データ
ｒ：第２の乱数データ
Ｎ：公開鍵データ
例えば、暗号データｃが１２３４で、第２の乱数データｒが５０で、公開鍵データＮが１０８０７ある場合は、べき乗剰余演算部２０３が（１２３４）５０ｍｏｄ １０８０７＝１００００を計算して変数ｃ’を求める。続いて、べき乗剰余演算部２０３は求めた変数ｃ’を記憶部３に記憶する。図６の暗号処理情報６０３の「変数ｃ’」にステップＳ５０７で求めた「１０００」を記憶する。
【００７４】
ステップＳ５０８では、制御部２のべき乗剰余演算部２０３が記憶部３の変数ｃ’と変数ｄ’と公開鍵データＮを用いて、変数ｔを求める。変数ｔは式６を用いて求める。
【００７５】
ｔ＝（ｃ’）ｄ’ｍｏｄ Ｎ        式６
Ｎ：公開鍵データ
例えば、変数ｃ’が１００００で、変数ｄ’が１０８で、公開鍵データＮが１０８０７である場合は、べき乗剰余演算部２０３が（１００００）１０８ｍｏｄ １０８０７＝２８２９を計算して変数ｔを求める。続いて、べき乗剰余演算部２０３は求めた変数ｔを記憶部３に記憶する。図６の暗号処理情報６０３の「変数ｔ」にステップＳ５０８で求めた「１０００」を記憶する。
【００７６】
ステップＳ５０９では、制御部２のべき乗剰余演算部２０３が記憶部３の暗号データｃと第２の鍵データｄＲと公開鍵データＮを用いて、変数ｕを求める。変数ｕは式７を用いて求める。
【００７７】
ｕ＝ｃｄＲｍｏｄ Ｎ              式７
ｃ  ：暗号データ
ｄＲ：第２の鍵データ
Ｎ  ：公開鍵データ
例えば、暗号データｃが１２３４で、第２の鍵データｄＲが１６６７で、公開鍵データＮが１０８０７である場合は、べき乗剰余演算部２０３が（１２３４）１６６７ｍｏｄ １０８０７＝９２００を計算して変数ｕを求める。続いて、べき乗剰余演算部２０３は求めた変数ｕを記憶部３に記憶する。図６の暗号処理情報６０３の「変数ｕ」にステップＳ５０９で求めた「９２００」を記憶する。
ステップＳ５０２〜Ｓ５０８とＳ５０９は順番を入れ替えてもよい。
【００７８】
ステップＳ５１０では、制御部２の乗算剰余演算部２０４が記憶部３の変数ｔと変数ｕと公開鍵データＮを用いて、復号データｍを求める。復号データｍは式８を用いて求める。
【００７９】
ｍ＝ｔ×ｕ ｍｏｄ Ｎ              式８
Ｎ：公開鍵データ
例えば、変数ｔが２８２９で、変数ｕが９２００で、公開鍵データＮが１０８０７である場合は、乗算剰余演算部２０４が（２８２９×９２００）ｍｏｄ １０８０７＝３５４４を計算して復号データｍを求める。続いて、乗算剰余演算部２０４は求めた復号データｍを記憶部３に記憶する。図６の暗号処理情報６０３の「復号データｍ」にステップＳ５１０で求めた「３５４４」を記憶する。
【００８０】
ステップＳ５１１では、制御部２が記憶部３から復号データｍを取得して、入出力インタフェース５または通信インタフェース６を介して復号データｍを出力する。
【００８１】
実施形態１によれば、上記復号データ３５４４は、１２３４７０６７ｍｏｄ １０８０７を直接計算した結果と一致する。また、暗号処理の度に異なる第１の乱数データｓｉ（上記ｓ０、ｓ１、ｓ２）が生成されるため、上記処理が毎回異なる途中結果を得ることになるため、電力差分解析（ＤＰＡ）に対して安全な処理が実現できる。
【００８２】
さらに、実施形態１の暗号装置は、電力差分解析（ＤＰＡ）を用いた秘密鍵の解読を困難にするデータランダム化を行う回路を備えている場合でも、除算処理を行う回路を用いないため回路規模が大きくならないようにできる。
【００８３】
また、コンピュータを用いた場合においても除算処理を行わないため処理速度を向上させることができる。
【００８４】
なお、実施形態１の手法は、べき乗剰余演算の高速処理手法であるChinese Remainder Theorem（ＣＲＴ）を用いる場合においても適用できる。
【００８５】
実施形態２について説明する。
実施形態２は、実施形態１の乗算剰余演算部２０４をモンゴメリ乗算剰余演算部７０１にした構成である。実施形態２の暗号処理は実施形態１で説明したハードウェアにモンゴメリ乗算剰余演算を適用したものである。実施形態２の制御部２は、後述する処理部２０１（処理回路）、乱数生成部２０２（乱数生成回路）、べき乗剰余演算部２０３（べき乗剰余演算回路）、モンゴメリ乗算剰余演算部７０１（モンゴメリ乗算剰余演算回路）などを有している。記憶部３は、後述する事前生成情報、暗号処理情報などを記憶している。
【００８６】
また、上記に示したハードウェア構成を有するコンピュータを用いることによって、後述する各種処理機能（例えば、図８に示すフロー）を実現してもよい。
【００８７】
実施形態２の制御部２について説明する。
図７は、実施形態２の制御部の一実施例を示す図である。
【００８８】
図７の処理部２０１は、実施形態１で説明した処理部２０１と同じ処理を行う。
図７の乱数生成部２０２は、実施形態１で説明した乱数生成部２０２と同じ処理を行う。
【００８９】
図７のべき乗剰余演算部２０３は、記憶部３の暗号データｃを基数にし、第２の乱数データｒを指数にし、公開鍵データＮを法にして、変数ｃ’（第２の変数）を求める。変数ｃ’は後述する式１２を用いて求める。続いて、べき乗剰余演算部２０３は求めた変数ｃ’を記憶部３に記憶する。
【００９０】
また、べき乗剰余演算部２０３は記憶部３の変数ｃ’を基数にし、変数ｄ’を指数にし、公開鍵データＮを法にして、変数ｔ（第３の変数）を求める。変数ｔは後述する式１３を用いて求める。続いて、べき乗剰余演算部２０３は求めた変数ｔを記憶部３に記憶する。
【００９１】
また、べき乗剰余演算部２０３が記憶部３の暗号データｃを基数にし、第２の鍵データｄＲを指数にし、公開鍵データＮを法にして、変数ｕ（第４の変数）を求める。変数ｕは後述する式１４を用いて求める。続いて、べき乗剰余演算部２０３は求めた変数ｕを記憶部３に記憶する。
【００９２】
図７のモンゴメリ乗算剰余演算部７０１（モンゴメリ乗算剰余演算回路）は、記憶部３の第１の鍵データｄＱと耐タンパデータｒ’とＸを用いて、変数ｄ’（第１の変数）を求める。Ｘは
2013065117.tif 000004
を示すデータである。変数ｄ’は後述する式１１を用いて求める。続いて、モンゴメリ乗算剰余演算部７０１は求めた変数ｄ’を記憶部３に記憶する。
【００９３】
また、モンゴメリ乗算剰余演算部７０１は、記憶部３の変数ｔと変数ｕと公開鍵データＮを用いて、変数ｍ’（第５の変数）を求める。変数ｍ’は後述する式１５を用いて求める。続いて、モンゴメリ乗算剰余演算部７０１は求めた変数ｍ’を記憶部３に記憶する。
【００９４】
また、モンゴメリ乗算剰余演算部７０１が記憶部３の変数ｍ’とＲ２と公開鍵データＮを用いて、復号データｍを求める。復号データｍは後述する式１６を用いて求める。Ｒ２はモンゴメリパラメータＲを２乗した値である。続いて、モンゴメリ乗算剰余演算部７０１は求めた復号データｍを記憶部３に記憶する。
【００９５】
実施形態２の生成処理は実施形態１で説明した処理と同じである。
実施形態２の暗号処理について説明する。
【００９６】
図８は、実施形態２の暗号処理の動作の一実施例を示すフロー図である。
ステップＳ８０１では、制御部２の処理部２０１が入出力インタフェース５または通信インタフェース６を介して暗号データｃと公開鍵データＮを取得する。例えば、暗号データｃ＝４０２３９と公開鍵データＮ＝５５６８７を取得したとする。続いて、処理部２０１は暗号データｃと公開鍵データＮを記憶部３の暗号処理情報に記憶する。ｃ、Ｎは事前に記憶部３に記憶されていることもありうる。図９の暗号処理情報９０３を参照。図９は、実施形態２の事前生成情報と暗号処理情報のデータ構造の一実施例を示す図である。図９の暗号処理情報９０３は、「暗号データｃ」「公開鍵データＮ」に記憶される情報を有している。本例では、上記説明した暗号データｃ「４０２３９」と公開鍵データＮ「５５６８７」が記憶されている。
【００９７】
ステップＳ８０２では、制御部２の処理部２０１が記憶部３の事前生成情報から乱数設定データｒｐｉと素数データｐｉを取得する。例えば、乱数設定データｒｐ０＝３、ｒｐ１＝２、ｒｐ２＝２、ｒｐ３＝１と、素数データｐ０＝２、ｐ１＝３、ｐ２＝５、ｐ３＝７とを取得したとする。図９の事前生成情報９０１を参照。事前生成情報９０１は、「素数データｐｉ」「乱数設定データｒｐｉ」に記憶される情報を有している。事前生成情報９０１の「素数データｐｉ」には生成処理において出力された素数データが記憶され、本例では「ｐ０」「ｐ１」「ｐ２」「ｐ３」「ｐ４」「ｐ５」「ｐ６」・・・・が記憶されている。なお、「ｐ０」「ｐ１」「ｐ２」「ｐ３」に示されている（＝２）、（＝３）、（＝５）、（＝７）それぞれは、上記説明した４個の素数データｐ０〜ｐ３の値を示している。事前生成情報９０１の「乱数設定データｒｐｉ」には生成処理において出力された乱数設定データが記憶され、本例では「ｒｐ０」「ｒｐ１」「ｒｐ２」「ｒｐ３」「ｒｐ４」「ｒｐ５」「ｒｐ６」・・・・が記憶されている。なお、「ｒｐ０」「ｒｐ１」「ｒｐ２」「ｒｐ３」に示されている（＝３）、（＝２）、（＝２）、（＝１）それぞれは、上記説明した４個の乱数設定データｒｐ０〜ｒｐ３の値を示している。
【００９８】
ステップＳ８０３では、制御部２の乱数生成部２０２が乱数設定データｒｐｉを用いて第１の乱数データｓｉ（ｉ＝０〜ｎ：ｎは正の整数）を生成する。第１の乱数データｓｉの生成は、第１の乱数データｓｉそれぞれに対して０≦ｓｉ≦ｒｐｉを満たす数値とする。例えば、乱数設定データがｒｐ０＝３、ｒｐ１＝２、ｒｐ２＝２、ｒｐ３＝１である場合、第１の乱数データｓ０＝２（０≦ｓ０≦３）、ｓ１＝１（０≦ｓ１≦２）、ｓ２＝０（０≦ｓ２≦２）、ｓ３＝１（０≦ｓ２≦２）とすることが考えられる。続いて、乱数生成部２０２は求めた第１の乱数データｓｉを、処理部２０１を介して記憶部３に記憶する。図９の暗号処理情報９０４を参照。図９の暗号処理情報９０４は、「第１の乱数データｓｉ」に記憶される情報を有している。本例では「ｓ０」「ｓ１」「ｓ２」「ｓ３」「ｓ４」「ｓ５」「ｓ６」・・・・が記憶されている。なお、「ｓ０」「ｓ１」「ｓ２」「ｓ３」に示されている（＝２）、（＝１）、（＝０）、（＝１）それぞれは、上記説明した４個の第１の乱数データｓ０〜ｓ３の値を示している。
【００９９】
ステップＳ８０４では、制御部２の乱数生成部２０２が素数データｐｉと第１の乱数データｓｉとを用いて第２の乱数データｒを生成する。第２の乱数データｒは式９を用いて求める。
【０１００】
ｒ＝ｐ０ｓ０×ｐ１ｓ１×ｐ２ｓ２×・・・×ｐｎｓｎ    式９
ｒ  ：第２の乱数データ
ｐｉ：素数データ
ｓｉ：第１の乱数データ
例えば、素数データがｐ０＝２、ｐ１＝３、ｐ２＝５、ｐ３＝７で、第１の乱数データがｓ０＝２、ｓ１＝１、ｓ２＝０、ｓ３＝１である場合、２２×３１×５０×７１＝８４を計算して第２の乱数データｒを求まる。続いて、乱数生成部２０２は求めた第２の乱数データｒを記憶部３に記憶する。図９の暗号処理情報９０５を参照。図９の暗号処理情報９０５は、「第２の乱数データｒ」「耐タンパデータｒ’」「変数ｄ’」「変数ｃ’」「変数ｔ」「変数ｕ」「変数ｍ’」「復号データｍ」に記憶される情報を有している。本例では「第２の乱数データｒ」「耐タンパデータｒ’」「変数ｄ’」「変数ｃ’」「変数ｔ」「変数ｕ」「変数ｍ’」「復号データｍ」に対応する「８４」「１５０」「３００」「２２９５０」「４５００７」「５９８５」「４１１２３」「８８７６」が記憶されている。「第２の乱数データｒ」は、ステップＳ８０４で求めた第２の乱数データｒが記憶される。「耐タンパデータｒ’」「変数ｄ’」「変数ｃ’」「変数ｔ」「変数ｕ」「変数ｍ’」「復号データｍ」それぞれに記憶する情報については後述する。
【０１０１】
ステップＳ８０５では、乱数生成部２０２または処理部２０１が素数データｐｉと乱数設定データｒｐｉと第１の乱数データｓｉとを用いて耐タンパデータｒ’を生成する。耐タンパデータｒ’は式１０を用いて求める。
【０１０２】
ｒ’＝ｐ０ｒｐ０−ｓ０×ｐ１ｒｐ１−ｓ１×ｐ２ｒｐ２−ｓ２×
・・・×ｐｎｒｐｎ−ｓｎ    式１０
ｒ’：耐タンパデータ
ｐｉ：素数データ
ｓｉ：第１の乱数データ
ｒｐｉ：乱数設定データ
例えば、素数データがｐ０＝２、ｐ１＝３、ｐ２＝５、ｐ３＝７で、第１の乱数データがｓ０＝２、ｓ１＝１、ｓ２＝０、ｓ３＝１で、乱数設定データがｒｐ０＝３、ｒｐ１＝２、ｒｐ２＝２、ｒｐ３＝１である場合について説明する。乱数生成部２０２または処理部２０１は、２３−２×３２−１×５２−０×７１−１＝１５０を計算して耐タンパデータｒ’が求まる。続いて、乱数生成部２０２または処理部２０１は求めた耐タンパデータｒ’を記憶部３に記憶する。図９の暗号処理情報９０５の「耐タンパデータｒ’」にステップＳ８０５で求めた「１５０」を記憶する。
【０１０３】
ステップＳ８０６では、制御部２のモンゴメリ乗算剰余演算部７０１が記憶部３の第１の鍵データｄＱと耐タンパデータｒ’を用いて、変数ｄ’を求める。変数ｄ’は式１１を用いて求める。
【０１０４】
ｄ’＝ｄＱ×ｒ’×（Ｒ−１ｍｏｄ Ｘ）ｍｏｄ Ｘ      式１１
ｄＱ：第１の鍵データ
ｒ’：耐タンパデータ
Ｒ  ：モンゴメリパラメータ
【０１０５】
【数２】
2013065117.tif 000005
【０１０６】
例えば、第１の鍵データｄＱが２で、耐タンパデータｒ’が１５０である場合に、モンゴメリ乗算剰余演算部７０１の処理可能なモジュラス（公開鍵データＮ：法）のビット長が１６ビットであるときは、２×１５０×１ ｍｏｄ ０ｘＦＦＦＦ＝３００を計算して変数ｄ’を求める。ここで、（Ｒ−１ｍｏｄ Ｘ）の計算結果は１であり、０ｘＦＦＦＦは２１６−１を１６進数で表した数である。続いて、モンゴメリ乗算剰余演算部７０１は求めた変数ｄ’を記憶部３に記憶する。図９の暗号処理情報９０５の「変数ｄ’」にステップＳ８０６で求めた「３００」を記憶する。
【０１０７】
なお、第１の鍵データｄＱは記憶部３の事前生成情報９０２から取得する。事前生成情報９０２は「第１の鍵データｄＱ」「第２の鍵データｄＲ」に記憶される情報を有している。事前生成情報９０２の「第１の鍵データｄＱ」には生成処理において出力された第１の鍵データが記憶され、本例では「２」が記憶されている。「第２の鍵データｄＲ」には生成処理において出力された第２の鍵データが記憶され、本例では「１１６１１」が記憶されている。
【０１０８】
ステップＳ８０７では、制御部２のべき乗剰余演算部２０３が記憶部３の暗号データｃと第２の乱数データｒと公開鍵データＮを用いて、変数ｃ’を求める。変数ｃ’は式１２を用いて求める。
【０１０９】
ｃ’＝ｃｒｍｏｄ Ｎ                式１２
ｃ：暗号データ
ｒ：第２の乱数データ
Ｎ：公開鍵データ
例えば、暗号データｃが４０２３９で、第２の乱数データｒが８４で、公開鍵データＮが５５６８７である場合は、べき乗剰余演算部２０３が（４０２３９）８４ｍｏｄ ５５６８７＝２２９５０を計算して変数ｃ’を求める。続いて、べき乗剰余演算部２０３は求めた変数ｃ’を記憶部３に記憶する。図９の暗号処理情報９０５の「変数ｃ’」にステップＳ８０７で求めた「２２９５０」を記憶する。
【０１１０】
ステップＳ８０８では、制御部２のべき乗剰余演算部２０３が記憶部３の変数ｃ’と変数ｄ’と公開鍵データＮを用いて、変数ｔを求める。変数ｔは式１３を用いて求める。
【０１１１】
ｔ＝（ｃ’）ｄ’ｍｏｄ Ｎ            式１３
Ｎ：公開鍵データ
例えば、変数ｃ’が２２９５０で、変数ｄ’が３００で、公開鍵データＮが５５６８７である場合は、べき乗剰余演算部２０３が（２２９５０）３００ｍｏｄ ５５６８７＝４５００７を計算して変数ｔを求める。続いて、べき乗剰余演算部２０３は求めた変数ｔを記憶部３に記憶する。図９の暗号処理情報９０５の「変数ｔ」にステップＳ８０８で求めた「４５００７」を記憶する。
【０１１２】
ステップＳ８０９では、制御部２のべき乗剰余演算部２０３が記憶部３の暗号データｃと第２の鍵データｄＲと公開鍵データＮを用いて、変数ｕを求める。変数ｕは式１４を用いて求める。
【０１１３】
ｕ＝ｃｄＲｍｏｄ Ｎ                  式１４
ｃ  ：暗号データ
ｄＲ：第２の鍵データ
Ｎ  ：公開鍵データ
例えば、暗号データｃが４０２３９で、第２の鍵データｄＲが１１６１１で、公開鍵データＮが５５６８７である場合は、べき乗剰余演算部２０３が（４０２３９）１１６１１ｍｏｄ ５５６８７＝５９８５を計算して変数ｕを求める。続いて、べき乗剰余演算部２０３は求めた変数ｕを記憶部３に記憶する。図９の暗号処理情報９０５の「変数ｕ」にステップＳ８０９で求めた「５９８５」を記憶する。
【０１１４】
ここでステップＳ８０９はＳ８０２〜Ｓ８０８と順序を入れ替えてもよい。
ステップＳ８１０では、制御部２のモンゴメリ乗算剰余演算部７０１が記憶部３の変数ｔと変数ｕと公開鍵データＮを用いて、変数ｍ’を求める。変数ｍ’は式１５を用いて求める。
【０１１５】
ｍ’＝ｔ×ｕ×（Ｒ−１ｍｏｄ Ｎ）ｍｏｄ Ｎ      式１５
Ｎ：公開鍵データ
Ｒ：モンゴメリパラメータ
例えば、変数ｔが４５００７で、変数ｕが５９８５で、公開鍵データＮが５５６８７で、モンゴメリパラメータＲが２１６＝０ｘ１００００（１６進数）ある場合は、モンゴメリ乗算剰余演算部７０１が変数ｍ’を求める。変数ｍ’は４５００７×５９８５×２１７０６ ｍｏｄ ５５６８７＝４１１２３を計算して求める。ここで、Ｒ−１（ｍｏｄ Ｎ）は２１７０６である。続いて、モンゴメリ乗算剰余演算部７０１は求めた変数ｍ’を記憶部３に記憶する。図９の暗号処理情報９０５の「変数ｍ’」にステップＳ８１０で求めた「４１１２３」を記憶する。
【０１１６】
ステップＳ８１１では、制御部２のモンゴメリ乗算剰余演算部７０１が記憶部３の変数ｍ’とモンゴメリパラメータの２乗であるＲ２ｍｏｄ Ｎと公開鍵データＮを用いて、復号データｍを求める。復号データｍは式１６を用いて求める。
【０１１７】
ｍ＝ｍ’×Ｒ２ｍｏｄ Ｎ×（Ｒ−１ｍｏｄ Ｎ）ｍｏｄ Ｎ      式１６
Ｎ：公開鍵データ
Ｒ：モンゴメリパラメータ
例えば、変数ｍ’が４１１２３で、公開鍵データＮが１０８０７で、モンゴメリパラメータＲが２１６＝０ｘ１００００（１６進数）である場合、復号データｍは８８７６となる。モンゴメリ乗算剰余演算部７０１は４１１２３×５１７３４×２１７０６ ｍｏｄ ５５６８７＝８８７６を計算して復号データｍを求める。Ｒ２ｍｏｄ Ｎは５１７３４で、（Ｒ−１ｍｏｄ Ｎ）は２１７０６である。続いて、モンゴメリ乗算剰余演算部７０１は求めた復号データｍを記憶部３に記憶する。図９の暗号処理情報９０５の「復号データｍ」にステップＳ８１０で求めた「８８７６」を記憶する。
【０１１８】
ここで、ステップＳ８１０、ステップＳ８１１について、乗算の可換性により、
Ｓ８１０：ｍ’＝ｔ×Ｒ２×（Ｒ−１ｍｏｄ Ｎ）ｍｏｄ Ｎ
Ｓ８１１：ｍ＝ｍ’×ｕ×（Ｒ−１ｍｏｄ Ｎ）ｍｏｄ Ｎ
あるいは、
Ｓ８１０：ｍ＝ｕ×Ｒ２×（Ｒ−１ｍｏｄ Ｎ）ｍｏｄ Ｎ
Ｓ８１１：ｍ＝ｍ’×ｔ×（Ｒ−１ｍｏｄ Ｎ）ｍｏｄ Ｎ
のような順番で計算してもよい。
【０１１９】
ステップＳ８１２では、制御部２が記憶部３から復号データｍを取得して、入出力インタフェース５または通信インタフェース６を介して復号データｍを出力する。
【０１２０】
なお、モンゴメリ乗算剰余演算では（１）ｍｏｄ Ｘと（２）Ｒ−１ｍｏｄ Ｘが計算に現れる。そこで、（１）のｍｏｄ Ｘについては、Ｘとして取り扱える最大値を２２０４８−１や、２１０２４−１、２５１２−１などを使用する。すなわち、ｍｏｄ Ｘは無いことと同じになる。
【０１２１】
（２）Ｒ−１ ｍｏｄ Ｘについては、本来はｄｄ＝ｄＱ×ｒ’×（Ｒ−１ｍｏｄ Ｘ）ｍｏｄ Ｘを計算し、その後、Ｒ−１ｍｏｄ Ｎが掛かってしまった影響を打ち消すために、ｄｄ×Ｒ２ｍｏｄ Ｘ×（Ｒ−１ｍｏｄ Ｘ）ｍｏｄ Ｘ＝（ｄＱ×ｒ’×Ｒ−１）ｍｏｄ Ｘ×Ｒ２ｍｏｄ Ｘ×Ｒ−１ｍｏｄ Ｘ ｍｏｄ Ｘ＝ｄＱ×ｒ’ｍｏｄ Ｘと計算するのが一般的であるが、Ｘ＝「取り扱える最大値」とした場合にはＲ−１ｍｏｄ Ｘ＝１となるため、そもそもＲ−１をかけた影響が無い。そこで、影響を打ち消す演算を省略している。ただし、ステップＳ８１０とＳ８１１ではｍｏｄ Ｘではなくｍｏｄ Ｎを用いて計算しなければならない。
【０１２２】
実施形態２によれば、上記復号データ８８７６は、４０２３９３６８１１ｍｏｄ ５５６８７を直接計算した結果と一致する。また、暗号処理の度に異なる第１の乱数データｓｉ（上記ｓ０、ｓ１、ｓ２、ｓ３）が生成されるため、上記処理が毎回異なる途中結果を得ることになるため、電力差分解析（ＤＰＡ）に対して安全な処理が実現できる。
【０１２３】
さらに、実施形態２の暗号装置は、電力差分解析（ＤＰＡ）を用いた秘密鍵の解読を困難にするデータランダム化を行う回路を備えている場合でも、除算処理を行う回路を用いないため回路規模が大きくならないようにできる。
【０１２４】
また、コンピュータを用いた場合においても除算処理を行わないため処理速度を向上させることができる。
【０１２５】
なお、実施形態２の手法は、べき乗剰余演算の高速処理手法であるChinese Remainder Theorem（ＣＲＴ）を用いる場合においても適用できる。
【０１２６】
実施形態３の制御部２について説明する。
実施形態３は、楕円曲線暗号を適用した暗号処理を図１のハードウェアに適用したものである。また、楕円曲線暗号で用いる点のスカラー倍算にバイナリ法を用いる。例えば、個人鍵ｄ（秘密鍵データ）が１６０ビットである場合、秘密鍵データｄは非常に大きな数（例えば、２１６０に近い数）である場合、スカラー倍算を実行することは、非常に多くの回数の点の加算演算をともなうため、非現実的である。そこで、バイナリ法を用いてスカラー倍算の計算量のオーダを秘密鍵データｄのビット数のオーダに抑える。点のスカラー倍算におけるバイナリ法は、秘密鍵データｄのビット長をｕとする。また、秘密鍵データｄのｉビット目をｄ［ｉ］と表記する（０≦ｉ≦ｕ−１）。ｄ［０］が最下位ビットでありｄ［ｕ−１］が最上位ビットである。これにより、ｕビットの秘密鍵データｄは、べき乗剰余演算の場合と同様に、前述したｄ［ｕ−１］|| ・・・ ||ｄ［１］||ｄ［０］のように表現される。なお、「||」はビット列の連結を示す。すると、楕円曲線上の点をＡと秘密鍵データｄを用いて表される楕円曲線上の点Ｖ＝ｄＡと、ｄ［ｕ−１］|| ・・・ ||ｄ［１］||ｄ［０］により、ｄＡ＝２ｕ−１ｄ［ｕ−１］Ａ＋・・・＋２１ｄ［１］Ａ＋２０ｄ［０］Ａが得られる。
【０１２７】
スカラー倍算で用いるバイナリ法においては、秘密鍵データｄのビット値ｄ［ｉ］を上位ビットから下位ビットの順にスキャンする。すなわち、ｉ=ｕ-１からｉ=０の順にスキャンし、秘密鍵データｄのビット値ｄ［ｉ］に応じて、ｄ［ｉ］＝１の場合は２倍算（ｖ：＝２×ｖ）の後に、加算（ｖ：＝ｖ＋Ａ）を実行し、ｄ［ｉ］＝０の場合は２倍算（ｖ：＝２×ｖ)のみを実行する。ただし、ｄ［ｉ］はｄの最下位からｉ番目のビット値で、ｉ≧０である。なお、バイナリ法の他にウインドウ法や符号付バイナリ法、符号付ウィンドウ法など、一般的な点のスカラー倍算高速演算手法を用いてもよい。
【０１２８】
実施形態３の制御部２は、後述する処理部２０１（処理回路）、乱数生成部２０２（乱数生成回路）、点のスカラー倍算１００１（点のスカラー倍算演算回路）、点の加算演算部１００２（点の加算演算回路）、乗算部１００３（乗算回路）などを有している。記憶部３は、後述する事前生成情報、暗号処理情報などを記憶している。
【０１２９】
乗算部１００３は点のスカラー倍算部の中に含まれていることもありうる。また、乗算部の代わりにモンゴメリ乗算剰余演算部が含まれていることもある。
【０１３０】
また、上記に示したハードウェア構成を有するコンピュータを用いることによって、後述する各種処理機能（例えば、図１１に示すフロー）を実現してもよい。
【０１３１】
図１０は、実施形態３の制御部の一実施例を示す図である。
図１０の処理部２０１は、実施形態１および２で説明した処理部２０１と同じ処理を行う。
【０１３２】
図１０の乱数生成部２０２は、実施形態１および２で説明した乱数生成部２０２と同じ処理を行う。
【０１３３】
図１０の点のスカラー倍算１００１（点のスカラー倍算演算回路）は、記憶部３の暗号データｃと第２の乱数データｒを用いて、変数ｃ’（第２の変数）を求める。変数ｃ’は後述する式２０を用いて求める。続いて、点のスカラー倍算演算部１００１は求めた変数ｃ’を記憶部３に記憶する。
【０１３４】
また、点のスカラー倍算演算部１００１は記憶部３の変数ｃ’と変数ｄ’を用いて、変数ｔ（第３の変数）を求める。変数ｔは後述する式２１を用いて求める。続いて、点のスカラー倍算演算部１００１は求めた変数ｔを記憶部３に記憶する。
【０１３５】
また、点のスカラー倍算演算部１００１は記憶部３の暗号データｃと第２の鍵データｄＲを用いて、変数ｕ（第４の変数）を求める。変数ｕは後述する式２２を用いて求める。続いて、点のスカラー倍算演算部１００１は求めた変数ｕを記憶部３に記憶する。
【０１３６】
点のスカラー倍算は、楕円曲線上の点Ａ、スカラー値ｄから、Ｖ＝ｄＡにより与えられる楕円曲線上の点Ｖを計算する演算である。例えば、点の加算、点の減算、点の２倍算を組み合わせることで行うもので楕円曲線暗号における基本的な演算方法である。
【０１３７】
楕円曲線ついて説明する。以下に示すｘ，ｙの関係式を楕円曲線と呼ぶ。楕円曲線は、主に素体と２べきの２種類からなる。楕円曲線を一意に決定するためのパラメータａ，ｂを楕円曲線パラメータと呼ぶ。
【０１３８】
楕円曲線（素体）：ｙ２＝ｘ３＋ａｘ＋ｂ（ｍｏｄ ｐ）
ｐ    ：素数
ａ、ｂ：楕円曲線パラメータ（０≦ａ、b＜p)
楕円曲線（２べき）：ｙ＋ｘｙ＝ｘ３＋ａｘ２＋ｂ（ｍｏｄ f(x))
Ｆ    ：ＧＦ（２ｍ）の多項式
ａ、ｂ：楕円曲線パラメータ（ａ、ｂIＧＦ（２ｍ）)。
【０１３９】
楕円曲線上の点は、楕円曲線で表される関係式を満たす（ｘ，ｙ）であり、素体の場合０≦ｘ，ｙ＜ｐである整数ｘ，ｙの集合であり、２べきの場合はｘ，ｙI ＧＦ（２ｍ)を満たす要素ｘ，ｙの集合である。また、Ａ＝（ｘ，ｙ）で表される点Ａについて、ｘを点Ａのｘ座標、ｙを点Ａのｙ座標とそれぞれ呼ぶ。また、楕円曲線上の点の一つは、無限遠点と呼ばれる特殊な点である。「楕円曲線上の点」の表現を簡略化し、点と表現する場合もある。ここで、無限遠点とは楕円曲線上の特殊な点であり、Ｏと表記される。任意の点Ａに対しＡ＋Ｏ＝Ｏ＋Ａ＝Ａを満たす。ただし、＋は点の加算を表す。詳細な定義はＩＥＥＥ Ｐ１３６３などの標準を参照されたい。
【０１４０】
ベースポイントは、楕円曲線上の点の一つで、Ｇと表記される。楕円曲線暗号の利用者間で共通して使用され、公開鍵／個人鍵ペア生成をはじめ、楕円曲線暗号を用いた各種機能において使用される。詳細な定義はＩＥＥＥ Ｐ１３６３などの標準を参照されたい。
【０１４１】
点の加算は、点Ａ、Ｂから、Ｃ＝Ａ＋Ｂで表される楕円曲線上の点Ｃが定義される。このＡ＋Ｂの演算を点の加算と呼ぶ。Ｃは、Ａ、Ｂのｘ，ｙ座標および楕円曲線パラメータから計算することができる。なお、この演算は可換則、つまりＡ＋Ｂ＝Ｂ＋Ａが成立する。この演算の詳細についてはInstitute of Electrical and Electronic Engineers（ＩＥＥＥ）Ｐ１３６３などの標準を参照されたい。なお、点の減算は、点Ａ、Ｂから、Ｃ＝Ａ−Ｂで表される楕円曲線上の点Ｃが定義される。このＡ−Ｂの演算を点の減算と呼ぶ。Ｃは、Ａ、Ｂのｘ，ｙ座標および楕円曲線パラメータから計算することができる。また、点の２倍算は、楕円曲線上の点Ａから、点Ａ、Ｂから、Ｃ＝２Ａで表される楕円曲線上の点Cが定義される。この２Ａを演算を点の２倍算と呼ぶ。Ｃは、Ａのｘ，ｙ座標および楕円曲線パラメータから、算術演算を用いて計算することができる。
【０１４２】
なお、楕円曲線暗号における公開鍵、個人鍵はベースポイントＧ、個人鍵を表すスカラー値ｄに対し、公開鍵はＶ＝ｄＧを満たすＶにより与えられる。すなわち、公開鍵は楕円曲線上の点であり、個人鍵はスカラー値である。
【０１４３】
次に、図１０の点の加算演算部１００２（点の加算演算回路）は、記憶部３の変数ｔと変数ｕとを用いて、復号データｍを求める。復号データｍは後述する式２３を用いて求める。続いて、点の加算演算部１００２は求めた復号データｍを記憶部３に記憶する。
【０１４４】
図１０の乗算部１００３（乗算回路）は、記憶部３の第１の鍵データｄＱと耐タンパデータｒ’を用いて、変数ｄ’（第１の変数）を求める。変数ｄ’は後述する式１９を用いて求める。続いて、乗算部１００３は求めた変数ｄ’を記憶部３に記憶する。
【０１４５】
実施形態３の生成処理は実施形態１で説明した処理と同じである。
実施形態３の暗号処理について説明する。
【０１４６】
図１１は、実施形態３の暗号処理の動作の一実施例を示すフロー図である。
ステップＳ１１０１では、制御部２の処理部２０１が入出力インタフェース５または通信インタフェース６を介して暗号データｃを取得する。続いて、処理部２０１は暗号データｃを記憶部３の暗号処理情報に記憶する。なお、事前に暗号データｃが記憶部３に記憶されていることもある。図１２の暗号処理情報１２０３を参照。図１２は、実施形態３の事前生成情報と暗号処理情報のデータ構造の一実施例を示す図である。図１１の暗号処理情報１２０３は、「暗号データｃ」に記憶される情報を有している。本例では、上記説明した暗号データｃ「ｃ」が記憶されている。
【０１４７】
ステップＳ１１０２では、制御部２の処理部２０１が記憶部３の事前生成情報から乱数設定データｒｐｉと素数データｐｉを取得する。例えば、乱数設定データｒｐ０＝２、ｒｐ１＝２、ｒｐ２＝１と、素数データｐ０＝２、ｐ１＝３、ｐ２＝５とを取得したとする。図１２の事前生成情報１２０１を参照。事前生成情報１２０１は、「素数データｐｉ」「乱数設定データｒｐｉ」に記憶される情報を有している。事前生成情報１２０１の「素数データｐｉ」には生成処理において出力された素数データが記憶され、本例では「ｐ０」「ｐ１」「ｐ２」「ｐ３」「ｐ４」「ｐ５」「ｐ６」・・・・が記憶されている。なお、「ｐ０」「ｐ１」「ｐ２」に示されている（＝２）、（＝３）、（＝５）それぞれは、上記説明した３個の素数データｐ０〜ｐ２の値を示している。事前生成情報１２０１の「乱数設定データｒｐｉ」には生成処理において出力された乱数設定データが記憶され、本例では「ｒｐ０」「ｒｐ１」「ｒｐ２」「ｒｐ３」「ｒｐ４」「ｒｐ５」「ｒｐ６」・・・・が記憶されている。なお、「ｒｐ０」「ｒｐ１」「ｒｐ２」に示されている（＝２）、（＝２）、（＝１）それぞれは、上記説明した３個の乱数設定データｒｐ０〜ｒｐ２の値を示している。
【０１４８】
ステップＳ１１０３では、制御部２の乱数生成部２０２が乱数設定データｒｐｉを用いて第１の乱数データｓｉ（ｉ＝０〜ｎ：ｎは正の整数）を生成する。第１の乱数データｓｉの生成は、第１の乱数データｓｉそれぞれに対して０≦ｓｉ≦ｒｐｉを満たす数値とする。例えば、乱数設定データがｒｐ０＝２、ｒｐ１＝２、ｒｐ２＝１である場合、第１の乱数データｓ０＝２（０≦ｓ０≦２）、ｓ１＝１（０≦ｓ１≦２）、ｓ２＝０（０≦ｓ２≦１）とすることが考えられる。続いて、乱数生成部２０２は求めた第１の乱数データｓｉを、処理部２０１を介して記憶部３に記憶する。図１２の暗号処理情報１２０４を参照。図１２の暗号処理情報１２０４は、「第１の乱数データｓｉ」に記憶される情報を有している。本例では「ｓ０」「ｓ１」「ｓ２」「ｓ３」「ｓ４」「ｓ５」「ｓ６」・・・・が記憶されている。なお、「ｓ０」「ｓ１」「ｓ２」に示されている（＝２）、（＝１）、（＝０）それぞれは、上記説明した３個の第１の乱数データｓ０〜ｓ２の値を示している。
【０１４９】
ステップＳ１１０４では、制御部２の乱数生成部２０２が素数データｐｉと第１の乱数データｓｉとを用いて第２の乱数データｒを生成する。第２の乱数データｒは式１７を用いて求める。
【０１５０】
ｒ＝ｐ０ｓ０×ｐ１ｓ１×ｐ２ｓ２×・・・×ｐｎｓｎ    式１７
ｒ  ：第２の乱数データ
ｐｉ：素数データ
ｓｉ：第１の乱数データ
例えば、素数データがｐ０＝２、ｐ１＝３、ｐ２＝５で、第１の乱数データがｓ０＝２、ｓ１＝１、ｓ２＝０である場合、２２×３１×５０＝１２を計算して第２の乱数データｒが求まる。続いて、乱数生成部２０２は求めた第２の乱数データｒを記憶部３に記憶する。図１２の暗号処理情報１２０５を参照。図１２の暗号処理情報１２０５は、「第２の乱数データｒ」「耐タンパデータｒ’」「変数ｄ’」「変数ｃ’」「変数ｔ」「変数ｕ」「復号データｍ」に記憶される情報を有している。本例では「第２の乱数データｒ」「耐タンパデータｒ’」「変数ｄ’」「変数ｃ’」「変数ｔ」「変数ｕ」「復号データｍ」に対応する「１２」「１５」「３０」「１２ｃ」「３６０ｃ」「５ｃ」「３６５ｃ」が記憶されている。「第２の乱数データｒ」は、ステップＳ８０４で求めた第２の乱数データｒが記憶される。「耐タンパデータｒ’」「変数ｄ’」「変数ｃ’」「変数ｔ」「変数ｕ」「復号データｍ」それぞれに記憶する情報については後述する。
【０１５１】
ステップＳ１１０５では、乱数生成部２０２または処理部２０１が素数データｐｉと乱数設定データｒｐｉと第１の乱数データｓｉとを用いて耐タンパデータｒ’を生成する。耐タンパデータｒ’は式１８を用いて求める。
【０１５２】
ｒ’＝ｐ０ｒｐ０−ｓ０×ｐ１ｒｐ１−ｓ１×ｐ２ｒｐ２−ｓ２×
・・・×ｐｎｒｐｎ−ｓｎ    式１８
ｒ’：耐タンパデータ
ｐｉ：素数データ
ｓｉ：第１の乱数データ
ｒｐｉ：乱数設定データ
例えば、素数データがｐ０＝２、ｐ１＝３、ｐ２＝５で、第１の乱数データがｓ０＝２、ｓ１＝１、ｓ２＝０で、乱数設定データがｒｐ０＝２、ｒｐ１＝２、ｒｐ２＝１である場合について説明する。乱数生成部２０２または処理部２０１は、２２−２×３２−１×５１−０＝１５を計算して耐タンパデータｒ’が求まる。続いて、乱数生成部２０２または処理部２０１は求めた耐タンパデータｒ’を記憶部３に記憶する。図１２の暗号処理情報１２０５の「耐タンパデータｒ’」にステップＳ１１０５で求めた「１５」を記憶する。
【０１５３】
ステップＳ１１０６では、制御部２の乗算部１００３が記憶部３の第１の鍵データｄＱと耐タンパデータｒ’を用いて、変数ｄ’を求める。変数ｄ’は式１９を用いて求める。
【０１５４】
ｄ’＝ｄＱ×ｒ’                式１９
ｄＱ：第１の鍵データ
ｒ’：耐タンパデータ
例えば、第１の鍵データｄＱが２で、耐タンパデータｒ’が１５である場合に、乗算部１００３は２×１５＝３０を計算して変数ｄ’を求める。続いて、乗算部１００３は求めた変数ｄ’を記憶部３に記憶する。図１２の暗号処理情報１２０５の「変数ｄ’」にステップＳ１１０６で求めた「３０」を記憶する。
【０１５５】
乗算部の代わりにモンゴメリ乗算剰余演算部を保有していた場合には、ｄ'＝ｄＱ×ｒ'×（Ｒ−１ｍｏｄ Ｘ）ｍｏｄ Ｘと計算する。ここでＲはモンゴメリパラメータ、Ｘは
2013065117.tif 000006
である。
なお、第１の鍵データｄＱは記憶部３の事前生成情報１２０２から取得する。事前生成情報１２０２は「第１の鍵データｄＱ」「第２の鍵データｄＲ」に記憶される情報を有している。事前生成情報１２０２の「第１の鍵データｄＱ」には生成処理において出力された第１の鍵データが記憶され、本例では「２」が記憶されている。「第２の鍵データｄＲ」には生成処理において出力された第２の鍵データが記憶され、本例では「５」が記憶されている。
【０１５６】
ステップＳ１１０７では、制御部２の点のスカラー倍算演算部１００１が記憶部３の暗号データｃと第２の乱数データｒを用いて、変数ｃ’を求める。変数ｃ’は式２０を用いて求める。
【０１５７】
ｃ’＝ｃ×ｒ                    式２０
ｃ：暗号データ
ｒ：第２の乱数データ
例えば、暗号データをｃと表すとき、第２の乱数データｒが１２である場合は、点のスカラー倍算演算部１００１が１２×ｃを計算して変数ｃ’を求める。続いて、点のスカラー倍算演算部１００１は求めた変数ｃ’を記憶部３に記憶する。図１２の暗号処理情報１２０５の「変数ｃ’」にステップＳ１１０７で求めた「１２ｃ」を記憶する。
【０１５８】
ステップＳ１１０８では、制御部２の点のスカラー倍算演算部１００１が記憶部３の変数ｃ’と変数ｄ’を用いて、変数ｔを求める。変数ｔは式２１を用いて求める。
【０１５９】
ｔ＝ｄ’×ｃ’                  式２１
例えば、変数ｃ’が１２ｃで、変数ｄ’が３０である場合は、点のスカラー倍算演算部１００１が３０×１２ｃ＝３６０ｃを計算して変数ｔを求める。続いて、点のスカラー倍算演算部１００１は求めた変数ｔを記憶部３に記憶する。図１２の暗号処理情報１２０５の「変数ｔ」にステップＳ１２０８で求めた「３６０ｃ」を記憶する。
【０１６０】
ステップＳ１１０９では、制御部２の点のスカラー倍算演算部１００１が記憶部３の暗号データｃと第２の鍵データｄＲを用いて、変数ｕを求める。変数ｕは式２２を用いて求める。
【０１６１】
ｕ＝ｃ×ｄＲ                    式２２
ｃ  ：暗号データ
ｄＲ：第２の鍵データ
例えば、暗号データｃがｃで、第２の鍵データｄＲが５である場合は、点のスカラー倍算演算部１００１が５×ｃ＝５ｃを計算して変数ｕを求める。続いて、点のスカラー倍算演算部１００１は求めた変数ｕを記憶部３に記憶する。図１２の暗号処理情報１２０５の「変数ｕ」にステップＳ１１０９で求めた「５ｃ」を記憶する。
ここで、ステップＳ１１０９はステップＳ１１０２〜Ｓ１１０８と順番を入れ替えてもよい。
【０１６２】
ステップＳ１１１０では、制御部２の点の加算演算部１００２が記憶部３の変数ｔと変数ｕとを用いて、復号データｍを求める。復号データｍは式２３を用いて求める。
【０１６３】
ｍ＝ｔ＋ｕ                        式２３
例えば、変数ｔが３６０ｃで、変数ｕが５ｃである場合、点の加算演算部１００２は３６０ｃ＋５ｃ＝３６５ｃを計算して復号データｍを求める。続いて、点の加算演算部１００２は求めた復号データｍを記憶部３に記憶する。図１２の暗号処理情報１２０５の「復号データｍ」にステップＳ１１１０で求めた「３６５ｃ」を記憶する。
【０１６４】
ステップＳ１１１１では、制御部２が記憶部３から復号データｍを取得して、入出力インタフェース５または通信インタフェース６を介して復号データｍを出力する。
【０１６５】
実施形態３によれば、上記復号データ３６５ｃは、スカラー値ｄ×暗号データｃを直接計算した結果と一致する。また、暗号処理の度に異なる第１の乱数データｓｉ（上記ｓ０、ｓ１、ｓ２）が生成されるため、上記処理が毎回異なる途中結果を得ることになるため、電力差分解析（ＤＰＡ）に対して安全な処理が実現できる。
【０１６６】
さらに、実施形態２の暗号装置は、電力差分解析（ＤＰＡ）を用いた秘密鍵の解読を困難にするデータランダム化を行う回路を備えている場合でも、除算処理を行う回路を用いないため回路規模が大きくならないようにできる。
【０１６７】
また、コンピュータを用いた場合においても除算処理を行わないため処理速度を向上させることができる。
【０１６８】
また、本発明は、上記実施の形態に限定されるものでなく、本発明の要旨を逸脱しない範囲内で種々の改良、変更が可能である。
【符号の説明】
【０１６９】
１  暗号装置
２  制御部
３  記憶部
４  記録媒体読取装置
５  入出力インタフェース
６  通信インタフェース
７  バス
８  記録媒体
９  入出力部
２０１  処理部
２０２  乱数生成部
２０３  べき乗剰余演算部
２０４  乗算剰余演算部
４０１、４０２  事前生成情報
６０１、６０２、６０３  暗号処理情報
７０１  モンゴメリ乗算剰余演算部
８０６  乗算剰余演算部
９０１、９０２  事前生成情報
９０３、９０４、９０５  暗号処理情報
１００１  点のスカラー倍算演算部
１００２  点の加算演算部
１００３  乗算部
１２０１、１２０２  事前生成情報
１２０３、１２０４、１２０５  暗号処理情報
【図１】
2013065117.tif 000007
【図２】
2013065117.tif 000008
【図３】
2013065117.tif 000009
【図４】
2013065117.tif 000010
【図５】
2013065117.tif 000011
【図６】
2013065117.tif 000012
【図７】
2013065117.tif 000013
【図８】
2013065117.tif 000014
【図９】
2013065117.tif 000015
【図１０】
2013065117.tif 000016
【図１１】
2013065117.tif 000017
【図１２】
2013065117.tif 000018
【手続補正書】
【提出日】平成26年5月12日(2014.5.12)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】０１３８
【補正方法】変更
【補正の内容】
【０１３８】
楕円曲線（素体）：ｙ２＝ｘ３＋ａｘ＋ｂ（ｍｏｄ ｐ）
ｐ    ：素数
ａ、ｂ：楕円曲線パラメータ（０≦ａ、b＜p)
楕円曲線（２べき）：ｙ２＋ｘｙ＝ｘ３＋ａｘ２＋ｂ（ｍｏｄ f(x))
Ｆ    ：ＧＦ（２ｍ）の多項式
ａ、ｂ：楕円曲線パラメータ（ａ、ｂ⊆ＧＦ（２ｍ）)。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０１３９
【補正方法】変更
【補正の内容】
【０１３９】
楕円曲線上の点は、楕円曲線で表される関係式を満たす（ｘ，ｙ）であり、素体の場合０≦ｘ，ｙ＜ｐである整数ｘ，ｙの集合であり、２べきの場合はｘ，ｙ⊆ＧＦ（２ｍ)を満たす要素ｘ，ｙの集合である。また、Ａ＝（ｘ，ｙ）で表される点Ａについて、ｘを点Ａのｘ座標、ｙを点Ａのｙ座標とそれぞれ呼ぶ。また、楕円曲線上の点の一つは、無限遠点と呼ばれる特殊な点である。「楕円曲線上の点」の表現を簡略化し、点と表現する場合もある。ここで、無限遠点とは楕円曲線上の特殊な点であり、Ｏと表記される。任意の点Ａに対しＡ＋Ｏ＝Ｏ＋Ａ＝Ａを満たす。ただし、＋は点の加算を表す。詳細な定義はＩＥＥＥ Ｐ１３６３などの標準を参照されたい。
【国際調査報告】
2013065117.tif 000019
2013065117.tif 000020
2013065117.tif 000021
2013065117.tif 000022