JPWO2013065117A1 - 暗号装置と方法およびプログラム - Google Patents

暗号装置と方法およびプログラム Download PDF

Info

Publication number
JPWO2013065117A1
JPWO2013065117A1 JP2013541506A JP2013541506A JPWO2013065117A1 JP WO2013065117 A1 JPWO2013065117 A1 JP WO2013065117A1 JP 2013541506 A JP2013541506 A JP 2013541506A JP 2013541506 A JP2013541506 A JP 2013541506A JP WO2013065117 A1 JPWO2013065117 A1 JP WO2013065117A1
Authority
JP
Japan
Prior art keywords
data
variable
random number
power
multiplication
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2013541506A
Other languages
English (en)
Other versions
JP5742960B2 (ja
Inventor
純 矢嶋
純 矢嶋
伊藤 孝一
孝一 伊藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JPWO2013065117A1 publication Critical patent/JPWO2013065117A1/ja
Application granted granted Critical
Publication of JP5742960B2 publication Critical patent/JP5742960B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/30Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
    • H04L9/3066Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy involving algebraic varieties, e.g. elliptic or hyper-elliptic curves
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09CCIPHERING OR DECIPHERING APPARATUS FOR CRYPTOGRAPHIC OR OTHER PURPOSES INVOLVING THE NEED FOR SECRECY
    • G09C1/00Apparatus or methods whereby a given sequence of signs, e.g. an intelligible text, is transformed into an unintelligible sequence of signs by transposing the signs or groups of signs or by replacing them by others according to a predetermined system
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/002Countermeasures against attacks on cryptographic mechanisms
    • H04L9/003Countermeasures against attacks on cryptographic mechanisms for power analysis, e.g. differential power analysis [DPA] or simple power analysis [SPA]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/30Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
    • H04L9/3006Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy underlying computational problems or public-key parameters
    • H04L9/302Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy underlying computational problems or public-key parameters involving the integer factorization problem, e.g. RSA or quadratic sieve [QS] schemes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/12Details relating to cryptographic hardware or logic circuitry

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computing Systems (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Algebra (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Physics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

電力差分解析を用いた秘密鍵の解読を困難にする回路を備えている場合でも、回路規模が大きくならない暗号装置および方法を提供する。素数データ(pi)各々に対応する指数(rpi)を示す乱数設定データ各々を用いて、素数データ各々に対してべき乗を求め、べき乗したデータ各々を乗算して乗算データを求め、乗算データにより秘密鍵データ(d)を除算して求めた商を示す第1の鍵データ(dQ)と、乗算データにより秘密鍵データを除算して求めた余りを示す第2の鍵データ(dR)と、を予め記憶部に記憶して、第1の鍵データと第2の鍵データを用いて、電力差分解析(DPA)対策を有するRSAまたはECCを用いた復号処理をする。

Description

本発明は、暗号処理を実行する暗号装置と方法およびプログラムに関する。
近年、情報セキュリティ技術の重要性がますます高まってきている。また、情報セキュリティの基盤技術の1つとして、公開鍵暗号が盛んに研究されている。公開鍵暗号にはいくつか種類があり、べき乗剰余演算を利用するRivest Shamir Adleman(RSA)暗号、Diffie-Hellman(DH)鍵交換や、楕円曲線上の点のスカラー倍算を利用する楕円曲線暗号(Elliptical Curve Cryptography)などのアルゴリズムが知られている。
RSA暗号、DHについて説明する。RSA暗号、DHでは、べき乗剰余演算と呼ばれる処理を用いた演算が行われる。べき乗剰余演算とは、基数a、指数x、法nに対してz=amod nを計算する演算である。RSA暗号においては、指数xを秘密情報とした処理が行われる。例えば、RSA暗号の復号演算においては、暗号文c(暗号データ)、個人鍵(秘密鍵データ)d、法n(公開鍵データ)から、m=cmod nを満たすmを計算することで復号処理が行われる。例えば、電子署名においては、署名対象データc、個人鍵d、法nから計算することで、電子署名mを得る。いずれの処理においても、個人鍵dの値を知らない第三者は、正しい復号処理や電子署名処理結果を算出することができない。
m=cmod nにおいては、共にdが個人鍵であり、攻撃者などの不正な第三者に漏洩してはならない値である。すなわち、RSA暗号においては個人鍵dの値の保護が重要となるため耐タンパ機能にて保護する必要がある。数学的には、m=cmod nにおいて個人鍵d以外の値が既知だとしても、個人鍵dを計算する計算量が大きすぎるため、現実的な時間内に個人鍵dを求めることが難しい問題として知られている(離散対数問題)。m=cmod nの場合、nが1024ビット以上の値である場合、攻撃者はc、n、mの値を知っていたとしても、dの値を求めることが困難であることが知られている。
また、DHにおいてもべき乗剰余演算が利用される。相手の公開鍵A(=g:yは個人鍵)に対してK=Amod pを用いて共有鍵Kを得る。ここでxは個人鍵であり、攻撃者などの不正な第三者に漏洩してはならない値である。すなわち、DHにおいては個人鍵xの値の保護が重要となるため耐タンパ機能にて保護する必要がある。K=Amod pの場合、pが1024ビット以上の値である場合、攻撃者はK、A、pの値を知っていたとしてもxの値を求めることが困難であることが知られている。
楕円曲線暗号(Elliptic Curve Cryptography:ECC)について説明する。
ECCでは、点のスカラー倍算(Elliptic Scalar Multiplication)と呼ばれる処理を用いた演算が行われる。点のスカラー倍算は、楕円曲線上の点A、スカラー値と呼ばれる整数xから、V=xAを満たす楕円曲線上の点Vを計算する処理である。RSA暗号と同様に、xを秘密情報とした処理が行われる。例えばElliptic Curve Diffie-Hellman(ECDH)鍵交換の場合、通信相手の公開鍵となる楕円曲線上の点をA、個人鍵(秘密鍵データ)をdとすると、V=dAを満たす楕円曲線上の点Vを計算することで、安全な鍵共有を実現する。個人鍵dの値を知らない第三者は正しい共有鍵の値を算出することができない。
また、V=dAにおいては、共にdが個人鍵であり、攻撃者などの不正な第三者に漏洩してはならない値である。すなわち、ECCにおいてはdの値の保護が重要となるため耐タンパ機能にて保護する必要がある。数学的には、V=dAにおいて個人鍵d以外の値が既知だとしても、個人鍵dを計算する計算量が大きすぎるため、現実的な時間内に個人鍵dを求めることが難しい問題として知られている(離散対数問題)。また、楕円曲線パラメータ(elliptic curve parameter)が160ビット以上の場合、A、Vの値を知っていたとしても、個人鍵dの値を求めることが困難であることが知られている。
ところが、近年では個人鍵を解読するためのいくつかの攻撃手法があり、例えば、サイドチャネル攻撃の1種として、電力差分解析(Differential Power Analysis:DPA)を用いて秘密鍵の解読を行う方法が知られている。DPAは、例えば、スマートカードなどの処理中の消費電力を測定し、測定した複数の電力波形の差分を用いて個人鍵を解読する方法である。
DPAを用いた攻撃への対策の1つとしてデータランダム化を用いた暗号処理する方法が知られている。データランダム化を用いた暗号処理とは、m=cmod nを計算する際に、乱数rを毎回生成する。そして、指数dをd=d’×r+d”と表現し、d’=d÷rの商、d”=d÷rの余りとして、除算器を用いて暗号処理の度に計算する。そして、乗算剰余演算器を有するべき乗剰余演算器が処理を実行して処理結果を得る。つまり、d=d’×r+d”において、rの値が処理の度に毎回変化し、d’、d”の値も処理の度に変化する。従って、cmod N,(c’)d’mod N、cd”mod Nにおける指数は処理の度に毎回変化することになり、電力波形も毎回変化するため消費電力と個人鍵の相関がなくなり、DPAに対して安全は暗号処理が行える。
また、乗算剰余演算器の代わりにモンゴメリ乗算剰余器を用いる方法が開示されている。
特表2003−518872号公報 特開2006−276786号公報
本発明は、電力差分解析を用いた秘密鍵の解読を困難にする回路を備えている場合でも、回路規模が大きくならないようにできる暗号装置を提供することを目的とする。
また、電力差分解析を用いた秘密鍵の解読を困難にする処理を有する場合に、処理速度を向上させることができる暗号の方法およびプログラムを提供することを目的とする。
本実施態様のひとつである基数を示す暗号データと指数を示す秘密鍵データと法を示す公開鍵データとを用いてべき乗剰余演算により復号データを求める暗号装置は、記憶部、乱数生成部、べき乗剰余演算部を備えている。
記憶部は、素数データ各々に対応する指数を示す乱数設定データ各々を用いて、上記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して乗算データを求める。続いて、上記乗算データにより上記秘密鍵データを除算して求めた商を示す第1の鍵データと、上記乗算データにより上記秘密鍵データを除算して求めた余りを示す第2の鍵データと、を予め記憶部に記憶する。
乱数生成部は、上記素数データ各々に対応する指数を示す、上記乱数設定データ以下でかつ正の整数である第1の乱数データ各々を用いて、上記素数データ各々に対してべき乗を求める。続いて、乱数生成部は求めたべき乗したデータ各々を乗算して第2の乱数データを求める。続いて、乱数生成部は上記素数データ各々に対応する指数を示す、上記乱数設定データから上記乱数設定データに対応する上記第1の乱数データを減算した減算データ用いて、上記素数データ各々に対してべき乗を求める。続いて、乱数生成部は求めたべき乗したデータ各々を乗算して耐タンパデータを求める。
べき乗剰余演算部は、上記第1の鍵データと上記耐タンパデータとを基数に用い、乗算剰余演算において扱える最大ビット幅長から1を減算したデータを法とし、乗算剰余演算をして第1の変数(d’)を求める。あるいは、単に上記第1の鍵データと上記耐タンパデータとを乗算して第1の変数(d‘)を求めてもよい。続いて、べき乗剰余演算部は上記暗号データを基数とし、上記第2の乱数データを指数とし、公開鍵データを法とし、べき乗剰余演算をして第2の変数(c’)を求める。続いて、べき乗剰余演算部は上記第2の変数を基数とし、上記第1の変数を指数とし、公開鍵データを法とし、べき乗剰余演算をして第3の変数(t)を求める。続いて、べき乗剰余演算部は上記暗号データを基数とし、上記第2の鍵データを指数とし、公開鍵データを法とし、べき乗剰余演算をして第4の変数(u)を求める。続いて、べき乗剰余演算部は上記第3の変数と上記第4の変数とを基数に用い、公開鍵データを法とし、乗算剰余演算をして復号データを求める。なお、第2に変数及び第3の変数を求める処理と、第4の変数を求める処理の手順は逆であってもよい。
また、べき乗剰余演算部は上記第1の鍵データと上記耐タンパデータを基数に用い、モンゴメリ乗算剰余演算において扱える最大ビット幅長から1を減算したデータを法とし、モンゴメリ乗算剰余演算をして第1の変数(d’)を求める。あるいは、単に上記第1の鍵データと上記耐タンパデータを乗算して第1の変数(d’)を求めてもよい。続いて、べき乗剰余演算部は上記第3の変数と上記第4の変数を基数に用い、公開鍵データを法とし、モンゴメリ乗算剰余演算をして第5の変数(m’)を求める。続いて、べき乗剰余演算部は上記第5の変数と上記モンゴメリパラメータの2乗を基数に用い、公開鍵データを法とし、モンゴメリ乗算剰余演算をして復号データを求める。
本実施態様のひとつである暗号データと秘密鍵データと公開鍵データとを用いて点のスカラー倍算演算により復号データを求める暗号装置は、記憶部、乱数生成部、乗算部、点のスカラー倍算演算部を備えている。
記憶部は、素数データ各々に対応する指数を示す乱数設定データ各々を用いて、上記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して乗算データを求める。続いて、上記乗算データにより上記秘密鍵データを除算して求めた商を示す第1の鍵データと、上記乗算データにより上記秘密鍵データを除算して求めた余りを示す第2の鍵データと、を予め記憶部に記憶する。
乱数生成部は、上記素数データ各々に対応する指数を示す、上記乱数設定データ以下でかつ正の整数である第1の乱数データ各々を用いて、上記素数データ各々に対してべき乗を求める。続いて、乱数生成部は求めたべき乗したデータ各々を乗算して第2の乱数データを求める。続いて、乱数生成部は上記素数データ各々に対応する指数を示す、上記乱数設定データから上記乱数設定データに対応する上記第1の乱数データを減算した減算データ用いて、上記素数データ各々に対してべき乗を求める。続いて、乱数生成部は求めたべき乗したデータ各々を乗算して耐タンパデータを求める。
乗算部は、上記第1の鍵データと上記耐タンパデータとを用いて乗算をして第1の変数(d’)を求める。また、モンゴメリ乗算剰余演算部を保有する場合、モンゴメリ乗算剰余演算部は、上記第1の鍵データと上記耐タンパデータを基数に用い、モンゴメリ乗算剰余演算において扱える最大ビット幅長から1を減算したデータを法とし、モンゴメリ乗算剰余演算をして第1の変数(d’)を求める。乗算部、モンゴメリ乗算剰余演算部は点のスカラー倍算部に含まれていることもありうる。
点のスカラー倍算演算部は、上記暗号データと上記第2の乱数データとを用いて点のスカラー倍算演算をして第2の変数(c’)を求める。続いて、点のスカラー倍算演算部は上記第2の変数と上記第1の変数とを用いて点のスカラー倍算演算をして第3の変数(t)を求め、上記暗号データと上記第2の鍵データとを用いて点のスカラー倍算演算をして第4の変数(u)を求める。第2の変数及び第3の変数を求める処理と、第4の変数を求める処理は順番が逆であってもよい。続いて、点のスカラー倍算演算部は上記第3の変数と上記第4の変数とを用いて点の加算演算をして復号データを求める。
本実施形態によれば、電力差分解析を用いた秘密鍵の解読を困難にする回路を備えている場合でも、回路規模が大きくならないようにできるという効果を奏する。
また、電力差分解析を用いた秘密鍵の解読を困難にする処理を有する場合に、処理速度を向上させることができるという効果を奏する。
暗号装置のハードウェアの一実施例を示す図である。 制御部の一実施例を示す図である。 暗号処理に用いるデータの生成処理の動作の一実施例を示すフロー図である。 事前生成情報のデータ構造の一実施例を示す図である。 暗号処理の動作の一実施例を示すフロー図である。 暗号処理情報のデータ構造の一実施例を示す図である。 実施形態2の制御部の一実施例を示す図である。 実施形態2の暗号処理の動作の一実施例を示すフロー図である。 実施形態2の事前生成情報と暗号処理情報のデータ構造の一実施例を示す図である。 実施形態3の制御部の一実施例を示す図である。 実施形態3の暗号処理の動作の一実施例を示すフロー図である。 実施形態3の事前生成情報と暗号処理情報のデータ構造の一実施例を示す図である。
実施形態各々で説明する暗号装置は、電力差分解析(DPA)を用いた秘密鍵の解読を困難にするデータランダム化を行う回路を備えている場合でも、回路規模が大きくならないようにできる。また、上記暗号装置で行われる暗号処理をコンピュータで実現する場合には、暗号処理を有するプログラムを、上記コンピュータを用いて実行させてもよい。
なお、暗号装置はintegrated circuit(IC)カード、認証機能付き組み込み機器などに搭載されるICチップ(集積回路)または回路基板(プリント基板など)などが考えられる。
以下図面に基づいて、実施形態について詳細を説明する。
実施形態1について説明する。
実施形態1は、Rivest Shamir Adleman(RSA)暗号を適用した暗号処理を図1のハードウェアに適用したものである。また、RSA暗号で用いるべき乗剰余演算は計算量をlogdに削減するために、バイナリ法を用いる。
べき乗剰余において、例えば、公開鍵データn、暗号データc、秘密鍵データd全てが1024ビット以上の長さを持つ場合(1024に限定するものではない)に、べき乗剰余を単純に計算した場合、mod nを用いた掛け算をd回必要とするが、21024以上の計算量を必要とするため現実的ではない。そこで、この計算量をlogdに削減するために、バイナリ法を用いる。べき乗剰余におけるバイナリ法は、uビットの秘密鍵データdをd[u−1]|| ・・・ ||d[1]||d[0]と表したとき、秘密鍵データdのビット値d[i]を上位ビットから下位ビットの順にスキャンする。すなわち、i=u-1からi=0の順にスキャンする。ただし、d[i]はdの最下位からi番目のビット値で、i≧0である。なお、「||」はビット列の連結を示す。続いて、秘密鍵データdのビット値d[i]に応じて、d[i]=1の場合は2乗算(v:=v×v(mod n))の後に、乗算(v:=v×a(mod n))を実行し、d[i]=0の場合は、2乗算(v:=v×v(mod n))のみを実行する。なお、この部分はウィンドウ法などのべき乗剰余演算を高速に処理する一般的なアルゴリズムを用いても構わない。
図1は、暗号装置のハードウェアの一実施例を示す図である。暗号装置が集積回路である場合には、暗号装置は制御部2、記憶部3、通信インタフェース6などを備え、制御部2、記憶部3、通信インタフェース6各々はバス7によりそれぞれ接続される構成が望ましい。
また、暗号装置の回路基板に構築される場合には、制御部2、記憶部3、記録媒体読取装置4、入出力インタフェース5(入出力I/F)、通信インタフェース6(通信I/F)などを備え、上記した各構成要素はバス7により接続されている構成が望ましい。なお、記録媒体読取装置4は設けなくてもよい。また、入出力インタフェース5または通信インタフェース6のいずれか1つを備えるだけでもよい。
制御部2は、後述する処理部201(処理回路)、乱数生成部202(乱数生成回路)、べき乗剰余演算部203(べき乗剰余演算回路)、乗算剰余演算部204(乗剰余演算回路)などを有している。
また、制御部2はCentral Processing Unit(CPU)やマルチコアCPUなどを用いることが考えられる。また、制御部2としてプログラマブルなデバイス(Field Programmable Gate Array(FPGA)、Programmable Logic Device(PLD)など)を用いてもよい。
記憶部3は、後述する事前生成情報、暗号処理情報などを記憶している。記憶部3は、例えばRead Only Memory(ROM)、Flash−ROM、Random Access Memory(RAM)、FeRAMなどのメモリやハードディスクなどが考えられる。なお、記憶部3にはパラメータ値、変数値などのデータを記録してもよいし、実行時のワークエリアとして用いてもよい。また、記憶部3(ROM、Flash−ROM、FeRAMなどの不揮発性メモリ)にはプログラムが格納され、実行時に制御部が読み取りながら処理を実行する。
記録媒体読取装置4は、制御部2の制御に従って記録媒体8に対するデータのリード/ライトを制御する。そして、記録媒体8に記録媒体読取装置4の制御で書き込まれたデータを記録させたり、記録媒体8に記録されたデータを読み取らせたりする。また、着脱可能な記録媒体8は、コンピュータで読み取り可能なnon-transitory(非一時的)な記録媒体として、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置(HDD)などがある。光ディスクには、Digital Versatile Disc(DVD)、DVD−RAM、Compact Disc Read Only Memory(CD−ROM)、CD−R(Recordable)/RW(ReWritable)などがある。光磁気記録媒体には、Magneto-Optical disk(MO)などがある。なお、記憶部3もnon-transitory(非一時的)な記録媒体に含まれる。
なお、記録媒体、記録媒体読み取り装置は、必須ではない。
入出力インタフェース5には、パーソナルコンピュータなどの入出力部9が接続され、利用者が入力した情報(例えば、暗号データ、公開鍵データなどのデータ)を受信し、バス7を介して制御部2または記憶部3などに送信する。入出力部9の入力装置は、例えば、キーボード、ポインティングデバイス(マウスなど)、タッチパネルなどが考えられる。なお、入出力部9の出力部であるディスプレイは、例えば、液晶ディスプレイなどが考えられる。また、出力部はCathode Ray Tube(CRT)ディスプレイ、プリンタなどの出力装置であってもよい。
通信インタフェース6は、Local Area Network(LAN)接続やインターネット接続や無線接続を行うためのインタフェースである。また、通信インタフェース6は必要に応じ、他のコンピュータとの間のLAN接続やインターネット接続や無線接続を行うためのインタフェースである。また、他の装置に接続され、外部装置からのデータの入出力を制御する。
また、上記に示したハードウェア構成を有するコンピュータを用いることによって、後述する各種処理機能(例えば、図5に示すフロー)を実現してもよい。その場合コンピュータが有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体8に記録しておくことができる。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CD−ROMなどの記録媒体8が販売される。また、プログラムをサーバコンピュータの記憶装置に記録しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、記録媒体8に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶部3に記録する。そして、コンピュータは、自己の記憶部3からプログラムを読み取り、プログラムに従った処理を実行する。
制御部2について説明する。
図2は、制御部の一実施例を示す図である。図2の制御部2は、処理部201(処理回路)、乱数生成部202(乱数生成回路)、べき乗剰余演算部203(べき乗剰余演算回路)、乗算剰余演算部204(乗剰余演算回路)などを有している。
処理部201は、入出力インタフェース5または通信インタフェース6を介して暗号データcと公開鍵データNを取得し、暗号データcと公開鍵データNを記憶部3に記憶する。または事前に記憶部3に暗号データcと公開鍵データNが格納されているケースもありうる。
また、処理部201が記憶部の3の後述する事前生成情報から乱数設定データrpi(i=0〜n:nは正の整数)と素数データpi(i=0〜n:nは正の整数)を取得する。また、記憶部3から復号データmを取得して、入出力インタフェース5または通信インタフェース6を介して復号データmを出力する。
乱数生成部202は、乱数設定データrpiを用いて第1の乱数データsi(i=0〜n:nは正の整数)を生成する。第1の乱数データsiの生成は、第1の乱数データsiそれぞれに対して0≦si≦rpiを満たす数値とする。続いて、乱数生成部202は求めた第1の乱数データsiを、処理部201を介して記憶部3に記憶する。また、乱数生成部202は素数データpiと第1の乱数データsiとを用いて第2の乱数データrを生成する。第2の乱数データrは後述する式2を用いて求める。また、乱数生成部202は素数データpiと乱数設定データrpiと第1の乱数データsiとを用いて耐タンパデータr’を生成する。耐タンパデータr’は後述する式3を用いて求める。続いて、乱数生成部202は求めた耐タンパデータr’を記憶部3に記憶する。なお、処理部201が耐タンパデータr’を生成し、記憶部3に記憶してもよい。
べき乗剰余演算部203は、記憶部3の暗号データcを基数にし、第2の乱数データrを指数にし、公開鍵データNを法にして、変数c’(第2の変数)を求める。変数c’は後述する式5を用いて求める。また、べき乗剰余演算部203は記憶部3の変数c’を基数にし、変数d’を指数にし、公開鍵データNを法にして、変数t(第3の変数)を求める。変数tは後述する式6を用いて求める。続いて、べき乗剰余演算部203は求めた変数tを記憶部3に記憶する。また、べき乗剰余演算部203は記憶部3の暗号データcを基数にし、第2の鍵データdRを指数にし、公開鍵データNを法として、変数u(第4の変数)を求める。変数uは後述する式7を用いて求める。続いて、べき乗剰余演算部203は求めた変数uを記憶部3に記憶する。
乗算剰余演算部204は、記憶部3の第1の鍵データdQと耐タンパデータr’を用い、乗算剰余演算部の処理可能なモジュラスのビット長を示すXを法として、乗算剰余演算を実行して変数d’(第1の変数)を求める。変数d’は式4を用いて求める。なお、処理部がd’をdQとr’を乗算して求めてもよい。乗算剰余演算部204は、記憶部3の変数tと変数uを用いて、公開鍵データNを法として、乗算剰余演算を実行して復号データmを求める。復号データmは後述する式8を用いて求める。続いて、乗算剰余演算部204は求めた復号データmを記憶部3に記憶する。
暗号処理に用いるデータの生成処理について説明する。
生成処理は、暗号装置が暗号処理をする際に必要なデータを事前に求める処理で、例えば、コンピュータなどを用いて実行される。該コンピュータは、例えば、パーソナルコンピュータやサーバなどを用いることが考えられる。また、暗号装置内部で事前に処理を行っておいてもよい。
図3は、暗号処理に用いるデータの生成処理の動作の一実施例を示すフロー図である。
ステップS301では、コンピュータが利用者によって決められた素数データpiと乱数設定データrpiを暗号装置1の通信インタフェース6または処理部201を介して記憶部3または乱数生成部202に出力する。暗号装置内部で処理を行う場合はこの処理は省略される。素数データpi(i=0〜n:nは正の整数)それぞれは素数とする。例えば、n=3のときp0=2、p1=3、p2=5などが考えられる。乱数設定データrpi(i=0〜n:nは正の整数)それぞれは正の整数とする。例えば、n=3のときrp0=3、rp1=2、rp2=2などが考えられる。
ステップS302では、コンピュータまたは暗号装置が秘密鍵データdを生成する。秘密鍵データdは、例えば、既知の鍵生成アルゴリズムを有するプログラムをコンピュータにより実行させることにより得られる。例えば、秘密鍵データdとして7067などの正の整数が考えられる。
ステップS303では、コンピュータまたは暗号装置が素数データpiと秘密鍵データdとを用いて第1の鍵データdQと第2の鍵データdRを生成する。第1の鍵データdQと第2の鍵データdRは式1で示すことができる。
d=dQ×(p0rp0×p1rp1×p2rp2×・・・×p2rpn)+dR
式1
dQ:d/(p0rp0×p1rp1×p2rp2×・・・×p2rpn)の商
dR:d/(p0rp0×p1rp1×p2rp2×・・・×p2rpn)の余り
pi:素数データ
rpi:乱数設定データ
このとき暗号装置で処理を行う場合には、p0rp0×p1rp1×p2rp2×・・・×p2rpnは事前に計算しておいたものを記憶部に格納しておくことで高速に処理できる。
例えば、秘密鍵データd=7067で、素数データp0=2、p1=3、p2=5で、乱数設定データrp0=3、rp1=2、rp2=2である場合、第1の鍵データdQは、7067を1800(=2×3×5)で除算したときの商3となる。第2の鍵データdRは、7067を1800で除算したときの余り1667となる。
ステップS304では、コンピュータが第1の鍵データdQと第2の鍵データdRを暗号装置1の通信インタフェース6または処理部201を介して記憶部3に出力する。
上記生成処理により、暗号装置1の記憶部3または乱数生成部202に素数データpiと乱数設定データrpiを記憶し、記憶部3に第1の鍵データdQと第2の鍵データdRが記憶される。
図4は、事前生成情報のデータ構造の一実施例を示す図を示す。
事前生成情報401、402は、「素数データpi」「乱数設定データrpi」「第1の鍵データdQ」「第2の鍵データdR」に記憶される情報を有している。事前生成情報401の「素数データpi」には生成処理において出力された素数データが記憶され、本例では「p0」「p1」「p2」「p3」「p4」「p5」「p6」・・・・が記憶されている。なお、「p0」「p1」「p2」に示されている(=2)、(=3)、(=5)それぞれは、上記説明した3個の素数データp0〜p2の値を示している。事前生成情報401の「乱数設定データrpi」には生成処理において出力された乱数設定データが記憶され、本例では「rp0」「rp1」「rp2」「rp3」「rp4」「rp5」「rp6」・・・・が記憶されている。なお、「rp0」「rp1」「rp2」に示されている(=3)、(=2)、(=2)それぞれは、上記説明した3個の乱数設定データrp0〜rp2の値を示している。
事前生成情報402の「第1の鍵データdQ」には生成処理において出力された第1の鍵データが記憶され、本例では「3」が記憶されている。「第2の鍵データdR」には生成処理において出力された第2の鍵データが記憶され、本例では「1667」が記憶されている。
なお、本例では記憶部3に事前生成情報401、402がある場合について説明したが、「素数データpi」「乱数設定データrpi」に記憶される情報は乱数生成部202に記憶してもよい。
暗号処理について説明する。
図5は、暗号処理の動作の一実施例を示すフロー図である。
ステップS501では、制御部2の処理部201が入出力インタフェース5または通信インタフェース6を介して暗号データcと公開鍵データNを取得する。例えば、暗号データc=1234と公開鍵データN=10807を取得したとする。続いて、処理部201は暗号データcと公開鍵データNを記憶部3に記憶する。事前に記憶部3にc、Nが格納されていることもある。図6の暗号処理情報601を参照。図6は、暗号処理情報のデータ構造の一実施例を示す図である。図6の暗号処理情報601は、「暗号データc」「公開鍵データN」に記憶される情報を有している。本例では、上記説明した暗号データc「1234」と公開鍵データN「10807」が記憶されている。
ステップS502では、制御部2の処理部201が記憶部の3の事前生成情報401から乱数設定データrpiと素数データpiを取得する。例えば、乱数設定データrp0=3、rp1=2、rp2=2と、素数データp0=2、p1=3、p2=5とを取得したとする。
ステップS503では、制御部2の乱数生成部202が乱数設定データrpiを用いて第1の乱数データsi(i=0〜n:nは正の整数)を生成する。第1の乱数データsiの生成は、第1の乱数データsiそれぞれに対して0≦si≦rpiを満たす数値とする。例えば、乱数設定データがrp0=3、rp1=2、rp2=2である場合、第1の乱数データs0=1(0≦s0≦3)、s1=0(0≦s1≦2)、s2=2(0≦s2≦2)とすることが考えられる。続いて、乱数生成部202は求めた第1の乱数データsiを、処理部201を介して記憶部3に記憶する。図6の暗号処理情報602を参照。図6の暗号処理情報602は、「第1の乱数データsi」に記憶される情報を有している。本例では「s0」「s1」「s2」「s3」「s4」「s5」「s6」・・・・が記憶されている。なお、「s0」「s1」「s2」に示されている(=1)、(=0)、(=2)それぞれは、上記説明した3個の第1の乱数データs0〜s2の値を示している。
ステップS504では、制御部2の乱数生成部202が素数データpiと第1の乱数データsiとを用いて第2の乱数データrを生成する。第2の乱数データrは式2を用いて求める。
r=p0s0×p1s1×p2s2×・・・×pnsn 式2
r :第2の乱数データ
pi:素数データ
si:第1の乱数データ
例えば、素数データがp0=2、p1=3、p2=5で、第1の乱数データがs0=1、s1=0、s2=2である場合、2×3×5=50を計算して第2の乱数データrを求まる。続いて、乱数生成部202は求めた第2の乱数データrを記憶部3に記憶する。図6の暗号処理情報603を参照。図6の暗号処理情報603は、「第2の乱数データr」「タンパデータr’」「変数d’」「変数c’」「変数t」「変数u」「復号データm」に記憶される情報を有している。本例では「第2の乱数データr」「タンパデータr’」「変数d’」「変数c’」「変数t」「変数u」「復号データm」に対応する「50」「36」「108」「10000」「2829」「9200」「3544」が記憶されている。「第2の乱数データr」は、ステップS504で求めた第2の乱数データrが記憶される。「耐タンパデータr’」「変数d’」「変数c’」「変数t」「変数u」「復号データm」それぞれに記憶する情報については後述する。
ステップS505では、乱数生成部202または処理部201が素数データpiと乱数設定データrpiと第1の乱数データsiとを用いて耐タンパデータr’を生成する。耐タンパデータr’は式3を用いて求める。
r’=p0rp0−s0×p1rp1−s1×p2rp2−s2×
・・・×pnrpn−sn 式3
r’:耐タンパデータ
pi:素数データ
si:第1の乱数データ
rpi:乱数設定データ
例えば、素数データがp0=2、p1=3、p2=5で、第1の乱数データがs0=1、s1=0、s2=2で、乱数設定データrp0=3、rp1=2、rp2=2である場合、23−1×32−0×52−2=36を計算して耐タンパデータr’が求まる。続いて、乱数生成部202または処理部201は求めた耐タンパデータr’を記憶部3に記憶する。図6の暗号処理情報603の「耐タンパデータr’」にステップS505で求めた「36」を記憶する。
ステップS506では、制御部2の乗算剰余演算部204が記憶部3の第1の鍵データdQと耐タンパデータr’を用いて、変数d’を求める。変数d’は式4を用いて求める。
d’=dQ×r’modX 式4
dQ:第1の鍵データ
r’:耐タンパデータ
Figure 2013065117
例えば、第1の鍵データdQが3で、耐タンパデータr’が36である場合に、乗算剰余演算部204の処理可能なモジュラス(公開鍵データN:法)のビット長が16ビットであるときは、3×36 mod 0xFFFF=108を計算して変数d’を求める。ここで、0xFFFFは216−1を16進数で表した数である。続いて、乗算剰余演算部204は求めた変数d’を記憶部3に記憶する。d'は処理部において、dQとr'を乗算して求めてもよい。図6の暗号処理情報603の「変数d’」にステップS506で求めた「108」を記憶する。
ステップS507では、制御部2のべき乗剰余演算部203が記憶部3の暗号データcと第2の乱数データrと公開鍵データNを用いて、変数c’を求める。変数c’は式5を用いて求める。
c’=cmod N 式5
c:暗号データ
r:第2の乱数データ
N:公開鍵データ
例えば、暗号データcが1234で、第2の乱数データrが50で、公開鍵データNが10807ある場合は、べき乗剰余演算部203が(1234)50mod 10807=10000を計算して変数c’を求める。続いて、べき乗剰余演算部203は求めた変数c’を記憶部3に記憶する。図6の暗号処理情報603の「変数c’」にステップS507で求めた「1000」を記憶する。
ステップS508では、制御部2のべき乗剰余演算部203が記憶部3の変数c’と変数d’と公開鍵データNを用いて、変数tを求める。変数tは式6を用いて求める。
t=(c’)d’mod N 式6
N:公開鍵データ
例えば、変数c’が10000で、変数d’が108で、公開鍵データNが10807である場合は、べき乗剰余演算部203が(10000)108mod 10807=2829を計算して変数tを求める。続いて、べき乗剰余演算部203は求めた変数tを記憶部3に記憶する。図6の暗号処理情報603の「変数t」にステップS508で求めた「1000」を記憶する。
ステップS509では、制御部2のべき乗剰余演算部203が記憶部3の暗号データcと第2の鍵データdRと公開鍵データNを用いて、変数uを求める。変数uは式7を用いて求める。
u=cdRmod N 式7
c :暗号データ
dR:第2の鍵データ
N :公開鍵データ
例えば、暗号データcが1234で、第2の鍵データdRが1667で、公開鍵データNが10807である場合は、べき乗剰余演算部203が(1234)1667mod 10807=9200を計算して変数uを求める。続いて、べき乗剰余演算部203は求めた変数uを記憶部3に記憶する。図6の暗号処理情報603の「変数u」にステップS509で求めた「9200」を記憶する。
ステップS502〜S508とS509は順番を入れ替えてもよい。
ステップS510では、制御部2の乗算剰余演算部204が記憶部3の変数tと変数uと公開鍵データNを用いて、復号データmを求める。復号データmは式8を用いて求める。
m=t×u mod N 式8
N:公開鍵データ
例えば、変数tが2829で、変数uが9200で、公開鍵データNが10807である場合は、乗算剰余演算部204が(2829×9200)mod 10807=3544を計算して復号データmを求める。続いて、乗算剰余演算部204は求めた復号データmを記憶部3に記憶する。図6の暗号処理情報603の「復号データm」にステップS510で求めた「3544」を記憶する。
ステップS511では、制御部2が記憶部3から復号データmを取得して、入出力インタフェース5または通信インタフェース6を介して復号データmを出力する。
実施形態1によれば、上記復号データ3544は、12347067mod 10807を直接計算した結果と一致する。また、暗号処理の度に異なる第1の乱数データsi(上記s0、s1、s2)が生成されるため、上記処理が毎回異なる途中結果を得ることになるため、電力差分解析(DPA)に対して安全な処理が実現できる。
さらに、実施形態1の暗号装置は、電力差分解析(DPA)を用いた秘密鍵の解読を困難にするデータランダム化を行う回路を備えている場合でも、除算処理を行う回路を用いないため回路規模が大きくならないようにできる。
また、コンピュータを用いた場合においても除算処理を行わないため処理速度を向上させることができる。
なお、実施形態1の手法は、べき乗剰余演算の高速処理手法であるChinese Remainder Theorem(CRT)を用いる場合においても適用できる。
実施形態2について説明する。
実施形態2は、実施形態1の乗算剰余演算部204をモンゴメリ乗算剰余演算部701にした構成である。実施形態2の暗号処理は実施形態1で説明したハードウェアにモンゴメリ乗算剰余演算を適用したものである。実施形態2の制御部2は、後述する処理部201(処理回路)、乱数生成部202(乱数生成回路)、べき乗剰余演算部203(べき乗剰余演算回路)、モンゴメリ乗算剰余演算部701(モンゴメリ乗算剰余演算回路)などを有している。記憶部3は、後述する事前生成情報、暗号処理情報などを記憶している。
また、上記に示したハードウェア構成を有するコンピュータを用いることによって、後述する各種処理機能(例えば、図8に示すフロー)を実現してもよい。
実施形態2の制御部2について説明する。
図7は、実施形態2の制御部の一実施例を示す図である。
図7の処理部201は、実施形態1で説明した処理部201と同じ処理を行う。
図7の乱数生成部202は、実施形態1で説明した乱数生成部202と同じ処理を行う。
図7のべき乗剰余演算部203は、記憶部3の暗号データcを基数にし、第2の乱数データrを指数にし、公開鍵データNを法にして、変数c’(第2の変数)を求める。変数c’は後述する式12を用いて求める。続いて、べき乗剰余演算部203は求めた変数c’を記憶部3に記憶する。
また、べき乗剰余演算部203は記憶部3の変数c’を基数にし、変数d’を指数にし、公開鍵データNを法にして、変数t(第3の変数)を求める。変数tは後述する式13を用いて求める。続いて、べき乗剰余演算部203は求めた変数tを記憶部3に記憶する。
また、べき乗剰余演算部203が記憶部3の暗号データcを基数にし、第2の鍵データdRを指数にし、公開鍵データNを法にして、変数u(第4の変数)を求める。変数uは後述する式14を用いて求める。続いて、べき乗剰余演算部203は求めた変数uを記憶部3に記憶する。
図7のモンゴメリ乗算剰余演算部701(モンゴメリ乗算剰余演算回路)は、記憶部3の第1の鍵データdQと耐タンパデータr’とXを用いて、変数d’(第1の変数)を求める。Xは
Figure 2013065117
を示すデータである。変数d’は後述する式11を用いて求める。続いて、モンゴメリ乗算剰余演算部701は求めた変数d’を記憶部3に記憶する。
また、モンゴメリ乗算剰余演算部701は、記憶部3の変数tと変数uと公開鍵データNを用いて、変数m’(第5の変数)を求める。変数m’は後述する式15を用いて求める。続いて、モンゴメリ乗算剰余演算部701は求めた変数m’を記憶部3に記憶する。
また、モンゴメリ乗算剰余演算部701が記憶部3の変数m’とRと公開鍵データNを用いて、復号データmを求める。復号データmは後述する式16を用いて求める。RはモンゴメリパラメータRを2乗した値である。続いて、モンゴメリ乗算剰余演算部701は求めた復号データmを記憶部3に記憶する。
実施形態2の生成処理は実施形態1で説明した処理と同じである。
実施形態2の暗号処理について説明する。
図8は、実施形態2の暗号処理の動作の一実施例を示すフロー図である。
ステップS801では、制御部2の処理部201が入出力インタフェース5または通信インタフェース6を介して暗号データcと公開鍵データNを取得する。例えば、暗号データc=40239と公開鍵データN=55687を取得したとする。続いて、処理部201は暗号データcと公開鍵データNを記憶部3の暗号処理情報に記憶する。c、Nは事前に記憶部3に記憶されていることもありうる。図9の暗号処理情報903を参照。図9は、実施形態2の事前生成情報と暗号処理情報のデータ構造の一実施例を示す図である。図9の暗号処理情報903は、「暗号データc」「公開鍵データN」に記憶される情報を有している。本例では、上記説明した暗号データc「40239」と公開鍵データN「55687」が記憶されている。
ステップS802では、制御部2の処理部201が記憶部3の事前生成情報から乱数設定データrpiと素数データpiを取得する。例えば、乱数設定データrp0=3、rp1=2、rp2=2、rp3=1と、素数データp0=2、p1=3、p2=5、p3=7とを取得したとする。図9の事前生成情報901を参照。事前生成情報901は、「素数データpi」「乱数設定データrpi」に記憶される情報を有している。事前生成情報901の「素数データpi」には生成処理において出力された素数データが記憶され、本例では「p0」「p1」「p2」「p3」「p4」「p5」「p6」・・・・が記憶されている。なお、「p0」「p1」「p2」「p3」に示されている(=2)、(=3)、(=5)、(=7)それぞれは、上記説明した4個の素数データp0〜p3の値を示している。事前生成情報901の「乱数設定データrpi」には生成処理において出力された乱数設定データが記憶され、本例では「rp0」「rp1」「rp2」「rp3」「rp4」「rp5」「rp6」・・・・が記憶されている。なお、「rp0」「rp1」「rp2」「rp3」に示されている(=3)、(=2)、(=2)、(=1)それぞれは、上記説明した4個の乱数設定データrp0〜rp3の値を示している。
ステップS803では、制御部2の乱数生成部202が乱数設定データrpiを用いて第1の乱数データsi(i=0〜n:nは正の整数)を生成する。第1の乱数データsiの生成は、第1の乱数データsiそれぞれに対して0≦si≦rpiを満たす数値とする。例えば、乱数設定データがrp0=3、rp1=2、rp2=2、rp3=1である場合、第1の乱数データs0=2(0≦s0≦3)、s1=1(0≦s1≦2)、s2=0(0≦s2≦2)、s3=1(0≦s2≦2)とすることが考えられる。続いて、乱数生成部202は求めた第1の乱数データsiを、処理部201を介して記憶部3に記憶する。図9の暗号処理情報904を参照。図9の暗号処理情報904は、「第1の乱数データsi」に記憶される情報を有している。本例では「s0」「s1」「s2」「s3」「s4」「s5」「s6」・・・・が記憶されている。なお、「s0」「s1」「s2」「s3」に示されている(=2)、(=1)、(=0)、(=1)それぞれは、上記説明した4個の第1の乱数データs0〜s3の値を示している。
ステップS804では、制御部2の乱数生成部202が素数データpiと第1の乱数データsiとを用いて第2の乱数データrを生成する。第2の乱数データrは式9を用いて求める。
r=p0s0×p1s1×p2s2×・・・×pnsn 式9
r :第2の乱数データ
pi:素数データ
si:第1の乱数データ
例えば、素数データがp0=2、p1=3、p2=5、p3=7で、第1の乱数データがs0=2、s1=1、s2=0、s3=1である場合、2×3×5×7=84を計算して第2の乱数データrを求まる。続いて、乱数生成部202は求めた第2の乱数データrを記憶部3に記憶する。図9の暗号処理情報905を参照。図9の暗号処理情報905は、「第2の乱数データr」「耐タンパデータr’」「変数d’」「変数c’」「変数t」「変数u」「変数m’」「復号データm」に記憶される情報を有している。本例では「第2の乱数データr」「耐タンパデータr’」「変数d’」「変数c’」「変数t」「変数u」「変数m’」「復号データm」に対応する「84」「150」「300」「22950」「45007」「5985」「41123」「8876」が記憶されている。「第2の乱数データr」は、ステップS804で求めた第2の乱数データrが記憶される。「耐タンパデータr’」「変数d’」「変数c’」「変数t」「変数u」「変数m’」「復号データm」それぞれに記憶する情報については後述する。
ステップS805では、乱数生成部202または処理部201が素数データpiと乱数設定データrpiと第1の乱数データsiとを用いて耐タンパデータr’を生成する。耐タンパデータr’は式10を用いて求める。
r’=p0rp0−s0×p1rp1−s1×p2rp2−s2×
・・・×pnrpn−sn 式10
r’:耐タンパデータ
pi:素数データ
si:第1の乱数データ
rpi:乱数設定データ
例えば、素数データがp0=2、p1=3、p2=5、p3=7で、第1の乱数データがs0=2、s1=1、s2=0、s3=1で、乱数設定データがrp0=3、rp1=2、rp2=2、rp3=1である場合について説明する。乱数生成部202または処理部201は、23−2×32−1×52−0×71−1=150を計算して耐タンパデータr’が求まる。続いて、乱数生成部202または処理部201は求めた耐タンパデータr’を記憶部3に記憶する。図9の暗号処理情報905の「耐タンパデータr’」にステップS805で求めた「150」を記憶する。
ステップS806では、制御部2のモンゴメリ乗算剰余演算部701が記憶部3の第1の鍵データdQと耐タンパデータr’を用いて、変数d’を求める。変数d’は式11を用いて求める。
d’=dQ×r’×(R−1mod X)mod X 式11
dQ:第1の鍵データ
r’:耐タンパデータ
R :モンゴメリパラメータ
Figure 2013065117
例えば、第1の鍵データdQが2で、耐タンパデータr’が150である場合に、モンゴメリ乗算剰余演算部701の処理可能なモジュラス(公開鍵データN:法)のビット長が16ビットであるときは、2×150×1 mod 0xFFFF=300を計算して変数d’を求める。ここで、(R−1mod X)の計算結果は1であり、0xFFFFは216−1を16進数で表した数である。続いて、モンゴメリ乗算剰余演算部701は求めた変数d’を記憶部3に記憶する。図9の暗号処理情報905の「変数d’」にステップS806で求めた「300」を記憶する。
なお、第1の鍵データdQは記憶部3の事前生成情報902から取得する。事前生成情報902は「第1の鍵データdQ」「第2の鍵データdR」に記憶される情報を有している。事前生成情報902の「第1の鍵データdQ」には生成処理において出力された第1の鍵データが記憶され、本例では「2」が記憶されている。「第2の鍵データdR」には生成処理において出力された第2の鍵データが記憶され、本例では「11611」が記憶されている。
ステップS807では、制御部2のべき乗剰余演算部203が記憶部3の暗号データcと第2の乱数データrと公開鍵データNを用いて、変数c’を求める。変数c’は式12を用いて求める。
c’=cmod N 式12
c:暗号データ
r:第2の乱数データ
N:公開鍵データ
例えば、暗号データcが40239で、第2の乱数データrが84で、公開鍵データNが55687である場合は、べき乗剰余演算部203が(40239)84mod 55687=22950を計算して変数c’を求める。続いて、べき乗剰余演算部203は求めた変数c’を記憶部3に記憶する。図9の暗号処理情報905の「変数c’」にステップS807で求めた「22950」を記憶する。
ステップS808では、制御部2のべき乗剰余演算部203が記憶部3の変数c’と変数d’と公開鍵データNを用いて、変数tを求める。変数tは式13を用いて求める。
t=(c’)d’mod N 式13
N:公開鍵データ
例えば、変数c’が22950で、変数d’が300で、公開鍵データNが55687である場合は、べき乗剰余演算部203が(22950)300mod 55687=45007を計算して変数tを求める。続いて、べき乗剰余演算部203は求めた変数tを記憶部3に記憶する。図9の暗号処理情報905の「変数t」にステップS808で求めた「45007」を記憶する。
ステップS809では、制御部2のべき乗剰余演算部203が記憶部3の暗号データcと第2の鍵データdRと公開鍵データNを用いて、変数uを求める。変数uは式14を用いて求める。
u=cdRmod N 式14
c :暗号データ
dR:第2の鍵データ
N :公開鍵データ
例えば、暗号データcが40239で、第2の鍵データdRが11611で、公開鍵データNが55687である場合は、べき乗剰余演算部203が(40239)11611mod 55687=5985を計算して変数uを求める。続いて、べき乗剰余演算部203は求めた変数uを記憶部3に記憶する。図9の暗号処理情報905の「変数u」にステップS809で求めた「5985」を記憶する。
ここでステップS809はS802〜S808と順序を入れ替えてもよい。
ステップS810では、制御部2のモンゴメリ乗算剰余演算部701が記憶部3の変数tと変数uと公開鍵データNを用いて、変数m’を求める。変数m’は式15を用いて求める。
m’=t×u×(R−1mod N)mod N 式15
N:公開鍵データ
R:モンゴメリパラメータ
例えば、変数tが45007で、変数uが5985で、公開鍵データNが55687で、モンゴメリパラメータRが216=0x10000(16進数)ある場合は、モンゴメリ乗算剰余演算部701が変数m’を求める。変数m’は45007×5985×21706 mod 55687=41123を計算して求める。ここで、R−1(mod N)は21706である。続いて、モンゴメリ乗算剰余演算部701は求めた変数m’を記憶部3に記憶する。図9の暗号処理情報905の「変数m’」にステップS810で求めた「41123」を記憶する。
ステップS811では、制御部2のモンゴメリ乗算剰余演算部701が記憶部3の変数m’とモンゴメリパラメータの2乗であるRmod Nと公開鍵データNを用いて、復号データmを求める。復号データmは式16を用いて求める。
m=m’×Rmod N×(R−1mod N)mod N 式16
N:公開鍵データ
R:モンゴメリパラメータ
例えば、変数m’が41123で、公開鍵データNが10807で、モンゴメリパラメータRが216=0x10000(16進数)である場合、復号データmは8876となる。モンゴメリ乗算剰余演算部701は41123×51734×21706 mod 55687=8876を計算して復号データmを求める。Rmod Nは51734で、(R−1mod N)は21706である。続いて、モンゴメリ乗算剰余演算部701は求めた復号データmを記憶部3に記憶する。図9の暗号処理情報905の「復号データm」にステップS810で求めた「8876」を記憶する。
ここで、ステップS810、ステップS811について、乗算の可換性により、
S810:m’=t×R×(R−1mod N)mod N
S811:m=m’×u×(R−1mod N)mod N
あるいは、
S810:m=u×R×(R−1mod N)mod N
S811:m=m’×t×(R−1mod N)mod N
のような順番で計算してもよい。
ステップS812では、制御部2が記憶部3から復号データmを取得して、入出力インタフェース5または通信インタフェース6を介して復号データmを出力する。
なお、モンゴメリ乗算剰余演算では(1)mod Xと(2)R−1mod Xが計算に現れる。そこで、(1)のmod Xについては、Xとして取り扱える最大値を22048−1や、21024−1、2512−1などを使用する。すなわち、mod Xは無いことと同じになる。
(2)R−1 mod Xについては、本来はd=d×r’×(R−1mod X)mod Xを計算し、その後、R−1mod Nが掛かってしまった影響を打ち消すために、d×Rmod X×(R−1mod X)mod X=(d×r’×R−1)mod X×Rmod X×R−1mod X mod X=d×r’mod Xと計算するのが一般的であるが、X=「取り扱える最大値」とした場合にはR−1mod X=1となるため、そもそもR−1をかけた影響が無い。そこで、影響を打ち消す演算を省略している。ただし、ステップS810とS811ではmod Xではなくmod Nを用いて計算しなければならない。
実施形態2によれば、上記復号データ8876は、4023936811mod 55687を直接計算した結果と一致する。また、暗号処理の度に異なる第1の乱数データsi(上記s0、s1、s2、s3)が生成されるため、上記処理が毎回異なる途中結果を得ることになるため、電力差分解析(DPA)に対して安全な処理が実現できる。
さらに、実施形態2の暗号装置は、電力差分解析(DPA)を用いた秘密鍵の解読を困難にするデータランダム化を行う回路を備えている場合でも、除算処理を行う回路を用いないため回路規模が大きくならないようにできる。
また、コンピュータを用いた場合においても除算処理を行わないため処理速度を向上させることができる。
なお、実施形態2の手法は、べき乗剰余演算の高速処理手法であるChinese Remainder Theorem(CRT)を用いる場合においても適用できる。
実施形態3の制御部2について説明する。
実施形態3は、楕円曲線暗号を適用した暗号処理を図1のハードウェアに適用したものである。また、楕円曲線暗号で用いる点のスカラー倍算にバイナリ法を用いる。例えば、個人鍵d(秘密鍵データ)が160ビットである場合、秘密鍵データdは非常に大きな数(例えば、2160に近い数)である場合、スカラー倍算を実行することは、非常に多くの回数の点の加算演算をともなうため、非現実的である。そこで、バイナリ法を用いてスカラー倍算の計算量のオーダを秘密鍵データdのビット数のオーダに抑える。点のスカラー倍算におけるバイナリ法は、秘密鍵データdのビット長をuとする。また、秘密鍵データdのiビット目をd[i]と表記する(0≦i≦u−1)。d[0]が最下位ビットでありd[u−1]が最上位ビットである。これにより、uビットの秘密鍵データdは、べき乗剰余演算の場合と同様に、前述したd[u−1]|| ・・・ ||d[1]||d[0]のように表現される。なお、「||」はビット列の連結を示す。すると、楕円曲線上の点をAと秘密鍵データdを用いて表される楕円曲線上の点V=dAと、d[u−1]|| ・・・ ||d[1]||d[0]により、dA=2u−1d[u−1]A+・・・+2d[1]A+20d[0]Aが得られる。
スカラー倍算で用いるバイナリ法においては、秘密鍵データdのビット値d[i]を上位ビットから下位ビットの順にスキャンする。すなわち、i=u-1からi=0の順にスキャンし、秘密鍵データdのビット値d[i]に応じて、d[i]=1の場合は2倍算(v:=2×v)の後に、加算(v:=v+A)を実行し、d[i]=0の場合は2倍算(v:=2×v)のみを実行する。ただし、d[i]はdの最下位からi番目のビット値で、i≧0である。なお、バイナリ法の他にウインドウ法や符号付バイナリ法、符号付ウィンドウ法など、一般的な点のスカラー倍算高速演算手法を用いてもよい。
実施形態3の制御部2は、後述する処理部201(処理回路)、乱数生成部202(乱数生成回路)、点のスカラー倍算1001(点のスカラー倍算演算回路)、点の加算演算部1002(点の加算演算回路)、乗算部1003(乗算回路)などを有している。記憶部3は、後述する事前生成情報、暗号処理情報などを記憶している。
乗算部1003は点のスカラー倍算部の中に含まれていることもありうる。また、乗算部の代わりにモンゴメリ乗算剰余演算部が含まれていることもある。
また、上記に示したハードウェア構成を有するコンピュータを用いることによって、後述する各種処理機能(例えば、図11に示すフロー)を実現してもよい。
図10は、実施形態3の制御部の一実施例を示す図である。
図10の処理部201は、実施形態1および2で説明した処理部201と同じ処理を行う。
図10の乱数生成部202は、実施形態1および2で説明した乱数生成部202と同じ処理を行う。
図10の点のスカラー倍算1001(点のスカラー倍算演算回路)は、記憶部3の暗号データcと第2の乱数データrを用いて、変数c’(第2の変数)を求める。変数c’は後述する式20を用いて求める。続いて、点のスカラー倍算演算部1001は求めた変数c’を記憶部3に記憶する。
また、点のスカラー倍算演算部1001は記憶部3の変数c’と変数d’を用いて、変数t(第3の変数)を求める。変数tは後述する式21を用いて求める。続いて、点のスカラー倍算演算部1001は求めた変数tを記憶部3に記憶する。
また、点のスカラー倍算演算部1001は記憶部3の暗号データcと第2の鍵データdRを用いて、変数u(第4の変数)を求める。変数uは後述する式22を用いて求める。続いて、点のスカラー倍算演算部1001は求めた変数uを記憶部3に記憶する。
点のスカラー倍算は、楕円曲線上の点A、スカラー値dから、V=dAにより与えられる楕円曲線上の点Vを計算する演算である。例えば、点の加算、点の減算、点の2倍算を組み合わせることで行うもので楕円曲線暗号における基本的な演算方法である。
楕円曲線ついて説明する。以下に示すx,yの関係式を楕円曲線と呼ぶ。楕円曲線は、主に素体と2べきの2種類からなる。楕円曲線を一意に決定するためのパラメータa,bを楕円曲線パラメータと呼ぶ。
楕円曲線(素体):y=x+ax+b(mod p)
p :素数
a、b:楕円曲線パラメータ(0≦a、b<p)
楕円曲線(2べき):y+xy=x+ax+b(mod f(x))
F :GF(2)の多項式
a、b:楕円曲線パラメータ(a、bIGF(2))。
楕円曲線上の点は、楕円曲線で表される関係式を満たす(x,y)であり、素体の場合0≦x,y<pである整数x,yの集合であり、2べきの場合はx,yI GF(2)を満たす要素x,yの集合である。また、A=(x,y)で表される点Aについて、xを点Aのx座標、yを点Aのy座標とそれぞれ呼ぶ。また、楕円曲線上の点の一つは、無限遠点と呼ばれる特殊な点である。「楕円曲線上の点」の表現を簡略化し、点と表現する場合もある。ここで、無限遠点とは楕円曲線上の特殊な点であり、Oと表記される。任意の点Aに対しA+O=O+A=Aを満たす。ただし、+は点の加算を表す。詳細な定義はIEEE P1363などの標準を参照されたい。
ベースポイントは、楕円曲線上の点の一つで、Gと表記される。楕円曲線暗号の利用者間で共通して使用され、公開鍵/個人鍵ペア生成をはじめ、楕円曲線暗号を用いた各種機能において使用される。詳細な定義はIEEE P1363などの標準を参照されたい。
点の加算は、点A、Bから、C=A+Bで表される楕円曲線上の点Cが定義される。このA+Bの演算を点の加算と呼ぶ。Cは、A、Bのx,y座標および楕円曲線パラメータから計算することができる。なお、この演算は可換則、つまりA+B=B+Aが成立する。この演算の詳細についてはInstitute of Electrical and Electronic Engineers(IEEE)P1363などの標準を参照されたい。なお、点の減算は、点A、Bから、C=A−Bで表される楕円曲線上の点Cが定義される。このA−Bの演算を点の減算と呼ぶ。Cは、A、Bのx,y座標および楕円曲線パラメータから計算することができる。また、点の2倍算は、楕円曲線上の点Aから、点A、Bから、C=2Aで表される楕円曲線上の点Cが定義される。この2Aを演算を点の2倍算と呼ぶ。Cは、Aのx,y座標および楕円曲線パラメータから、算術演算を用いて計算することができる。
なお、楕円曲線暗号における公開鍵、個人鍵はベースポイントG、個人鍵を表すスカラー値dに対し、公開鍵はV=dGを満たすVにより与えられる。すなわち、公開鍵は楕円曲線上の点であり、個人鍵はスカラー値である。
次に、図10の点の加算演算部1002(点の加算演算回路)は、記憶部3の変数tと変数uとを用いて、復号データmを求める。復号データmは後述する式23を用いて求める。続いて、点の加算演算部1002は求めた復号データmを記憶部3に記憶する。
図10の乗算部1003(乗算回路)は、記憶部3の第1の鍵データdQと耐タンパデータr’を用いて、変数d’(第1の変数)を求める。変数d’は後述する式19を用いて求める。続いて、乗算部1003は求めた変数d’を記憶部3に記憶する。
実施形態3の生成処理は実施形態1で説明した処理と同じである。
実施形態3の暗号処理について説明する。
図11は、実施形態3の暗号処理の動作の一実施例を示すフロー図である。
ステップS1101では、制御部2の処理部201が入出力インタフェース5または通信インタフェース6を介して暗号データcを取得する。続いて、処理部201は暗号データcを記憶部3の暗号処理情報に記憶する。なお、事前に暗号データcが記憶部3に記憶されていることもある。図12の暗号処理情報1203を参照。図12は、実施形態3の事前生成情報と暗号処理情報のデータ構造の一実施例を示す図である。図11の暗号処理情報1203は、「暗号データc」に記憶される情報を有している。本例では、上記説明した暗号データc「c」が記憶されている。
ステップS1102では、制御部2の処理部201が記憶部3の事前生成情報から乱数設定データrpiと素数データpiを取得する。例えば、乱数設定データrp0=2、rp1=2、rp2=1と、素数データp0=2、p1=3、p2=5とを取得したとする。図12の事前生成情報1201を参照。事前生成情報1201は、「素数データpi」「乱数設定データrpi」に記憶される情報を有している。事前生成情報1201の「素数データpi」には生成処理において出力された素数データが記憶され、本例では「p0」「p1」「p2」「p3」「p4」「p5」「p6」・・・・が記憶されている。なお、「p0」「p1」「p2」に示されている(=2)、(=3)、(=5)それぞれは、上記説明した3個の素数データp0〜p2の値を示している。事前生成情報1201の「乱数設定データrpi」には生成処理において出力された乱数設定データが記憶され、本例では「rp0」「rp1」「rp2」「rp3」「rp4」「rp5」「rp6」・・・・が記憶されている。なお、「rp0」「rp1」「rp2」に示されている(=2)、(=2)、(=1)それぞれは、上記説明した3個の乱数設定データrp0〜rp2の値を示している。
ステップS1103では、制御部2の乱数生成部202が乱数設定データrpiを用いて第1の乱数データsi(i=0〜n:nは正の整数)を生成する。第1の乱数データsiの生成は、第1の乱数データsiそれぞれに対して0≦si≦rpiを満たす数値とする。例えば、乱数設定データがrp0=2、rp1=2、rp2=1である場合、第1の乱数データs0=2(0≦s0≦2)、s1=1(0≦s1≦2)、s2=0(0≦s2≦1)とすることが考えられる。続いて、乱数生成部202は求めた第1の乱数データsiを、処理部201を介して記憶部3に記憶する。図12の暗号処理情報1204を参照。図12の暗号処理情報1204は、「第1の乱数データsi」に記憶される情報を有している。本例では「s0」「s1」「s2」「s3」「s4」「s5」「s6」・・・・が記憶されている。なお、「s0」「s1」「s2」に示されている(=2)、(=1)、(=0)それぞれは、上記説明した3個の第1の乱数データs0〜s2の値を示している。
ステップS1104では、制御部2の乱数生成部202が素数データpiと第1の乱数データsiとを用いて第2の乱数データrを生成する。第2の乱数データrは式17を用いて求める。
r=p0s0×p1s1×p2s2×・・・×pnsn 式17
r :第2の乱数データ
pi:素数データ
si:第1の乱数データ
例えば、素数データがp0=2、p1=3、p2=5で、第1の乱数データがs0=2、s1=1、s2=0である場合、2×3×5=12を計算して第2の乱数データrが求まる。続いて、乱数生成部202は求めた第2の乱数データrを記憶部3に記憶する。図12の暗号処理情報1205を参照。図12の暗号処理情報1205は、「第2の乱数データr」「耐タンパデータr’」「変数d’」「変数c’」「変数t」「変数u」「復号データm」に記憶される情報を有している。本例では「第2の乱数データr」「耐タンパデータr’」「変数d’」「変数c’」「変数t」「変数u」「復号データm」に対応する「12」「15」「30」「12c」「360c」「5c」「365c」が記憶されている。「第2の乱数データr」は、ステップS804で求めた第2の乱数データrが記憶される。「耐タンパデータr’」「変数d’」「変数c’」「変数t」「変数u」「復号データm」それぞれに記憶する情報については後述する。
ステップS1105では、乱数生成部202または処理部201が素数データpiと乱数設定データrpiと第1の乱数データsiとを用いて耐タンパデータr’を生成する。耐タンパデータr’は式18を用いて求める。
r’=p0rp0−s0×p1rp1−s1×p2rp2−s2×
・・・×pnrpn−sn 式18
r’:耐タンパデータ
pi:素数データ
si:第1の乱数データ
rpi:乱数設定データ
例えば、素数データがp0=2、p1=3、p2=5で、第1の乱数データがs0=2、s1=1、s2=0で、乱数設定データがrp0=2、rp1=2、rp2=1である場合について説明する。乱数生成部202または処理部201は、22−2×32−1×51−0=15を計算して耐タンパデータr’が求まる。続いて、乱数生成部202または処理部201は求めた耐タンパデータr’を記憶部3に記憶する。図12の暗号処理情報1205の「耐タンパデータr’」にステップS1105で求めた「15」を記憶する。
ステップS1106では、制御部2の乗算部1003が記憶部3の第1の鍵データdQと耐タンパデータr’を用いて、変数d’を求める。変数d’は式19を用いて求める。
d’=dQ×r’ 式19
dQ:第1の鍵データ
r’:耐タンパデータ
例えば、第1の鍵データdQが2で、耐タンパデータr’が15である場合に、乗算部1003は2×15=30を計算して変数d’を求める。続いて、乗算部1003は求めた変数d’を記憶部3に記憶する。図12の暗号処理情報1205の「変数d’」にステップS1106で求めた「30」を記憶する。
乗算部の代わりにモンゴメリ乗算剰余演算部を保有していた場合には、d'=dQ×r'×(R−1mod X)mod Xと計算する。ここでRはモンゴメリパラメータ、Xは
Figure 2013065117
である。
なお、第1の鍵データdQは記憶部3の事前生成情報1202から取得する。事前生成情報1202は「第1の鍵データdQ」「第2の鍵データdR」に記憶される情報を有している。事前生成情報1202の「第1の鍵データdQ」には生成処理において出力された第1の鍵データが記憶され、本例では「2」が記憶されている。「第2の鍵データdR」には生成処理において出力された第2の鍵データが記憶され、本例では「5」が記憶されている。
ステップS1107では、制御部2の点のスカラー倍算演算部1001が記憶部3の暗号データcと第2の乱数データrを用いて、変数c’を求める。変数c’は式20を用いて求める。
c’=c×r 式20
c:暗号データ
r:第2の乱数データ
例えば、暗号データをcと表すとき、第2の乱数データrが12である場合は、点のスカラー倍算演算部1001が12×cを計算して変数c’を求める。続いて、点のスカラー倍算演算部1001は求めた変数c’を記憶部3に記憶する。図12の暗号処理情報1205の「変数c’」にステップS1107で求めた「12c」を記憶する。
ステップS1108では、制御部2の点のスカラー倍算演算部1001が記憶部3の変数c’と変数d’を用いて、変数tを求める。変数tは式21を用いて求める。
t=d’×c’ 式21
例えば、変数c’が12cで、変数d’が30である場合は、点のスカラー倍算演算部1001が30×12c=360cを計算して変数tを求める。続いて、点のスカラー倍算演算部1001は求めた変数tを記憶部3に記憶する。図12の暗号処理情報1205の「変数t」にステップS1208で求めた「360c」を記憶する。
ステップS1109では、制御部2の点のスカラー倍算演算部1001が記憶部3の暗号データcと第2の鍵データdRを用いて、変数uを求める。変数uは式22を用いて求める。
u=c×dR 式22
c :暗号データ
dR:第2の鍵データ
例えば、暗号データcがcで、第2の鍵データdRが5である場合は、点のスカラー倍算演算部1001が5×c=5cを計算して変数uを求める。続いて、点のスカラー倍算演算部1001は求めた変数uを記憶部3に記憶する。図12の暗号処理情報1205の「変数u」にステップS1109で求めた「5c」を記憶する。
ここで、ステップS1109はステップS1102〜S1108と順番を入れ替えてもよい。
ステップS1110では、制御部2の点の加算演算部1002が記憶部3の変数tと変数uとを用いて、復号データmを求める。復号データmは式23を用いて求める。
m=t+u 式23
例えば、変数tが360cで、変数uが5cである場合、点の加算演算部1002は360c+5c=365cを計算して復号データmを求める。続いて、点の加算演算部1002は求めた復号データmを記憶部3に記憶する。図12の暗号処理情報1205の「復号データm」にステップS1110で求めた「365c」を記憶する。
ステップS1111では、制御部2が記憶部3から復号データmを取得して、入出力インタフェース5または通信インタフェース6を介して復号データmを出力する。
実施形態3によれば、上記復号データ365cは、スカラー値d×暗号データcを直接計算した結果と一致する。また、暗号処理の度に異なる第1の乱数データsi(上記s0、s1、s2)が生成されるため、上記処理が毎回異なる途中結果を得ることになるため、電力差分解析(DPA)に対して安全な処理が実現できる。
さらに、実施形態2の暗号装置は、電力差分解析(DPA)を用いた秘密鍵の解読を困難にするデータランダム化を行う回路を備えている場合でも、除算処理を行う回路を用いないため回路規模が大きくならないようにできる。
また、コンピュータを用いた場合においても除算処理を行わないため処理速度を向上させることができる。
また、本発明は、上記実施の形態に限定されるものでなく、本発明の要旨を逸脱しない範囲内で種々の改良、変更が可能である。
1 暗号装置
2 制御部
3 記憶部
4 記録媒体読取装置
5 入出力インタフェース
6 通信インタフェース
7 バス
8 記録媒体
9 入出力部
201 処理部
202 乱数生成部
203 べき乗剰余演算部
204 乗算剰余演算部
401、402 事前生成情報
601、602、603 暗号処理情報
701 モンゴメリ乗算剰余演算部
806 乗算剰余演算部
901、902 事前生成情報
903、904、905 暗号処理情報
1001 点のスカラー倍算演算部
1002 点の加算演算部
1003 乗算部
1201、1202 事前生成情報
1203、1204、1205 暗号処理情報
楕円曲線(素体):y=x+ax+b(mod p)
p :素数
a、b:楕円曲線パラメータ(0≦a、b<p)
楕円曲線(2べき): +xy=x+ax+b(mod f(x))
F :GF(2)の多項式
a、b:楕円曲線パラメータ(a、b⊆GF(2))。
楕円曲線上の点は、楕円曲線で表される関係式を満たす(x,y)であり、素体の場合0≦x,y<pである整数x,yの集合であり、2べきの場合はx,y⊆GF(2)を満たす要素x,yの集合である。また、A=(x,y)で表される点Aについて、xを点Aのx座標、yを点Aのy座標とそれぞれ呼ぶ。また、楕円曲線上の点の一つは、無限遠点と呼ばれる特殊な点である。「楕円曲線上の点」の表現を簡略化し、点と表現する場合もある。ここで、無限遠点とは楕円曲線上の特殊な点であり、Oと表記される。任意の点Aに対しA+O=O+A=Aを満たす。ただし、+は点の加算を表す。詳細な定義はIEEE P1363などの標準を参照されたい。

Claims (9)

  1. 基数を示す暗号データと指数を示す秘密鍵データと法を示す公開鍵データとを用いてべき乗剰余演算により復号データを求める暗号装置であって、
    素数データ各々に対応する指数を示す乱数設定データ各々を用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して乗算データを求め、前記乗算データにより前記秘密鍵データを除算して求めた商を示す第1の鍵データと、前記乗算データにより前記秘密鍵データを除算して求めた余りを示す第2の鍵データと、を予め記憶する記憶部と、
    前記素数データ各々に対応する指数を示す、前記乱数設定データ以下でかつ正の整数である第1の乱数データ各々を用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して第2の乱数データを求め、前記素数データ各々に対応する指数を示す、前記乱数設定データから前記乱数設定データに対応する前記第1の乱数データを減算した減算データ用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して耐タンパデータを求める乱数生成部と、
    前記第1の鍵データと前記耐タンパデータとを基数に用い、乗算剰余演算において扱える最大ビット幅長から1を減算したデータを法とし、乗算剰余演算をして第1の変数を求め、あるいは、前記第1の鍵データと前記耐タンパデータとの乗算をして第1の変数を求め、前記暗号データを基数とし、前記第2の乱数データを指数とし、公開鍵データを法とし、べき乗剰余演算をして第2の変数を求め、前記第2の変数を基数とし、前記第1の変数を指数とし、公開鍵データを法とし、べき乗剰余演算をして第3の変数を求め、前記暗号データを基数とし、前記第2の鍵データを指数とし、公開鍵データを法とし、べき乗剰余演算をして第4の変数を求め、前記第3の変数と前記第4の変数とを基数に用い、公開鍵データを法とし、乗算剰余演算をして復号データを求めるべき乗剰余演算部と、
    を備えることを特徴とする暗号装置。
  2. 前記べき乗剰余演算部は、
    前記第1の鍵データと前記耐タンパデータを基数に用い、2のモンゴメリ乗算剰余演算において扱える最大ビット幅長乗から1を減算したデータを法とし、モンゴメリ乗算剰余演算をして第1の変数を求め、前記第3の変数と前記第4の変数を基数に用い、公開鍵データを法とし、モンゴメリ乗算剰余演算をして第5の変数を求め、
    前記第5の変数と前記モンゴメリパラメータの2乗を基数に用い、公開鍵データを法とし、モンゴメリ乗算剰余演算をして復号データを求める、
    ことを特徴とする請求項1に記載の暗号装置。
  3. 暗号データと秘密鍵データと公開鍵データとを用いて点のスカラー倍算演算により復号データを求める暗号装置であって、
    素数データ各々に対応する指数を示す乱数設定データ各々を用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して乗算データを求め、前記乗算データにより前記秘密鍵データを除算して求めた商を示す第1の鍵データと、前記乗算データにより前記秘密鍵データを除算して求めた余りを示す第2の鍵データと、を予め記憶する記憶部と、
    前記素数データ各々に対応する指数を示す、前記乱数設定データ以下でかつ正の整数である第1の乱数データ各々を用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して第2の乱数データを求め、前記素数データ各々に対応する指数を示す、前記乱数設定データから前記乱数設定データに対応する前記第1の乱数データを減算した減算データを用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して耐タンパデータを求める乱数生成部と、
    前記第1の鍵データと前記耐タンパデータとを用いて乗算をして第1の変数を求める乗算部と、
    前記暗号データと前記第2の乱数データとを用いて点のスカラー倍算演算をして第2の変数を求め、前記第2の変数と前記第1の変数とを用いて点のスカラー倍算演算をして第3の変数を求め、前記暗号データと前記第2の鍵データとを用いて点のスカラー倍算演算をして第4の変数を求め、前記第3の変数と前記第4の変数とを用いて点の加算演算をして復号データを求める点のスカラー倍算演算部と、
    を備えることを特徴とする暗号装置。
  4. コンピュータによって実行される暗号処理方法であって、
    素数データ各々に対応する指数を示す乱数設定データ各々を用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して乗算データを求め、前記乗算データにより前記秘密鍵データを除算して求めた商を示す第1の鍵データと、前記乗算データにより前記秘密鍵データを除算して求めた余りを示す第2の鍵データと、を予め記憶部に記憶し、
    前記素数データ各々に対応する指数を示す、前記乱数設定データ以下でかつ正の整数である第1の乱数データ各々を用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して第2の乱数データを求め、前記素数データ各々に対応する指数を示す、前記乱数設定データから前記乱数設定データに対応する前記第1の乱数データを減算した減算データを用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して耐タンパデータを求め、
    前記第1の鍵データと前記耐タンパデータとを基数に用い、2の乗算剰余演算において扱える最大ビット幅長乗から1を減算したデータを法とし、乗算剰余演算をして第1の変数を求め、あるいは、前記第1の鍵データと前記耐タンパデータとを乗算して第1の変数を求め、
    前記暗号データを基数とし、前記第2の乱数データを指数とし、公開鍵データを法とし、べき乗剰余演算をして第2の変数を求め、
    前記第2の変数を基数とし、前記第1の変数を指数とし、公開鍵データを法とし、べき乗剰余演算をして第3の変数を求め、
    前記暗号データを基数とし、前記第2の鍵データを指数とし、公開鍵データを法とし、べき乗剰余演算をして第4の変数を求め、
    前記第3の変数と前記第4の変数とを基数に用い、公開鍵データを法とし、乗算剰余演算をして復号データを求める、
    ことを特徴とする処理方法。
  5. 前記コンピュータが、
    前記第1の鍵データと前記耐タンパデータを基数に用い、2のモンゴメリ乗算剰余演算において扱える最大ビット幅長乗から1を減算したデータを法とし、モンゴメリ乗算剰余演算をして第1の変数を求め、
    前記第3の変数と前記第4の変数を基数に用い、公開鍵データを法とし、モンゴメリ乗算剰余演算をして第5の変数を求め、
    前記第5の変数と前記モンゴメリパラメータの2乗を基数に用い、公開鍵データを法とし、モンゴメリ乗算剰余演算をして復号データを求める、
    ことを特徴とする請求項4に記載の処理方法。
  6. コンピュータによって実行される暗号処理方法であって、
    素数データ各々に対応する指数を示す乱数設定データ各々を用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して乗算データを求め、前記乗算データにより前記秘密鍵データを除算して求めた商を示す第1の鍵データと、前記乗算データにより前記秘密鍵データを除算して求めた余りを示す第2の鍵データと、を予め記憶部に記憶し、
    前記素数データ各々に対応する指数を示す、前記乱数設定データ以下でかつ正の整数である第1の乱数データ各々を用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して第2の乱数データを求め、前記素数データ各々に対応する指数を示す、前記乱数設定データから前記乱数設定データに対応する前記第1の乱数データを減算した減算データを用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して耐タンパデータを求め、
    前記第1の鍵データと前記耐タンパデータとを用いて乗算をして第1の変数を求め、
    前記暗号データと前記第2の乱数データとを用いて点のスカラー倍算演算をして第2の変数を求め、
    前記第2の変数と前記第1の変数とを用いて点のスカラー倍算演算をして第3の変数を求め、
    前記暗号データと前記第2の鍵データとを用いて点のスカラー倍算演算をして第4の変数を求め、
    前記第3の変数と前記第4の変数とを用いて点の加算演算をして復号データを求める、
    ことを特徴とする処理方法。
  7. 素数データ各々に対応する指数を示す乱数設定データ各々を用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して乗算データを求め、前記乗算データにより前記秘密鍵データを除算して求めた商を示す第1の鍵データと、前記乗算データにより前記秘密鍵データを除算して求めた余りを示す第2の鍵データと、を予め記憶部に記憶し、
    前記素数データ各々に対応する指数を示す、前記乱数設定データ以下でかつ正の整数である第1の乱数データ各々を用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して第2の乱数データを求め、前記素数データ各々に対応する指数を示す、前記乱数設定データから前記乱数設定データに対応する前記第1の乱数データを減算した減算データを用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して耐タンパデータを求め、
    前記第1の鍵データと前記耐タンパデータとを基数に用い、2の乗算剰余演算において扱える最大ビット幅長乗から1を減算したデータを法とし、乗算剰余演算をして第1の変数を求め、あるいは、前記第1の鍵データと前記耐タンパデータとの乗算を行って第1の変数を求め、
    前記暗号データを基数とし、前記第2の乱数データを指数とし、公開鍵データを法とし、べき乗剰余演算をして第2の変数を求め、
    前記第2の変数を基数とし、前記第1の変数を指数とし、公開鍵データを法とし、べき乗剰余演算をして第3の変数を求め、
    前記暗号データを基数とし、前記第2の鍵データを指数とし、公開鍵データを法とし、べき乗剰余演算をして第4の変数を求め、
    前記第3の変数と前記第4の変数とを基数に用い、公開鍵データを法とし、乗算剰余演算をして復号データを求める、
    処理をコンピュータが実行することを特徴とする暗号プログラム。
  8. 前記第1の鍵データと前記耐タンパデータを基数に用い、2のモンゴメリ乗算剰余演算において扱える最大ビット幅長乗から1を減算したデータを法とし、モンゴメリ乗算剰余演算をして第1の変数を求め、
    前記第3の変数と前記第4の変数を基数に用い、公開鍵データを法とし、モンゴメリ乗算剰余演算をして第5の変数を求め、
    前記第5の変数と前記モンゴメリパラメータの2乗を基数に用い、公開鍵データを法とし、モンゴメリ乗算剰余演算をして復号データを求める、
    処理を前記コンピュータが実行することを特徴とする請求項7に記載の暗号プログラム。
  9. 素数データ各々に対応する指数を示す乱数設定データ各々を用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して乗算データを求め、前記乗算データにより前記秘密鍵データを除算して求めた商を示す第1の鍵データと、前記乗算データにより前記秘密鍵データを除算して求めた余りを示す第2の鍵データと、を予め記憶部に記憶し、
    前記素数データ各々に対応する指数を示す、前記乱数設定データ以下でかつ正の整数である第1の乱数データ各々を用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して第2の乱数データを求め、前記素数データ各々に対応する指数を示す、前記乱数設定データから前記乱数設定データに対応する前記第1の乱数データを減算した減算データを用いて、前記素数データ各々に対してべき乗を求め、求めたべき乗したデータ各々を乗算して耐タンパデータを求め、
    前記第1の鍵データと前記耐タンパデータとを用いて乗算をして第1の変数を求め、
    前記暗号データと前記第2の乱数データとを用いて点のスカラー倍算演算をして第2の変数を求め、
    前記第2の変数と前記第1の変数とを用いて点のスカラー倍算演算をして第3の変数を求め、
    前記暗号データと前記第2の鍵データとを用いて点のスカラー倍算演算をして第4の変数を求め、
    前記第3の変数と前記第4の変数とを用いて点の加算演算をして復号データを求める、
    処理をコンピュータが実行することを特徴とする暗号プログラム。
JP2013541506A 2011-10-31 2011-10-31 暗号装置と方法およびプログラム Active JP5742960B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2011/075120 WO2013065117A1 (ja) 2011-10-31 2011-10-31 暗号装置と方法およびプログラム

Publications (2)

Publication Number Publication Date
JPWO2013065117A1 true JPWO2013065117A1 (ja) 2015-04-02
JP5742960B2 JP5742960B2 (ja) 2015-07-01

Family

ID=48191513

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013541506A Active JP5742960B2 (ja) 2011-10-31 2011-10-31 暗号装置と方法およびプログラム

Country Status (3)

Country Link
US (1) US20160248585A1 (ja)
JP (1) JP5742960B2 (ja)
WO (1) WO2013065117A1 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9893885B1 (en) * 2015-03-13 2018-02-13 Amazon Technologies, Inc. Updating cryptographic key pair
US9674162B1 (en) 2015-03-13 2017-06-06 Amazon Technologies, Inc. Updating encrypted cryptographic key pair
US10003467B1 (en) 2015-03-30 2018-06-19 Amazon Technologies, Inc. Controlling digital certificate use
US9479340B1 (en) 2015-03-30 2016-10-25 Amazon Technologies, Inc. Controlling use of encryption keys
US20220085999A1 (en) * 2020-09-11 2022-03-17 Cryptography Research, Inc. System and method to optimize decryption operations in cryptographic applications
EP3993314B1 (en) * 2020-10-30 2023-11-29 STMicroelectronics S.r.l. Keys for elliptic curve cryptography

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003152702A (ja) * 2001-11-16 2003-05-23 Hitachi Ltd 情報処理装置
JP2005055488A (ja) * 2003-08-05 2005-03-03 Hitachi Ltd 楕円曲線暗号におけるスカラー倍計算方法と、その装置およびそのプログラム
JP2010166463A (ja) * 2009-01-19 2010-07-29 Fujitsu Ltd 復号処理装置、復号処理プログラム、復号処理方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE10156027B4 (de) * 2001-11-15 2012-02-09 Globalfoundries Inc. Abgleichbare Filterschaltung

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003152702A (ja) * 2001-11-16 2003-05-23 Hitachi Ltd 情報処理装置
JP2005055488A (ja) * 2003-08-05 2005-03-03 Hitachi Ltd 楕円曲線暗号におけるスカラー倍計算方法と、その装置およびそのプログラム
JP2010166463A (ja) * 2009-01-19 2010-07-29 Fujitsu Ltd 復号処理装置、復号処理プログラム、復号処理方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
JPN6015013621; 神永 正博、渡邊 高志、遠藤 隆、大河内 俊夫: '"RSA暗号の電力解析法による攻撃とその対策"' 電子情報通信学会論文誌 A Vol.J88-A、No.5, 20050501, p.606-615, 社団法人電子情報通信学会 *
JPN6015013624; 工藤 忠道、恒川 佳隆: '"高速剰余乗算器のべき乗剰余演算への適用"' 電気学会論文誌C Vol.129、No.2, 20090201, p.388-389, (社)電気学会 *

Also Published As

Publication number Publication date
WO2013065117A1 (ja) 2013-05-10
JP5742960B2 (ja) 2015-07-01
US20160248585A1 (en) 2016-08-25

Similar Documents

Publication Publication Date Title
JP4668931B2 (ja) 電力解析攻撃に対する耐タンパ性を持った暗号化処理装置
JP5742960B2 (ja) 暗号装置と方法およびプログラム
KR100891323B1 (ko) 이진 필드 ecc에서 랜덤 포인트 표현을 이용하여 파워해독의 복잡도를 증가시키기 위한 암호화 방법 및 장치
JP5001176B2 (ja) 署名生成装置、署名生成方法及び署名生成プログラム
JP4909403B2 (ja) 安全にデータを求める方法
JP2008252299A (ja) 暗号処理システム及び暗号処理方法
US8300810B2 (en) Method for securely encrypting or decrypting a message
JPWO2012090288A1 (ja) 暗号処理装置、暗号処理方法、およびプログラム
EP3503459B1 (en) Device and method for protecting execution of a cryptographic operation
JP2007187958A (ja) 暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラム
CN101911009A (zh) 用于以签名方案进行非对称加密的对策方法和设备
JP2010164904A (ja) 楕円曲線演算処理装置、楕円曲線演算処理プログラム及び方法
JP5573964B2 (ja) 暗号処理装置および方法
TWI512610B (zh) 利用模數的特殊形式之模組約化
Yan et al. Cybercryptography: Applicable Cryptography for Cyberspace Security
JP2010068135A (ja) 不正操作検知回路、不正操作検知回路を備えた装置、及び不正操作検知方法
US8014520B2 (en) Exponentiation ladder for cryptography
US20160072622A1 (en) Method and apparatus for scalar multiplication secure against differential power attacks
KR101440680B1 (ko) 중국인 나머지 정리에 기반한 준동형 암복호화 방법 및 이를 이용한 장치
Al-Haija et al. Cost-effective design for binary Edwards elliptic curves crypto-processor over GF (2N) using parallel multipliers and architectures
JP2003216026A (ja) 楕円曲線暗号処理方法および楕円曲線暗号処理装置、並びにコンピュータ・プログラム
KR100953716B1 (ko) Crt-rsa 기반의 비트 연산을 이용한 디지털 서명방법, 그 장치 및 이를 기록한 기록 매체
JP6360440B2 (ja) 復号装置、方法及びプログラム
Liu et al. A novel elliptic curve scalar multiplication algorithm against power analysis
Shankar et al. Cryptography with fast point multiplication by using ASCII codes and its implementation

Legal Events

Date Code Title Description
TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150407

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150420

R150 Certificate of patent or registration of utility model

Ref document number: 5742960

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150