JP4872261B2 - 安全性評価装置及び安全性評価プログラム - Google Patents

安全性評価装置及び安全性評価プログラム Download PDF

Info

Publication number
JP4872261B2
JP4872261B2 JP2005216856A JP2005216856A JP4872261B2 JP 4872261 B2 JP4872261 B2 JP 4872261B2 JP 2005216856 A JP2005216856 A JP 2005216856A JP 2005216856 A JP2005216856 A JP 2005216856A JP 4872261 B2 JP4872261 B2 JP 4872261B2
Authority
JP
Japan
Prior art keywords
prime
value
security
safety evaluation
safety
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.)
Active
Application number
JP2005216856A
Other languages
English (en)
Other versions
JP2006072336A (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.)
Dai Nippon Printing Co Ltd
Original Assignee
Dai Nippon Printing Co 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 Dai Nippon Printing Co Ltd filed Critical Dai Nippon Printing Co Ltd
Priority to JP2005216856A priority Critical patent/JP4872261B2/ja
Publication of JP2006072336A publication Critical patent/JP2006072336A/ja
Application granted granted Critical
Publication of JP4872261B2 publication Critical patent/JP4872261B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、暗号の安全性が素因数分解の困難性に依存する公開鍵暗号の暗号鍵の安全性を評価する安全性評価装置及び安全性評価プログラムに関するものである。
暗号の安全性が素因数分解の困難性に依存する暗号方式に、RSA暗号、Rabin暗号などがある。RSA暗号においては、p,qという二つの素数の積である「N」を公開し、私有鍵(秘密鍵)は、このp,qから簡単に計算することが可能である。従って、このNを素因数分解できる場合には、私有鍵が判明し、暗号が解読されてしまうため、十分に大きな素数p,qを選定し、その積Nを十分大きな値とすることによって、計算量的に私有鍵を解読することが不可能となり、十分な安全性を確保することができる。つまり、暗号の安全性は、素数p,qの性質に依存している。
従来から、素因数分解の方法として、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〉 特開平11−52853号
しかし、これら種々の条件に従って素数p,qを選択した場合であっても、新たな素因数分解の方法が解明された場合には、この方法によって容易に私有鍵が判明し、暗号が解読されてしまう可能性があった。
また、公開鍵暗号を利用したデジタル署名の規格であるANSIの「ANSIX9.31−1998」のセクションC.8においても、鍵の安全性の検証は今後の研究開発課題である旨が記述されている。
本発明の課題は、素因数分解方法に対する暗号の安全性を評価し、セキュリティを向上することが可能な安全性評価装置及び安全性評価プログラムを提供することである。
本発明は、以下のような解決手段により、前記課題を解決する。すなわち、請求項1の発明は、公開鍵暗号の暗号鍵の安全性を評価する安全性評価装置であって、整数Nに対してN=p*qとなる公開鍵暗号の素因数p,qを取得する素因数取得手段と、(r,s,z)=(rn−2,sn−2,zn−2)−floor(zn−2/zn−1)*(rn−1,sn−1,zn−1拡張ユークリッドアルゴリズムの互除法に基づいて、p*r −q*s =z が、|r*p−s*q|<√p,√q≒ 4 √Nとなるまで、前記素因数取得手段によって取得された素因数p,qを用いて繰り返し処理を行って、r,sを算出する演算手段と、前記演算手段により前記算出されたr,sの値が閾値よりも小さい場合には、公開鍵暗号の暗号鍵の安全性が低いと評価する安全性評価手段とを備えること、を特徴とする安全性評価装置である。
請求項2の発明は、公開鍵暗号の暗号鍵の安全性を評価するためにコンピュータに実行させる安全性評価プログラムであって、コンピュータを、整数Nに対してN=p*qとなる公開鍵暗号の素因数p,qを取得する素因数取得手段と、(r ,s ,z )=(r n−2 ,s n−2 ,z n−2 )−floor(z n−2 /z n−1 )*(r n−1 ,s n−1 ,z n−1 )の拡張ユークリッドアルゴリズムの互除法に基づいて、p*r −q*s =z が、|r*p−s*q|<√p,√q≒ 4 √Nとなるまで、前記素因数取得手段によって取得された素因数p,qを用いて繰り返し処理を行って、r,sを算出する演算手段と、前記演算手段により前記算出されたr,sの値が閾値よりも小さい場合には、公開鍵暗号の暗号鍵の安全性が低いと評価する安全性評価手段として機能させること、を特徴とする安全性評価プログラムである。
本発明による安全性評価装置及び安全性評価プログラムによれば、以下の効果を得ることが可能となる。
(1)拡張ユークリッドアルゴリズムの互除法を用いてr,sを算出し、その演算結果に基づいて、公開鍵暗号の安全性を評価することによって、不正者が素因数分解可能なr,sに偏りのある公開鍵Nを生成した場合などの不正を容易に発見できるなど、セキュリティを向上することが可能となる。
たな素因数分解方法に対する暗号の安全性を評価し、セキュリティを向上するという目的を、N=p*q=(s+a)(s−b)、sをNの平方根に近い整数とし、Nmods=(−a*b)mods、ab=ks−(Nmods)、0<ab<s、k=1としてNの素因数分解を行う演算手段と、演算結果が適正であるか否かを判定する適正判定手段とを備え、演算手段は、適正判定手段が否と判定した場合に、肯と判定するまでkを増加させながら素因数分解を繰り返し、kがしきい値を超えても適正な演算結果が出ない場合に、Nを用いた公開鍵暗号が安全と判定すること、によって実現する。
以下、図面などを参照して、本発明の実施例をあげて、さらに詳しく説明する。
図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)のアルゴリズムによって行われる。
ICカード20は、CPU、メモリ、外部との通信を行うインターフェイスなどを備え、私有鍵を読み出し不可能なセキュアな状態で記憶し、また、私有鍵d、整数Nなどを記憶している。なお、暗号鍵評価システム1による安全性評価の対象となる私有鍵dを記憶している媒体は、ICタグ、PCなどであってもよく、ICカード20に限定されない。
安全性評価装置10は、CPU、メモリ、入出力装置などを備えるコンピュータであって、リーダライタ11、素因数分解部12、安全性判定部13、ディスプレイ14などを備え、例えば、ATMなどの情報処理装置に、素因数分解部12、安全性判定部13を設けることによって実現することが可能である。安全性評価装置10は、ICカード20に格納されている私有鍵の安全性を評価する。
リーダライタ11は、ICカード20との通信を実現する通信装置であって、ICカード20に記憶されている整数Nを安全性評価装置10に入力する。
ディスプレイ14は、私有鍵dが安全か否かの安全性判定部13による安全性の評価結果を表示し、利用者に通知する。
素因数分解部12は、リーダライタ11から入力される整数Nを素因数分解して、素因数p,qを算出する。ここで、Nの素因数分解の方法を説明する。
図2は、本発明による素因数分解プログラム及び素因数分解方法を示すフローチャートである。
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)に基づいて生成された暗号鍵は、極めて脆弱と判定される。
なお、ab≦0、ab≧sの場合には、k=1とした演算の結果、a又はbが整数とならず、このときには、kに1を加算し、a及びbの値が整数となるまで(#60)、又は、kが所定の上限値(Limit)を超えるまで、同様の処理を繰り返す。整数のa及びbを算出できた場合には、p=s+a、q=s−c/aから、素因数p,qが算出される(#70)。
安全性判定部13は、素因数分解部12の演算結果、つまり、kの上限値内で整数のa及びbが算出できるか否かに基づいて、ICカード20に格納されている私有鍵が安全であるか否かを判定する(#70,#80)。
なお、上限値を無限大とした場合には、全ての素因数分解を行うことが可能となる。また、設定した上限値が高いほど、素因数分解の算出に時間がかかり、暗号鍵の安全性の基準が高くなる一方で、安全性の評価に時間がかかる。従って、安全性の評価に許される計算時間の限度で最大の値を上限値とするなど、計算時間に応じて上限値を設定することが望ましい。また、暗号鍵に対して要求する安全性についても同様である。つまり、素数p,qのビット数に応じるなど、求める計算量的な安全性に応じて上限値を設定することが望ましい。例えば、Limit≒2^50とした場合には、要求する安全性は高くなるが、計算量が多大となり、現実的ではない。
図3は、図2に示す素因数分解方法による素因数分解の演算結果を示す表である。なお、通常、公開鍵暗号の素数p,qのビット数は、512から1024ビットが望ましいが、説明の便宜上、6ビットから12ビット程度の素数の積Nについて、素因数分解を行った(図9において同じ。)。
図3に示すようにN=1927、67591、281861の場合には、0<ab<sであって、k=1で素因数p,qが算出される。一方、N=296449、826513の場合には、s<abとなり、それぞれk=2、k=8において素因数p,qが算出される。
図4は、素因数分解装置、安全性評価装置の動作、素因数分解プログラム、素因数分解方法及び安全性評価プログラムを示すフローチャートである。
図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は、新たな素因数分解方法によって、整数Nを大きな素因数p,qに素因数分解することが可能となった。特に、0<ab<ks(k≦Limit)など、素因数p,qが一定の条件を満たす場合には、素因数p,qがどんなに大きな値であっても、Nを容易に素因数p,qへ素因数分解することが可能となった。また、公開されているNに基づいて評価を行うことによって、秘密鍵dなどの秘匿情報をその保持媒体であるICカード20から取り出すことなく、暗号鍵の安全性を評価することができ、セキュリティを向上することが可能となった。
更に、安全性評価システム1は、任意に設定可能であって、安全性判断のしきい値となる上限値(Limit)をkが超えるまでに素因数分解することができるか否かに基づいて、暗号鍵の安全性を評価するため、上限値を低く設定し、簡易に安全性の評価を行うことができる一方、高く設定し、安全性を高めることも可能となった。
更にまた、安全性評価システム1は、整数Nを用いた公開鍵暗号について、この方法による素因数分解の容易さ、つまり、安全性を評価することが可能となった。また、安全性評価システム1は、解読されやすい脆弱な私有鍵dを検出して通知するため、脆弱な私有鍵dを使用しないなど、安全対策を行い、セキュリティを向上することが可能となった。
特に、公開鍵暗号に、同一のビット長で、素数の差が、一定のしきい値T以上に設定される素数を使用するように望まれている環境において、この要請に応じて、2つの素数を同一ビット数n、素数の差がTとなるように設定した場合には、前記しきい値TがT≦2^(n/2)で、公開鍵の安全性を確保するのに不十分の場合、素因数分解部12は、容易に素因数分解することができることとなり、安全性評価システム1は、この危険性を検出し、暗号鍵を脆弱と評価して通知し、セキュリティを向上することが可能となった。
図5は、安全性評価装置の構成を示すブロック図である。なお、前述した実施例と同様な機能を果たす部分には、同一の符号又は末尾に統一した符号を付して、重複する説明や図面を適宜省略する。また、本実施例における安全性評価装置は、暗号鍵生成装置10−2である。
図5に示すように、暗号鍵生成装置10−2は、素数生成部15、安全性判定部13−2、暗号鍵生成部16、出力部14−2などを備え、RSA暗号に用いる私有鍵、公開鍵などの暗号鍵をセキュアに生成するHSM(Hardware Security Module)などの耐タンパ性の高いコンピュータである。
素数生成部15は、ビット数n(512ビット以上)の大きな素数p,qを生成する。素数生成部15は、乱数を生成、確率的素数判定法、疑似素数判定法などによって素数p,qを生成する。なお、素数p,qを取得する方法は、限定されず、素数p,qを取得できればよい。
暗号鍵生成部16は、素数生成部15で生成され、安全性判定部13−2で安全と判定された素数p,qに基づいて、演算を行い、RSA暗号の私有鍵d、公開鍵eを生成する。
出力部14−2は、暗号鍵生成部16によって生成された暗号鍵を外部へ出力する。
安全性判定部13−2は、素数生成部15で生成された素数p,qを使用した暗号について、実施例1において記載されている素因数分解方法に対して安全か否かを判定し、暗号鍵の安全性を評価する。
具体的には、図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乗程度となり、現在のコンピュータの処理能力では、計算量的に安全と考えられる。
図7は、安全性評価装置の動作及び安全性評価プログラムを示すフローチャートであって、暗号鍵の生成における安全性評価処理を示している。
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)。
このように、本実施例によれば、実施例1と同様の効果に加え、安全性判定部13−2は、素数p,qの差が2^(n/2+50)以上であるか否かに基づいて安全か否かの判定を行うため、簡易な処理で暗号鍵の安全性の評価を行うことが可能となった。
従って、この安全性判定部13−2を、ICカードなど、処理に制限のかかる情報処理装置においても設けることができるとともに、実現にかかる負担が少なく、汎用性、実現性の向上を図ることが可能となった。
図8は、素因数分解装置、安全性評価装置の構成を示すブロック図である。なお、本実施例における素因数分解装置及び安全性評価装置は、素因数分解部12−3及び安全性評価装置10−3である。
図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及び安全性判定部13−3は、CPUがメモリに記憶されているプログラムを実行することによって実現される。
素因数分解部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」が整数となる値を求め、因数分解する方法である。
リーマン法とは、フェルマー法を利用した素因数分解方法であって、K=r*s、X=K*N=(r*p)*(s*q)=(S+a)*(S−a)=S2−a2、S=ceiling(√X)とした場合に、「S」及び「K」の値を漸次変化させ、「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)。
なお、「depth」(深度)、MinLim及びMaxLimは、素因数分解の試行範囲を制限するための閾値である。「depth」は、変数「S」の変化する範囲であり、1以上に設定することが可能な設定値であり、MinLim(最小値)及びMaxLim(最大値)は、変数「K(=r*s)」の変化する範囲を制限する設定値である。また、図9において、S=ceiling(√X)を直線で示しているが、これは、便宜上であって、実際には、S=ceiling(√X)=ceiling(√(K*N))であり、Kの値の変化とともに、S=ceiling(√X)の値も変化する(図11において同じ。)。S=ceiling(√X)+( 6√N/(4*√K))についても同様である(図11において同じ。)。
素因数分解の試行範囲(図9のA30)が広くなれば、大半の「N」を素因数分解することが可能となるが、計算量が多くなって処理時間が長くなる。
図10は、素因数分解装置、安全性評価装置の動作、素因数分解プログラム、素因数分解方法及び安全性評価プログラムを示すフローチャートである。
図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=S−a=(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)。
一方、S440において算出したaの値が整数でない場合であって、d<depthのときには、素因数分解部12−3は、d及びSにそれぞれ1を加算して(S450,S460,S470)、S440からの処理を繰り返す。また、d≧depthの場合には、Kから1を減算する(S460,S480)。減算した結果、Kが下限値(MinLimit)よりも小さい場合には、素因数分解部12−3は、Nの素因数分解の結果が出ないまま処理を中止する(S490,S500)。減算した結果、Kが下限値以上である場合には、S430からの処理を繰り返す(S490)。
安全性判定部13−3は、素因数分解部12−3の処理結果に基づいて暗号鍵の安全性を評価する。つまり、Kの上限値内及びSの設定範囲内で整数のaが算出できた場合(S520)には、入力したNを公開鍵とする秘密鍵を脆弱と判定し(S530)、算出できない場合(S500)には、安全と判定する(S510)。安全性評価装置10−3は、ディスプレイ14に安全性の評価結果を表示し(S540)、処理を終了する(S550)。
(具体例)
ここで、図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・・・
aは、整数でなく、d=0<depth=1であるため、d=1,S=10386としてS440へ戻る(S450,S460,S470)。
素因数分解部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の値としてもよい。
d=0
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)。
このように本実施例によれば、素因数分解部12−3は、図11に示すように、MaxLimからMinLimの方向へKの値を変化させて素因数分解するため(A120)、整数Nを素因数分解可能なKの値が大きい場合に、リーマン法と比較して容易にKを見つけだし、Nを素因数分解することが可能となった。特に、「depth」をリーマン法と比較して小さな値(浅い深度)、また、MaxLimを大きい値に設定することによって、試行範囲を拡げずに、つまり、処理時間を長期化せずに、素因数分解可能なKの値が大きい整数Nを、容易に素因数分解することが可能となった。
従って、不正者が意図的に、素因数分解可能なKの値が大きい整数Nを公開鍵とする暗号鍵を生成し、認証用の暗号鍵として仕込むなどした場合には、従来のリーマン法では、その脆弱性を発見することが困難であったが、本実施例によれば、この脆弱性を発見することが可能となった。
図12は、素因数分解装置、安全性評価装置の構成を示すブロック図である。なお、本実施例における素因数分解装置及び安全性評価装置は、素因数分解部12−4及び安全性評価装置10−4である。
図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(=p*q:i番目の公開鍵。1≦i≦m)を利用して素因数分解を行う。
また、安全性判定部13−4は、因数分解部12−4の処理結果に基づいて、公開鍵Nに対応する秘密鍵の安全性について判定を行う。
図13は、素因数分解装置、安全性評価装置の動作、素因数分解プログラム、素因数分解方法及び安全性評価プログラムを示すフローチャートである。なお、「depth」(深度)は、実施例3と同様、変数「S」の変化する範囲を制限する変数「d」の上限値である。また、「m」は、公開鍵Nを素因数分解するために利用する他の公開鍵Nの数であり、実施例3における「K」と同様の役割を果たし、mの値が大きいほど、処理時間が長くなる。以下、実施例3の図10における処理と異なる処理について説明する。
図13に示すように、入力部11−3は、安全性を判定する対象となる公開鍵N、以前に生成した他のm個の公開鍵N(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=S−a=(S+a)*(S−a)=N*N=(q*p)*(p*q)より、素因数分解部12−3は、
p=gcd((q*p),(p*q))=gcd(S+a,N)
q=gcd((p*q),(p*q))=gcd(S−a,N)
に基づいて、素因数p,qを求める(S720)。
また、素因数分解部12−3は、
=gcd((q*p),(p*q))=gcd(S−a,N
=gcd((p*q),(p*q))=gcd(S+a,N
に基づいて、素因数p,qを求める(S720)。
S640において算出したaの値が整数でない場合であって、d≧depthのときには、iに1を加算し(S650,S660,S680)、加算した結果、iがmよりも大きい場合には、素因数分解部12−4は、Nの素因数分解の結果が出ないまま処理を中止する(S690,S700)。加算した結果、Kがm以下である場合には、S630からの処理を繰り返す(S690)。
安全性判定部13−4は、実施例3と同様に、Sの設定範囲内及びmの上限値内で整数のaが算出の可否に応じて、暗号を脆弱又は安全と判定する(S700〜S730)。何故なら、Nにおけるr、sの値と、Ni におけるr,sの値(以下、それぞれ「ri 」,「si 」という。)が同一である場合に、素因数分解が成功するからである。
以下、r=ri 及びs=si の場合に、素因数分解が成功することを証明する。
実施例1における素因数分解の方法を用いて、整数X(=K*N)を容易にrp,sqに因数分解するための条件は、rp及びsqの差が2^(n/2)以下(nは、「X」のビット数)のときとなる。
つまり、rp−sq≦2^(n/2)が成り立つことが、条件となる。
従って、図13における因数分解が成功するためには、以下の式が成り立つことが条件となる。
Figure 0004872261
式#410及び式#420の両辺を掛け合わせると、以下の式が導かれる。
Figure 0004872261
従って、Δ≒Sならば、p≒√Xより、pqi−qpi≒√X≒2^(n/2)であることが証明される。
よって、
Figure 0004872261
また、ここで、特定のr,sを与えられた場合に、rp−sq=ΔがSと同じ規模になるp,qを生成することが可能であることを説明する。
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)である。
上記事実を検討してΔの最大値を計算すると、
Figure 0004872261
結論として、下記の式が導かれる。
Figure 0004872261
1024ビットの暗号鍵を扱う場合には、上記Δ/sの値はおよそ3502程度であり、因数分解に大きな支障を与えるものではないので、脆弱な鍵が生成されることがこの方法で可能であることが示される。
(具体例)
ここで、図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
aは、整数であるため、素因数分解部12−4は、N(=p*q)、N1 (=p1 *q1 )を以下の様に素因数分解する(S650,S720)。
p=gcd(12212690+2319,5093369)=3491
q=gcd(12212690−2319,5093369)=1459
1 =gcd(12212690−2319,29283131)=8369
1 =gcd(12212690+2319,29283131)=3499
また、安全性判定部13−4は、設定値の範囲内で素因数分解が成功し、公開鍵Nのr,sが、以前に生成した公開鍵N1 のものと同一であるため、公開鍵Nを用いる暗号が脆弱と判定する(S730)。
このように本実施例によれば、素因数分解部12−4は、異なる二つの公開鍵N,N1 を掛け合わせて、その積を因数分解するため、Nを素因数分解可能なr,sの値が解らなくても、二つの公開鍵N,N1 が同一のr,sで素因数分解可能であるかどうかを検出することが可能となった。従って、Nを素因数分解可能なK,r,sの値が大きいときに容易にNを素因数分解することが可能となった。
よって、不正者が意図的に、素因数分解可能なr,sの値が同一の整数N,N1 を公開鍵とする暗号鍵を生成し、認証用の暗号鍵として仕込むなどした場合には、従来の方法では、その脆弱性を発見することが困難であったが、本実施例によれば、この脆弱性を容易に発見することが可能となった。
図14は、本発明による安全性評価装置の構成を示すブロック図である。なお、本実施例における安全性評価装置は、安全性評価装置10−5である。
図14に示すように、安全性評価装置10−5は、入力部11−3、安全性判定部13−4、ディスプレイ14など、実施例3における安全性評価装置10−3と略同様の構成を備え、暗号の安全性が素因数分解の困難性に依存する暗号方式における暗号鍵の安全性を、入力する公開鍵Nに基づいて暗号の安全性を評価するコンピュータシステムである。
安全性判定部13−5は、CPUがメモリに記憶されているプログラムを実行することによって実現される。安全性判定部13−5は、入力された素数p,qについて拡張ユークリッドアルゴリズムを利用した演算を行い、演算結果に基づいて、暗号の安全性を判定する。
ここで拡張ユークリッドアルゴリズムについて説明する。
正数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を整数の値とする関数である。
安全性判定部13−5は、ax+by=gcd(a,b)を、pr−qs=gcd(p,q)とし、(rn ,sn ,zn )=(rn-2 ,sn-2 ,zn-2 )−floor(zn-2 /zn-1 )*(rn-1 ,sn-1 ,zn-1 )などの拡張ユークリッドアルゴリズムの互除法に基づいて、|r*p−s*q|<√p,√q≒ 4√Nとなるまで、つまり、zn-1 が閾値よりも小さくなるまで、繰り返し部分の処理を行い、r,sを算出する。zn-1 の閾値を、√p,√q≒ 4√Nとなるよりも小さくなるまでとしたのは、Xの因数r*p,s*qの差が小さい場合には、実施例1、実施例2のように、容易に因数分解することができることとなるからである。安全性判定部13−5は、算出したr,sの値の大小に基づいて安全性を判定する。つまり、r,sの値が小さければ、Xの因数分解より算出したr*p,s*qの値より、しらみつぶしに当て嵌めていけば、p,qの値を算出することが可能となり、公開鍵Nから素因数p,qへの素因数分解が容易となり、安全性は、否定される。
図15は、本発明による安全性評価装置の動作及び安全性評価プログラムを示すフローチャートである。なお、「threshold(=safetyFactor* 4√N))」及び「safetyFactor」は、閾値であり、任意に設定することが可能である。「safetyFactor」は、最小値が1であって、上限は、 4√N、適切な値は、232〜264程度である。
図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)。
S850におけるループの条件「w>thresholdは、|r*p−s*q|<√p,√q≒ 4√Nとなるようなs,rが見つかるまで、同様の処理を繰り返させるものである(S850)。安全性判定部13−5は、floor(g/w)を算出し、quotientの値とする(S860)。関数floor(A)は、Aの小数点以下の数値を切り捨て、Aを整数の値とする関数である。
また、安全性判定部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)。計算結果は、以下の表のようになる。
Figure 0004872261
表に示すように、3回繰り返し部分を計算した場合に、w=52>threshold=safetyFactor* 4√N=82となり、ループを脱出する(S850)。
安全性判定部13−5は、K=|a*b|=|−2*3|=6に基づいて、暗号は脆弱であると判定する(S880,S900)。つまり、Kの値が小さいため、実施例1、リーマン法などの方法を用いて、Nを容易に素因数分解することができると判定する(図9参照。)。
このように本実施例によれば、入力したp,qに基づいて、容易に素因数分解可能なr,sの値を算出することが可能となった。従って、不正者が、素因数分解可能なr,sに偏りのある公開鍵Nを生成し、認証用の暗号鍵として仕込むなどした場合には、従来の方法では、その脆弱性を発見することが困難であったが、本実施例によれば、この脆弱性を容易に発見することが可能となった。
(変形例)
以上説明した実施例に限定されることなく、種々の変形や変更が可能であって、それらも本発明の均等の範囲内である。例えば、実施例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における素因数分解の演算回数よりも少なくなる。
実施例1において、安全性評価装置10は、ICカード20から整数Nを読み出しているが、整数Nの取得方法は限定されない。
実施例1において、ICカード20から秘密鍵d、公開鍵e、整数Nを取得することができる場合に、以下に説明するように、素因数分解部12は、p,qの差の大きさを示すaの値を算出し、安全性判定部13は、実施例2の安全性判定部13−2のように、このaの値に基づいて安全性の判定を行ってもよい。
図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)。
例えば、e=11、d=12371、N=22987を取得した場合には、
x=11*12371−1=136080
k=6としたときに、
φ=136080/6=22680
s=154
a=√(154^2−22987)=27
p=181、q=127となる。
なお、kには、大きい候補値(eに近い候補値)から順に当て嵌めて演算を行った方が演算の繰り返しを少なくすることが可能となる。
実施例2において、安全性判定部13−2は、素数p,qの差が2^(n/2+50)以上であるか否かに基づいて安全か否かの判定を行っているが、この「50」の値は、任意であって、求める安全性に応じて設定することが可能である。また、暗号鍵生成装置10−2は、要求される安全性の高低の指示を外部から入力する入力部を備え、この指示に応じてしきい値を設定してもよく、素数p,qのビット数に応じた値を設定してもよい。
実施例2において、安全性判定部13−2は、素数p,qの差が2^(n/2+50)以上であるか否かに基づいて安全か否かの判定を行っているが、差を求めずに、p,qの各々最上位バイトから下位バイトへ向かって順に1バイトずつなど、処理単位となる情報単位ごとの比較を反復して行い、上位(n/2−50)ビットまでに相違があった場合に安全と判定してもよい。素数p,qは大きな整数であるため、p,qの差(|p−q|)を計算するための計算リソース上の負担を軽減することが可能となる。
nビットの素数p,qの相違箇所が上位n/2ビットのいずれの位置にあるか、つまり、上位n/2ビットにおける差の大きさに基づいて、安全性を評価することができれば、その方法は限定されない。
実施例2において、安全性判定部13−2は、実施例1におけるa,bの値を素数p,q(同一のビット数でなくともよい。)から算出し、0<ab<ksの場合に、脆弱と判定してもよい。なお、kは、暗号鍵に対して求める安全性、安全性判定部13−2の計算能力、計算に与えられた時間などに応じて任意に設定することが可能なしきい値である。例えば、kが小さい値であれば、求める安全性は、低い一方、計算量も減少し、処理の迅速化を図ることができる。しきい値kの値を暗号鍵に対して求める安全性、計算量などに応じて設定し、0<ab<ksに基づいて判定を行うことによって、要求する安全性、計算量などに応じた安全性の評価が可能となる。
また、実施例2において、安全性判定部13−2が脆弱と判定した場合に、素数生成部15は、新たに素数p,qを生成するが、脆弱と判定した素数p,qを元に新たな素数を生成してもよい。
実施例2において、HSMなど、暗号鍵を生成し、外部へ出力して他の装置へ提供する暗号鍵生成装置10−2を安全性評価装置として記載しているが、ICカードなどの暗号鍵を生成し、自身で使用する暗号鍵生成装置であってもよいし、HSMで生成された暗号鍵をICカードへ書き込むICカード発行機であってもよく、素数p,qを取得することが可能な装置であれば、装置の種類は限定されない。従って、秘密鍵を格納しているICカード20が所定のプログラムをダウンロードすることによって、安全性判定部13−2を備え、ICカード20内で安全性の評価を行ってもよい。
各実施例において、RSA暗号について記述したが、Rabin暗号であってもよく、N(=p*q)又はX(=(r*p)*(s*q))の素因数分解に暗号鍵の安全性が依存する暗号方式であれば、暗号方式は限定されない。
実施例1又は実施例2において、sの値は、Nの平方根の小数点第一位を四捨五入した整数としたが、p<s<qの範囲でNの平方根に近い値であればよい。例えば、N=1927の場合には(図3参照。)、s=46、47とした場合であっても、p,qを算出することが可能である。
実施例4において、入力部11−3は、m個のN1 をまとめて入力するが(図13のS610)、S690からS630へのループがある度に、漸次対応するN1 を入力してもよい。
各実施例において、素因数分解装置、安全性評価装置は、それぞれ異なる方法で素因数分解や、安全性評価を行うが、これらの複数の方法をまとめて実行可能な素因数分解装置又は安全性評価装置であってもよい。
素因数分解装置、安全性評価装置の構成を示すブロック図である。(実施例1) 素因数分解プログラム及び素因数分解方法を示すフローチャートである。(実施例1) 素因数分解方法による素因数分解の演算結果を示す表である。(実施例1) 素因数分解装置、安全性評価装置の動作、素因数分解プログラム、素因数分解方法及び安全性評価プログラムを示すフローチャートである。(実施例1) 安全性評価装置の構成を示すブロック図である。(実施例2) 安全性判定部による安全性判定を説明する説明図である。(実施例2) 安全性評価装置の動作及び安全性評価プログラムを示すフローチャートである。(実施例2) 素因数分解装置、安全性評価装置の構成を示すブロック図である。(実施例3) リーマン法におけるK,Sの試行範囲を説明するための図である。(実施例3) 素因数分解装置、安全性評価装置の動作、素因数分解プログラム、素因数分解方法及び安全性評価プログラムを示すフローチャートである。(実施例3) 素因数分解方法におけるK,Sの試行範囲を説明するための図である。(実施例3) 素因数分解装置、安全性評価装置の構成を示すブロック図である。(実施例4) 素因数分解装置、安全性評価装置の動作、素因数分解プログラム、素因数分解方法及び安全性評価プログラムを示すフローチャートである。(実施例4) 本発明による安全性評価装置の構成を示すブロック図である。(実施例5) 安全性評価装置の動作及び安全性評価プログラムを示すフローチャートである。(実施例5) 素因数分解装置、安全性評価装置の動作、素因数分解プログラム、素因数分解方法及び安全性評価プログラムを示すフローチャートである。(変形例) 素因数分解方法による素因数分解の演算結果を示す表である。(変形例) 素因数分解装置、安全性評価装置の動作、素因数分解プログラム、素因数分解方法及び安全性評価プログラムを示すフローチャートである。(変形例)
符号の説明
1 安全性評価システム
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 (2)

  1. 公開鍵暗号の暗号鍵の安全性を評価する安全性評価装置であって、
    整数Nに対してN=p*qとなる公開鍵暗号の素因数p,qを取得する素因数取得手段
    と、
    (r,s,z)=(rn−2,sn−2,zn−2)−floor(zn−2/zn−1)*(rn−1,sn−1,zn−1拡張ユークリッドアルゴリズムの互除法に基づいて、p*r −q*s =z が、|r*p−s*q|<√p,√q≒ √Nとなるまで、前記素因数取得手段によって取得された素因数p,qを用いて繰り返し処理を行って、r,sを算出する演算手段と、
    前記演算手段により前記算出されたr,sの値が閾値よりも小さい場合には、公開鍵暗号の暗号鍵の安全性が低いと評価する安全性評価手段とを備えること、
    を特徴とする安全性評価装置。
  2. 公開鍵暗号の暗号鍵の安全性を評価するためにコンピュータに実行させる安全性評価プログラムであって、
    コンピュータを、
    整数Nに対してN=p*qとなる公開鍵暗号の素因数p,qを取得する素因数取得手段と、
    (r ,s ,z )=(r n−2 ,s n−2 ,z n−2 )−floor(z n−2 /z n−1 )*(r n−1 ,s n−1 ,z n−1 )の拡張ユークリッドアルゴリズムの互除法に基づいて、p*r −q*s =z が、|r*p−s*q|<√p,√q≒ √Nとなるまで、前記素因数取得手段によって取得された素因数p,qを用いて繰り返し処理を行って、r,sを算出する演算手段と、
    前記演算手段により前記算出されたr,sの値が閾値よりも小さい場合には、公開鍵暗号の暗号鍵の安全性が低いと評価する安全性評価手段として機能させること、
    を特徴とする安全性評価プログラム。
JP2005216856A 2004-08-03 2005-07-27 安全性評価装置及び安全性評価プログラム Active JP4872261B2 (ja)

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 JP2006072336A (ja) 2006-03-16
JP4872261B2 true 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)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2905776B1 (fr) * 2006-09-11 2009-01-30 Bigilimwatshi Guy Boyo Dispositif electroniques et/ou informatique de factorisation des nombres entiers.
JP2018195274A (ja) * 2017-05-15 2018-12-06 正仁 櫨田 Cpuのアーキテクチャを上手く使った、自然数を素因数分解する方法
KR102199507B1 (ko) * 2019-02-20 2021-01-06 고려대학교 산학협력단 스레드 정보를 이용한 소수 복구 방법, 이를 수행하기 위한 장치 및 기록매체
WO2024154264A1 (ja) * 2023-01-18 2024-07-25 富士通株式会社 暗号鍵評価プログラム、暗号鍵評価方法および情報処理装置

Also Published As

Publication number Publication date
JP2006072336A (ja) 2006-03-16

Similar Documents

Publication Publication Date Title
US7639808B2 (en) Elliptic curve cryptosystem apparatus, elliptic curve cryptosystem method, elliptic curve cryptosystem program and computer readable recording medium storing the elliptic curve cryptosystem program
JP5328186B2 (ja) データ処理システム及びデータ処理方法
JP5001176B2 (ja) 署名生成装置、署名生成方法及び署名生成プログラム
JP4668931B2 (ja) 電力解析攻撃に対する耐タンパ性を持った暗号化処理装置
WO2004055756A1 (ja) 秘密鍵を用いた耐タンパ楕円曲線暗号処理
Ambedkar et al. A new factorization method to factorize rsa public key encryption
JP2003208097A (ja) サイドチャネルアタック耐性を有する暗号演算装置及び方法
JP4568886B2 (ja) Rsaタイプの暗号アルゴリズムを安全に実施するための方法、および対応する構成要素
JP2009175197A (ja) 暗号装置、復号装置、鍵生成装置及びプログラム
JP4872261B2 (ja) 安全性評価装置及び安全性評価プログラム
KR100731387B1 (ko) 암호화 시스템 내의 모듈러 멱승 결과 결정 장치 및 방법
JP5553773B2 (ja) 楕円曲線上の点のスカラー倍を計算する装置及び方法
US20090238360A1 (en) Exponentiation ladder for cryptography
US9419789B2 (en) Method and apparatus for scalar multiplication secure against differential power attacks
CN111368317B (zh) 一种计算机数据加密系统及方法
US6609141B1 (en) Method of performing modular inversion
JP2008525835A (ja) 暗号計算を実行するための方法及び装置
JP2004163687A (ja) 楕円曲線暗号装置、楕円曲線暗号プログラム
KR20140028233A (ko) 중국인 나머지 정리에 기반한 준동형 암복호화 방법 및 이를 이용한 장치
JP5210712B2 (ja) 圧縮rsa係数の計算方法
JP4502817B2 (ja) 楕円曲線スカラー倍計算方法および装置
JP4692022B2 (ja) 楕円曲線暗号におけるスカラー倍計算装置、及び、そのプログラム
JP5010508B2 (ja) 楕円曲線暗号演算装置、方法及びプログラム並びに楕円曲線暗号演算システム及び方法
KR101833360B1 (ko) Rsa 암호시스템의 지수승 연산에 이용되는 사전 연산 테이블 생성 방법 및 그 장치
JPH07121107A (ja) 鍵生成方法および装置

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