JP4662802B2 - 計算方法、計算装置及びコンピュータプログラム - Google Patents

計算方法、計算装置及びコンピュータプログラム Download PDF

Info

Publication number
JP4662802B2
JP4662802B2 JP2005099980A JP2005099980A JP4662802B2 JP 4662802 B2 JP4662802 B2 JP 4662802B2 JP 2005099980 A JP2005099980 A JP 2005099980A JP 2005099980 A JP2005099980 A JP 2005099980A JP 4662802 B2 JP4662802 B2 JP 4662802B2
Authority
JP
Japan
Prior art keywords
register
value
calculation
modulus
remainder
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.)
Expired - Fee Related
Application number
JP2005099980A
Other languages
English (en)
Other versions
JP2006276786A (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
Priority to JP2005099980A priority Critical patent/JP4662802B2/ja
Priority to KR1020050066279A priority patent/KR100723996B1/ko
Priority to DE602005018442T priority patent/DE602005018442D1/de
Priority to EP05254555A priority patent/EP1708081B1/en
Priority to US11/192,138 priority patent/US8085931B2/en
Priority to CN2005100890451A priority patent/CN1841443B/zh
Publication of JP2006276786A publication Critical patent/JP2006276786A/ja
Application granted granted Critical
Publication of JP4662802B2 publication Critical patent/JP4662802B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/60Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
    • G06F7/72Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
    • G06F7/728Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic using Montgomery reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Algebra (AREA)
  • Complex Calculations (AREA)
  • Executing Machine-Instructions (AREA)

Description

本発明は、モンゴメリ乗算剰余演算にて用いられるモンゴメリ変換パラメータに関する値を計算する計算方法、該計算方法を適用した計算装置、及び該計算装置を実現するためのコンピュータプログラムに関し、特に計算速度を高速化する計算方法、計算装置及びコンピュータプログラムに関する。
今後の情報化社会の発展に伴い、電子マネー、住民基本台帳ネットワーク等の情報ネットワークを利用したサービスが普及すると予想される。これらのサービスを安全に運用するためには、情報セキュリティ技術が必須であり、情報セキュリティの基盤技術として暗号技術が用いられる。暗号技術を用いることで、暗号、デジタル署名、認証等の機能を実現し、個人情報を第三者からの不正なアクセスから防御することができる。
暗号技術を実現するための暗号方式は現在まで様々な方式が知られており、これらは共通鍵暗号方式と公開鍵暗号方式との2種類に大別される。共通鍵暗号方式と呼ばれるものは、暗号化と復号とで同一の鍵(共通鍵)を用いる方式であり、この共通鍵を送信者及び受信者以外の第三者にわからない情報とすることで安全性を保つ方式である。公開鍵暗号方式とは、暗号化と復号とで異なる鍵を用いる方式であり、暗号化を行うための鍵(公開鍵)を一般に公開する代わりに、暗号文を復号するための鍵(秘密鍵)を受信者のみの秘密情報とすることで安全性を保つ方式である。共通鍵暗号方式を用いる場合、前述の共通鍵を送受信者以外の第三者にわからない安全な形で共有する必要がある。これに対し公開鍵暗号方式は、送受信者間で秘密情報を共有する必要がないというメリットを有するが、処理を行うための計算量が共通鍵暗号方式と比べて非常に大きいというデメリットを有する。よって、公開鍵暗号方式においては、計算処理の高速化が大きな課題となる。
公開鍵暗号方式は、RSA暗号、楕円曲線暗号が代表的な方式として知られている。RSA暗号においてはべき乗剰余演算を用いた処理が、楕円曲線暗号においては点のスカラー倍算と呼ばれる演算を用いた処理が夫々行われる。これら2つの演算のいずれについても、剰余の法を示す整数nと、0≦a,b<nとなる整数a,bとを用いた式y=a×b(mod n)にて示す乗算剰余演算が基本演算として用いられる。
ところが乗算剰余演算をそのままハードウェア又はソフトウェアにて実装した場合、処理時間が大きく処理効率が悪くなる。そのため乗算剰余演算の代わりに下記の式にて示す整数a,b,nを用いたモンゴメリ乗算剰余と呼ばれる演算法を用いて計算するのが一般的に行われており、下記の式に示すモンゴメリ乗算剰余演算を用いることで、通常の乗算剰余演算より高速な処理を実現することが可能である。なお下記の式及び以降の説明において、「*」は、乗算記号「×」を示すものとする。
y=a×b×R-1(mod n)
ただし、n:剰余の法を示す整数
a,b:0≦a,b<nとなる整数
R:2m*k にて示される定数
k:1ワードあたりのビット長
m:nを表現するために必要なワードの最小個数
図13は、モンゴメリ乗算剰余演算のアルゴリズムを示す説明図である。なお図13に示すアルゴリズムにおいて、x=(xm-1 ,…,x1 ,x0 )は、整数値xを、m個のワード値xi (i=m−1,…,1,0,0≦xi <2k )として表現する形式を示す。図13に示す様に夫々mワード値にて示されるa,b,nに基づいて、mワード値で示される値yを算出する場合のモンゴメリ乗算剰余演算y=a×b×R-1(mod n)を、以降の説明では、y=REDC(a,b)n 又は単にREDCと表記する。また図13を含む以降の図面及び以降の説明において、「:=」とは、右辺の数値又は数式を左辺に代入することを示す。
上述した様にモンゴメリ乗算剰余演算は、a×b×R-1(mod n)であり、通常の乗算剰余演算a×b(mod n)とは異なる演算を行う。よってべき乗剰余演算を正しく実行するためには、モンゴメリ乗算剰余に対して与える入力データをモンゴメリ系と呼ばれるデータに変換する必要がある。通常の乗算剰余演算に与える任意の入力データをx、xをモンゴメリ系に変換したデータをx’とし、xからx’への変換(モンゴメリ変換)をx’=Mont(x)として表し、x’からxへの変換(モンゴメリ逆変換)をx=Mont-1(x’)と表した場合、これらは下記の式にて与えられる。
モンゴメリ変換:x’=Mont(x)=x×R(mod n)
モンゴメリ逆変換:x=Mont-1(x’)=x’×R-1(mod n)
上記式にて示したモンゴメリ変換及びモンゴメリ逆変換は、REDCを用いた下記の式にて示すことができる。ただしHはH=R2 (mod n)で表されるモンゴメリ変換パラメータと呼ばれる値であり、事前計算により求められる。
モンゴメリ変換:x’=REDC(x,H)n =x×R2 ×R-1=x×R(mod n)
ただし、H=R2 (mod n)
モンゴメリ逆変換:x=REDC(x’,1)n =x’×1×R-1=x’×R-1(mod n)
上述した数式に基づくモンゴメリ乗算剰余を用いたべき乗剰余演算のアルゴリズムについて説明する。図14は、モンゴメリ乗算剰余演算を用いたべき乗剰余演算のアルゴリズムを示す説明図である。図14は、バイナリ法と呼ばれるべき乗剰余演算に基づくモンゴメリ乗算剰余演算のアルゴリズムを示しており、入力値a,d,nからべき乗剰余演算結果y=ad (mod n)を計算する。図14における1行目の処理は、yの初期値として1を与えることを示している。2行目の処理は、モンゴメリ変換パラメータH=R2 (mod n)を計算することを示している。3行目の処理は、yとaとに対しモンゴメリ変換を行いy’とa’とを得ることを示している。4〜7行目のループは、dのビット値に応じてモンゴメリ乗算剰余を1回又は2回繰り返す処理を、dの最下位ビットから最上位ビットまで繰り返すことを示している。8行目の処理は、4〜7行目のループで計算されたy’に対し、モンゴメリ逆変換を行うことで、最終的な演算結果yを得ることを示している。
図14に示したアルゴリズムにおいて、2行目で行われるモンゴメリ変換パラメータH=R2 (mod n)の計算方法について説明する。図15は、モンゴメリ変換パラメータの計算方法のアルゴリズムを示す説明図である。図15に示すモンゴメリ変換パラメータの計算方法は、加算、比較及び減算を繰り返すことにより、R=2x とする場合のH=R2 (mod n)を計算する方法である。1行目の処理は、H=R(mod n)を計算することを示している。H=R(mod n)の算出法は様々な方法があるが、例えばR=2xに対してnの有効ビット長がxである場合、R(mod n)=0−nにより簡単に計算できる。2〜5行目のループは、H=R(mod n)に対し、H+Hを計算した後、結果がn以上である場合にnを減算することで、H+H(mod n)の加算剰余(2倍剰余)を行っている。なおH+Hの計算は、左1ビットシフト演算でも実現することが可能である。図15に示すアルゴリズムでは、上述した加算剰余演算をx回繰り返すことにより、R×2x (mod n)=R2 (mod n)を算出する。
しかしながら図15に示したモンゴメリ変換パラメータの計算方法のアルゴリズムは、2〜5行目で加算剰余をx回繰り返すため、処理速度が遅いという欠点を有する。例えばnが1024bitであるRSA演算の場合では、R=21024であるため、1024回の加算剰余演算を行う必要があるため、計算量が膨大となり処理速度が遅くなる。
そこでREDC演算、シフト算及び減算を組み合わせることにより、モンゴメリ変換パラメータH=R2 (mod n)の計算速度を高速化する幾つかの方法が提案されている。これらの方法を以下に従来法1〜3として説明する。なお以下の従来法1乃至従来法3の説明において、1ワードあたりのビット長をkとし、mワード値で示された値をnとし、nの最上位から連続する「0」の個数をqとして示す。例えばk=8の場合、nのビット列が「00101011 11001111」であれば、m=2,q=2であり、nのビット列が「10001001 11100110 11100101」であれば、m=3,q=0である。
従来法1.
図16は、従来法1におけるモンゴメリ変換パラメータの計算方法を示すフローチャートである。図16に示す従来法1では、剰余の法nを入力し、R2 (mod n)を出力するものとする。ただし、R=2m*k (mod n)である。従来法1は、主にステップA1及びステップB1にて構成される。ステップA1は、シフト算及び減算を用いて、H0 =2v ×R(mod n)を計算するステップである。ただし、vは自然数である。ステップB1は、REDC演算を用いてH0 からH=R2 (mod n)を計算するステップである。
ステップA1のステップS101では、第1レジスタREG1及び第2レジスタREG2に対し、初期値として夫々「n」及び「0」を与える。なおnの有効ワード長はmであり、第1レジスタREG1に右詰で格納した初期値nの最上位ビットから連続する「0」の個数をqとして示す。なお以降の説明において第1レジスタREG1に格納した値をREG1として示し、第2レジスタREG2に格納した値をREG2として示す。
ステップA1のステップS102では、第1レジスタREG1に対し、左1ビットシフト処理をq回繰り返し、REG1=n’=n×2q を計算する。
ステップA1のステップS103では、REG2−REG1として算出した値を第2レジスタREG2に格納することで、REG2= m*k (mod n’)とする。
ステップA1のステップS104では、第2レジスタREG2に対する左1ビットシフト処理と、REG2≧REG1の真偽判定と、REG2≧REG1が真である場合にREG2−REG1の演算結果を第2レジスタREG2に格納する処理とを、v+q回繰り返し、REG2=2m*k+v+q とする。ただし、vは、v≧1であり、かつm,kに対し(m×k)/vが2のべき乗となる整数である。
ステップA1のステップS105では、第1レジスタREG1及び第2レジスタREG2に対し、右1ビットシフト処理をq回繰り返し、REG1=n,REG2=H0 =2m*k+v (mod n)を計算する。
ステップB1のステップS106では、REDC(REG2,REG2)n として示されるREDC演算の結果を第2レジスタREG2に格納する処理をp回繰り返すことにより、REG2=H=22*m*k (mod n)=R2 (mod n)を計算する。ただし、pは、p=log2 ((m×k)/v)を満たす整数であり、REDC(REG2,REG2)n は、モンゴメリ乗算剰余演算REDC(A,B)n =2-m*k×A×B(mod n)を示す。
そしてステップS107では、計算した結果であるREG2=R2 (mod n)を出力し、処理を終了する。
図17は、従来法1におけるモンゴメリ変換パラメータの計算方法に要する演算回数を示す図表である。図17では、図16を用いて示した従来法1の計算方法に必要な演算回数を演算の種類及びステップ別に示している。なお図17において、SFTは1ビットシフトを行うシフト演算を、SUBは減算を、CMPは比較演算を、REDCはモンゴメリ乗算剰余演算をそれぞれ示す。
ステップS106において、pは、p=log2 ((m×k)/v)を満たす整数であるとの条件を示したが、これを満たすためには、(m×k)/vが整数xを用いて(m×k)/v=2x と示せる値、即ち2のべき乗となる値でなければならないという制約がある。この制約により、従来法1では、vの値の選択が制限されるため、nの有効ビット長によっては、vの値を大きくする必要がある。図17に示す図表から、SFT、SUB及びCMPの計算回数は、vに依存するため、vを大きくすることにより、全体の計算量が大きくなる。
次に図17に示した図表に基づいて、従来法1における計算方法の演算回数の例を示す。
例1−1.1024ビットのRSA暗号の計算に適用
上記条件より、nは1024ビットである。1ワード=32ビットとするとk=32であり、nの有効ワード長m=32となる。1ワードあたりのビット長kとnの有効ワード長mとを乗算したk×mとnの全ビット数とが一致することから、nの最上位ビット=1となりq=0となる。またm×k=1024であるので、v=1,2,4,…,1024を選択することが可能である。v=1の場合、SFTが0×5+1=1回、SUBが0.5×(0+1)+1=1.5回、CMPが0+1=1回、そしてREDCがp=log2 ((32×32)/1)=10回となる。
例1−2.163ビットの楕円曲線暗号の計算に適用
上記条件より、nは163ビットである。1ワード=8ビットとするとk=8であり、nの有効ワード長m=21となる。nをビット長=8、有効ワード長m=21とすると、最上位に位置するm×k−163=21×8−163=5ビットが0となり、q=5となる。またm×k=168であるので、v=21,42,84,168を選択することが可能である。v=21の場合、SFTが4×5+21=41回、SUBが0.5×(5+21)+1=14回、CMPが5+21=26回、そしてREDCがp=log2 ((21×8)/21)=3回となる。
このような従来法1に示す計算方法は、例えば特許文献1、特許文献2及び特許文献3に示されている。
従来法2.
図18は、従来法2におけるモンゴメリ変換パラメータの計算方法を示すフローチャートである。図18に示す従来法2では、剰余の法nを入力し、R2 (mod n)を出力するものとする。ただし、R=2m*k (mod n)である。従来法2は、主にステップA2及びステップB2にて構成される。ステップA2は、例えば従来法1に示した処理と同様の処理により、シフト算及び減算を用いてH0 =2v ×R(mod n)を計算するステップである。ただし、vは自然数である。ステップB2は、REDC演算を用いてH0 からH=R2 (mod n)を計算するステップである。
ステップA2のステップS201では、第1レジスタREG1及び第2レジスタREG2に対し、初期値として夫々「n」及び「0」を与える。なおnの有効ワード長はmであり、第1レジスタREG1に右詰で格納した初期値nの最上位ビットから連続する「0」の個数をqとして示す。
ステップA2のステップS202では、第1レジスタREG1に対し、左1ビットシフト処理をq回繰り返し、REG1=n’=n×2q を計算する。
ステップA2のステップS203では、REG2−REG1として算出した値を第2レジスタREG2に格納することで、REG2=n’=n×2q とする。
ステップA2のステップS204では、第2レジスタREG2に対する左1ビットシフト処理と、REG2≧REG1の真偽判定と、REG2≧REG1が真である場合にREG2−REG1の演算結果を第2レジスタREG2に格納する処理とからなる2倍剰余演算を、v+q回繰り返し、REG2=2m*k+v+q とする。ただし、vは、v≧1であり、かつm,kに対し(m×k)/vが自然数となる整数である。
ステップA2のステップS205では、第1レジスタREG1及び第2レジスタREG2に対し、右1ビットシフト処理をq回繰り返し、REG1=n,REG2=H0 =2m*k+v (mod n)を計算する。そして第2レジスタREG2に格納されている値を、補助レジスタREG0に格納する。
ステップB2のステップS206では、REDC(REG2,REG2)n として示されるREDC演算の結果を第2レジスタREG2に格納し、更に(m×k)/vのi番目のビット値=1の場合に、REDC(REG2,REG0)n として示されるREDC演算の結果を第2レジスタREG2に格納する処理を、i=p’−2,…,1,0としてp’−1回繰り返すことにより、REG2=H=22*m*k (mod n)=R2 (mod n)を計算する。ただし、p’は、(m×k)/vのビット長を示す整数であり、REDC(A,B)n は、モンゴメリ乗算剰余演算REDC(A,B)n =2-m*k×A×B(mod n)を示す。
そしてステップS207では、計算した結果であるREG2=R2 (mod n)を出力し、処理を終了する。
図19は、従来法2におけるモンゴメリ変換パラメータの計算方法に要する演算回数を示す図表である。図19では、図18を用いて示した従来法2の計算方法に必要な演算回数を演算の種類及びステップ別に示している。なお図19において、SFTは1ビットシフトを行うシフト演算を、SUBは減算を、CMPは比較演算を、REDCはモンゴメリ乗算剰余演算をそれぞれ示す。またW(x)は、xの最上位ビットを除く1の個数を示し、ステップS206において(m×k)/vのビット値が1である場合のREDC演算の回数である。例えば、W((10000)2 )=0であり、W((1000101)2 )=2である。ただし、(・・・)2 は、2進数を示す記号であり、例えば(1101)2 =13であり、(11100)2 =28である。
ステップS206にて示した様に、p’は、(m×k)/vとして示される整数であることから、従来法2では、従来法1より広い条件でvの値を設定することができるので、最適なvの値を設定することで従来法1より少ない計算量でモンゴメリ変換パラメータHを計算することができる。
次に図19に示した図表に基づいて、従来法2における計算回数の例を説明する。
例2−1.1024ビットのRSA暗号の計算に適用
上記条件より、nは1024ビットである。1ワード=32ビットとするとk=32であり、nの有効ワード長m=32となる。1ワードあたりのビット長kとnの有効ワード長mとを乗算したk+mとnの全ビット数とが一致することから、nの最上位ビット=1となりq=0となる。またm×k=1024であるので、vは1024の任意の因数(factor)から選択することが可能である。V=1の場合、SFTが1回、SUBが0.5×(1)+1=1.5回、CMPが1回、そしてREDCがp=log2 ((32×32)/1)=10回となる。
例2−2.163ビットの楕円曲線暗号の計算に適用
上記条件より、nは163ビットである。1ワード=8ビットとするとk=8であり、nの有効ワード長m=21となる。nをビット長=8、有効ワード長m=21とすると、最上位に位置するm×k−163=21×8−163=5ビットが0となり、q=5となる。またm×k=168であるので、vは168の任意の因数(factor)から選択することが可能である。v=21の場合、SFTが4×5+21=41回、SUBが0.5×(5+21)+1=14回、CMPが5+21=26回、そしてREDCが(m×k)/v=(1000)2 からp’−1+W((m×k)/v)=4−1+0=3回となる。
このような従来法2に示す計算方法は、例えば特許文献4に示されている。
従来法3.
図20は、従来法3におけるモンゴメリ変換パラメータの計算方法を示すフローチャートである。図20に示す従来法3では、剰余の法nを入力し、R2 (mod n)を出力するものとする。ただし、R=2m*k (mod n)である。従来法3は、主にステップA3、ステップB3及びステップC3にて構成される。ステップA3は、シフト算及び減算を用いてH0=2m*k+v を満たすH0 を計算するステップである。ただし、vは自然数であり、かつ(m×k)/vが自然数であることを満たす。ステップB3は、REDC演算を用いてH0 からH=2E(p",m,k) (mod n)を計算するステップである。ただし、p”は、2p"-1<(m×k)/v≦2p"を満たす整数であり、E(p”,m,k)=m×k+v×2p"である。ステップC3は、2p”>(m×k)/vの場合に、g=2k*G(p",m,k) について、H=REDC(H,G)n による補正演算を行うステップである。ただし、Gは、G(p”,m,k)=2×m−(v×2p”)/kと表され、1≦G(p”,m,k)≦m−1の範囲を満たす整数である。
ステップA3のステップS301では、第1レジスタREG1及び第2レジスタREG2に対し、初期値として夫々「n」及び「2(m-1)*k 」を与える。なおnの有効ワード長はmである。
ステップA3のステップS302では、第2レジスタREG2に対する左1ビットシフト処理と、REG2≧REG1の真偽判定と、REG2≧REG1が真である場合にREG2−REG1の演算結果を第2レジスタREG2に格納する処理とからなる2倍剰余演算をk+v回繰り返し、REG2=H0 =2m*k+v (mod n)とする。ただし、vは自然数であり、(m×k)/vは整数である。
ステップB3のステップS303では、REDC(REG2,REG2)n として示されるREDC演算の結果を第2レジスタREG2に格納する処理を、i=1,2,…,p”としてp”回繰り返すことにより、REG2=2E(p",m,k) (mod n)を計算する。ただし、P”は、2p"-1<(m×k)/v≦2p"を満たす整数であり、E(p”,m,k)=m×k+v×2p"であり、REDC(A,B)n は、モンゴメリ乗算剰余演算REDC(A,B)n =2-m*k×A×B(mod n)を示す。
ステップC3のステップS304では、2p”>(m×k)/vの場合に、REDC(REG2,g)n として示されるREDC演算の結果を第2レジスタREG2に格納する。ただし、g=2k*G(p",m,k) であり、G(p”,m,k)=2×m−(v×2p”)/kである。
そしてステップS305では、計算した結果であるREG2=R2 (mod n)を出力し、処理を終了する。
図21は、従来法3におけるモンゴメリ変換パラメータの計算方法に要する演算回数を示す図表である。図21では、図20を用いて示した従来法3の計算方法に必要な演算回数を演算の種類及びステップ別に示している。なお図21において、SFTは1ビットシフトを行うシフト演算を、SUBは減算を、CMPは比較演算を、REDCはモンゴメリ乗算剰余演算をそれぞれ示す。
ステップA3に示される様に、従来法3では、qの値を用いずにH0 の計算が行われている。またステップS303に対し、ステップS304に示す補正演算処理を追加することにより、(m×k)/vが2のべき乗の値であるという制約がなくなるので、vはステップS302にて示す条件にのみ従えばよい。しかも(m×k)/vの各ビット値の検出を行う必要がない。
次に図21に示した図表に基づいて、従来法3における計算回数の例を説明する。
例3−1.1024ビットのRSA暗号の計算に適用
上記条件より、nは1024ビットである。1ワード=32ビットとするとk=32であり、nの有効ワード長m=32となる。m×k=1024であるので、vは1024の任意の因数(factor)から選択することが可能である。V=1の場合、SFTが32+1=33回、SUBが0.5×(32+1)=16.5回、CMPが32+1=33回、そしてREDCがp=log2 ((32×32)/1)=10回となる。
例3−2.163ビットの楕円曲線暗号の計算に適用
上記条件より、nは163ビットである。1ワード=8ビットとするとk=8であり、nの有効ワード長m=21となる。m×k=168であるので、vは168の任意の因数(foctor)から選択することが可能である。v=21の場合、SFTが8+21=29回、SUBが0.5×(8+21)=14.5回、CMPが8+21=29回、そしてREDCが(m×k)/v=(1000)2 からp’−1+W((m×k)/v)=4−1+0=3回となる。
このような従来法3に示す計算方法は、例えば特許文献5に示されている。
特開平8−263316号公報 特開平8−339310号公報 特開平11−305995号公報 米国特許第5777916号明細書 国際公開第2005/013243号パンフレット
しかしながら上述した従来法1乃至従来法3は、以下に示す様な解決すべき課題を有している。
課題1.
従来法1として示した計算方法は、ステップA1の処理において、第1レジスタREG1に格納した「n」のビット列中で上位から連続する「0」の個数を以降の計算に要するパラメータであるqとして用いるため、データ値の最上位有効ビット(Most Significant Bit;以下MSBという)を算出しなければならない。MSBの算出には、ソフトウェア実装における処理効率が悪いビット単位の演算処理が必要となるという問題がある。しかも図17に示した図表から明らかな様にシフト演算、減算及び比較演算の回数は、qの値に依存しており、qが大きい程、処理負荷が大きくなるという問題がある。このようにqに関する処理負荷の増大という問題がある。
課題2.
さらに従来法1として示した計算方法は、ステップB1の処理において、REDC演算をp回繰り返すことでH=22*m*k (mod n)=R2 (mod n)を計算する。このときpは、p=log2 ((m×k)/v)を満たす整数、即ち(m×x)/vの値が2のべき乗となる値でなければならないという制約となる。この制約を満たすため、m,k,vは、nのビット長及び1ワードあたりのビット長からm及びkを決定し、決定されたm及びkに対し、(m×k)/vが2のべき乗の値となるようにvの値を設定するという手順で決定される。即ち(m×k)/vが2のべき乗の値になるようにvの値を設定しなければならないという制約のため、vの値は大きな値をとる可能性がある。図17に示した図表から明らかな様に、シフト演算、減算及び比較演算の回数は、vの値に依存しており、vが大きい程、処理負荷が大きくなるという問題がある。このように(m×k)/vが2のべき乗の値との制約に関する処理負荷の増大という問題がある。
課題3.
従来法2として示した計算方法は、ステップA2の処理が、従来法1のステップA1の処理と同様であるため、従来法1と同様のqに関する処理負荷の増大という問題がある。
課題4.
さらに従来法2として示した計算方法は、ステップB2の処理において、REDC演算をp’−1回繰り返すために、(m×k)/vのi番目のビット値を検出するので、ソフトウェア実装における処理効率が悪いビット単位の演算処理が必要となるという問題がある。このようにREDC演算を繰り返すために、(m×k)/vの各ビット値の検出に関する問題がある。
課題5.
従来法3として示した計算方法は、従来法1及び従来法2に示す様にMSBの算出及びqの値に依存する処理がないという点で優れている。しかしステップA3の処理において、2倍剰余演算をk+v回繰り返すため、図21に示した図表から明らかな様に、シフト演算、減算及び比較演算の回数は、kの値に依存しており、kが大きい程、処理負荷が大きくなる。
図22は、従来法におけるモンゴメリ変換パラメータの計算方法に要する演算回数を示す図表である。図22は、図17に示した従来法1のステップA1の計算量、図19に示した従来法2のステップA2の計算量及び図20に示した従来法3のステップA3の計算量を示している。なお図22において、夫々の計算方法の処理負荷の比較が容易になる様に、シフト演算SFT、減算SUB及び比較演算CMPの演算に要する処理負荷を同一とみなし、これらを定数LCに置き換えて示している。
図22に示す表より、(2.5×k+2.5×v)×LC<(5.5q+2.5k+1)×LCが成立する場合、即ち(5×k−2)/11<qが成立する場合、従来法3に示した計算方法は、従来法1及び従来法2より計算量が少なく効率的な方法であることが示される。しかしながらqの値が小さく、(5×k−2)>qが成立する場合、即ちqが小さい場合、従来法3に示した計算方法は、従来法1及び従来法2より計算量が多く非効率な方法であるということになる。
実際に良く用いられるqの値として、例えばRSA暗号においては、nのビット長が2048、1024、512等の2のべき乗となるビット長が良く用いられており、これらの場合、q=0となる。楕円曲線暗号を用いる場合、nのビット長は任意の値をとることになるが、SECG(Standards for Effeicient Cryptography Group)にてSEC1として規定される規格では、160、192、224等の32の倍数のビット長を推奨しており、これらのパラメータを用いる場合、いずれもq=0となる。
従って実用上、従来法3に示した計算方法は、必ずしも従来法1及び従来法2より優れている訳ではなく、qの値が小さい場合、ステップA3の処理は、ステップA1及びA2の処理より負荷が大きいという問題がある。
本発明は斯かる事情に鑑みてなされたものであり、2m*k の法nに関する同値として、nの負数を求めてレジスタに格納し、レジスタに格納されている値を桁上がり方向へ1ビットシフトして、レジスタからあふれる最上位ビットを破棄する処理を、破棄する最上位ビットが0になるまで繰り返すことで、2m*k+1 の法nに関する同値を求めてレジスタに格納し、レジスタに格納されている値に基づくモンゴメリ乗算剰余演算により、モンゴメリ変換パラメータと、法nに関する剰余値が同じである同値を計算することにより、従来法1乃至従来法3の問題を解決することが可能な計算方法、該計算方法を適用した計算装置、及び該計算装置を実現するためのコンピュータプログラムの提供を目的とする。
第1発明に係る計算方法は、モンゴメリ乗算剰余演算にて用いられ、剰余の法nに関する剰余値であるモンゴメリ変換パラメータに関する値を、1ワードあたりのビット長がkで、少なくともm個のワードを有するレジスタを備えた計算装置を用いて計算する計算方法において、前記計算装置は、m*k の法nに関する同値として、nの負数を求めてレジスタに格納するステップと、レジスタに格納されている値を桁上がり方向へ1ビットシフトして、レジスタからあふれる最上位ビットを破棄する処理を、破棄する最上位ビットが0になるまで繰り返すことで、2m*k+1 の法nに関する同値を求めてレジスタに格納するステップと、レジスタに格納されている値に基づくモンゴメリ乗算剰余演算により、モンゴメリ変換パラメータと、法nに関する剰余値が同じである同値を計算するステップとを実行することを特徴とする。
第2発明に係る計算方法は、第1発明において、計算した同値を用いて、べき乗剰余処理を実行することを特徴とする。
第3発明に係る計算装置は、モンゴメリ乗算剰余演算にて用いられ、剰余の法nに関する剰余値であるモンゴメリ変換パラメータに関する値を計算する計算装置において、レジスタと、剰余の法nの負数を前記レジスタに格納する手段と、レジスタに格納されている値を桁上がり方向へ1ビットシフトする処理を、レジスタからあふれる最上位ビットが0になるまで繰り返す手段と、レジスタに格納されている値に基づくモンゴメリ乗算剰余演算により、モンゴメリ変換パラメータと、法nに関する剰余値が同じである同値を計算する手段とを備えることを特徴とする。
第4発明に係る計算装置は、モンゴメリ乗算剰余演算にて用いられ、剰余の法nに関する剰余値であるモンゴメリ変換パラメータに関する値を計算する計算装置において、1ワードあたりのビット長がkで、少なくともm個のワードを有するレジスタと、値A及びB、並びに有効ワード長がmである剰余の法nに対し、2-m*k×A×B(mod n)として定義されるモンゴメリ乗算剰余演算REDC(A,B)n を実行する演算手段と、剰余の法nの負数をレジスタに格納する手段と、レジスタに格納されている値を桁上がり方向へ1ビットシフトするシフト処理を、レジスタからあふれる最上位ビットが0になるまで繰り返す手段と、前記演算手段により、レジスタに格納されている値REGに対し、モンゴメリ乗算剰余演算REDC(REG,REG)n を実行して、その結果をレジスタに格納する処理を、2p-1 <m×k≦2p を満たす整数であるp回繰り返す手段と、2p >m×kである場合に、前記演算手段により、レジスタに格納されている値REGに対し、モンゴメリ乗算剰余演算REDC(REG,g)n を実行して、その結果をレジスタに格納する手段と(ただしg=2k*G(p,m,k)、かつG(p,m,k)=2×m−2p /k)、レジスタに格納されている値を、モンゴメリ変換パラメータと、法nに関する剰余値が同じである同値として出力する手段とを備えることを特徴とする。
第5発明に係る計算装置は、第4発明において、複数のレジスタと、m個のワードを有する第1のレジスタ及びm個以上のワードを有する第2のレジスタに、夫々n及び0を格納する手段と、第2のレジスタに格納されている値から、第1のレジスタに格納されている値を減じて、剰余の法nの負数を計算する手段とを更に備えることを特徴とする。
第6発明に係る計算装置は、第4発明において、レジスタに剰余の法nを格納する手段と、レジスタに格納されている値の補数を、剰余の法nの負数として計算する手段とを更に備えることを特徴とする。
第7発明に係る計算装置は、第4発明において、レジスタに剰余の法nを格納する手段と、レジスタに格納されている値を反転させる手段と、レジスタに格納されている値の最下位ビットを1として、剰余の法nの負数を計算する手段とを更に備えることを特徴とする。
第8発明に係る計算装置は、第4発明乃至第7発明のいずれかにおいて、前記シフト処理は、レジスタに格納されている値に該値を加算する加算処理であり、前記シフト処理によりレジスタからあふれる最上位ビットは、前記加算処理により発生したキャリー値として検出することを特徴とする。
第9発明に係るコンピュータプログラムは、1ワードあたりのビット長がkで、少なくともm個のワードを有するレジスタを備えるコンピュータに、モンゴメリ乗算剰余演算にて用いられ、剰余の法nに関する剰余値であるモンゴメリ変換パラメータに関する値を計算させるコンピュータプログラムにおいて、コンピュータに、2m*k の法nに関する同値として、nの負数を求めてレジスタに格納させる手順と、コンピュータに、レジスタに格納されている値を桁上がり方向へ1ビットシフトして、レジスタからあふれる最上位ビットを破棄する処理を、破棄する最上位ビットが0になるまで繰り返すことで、2m*k+1 の法nに関する同値を求めてレジスタに格納させる手順と、コンピュータに、レジスタに格納されている値に基づくモンゴメリ乗算剰余演算により、モンゴメリ変換パラメータと、法nに関する剰余値が同じである同値を計算させる手順とを実行させることを特徴とする。
第1発明、第3発明、第4発明及び第9発明では、モンゴメリ乗算剰余演算に用いられ、剰余の法nに関する剰余値であるモンゴメリ変換パラメータに関する値として、法nに関する剰余値が同じである同値を計算する。剰余値には、0以上かつ法n未満でなければならないという制約があるが、同値にはその制約がない。従って剰余値ではなく同値を計算することにより、制約が緩和されるため、制約に基づく様々な処理が不要になるので、計算処理を高速化することが可能である。しかも計算結果を同値とすることにより、計算の途中で発生する中間的なデータに対しても、制約の多い剰余値だけでなく制約の少ない同値を用いることができるので、計算処理を高速化することが可能である。
例えば上述した従来法1のステップA1及び従来法2のステップA2では、REG2の値が常にn’未満となる様に調整しながら計算を行うため、qに依存した回数のシフト演算を行わなければならず、課題1及び課題3として提起した問題があった。また上述した従来法3のステップA3についてもREG2の値が常にn未満となる様に調整しながら計算を行うため、課題5として提起した問題があった。課題1、課題3及び課題5として示したこれらの問題は、剰余値が0以上かつ法n未満である値を計算するために生じたものであり、本発明では、剰余値ではなく、剰余値の同値を計算することで、これらの問題を解消し、計算処理を高速化することが可能である。
なお本発明では、レジスタに格納されている値を桁上がり方向へ1ビットシフトして、レジスタからあふれる最上位ビットを破棄する処理を、破棄する最上位ビットが0になるまで繰り返すという処理を行っている。シフト演算と、破棄する1ビットの値を判定する処理とを繰り返す処理は、従来法1のステップS104、従来法2のステップS204及び従来法3のステップS302にて行われるシフト演算と、比較演算とを繰り返す方法より演算効率が高い。シフト演算及び比較演算は、公開鍵暗号方式にて行われる演算に用いられる160〜2048ビットの非常に長いビット長のデータに対する多ビット演算を実行するのに対し、1ビットの値の判定は、1ビット分の演算のみであるので、多ビット演算より高速な処理が可能だからである。1ビットの判定のみを用いた効率的な処理を実現することができたのは、計算の対象を剰余値に限定せずに、同値にまで拡張したことにより、様々な制約から解放されたからである。
また本発明では、(m×k)/vが2のべき乗の値という制約がないので、従来法1の課題2として提起した問題を解消することが可能である。
さらに本発明では、REDC演算をp’−1回繰り返すために、(m×k)/vのi番目のビット値を検出する処理がないので、従来法2の課題4として提起した問題を解消することが可能である。
第2発明では、べき乗剰余処理は、同値を用いても実行することができるので、上述した様に処理効率が高い同値を用いて実行することにより、全体としての処理速度を向上させることが可能である。
第5発明乃至第8発明では、既存の演算チップを用いることができるので、実装が容易である。
本発明に係る計算方法、計算装置及びコンピュータプログラムは、モンゴメリ乗算剰余演算にて用いられ、剰余の法nに関する剰余値であるモンゴメリ変換パラメータに関する値を、1ワードあたりのビット長がkで、少なくともm個のワードを有するレジスタを用いるものであり、2m*k の法nに関する同値として、nの負数を求めてレジスタに格納し、レジスタに格納されている値を桁上がり方向へ1ビットシフトして、レジスタからあふれる最上位ビットを破棄する処理を、破棄する最上位ビットが0になるまで繰り返すことで、2m*k+1 の法nに関する同値を求めてレジスタに格納し、レジスタに格納されている値に基づくモンゴメリ乗算剰余演算により、モンゴメリ変換パラメータと、法nに関する剰余値が同じである同値を計算する。
従来法にて使用される剰余値には、0以上かつ法n未満でなければならないという制約があるが、本発明にて使用される同値にはその制約がない。従って剰余値ではなく同値を計算することにより、制約が緩和されるため、制約に基づく様々な処理が不要になるので、計算処理を高速化することが可能である等、優れた効果を奏する。しかも計算結果を同値とすることにより、計算の途中で発生する中間的なデータに対しても、制約の多い剰余値だけでなく制約の少ない同値を用いることができるので、計算処理を高速化することが可能である等、優れた効果を奏する。
また本発明では、同値を用いてべき乗剰余処理を実行することにより、上述した様に処理効率が高い同値を用いて実行することとなるので、全体としての処理速度を向上させることが可能である等、優れた効果を奏する。さらにRSA暗号、楕円曲線暗号等の暗号方式を用いた公開鍵暗号方式に適用することができるので、秘匿性の高い通信を高速に実現する情報セキュリティ技術を提供することが可能である等、優れた効果を奏する。
以下、本発明をその実施の形態を示す図面に基づいて詳述する。図1は、本発明の計算装置の構成例を示すブロック図である。図1中1は、マイクロコンピュータとして機能する演算カード等の本発明の計算装置であり、計算装置1は、パーソナルコンピュータ、サーバコンピュータ等の通信装置2に組み込まれている。計算装置1は、装置全体を制御するMPU等の制御手段11、本発明のコンピュータプログラム3等の各種コンピュータプログラム及びデータを記録したROM、RAM等の記録手段12、計算に用いられる第1レジスタ13a及び第2レジスタ13b、REDC演算を行うコプロセッサ等の演算手段14、並びに通信装置2とのインターフェースである接続手段15を備えている。そして記録手段12に記録された本発明のコンピュータプログラム3を制御手段11により実行することにより、マイクロコンピュータとして機能する演算カードは、本発明の計算装置としての各種手順を実行する。なお第1レジスタ13aは、ビットの2進数データを格納することが可能なm個のワードを有するレジスタであり、第2レジスタ13bは、m個以上のワードを有するレジスタである。
本発明の計算装置1は、公開鍵暗号方式等の暗号技術を用いた通信等の処理において様々な処理を実行する。具体的には、本発明の計算装置1は、接続手段15を介して通信装置2から受け付けた平文情報を、予め記録している公開鍵にて暗号化して暗号文を生成し、生成した暗号文を、接続手段15を介して通信装置2へ出力する。また本発明の計算装置1は、通信装置2が他の装置から公開鍵にて暗号化された暗号文を受信した場合に、受信した暗号文を通信装置2から接続手段15を介して受け付け、予め記録している秘密鍵にて復号して平文を生成し、生成した平文を、接続手段15を介して通信装置2へ出力する。なお本発明の計算装置1では、同様の技術を用いて、平文を秘密鍵にて暗号化し、暗号文を公開鍵にて復号するデジタル署名に係る処理を実行することも可能である。
公開鍵暗号方式の暗号技術には、RSA暗号、楕円曲線暗号等の暗号方式が用いられる。例えばRSA暗号では、公開鍵eにて平文mを暗号化した暗号文cは、剰余の法nを用いてc=me (mod n)と表される。また秘密鍵dにて暗号文cを復号した平文mは、剰余の法nを用いて、m=cd (mod n)と表される。このようにRSA暗号では、y=ax (mod n)で表されるべき乗剰余演算処理が行われる。また楕円曲線暗号でも、乗算剰余演算処理が用いられている。
本発明の計算装置1は、乗算剰余演算処理の代わりに下記の式にて示す整数a,b,nを用いたモンゴメリ乗算剰余と呼ばれる演算法を用いて暗号化及び復号処理を行う。
y=a×b×R-1(mod n)
ただし、n:剰余の法を示す整数
a,b:0≦a,b<nとなる整数
R:2m*k にて示される定数
k:1ワードあたりのビット長
m:nを表現するために必要なワードの最小個数
図2は、本発明の計算方法に関するモンゴメリ乗算剰余演算のアルゴリズムを示す説明図である。なお図2に示すアルゴリズムにおいて、x=(xm-1 ,…,x1 ,x0 )は、整数値xを、m個のワード値xi (i=m−1,…,1,0,0≦xi <2k )として表現する形式を示す。また図2を含む以降の図面及び以降の説明において、「:=」とは、右辺の数値又は数式を左辺に代入することを示す。図2に示す様に夫々mワード値にて示されるa,b,nに基づいて、mワード値で示される値yを算出する場合のモンゴメリ乗算剰余演算y=a×b×R-1(mod n)を、以降の説明では、y=REDC(a,b)n 又は単にREDCと表記する。このように定義されるREDCは、以下に示す3つの性質を備える。
(性質1)法nは、奇数に限定される。
(性質2)値a,bが、両方ともm個のワード値での表現が可能な場合で、a×b≦R×nの条件が満たされるとき、y=a×b×R-1(mod n)の計算が行われる。このとき0≦y<nを満足する。
(性質3)値a,bが、両方ともm個のワード値での表現が可能な場合で、a×b≦R×nの条件が満たされないとき、y≡a×b×R-1(mod n)の計算が行われる。このとき0≦y<nを満足するとは限らない。
ここで性質2に示した計算y=a×b×R-1(mod n)と、性質3に示した計算y≡a×b×R-1(mod n)との差異について説明する。性質2に示した計算と性質3に示した計算との差異は、性質2に示した計算が、法nに関する「剰余値」を求めているのに対し、性質3に示した計算は、法nに関する「同値」を求めていることにある。
整数xに対して自然数の法nに関する除算にて計算される余りyは、「(法nに関する)剰余値」と呼ばれ、y=x(mod n)として表記される。剰余値の計算において、余りyは、0以上n未満の値をとるため、上記の性質2の計算では、0≦y<nを満足することとなる。
これに対し、0以上n未満を満たすとは限らないが、剰余値が同一となる複数の値x,x’は、「(法nに関する)同値」と呼ばれ、x’≡x(mod n)として表記される。即ちxの剰余値y、法n、及び整数sが、x’=y+s×nの関係にある場合、全てのx’は、xと同値となる。例えばn=5、x=13という条件下において、xの法nに関する剰余値yは、y=3となる。更に同一条件下において、x’=3,8,13,18,23,…の一連の値は、法nに関して同値であり、その剰余値は3である。このように同値は、法nに関して余りが同一となる一連の値であり、0以上n未満に限定されない。従って上記の性質3の計算では、0≦y<nを満足するとは限らないこととなる。
上述した様にモンゴメリ乗算剰余演算は、a×b×R-1(mod n)であり、通常の乗算剰余演算a×b(mod n)とは異なる演算を行う。よってべき乗剰余演算を正しく実行するためには、モンゴメリ乗算剰余に対して与える入力データをモンゴメリ系と呼ばれるデータに変換する必要がある。通常の乗算剰余演算に与える任意の入力データをx、xをモンゴメリ系に変換したデータをx’とし、xからx’への変換(モンゴメリ変換)をx’=Mont(x)として表し、x’からxへの変換(モンゴメリ逆変換)をx=Mont-1(x’)と表した場合、これらは下記の式にて与えられる。
モンゴメリ変換:x’=Mont(x)=x×R(mod n)
モンゴメリ逆変換:x=Mont-1(x’)=x’×R-1(mod n)
上記式にて示したモンゴメリ変換及びモンゴメリ逆変換は、REDCを用いた下記の式にて示すことができる。ただしHはH≡R2 (mod n)で表されるモンゴメリ変換パラメータと呼ばれる値であり、事前計算により求められる。
モンゴメリ変換:x’=REDC(x,H)n =x×R2 ×R-1=x×R(mod n)
ただし、H≡R2 (mod n)
モンゴメリ逆変換:x=REDC(x’,1)n =x’×1×R-1=x’×R-1(mod n)
上述した数式に基づくモンゴメリ乗算剰余を用いたべき乗剰余演算のアルゴリズムについて説明する。図3は、本発明の計算方法に関するモンゴメリ乗算剰余演算を用いたべき乗剰余演算のアルゴリズムを示す説明図である。図3は、バイナリ法と呼ばれるべき乗剰余演算に基づくモンゴメリ乗算剰余演算のアルゴリズムを示しており、入力値a,d,nからべき乗剰余演算結果y=ad (mod n)を計算する。図3における1行目の処理は、yの初期値として1を与えることを示している。2行目の処理は、モンゴメリ変換パラメータH’≡R2 (mod n)を計算することを示している。3行目の処理は、yとaとに対しモンゴメリ変換を行いy’とa’とを得ることを示している。4〜7行目のループは、dのビット値に応じてモンゴメリ乗算剰余を1回又は2回繰り返す処理を、dの最下位ビットから最上位ビットまで繰り返すことを示している。8行目の処理は、4〜7行目のループで計算されたy’に対し、モンゴメリ逆変換を行うことで、最終的な演算結果yを得ることを示している。
図3に示したアルゴリズムにおいて、2行目で行われるモンゴメリ変換パラメータH=R2 (mod n)を計算する処理について説明する。図4は、本発明の計算装置1の処理を示すフローチャートである。図4は、本発明の計算装置1が、剰余の法nの入力を受け付け、本発明の計算処理を実行し、R2 (mod n)の同値であるH≡R2 (mod n)を出力する処理を示している。なお以降の説明において、kは、1ワードあたりのビット長を示し、nは、mワード値で示される値である。またR=2m*k である。なお以降の図面及び以降の説明において、「*」は、乗算記号「×」を示すものとする。
本発明のモンゴメリ変換パラメータの変換方法は、主にステップA、ステップB及びステップCにて構成される。ステップAは、2m*k+1 の法nに関する同値H0 ≡2m*k+1 (mod n)を計算するステップである。ステップBは、REDC演算により、H0 から2E(p,m,k)(mod n)の同値H≡2E(p,m,k)(mod n)を計算するステップである。ただし、Pは、2p-1 <m×k≦2p を満たす整数であり、E(P,m,k)=m×k+2p である。ステップCは、2p >m×kの場合に、g=2k*G(p,m,k)について、H=REDC(H,G)n による補正演算を行うステップである。ただし、Gは、G(p,m,k)=2×m−2p /kと表され、1≦G(p,m,k)≦m−1の範囲を満たす整数である。
本発明の計算装置1は、ステップAにおけるステップS1の処理として、第1レジスタ13a及び第2レジスタ13bに対し、初期値として夫々「n」及び「0」を与える初期化を行う。ただし、nの有効ワード長は、mである。
図5は、本発明の計算装置1が備える第1レジスタ13a及び第2レジスタ13bに格納される値を概念的に示す説明図である。図5中、REG1は、第1レジスタ13aに格納されている値を示し、REG2は、第2レジスタ13bに格納されている値を示している。図5は、ステップAにおけるステップS1の処理が行われた状態を示しており、第1レジスタ13aには、初期値としてnが格納されており、第2レジスタ13bには、初期値として0が格納されている。
図4に示すフローチャートに戻り、本発明の計算装置1は、ステップAにおけるステップS2の処理として、2m*k と法nに関する同値REG2≡2m*k (mod n)を計算する。ステップAにおけるステップS2の処理は、第2レジスタ13bに格納されている値から第1レジスタ13aに格納されている値を減じて、得られた結果である法nの負数を第2レジスタ13bに格納する処理により行われる。
第2レジスタ13bに格納されている値から第1レジスタ13aに格納されている値を減じた結果、即ちREG2−REG1=0−nは、整数sを用いて2m*k +s×nという形で示すことができるので、2m*k と法nに関して同値であり、しかもmワードで示すことが可能な値である。
なおステップAにおけるステップS2の処理は、演算処理(REG2:=REG2−REG1)を行うのではなく、第1レジスタ13aに格納されている値nに関する2の補数値を求め、求められた2の補数値を第2レジスタ13bに格納するようにしてもよい。値nに関する2の補数値は、第1レジスタ13aに格納されているnの全ビット値を反転させ、更に第1レジスタ13aに格納されている値の最下位ビットに1を加算することにより求められる。
図6は、本発明の計算装置1が備える第1レジスタ13a及び第2レジスタ13bに格納される値を概念的に示す説明図である。図6は、ステップAにおけるステップS2の処理が行われた状態を示しており、第1レジスタ13aには、初期値として格納されたnが格納されており、第2レジスタ13bには、0−nとして計算された2m*k の法nに関する同値が格納されている。
図4に示すフローチャートに戻り、本発明の計算装置1は、ステップAにおけるステップS3の処理として、2m*k+1 と法nに関する同値REG2=2m*k+1 (mod n)を計算する。ステップAにおけるステップS3の処理は、更に詳細には、第2レジスタ13bに格納されている値を左1ビットシフト演算する処理(ステップS3−1)と、左1ビットシフト演算によりあふれた値、即ち演算前の最上位ビット値を判定する処理(ステップS3−2)とを含む。ステップS3−1の左1ビットシフト演算する処理とは、第2レジスタ13bの各桁の値を繰り上げる処理、即ち第2レジスタ13bに格納されている値を2倍して、最上位の桁のビット値をあふれた値として破棄する処理である。そしてステップS3−2において、あふれた値が「1」であると判定した場合、第2レジスタ13bに格納されている値は、2m*k と法nに関して同値の値であると判断し、ステップS3−1へ戻り、以降の処理を繰り返す。またあふれた値が「0」であると判定した場合、第2レジスタ13bに格納されている値は、2m*k+1 と法nに関して同値の値であると判断し、ステップS3の処理を終了する。
なおステップAにおけるステップS3のステップS3−1の処理は、第2レジスタ13bに格納されている値に、第2レジスタ13bに格納されている値を加算する処理、即ち演算処理(REG2:=REG2+REG2)を行う処理に代替することも可能である。またステップS3−2の処理は、ステップS3−1の処理により、キャリー値の発生の有無を判定する処理に代替することも可能である。その場合、キャリー値が発生したと判定した場合には、ステップS3−1へ戻り、キャリー値が発生していないと判定した場合、ステップS3の処理を終了する。
図7は、本発明の計算装置1が備える第2レジスタ13bに格納される値を概念的に示す説明図である。なお図7中破線で示した四角形内に示された数値は、左1ビットシフト演算によりあふれた値を示す。図7(a)は、ステップAにおけるステップS3の処理を実行する前の状態を示しており、REG2≡2m*k (mod n)である。図7(b)は、図7(a)の状態からステップS3−1にて左1ビットシフト演算処理を1回実行した状態を示しており、REG2≡2m*k (mod n)である。図7(b)に示す様にあふれた値は「1」であるので、ステップS3−1へ戻り、再度、左1ビットシフト演算処理を実行する。2度目の左1ビットシフト演算処理を実行した状態が図7(c)であり、REG2≡2m*k (mod n)である。図7(c)に示す様にあふれた値は、「1」であるので、ステップS301へ戻り、再度、左1ビットシフト演算処理を実行する。3度目の左1ビットシフト演算処理を実行した状態が図7(d)である。図7(d)に示す様にあふれた値は、「0」であるので、REG2≡2m*k+1 (mod n)であると判断し、ステップS3の処理を終了する。このようにステップAにおけるステップS3では、あふれたビット値を切り捨てながら左1ビットシフト演算を繰り返すことで、結果を常にmワードの範囲としながらも、ステップS3の終了時には、2m*k+1 との同値を計算することができる。
ステップAにおけるステップS3の処理により、2m*k+1 との同値を計算することができる理由を説明する。図8及び図9は、本発明の計算装置1が備える第2レジスタ13bに格納される値を概念的に示す説明図である。図8は、ステップAにおけるステップS3の処理を実行することによりあふれる値が「0」である場合を示しており、図8(a)が、左1ビットシフト演算処理を実行する前の状態であり、図8(b)が、左1ビットシフト演算処理を実行した後の状態を示している。また図9は、ステップAにおけるステップS3の処理を実行することによりあふれる値が「1」である場合を示しており、図9(a)が、左1ビットシフト演算処理を実行する前の状態であり、図9(b)が、左1ビットシフト演算処理を実行した後の状態を示している。
図8(b)及び図9(b)に示す様に、左1ビットシフト演算処理を実行した直後のあふれた1ビットを含むm×k+1ビットの値は、2m*k (mod n)と同値である図8(a)及び図9(a)に示す値を2倍した値であるので、2m*k+1 (mod n)と同値である。図8に示す様にあふれた最上位ビットの値が「0」である場合、あふれた最上位ビットの切り捨てにより実質的な値が変わることはないので、第2レジスタ13bに格納されている値は、2m*k (mod n)を2倍した2m*k+1 (mod n)と同値である。図9に示す様にあふれた最上位ビットの値が「1」である場合、最上位ビットの切り捨ては、2m*k (mod n)を2倍した2m*k+1 (mod n)からの2m*k の減算であり、その結果は、2m*k (mod n)と同値である。即ちREG2≡2×2m*k (mod n)−2m*k (mod n)≡2m*k (mod n)である。
このように本発明の計算装置1のステップAでは、ステップS3にて、左1ビットシフト演算処理及びあふれたビット値に対する判定処理を繰り返すことにより、2m*k+1 と法nに関する同値であるH0 ≡2m*k+1 (mod n)の値を計算することができる。
図4に示すフローチャートに戻り、本発明の計算装置1は、ステップBにおけるステップS4の処理として、演算手段14により、REDC(REG2,REG2)n として示されるREDC演算を実行し、その結果を第2レジスタ13bに格納する処理を、i=1,2,…,pとしてp回繰り返すことにより、REG2=2E(p,m,k)(mod n)を計算する。ただし、Pは、2p-1<m×k≦2p を満たす整数であり、E(P,m,k)=m×k+2p であり、REDC(A,B)n は、モンゴメリ乗算剰余演算REDC(A,B)n =2-m*k×A×B(mod n)を示す。
本発明の計算装置1は、ステップCにおけるステップS5の処理として、2p >m×kの真偽を判定し、2p >m×kが真であると判定した場合に、演算手段14により、REDC(REG2,g)n として示されるREDC演算を実行する補正演算を行い、その結果を第2レジスタ13bに格納する。なお2p >m×kが偽であると判定した場合、演算手段14によるREDC演算を実行する補正演算は行われない。ただし、g=2k*G(p,m,k)であり、G(p,m,k)=2×m−2p /kである。
本発明の計算装置1は、ステップS6の処理として、第2レジスタ13bに格納されている計算結果、即ちREG22 (mod n)を出力し、処理を終了する。そして本発明の計算装置1は、出力された結果であるR2 (mod n)を用いてべき乗剰余処理を実行し、更に暗号化及び/又は復号を行う。
図10は、本発明のモンゴメリ変換パラメータの計算方法に要する演算回数を示す図表である。図10では、図4を用いて示した本発明のモンゴメリ変換パラメータの計算方法に要する演算回数を演算の種類及びステップ別に示している。なお図10において、SFTは1ビットシフトを行うシフト演算を、SUBは減算を、CPLは2の補数計算を、BITCHKは1ビット値の検出計算を、REDCはモンゴメリ乗算剰余演算をそれぞれ示す。また図10において、qは、nの最上位から連続する「0」の個数を示す。
次に図10に示した図表に基づいて、本発明の計算方法の演算回数の例を説明する。
1024ビットのRSA暗号(1ワードが32ビット:k=32)の計算に適用
1024ビットの法nとして、n=21023+1の場合の実施例について説明する。RSA暗号で用いられる数値は、nが2つの素数p,qの積であるという条件があり、実施例1におけるnはこの条件を満たさない。しかし本発明の計算方法は、法nが任意の奇数値である場合に、22*m*k の法nに関する同値H≡22*m*k (mod n)を計算する方法であり、nが素数の積であることに限定しない。よって本実施例のnはRSA暗号の条件は満たさないが、本発明の計算方法に係る条件は満たすものであり、しかも非常に簡単な形で表現できる値であるので、本発明の実施例1の理解を容易にするものと考えられる。以上を踏まえた上で、1024ビットのnとして、n=21023+1の場合の実施例について説明する。
表題の条件に示す様に1ワードが32ビットであることから、1024ビットは32ワードで示されるのでm=32となる。H0 ≡22*m*k (mod n)≡22048(mod n)を計算する場合、必要な計算量は、図10より、SFTが1回、SUB(CPL)が1回、BITCHKが1回、そしてREDCが10回となる。具体的な計算を以下に示す。
ステップAにおけるステップS1
REG1:=n=(100…01)2,1024
REG2:=0
第1レジスタ13a及び第2レジスタ13bを初期化する。ただし、a=(b)2,c は、数値aをcビットの2進数表現した結果がbであることを示す。
ステップAにおけるステップS2
REG2:=0−n=(0111…11)2,1024
なおREG2:=(REG1の2の補数)とすることによっても同じ結果を得ることが可能である。またREG1の全ビットを反転し、更にその最下位ビットに1をセットする様にしてもよい。
ステップAにおけるステップS3
REG2=(0111…11)2,1024を左1ビットシフト演算し、REG2=(111…110)2,1024とする。そしてあふれた値が「0」であると判定し、ステップS4へ進む。なおこのときREG2(mod n)=(111…110)2,1024(mod n)=(011…1100)2,1024及び21025(mod n)=(011…1100)2,1024より、演算結果の正しさが実証される。
ステップBにおけるステップS4
REG2:=REDC(REG2,REG2)
上記処理を29 <m×k=1024≦210より決定されるp=10回繰り返す。
1回目 REG2:=REDC(REG2,REG2)
≡21024+1×21024+1×2-1024 ≡21024+2(mod n)
2回目 REG2:=REDC(REG2,REG2)
≡21024+2×21024+2×2-1024 ≡21024+4(mod n)
3回目 REG2:=REDC(REG2,REG2)
≡21024+2×21024+2×2-1024 ≡21024+8(mod n)
: :
9回目 REG2:=REDC(REG2,REG2)
≡21024+256×21024+256×2-1024 ≡21024+512(mod n)
10回目 REG2:=REDC(REG2,REG2)
≡21024+512×21024+512×2-1024 ≡21024+1024 (mod n)
上記計算よりREG2≡22048(mod n)を得る。
ステップCにおけるステップS5
p (=210)>m×k(=1024)が偽であるので、補正演算は実行しない。
ステップS6
REG2≡H0 ≡22048(mod n)を出力し、処理を終了する。
163ビットの楕円曲線暗号(1ワードが8ビット:k=8)の計算に適用
163ビットの法nとして、n=0x7,0263d95a,880adfbc,e3c1648d,44ce22fa,813980fbの場合の実施例について説明する。ただし上記の0x…は、16進数で表現された数値を示す。1ワードが8ビットであることから、163ビットは21ワードで示されるのでm=21となる。H0 ≡22*m*k (mod n)≡2326 (mod n)を計算する場合、必要な計算量は、図10より、SFTが6回、SUB(CPL)が1回、BITCHKが6回、そしてREDCが8回となる。具体的な計算を以下に示す。
ステップAにおけるステップS1
REG1:=n=0x7,0263d95a,880adfbc,e3c1648d,44ce22fa,813980fb
REG2:=0
ステップAにおけるステップS2
REG2:=0−n=0xf8,fd9c26a5,77f52043,1c3e9b72,bb31dd05,7ec67f05
なおREG2:=(REG1の2の補数)も同様である。
ステップAにおけるステップS3
REG2=0xf8,fd9c26a5,77f52043,1c3e9b72,bb31dd05,7ec67f05 を左1ビットシフト演算し、REG2=0xf1,fb384d4a,efea4086,387d36e5,7663ba0a,fd8cfe0a とする。このときあふれた値が「1」であると判定し、同様の処理を繰り返す。即ち2回目の処理として、
REG2=0xf1,fb384d4a,efea4086,387d36e5,7663ba0a,fd8cfe0a を左1ビットシフト演算し、REG2=0xe3,f6709a95,dfd4810c,70fa6dca,ecc77415,fb19fc14 とする。このときあふれた値が「1」であると判定し、同様の処理を繰り返す。即ち3回目の処理として、
REG2=0xe3,f6709a95,dfd4810c,70fa6dca,ecc77415,fb19fc14 を左1ビットシフト演算し、REG2=0xc7,ece1352b,bfa90218,e1f4db95,d98ee82b,f633f828 とする。このときあふれた値が「1」であると判定し、同様の処理を繰り返す。即ち4回目の処理として、
REG2=0xc7,ece1352b,bfa90218,e1f4db95,d98ee82b,f633f828 を左1ビットシフト演算し、REG2=0x8f,d9c26a57,7f520431,c3e9b72b,b31dd057,ec67f050 とする。このときあふれた値が「1」であると判定し、同様の処理を繰り返す。即ち5回目の処理として、
REG2=0x8f,d9c26a57,7f520431,c3e9b72b,b31dd057,ec67f050 を左1ビットシフト演算し、REG2=0x1f,b384d4ae,fea40863,87d36e57,663ba0af,d8cfe0a0 とする。このときあふれた値が「1」であると判定し、同様の処理を繰り返す。即ち6回目の処理として、
REG2=0x1f,b384d4ae,fea40863,87d36e57,663ba0af,d8cfe0a0 を左1ビットシフト演算し、REG2=0x3f,6709a95d,fd4810c7,0fa6dcae,cc77415f,b19fc140 とする。このときあふれた値が「0」であると判定し、ステップS4へ進む。なおこのときREG2(mod n)=2169 (mod n)=0x5187052f,34e63323,0dda53b7,61380691,269a386dより、演算結果の正しさが実証される。
ステップBにおけるステップS4
REG2:=REDC(REG2,REG2)
上記処理を27 <m×k=1024≦28 より決定されるp=8回繰り返す。
1回目 REG2:=REDC(REG2,REG2)
≡2168+1 ×2168+1 ×2-168≡2168+2 (mod n)
2回目 REG2:=REDC(REG2,REG2)
≡2168+2 ×2168+2 ×2-168≡2168+4 (mod n)
3回目 REG2:=REDC(REG2,REG2)
≡2168+4 ×2168+4 ×2-168≡2168+8(mod n)
: :
7回目 REG2:=REDC(REG2,REG2)
≡2168+64×2168+64×2-168≡2168+128 (mod n)
8回目 REG2:=REDC(REG2,REG2)
≡2168+128 ×2168+128 ×2-168≡2168+256 (mod n)
上記計算よりREG2≡2424 (mod n)
ステップCにおけるステップS5
p (=28 )>m×k(=168)が真であるので、補正演算を実行する。
補正演算
REG2:=REDC(REG2,g)≡2424 ×280×2-168≡2336
なお上記の計算において、
G(p,m,k)=2×m−(2p /k)
G(8,21,8)=2×21−(28 /8)=10
さらに、
g=2k*G(p,m,k)=28*10=280
以上により決定されるg=280を用いて補正演算が実行される。
ステップS6
REG2≡H≡2336 (mod n)を出力し、処理を終了する。
160ビットの楕円曲線暗号(1ワードが32ビット:k=32)の計算に適用
160ビットの法nとして、n=0x89381a5a,0ff02e5e,42d13b94,b6e022e6,96f53721の場合の実施例について説明する。ただし上記の0x…は、16進数で表現された数値を示す。1ワードが32ビットであることから、160ビットは5ワードで示されるのでm=5となる。そしてH≡22*m*k (mod n)≡2320 (mod n)を計算する場合、必要な計算量は、図10より、SFTが1回、SUB(CPL)が1回、BITCHKが1回、そしてREDCが8回となる。具体的な計算を以下に示す。
ステップAにおけるステップS1
REG1:=n=0x89381a5a,0ff02e5e,42d13b94,b6e022e6,96f53721
REG2:=0
ステップAにおけるステップS2
REG2:=0−n=0x76c7e5a5,f00fd1a1,bd2ec46b,491fdd19,690ac8df
なおREG2:=(REG1の2の補数)も同様である。
ステップAにおけるステップS3
REG2=0x76c7e5a5,f00fd1a1,bd2ec46b,491fdd19,690ac8dfを左1ビットシフト演算子、REG2=0xed8fcb4b,e01fa343,7a5d88d6,923fba32,d21591beとする。そしてあふれた値が「0」であると判定し、ステップS4へ進む。なおこのときREG2(mod n)=2161 (mod n)=0x6457b0f1,d02f74e5,378c4d41,db5f974c,3b205a9dより、演算結果の正しさが実証される。
ステップBにおけるステップS4
REG2:=REDC(REG2,REG2)
上記処理を27 <m×k=1024≦28 より決定されるp=8回繰り返す。
1回目 REG2:=REDC(REG2,REG2)
≡2160+1 ×2160+1 ×2-160≡2160+2 (mod n)
2回目 REG2:=REDC(REG2,REG2)
≡2160+2 ×2160+2 ×2-160≡2160+4 (mod n)
3回目 REG2:=REDC(REG2,REG2)
≡2160+4 ×2160+4 ×2-160≡2160+8 (mod n)
: :
7回目 REG2:=REDC(REG2,REG2)
≡2160+64×2160+64×2-160≡2160+128 (mod n)
8回目 REG2:=REDC(REG2,REG2)
≡2160+128 ×2160+128 ×2-160≡2160+256 (mod n)
上記計算よりREG2≡2416 (mod n)
ステップCにおけるステップS5
p (=28 )>m×k(=160)が真であるので、補正演算を実行する。
補正演算
REG2:=REDC(REG2,g)≡2416 ×264×2-160≡2320
なお上記の計算において、
G(p,m,k)=2×m−(2p /k)
G(8,5,32)=2×5−(28 /32)=2
さらに、
g=2k*G(p,m,k)=232*2=264
以上により決定されるg=264を用いて補正演算が実行される。
ステップS6
REG2≡H≡2320 (mod n)を出力し、処理を終了する。
次に本発明の計算方法と、前述した従来法1乃至従来法3との演算回数を比較する。図11は、本発明の計算方法及び従来法におけるモンゴメリ変換パラメータの計算方法に要する演算回数を示す図表である。図11は、図10に示した本発明の計算方法のステップA、ステップB及びステップCの計算量、図17に示した従来法1のステップA1及びステップB1の計算量、図19に示した従来法2のステップA2及びステップB2の計算量、並びに図21に示した従来法3のステップA3、ステップB3及びステップC3の計算量を示している。なお図11において、夫々の計算方法の処理負荷の比較が容易になる様に、多ビット演算であるシフト演算SFT、減算SUB、2の補数計算CPL及び比較演算CMPの演算に要する処理負荷を同一と見なし、これらを定数LCに置き換えて示している。また1ビット値の検出計算BITCHKの計算量を定数SCとして示し、モンゴメリ乗算剰余演算REDCの計算量を定数REDCとして示している。なお1ビット演算であるBITCHKは、多ビット演算より計算量が小さいため、BITCHK<LC,REDCが成立するものとする。図11において、LC及びSCとして示した列は、従来法1のステップA1、従来法2のステップA2、従来法3のステップA3及び本発明の計算方法におけるステップAに係る計算量を示している。またREDCとして示した列は、従来法1のステップB1、従来法2のステップB2、従来法3のステップB3及びステップC3並びに本発明の計算方法におけるステップB及びステップCに係る計算量を示している。
まず従来法1のステップA1、従来法2のステップA2及び従来法3のステップA3と、本発明の計算方法におけるステップAとに係る計算量を比較する。従来法1のステップA1又は従来法2のステップA2の計算量と、本発明の計算方法におけるステップAの計算量との差を以下に計算する。
(従来法1又は従来法2の計算量)−(本発明の計算方法における計算量)
=(5.5q+2.5v+1)×LC−((q+2)×LC+(q+1)×SC)
=(4.5q+2.5v−1)×LC−(q+1)×SC
=(3.5q+2.5v−2)×LC+(q+1)×(LC―SC)
上記計算において、q≧0、v≧1及びLC>SCであるから、計算結果は正の値をとる。従って従来法1又は従来法2の計算量より、本発明の計算方法における計算量の方が小さいことが証明される。
従来法3のステップA3の計算量と、本発明の計算方法におけるステップAの計算量との差を以下に計算する。
(従来法3の計算量)−(本発明の計算方法における計算量)
=(2.5k+2.5v+1)×LC−((q+2)×LC+(q+1)×SC)
=(2.5k+2.5v−q−1)×LC−(q+1)×SC
=(2.5k+2.5v−2q−2)×LC+(q+1)×(LC−SC)
上記計算結果中、第2項は、q≧0及びLC>SCであるから正の値をとる。また上記計算結果の第1項のLCの係数は、v≧1より以下の様に示すことができる。
2.5k+2.5v−2q−2≧2.5×(k−q)+0.5q+0.5
上記不等式において、最上位から連続する「0」の個数qは、1ワードあたりのビット長未満となることは明らかであるので、q≧0及びq<kが成立する。従って上記不等式は以下の様になり、第1項は正の値をとる。
2.5k+2.5v−2q−2≧2.5×(k−q)+0.5q+0.5>0
以上の計算結果より、従来法3の計算量より、本発明の計算方法における計算量の方が小さいことが証明される。従って従来法1のステップA1、従来法2のステップA2、従来法3のステップA3及び本発明の計算方法におけるステップAとに係る計算量を比較した場合、本発明の計算方法におけるステップAに係る計算量が最も小さく本発明の計算方法が優れていることが証明される。
次に従来法1のステップB1、従来法2のステップB2、従来法3のステップB3及びステップC3と、本発明の計算方法におけるステップB及びステップCとに係る計算量とを加味して全体の計算量を、実施例を挙げて比較する。REDCの計算量は、条件によって様々に変化する。上述した様に本発明の計算装置1は、コプロセッサを用いた演算手段14により、REDC演算を行うため、高速な計算を実現している。従ってここではREDCの計算量がLCの計算量と同等であるという前提に基づいて、計算量の比較を行う。またvの値は、夫々の実施例及び計算方法において、可及的最小値を選択するものとする。vが最小の値を選択する理由は、LC及びSCの回数はvに比例して大きくなるのに対し、REDCの回数はlog2 (1/v)に比例して減少するからである。例えばvの値を2倍に増加させた場合、LC及びSCの回数も2倍されるのに対し、REDCは1回しか減少しない。またLC=REDCという条件では、LC及びSCの回数並びにREDCの回数の合計がそのまま全体の計算量となることも合わせて考慮すると、最小のvの値を選択することで全体の計算量が最小になると考えられる。なお以下に示す実施例は、実施例4が前述した実施例1に対応し、実施例5が前述した実施例2に対応し、そして実施例6が前述した実施例3に対応する。
1024ビットのRSA暗号(1ワードが32ビット:k=32)の計算に適用
1ワードが32ビットの場合、1024ビットは32ワードで示される。従ってk=32,m=32となる。また最上位から連続する「0」の個数を示すq=0である。
従来法1.
m×k=1024より、(m×k)/vが2のべき乗値となるためのvの最小値は1であるので、v=1を選択する。
ステップA1.
(5.5q+2.5v+1)×LC=3.5×LC
ステップB1.
p×REDC=log2 ((m×k)/v)×REDC=10×REDC
合計
3.5×LC+10×REDC=13.5×LC
従来法2.
(m×k)/vが2のべき乗値である必要はないので、v=1を選択する。
ステップA2.
(5.5q+2.5v+1)×LC=3.5×LC
ステップB2.
p’−1+W((m×k)/v)×REDC=(11−1+W((10000000000)2,11))×REDC=10×REDC
合計
3.5×LC+10×REDC=13.5×LC
従来法3.
(m×k)/vが2のべき乗値である必要はないので、v=1を選択する。
ステップA3.
(2.5k+2.5v)×LC=82.5×LC
ステップB3及びステップC3
p”×REDC=log2 ((m×k)/v)×REDC=10×REDC
なお(m×k)/vが2のべき乗値をとるため、補正演算は行わない。
合計
82.5×LC+10×REDC=92.5×LC
本発明の計算方法
ステップA
(q+1)×LC+(q+1)×SC=LC+SC
ステップB及びステップC
p×REDC=log2 (m×k)×REDC=10×REDC
なおm×kが2のべき乗値をとるため、補正演算は行わない。
合計
LC+SC+10×REDC=11×LC+SC
163ビットの楕円曲線暗号(1ワードが8ビット:k=8)の計算に適用
1ワードが8ビットの場合、163ビットは21ワードで示される。従ってk=8,m=21となる。また最上位から連続する「0」の個数を示すq=5である。
従来法1.
m×k=168より、(m×k)/vが2のべき乗値となるためのvの最小値は21であるので、v=21を選択する。
ステップA1.
(5.5q+2.5v+1)×LC=(27.5+52.5+1)×LC=81×LC
ステップB1
p×REDC=log2 ((m×k)/v)×REDC=3×REDC
合計
81×LC+3×REDC=84×LC
従来法2.
(m×k)/vが2のべき乗値である必要はないので、v=1を選択する。
ステップA2.
(5.5q+2.5v+1)×LC=(27.5+52.5+1)×LC=31×LC
ステップB2.
p’−1+W((m×k)/v)×REDC=(8−1+W((10101000)2,8 ))×REDC=9×REDC
合計
31×LC+9×REDC=40×LC
従来法3.
(m×k)/vが2のべき乗値である必要はないので、v=1を選択する。
ステップA3.
(2.5k+2.5v)×LC=22.5×LC
ステップB3及びステップC3
(p”+1)×REDC=(log2 ((m×k)/v)+1)×REDC=(8+1)×REDC=9×REDC
なお(m×k)/vが2のべき乗値ではないため、補正演算を行う。
合計
23.5×LC+9×REDC=32.5×LC
本発明の計算方法
ステップA
(q+1)×LC+(q+1)×SC=6×LC+6×SC
ステップB及びステップC
(p+1)×REDC=(log2 (m×k)+1)×REDC=(8+1)×REDC=9×REDC
なおm×kが2のべき乗値ではないため、補正演算を行う。
合計
6×LC+6×SC+9×REDC=15×LC+6×SC
160ビットの楕円曲線暗号(1ワードが32ビット:k=32)の計算に適用
1ワードが32ビットの場合、160ビットは5ワードで示される。従ってk=32,m=5となる。また最上位から連続する「0」の個数を示すq=0である。
従来法1.
m×k=160より、(m×k)/vが2のべき乗値となるためのvの最小値は5であるので、v=5を選択する。
ステップA1.
(5.5q+2.5v+1)×LC=(12.5+1)×LC=13.5×LC
ステップB1
p×REDC=log2 ((m×k)/v)×REDC=5×REDC
合計
13.5×LC+5×REDC=18.5×LC
従来法2.
(m×k)/vが2のべき乗値である必要はないので、v=1を選択する。
ステップA2.
(5.5q+2.5v+1)×LC=(2.5+1)×LC=3.5×LC
ステップB2.
p’−1+W((m×k)/v)×REDC=(8−1+W((10100000)2,8 ))×REDC=8×REDC
合計
3.5×LC+8×REDC=11.5×LC
従来法3.
(m×k)/vが2のべき乗値である必要はないので、v=1を選択する。
ステップA3.
(2.5k+2.5v)×LC=82.5×LC
ステップB3及びステップC3
(p”+1)×REDC=(log2 ((m×k)/v)+1)×REDC=(8+1)×REDC=9×REDC
なお(m×k)/vが2のべき乗値ではないため、補正演算を行う。
合計
82.5×LC+9×REDC=91.5×LC
本発明の計算方法
ステップA
(q+1)×LC+(q+1)×SC=LC+SC
ステップB及びステップC
(p+1)×REDC=(log2 (m×k)+1)×REDC=(8+1)×REDC=9×REDC
なおm×kが2のべき乗値ではないため、補正演算を行う。
合計
LC+SC+9×REDC=10×LC+SC
図12は、本発明の計算方法及び従来法におけるモンゴメリ変換パラメータの計算方法に要する演算回数を示す図表である。図12は、実施例4乃至実施例6として示した結果を纏めて示した図表である。図12から明らかな様に、本発明の計算方法は、実施例4乃至実施例6として示したいずれの条件下でも、従来法1乃至従来法3より優れている。
前記実施の形態では、計算装置を演算カードに適用した形態を示したが、本発明はこれに限らず、パーソナルコンピュータ、サーバコンピュータ等のコンピュータ本体に適用する形態であっても良い等、様々な形態に適用することが可能である。
また前記実施の形態では、REDC演算を実行するコプロセッサを実装する形態を示したが、本発明はこれに限らず、ソフトウェアの処理によりREDC演算を実行する様にしても良い等、様々な形態に適用することが可能である。
以上の実施の形態1及び2を含む実施の形態に関し、更に以下の付記を開示する。
(付記1)
モンゴメリ乗算剰余演算にて用いられ、剰余の法nに関する剰余値であるモンゴメリ変換パラメータに関する値を、1ワードあたりのビット長がkで、少なくともm個のワードを有するレジスタを用いて計算する計算方法において、
m*k の法nに関する同値として、nの負数を求めてレジスタに格納するステップと、
レジスタに格納されている値を桁上がり方向へ1ビットシフトして、レジスタからあふれる最上位ビットを破棄する処理を、破棄する最上位ビットが0になるまで繰り返すことで、2m*k+1 の法nに関する同値を求めてレジスタに格納するステップと、
レジスタに格納されている値に基づくモンゴメリ乗算剰余演算により、モンゴメリ変換パラメータと、法nに関する剰余値が同じである同値を計算するステップと
を含むことを特徴とする計算方法。
(付記2)
モンゴメリ乗算剰余演算にて用いられ、剰余の法nに関する剰余値であるモンゴメリ変換パラメータに関する値を、1ワードあたりのビット長がkで、少なくともm個のワードを有するレジスタと、値A及びB、並びに有効ワード長がmである剰余の法nに対し、2-m*k×A×B(mod n)として定義されるモンゴメリ乗算剰余演算REDC(A,B)n を実行する演算手段とを用いて計算する計算方法において、
剰余の法nの負数をレジスタに格納するステップと、
レジスタに格納されている値を桁上がり方向へ1ビットシフトするシフト処理を、レジスタからあふれる最上位ビットが0になるまで繰り返すステップと、
前記演算手段により、レジスタに格納されている値REGに対し、モンゴメリ乗算剰余演算REDC(REG,REG)n を実行して、その結果をレジスタに格納する処理を、2p-1 <m×k≦2p を満たす整数であるp回繰り返すステップと、
p >m×kである場合に、前記演算手段により、レジスタに格納されている値REGに対し、モンゴメリ乗算剰余演算REDC(REG,g)n を実行して、その結果をレジスタに格納するステップと(ただしg=2k*G(p,m,k)、かつG(p,m,k)=2×m−2p /k)、
レジスタに格納されている値を、モンゴメリ変換パラメータと、法nに関する剰余値が同じである同値として出力するステップと
を含むことを特徴とする計算方法。
(付記3)
計算した同値を用いて、べき乗剰余処理を実行することを特徴とする付記1に記載の計算方法。
(付記4)
モンゴメリ乗算剰余演算にて用いられ、剰余の法nに関する剰余値であるモンゴメリ変換パラメータに関する値を計算する計算装置において、
レジスタと、
剰余の法nの負数を前記レジスタに格納する手段と、
レジスタに格納されている値を桁上がり方向へ1ビットシフトする処理を、レジスタからあふれる最上位ビットが0になるまで繰り返す手段と、
レジスタに格納されている値に基づくモンゴメリ乗算剰余演算により、モンゴメリ変換パラメータと、法nに関する剰余値が同じである同値を計算する手段と
を備えることを特徴とする計算装置。
(付記5)
モンゴメリ乗算剰余演算にて用いられ、剰余の法nに関する剰余値であるモンゴメリ変換パラメータに関する値を計算する計算装置において、
1ワードあたりのビット長がkで、少なくともm個のワードを有するレジスタと、
値A及びB、並びに有効ワード長がmである剰余の法nに対し、2-m*k×A×B(mod n)として定義されるモンゴメリ乗算剰余演算REDC(A,B)n を実行する演算手段と、
剰余の法nの負数をレジスタに格納する手段と、
レジスタに格納されている値を桁上がり方向へ1ビットシフトするシフト処理を、レジスタからあふれる最上位ビットが0になるまで繰り返す手段と、
前記演算手段により、レジスタに格納されている値REGに対し、モンゴメリ乗算剰余演算REDC(REG,REG)n を実行して、その結果をレジスタに格納する処理を、2p-1 <m×k≦2p を満たす整数であるp回繰り返す手段と、
p >m×kである場合に、前記演算手段により、レジスタに格納されている値REGに対し、モンゴメリ乗算剰余演算REDC(REG,g)n を実行して、その結果をレジスタに格納する手段と(ただしg=2k*G(p,m,k)、かつG(p,m,k)=2×m−2p /k)、
レジスタに格納されている値を、モンゴメリ変換パラメータと、法nに関する剰余値が同じである同値として出力する手段と
を備えることを特徴とする計算装置。
(付記6)
複数のレジスタと、
m個のワードを有する第1のレジスタ及びm個以上のワードを有する第2のレジスタに、夫々n及び0を格納する手段と、
第2のレジスタに格納されている値から、第1のレジスタに格納されている値を減じて、剰余の法nの負数を計算する手段と
を更に備えることを特徴とする付記5に記載の計算装置。
(付記7)
レジスタに剰余の法nを格納する手段と、
レジスタに格納されている値の補数を、剰余の法nの負数として計算する手段と
を更に備えることを特徴とする付記5に記載の計算装置。
(付記8)
レジスタに剰余の法nを格納する手段と、
レジスタに格納されている値を反転させる手段と、
レジスタに格納されている値の最下位ビットを1として、剰余の法nの負数を計算する手段と
を更に備えることを特徴とする付記5に記載の計算装置。
(付記9)
前記シフト処理は、レジスタに格納されている値に該値を加算する加算処理であり、
前記シフト処理によりレジスタからあふれる最上位ビットは、前記加算処理により発生したキャリー値として検出する
ことを特徴とする付記5乃至付記8のいずれかに記載の計算装置。
(付記10)
1ワードあたりのビット長がkで、少なくともm個のワードを有するレジスタを備えるコンピュータに、モンゴメリ乗算剰余演算にて用いられ、剰余の法nに関する剰余値であるモンゴメリ変換パラメータに関する値を計算させるコンピュータプログラムにおいて、
コンピュータに、2m*k の法nに関する同値として、nの負数を求めてレジスタに格納させる手順と、
コンピュータに、レジスタに格納されている値を桁上がり方向へ1ビットシフトして、レジスタからあふれる最上位ビットを破棄する処理を、破棄する最上位ビットが0になるまで繰り返すことで、2m*k+1 の法nに関する同値を求めてレジスタに格納させる手順と、
コンピュータに、レジスタに格納されている値に基づくモンゴメリ乗算剰余演算により、モンゴメリ変換パラメータと、法nに関する剰余値が同じである同値を計算させる手順と
を実行させることを特徴とするコンピュータプログラム。
(付記11)
1ワードあたりのビット長がkで、少なくともm個のワードを有するレジスタと、値A及びB、並びに有効ワード長がmである剰余の法nに対し、2-m*k×A×B(mod n)として定義されるモンゴメリ乗算剰余演算REDC(A,B)n を実行する演算手段とを備えるコンピュータに、モンゴメリ乗算剰余演算にて用いられ、剰余の法nに関する剰余値であるモンゴメリ変換パラメータに関する値を計算させるコンピュータプログラムにおいて、
コンピュータに、剰余の法nの負数をレジスタに格納させる手順と、
コンピュータに、レジスタに格納されている値を桁上がり方向へ1ビットシフトするシフト処理を、レジスタからあふれる最上位ビットが0になるまで繰り返させる手順と、
コンピュータに、前記演算手段により、レジスタに格納されている値REGに対し、モンゴメリ乗算剰余演算REDC(REG,REG)n を実行して、その結果をレジスタに格納する処理を、2p-1 <m×k≦2p を満たす整数であるp回繰り返させる手順と、
コンピュータに、2p >m×kである場合に、前記演算手段により、レジスタに格納されている値REGに対し、モンゴメリ乗算剰余演算REDC(REG,g)n を実行して、その結果をレジスタに格納させる手順と(ただしg=2k*G(p,m,k)、かつG(p,m,k)=2×m−2p /k)、
コンピュータに、レジスタに格納されている値を、モンゴメリ変換パラメータと、法nに関する剰余値が同じである同値として出力させる手順と
を実行させることを特徴とするコンピュータプログラム。
本発明の計算装置の構成例を示すブロック図である。 本発明の計算方法に関するモンゴメリ乗算剰余演算のアルゴリズムを示す説明図である。 本発明の計算方法に関するモンゴメリ乗算剰余演算を用いたべき乗剰余演算のアルゴリズムを示す説明図である。 本発明の計算装置の処理を示すフローチャートである。 本発明の計算装置が備える第1レジスタ及び第2レジスタに格納される値を概念的に示す説明図である。 本発明の計算装置が備える第1レジスタ及び第2レジスタに格納される値を概念的に示す説明図である。 本発明の計算装置が備える第2レジスタに格納される値を概念的に示す説明図である。 本発明の計算装置が備える第2レジスタに格納される値を概念的に示す説明図である。 本発明の計算装置が備える第2レジスタに格納される値を概念的に示す説明図である。 本発明のモンゴメリ変換パラメータの計算方法に要する演算回数を示す図表である。 本発明の計算方法及び従来法におけるモンゴメリ変換パラメータの計算方法に要する演算回数を示す図表である。 本発明の計算方法及び従来法におけるモンゴメリ変換パラメータの計算方法に要する演算回数を示す図表である。 モンゴメリ乗算剰余演算のアルゴリズムを示す説明図である。 モンゴメリ乗算剰余演算を用いたべき乗剰余演算のアルゴリズムを示す説明図である。 モンゴメリ変換パラメータの計算方法のアルゴリズムを示す説明図である。 従来法1におけるモンゴメリ変換パラメータの計算方法を示すフローチャートである。 従来法1におけるモンゴメリ変換パラメータの計算方法に要する演算回数を示す図表である。 従来法2におけるモンゴメリ変換パラメータの計算方法を示すフローチャートである。 従来法2におけるモンゴメリ変換パラメータの計算方法に要する演算回数を示す図表である。 従来法3におけるモンゴメリ変換パラメータの計算方法を示すフローチャートである。 従来法3におけるモンゴメリ変換パラメータの計算方法に要する演算回数を示す図表である。 従来法におけるモンゴメリ変換パラメータの計算方法に要する演算回数を示す図表である。
符号の説明
1 計算装置
11 制御手段
12 記録手段
13a 第1レジスタ
13b 第2レジスタ
14 演算手段
15 接続手段
2 通信措置
3 コンピュータプログラム
200 コンピュータプログラム

Claims (9)

  1. モンゴメリ乗算剰余演算にて用いられ、剰余の法nに関する剰余値であるモンゴメリ変換パラメータに関する値を、1ワードあたりのビット長がkで、少なくともm個のワードを有するレジスタを備えた計算装置を用いて計算する計算方法において、
    前記計算装置は、
    m*k の法nに関する同値として、nの負数を求めてレジスタに格納するステップと、
    レジスタに格納されている値を桁上がり方向へ1ビットシフトして、レジスタからあふれる最上位ビットを破棄する処理を、破棄する最上位ビットが0になるまで繰り返すことで、2m*k+1 の法nに関する同値を求めてレジスタに格納するステップと、
    レジスタに格納されている値に基づくモンゴメリ乗算剰余演算により、モンゴメリ変換パラメータと、法nに関する剰余値が同じである同値を計算するステップと
    実行することを特徴とする計算方法。
  2. 計算した同値を用いて、べき乗剰余処理を実行することを特徴とする請求項1に記載の計算方法。
  3. モンゴメリ乗算剰余演算にて用いられ、剰余の法nに関する剰余値であるモンゴメリ変換パラメータに関する値を計算する計算装置において、
    レジスタと、
    剰余の法nの負数を前記レジスタに格納する手段と、
    レジスタに格納されている値を桁上がり方向へ1ビットシフトする処理を、レジスタからあふれる最上位ビットが0になるまで繰り返す手段と、
    レジスタに格納されている値に基づくモンゴメリ乗算剰余演算により、モンゴメリ変換パラメータと、法nに関する剰余値が同じである同値を計算する手段と
    を備えることを特徴とする計算装置。
  4. モンゴメリ乗算剰余演算にて用いられ、剰余の法nに関する剰余値であるモンゴメリ変換パラメータに関する値を計算する計算装置において、
    1ワードあたりのビット長がkで、少なくともm個のワードを有するレジスタと、
    値A及びB、並びに有効ワード長がmである剰余の法nに対し、2-m*k×A×B(mod n)として定義されるモンゴメリ乗算剰余演算REDC(A,B)n を実行する演算手段と、
    剰余の法nの負数をレジスタに格納する手段と、
    レジスタに格納されている値を桁上がり方向へ1ビットシフトするシフト処理を、レジスタからあふれる最上位ビットが0になるまで繰り返す手段と、
    前記演算手段により、レジスタに格納されている値REGに対し、モンゴメリ乗算剰余演算REDC(REG,REG)n を実行して、その結果をレジスタに格納する処理を、2p-1 <m×k≦2p を満たす整数であるp回繰り返す手段と、
    p >m×kである場合に、前記演算手段により、レジスタに格納されている値REGに対し、モンゴメリ乗算剰余演算REDC(REG,g)n を実行して、その結果をレジスタに格納する手段と(ただしg=2k*G(p,m,k)、かつG(p,m,k)=2×m−2p /k)、
    レジスタに格納されている値を、モンゴメリ変換パラメータと、法nに関する剰余値が同じである同値として出力する手段と
    を備えることを特徴とする計算装置。
  5. 複数のレジスタと、
    m個のワードを有する第1のレジスタ及びm個以上のワードを有する第2のレジスタに、夫々n及び0を格納する手段と、
    第2のレジスタに格納されている値から、第1のレジスタに格納されている値を減じて、剰余の法nの負数を計算する手段と
    を更に備えることを特徴とする請求項4に記載の計算装置。
  6. レジスタに剰余の法nを格納する手段と、
    レジスタに格納されている値の補数を、剰余の法nの負数として計算する手段と
    を更に備えることを特徴とする請求項4に記載の計算装置。
  7. レジスタに剰余の法nを格納する手段と、
    レジスタに格納されている値を反転させる手段と、
    レジスタに格納されている値の最下位ビットを1として、剰余の法nの負数を計算する手段と
    を更に備えることを特徴とする請求項4に記載の計算装置。
  8. 前記シフト処理は、レジスタに格納されている値に該値を加算する加算処理であり、
    前記シフト処理によりレジスタからあふれる最上位ビットは、前記加算処理により発生したキャリー値として検出する
    ことを特徴とする請求項4乃至請求項7のいずれかに記載の計算装置。
  9. 1ワードあたりのビット長がkで、少なくともm個のワードを有するレジスタを備えるコンピュータに、モンゴメリ乗算剰余演算にて用いられ、剰余の法nに関する剰余値であるモンゴメリ変換パラメータに関する値を計算させるコンピュータプログラムにおいて、
    コンピュータに、2m*k の法nに関する同値として、nの負数を求めてレジスタに格納させる手順と、
    コンピュータに、レジスタに格納されている値を桁上がり方向へ1ビットシフトして、レジスタからあふれる最上位ビットを破棄する処理を、破棄する最上位ビットが0になるまで繰り返すことで、2m*k+1 の法nに関する同値を求めてレジスタに格納させる手順と、
    コンピュータに、レジスタに格納されている値に基づくモンゴメリ乗算剰余演算により、モンゴメリ変換パラメータと、法nに関する剰余値が同じである同値を計算させる手順と
    を実行させることを特徴とするコンピュータプログラム。
JP2005099980A 2005-03-30 2005-03-30 計算方法、計算装置及びコンピュータプログラム Expired - Fee Related JP4662802B2 (ja)

Priority Applications (6)

Application Number Priority Date Filing Date Title
JP2005099980A JP4662802B2 (ja) 2005-03-30 2005-03-30 計算方法、計算装置及びコンピュータプログラム
KR1020050066279A KR100723996B1 (ko) 2005-03-30 2005-07-21 계산 방법, 계산 장치 및 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체
DE602005018442T DE602005018442D1 (de) 2005-03-30 2005-07-21 Verfahren und Vorrichtung zur Berechnung eines Montgomery-Konvertierungsparameters
EP05254555A EP1708081B1 (en) 2005-03-30 2005-07-21 Method and device for calculating a Montgomery conversion parameter
US11/192,138 US8085931B2 (en) 2005-03-30 2005-07-29 Computation method, computing device and computer program
CN2005100890451A CN1841443B (zh) 2005-03-30 2005-08-03 计算方法和计算设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005099980A JP4662802B2 (ja) 2005-03-30 2005-03-30 計算方法、計算装置及びコンピュータプログラム

Publications (2)

Publication Number Publication Date
JP2006276786A JP2006276786A (ja) 2006-10-12
JP4662802B2 true JP4662802B2 (ja) 2011-03-30

Family

ID=36674874

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005099980A Expired - Fee Related JP4662802B2 (ja) 2005-03-30 2005-03-30 計算方法、計算装置及びコンピュータプログラム

Country Status (6)

Country Link
US (1) US8085931B2 (ja)
EP (1) EP1708081B1 (ja)
JP (1) JP4662802B2 (ja)
KR (1) KR100723996B1 (ja)
CN (1) CN1841443B (ja)
DE (1) DE602005018442D1 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100555939C (zh) * 2006-09-20 2009-10-28 北京飞天诚信科技有限公司 一种基于网络的软件保护方法
US8243919B2 (en) * 2007-03-07 2012-08-14 Research In Motion Limited Method and apparatus for performing elliptic curve scalar multiplication in a manner that counters power analysis attacks
JP5179933B2 (ja) * 2008-04-18 2013-04-10 ルネサスエレクトロニクス株式会社 データ処理装置
US8626811B2 (en) * 2010-04-30 2014-01-07 Certicom Corp. Method and apparatus for providing flexible bit-length moduli on a block Montgomery machine
FR2977952A1 (fr) * 2011-07-13 2013-01-18 St Microelectronics Rousset Protection d'un calcul d'exponentiation modulaire par multiplication par une quantite aleatoire
US8799343B2 (en) * 2011-09-22 2014-08-05 Intel Corporation Modular exponentiation with partitioned and scattered storage of Montgomery Multiplication results
DE102011117219A1 (de) * 2011-10-28 2013-05-02 Giesecke & Devrient Gmbh Bestimmen eines Divisionsrests und Ermitteln von Primzahlkandidaten für eine kryptographische Anwendung
US10678709B2 (en) 2013-07-15 2020-06-09 Infineon Technologies Ag Apparatus and method for memory address encryption
US10176121B2 (en) * 2013-07-15 2019-01-08 Infineon Technologies Ag Apparatus and method for memory address encryption
CN111712816B (zh) 2018-03-28 2024-05-03 密码研究公司 使用密码蒙蔽以用于高效地使用蒙哥马利乘法
CN109361510B (zh) * 2018-11-07 2021-06-11 西安电子科技大学 一种支持溢出检测和大整数运算的信息处理方法及应用

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2726667B1 (fr) 1994-11-08 1997-01-17 Sgs Thomson Microelectronics Procede de mise en oeuvre de multiplication modulaire selon la methode montgomery
FR2726666B1 (fr) * 1994-11-08 1997-01-17 Sgs Thomson Microelectronics Procede de production d'un parametre de correction d'erreur associe a la mise en oeuvre d'operations modulaires selon la methode de montgomery
FR2743908B1 (fr) 1996-01-18 1998-02-27 Sgs Thomson Microelectronics Procede de production d'un parametre de correction d'erreur associe a la mise en oeuvre d'operation modulaire selon la methode de montgomery
JP3525209B2 (ja) * 1996-04-05 2004-05-10 株式会社 沖マイクロデザイン べき乗剰余演算回路及びべき乗剰余演算システム及びべき乗剰余演算のための演算方法
JP3615622B2 (ja) * 1996-06-28 2005-02-02 株式会社ルネサステクノロジ マイクロコンピュータ
TW419925B (en) * 1998-01-27 2001-01-21 Mitsubishi Electric Corp Method and apparatus for arithmetic operation and recording medium thereof
US6240436B1 (en) 1998-03-30 2001-05-29 Rainbow Technologies, Inc. High speed montgomery value calculation
US6978016B2 (en) * 2000-12-19 2005-12-20 International Business Machines Corporation Circuits for calculating modular multiplicative inverse
US7194088B2 (en) * 2001-06-08 2007-03-20 Corrent Corporation Method and system for a full-adder post processor for modulo arithmetic
EP1650727B1 (en) * 2003-07-31 2010-06-02 Fujitsu Limited Method for calculating conversion parameter of montgomery multiplication remainder
JP3734489B2 (ja) * 2004-10-18 2006-01-11 良 渡部 四輪駆動型の農用トラクタ

Also Published As

Publication number Publication date
KR20060106565A (ko) 2006-10-12
EP1708081A1 (en) 2006-10-04
EP1708081B1 (en) 2009-12-23
US8085931B2 (en) 2011-12-27
JP2006276786A (ja) 2006-10-12
DE602005018442D1 (de) 2010-02-04
CN1841443A (zh) 2006-10-04
CN1841443B (zh) 2011-04-20
KR100723996B1 (ko) 2007-06-04
US20060222175A1 (en) 2006-10-05

Similar Documents

Publication Publication Date Title
JP4662802B2 (ja) 計算方法、計算装置及びコンピュータプログラム
US8504602B2 (en) Modular multiplication processing apparatus
CN109039640B (zh) 一种基于rsa密码算法的加解密硬件***及方法
JP5365624B2 (ja) 電力解析攻撃への対策機能を備えた復号装置、プログラム、及び復装置を組み込んだ組込機器装置
US8265267B2 (en) Information security device
EP1457875A2 (en) Apparatus and method for performing montgomery type modular multiplication
JP4977300B2 (ja) 暗号法及び装置
EP0952697B1 (en) Elliptic curve encryption method and system
JP3854226B2 (ja) 鍵ペア決定およびrsa鍵生成のための方法並びに装置
Susilo et al. A generalised bound for the Wiener attack on RSA
TW200413954A (en) Information processing method
JP4177526B2 (ja) 乗算剰余演算方法および乗算剰余回路
JP4616169B2 (ja) モンゴメリ乗算剰余における変換パラメータの計算装置、方法およびそのプログラム
Marouf et al. Comparative study of efficient modular exponentiation algorithms
JP4423900B2 (ja) 楕円曲線暗号におけるスカラー倍計算方法と、その装置およびそのプログラム
US10318245B2 (en) Device and method for determining an inverse of a value related to a modulus
Schinianakis et al. RNS-Based Public-Key Cryptography (RSA and ECC)
JP3626315B2 (ja) 剰余算装置、情報処理装置及び剰余算方法
KR20070049823A (ko) 전력공격에 안전한 모듈라 지수승 연산 및 상수배 곱셈연산방법
KR100451570B1 (ko) 에스피에이에 견디는 타원 곡선 암호화 알고리즘을구현하는 방법 및 장치
Abd Ghafar et al. A Survey of Partial Key Exposure Attacks on RSA Cryptosystem
Yin Curve selection in elliptic curve cryptography
JP3999554B2 (ja) 乗算剰余演算方法及び演算装置
Mohammadi et al. A fast and secure RSA public key cryptosystem
Gueron et al. Applications of the Montgomery exponent

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20071219

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20101001

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101012

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20101208

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: 20110104

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110104

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140114

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees