JP2006072336A - 素因数分解装置、素因数分解プログラム、安全性評価装置、安全性評価プログラム及び素因数分解方法 - Google Patents
素因数分解装置、素因数分解プログラム、安全性評価装置、安全性評価プログラム及び素因数分解方法 Download PDFInfo
- Publication number
- JP2006072336A JP2006072336A JP2005216856A JP2005216856A JP2006072336A JP 2006072336 A JP2006072336 A JP 2006072336A JP 2005216856 A JP2005216856 A JP 2005216856A JP 2005216856 A JP2005216856 A JP 2005216856A JP 2006072336 A JP2006072336 A JP 2006072336A
- Authority
- JP
- Japan
- Prior art keywords
- prime
- security
- integer
- factorization
- public key
- 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
Links
Images
Abstract
【解決手段】N=p*q=(s+a)(s−b)、sをNの平方根に近い整数とし、
Nmods=(−a*b)mods、ab=ks−(Nmods)、0<ab<s、k=1としてNの素因数分解を行い、演算結果が適正であるか否かを判定し、否と判定した場合に、肯と判定するまでkを増加させながら素因数分解を繰り返す素因数分解部と、kが上限値(Limit)を超えても素因数分解部によって適正な演算結果が出ない場合に、Nを用いた公開鍵暗号が安全と判定する安全性判定部とを備える安全性評価装置。
【選択図】図2
Description
従来から、素因数分解の方法として、rho(ロー)法、p−1法などが知られている(例えば、非特許文献1参照。)。
p−1、p+1にそれぞれ大きな素因数をもつように素数を選択するなど、難しい計算をし、素数の値に条件をつけて選択することによって、これらの方法による素因数分解を困難なものとしていた(例えば、特許文献1参照。)。
一方、近年においては、素数p,qがランダムに生成された乱数より生成され、Nが1024ビット程度である場合には、安全性が高いと言われている(例えば、非特許文献2参照。)。また、素数の長さ(ビット長)が大きく異なる場合にも、素因数分解が比較的容易となるため、一般的に同一のビット長の素数が用いられている。
このように、従来から、新たな素因数分解の方法が解明されると、素数p,qの値に条件をつけて選択し、この方法における素因数分解を困難なものとし、安全性を保証するための措置を取っていた。
Alfred J. Menezes, Paul C. van Oorschot and Scott A. Vanstone著、「ハンドブック・オブ・アプライド・クリプトグラフィ(Handbook of Applied Cryptography)」、(米国)、シーアールシープレス(CRC Press)、2001年8月、第3章p.89−98 ロバート・ディー・シルバーマン(Robert D.Silverman)著、"ファーストジェネレーション・オブ・ランダム、ストロングRSAプライムス,クリプトバイツ−ボリューム3.1(Fast Generation of Random, Strong RSA Primes(Cryptobytes Volume 3,No.1-SPRING 1997))"、[online]、1997年春、RSAデータラボラトリーズ(RSA Laboratories)、[平成16年7月12日検索]、インターネット〈ftp://ftp.rsasecurity.com/pub/cryptobytes/crypto3n1.pdf〉
また、公開鍵暗号を利用したデジタル署名の規格であるANSIの「ANSIX9.31−1998」のセクションC.8においても、鍵の安全性の検証は今後の研究開発課題である旨が記述されている。
前記第2の演算ステップにおいて、Sの値の範囲を、( 6√N/(4*√K))に比べて狭く設定すること、
を特徴とする素因数分解方法である。
前記第2の演算ステップは、素因数pi 及びqi の積である他の整数Ni をKに代入し、S,Xの値を算出すること、
を特徴とする素因数分解方法である。
(1)Nmods=(−a*b)modsに基づいて演算を行うことによって、新たな方法によって、素因数p,qが大きな値であっても、Nを素因数p,qへ素因数分解することが可能となる。
(2)Nmods=(c2 −d2 )modsに基づいて素因数分解することによって、演算回数を減少させ、処理の迅速化を図る。
(3)特に、0<ab<ks、kが小さな値である場合など、素因数p,qが一定の条件を満たす場合には、素因数p,qがどんなに大きな数値であっても容易に素因数分解することが可能となる。
(4)N=p*q、X=K*N=rp*sq=S2−a2、S=ceiling(√X)とした場合に、Kの値を大きな値から小さな値へ変化させ、aが整数となるS,Xの値を算出することによって、整数Nを素因数分解可能なKの値が大きい場合に、従来の方法と比較して容易にKを見つけだし、Nを素因数分解することが可能となる。
(5)特に、Sの値の範囲を、( 6√N/(4*√K))に比べて狭く設定することによって、試行範囲を拡げずに、つまり、処理時間を長期化せずに、素因数分解可能なKの値が大きい整数Nを、容易に素因数分解することが可能となる。
(6)素因数pi 及びqi の積である他の整数Ni をKに代入し、S,Xの値を算出することによって、Nを素因数分解可能なr,sの値が解らなくても、この他の整数Ni を用いて容易にNを素因数分解することが可能となる。特に、Nを素因数分解可能なK,r,sの値が大きいときに容易にNを素因数分解することが可能となる。
(7)素因数p,qの上位n/2ビットにおける差の大小、0<ab<ksなどに基づいて安全性を評価することによって、公開鍵暗号の暗号鍵についての安全性評価を容易にすることができるとともに、セキュリティを向上する。特に、しきい値kの値を暗号鍵に対して求める安全性、計算量などに応じて設定し、0<ab<ksに基づいて判定を行うことによって、要求する安全性、計算量などに応じた安全性の評価が可能となる。
(8)特に、素因数p,qのそれぞれの最上位バイトから下位へ向けて情報単位ごとに順に比較し、相違箇所があった場合に、その位置に応じて安全性を評価することによって、計算リソース上の負担を軽減し、処理の迅速化を図ることが可能となる。
(9)また、簡易な処理で評価を行うことが可能であるため、ICカードなど、処理に制限のかかる情報処理装置においてもこの安全性の評価を実現することができるとともに、実現にかかる負担が少なく、汎用性、実現性が高い。
(10)拡張ユークリッドアルゴリズムの互除法を用いてr,sを算出し、その演算結果に基づいて、公開鍵暗号の安全性を評価することによって、不正者が素因数分解可能なr,sに偏りのある公開鍵Nを生成した場合などの不正を容易に発見できるなど、セキュリティを向上することが可能となる。
(11)Nを新たな方法で素因数分解し、その結果に基づいて、公開鍵暗号の暗号鍵の安全性を評価することによって、この方法による公開鍵暗号に対する不正を防止し、セキュリティを向上する。また、公開されているNに基づいて評価を行うことによって、秘密鍵などの秘匿情報をその保持媒体から取り出すことなく、安全性を評価することができ、セキュリティを向上する。
(12)特に、公開鍵暗号に、同一のビット長で、素数の差が、一定のしきい値以上に設定される素数を使用するように望まれている環境において、この要請に応じて、2つの素数を同一ビット数、素数の差がしきい値となるように設定した場合であっても、このしきい値が2^(n/2)以下のときには、容易に素因数分解することができることとなり、この危険性を検出し、暗号鍵を脆弱と評価することによってセキュリティを向上する。
図1は、本発明による素因数分解装置、安全性評価装置の構成を示すブロック図である。なお、本実施例における素因数分解装置及び安全性評価装置は、素因数分解部12及び安全性評価装置10である。
図1に示すように、暗号鍵評価システム1は、安全性評価装置10と、ICカード20などを備え、暗号の安全性が素因数分解の困難性に依存する暗号方式(RSA暗号など)における暗号鍵の安全性を評価するコンピュータシステムである。
RSA暗号の安全性は、公開される整数N(=p*q)の素因数分解の困難性に依存する。つまりRSA暗号の暗号鍵の安全性は、素数p,qの性質に依存し、素数p,qの積であって、公開されるNが素因数分解され易い場合には、安全性が否定される。RSA暗号においては、p−1及びqー1の最小公倍数LをL=LCM(p−1,q−1)とした場合に、最大公約数gcd(e,L)=1を満たすeの値が公開鍵となる。また、ed=1(modL)を満たすdの値が私有鍵となる。なお、平文をM、暗号文をCとすると、RSA暗号において、暗号化は、C=Me (modn)、復号は、M=Cd (modn)のアルゴリズムによって行われる。
安全性評価装置10は、CPU、メモリ、入出力装置などを備えるコンピュータであって、リーダライタ11、素因数分解部12、安全性判定部13、ディスプレイ14などを備え、例えば、ATMなどの情報処理装置に、素因数分解部12、安全性判定部13を設けることによって実現することが可能である。安全性評価装置10は、ICカード20に格納されている私有鍵の安全性を評価する。
ディスプレイ14は、私有鍵dが安全か否かの安全性判定部13による安全性の評価結果を表示し、利用者に通知する。
素因数分解部12は、リーダライタ11から入力される整数Nを素因数分解して、素因数p,qを算出する。ここで、Nの素因数分解の方法を説明する。
sを、√Nの小数点第一位を四捨五入した整数(round(√N))など、Nの平方根に近い整数とし(#10)、p=s+a、q=s−bとすると、
N=(s+a)*(s−b)=s2 +s*(a−b)−a*bとなる(#20)。
また、Nをsで割ったときの剰余をrとすると、
r=Nmods=(−a*b)mods
=−a*b+k*sとなる(#30)。
また、c=a*b=k*s−r(kは、整数。)とすると、
#20の式は、N=s2 +s*(a−c/a)−c、
変形して、0=s*a2 +(s2 −N−c)*a−s*cとなる(#50)。
0<ab<sと仮定した場合には、k=1、c=s−rとなり(#40)、#50の式からaを求めることができ、b=c/a、p=s+a、q=s−bから、b、p,qを算出することが可能となる。つまり、0<ab<sが成り立つ素数p(=s+a)、q(=s−b)に基づいて生成された暗号鍵は、極めて脆弱と判定される。
安全性判定部13は、素因数分解部12の演算結果、つまり、kの上限値内で整数のa及びbが算出できるか否かに基づいて、ICカード20に格納されている私有鍵が安全であるか否かを判定する(#70,#80)。
なお、上限値を無限大とした場合には、全ての素因数分解を行うことが可能となる。また、設定した上限値が高いほど、素因数分解の算出に時間がかかり、暗号鍵の安全性の基準が高くなる一方で、安全性の評価に時間がかかる。従って、安全性の評価に許される計算時間の限度で最大の値を上限値とするなど、計算時間に応じて上限値を設定することが望ましい。また、暗号鍵に対して要求する安全性についても同様である。つまり、素数p,qのビット数に応じるなど、求める計算量的な安全性に応じて上限値を設定することが望ましい。例えば、Limit≒2^50とした場合には、要求する安全性は高くなるが、計算量が多大となり、現実的ではない。
図3に示すようにN=1927、67591、281861の場合には、0<ab<sであって、k=1で素因数p,qが算出される。一方、N=296449、826513の場合には、s<abとなり、それぞれk=2、k=8において素因数p,qが算出される。
図4に示すように、ステップ110(以下、「ステップ」を「S」という。)において、安全性評価装置10は、S110において、ICカード20へ所定のコマンドを送信し、そのレスポンスとして、整数Nを受信する。
素因数分解部12は、このNを#50の式など(図2参照)に代入し、k=1として(S120)、a、bを算出する(S130)。a及びbが整数でない場合には、素因数分解部12は、kに1を加え(S140,S160)、kが上限値以下の場合には、同様の処理を繰り返す(S170,S130,S140,S160)。
安全性判定部13は、整数のa及びbの値が算出された場合には、ICカード20に格納されている私有鍵dを脆弱と判定し(S140,S150)、kが上限値を超えた場合には、私有鍵dを安全と判定する(S170,S180)。安全性評価装置10は、判定結果をディスプレイ14に表示し(S190)、処理を終了する(S200)。
更に、安全性評価システム1は、任意に設定可能であって、安全性判断のしきい値となる上限値(Limit)をkが超えるまでに素因数分解することができるか否かに基づいて、暗号鍵の安全性を評価するため、上限値を低く設定し、簡易に安全性の評価を行うことができる一方、高く設定し、安全性を高めることも可能となった。
特に、公開鍵暗号に、同一のビット長で、素数の差が、一定のしきい値T以上に設定される素数を使用するように望まれている環境において、この要請に応じて、2つの素数を同一ビット数n、素数の差がTとなるように設定した場合には、前記しきい値TがT≦2^(n/2)で、公開鍵の安全性を確保するのに不十分の場合、素因数分解部12は、容易に素因数分解することができることとなり、安全性評価システム1は、この危険性を検出し、暗号鍵を脆弱と評価して通知し、セキュリティを向上することが可能となった。
図5に示すように、暗号鍵生成装置10−2は、素数生成部15、安全性判定部13−2、暗号鍵生成部16、出力部14−2などを備え、RSA暗号に用いる私有鍵、公開鍵などの暗号鍵をセキュアに生成するHSM(Hardware Security Module)などの耐タンパ性の高いコンピュータである。
暗号鍵生成部16は、素数生成部15で生成され、安全性判定部13−2で安全と判定された素数p,qに基づいて、演算を行い、RSA暗号の私有鍵d、公開鍵eを生成する。
出力部14−2は、暗号鍵生成部16によって生成された暗号鍵を外部へ出力する。
具体的には、図6に示すように、安全性判定部13−2は、nビットの各素数p,qの上位(n/2−50)ビット(図6の下線部分)に差異があるか否かを判定し、あった場合には、安全と判定する。例えば、安全性判定部13−2は、pとqの差(|p−q|)を算出し、この値が2^(n/2+50)以上である場合には、安全と判定する。なお、このビット数を示す「50」の値は任意であって、大きな値とすればするほど、安全性は高くなるが、大きすぎれば、他の素因数分解方法によって容易に素因数分解される可能性もあるため、計算量的に安全と言える最低限の値を設定することが望ましい。本実施例において設定されている値「50」であれば、実施例1におけるkの値が2の100乗程度となり、現在のコンピュータの処理能力では、計算量的に安全と考えられる。
S310において、素数生成部15は、素数p,qを生成する。安全性判定部13−2は、このp,qの差gを算出し(S320)、差gが2^(n/2+50)以上であるか否かを判定する(S330)。否と判定した場合には、この素数p,qを廃棄し、素数生成部15は、新たに素数p,qを生成し、S330において肯と判定するまで同様の処理を繰り返す(S310,S320,S330)。S330において肯と判定した場合には、暗号鍵生成部16は、この素数p,qを元に私有鍵、公開鍵などの暗号鍵を生成する。暗号鍵生成装置10−2は、生成した暗号鍵を外部へ出力し(S350)、ICカードなどの暗号鍵保持媒体に格納し、処理を終了する(S360)。
従って、この安全性判定部13−2を、ICカードなど、処理に制限のかかる情報処理装置においても設けることができるとともに、実現にかかる負担が少なく、汎用性、実現性の向上を図ることが可能となった。
図8に示すように、安全性評価装置10−3は、CPU、メモリ、入出力装置などを備えるコンピュータであって、入力部11−3、素因数分解部12−3、安全性判定部13−3、ディスプレイ14などを備えている。安全性評価装置10−3は、素因数分解の困難性に暗号の安全性が依存する暗号方式において、入力する公開鍵Nに基づいて暗号の安全性を評価する。
入力部11−3は、整数N(=p*q)を外部から入力する。入力部11−3は、ICカードから整数Nを入力するR/Wであっても、整数Nを手入力するキーボードであってもよく、整数Nの値を入力できれば入力方法は限定されない。
素因数分解部12−3は、リーマン法を利用した所定のアルゴリズムに基づいて演算を行い、入力部11−3から入力された整数Nを素因数分解する。
安全性判定部13−3は、因数分解部12−3の処理結果に基づいて、公開鍵Nを用いた暗号の安全性について判定を行う。
なお、フェルマー法は、合成数(素因数分解の対象となる整数)をNとした場合に、N=p*q=(S+a)*(S−a)=S2−a2から、「S」(初期値は、√Nの整数部分に1を加えた数(S=ceiling(√N))の値を漸次増加させて、「a」が整数となる値を求め、因数分解する方法である。
p=gcd((r*p),(p*q))=gcd(S+a,N)
q=gcd((s*q),(p*q))=gcd(S−a,N)
に基づいて、素因数p,qを求め、因数分解する方法である。なお、「gcd(A,B)」は、A及びBの最大公約数を求める関数である。
図9に示すように、リーマン法においては、Kの値を最小値(MinLim)とし、Sの値をceiling(√X)からceiling(√X)+( 6√N/(4*√K))程度まで変化させ(A10)、「a」が整数となる値を検索し、発見できなければ、Kの値をMinLimから「1」増加させ(A20)、同様に、Sの値を変化させて「a」が整数となる値を検索し(A10)、Kの値が設定値MaxLimとなるまで同様の処理を繰り返す(A20)。
素因数分解の試行範囲(図9のA30)が広くなれば、大半の「N」を素因数分解することが可能となるが、計算量が多くなって処理時間が長くなる。
図10に示すように、入力部11−3は、p,qという二つの素数の積である整数N、設定値depth、MinLim及びMaxLimなどを入力し(S410)、素因数分解部12−3は、入力した整数Nについて素因数分解を行う。
K(=r*s)の初期値をMaxLimとし(S420)、X=K*N、dの初期値を0(ゼロ)とし、S=ceiling(√X)とする(S430)。
素因数分解部12−3は、a=√(S*S−X)を演算し(S440)、aの値が整数であるか否かを判定する(S450)。
整数である場合には、X=S2−a2=(S+a)*(S−a)=K*N=(r*p)*(s*q)より、素因数分解部12−3は、
p=gcd((r*p),(p*q))=gcd(S+a,N)
q=gcd((s*q),(p*q))=gcd(S−a,N)
に基づいて、素因数p,qを求める(S520)。
ここで、図10に示す処理を具体的に説明する。
入力部11−3から以下のデータを入力する(S410,S420)。
N=2995327
K=MaxLim=36
depth=1
素因数分解部12−3は、「X」、「S」及び「a」の値を算出する(S430,S440)。
X=k*N=36*2995327=107831772
d=0
S=cieling(√107831772)=10385
a=√(S*S−X)=128.26・・・
素因数分解部12−3は、「a」の値を算出する(S440)。
a=192.93・・・
aは、整数でなく、d=1=depth、K<MinLimitであるため、K=35としてS430に戻る(S450,S460,S480,S490)
素因数分解部12−3は、「X」、「S」及び「a」の値を算出する(S430,S440)。
X=35*2995327=104836445
なお、Kを変数とする代わりに、ループごと(S480,S490,S430)に今までのXの値からNを減算し、新たなXの値としてもよい。
S=cieling(√104836445=10239
a=26
aは、整数であり、素因数分解部12−3は、N(=p*q)を以下の様に素因数分解する。
p=gcd(10239+26,2995327=2053
q=gcd(10239−26,2995327)=1459
また、安全性判定部13−3は、設定値(MaxLim,MinLim,depth)の範囲内で素因数分解が成功したため、公開鍵がN=2995327に対応する秘密鍵が脆弱と判定する(S530)。
従って、不正者が意図的に、素因数分解可能なKの値が大きい整数Nを公開鍵とする暗号鍵を生成し、認証用の暗号鍵として仕込むなどした場合には、従来のリーマン法では、その脆弱性を発見することが困難であったが、本実施例によれば、この脆弱性を発見することが可能となった。
図12に示すように、安全性評価装置10−4は、入力部11−3、素因数分解部12−4、安全性判定部13−4、ディスプレイ14など、実施例3における安全性評価装置10−3と略同様の構成を備え、暗号の安全性が素因数分解の困難性に依存する暗号方式における暗号鍵の安全性を評価するコンピュータシステムである。
素因数分解部12−4及び安全性判定部13−4は、CPUがメモリに記憶されているプログラムを実行することによって実現され、実施例3における素因数分解部12−3及び安全性判定部13−3と略同様の機能を備えている。
素因数分解部12−4は、入力部11−3から入力される公開鍵Nについて、他のm個の公開鍵Ni (=pi *qi :i番目の公開鍵。1≦i≦m)にを利用して素因数分解を行う。
また、安全性判定部13−4は、因数分解部12−4の処理結果に基づいて、公開鍵Nに対応する秘密鍵の安全性について判定を行う。
図13に示すように、入力部11−3は、安全性を判定する対象となる公開鍵N、以前に生成した他のm個の公開鍵Ni (1≦i≦m)、設定値などを入力する(S610)。
素因数分解部12−4は、iの初期値を1、X=N*Ni 、dの初期値を0(ゼロ)とし、S=ceiling(√X)とする(S620,S630)。
素因数分解部12−4は、a=√(S*S−X)を演算し(S640)、aの値が整数である場合には、X=S2−a2=(S+a)*(S−a)=Ni *N=(qi *p)*(pi *q)より、素因数分解部12−3は、
p=gcd((qi *p),(p*q))=gcd(S+a,N)
q=gcd((pi *q),(p*q))=gcd(S−a,N)
に基づいて、素因数p,qを求める(S720)。
また、素因数分解部12−3は、
pi =gcd((q*pi ),(pi *qi ))=gcd(S−a,Ni )
qi =gcd((p*qi ),(pi *qi ))=gcd(S+a,Ni )
に基づいて、素因数pi ,qi を求める(S720)。
以下、r=ri 及びs=si の場合に、素因数分解が成功することを証明する。
実施例1における素因数分解の方法を用いて、整数X(=K*N)を容易にrp,sqに因数分解するための条件は、rp及びsqの差が2^(n/2)以下(nは、「X」のビット数)のときとなる。
つまり、rp−sq≦2^(n/2)が成り立つことが、条件となる。
従って、図13における因数分解が成功するためには、以下の式が成り立つことが条件となる。
よって、
G(n)は、nより小さい隣り合わせである二つの素数の一番大きい差であり、
G(n)≒[In(n)]2
が成り立つ。
最初に、素数pを生成します。これは任意に選択可能である。
Δが最小限になる(N=p*qの因数分解が簡単になる)qを生成するには、round(r*p/s)に最も近い素数qを探せばよい。
そこで、qをround(r*p/s)より小さい最も近い素数と定義した場合に、Δが最も小さくなるのは、q=round(r*p/s)のときである。一方、Δが最も大きくなる場合は、q≒round(r*p/s)−G(round(r*p/s)である。
上記事実を検討してΔの最大値を計算すると、
ここで、図13に示す処理を具体的に説明する。
入力部11−3から以下のデータを入力する(S610,S620)。
N=5093369,N1 =29283131・・・・,Nm
素因数分解部12−3は、「X」、「S」及び「a」の値を算出する(S630,S640)。
X=N*N1 =5093369*29283131=149149791658339
d=0
S=cieling(√X)=12212690
a=√(S*S−X)=2319
p=gcd(12212690+2319,5093369)=3491
q=gcd(12212690−2319,5093369)=1459
p1 =gcd(12212690−2319,29283131)=8369
q1 =gcd(12212690+2319,29283131)=3499
また、安全性判定部13−4は、設定値の範囲内で素因数分解が成功し、公開鍵Nのr,sが、以前に生成した公開鍵N1 のものと同一であるため、公開鍵Nを用いる暗号が脆弱と判定する(S730)。
よって、不正者が意図的に、素因数分解可能なr,sの値が同一の整数N,N1 を公開鍵とする暗号鍵を生成し、認証用の暗号鍵として仕込むなどした場合には、従来の方法では、その脆弱性を発見することが困難であったが、本実施例によれば、この脆弱性を容易に発見することが可能となった。
図14に示すように、安全性評価装置10−5は、入力部11−3、安全性判定部13−4、ディスプレイ14など、実施例3における安全性評価装置10−3と略同様の構成を備え、暗号の安全性が素因数分解の困難性に依存する暗号方式における暗号鍵の安全性を、入力する公開鍵Nに基づいて暗号の安全性を評価するコンピュータシステムである。
正数a及びbについてa*x+b*y=gcd(a,b)となる整数x及びyが存在する。また、a及びbが互いに素である場合には、gcd(a,b)=1であり、a*x+b*y=1を満たすx及びyが存在する根拠となる。拡張ユークリッドの互除法は、gcd(a,b)(a及びb(a>b)の最大公約数)を求めるとともに、x,yを決定する方法であり、以下のような手順で計算が行われる。
a*xn-2 +b*yn-2 =zn-2
a*xn-1 +b*yn-1 =zn-1
初期値を(x1 ,y1 ,z1 )=(1,0,a)、(x2 ,y2 ,z2 )=(0,1,b)とし、以下の式をzn-1 が0になるまで繰り返す。そのときの(xn-2 ,yn-2 ,zn-2 )が求めたい(x,y,gcd(a,b))となる。
(xn ,yn ,zn )=(xn-2 ,yn-2 ,zn-2 )−floor(zn-2 /zn-1 )*(xn-1 ,yn-1 ,zn-1 )
なお、関数floor(A)は、Aの小数点以下の数値を切り捨て、Aを整数の値とする関数である。
図15に示すように、S810において、入力部11−3は、暗号鍵の素数p,q、safetyFactorの値などを入力し、安全性評価装置10−5は、処理を開始する。安全性判定部13−5は、入力した2つの素数のうち、大きい方をpとする(S830)。
各変数の初期値を、a=1,b=0、u=0,v=1、g=p,w=qとし(S840)、安全性判定部13−5は、wがthresholdよりも大きい値であるかを判定し、大きい場合には、拡張ユークリッドの互除法の繰り返し部分を計算する(S850,S860,S870)。
また、安全性判定部13−5は、このquotientの値と、
u=a−quotient*u、
v=b−quotient*v、
w=g−quotient*w
とに基づいて、u,v,wの値を算出する。更に、安全性判定部13−5は、a=u、b=v、g=wとする(S870)。なお、S870において「=」の右側にある値は、全てS870の演算前の値を用いる。S870の演算後、安全性判定部13−5は、S850から同様の処理を繰り返す。
一方、S850において、wがthreshold以下の値である場合には、安全性判定部13−5は、a,bの値、つまり、r,sの値と、閾値とを比較する(S880)。
安全性判定部13−5は、a*bの絶対値、つまり、Kの値が閾値(k*threshold)よりも大きい場合には、安全と判定し、閾値よりも小さい場合には、脆弱と判定し(S890,S900)、ディスプレイ14に判定結果を表示し(S910)、処理を終了する(S920)。
ここで、図15に示す処理を具体的に説明する。
入力部11−3から以下のデータを入力する(S810)。
p=2053,q=1459、safetyFactor=2
なお、pは、qのnextprimeであって、p≒q*(7/5)である。
安全性判定部13−5は、各初期値を、a=1,b=0,g=p,u=0,v=1,w=qとし(S840)、w≦thresholdとなるまで、拡張ユークリッドの互除法の繰り返し部分を計算する(S850,S860,S870)。計算結果は、以下の表のようになる。
安全性判定部13−5は、K=|a*b|=|−2*3|=6に基づいて、暗号は脆弱であると判定する(S880,S900)。つまり、Kの値が小さいため、実施例1、リーマン法などの方法を用いて、Nを容易に素因数分解することができると判定する(図9参照。)。
以上説明した実施例に限定されることなく、種々の変形や変更が可能であって、それらも本発明の均等の範囲内である。例えば、実施例1において、素因数分解部12は、図16に示すような方法で素因数分解を行ってもよい。
図16に示すように、sをNの平方根に近い整数とし(#110)、p=s+b+a、q=s+b−aとすると、
N=s2 +2*s*b+(b2 −a2 )となる(#120)。
Nをsで割ったときの剰余をrとすると、
r=Nmods=(b2 −a2 )mods
=(b2 −a2 )+k*sとなる(#130)。
また、c=b2 −a2 =r−k*s(kは、整数。)とすると、
#120の式は、b=(N−s2 −(r−k*s))/(2*s)となる(#150)。
(b2 −a2 )<0であるため、|b2 −a2 |<sと仮定した場合には、k=1、c=r−sとなり(#140)、#150からbを求めることができ、a=√(b2 −c)、p=s+b+a、q=s+b−aから、a、p,qを算出することが可能となる(#180,#200)。つまり、0<(b2 −a2 )<sが成り立つ素数p,qに基づいて生成された暗号鍵は、極めて脆弱と判定される。
一方、(b2 −a2 )≦0、(b2 −a2 )≧sの場合には、k=1とした演算の結果、a又はbが整数とならず、bが整数とならないときには、kに1を加算し(#160)、aが整数とならないときには、kに2を加算し(#170)、a及びbの値が整数となるまで(#200)、又は、kが所定の上限値(Limit)を超えるまで(#190)、同様の処理を繰り返す。
整数のa及びbを算出できた場合には、p=s+b+a、q=s+b−aから、素因数p,qが算出される(#200)。素因数分解の結果は、実施例1における素因数分解(図3参照。)と同様に、図17のようになる。図17に示すように、N=826513など、kの値が1から離れている場合には、処理回数が実施例1における素因数分解の演算回数よりも少なくなる。
図18に示すように、X=e*d−1とし(#310)、φ=X/fとする(#320)。fは、1<f<eの整数であって、本実施例における初期値は、f=e−1である。
素因数分解部12は、s=(p+q)/2=(N−φ+1)/2からsを算出し、(#330)、p=s+a、q=s−a、N=p*q=(s+a)(s−a)に基づいてaを算出する(#340)。
#330において算出したsがs^2≦Nである場合、又は、#340において算出したaが整数でない場合には、fをf−1とし(#350)、#340において算出したaが整数となるまでfを順次替えて同様の処理を繰り返す(#320から#350まで)。
安全性判定部13は、算出したaの値、つまり素因数p,qの差の大きさと、しきい値(Limit)との比較に基づいて安全性を判定する(#360,#370)。
x=11*12371−1=136080
k=6としたときに、
φ=136080/6=22680
s=154
a=√(154^2−22987)=27
p=181、q=127となる。
なお、kには、大きい候補値(eに近い候補値)から順に当て嵌めて演算を行った方が演算の繰り返しを少なくすることが可能となる。
nビットの素数p,qの相違箇所が上位n/2ビットのいずれの位置にあるか、つまり、上位n/2ビットにおける差の大きさに基づいて、安全性を評価することができれば、その方法は限定されない。
また、実施例2において、安全性判定部13−2が脆弱と判定した場合に、素数生成部15は、新たに素数p,qを生成するが、脆弱と判定した素数p,qを元に新たな素数を生成してもよい。
10,10−3,10−4,10−5 安全性評価装置
11 リーダライタ
11−3 入力部
12,12−3,12−4 素因数分解部
13,13−2,13−3,13−4,13−5 安全性判定部
14 ディスプレイ
14−2 出力部
15 素数生成部
16 暗号鍵生成部
20 ICカード
Claims (22)
- 整数Nに対してN=p*qとなる素因数p,qを求める素因数分解方法において、
sをNの平方根に近い整数、pをp=s+a、qをq=s−bとし、
Nmods=(−a*b)mods
に基づいて素因数p,qを算出すること、
を特徴とする素因数分解方法。 - 請求項1に記載の素因数分解方法において、
a=c+d、b=d−cとし、
Nmods=(c2 −d2 )mods
に基づいて素因数p,qを算出すること、
を特徴とする素因数分解方法。 - 請求項1又は請求項2に記載の素因数分解方法において、
ab=ks−(Nmods)、0<ab<ks、k=1として、素因数p,qを算出するための演算を行う第1の演算ステップと、
前記第1の演算ステップにおいて、演算結果が適正であるか否かを判定する適正判定ステップと、
前記適正判定ステップにおいて否と判定された場合に、kを逐次変更させながら前記第1の演算ステップ及び適正判定ステップを繰り返すこと、
を特徴とする素因数分解方法。 - N=p*q、
X=K*N=rp*sq=S2−a2、
S=ceiling(√X)とした場合に、S及びKの値を変化させ、aが整数となるS,Xの値を算出する第2の演算ステップと、
前記第2の演算ステップにおいて算出したS及びXの値に基づいて、整数Nから素因数p,qを求める第3の演算ステップとを備える素因数分解方法であって、
前記第2の演算ステップは、Kの値を大きな値から小さな値へ変化させ、aが整数となるS,Xの値を算出すること、
を特徴とする素因数分解方法。 - 請求項4に記載の素因数分解方法において、
前記第2の演算ステップにおいて、Sの値の範囲を、( 6√N/(4*√K))に比べて狭く設定すること、
を特徴とする素因数分解方法。 - 請求項4に記載の素因数分解方法において、
前記第2の演算ステップは、素因数pi 及びqi の積である他の整数Ni をKに代入し、S,Xの値を算出すること、
を特徴とする素因数分解方法。 - 素数p,qの積である整数Nを取得する素因数分解対象取得手段と、
請求項1から請求項6までのいずれか1項に記載の素因数分解方法に基づいて、前記素因数分解対象取得手段によって取得された整数Nを、素因数p,qに素因数分解する素因数分解手段と、
を備える素因数分解装置。 - 素因数分解を行うためにコンピュータに実行させる素因数分解プログラムであって、
素数p,qの積である整数Nを取得する素因数分解対象取得手順と、
請求項1から請求項6までのいずれか1項に記載の素因数分解方法に基づいて、前記素因数分解対象取得手順において取得した整数Nを、素因数p,qに素因数分解する素因数分解手順とを備えること、
を特徴とする素因数分解プログラム。 - 公開鍵暗号の暗号鍵の安全性を評価する安全性評価装置であって、
整数Nに対してN=p*qとなる、nビットの公開鍵暗号の素因数p,qの差異を取得する素因数差異取得手段と、
前記素因数差異取得手段によって取得された素因数p,qの上位n/2ビットにおける差異に基づいて、安全性を評価する安全性評価手段とを備えること、
を特徴とする安全性評価装置。 - 請求項9に記載の安全性評価装置において、
前記安全性評価手段は、素因数p,qについて、それぞれの最上位ビットから下位へ向けて情報単位ごとに順に比較し、相違箇所があった場合に、その位置に応じて安全性を評価すること、
を特徴とする安全性評価装置。 - 請求項9又は請求項10に記載の安全性評価装置において、
前記安全性評価手段は、前記素因数p,qについて、上位n/2ビットにおいて差がない場合に、公開鍵暗号の暗号鍵を脆弱と判定すること、
を特徴とする安全性評価装置。 - 請求項9から請求項11までのいずれか1項に記載の安全性評価装置において、
前記素因数差異取得手段は、
整数N、秘密鍵d、公開鍵eを取得する取得手段と、
p=s+a、q=s−a、fを0<f<eを満たす整数として、
φ=(e*d−1)/f、s=(p+q)/2=(N−φ+1)/2、
に基づいて素因数p,qの差異を算出する演算手段とを有すること、
を特徴とする安全性評価装置。 - 公開鍵暗号の暗号鍵の安全性を評価する安全性評価装置であって、
整数Nに対してN=p*qとなる公開鍵暗号の素因数p,qを取得する素因数取得手段と、
sをNの平方根に近い整数、前記素因数取得手段によって取得された素因数pをp=s+a、素因数qをq=s−b、kをしきい値とした場合に、0<ab<ksを満たすか否かに基づいて公開鍵暗号の暗号鍵の安全性を評価する安全性評価手段とを備えること、
を特徴とする安全性評価装置。 - 公開鍵暗号の暗号鍵の安全性を評価する安全性評価装置であって、
整数Nに対してN=p*qとなる公開鍵暗号の素因数p,qを取得する素因数取得手段と、
素因数取得手段によって取得された素因数p,qに基づいて、
X=r*s*N、
p*rn −q*sn =zn
(rn ,sn ,zn )=(rn-2 ,sn-2 ,zn-2 )−floor(zn-2 /zn-1 )*(rn-1 ,sn-1 ,zn-1 )
とし、
拡張ユークリッドアルゴリズムの互除法を用いて、zn が所定の閾値に達した場合のrn-1 ,sn-1 に基づいて、r,sを算出する演算手段と、
前記演算手段の演算結果に基づいて、公開鍵暗号の安全性を評価する安全性評価手段とを備えること、
を特徴とする安全性評価装置。 - 公開鍵暗号の暗号鍵の安全性を評価する安全性評価装置であって、
公開鍵暗号の素因数p,qの積である整数Nを取得する素因数分解対象取得手段と、
請求項1から請求項6までのいずれか1項に記載の素因数分解方法に基づいて、前記素因数分解対象取得手段によって取得された整数Nを素因数分解する素因数分解手段と、
前記素因数分解手段による素因数分解の容易さに応じて、公開鍵暗号の暗号鍵の安全性を評価する安全性評価手段とを備えること、
を特徴とする安全性評価装置。 - 公開鍵暗号の暗号鍵の安全性を評価するためにコンピュータに実行させる安全性評価プログラムであって、
整数Nに対してN=p*qとなる、nビットの公開鍵暗号の素因数p,qの差異を取得する素因数差異取得手順と、
前記素因数差異取得手順において取得した素因数p,qの上位n/2ビットにおける差異に基づいて、安全性を評価する安全性評価手順とを備えること、
を特徴とする安全性評価プログラム。 - 請求項16に記載の安全性評価プログラムにおいて、
前記安全性評価手段は、素因数p,qについて、それぞれの最上位ビットから下位へ向けて情報単位ごとに順に比較し、相違箇所があった場合に、その位置に応じて安全性を評価すること、
を特徴とする安全性評価プログラム。 - 請求項16又は請求項17に記載の安全性評価プログラムにおいて、
前記安全性評価手順は、前記素因数p,qについて、上位n/2ビットにおいて差がない場合に、公開鍵暗号の暗号鍵を脆弱と判定すること、
を特徴とする安全性評価プログラム。 - 請求項16から請求項18までのいずれか1項に記載の安全性評価プログラムにおいて、
前記素因数差異取得ステップは、
整数N、秘密鍵d、公開鍵eを取得する取得ステップと、
p=s+a、q=s−a、fを0<f<eを満たす整数として、
φ=(e*d−1)/f、s=(p+q)/2=(N−φ+1)/2、
に基づいて素因数p,qの差異を算出する演算ステップとを有すること、
を特徴とする安全性評価プログラム。 - 公開鍵暗号の暗号鍵の安全性を評価するためにコンピュータに実行させる安全性評価プログラムであって、
整数Nに対してN=p*qとなる公開鍵暗号の素因数p,qを取得する素因数取得手順と、
sをNの平方根に近い整数、前記素因数取得手段によって取得された素因数pをp=s+a、qをq=s−b、kをしきい値とした場合に、0<ab<ksを満たすか否かに基づいて公開鍵暗号の暗号鍵の安全性を評価する安全性評価手順とを備えること、
を特徴とする安全性評価プログラム。 - 公開鍵暗号の暗号鍵の安全性を評価するためにコンピュータに実行させる安全性評価プログラムであって、
整数Nに対してN=p*qとなる公開鍵暗号の素因数p,qを取得する素因数取得手順と、
素因数取得手順において取得した素因数p,qに基づいて、X=r*s*N、p*rn −q*sn =zn とし、拡張ユークリッドアルゴリズムの互除法を用いて、zn が所定の閾値に達した場合のrn-1 ,sn-1 に基づいて、r,sを算出する演算手順と、
前記演算手順における演算結果に基づいて、公開鍵暗号の安全性を評価する安全性評価手順とを備えること、
を特徴とする安全性評価プログラム。 - 公開鍵暗号の暗号鍵の安全性を評価する安全性評価プログラムであって、
公開鍵暗号の素因数p,qの積である整数Nを取得する素因数分解対象取得手順と、
請求項1から請求項6までのいずれか1項に記載の素因数分解方法に基づいて、前記素因数分解対象取得手順において取得した整数Nを素因数分解する素因数分解手順と、
前記素因数分解手順における素因数分解の容易さに応じて、公開鍵暗号の暗号鍵の安全性を評価する安全性評価手順とを備えること、
を特徴とする安全性評価プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005216856A JP4872261B2 (ja) | 2004-08-03 | 2005-07-27 | 安全性評価装置及び安全性評価プログラム |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004226596 | 2004-08-03 | ||
JP2004226596 | 2004-08-03 | ||
JP2005216856A JP4872261B2 (ja) | 2004-08-03 | 2005-07-27 | 安全性評価装置及び安全性評価プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2006072336A true JP2006072336A (ja) | 2006-03-16 |
JP4872261B2 JP4872261B2 (ja) | 2012-02-08 |
Family
ID=36152968
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2005216856A Active JP4872261B2 (ja) | 2004-08-03 | 2005-07-27 | 安全性評価装置及び安全性評価プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4872261B2 (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2905776A1 (fr) * | 2006-09-11 | 2008-03-14 | Bigilimwatshi Guy Boyo | Dispositif electroniques et/ou informatique de factorisation des nombres entiers. |
JP2018195274A (ja) * | 2017-05-15 | 2018-12-06 | 正仁 櫨田 | Cpuのアーキテクチャを上手く使った、自然数を素因数分解する方法 |
KR20200101782A (ko) * | 2019-02-20 | 2020-08-28 | 고려대학교 산학협력단 | 스레드 정보를 이용한 소수 복구 방법, 이를 수행하기 위한 장치 및 기록매체 |
WO2024154264A1 (ja) * | 2023-01-18 | 2024-07-25 | 富士通株式会社 | 暗号鍵評価プログラム、暗号鍵評価方法および情報処理装置 |
-
2005
- 2005-07-27 JP JP2005216856A patent/JP4872261B2/ja active Active
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2905776A1 (fr) * | 2006-09-11 | 2008-03-14 | Bigilimwatshi Guy Boyo | Dispositif electroniques et/ou informatique de factorisation des nombres entiers. |
JP2018195274A (ja) * | 2017-05-15 | 2018-12-06 | 正仁 櫨田 | Cpuのアーキテクチャを上手く使った、自然数を素因数分解する方法 |
KR20200101782A (ko) * | 2019-02-20 | 2020-08-28 | 고려대학교 산학협력단 | 스레드 정보를 이용한 소수 복구 방법, 이를 수행하기 위한 장치 및 기록매체 |
KR102199507B1 (ko) * | 2019-02-20 | 2021-01-06 | 고려대학교 산학협력단 | 스레드 정보를 이용한 소수 복구 방법, 이를 수행하기 위한 장치 및 기록매체 |
WO2024154264A1 (ja) * | 2023-01-18 | 2024-07-25 | 富士通株式会社 | 暗号鍵評価プログラム、暗号鍵評価方法および情報処理装置 |
Also Published As
Publication number | Publication date |
---|---|
JP4872261B2 (ja) | 2012-02-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4284320B2 (ja) | 楕円曲線暗号装置,楕円曲線暗号方法および楕円曲線暗号プログラム | |
JP4789468B2 (ja) | 秘密鍵を用いた耐タンパ楕円曲線暗号処理 | |
JP4668931B2 (ja) | 電力解析攻撃に対する耐タンパ性を持った暗号化処理装置 | |
JP5001176B2 (ja) | 署名生成装置、署名生成方法及び署名生成プログラム | |
Ambedkar et al. | A new factorization method to factorize rsa public key encryption | |
JP2003208097A (ja) | サイドチャネルアタック耐性を有する暗号演算装置及び方法 | |
JP4568886B2 (ja) | Rsaタイプの暗号アルゴリズムを安全に実施するための方法、および対応する構成要素 | |
JP2009175197A (ja) | 暗号装置、復号装置、鍵生成装置及びプログラム | |
JP4872261B2 (ja) | 安全性評価装置及び安全性評価プログラム | |
JP2003098962A (ja) | 楕円曲線スカラー倍計算方法及び装置並びに記録媒体 | |
KR20050106416A (ko) | 암호화 시스템 내의 모듈러 멱승 결과 결정 장치 및 방법 | |
JP5553773B2 (ja) | 楕円曲線上の点のスカラー倍を計算する装置及び方法 | |
US20090238360A1 (en) | Exponentiation ladder for cryptography | |
US9419789B2 (en) | Method and apparatus for scalar multiplication secure against differential power attacks | |
JP2007187908A (ja) | サイドチャネル攻撃に耐性を有するモジュラーべき乗算計算装置及びモジュラーべき乗算計算方法 | |
US6609141B1 (en) | Method of performing modular inversion | |
JP2004163687A (ja) | 楕円曲線暗号装置、楕円曲線暗号プログラム | |
CN111368317A (zh) | 一种计算机数据加密系统及方法 | |
JP2008525835A (ja) | 暗号計算を実行するための方法及び装置 | |
JP2003216026A (ja) | 楕円曲線暗号処理方法および楕円曲線暗号処理装置、並びにコンピュータ・プログラム | |
JP4502817B2 (ja) | 楕円曲線スカラー倍計算方法および装置 | |
JP4692022B2 (ja) | 楕円曲線暗号におけるスカラー倍計算装置、及び、そのプログラム | |
JP5010508B2 (ja) | 楕円曲線暗号演算装置、方法及びプログラム並びに楕円曲線暗号演算システム及び方法 | |
Dhamodharan et al. | An Optimized And Secure Elliptic Curve Cryptography For The Internet Of Things | |
KR101833360B1 (ko) | Rsa 암호시스템의 지수승 연산에 이용되는 사전 연산 테이블 생성 방법 및 그 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20061120 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20080609 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110419 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110617 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110802 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20111003 |
|
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: 20111025 |
|
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: 20111107 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20141202 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4872261 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |