説明

暗号鍵生成装置、およびその装置を利用可能な暗号化装置ならびに復号装置

【課題】ナップザック暗号は現在主流のRSA暗号と比べて暗号化および復号が短時間であり量子計算機によってさらに安全性が危うくなるということはないという利点があるが、解読法が存在する。
【解決手段】
緩増加秘密鍵生成部10は、要素の値が単調増加に並んだベクトルであって当該ベクトルの要素を分割数ごとに間引きすることにより得られる分割数個の分割ベクトルが超増加となる緩増加ベクトルを生成する緩増加ベクトル生成部36と、任意の分割ベクトルにおける要素の総和よりも大きな整数を法Mとして生成する法M生成部38と、法Mと互いに素である乗数を生成する乗数生成部40とを含む。また、公開鍵生成部12は、緩増加ベクトルの要素と乗数との積について法Mを法としてモジュラ乗算変換することにより公開鍵ベクトルを生成する公開鍵ベクトル生成部42と、分割数と公開鍵ベクトルとを公開鍵として出力する公開鍵出力部44とを含む。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は暗号技術に関し、特に暗号鍵生成装置、およびその装置を利用可能な暗号化装置ならびに復号装置に関する。
【背景技術】
【0002】
公開鍵暗号として代表的なものにRSA暗号がある。このRSA暗号の安全性は巨大数の因数分解が困難であることに依拠しているが、巨大数の因数分解は量子計算機の出現により実効的時間で可能となり、RSA暗号の安全性は危うくなると言われている。また、RSA暗号は暗号化や復号の計算に時間がかかるという欠点がある。
【0003】
公開鍵暗号の一方式として、ナップザック暗号がある。ナップザック暗号は1978年頃にMerkleとHellmanが提案した最初期の公開鍵暗号のひとつである(非特許文献1参照)。ナップザック暗号(以下「MH暗号」という。)の安全性は組み合わせ問題に依拠しており、量子計算機によってさらに安全性が危うくなるということはないが、解読法(非特許文献2、3参照)が存在するため、現在は実用されていない。
【先行技術文献】
【非特許文献】
【0004】
【非特許文献1】R.C.Merkle and M.E.Hellman, "Hiding information and signatures in trapdoor knapsacks", IEEE Transactions on Information Theory, vol. IT-24, no.5, pp.525-530, 1978.
【非特許文献2】J.C.Lagarias and A.M.Odlyzko, "Solving low density subset sum problems", Journal of ACM, vol.32, pp.229-246, 1985.
【非特許文献3】M.J.Coster, A.Joux, B.A.LaMacchia, A.M.Odlyzko, C.-P Schnorr, and J. Stern, "Improved low-density subset sum algorithms", Comput. Complexity, 2:111-128, 1992.
【発明の概要】
【発明が解決しようとする課題】
【0005】
MH暗号は暗号化が整数の足し算、復号が整数の比較と引き算からなるため、RSA暗号に比して暗号化および復号の計算が高速であるという利点がある。また、量子計算機によってさらに安全性が危うくなるということはないという利点もある。しかしながら、MH暗号には低密度攻撃等の解読法が存在するという欠点がある。
【0006】
本発明はこうした状況に鑑みてなされたものであり、その目的は、暗号解読に対して耐性の高い暗号鍵を生成する暗号鍵生成装置およびその装置を利用可能な暗号化装置ならびに復号装置を提供することにある。
【課題を解決するための手段】
【0007】
本発明のある態様は暗号鍵生成装置に関する。この装置は、緩増加秘密鍵生成部と公開鍵生成部とを含む。緩増加秘密鍵生成部は、ベクトルの要素を分割数ごとに間引きすることにより得られる分割数個の分割ベクトルが超増加となるベクトルを緩増加ベクトルとして生成する緩増加ベクトル生成部と、各分割ベクトルにおける要素の総和の最大値よりも大きな整数を法Mとして生成する法M生成部と、法Mと互いに素である乗数を生成する乗数生成部とを含む。公開鍵生成部は、緩増加ベクトルの要素と乗数との積について法Mを法としてモジュラ乗算変換することにより公開鍵ベクトルを生成する公開鍵ベクトル生成部と、分割数と公開鍵ベクトルとを公開鍵として出力する公開鍵出力部とを含む。
【0008】
本発明の別の態様は暗号化装置に関する。この装置は、公開鍵として分割数と公開鍵ベクトルとを含む公開鍵の入力を受け付ける公開鍵受信部と、平文の入力を受け付ける平文入力部と、公開鍵ベクトルと平文とから少なくとも分割数個の暗号文を生成する暗号文生成部とを含み、公開鍵ベクトルは、緩増加ベクトルの要素をモジュラ乗算変換することで生成されたものであり、緩増加ベクトルは、前記平文のビット数と同数の要素を持つベクトルであって当該ベクトルの要素を分割数ごとに間引きすることにより得られる分割数個の分割ベクトルが超増加となる。
【0009】
本発明のさらに別の態様は復号装置に関する。この装置は、暗号文として複数個の暗号文を含む暗号文の入力を受け付ける暗号文受信部と、秘密鍵として緩増加ベクトルを含む秘密鍵に基づいて前記暗号文を復号する復号部とを含み、緩増加ベクトルは、ベクトルの要素を分割数ごとに間引きすることにより得られる分割数個の分割ベクトルが超増加となるベクトルであり、暗号文は、前記緩増加ベクトルの要素をモジュラ乗算変換することで生成された公開鍵ベクトルに基づいて暗号化されたものである。
【0010】
本発明のさらに別の態様は暗号鍵生成方法に関する。この方法は、ベクトルの要素を分割数ごとに間引きすることにより得られる分割数個の分割ベクトルが超増加となる緩増加ベクトルを生成するステップと、任意の分割ベクトルにおける要素の総和よりも大きな整数を法Mとして生成するステップと、法Mと互いに素である乗数を生成するステップと、緩増加ベクトルの要素と乗数との積について法Mを法とするモジュラ乗算変換することにより公開鍵ベクトルを生成するステップと、分割数と公開鍵ベクトルとを公開鍵として出力するステップとをプロセッサに実行させる。
【0011】
本発明のさらに別の態様は、暗号鍵を生成するためのプログラムに関する。このプログラムは、ベクトルの要素を分割数ごとに間引きすることにより得られる分割数個の分割ベクトルが超増加となる緩増加ベクトルを生成する機能と、各分割ベクトルにおける要素の総和の最大値よりも大きな整数を法Mとして生成する機能と、法Mと互いに素である乗数を生成する機能と、緩増加ベクトルの要素と乗数との積について法Mを法とするモジュラ乗算変換することにより公開鍵ベクトルを生成する機能と、分割数と公開鍵ベクトルとを公開鍵として出力する機能とをコンピュータに実現させる。
【0012】
本発明の更に別の態様は秘密鍵生成装置に関する。この装置は、組み合わせ最適化問題の困難性により安全性を担保する暗号の鍵を生成する暗号鍵生成装置であって、ベクトルの要素を分割数ごとに間引きすることにより得られる分割数個の分割ベクトルが超増加となるベクトルを暗号鍵として生成する。
【0013】
なお、以上の構成要素の任意の組み合わせ、本発明の表現を方法、装置、サーバ、システム、コンピュータプログラム、記録媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【0014】
本発明によれば、暗号解読に対して耐性の高い暗号のための暗号鍵を提供することができる。
【図面の簡単な説明】
【0015】
【図1】実施の形態に係る暗号システムの全体構成図である。
【図2】図1の暗号システムによる鍵生成から暗号文の復号およびその結果の出力に至るまでの手順を説明するフローチャートである。
【図3】図1の暗号鍵生成装置の構成図である。
【図4】図3の緩増加秘密鍵生成部における緩増加秘密鍵の生成手順を説明するフローチャートである。
【図5】緩増加ベクトルを生成するための具体例を説明するフローチャートである。
【図6】暗号文生成の手順を説明するフローチャートである。
【図7】図7(a)は復号の手順を説明するフローチャートの前半部である。図7(b)は復号の手順を説明するフローチャートの後半部である。
【発明を実施するための形態】
【0016】
以下本発明を好適な実施の形態をもとに説明する。まず、実施の形態の基礎となる理論を前提技術として述べ、その後、具体的な実施の形態を説明する。
【0017】
[前提技術]
[1] 概要
実施の形態は、低密度攻撃に対するMH暗号の安全性を高めることに関するものである。実施の形態の基礎技術は、MH暗号の秘密鍵を従来の超増加から緩増加に変更することにより、公開鍵ベクトルの密度を高めることである。
【0018】
[2] 本明細書で用いる記号の定義
平文のビット数: n
秘密鍵ベクトル: b
秘密鍵ベクトルの要素: b (i=1,・・・,n)
法: M
乗数: w
乗数のMを法とする逆元: w−1
公開鍵ベクトル: a
公開鍵ベクトルの要素: a (i=1,・・・,n)
平文: m
平文の要素: m (i=1,・・・,n)
分割数: h
補助変数: S (j=1,・・・,h)
従来型の暗号文: C
実施の形態に係る暗号文: C (i=1,・・・,H,ただしH≧h)
基底行列: ALO
Costerらの基底行列: A
Fiezeの基底行列: A
格子: L
aの密度: d
整数全体の集合: Z
【0019】
[3] 従来型MH暗号
[3.1] 秘密鍵
正整数を要素とするベクトルb=(b,b,・・・,b)∈Zが次のような性質を有するとき、bは超増加(super increasing)であるという。
【数1】

法Mを次の式を満たすランダムな整数とする:
【数2】

Mをあまり大きくすると解読されやすくなるので、たとえば
【数3】

とする。
次を満たす乗数wをランダムに選び、更にMを法とするwの逆元w−1を求める:
gcd(w,M)=1、 1<w<M (3)
ww−1≡1 (mod M) (4)
ここで、gcd(w,M)はwとMとの最大公約数を表す。
【0020】
[3.2] 公開鍵
秘密鍵ベクトルbをwとMとを用いてモジュラ乗算変換し、公開鍵ベクトルa=(a,a,・・・,a)∈Zを作る:
=wbmod M,(i=1,2,・・・,n) (5)
ここで、xmod MはxをMで割った剰余r、0≦r<Mを表す。
【0021】
[3.3] 暗号化
平文mはnビットであるとする:
m=(m,m,・・・,m)∈{0,1} (6)
この平文に対する暗号文Cは次の式で与えられる。
【数4】

【0022】
[3.4] 復号
まず暗号文Cをwの逆元w−1と法Mとを用いるモジュラ乗算変換によりC’に変換する。この逆変換によって、Cとaとからmを求めるという難しいナップザック問題は、C’とbとからmを求めるという易しいナップザック問題になる。こうして復号は次のようにして行われる。
C←w−1Cmod M,m←0
for i=n downto 1
{ (8)
if C≧b then
{m←1,C←C−b

【0023】
[4] 密度が高い鍵の生成法
本実施の形態に係る方式の特徴は秘密鍵生成法と、それにともなう暗号化の仕組みにある。秘密鍵が超増加ではなく、後述するように「緩増加」(slowly increasing)になる。このため、後述する密度が高くなる。そしてその結果として、MH暗号の解読の強力な方法であるLagarias−Odlyzko法に耐性を有することになる。
【0024】
[4.1] 秘密鍵
ふたつの正整数nとhとを定める。nはMH暗号と同じく平文のビット数である。hは本実施の形態に係る方式特有のパラメータであり、n以下である。h=1の場合には従来型のMH暗号になる。便宜上、以下hを分割数という。
【0025】
ベクトルb=(b,b,・・・,b)∈Zは次の不等式を満たすものとする。
【数5】

ここで
【数6】

は(i−1)/hを超えない最大の整数である。従来手法の場合の式(2)の右辺と比較すると式(9)の右辺は加算される要素の数が少ない(nが十分大きければ、加算される要素の数は従来手法の概ねh分の1になる)。したがって、従来手法に比べてbは緩やかにしか増加しない数列である。そこで、式(9)を満たすことを「緩増加」と定義する。
【0026】
式(9)においてn=9、h=3の場合を以下に例示する。
>b
>b
>b
>b+b
>b+b
>b+b
>b+b+b
>b+b+b
【0027】
さらに法Mを、bから始めて降順にh個ごとに取ったbの要素の総和より大きな整数とする:
【数7】

ここで
【数8】

は(n−1)/hを超えない最大の整数である。これはすなわち式(11)の右辺におけるbのインデックスの最小値が1以上h以下であることを意味する。また、不等式(11)が成立すれば、bの任意のh個ごとの要素の和に対しMは常に大きくなる。
【0028】
Mと互いに素な整数w,1<w<Mおよびwの法Mに関する逆元w−1,1<w−1<M、w−1w≡1(mod M)を定める。
以上のように定めたb,M,w,w−1を秘密鍵とする。
【0029】
[4.2] 公開鍵
秘密鍵ベクトルbから公開鍵ベクトルa=(a,a,・・・,a)への変換は、従来型のMH暗号の場合とまったく同じである。
=wbmod M (i=1,2,・・・,n) (13)
【0030】
[4.3] 暗号化
平文m=(m,m,・・・,m)∈{0,1}を次のように、暗号文C,C,・・・,Cに変換する。
=C=・・・=C=0
j=1
for i=n downto 1

if m=1
then{C=C+a;j=jmod H+1;}

これはつまり、aがCに加算されるのは、m=1かつmから始まってmがj+th番目の1である時である(tはある整数)、ということである。
【0031】
[4.4] 復号
先ずMとw−1とによりh個の暗号文Cをモジュラ乗算変換する。これは従来型のMH暗号の復号と同じく公開鍵aの要素の和を秘密鍵bの要素の和に変換するためである。
C’=w−1mod M (j=1,2,・・・,H)
以下簡単のためC’を改めてCと書く。復号は以下のように進む。
=m=・・・=m=0
j=1
for i=n downto 1

if C≧b
then{m=1;C=C−b;j=jmod H+1}

これはつまり、m=1となるのは、Cがb以上のときである。ここでjは1に始まるが、m=1としたときjは1だけ増える(ただしHの次は1に戻る)、ということである。
【0032】
[5] Lagarias−Odlyzkoの攻撃法
Lagarias−Odlyzkoの攻撃法(以下「LO法」という。)は、MH暗号に対する強力な攻撃法で、低密度攻撃とも呼ばれる。後述する密度dがd<0.6463のナップザック暗号は多項式時間で解読されることが証明されている。ただし整数格子の中の最短ベクトルを多項式時間で見出すアルゴリズムが存在することが仮定されている。実際にはこのようなアルゴリズムは存在しないが、実用的な近似アルゴリズムとしてLLLアルゴリズムが存在する。臨界密度はその後0.6463から0.9408にまで改良されている。その結果密度が1以下であるMH暗号はほとんど解読されることになった。
【0033】
[5.1] 従来型MH暗号のLO法による攻撃
公開鍵ベクトルaと盗聴した暗号文Cとを用いて次のような基底行列を定義する。
【数9】

この行列のn+1個の行をベクトルとみなし、これらのベクトルの整数係数の線形結合の全体Lを、ALOが生成する格子といい、L=L(ALO)と表す。
【数10】

このとき基底行列ALOのn+1個のベクトルは線形独立なので、Lの次元はn+1である。LO法の原理は、平文に対応するベクトルがLの比較的短いベクトルであり、したがってLの短いベクトルを探索すれば平文が見出されるであろうというものである。実際i=1,・・・,nに対してy=mで、y=1のときy=0であるから
v=(m,m,・・・,m,0) (16)
はLのベクトルであり、例えば2乗ノルムは
【数11】

となり短い。格子基底の各ベクトルをできるだけ短くすることを、格子基底縮小(または簡約)という。そしてこのための格子基底縮小アルゴリズムのひとつに前述のLLLアルゴリズムがある。
【0034】
式(14)の他、LO法に用いられる行列は色々提案されている。よく知られたものにCosterらが提案した
【数12】

がある。またFriezeが提案した
【数13】

がある。
【0035】
[5.2] ナップザックベクトルの密度と解読率との関係
ナップザックベクトルの密度は
d=n/max(log) (20)
で定義される。
【0036】
LO法による攻撃は極めて有効である。Lagarias−OdlyzkoやCosterらは、dがある値d以下であれば、平文に対応するベクトルが格子の最短ベクトルである確率はnが無限大になるとき漸近的に1になることを示した。さらにLLLアルゴリズムを最短ベクトルを探索する近似法として用いて、上のことを実験的に検証した。従来型のMH暗号では必然的にd<1となり、したがってLO法は従来型MH暗号の解読に有効な道具である。
【0037】
[5.3] 本実施の形態に係る手法の密度
以下、本実施の形態に係る手法に係る密度dの理論的上界について検討する。前述したとおり、本手法に係る秘密鍵ベクトルbは緩増加となる。式(9)における不等号を等号で置き換えると、bの増加の仕方は最も緩やかになる:
【数14】

さらに、bを公比rの等比数列とみなし、
i+1=b (22)
と置く。そして式(21)に式(22)を代入して両辺をbで除して
【数15】

を得る。ここで、i(0≦i<h)は式(10)の整数jを用いてi=i−1−jhと書くことができる。したがって
【数16】

となる。ここで、両辺をrで割って整理すると
【数17】

となる。両辺をさらに
【数18】

で割り、nが十分大きいとき、十分大きいiについてはjhも十分大きくなるので
【数19】

の項を無視すれば
−rh−1−1=0 (28)
を得る。式(28)の方程式の根が、bを等比数列と見なした場合の公比となる。
【0038】
ベクトルbの最大の要素はbである。式(22)より
=bn−1 (29)
となる。
【0039】
次にMの大きさを式(11)の右辺で見積もる。ここでは簡単のため、分割数hは平文のビット数nの約数であるとする。
【数20】

ここで式(28)よりrh-1=rh-1を用いると
M>b(r−1) (31)
を得る。
【0040】
式(20)より、ナップザックベクトルの密度は公開鍵ベクトルの要素の最大値を用いて定義される。式(13)に示されるように、公開鍵ベクトルの要素は秘密鍵ベクトルの要素のMを法とするモジュラ乗算変換で定義されるから、その可能な最大値はM−1である。そこで、公開鍵ベクトルの要素の最大値として式(31)の右辺を採用し、式(20)に代入すると以下のようになる。
【数21】

となる。ここで、nが十分に大きい場合にはnが分母となる項は無視できるので
d=1/logr (33)
となる。
【0041】
ここで、分割数h≧1のときのhと公比rおよび密度dとの関係について考察する。式(28)の左辺をf(x)=x−xh−1−1と置き、f(x)におけるhをh+1に置き換えた式をg(x)と置く。g(x)=xh+1−x−1である。これよりf(0)=g(0)=f(1)=g(1)=−1が成り立つ。f(x)をxについて微分するとf’(x)=hxh−1−(h−1)xh−2=xh−2(x−(h−1)/h)を得る。x>0で考えると、f’(x)=0となるxはx=(h−1)/hとなる。したがって、f(x)は0<x<1なるxにおいて極小になる。
【0042】
また、f(2)=2−2h−1−1=2h−1−1≧0なので、前述のf(1)=−1<0であることおよびf(x)が連続関数であることも考慮すると、中間値の定理より、1<r<2でf(r)=0となるrが存在する。
【0043】
そこで、g(x)−f(x)を考える。g(x)−f(x)=xh−1(x−1)≧0となるから、1<x≦2においてg(x)>f(x)が成り立つ。g(r)>f(r)=0であり、前述のg(1)=−1<0であることおよびg(x)が連続関数であることも考慮すると、1<r<rでg(r)=0となるrが存在する(中間値の定理)。故に、h≧1かつ1<x<2において、f(x)の根rとf(x)のhをh+1に置き換えた式g(x)の根rとの関係は、1<r<r<2となる。換言すると、分割数hを大きくすれば公比rは小さくなる。式(33)より、分割数hを大きくすれば密度dは大きくなる。
【0044】
[具体例]
実施の形態
図1は、実施の形態に係る暗号システムの全体構成を表す図である。これらの構成は、ハードウエア的には、任意のコンピュータのCPU、メモリ、その他のLSIで実現でき、ソフトウエア的にはメモリにロードされた暗号処理機能のあるプログラムなどによって実現されるが、ここではそれらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックがハードウエアのみ、ソフトウエアのみ、またはそれらの組み合わせによっていろいろな形で実現できることは、当業者には理解されるところである。後述する復号装置200、暗号化装置300、および暗号鍵生成装置400の構成についても同様である。
【0045】
暗号システム100は、復号装置200と暗号化装置300とを含む。復号装置200は、暗号鍵生成装置400を用いて緩増加秘密鍵と公開鍵とを生成する。緩増加秘密鍵記憶部30は、暗号鍵生成装置が生成した緩増加秘密鍵を格納する。公開鍵送信部14は、暗号鍵生成装置400が生成した公開鍵を、インターネット等の通信手段を通じて暗号化装置300に送信する。
【0046】
暗号化装置300の公開鍵受信部16は、暗号鍵生成装置400が生成した公開鍵を、復号装置200の公開鍵送信部14から受信する。公開鍵記憶部18は、公開鍵受信部16が受信した公開鍵を格納する。暗号文生成部20は、公開鍵記憶部18から公開鍵を受け取り、平文入力部22から入力された平文についての暗号文を生成する。暗号文送信部24は、暗号文生成部20から受け取った暗号文を、インターネット等の通信手段を通じて復号装置200に送信する。
【0047】
復号装置200の暗号文受信部26は、暗号化装置300の暗号文生成部20が生成した暗号文を暗号化装置300の暗号文送信部24から受信する。復号部28は、暗号文受信部26が受信した暗号文を、緩増加秘密鍵記憶部30から受け取った緩増加秘密鍵を用いて復号する。平文出力部32は、復号部28が復号した平文を出力する。
【0048】
図2は、以上の構成の暗号システム100による鍵生成から暗号文の復号およびその結果の出力に至るまでの手順を説明するフローチャートである。
【0049】
緩増加秘密鍵生成部10は緩増加秘密鍵を生成する(S10)。公開鍵生成部12は、緩増加秘密鍵生成部10から緩増加秘密鍵を受け取り、公開鍵を生成する(S12)。公開鍵送信部14は、公開鍵生成部12が生成した公開鍵を、インターネット等の通信手段を通じて、暗号化装置300に送信する(S14)。
【0050】
公開鍵受信部16は、公開鍵送信部14が送信した公開鍵を受信する(S16)。暗号文生成部20は、公開鍵受信部16が受信した公開鍵を格納している公開鍵記憶部18から公開鍵を受け取り、かつ平文入力部22に入力された平文を受け取って、暗号文を生成する(S18)。暗号文送信部24は、暗号文生成部20が生成した暗号文を、インターネット等の通信手段を通じて、復号装置200に送信する(S20)。
【0051】
暗号文受信部26は、暗号文送信部24が送信した暗号文を受信する(S22)。復号部28は、緩増加秘密鍵生成部10が生成した緩増加秘密鍵を格納している緩増加秘密鍵記憶部30から緩増加秘密鍵を受け取り、かつ暗号文受信部26が受信した暗号文を受け取って、暗号文を平文に復号する(S24)。平文出力部32は、復号部28が復号した平文を図示しないモニタ等の出力デバイスに出力する(S26)。
【0052】
図3は、図1の暗号鍵生成装置400の構成図である。暗号鍵生成装置400は復号装置200の内部にあり、緩増加秘密鍵生成部10と公開鍵生成部12とを含む。暗号鍵生成装置400は、緩増加秘密鍵と公開鍵とを生成するものである。
【0053】
緩増加秘密鍵生成部10は、平文のビット数および分割数の入力部34、緩増加ベクトル生成部36、法M生成部38、乗数生成部40、逆元生成部46および秘密鍵出力部48を含む。また、公開鍵生成部12は、公開鍵ベクトル生成部42と公開鍵出力部44とを含む。
【0054】
平文のビット数および分割数の入力部34は、平文のビット数nと分割数hとの入力を受け取る。緩増加ベクトル生成部36は、平文ビット数および分割数の入力部34から平文のビット数nと分割数hとを受け取り、緩増加ベクトルb=(b,b,・・・,b)を生成する。ここで緩増加ベクトル生成部36は、緩増加ベクトルbの要素bが、bi−1から始めて降順にh個ごとに取った要素の総和より大きな整数となるように緩増加ベクトルbとして生成する。
【0055】
上記の方法で生成された緩増加ベクトルbは、平文のビット数と同数の要素が単調増加に並んだベクトルとなる。当該ベクトルの要素を分割数ごとに間引きすることにより得られる分割数個のベクトル(以後、「分割ベクトル」という。)はそれぞれ超増加となる。
【0056】
法M生成部38は、緩増加ベクトル生成部36から緩増加ベクトルbを受け取り、bから始めて降順にh個ごとに取ったbの要素の総和より大きな整数である法Mを生成する。乗数生成部40は、法M生成部38から法Mを受け取り、Mと互いに素な整数である乗数wを生成する。
【0057】
上記の方法で生成された法Mは、任意の分割ベクトルにおける要素の総和よりも大きな整数となる。bから始めて降順にh個ごとに取ったbの要素の総和は、各分割ベクトルにおける要素の総和の最大値となるからである。
【0058】
公開鍵ベクトル生成部42は、緩増加ベクトル生成部36、法M生成部38、乗数生成部40からそれぞれ緩増加ベクトルb、法M、乗数wを受け取り、緩増加ベクトルbの要素と乗数wとの積を法Mについてモジュラ乗算変換することで公開鍵ベクトルaを生成する。公開鍵出力部44は、平文ビット数および分割数の入力部34と公開鍵出力部44とからそれぞれ分割数h、公開鍵ベクトルaを受け取り、それらを合わせて公開鍵として、図1の公開鍵送信部14に出力する。
【0059】
逆元生成部46は法M生成部38と乗数生成部40とからそれぞれ法M、乗数wを受け取り、Mを法とするwの逆元w−1を生成する。秘密鍵出力部48は、平文ビット数および分割数の入力部34、緩増加ベクトル生成部36、法M生成部38、逆元生成部46からそれぞれ分割数h、緩増加ベクトルb、法M、逆元w−1を受け取り、それらを合わせて秘密鍵として、図1の緩増加秘密鍵記憶部30に出力する。
【0060】
緩増加ベクトルb、法M、乗数w、逆元w−1の生成は、前提技術[4.1]に記載のアルゴリズムに基づくものである。また、公開鍵ベクトルaの生成は、前提技術[4.2]に記載のアルゴリズムに基づくものである。
【0061】
図4は、以上の構成の暗号鍵生成装置400内の緩増加秘密鍵生成部10における秘密鍵生成手順を説明するフローチャートであり、図2におけるS10を詳細に説明するものである。
【0062】
緩増加ベクトル生成部36は、平文のビット数nと分割数hとを用いて、緩増加ベクトルbを生成する(S28)。法M生成部38は、緩増加ベクトルbを用いて、式(10)を満たす正整数である法Mを生成する(S30)。乗数生成部40は、法Mを用いて、Mと互いに素な整数である乗数wを生成する(S32)。逆元生成部46は、法Mと乗数wとを用いて、ww−1≡1(mod M)を満たすwの逆元w−1を生成する(S34)。これは例えば拡張されたユークリッドの互除法を用いれば計算することができる。
【0063】
図5は、緩増加ベクトルbを生成するための一例を説明するものであり、図4におけるS28を、具体例を用いて詳細に説明するものである。
【0064】
緩増加ベクトル生成部36は平文のビット数nと分割数hとを受け取る(S36、S38)。h個の補助変数S(j=1,・・・,h)を0で初期化する(S40)。補助変数Sは、緩増加ベクトルbをbから順に生成する際に、式(9)の右辺で表される和をh個に分割して格納するための変数である。bの初期値として、図示しない乱数生成器によって生成された乱数rndをbに格納する(S42)。ここで乱数rndは1〜Rの間の整数である。iをループ変数として、iに初期値1を入力する(S44)。
【0065】
S46はループの終了を判定するステップである。S46はループ変数iと平文のビット数nとを比較し、iがn以上となったときにループを終了する。S48は補助変数Sのインデックスを更新するステップである。具体的には、現在のループ変数iを用いてjに((i−1)mod h)+1を代入する。これにより、jは1から順に増加してhに至ると、次は再び1に戻り、以後1〜hの値を繰り返すことになる。
【0066】
S50は補助変数Sの値を更新するステップである。S48で計算したjと現在のループ変数iとを用いて、SにS+bを代入する。このことにより、式(9)の右辺で表される和をh個に分割して格納することができる。すなわち、Sは緩増加ベクトルbの要素をh個ずつ間引きした要素の和となり、間引きの開始点の違いによりh種類生成されることになる。
【0067】
S52はbi+1の値を生成するステップである。S52は、Sと図示しない乱数生成器によって生成された乱数rndとの和を、bi+1に格納する。乱数rndは前述の場合と同様に1〜Rの間の整数である。S54はループ変数iを更新するステップであり、iの値を1増加する。
【0068】
以上のステップを踏むことによって生成されたベクトルbは式(9)を満足し、緩増加となる。S56はベクトルbを緩増加ベクトルbとして出力する。
【0069】
以上述べたように、暗号鍵生成装置400によれば、緩増加ベクトルbを含む秘密鍵を生成することが可能となる。公開鍵ベクトルaは緩増加ベクトルbを用いて従来手法と同様に計算することができる。
【0070】
図1の300は、本実施の形態に係る暗号化装置の構成図である。暗号化装置300は、公開鍵受信部16、公開鍵記憶部18、暗号文生成部20、平文入力部22、暗号文送信部24を含む。
【0071】
図6は本発明の実施の形態に係る暗号文生成の手順を説明するフローチャートであり、図2におけるS18を詳細に説明するものである。以下説明する暗号文生成手順は、前提技術[4.3]に記載のアルゴリズムに基づくものである。
【0072】
S58、S60、S62はそれぞれ、平文m=m(i=1,・・・,n)∈{0,1}、公開鍵ベクトルa、分割数hの入力を受け取るステップである。S64はh個の暗号文C(j=1,・・・,h)の値を0で初期化するステップである。S66はループ変数iと暗号文のインデックスjとの初期化ステップであり、具体的にはiの値をnとし、jの値を1とするステップである。
【0073】
S68はループの終了を判定するステップであり、ループ変数iの値が0以下の場合にループを終了する。S70は平文の要素mの値に応じて処理を分岐するステップである。平文の要素mは0または1のいずれかの値を持つから、その値に応じて処理を分岐するものである。具体的にはm=0の場合には後述するS72とS74とのステップを飛ばしてS76に進む。
【0074】
S72はCの値を更新するステップである。具体的には、Cの値を、Cの値と公開鍵ベクトルのi番目の要素の値aとを加算した値に更新する。S74は暗号文のインデックスjの値を更新するステップである。具体的にはjの値を(jmod h)+1に更新する。これにより、jは1から順に増加してhに至ると、次は再び1に戻り、以後1〜hの値を繰り返すことになる。S76はループ変数iを更新するステップであり、iの値を1減少する。S78は、以上の手順で生成されたh個の暗号文Cを出力するステップである。
【0075】
以上のステップによると、平文mの値を後ろから(iの大きい方から)順に調べていき、m=1を見つける毎に対応する公開鍵aの要素をCに加算するのであるが、加算の際に、加算先のCを順に変更する、という処理が行われることになる。言い換えると、平文の要素mの値が後ろから数えてk番目に1となるときのインデックスの値をmとすると、j=(k−1)mod h+1をみたすCに公開鍵ベクトルの要素aの値が加算される、ということである。あるひとつの暗号文Cに加算される公開鍵ベクトルの要素aのインデックスは、平文の要素mにおける1の出現パターンによって異なることになる。
【0076】
以上述べたように、暗号化装置300によれば、分割数hと、緩増加ベクトルbを用いて生成された公開鍵ベクトルaとに基づいて平文を暗号化することができる。
【0077】
図1の200は、本発明の実施の形態に係る復号装置の構成図である。復号装置200は、暗号鍵生成装置400、公開鍵送信部14、緩増加秘密鍵記憶部30、暗号文受信部26、復号部28、平文出力部32を含む。
【0078】
図7は本発明の実施の形態に係る復号の手順を説明するフローチャートであり、図2におけるS24を詳細に説明するものである。以下説明する復号の手順は、前提技術[4.4]に記載のアルゴリズムに基づくものである。
【0079】
図7(a)におけるS80、S82、S84、S86、S88はいずれも復号のための情報を受け取るステップであり、それぞれ緩増加ベクトルb、分割数h、逆元w−1、法M、暗号文Cの入力を受け取る。S90は暗号文Cを緩増加ベクトルbの要素の和に変換するステップである。S92はn個の平文の要素m(i=1,・・・,n)の値を0で初期化するステップである。S94はループ変数iと平文のインデックスjとの初期化ステップであり、具体的にはiの値をnとし、jの値を1とするステップである。
【0080】
図7(b)は図7(a)の後半部分であり復号処理を行うステップである。
【0081】
S96はループの終了を判定するステップであり、ループ変数iの値が0以下の場合にループを終了する。S98は暗号文Cと緩増加ベクトルの要素bとの大小関係による分岐のステップである。Cがbより小さければ、後述するS100、S102、S104を飛ばしてS106に進む。
【0082】
S100はCがb以上であるときに、対応する平文の要素mの値を1とするステップである。bは緩増加でありかつCはbのいずれかの要素の和であるから、Cがb以上であればbはCに足された要素のひとつである。したがって、bに対応する平文の要素mの値は1である。S102はCの値を更新するステップである。具体的にはCの値をC−bに更新する。S104は暗号文のインデックスjの値を更新するステップである。具体的にはjの値を(jmod h)+1に更新する。これにより、jは1から順に増加してhに至ると、次は再び1に戻り、以後1〜hの値を繰り返すことになる。
【0083】
S106はループ変数iを更新するステップであり、iの値を1減少する。S108は、以上の手順で生成された平文mを出力するステップである。
【0084】
図6に示す暗号化のステップと図7に示す復号のステップとを比べると、インデックスの初期化ステップであるS66とS94およびインデックスの更新ステップであるS74とS104、S76とS106とが同一である。これは暗号化の際と復号の際との暗号文Cを変更する順序を同一にするためである。復号は後ろから(インデックスiの値の大きい方から)順に行う必要があるという事実に合わせて暗号化も後ろから行えば、暗号化と復号の際の暗号文Cの変更順序を一致させることができ、1回で復号処理を終了できる点で有利である。
【0085】
暗号化は前から(インデックスiの値の小さい方から)順に行うこともできる。しかしながら、この場合には復号の際にどの暗号文Cから処理を始めればよいかは分からないため、暗号文のインデックスjの初期値の候補として1〜hについて、最大でh回の試行錯誤を行う必要がある。
【0086】
初期値探索の試行錯誤を省くためには、暗号化装置において、h個の暗号文Cの順序を逆順にしてから復号装置に送信すればよい。より具体的には、図6のS72において最後に更新処理の行われた暗号文のインデクスがkであるとすると、CをCに、Ck−1をCに、Ck−2をCに、・・・、Ck+1をCにする操作を行ってから送信すればよい。
【0087】
以上説明したように緩増加ベクトルbが既知であれば、S96からS106のステップを踏むことで暗号文のインデックスjを更新することができ、h個の従来型MH暗号の復号と同様な処理に帰着することができる。
【0088】
を緩増加ベクトルbの要素bのいずれかの要素の和で分解する問題は組み合わせ最適化問題と呼ばれる問題に属し、一般的には要素の数が多い場合には最適解を得ることは困難とされている。しかし、もしbが超増加であれば、前提技術[3.4]のアルゴリズムにより、Cとbとの比較と引き算とで簡単に解くことができる。本実施例ではbは超増加ではないが、bをh個の分割ベクトルに分割し、それぞれについて従来型のMH暗号の復号処理と同様の処理を行うことで問題を解くことが可能となる。このために、緩増加ベクトルはそこから得られる分割ベクトルが超増加となるように設計されている。分割ベクトルが超増加となれば、緩増加ベクトルの要素を分割数以上の任意の間隔でサンプリングして得られるベクトルもまた、超増加となる。
【0089】
したがって、本実施例の緩増加ベクトルbは、組み合わせ最適化問題の困難性により安全性を担保する暗号であれば、その秘密鍵として利用することができる。
【0090】
一方、緩増加ベクトルbを知ることのできない攻撃者、すなわち暗号文C、公開鍵ベクトルa、分割数hを盗聴した攻撃者は、盗聴した暗号文Cについてh個の従来型MH暗号の復号と同様な処理に分割することはできない。インデックスjの更新は平文mにおける1の出現パターンに依存しているからである(図6におけるS70)。
【0091】
平文mを知ることのできない攻撃者がLO法を用いて攻撃を試みるためには、式(14)におけるCの代わりにCの各要素を用いるか、Cの総和を用いるか、Cの任意の部分和を用いる等の方法を取ることになる。いずれにしても式(20)で計算される密度dは式(33)に帰着し、高密度となる。すなわち、LO法に耐性を有することになる。
【0092】
以上述べたように、復号装置200によれば、公開鍵ベクトルaを用いて生成された暗号文Cを、緩増加ベクトルb、分割数h、逆元w−1、法Mを用いて復号することができる。また、緩増加ベクトルbを知らない攻撃者に対しては、LO法に耐性を有することができる。
【0093】
以下、本発明の実施の形態に係る暗号化および復号の手順について数値例を用いて具体的に説明する。
【0094】
表1は平文のビット数nが13で、分割数hの値が3の場合の暗号化および復号の数値例である。緩増加ベクトルbは(4,6,9,・・・,273,401)の13個の要素b(i=1,・・・,13)を持つベクトルであり、式(9)を満足する。法Mは587であり、b13+b10+b+b+b=586よりも大きく、式(11)を満足する。乗数w=101、逆元w−1=93である。Mとwは互いに素であり、これらはww−1≡1(mod M)である。なお表中w_invはw−1を意味するものとする。
【0095】
【表1】

【0096】
公開鍵ベクトルaは式(5)に基づいて生成したものである。例えばaの値はbとwとの積(6×101=606)を法Mの値である587で割った余りであるから19となる。分割数hの値は3であるから、暗号文はC、C、Cの3つとする。
【0097】
まず暗号化の手順について説明する。暗号化プロセスでは図6におけるS66からS76にしたがい、i=13からi=1に至るまで、平文mの要素が1であるかどうかを調べる。表1ではi=12のとき初めてm12=1となるから、Cにa12=571の値が加算される。i=10のとき再びm10=1となるから、今度はCにa10=500の値を加算する。同様にi=9のときはCにaの値を加算する。
【0098】
i=8のとき、mの要素が4度目の1となる。この場合、aの値を加算すべき暗号文はCに戻る。このように、mの要素が1となる毎にaの値を加算する暗号文をC、C、C、C、C、C・・・と循環しながら変更する。こうしてC=a12+a+a=1083、C=a10+a+a=1384、C=a+a=222となる。
【0099】
次に復号の手順について説明する。暗号文C、C、CをそれぞれMとw−1とによりモジュラ乗算変換し、C’、C’、C’を得る。例えば、w−1×C=100719となるが、これをM=587で割った余りは342となるのでC’の値は342となる。
【0100】
以後は図7におけるS94からS106にしたがい、i=13からi=1に至るまで順にbの要素がC’以下であるかどうかを調べる。表2ではi=12で初めてC’≧b12となる。そこでC’の値をC’−b12=342−273=69に更新する。i=10のときC’≧b10となるから、今度はC’の値をC’−b10=32に更新する。同様にi=9のとき、C’の値をC’−b=13とする。
【0101】
i=8のとき、bと大小を比較する値は、i=12において更新されたC’の値である。表1の場合、i=12において更新されたC’の値は69であり、bの値は60であるからC’≧bとなる。そこでC’の値をあらためてC’−b=69−60=9に更新する。以後、bの値と最新のC’との値の大小関係を比較してC’≧bとなる毎にC’の値を更新する。最終的にC’=C’=C’=0となれば復号終了である。C’≧bとなるiについてm=1、それ以外をm=0とすることで平文が得られる。
【0102】
表2は本発明実施の形態に係る分割数hと密度dとの関係を実験により求めた結果と理論的上界を示したものである。平文のビット数nを150とし、分割数hの値を1から5の間で変更したときの密度dを計算したものである。表の値は、秘密鍵として100種類の鍵を用意し、それぞれの場合の密度dの平均値を記載したものである。表2から、分割数hを大きくするにしたがって密度dも大きくなっていることが分かる。
【0103】
【表2】

【0104】
なお、分割数の値をいくつにするかは実験により定めればよいが、一例としては平文のビット数nが100または200程度であれば分割数hの値は5程度とすればよい。
【0105】
以上、本発明を実施の形態をもとに説明した。これらの実施の形態は例示であり、それらの各構成要素や各処理プロセスの組み合わせにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。以下そのような変形例を説明する。
【0106】
上記の説明では、暗号文の数を分割数と同数として説明したが、一般にはH≧hとなるHを用いてH個の暗号文を作成してもよい。この場合、復号プロセスにおいてCのインデックスを1ずつ順に増やしてHに至ったら次は再び1に戻し、以後1〜Hの値を繰り返せばよい。
【0107】
上記の説明では、秘密鍵として緩増加ベクトルを用いたが、緩増加ベクトルの並びを反転して降順に並べたベクトルを用いることもできる。この場合には暗号化および復号のプロセスにおけるループを逆に回せばよい。
【0108】
上記の説明では、実施の形態の暗号システム100の利用例として暗号鍵生成を説明したが、これ以外に、本実施の形態における暗号鍵はデジタル署名の生成と検証に用いてもよい。
【符号の説明】
【0109】
10 緩増加秘密鍵生成部、 12 公開鍵生成部、 14 公開鍵送信部、 16 公開鍵受信部、 18 公開鍵記憶部、 20 暗号文生成部、 22 平文入力部、 24 暗号文送信部、 26 暗号文受信部、 28 復号部、 30 緩増加秘密鍵記憶部、 32 平文出力部、 34 平文ビット数および分割数の入力部、 36 緩増加ベクトル生成部、 38 法M生成部、 40 乗数生成部、 42 公開鍵ベクトル生成部、 44 公開鍵出力部、 46 逆元生成部、 48 秘密鍵出力部、 100 暗号システム、 200 復号装置、 300 暗号化装置、 400 暗号鍵生成装置。

【特許請求の範囲】
【請求項1】
秘密鍵生成部と公開鍵生成部とを含み、
前記秘密鍵生成部は、
ベクトルの要素を分割数ごとに間引きすることにより得られる分割数個の分割ベクトルが超増加となるベクトルを緩増加ベクトルとして生成する緩増加ベクトル生成部と、
各分割ベクトルの要素の総和の最大値よりも大きな整数を法Mとして生成する法M生成部と、
法Mと互いに素である乗数を生成する乗数生成部とを含み、
前記公開鍵生成部は、
緩増加ベクトルの要素と乗数との積について法Mを法としてモジュラ乗算変換することにより公開鍵ベクトルを生成する公開鍵ベクトル生成部と、
分割数と公開鍵ベクトルとを公開鍵として出力する公開鍵出力部とを含むことを特徴とする暗号鍵生成装置。
【請求項2】
前記緩増加ベクトル生成部は、平文のビット数をn、分割数をhとし、緩増加ベクトルb=(b,b,・・・,b)として、
【数1】

を満たすベクトルを緩増加ベクトルとして生成するものであり、
【数2】

は(i−1)/hを超えない最大の整数であることを特徴とする請求項1に記載の暗号鍵生成装置。
【請求項3】
前記法M生成部は、緩増加ベクトルb=(b,b,・・・,b)とし、平文のビット数をn、分割数をhとして、
【数3】

を満たす整数Mを法Mとして生成するものであり、
【数4】

は(n−1)/hを超えない最大の整数であることを特徴とする請求項1または2に記載の暗号鍵生成装置。
【請求項4】
公開鍵として分割数と公開鍵ベクトルとを含む公開鍵の入力を受け付ける公開鍵受信部と、
平文の入力を受け付ける平文入力部と、
公開鍵ベクトルと平文とから少なくとも分割数個の暗号文を生成する暗号文生成部とを含み、
前記公開鍵ベクトルは、緩増加ベクトルの要素をモジュラ乗算変換することで生成されたものであり、
前記緩増加ベクトルは、前記平文のビット数と同数の要素を持つベクトルであり、当該ベクトルの要素を分割数ごとに間引きすることにより得られる分割数個の分割ベクトルが超増加となることを特徴とする暗号化装置。
【請求項5】
前記暗号文生成部は、公開鍵ベクトルの要素の加算先を少なくとも分割数個用意し、平文のパターンに基づいて加算先を変更することにより少なくとも分割数個の暗号文を生成することを特徴とする請求項4に記載の暗号化装置。
【請求項6】
前記暗号文生成部は、公開鍵ベクトルの要素に対応する緩増加ベクトルの要素の値が大きい方から順に、公開鍵ベクトルの要素を加算することを特徴とする請求項4または5に記載の暗号化装置。
【請求項7】
暗号文として複数個の暗号文を含む暗号文の入力を受け付ける暗号文受信部と、
秘密鍵として緩増加ベクトルを含む秘密鍵に基づいて前記暗号文を復号する復号部とを含み、
前記緩増加ベクトルは、当該ベクトルの要素を分割数ごとに間引きすることにより得られる分割数個の分割ベクトルが超増加となるベクトルであり、
前記暗号文は、前記緩増加ベクトルの要素をモジュラ乗算変換することで生成された公開鍵ベクトルに基づいて暗号化されたものであることを特徴とする復号装置。
【請求項8】
前記復号部は、前記複数個の暗号文のひとつと緩増加ベクトルの要素との大小比較を行い、前記複数個の暗号文のひとつが緩増加ベクトルの要素以上となるたびに比較対象とする暗号文を変更することを含むことを特徴とする請求項7に記載の復号装置。
【請求項9】
ベクトルの要素を分割数ごとに間引きすることにより得られる分割数個の分割ベクトルが超増加となる緩増加ベクトルを生成するステップと、
任意の分割ベクトルにおける要素の総和よりも大きな整数を法Mとして生成するステップと、
法Mと互いに素である乗数を生成するステップと、
緩増加ベクトルの要素と乗数との積について法Mを法とするモジュラ乗算変換することにより公開鍵ベクトルを生成するステップと、
分割数と公開鍵ベクトルとを公開鍵として出力するステップとをプロセッサに実行させることを特徴とする暗号鍵生成方法。
【請求項10】
ベクトルの要素を分割数ごとに間引きすることにより得られる分割数個の分割ベクトルが超増加となる緩増加ベクトルを生成する機能と、
各分割ベクトルにおける要素の総和の最大値よりも大きな整数を法Mとして生成する機能と、
法Mと互いに素である乗数を生成する機能と、
緩増加ベクトルの要素と乗数との積について法Mを法とするモジュラ乗算変換することにより公開鍵ベクトルを生成する機能と、
分割数と公開鍵ベクトルとを公開鍵として出力する機能とをコンピュータに実現させることを特徴とするプログラム。
【請求項11】
組み合わせ最適化問題の困難性により安全性を担保する暗号の鍵を生成する暗号鍵生成装置であって、
ベクトルの要素を分割数ごとに間引きすることにより得られる分割数個の分割ベクトルが超増加となるベクトルを暗号鍵として生成することを特徴とする暗号鍵生成装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2010−256549(P2010−256549A)
【公開日】平成22年11月11日(2010.11.11)
【国際特許分類】
【出願番号】特願2009−105254(P2009−105254)
【出願日】平成21年4月23日(2009.4.23)
【出願人】(593165487)学校法人金沢工業大学 (202)
【Fターム(参考)】