JP4208230B2 - 配列出力装置、配列出力方法、暗号化装置、および復号化装置 - Google Patents

配列出力装置、配列出力方法、暗号化装置、および復号化装置 Download PDF

Info

Publication number
JP4208230B2
JP4208230B2 JP2002299549A JP2002299549A JP4208230B2 JP 4208230 B2 JP4208230 B2 JP 4208230B2 JP 2002299549 A JP2002299549 A JP 2002299549A JP 2002299549 A JP2002299549 A JP 2002299549A JP 4208230 B2 JP4208230 B2 JP 4208230B2
Authority
JP
Japan
Prior art keywords
array
integer
initial
unit
elements
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 - Lifetime
Application number
JP2002299549A
Other languages
English (en)
Other versions
JP2003195755A (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.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial 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 Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Priority to JP2002299549A priority Critical patent/JP4208230B2/ja
Publication of JP2003195755A publication Critical patent/JP2003195755A/ja
Application granted granted Critical
Publication of JP4208230B2 publication Critical patent/JP4208230B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Description

【0001】
【発明の属する技術分野】
本発明は、整数値を配列に変換する配列出力装置に関するものであり、特に、情報セキュリティ技術としての暗号技術、誤り訂正技術、およびデジタル署名技術に利用される配列出力装置に関するものである。
【0002】
【従来の技術】
秘密通信方式とは、特定の通信相手以外に通信内容を漏らすことなく通信を行う方式である。またデジタル署名方式とは、通信相手に通信内容の正当性を示したり、通信元がその本人であることを証明したりする通信方式である。この署名方式には公開鍵暗号と呼ばれる暗号方式を用いる。公開鍵暗号は通信相手が多数の時、通信相手ごとに異なる暗号鍵を容易に管理するための方式であり、多数の通信相手と通信を行うのに不可欠な基盤技術である。簡単に説明すると、これは暗号化鍵と復号化鍵が異なり、復号化鍵は秘密にするが、暗号化鍵を公開する方式である。公開鍵暗号については、岡本 龍明、山本 博資、“現代暗号”、産業図書、1997(非特許文献1と呼ぶ)が詳しい。
【0003】
この公開鍵暗号の1つとして、NTRU暗号と呼ばれる暗号がある。このNTRU暗号は、楕円曲線暗号に比べ暗号化のコードサイズが小さく、家電用機器で使用される非力なCPUでも実装可能であり、将来有望な暗号方式である。
【0004】
このNTRU暗号については、Jeffrey Hoffstein, Jill Pipher and Joseph H.Silverman,“NTRU:A ring based public key cryptosystem”,Lecture Notes in Computer Science、1423,pp.267−288,Springer−Verlag,1998(非特許文献2と呼ぶ)に詳しく述べられている。
【0005】
ここで、NTRU暗号について説明する。
一般的にすべての多項式f(X)は、f(X)=f+fX+f+・・・+fN−1N−1mod(X−1)で表される。
【0006】
以下、多項式f(X)をn次元のベクトルであるベクトル(f,f,f・・・,fN−1)と対応づけて表す。また、このn次元のベクトルのうち、n1個が1、n2個が−1、その他の(n−n1−n2)個が0であるベクトルをL(n,n1,n2)と表す。
【0007】
このNTRU暗号では、秘密にされる復号化鍵(以下、秘密鍵と称する)f(v),Fp(v)は、次の式で表される。尚、以下f(v),Fp(v)などの(v)を付した符号は、多項式を表している。
秘密鍵f(v)∈多項式の集合Lf、多項式の集合Lf=L(263,51,50)
秘密鍵Fp(v)=秘密鍵f(v)−1(mod p)
すなわち、多項式の集合Lfは、係数f,f,f・・・,fN−1のうち1が51個、−1が50個、0が162個である多項式の集合であり、秘密鍵fはこの多項式の集合Lfに属する多項式である。またpは整数であり、例えば3である。
【0008】
一方、公開される暗号化鍵(以下、公開鍵と称する)h(v)は、次の式で表される。
公開鍵h(v)=秘密鍵f(v)−1×多項式g(v)(mod q)
多項式g(v)∈多項式の集合Lg=L(263,24,24)
ここで、公開鍵h(v)は多項式である。また、qは例えば2の整数である。
【0009】
NTRU暗号では、この公開鍵h(v)を用いて次式を基に暗号化される。この暗号化において、メッセージm1(v)の入力に対して、暗号文e1(v)が出力される。
暗号文e1(v)=p 多項式φ(v)×公開鍵h(v)+m1(v)(mod q)
多項式φ(v)∈多項式の集合Lφ=L(263,16,16)
ここで、多項式φ(v)は多項式の集合Lφからランダムに選ばれる。
【0010】
一方、暗号文e1(v)は、上記秘密鍵f(v)、Fp(v)を用いて次の2段階で復号化され、メッセージm1’(v)が得られる。
(1)a(v)=秘密鍵f(v)×暗号文e1(v)(mod q)
(2)m1’(v)=秘密鍵Fp(v)×a(v)(mod p)
【0011】
ところで、暗号解読の方法には、受動的攻撃と能動的攻撃があり、RSA暗号、ElGamal暗号、NTRU暗号などの暗号では、受動的攻撃のみを考慮して作られている。受動的攻撃、能動的攻撃、RSA暗号、ElGamal暗号については、「非特許文献1」に詳しく述べられている。
【0012】
また最近では、一般の暗号方式を、どのような攻撃に対しても安全性を高くする暗号アルゴリズム改良技術である安全性証明スキームに変換する安全性証明スキーム化技術が提案されている。
【0013】
その安全性証明スキーム化技術に、FOSRTと呼ばれるハッシュ関数を用いる手法がある。
【0014】
FOSRT及び、NTRU暗号にFOSRTを適用する点については、Jeffrey Hoffstein and Joseph H.Silverman,“Protecting NTRU Against Chosen Ciphertext and Reaction Attacks”,NTRU Cryptosystems Technical Report #016,2000(非特許文献3と呼ぶ)、ハッシュ関数については、「非特許文献1」に詳しく述べられている。
【0015】
このFOSRTの具体的な方法を次に説明する。
このFOSRTによる暗号化は、次の3段階で行われ、メッセージMの入力に対して、暗号文Eが出力される。
(第1段階)メッセージMに乱数R1が連結され、連結されたメッセージM‖R1を得る。
(第2段階)ハッシュ関数を基に、メッセージM‖R1のハッシュ関数値haを得る。
ha=H(M‖R1)
(第3段階)メッセージM‖R1とハッシュ関数値haを暗号化のアルゴリズムを基に暗号化し、暗号文Eを得る。
E=Enc(M‖R1,ha)
【0016】
次に、FOSRTによる復号化を説明する。
(第1段階)暗号文Eを復号化して、メッセージM‖R1’を得る。
Dec(E)=M‖R1’
(第2段階)ハッシュ関数を基に、メッセージM‖R1’のハッシュ関数値ha’を得る。ha’=H(M‖R1’)
(第3段階)メッセージM‖R1’、ハッシュ関数値ha’、および上記暗号化と同一のアルゴリズムを基に暗号化し、暗号文E’を得る。
E’=Enc(M‖R1’,ha’)
(第4段階)暗号文Eと暗号文E’が一致しない場合は出力なし、一致する場合は、メッセージM‖R1’をメッセージM’と乱数R1’に分解し、所望のメッセージM’を得る。
このFOSRTをNTRU暗号に適用したときの、暗号化と復号化の方法を次に示す。
【0017】
暗号化は3段階について行われ、入力されたメッセージM(v)に対して暗号文e(v)を出力する。(第1段階)メッセージM(v)にランダムなベクトルR(v)を連結して、メッセージm(v)を得る。m(v)=M(v)‖R(v)(第2段階)ハッシュ関数を基に、メッセージm(v)のハッシュ関数値H(m(v))を計算する。(第3段階)暗号文e(v)=p・H(m(v))×公開鍵h(v)+m(v)(mod q)の式を基に暗号文e(v)を得る。
【0018】
一方、暗号文e(v)の復号化は次の5段階で行われる。(第1段階)a(v)=秘密鍵f(v)×暗号文e(v)(mod q)を基に多項式a(v)を求める。(第2段階)m’(v)=秘密鍵Fp(v)×a(v)(mod p)を基にメッセージm’(v)を求める。(第3段階)メッセージm’(v)のハッシュ関数値H(m’(v))を計算し、暗号文e’(v)=p・H(m’(v))×公開鍵h(v)+m’(v)(mod q)を基に、暗号文e’(v)を求める。(第4段階)暗号文e’(v)と暗号文e(v)が一致するかをチェックする。(第5段階)暗号文e’(v)と暗号文e(v)が一致する場合に、m’(v)=M’(v)‖R’(v)(M’(v)は復号されたメッセージ、R’(v)はランダムなベクトル)に分解し、メッセージM’(v)を出力する。
【0019】
このようにFOSRTをNTRU暗号に適用したときの暗号化、および復号化において、ハッシュ関数値H(m(v))、H(m’(v))は、例えばL(263,16,16)で表される多項式の集合Lφに属する必要がある。
【0020】
この多項式の集合Lφは、その係数f,f,f・・・,fN−1のうち1が16個、−1が16個、0が231個であるベクトルの集合に対応づけられる。
そのため、ハッシュ関数値に対応させて、この16個の1,16個の−1,231個の0の3値からなるn次元配列を求める必要がある。
【0021】
しかし、FOSRTをNTRU暗号に適用したときの暗号化、および復号化において、このハッシュ関数値H(m(v))、H(m’(v))は整数値となる。
そのため、NTRU暗号にFOSRTを適用するために、ハッシュ関数値H(m(v))、H(m’(v))に基づく、n1個の要素が1、n2個の要素が−1、その他の要素が0であるn次元配列を求めなければならない(ここで、n、n1、n2は正の整数である)。
【0022】
ここで、ハッシュ関数値H(m(v))、H(m’(v))に基づくn次元の配列を求める方法において、以下に示すような条件を満たす必要がある。
(1)同じ入力に対して、いつも同じ出力が対応する。
(2)入力と出力の分布が偏らない。(1)は、同じ入力に対して、異なる値を出力しないことである。(2)は、入力に対して、ある出力値だけ、頻繁に現れることのないということである。NTRU暗号にFOSRTを適用する場合は、出力のn次元配列を送信者、受信者共に、作成可能でないと復号が不可能であるため、(1)を満たさなければ、暗号方式自体が成り立たない。また、(2)を満たさなければ、ハッシュ関数値の出力値に基づいて一様に配列が出力されないため、ハッシュ関数の入力に対する出力の分布の一様性が保持されない。従って、ハッシュ関数の安全性を落とすことになり、FOSRTを適用した時のNTRU暗号の安全性が低下することになる。
【0023】
ここで、1個の要素が1、n2個の要素が−1、その他の要素が0であるn次元の配列を求める自明な方法について述べる。
図19は、n次元の配列を求める方法を示すフローチャートである。
この変換方法は、入力をハッシュ関数値としての整数Xと、n1、およびn2とし、n1個の要素が1、n2個の要素が−1、その他の(n−n1−n2)個の要素が0であるn次元の配列VJを出力する。以下では、配列VJの(左から)i番目の要素をVJ[i](但しiは1からnまでの整数)とする。
【0024】
まず、配列VJを全ての要素が0の配列とする(ステップS901)。
次に、カウンタc1’のカウント値c1を1とする(ステップS902)。
次に、VJ[c1]=1とする(ステップS903)。
次に、カウンタc1’のカウント値c1をカウントアップする(ステップ9004)。
次に、カウント値c1>n1であるかを判定し(ステップS905)、カウント値c1>n1でない場合(ステップS905のNo)、再度、VJ[c1]=1の処理を行う(ステップS903)。
【0025】
一方、カウント値c1>n1の場合(ステップS905のYes)、VJ[c1]=−1とする(ステップS906)。
次に、カウント値c1をカウントアップする(c1←c1+1)(ステップS907)。
次に、カウント値c1>n1+n2であるかを判定し(ステップS908)、カウント値c1>n1+n2でない場合(ステップS908のNo)、再度、VJ[c1]=−1の処理を行う(ステップS906)。
【0026】
一方、カウント値c1>n1+n2の場合(ステップS908のYes)、配列VJを出力し、処理を終了する。
【0027】
この方法では、出力される配列VJは、入力される整数Xに依らず、はじめのn1個の要素が1、その後のn2個の要素が−1、その他の要素が0の配列になっている。
【0028】
一方、秘密通信方式として、送信したいメッセージを鍵で暗号化し、同じ鍵を用いて復号する共通鍵暗号方式がある。共通鍵暗号方式の中には、データの置換操作で暗号文を作成する方法がある。例えば、以下のような方法である。
【0029】
この置換方法は、入力を配列m[1]、m[2]、…、m[n]と、鍵Ke(正の整数)とし、暗号文e[1],e[2],…,e[n]を出力する。以下では、予め2次元テーブルTab[j][i](1≦j≦n!,1≦i≦n)を持っているものとする。
【0030】
まず、カウンタc’のカウント値cを1に設定する。
次に、e[Tab[K][c]]にm[c]を代入する。この処理は、カウンタc’のカウント値cがnとなるまで行う。
そして、カウンタc’のカウント値cがnとなると、暗号文eを出力して、処理を終了する。
このような置換方法を上述したハッシュ関数値に基づいたn次元の配列を求める方法に適用することも考えられるが、n*n!個のテーブルが必要となる。
【0031】
【非特許文献1】
岡本 龍明、山本 博資、“現代暗号”、産業図書、1997
【0032】
【非特許文献2】
Jeffrey Hoffstein, Jill Pipher and Joseph H.Silverman,“NTRU:A ring based public key cryptosystem”,Lecture Notes in Computer Science、1423,pp.267−288,Springer−Verlag,1998
【0033】
【非特許文献3】
Jeffrey Hoffstein and Joseph H.Silverman,“Protecting NTRU Against Chosen Ciphertext and Reaction Attacks”,NTRU Cryptosystems Technical Report #016,2000
【0034】
【発明が解決しようとする課題】
しかしながら、上述したn次元の配列を求める自明な方法では、出力が1種類に偏っているため、上述した条件(2)(入力と出力の分布が偏らない)を満たさない。この時、FOSRTを適用したことの効果がなくなる上に、受動攻撃に対しても安全性が弱くなってしまう。従って、この方法を用いて、NTRU暗号にFOSRTを適用した時のNTRU暗号の安全性が低下するという問題がある。
【0035】
また、上述した共通鍵暗号として使用される置換方法を、n次元配列を求める時に適用しても、メモリテーブルを使用するため、多くのメモリを必要とするという問題がある。
【0036】
本発明は、上述した問題点を鑑みて行われたもので、多くのメモリを使用することなく、ハッシュ関数値の出力値などの整数値に基づいて一様にn次元の配列を出力する配列出力装置を提供することを目的とする。
【0037】
【課題を解決するための手段】
上記目的を達成するために、本発明に係る配列出力装置は、入力された整数に依存して、K値の整数の組み合わせからなるn次元の様々な配列を出力する配列出力装置であって、初期配列を暫定的に決定する初期配列決定手段と、前記入力された整数に基づいて、前記初期配列決定手段が決定した前記初期配列の配列要素を改編する改編手段とを備えることを特徴とする。
【0038】
また、前記初期配列決定手段は、K値の整数の組み合わせからなるn次元の配列の1つを初期配列として暫定的に決定し、前記改編手段は、前記入力された整数に基づいて、前記初期配列決定手段が決定した前記初期配列の配列要素を置換し出力する構成としてもよい。
【0039】
また、前記初期配列決定手段は、すべての配列要素がK値のうちのいずれかの整数P3である配列を初期配列として暫定的に決定し、前記改編手段は、前記初期配列決定手段が決定した前記初期配列における整数P3の配列要素のうち前記入力された整数に基づく位置の配列要素をK値の他の整数P1に置き換えて出力する構成としてもよい。
【0040】
また、前記入力された整数は複数のビット情報で示されており、前記改編手段は、前記入力された整数を、所定数のビット情報からなる個々の分割情報に分割する分割部と、前記初期配列における整数P3の配列要素のうち、前記分割情報に基づく位置の配列要素をK値の他の整数P1に置き換える第3の整数配置部とを備える構成としてもよい。
【0041】
また、入力された整数に依存して、K値の整数の組み合わせからなるn次元の様々な配列を出力する配列出力方法であって、初期配列を暫定的に決定する初期配列決定ステップと、前記入力された整数に基づいて、前記初期配列決定ステップで決定した前記初期配列の配列要素を改編する改編ステップとを備えることを特徴とする。
【0042】
また、メッセージを暗号化する暗号化装置であって、メッセ−ジを一方向関数で演算し、その結果を関数値として出力する関数値出力手段と、初期配列を暫定的に決定する初期配列決定手段、および前記関数値出力手段が出力する関数値に基づいて、前記初期配列決定手段が決定した前記初期配列の要素を改編する改編手段を備え、前記関数値に依存して、K値の整数の組み合わせからなるn次元の様々な配列を出力する配列出力手段と、前記配列出力手段が出力する配列を基に、暗号文を生成する暗号文生成手段とを備えることを特徴とする。
【0043】
【発明の実施の形態】
(実施の形態1)
以下、本発明における第1の実施の形態に係る暗号化装置について図面を用いて説明する。
図1(a)は本発明における第1の実施の形態に係る暗号化装置の構成を示すブロック図である。
【0044】
暗号化装置10は、乱数生成部20と、連結部30と、ハッシュ関数部40と、配列出力部100と、暗号文生成部50とを備えており、取得したメッセージM(v)、および公開鍵h(v)を基に暗号文e(v)を生成し出力する。以下、メッセージM(v),公開鍵h(v),暗号文e(v)などの(v)を付した符号は多項式を示している。また、従来例と同じものには同じ符号を付している。
【0045】
この暗号化装置10を構成する乱数生成部20と、連結部30と、ハッシュ関数部40と、配列出力部100と、暗号文生成部50は、それぞれマイクロコンピュータのソフトウェアにより処理を実行しており、CPUやメモリなどを用いて処理が行われる。
【0046】
この暗号化装置10は、従来例において説明したように、NTRU暗号に安全性証明スキームのFOSRTを適用して、NTRU暗号の安全性をさらに高くした暗号を生成する。
乱数生成部20は、ランダムなベクトルR(v)を生成する。
【0047】
連結部30は、乱数生成部20が生成したベクトルR(v)とメッセージM(v)とを連結して、メッセージm(v)を生成し、ハッシュ関数部40と暗号文生成部50に出力する。
【0048】
ハッシュ関数部40は、メッセージm(v)を一方向関数であるハッシュ関数で演算しハッシュ関数値H(m)を求め、配列出力部100に出力する。ここで、ハッシュ関数は一方向関数であり、ハッシュ関数部40より出力されるハッシュ関数値H(m)は整数であり、以下、整数Xという。
【0049】
配列出力部100は、ハッシュ関数部40より出力される整数Xに基づいたn次元の配列Vを生成し暗号文生成部50に出力する。
【0050】
暗号文生成部50は、配列出力部100から出力されるn次元の配列Vに対応する多項式φ(v)と、連結部30からのメッセージm(v)と、公開鍵h(v)と、暗号文e(v)=p多項式φ(v)×公開鍵h(v)+m(v)(modq)の式とを基に暗号文e(v)を生成し、外部に出力する。p,qは整数であり、pは例えば3、qは例えば2である。
【0051】
一方、図1(b)は本発明における第1の実施の形態に係る復号化装置の構成を示すブロック図である。
【0052】
この復号化装置15は、復号部25と、ハッシュ関数部45と、配列出力部105と、暗号文生成部55と、判定部65と、分割部35とを備えており、入力された暗号文e(v)、秘密鍵f(v),Fp(v)、および公開鍵h(v)を基に、暗号化装置10が暗号化した暗号文e(v)を復号し、元のメッセージM’(v)を出力する。
【0053】
この復号化装置15を構成する復号部25と、ハッシュ関数部45と、配列出力部105と、暗号文生成部55と、判定部65と、分割部35は、それぞれマイクロコンピュータのソフトウェアにより処理を実行しており、CPUやメモリなどを用いて処理を行う。
【0054】
復号部25は、次式を基に入力された暗号文e(v)より元のメッセージに対応する復号値であるメッセージm’(v)を得る。
a(v)=秘密鍵f(v)×暗号文e(v)(mod q)
m’(v)=秘密鍵Fp(v)×a(v)(mod p)
【0055】
ハッシュ関数部45は、メッセージm’(v)のハッシュ関数値H(m’)を演算し、配列出力部105に出力する。ハッシュ関数部45より出力されるハッシュ関数値H(m’)は整数であり、以下、整数X’という。
【0056】
配列出力部105は、ハッシュ関数部45より出力される整数X’に基づいてn次元の配列V’を生成し暗号文生成部55に出力する。
【0057】
暗号文生成部55は、配列出力部105から出力されるn次元の配列V’に対応する多項式φ’(v)と、復号部25からのメッセージm’(v)と、公開鍵h(v)と、暗号文e’(v)=p多項式φ’(v)×公開鍵h(v)+m’(v)(mod q)の式とを基に暗号文e’(v)を生成し、判定部65に出力する。
【0058】
判定部65は、暗号文e(v)と、暗号文e’(v)とを入力し、両者が一致するかを判定し、一致したと判定するとメッセージm’(v)を分割部35に出力する。
【0059】
分割部35は、判定部65からのメッセージm’(v)をメッセージM’(v)とランダムなベクトルR’(v)に分解し、元のメッセージM’(v)を出力する。
【0060】
次に、暗号化装置10における配列出力部100について図面を用いて説明する。尚、復号化装置15における配列出力部105は、配列出力部100と同様の構成であり、同様の動作をするため、説明を省略する。
【0061】
図2は、配列出力部100の構成を示すブロック図である。
この配列出力部100は、整数Xを入力とし、L(n,n1,n2)に属する配列Vを出力する。ここで、L(n,n1,n2)は、n1個の要素が1、n2個の要素が−1、その他の(n−n1−n2)個の要素が0であるn次元配列全体であり、このn、n1、n2は配列出力部100に予め設定されているものとする。配列出力部100は、初期配列決定部110と配列要素置換部120からなる。
【0062】
初期配列決定部110は配列Vの初期決定を行うものであり、以下のような初期決定配列V1を出力する。
(1)V1[i]=1(1≦i≦n1)
(2)V1[i]=−1(n1+1≦i≦n1+n2)
(3)V1[i]=0(n1+n2+1≦i≦n)
【0063】
ここで、V1[i]を初期決定配列V1の(左から)i番目(iは1からnまでの整数)の配列要素(要素)とする。
【0064】
図3は、配列出力部100による各段階での配列Vの配列状態を示す図である。図3では、例えばL(8,3,2)の場合(n=8,n1=3,n2=2)における配列Vの各配列状態を示している。図3において、1番上の配列状態は、初期配列決定部110により決定された初期決定配列V1を示している。
【0065】
配列要素置換部120は、初期配列決定部110より出力された初期決定配列V1と、整数Xを入力とし、n1個の要素が1、n2個の要素が−1、その他の(n−n1−n2)個の要素が0であるn次元の配列Vを出力する。すなわち、初期配列決定部110が決定した初期決定配列V1の配列要素を改編する。
【0066】
以下、配列要素置換部120の行う処理を説明する。
図4は、配列要素置換部120の行う処理を示すフローチャートである。
以下では、カウンタc’の値をカウント値cとする。
【0067】
まず、配列要素置換部120は、整数Xを変数Yに、初期決定配列V1を配列Vに代入する。即ち、全てのi(iは1からnまでの整数)に対して、V1[i]をV[i]に代入する(ステップS101)。
【0068】
次に、配列要素置換部120は、カウンタc’のカウント値cをnに設定する(ステップS102)。
【0069】
次に、配列要素置換部120は、変数Yをカウント値cで割った商をS、余り(剰余)をRとする(ステップS103)。
【0070】
次に、配列要素置換部120は、tmp←V[c]とする(ステップS104)。すなわち、レジスタtmpに配列Vのc番目の要素V[c]を代入する。
【0071】
次に、配列要素置換部120は、V[c]←V[R+1]とする(ステップS105)。すなわち、配列Vの(R+1)番目の要素を配列Vのc番目の要素に代入する。
【0072】
次に、配列要素置換部120は、V[R+1]←tmpとする(ステップS106)。すなわち、レジスタtmpの内容を配列Vの(R+1)番目の要素に代入する。
【0073】
このtmp=V[c]、V[c]=V[R+1]、V[R+1]=tmpの処理(ステップS104からステップS106)により、配列Vのc番目の要素と(R+1)番目の要素が入れ替わる。
【0074】
次に、配列要素置換部120は、変数Yに商Sを代入する(ステップS107)。
次に、配列要素置換部120は、カウント値cが2であるか否かを判定し(ステップS108)、カウント値cが2であると判定した場合(ステップS108のYes)、配列要素置換部120は、配列Vを出力して(ステップS110)、処理を終了する。
【0075】
一方、配列要素置換部120は、カウント値cが2でないと判定した場合(ステップS108のNo)、カウント値cをカウントダウン(c←c−1)して(ステップS109)、再度、変数Yをカウント値cで割った商をS、余りをRとする処理(ステップS103)に移る。
【0076】
このように、配列要素置換部120は、カウンタc’のカウント値cがnから2の各場合において、商S、余りRを求める処理(ステップS103)からカウント値cをカウントダウンする処理(ステップS109)までの各ステップの処理を繰り返す。これにより、配列Vの各要素が入れ替わり、カウント値c=2での処理が終了すると、配列要素置換部120は配列Vを出力する。
【0077】
ここで、配列出力部100全体の動作を説明する。配列出力部100は、まず初期配列決定部110が、はじめのn1個の要素が1、続くn2個の要素が−1、その他の要素が0であるn次元配列の初期決定配列V1を決定して、配列要素置換部120に出力する。
【0078】
次に配列要素置換部120は、初期配列決定部110から出力された初期決定配列V1と、配列出力部100に入力された整数Xを取得し、初期決定配列V1の各要素を、整数Xを基に入れ替えて、n1個の要素が1、n2個の要素が−1、その他の要素が0であるn次元の配列Vを出力する。
【0079】
この配列出力部100の動作を、具体例を用いて説明する。
この配列出力部100の動作を説明する際、例えば実際に入力される整数X=39356、n=8、n1=3,n2=2を用いて説明する。
【0080】
まず、初期配列決定部110は、n=8、n1=3,n2=2を満たす初期決定配列V1を決定し、配列要素置換部120に出力する(図3参照)。
そして、配列要素置換部120は、入力された整数Xを変数Yに代入し、変数Y=39356とし、配列Vに初期決定配列V1を代入する(ステップS101)。
【0081】
次に、配列要素置換部120は、カウント値c=8とする(ステップS102)。
次に、配列要素置換部120は、商Sと余りRを演算し、商S=4919、余りR=4とする(ステップS103)。
【0082】
次に、配列要素置換部120は、配列Vの(R+1)番目、すなわち5番目の要素である「−1」と8番目の要素である「0」を入れ替え(ステップS104〜ステップS106)、図3の配列V2に示す配列状態とする。
次に、配列要素置換部120は、変数Yに4919を代入する(ステップS107)
【0083】
そして、カウント値c=8でありカウント値c=2でないため(ステップS108のNo)、配列要素置換部120は、カウント値cをカウントダウンしてカウント値c=7とする(ステップS109)。
【0084】
そして、配列要素置換部120は、再度、変数Y=4919、カウント値c=7より、商Sおよび余りRを演算し、商S=702、余りR=5とする(ステップS103)。
【0085】
次に、配列要素置換部120は、配列Vの左から6番目の要素である「0」と7番目の要素である「0」を入れ替え(ステップS104〜ステップS106)、図3の配列V3に示す配列状態とする。
【0086】
このように、配列要素置換部120は、カウント値cがnから2であるそれぞれの場合において、変数Yをカウント値cで割ったときの商Sと余りRに基づいて、配列Vの要素の入れ替えを行い(ステップS103→ステップS109の処理の繰り返し)、初期決定配列V1の各要素の入れ替え処理を行う。そして、カウント値c=2である場合の上記処理が終了すると、配列要素置換部120は配列Vを出力する。
【0087】
ここで、配列出力部100から出力される配列Vが入力される整数Xに基づいて一様に分布していることを説明する。
配列出力部100は、0≦X≦(n!−1)(但しn!は「nの階乗」を示す。具体的には、n!=n×(n−1)×…×2×1である。)を満たす整数Xに基づいて一様に配列L(n,n1,n2)を出力している。以下では、Xを0≦X≦(n!−1)を満たすXに限定して、説明を行う。
【0088】
配列要素置換部120では初期決定配列V1の要素の入れ替えを行っている。以下では、配列要素置換部120が行う初期決定配列V1の要素の入れ替えについて具体的に見ていく。また以降の説明を分かり易くするために、上述の配列要素置換部120の構成において、カウント値cがi(i=n,n−1,n−2,…,3,2)の時、R←Ymod c(ステップS103)の処理による余りをR_iとする。
【0089】
全体の説明の流れは、以下の通りである。
(1)入れ替え処理が重複しないことについて説明する。
(2)(1)の結果を利用して、整数Xと配列要素置換部120における処理内容が1対1に対応していることを説明する。
(3)同じ配列を出力する整数Xが何種類あるかを計算する。
この(3)の計算において配列Vに依らず、整数Xの種類の数が同じであることを示すことが可能であるため、入力に対して出力が一様に分布することがいえる。
【0090】
まず(1)の「入れ替え処理が重複しないことについて」について説明する。
以下では、まず、同じ値に対する入れ替えが複数回起こらない、即ち、入れ替え処理の終わった値は、その処理以降の入れ替えの対象にならないことについて説明する。
【0091】
・カウンタc’のカウント値cがnの時
ステップS104、ステップS105、ステップS106の動作(以下、「カウント値cがnの場合の入れ替え処理」と呼ぶ)が意味するところは、初期決定配列V1のn番目の要素V1[n]と、(R_n+1)番目の要素V1[R_n+1]を入れ替えていることである。ここで、R_nは、変数Yをnで割った時の余りであるので、0からn−1までの値を取りうる。
【0092】
・カウント値cがn−1の時
この時は、カウント値cがnである時の入れ替え処理を終えた状態における配列Vのn−1番目の要素と、(R_(n−1)+1)番目の要素を入れ替えている。ここで、R_(n−1)は、変数Yをカウンタの値(n−1)で割った時の余りであるので、0からn−2までの値を取りうる。ゆえに、カウント値cがn−1である時の入れ替え処理を終えた状態の配列Vの(n−1)番目の要素は、カウント値cがnである時の入れ替え処理を終えた時点の配列Vの(R_(n−1)+1)番目の要素になっている。また、カウント値cがnである時の入れ替え処理を終えた状態の配列Vのn番目の要素は、入れ替え対象となっていないことに注意する。
【0093】
・カウント値cがn−2以下の時
カウント値cがn−2以下の場合について考える。この場合、カウント値cがn−1の時と同様である。カウント値cがiの時の入れ替え処理を終えた状態の配列Vのi番目の要素は、カウント値cが(i+1)の時の入れ替え処理を終えた状態の配列Vの(R_i+1)番目の要素になっている。ここで、カウント値cが(i+1)の時の入れ替え処理は、カウント値cがiの時の入れ替え処理の前に行われることを注意しておく。またこれ以降、配列Vのi番目の要素は、他の値と入れ替えられることはない。なぜならばj≦i−1とすると、R_jは変数Yをjで割った時の余りであるから、R_j≦j−1を満たす。よって、(R_j+1)≦i−1<iとなるからである。
【0094】
配列要素置換部120の処理が終了した後、すなわち、カウント値cがnから2までの全ての処理を終えた状態での配列Vの各要素は、初期決定配列V1の各要素を入れ替えたものになっている。
【0095】
次に、配列要素置換部120の処理の一意性について説明する。
以下では、上記の結果(入れ替えが重複しない)を利用して、整数Xと配列要素置換部120における処理内容が1対1に対応していることを説明していく。
【0096】
・整数Xと数列の対応について
整数Xを0≦X≦(n!−1)を満たす整数とする。この時、カウンタc’のカウント値cがcの時のステップS103における変数Yの値をY_c、商Sの値をS_c、余りRの値をR_cとする(R_cの値については先に定義したものと同じである)。この時、ステップS103で行われていることを式で表現すると、
Y_c=c×S_c+R_cとなる。但し、0≦R_c≦(c−1)である。またステップS107で行われていることを式で表現すると、
Y_(c−1)=S_cとなる。
【0097】
これを、c=n、(n−1)、…、2の場合に当てはめて整理すると、X=Y_nであることに注意して、
Figure 0004208230
【0098】
ここで、R_iは、0≦R_i≦i−1を満たす整数である。整数Xから、R_2,R_3,…,R_(n−2),R_(n−1),R_nが一意的に決まるのは明らかである。また逆も明らかである。よって、0≦X≦(n!−1)なる整数Xと、R_2,R_3,…,R_(n−2),R_(n−1),R_nは1対1に対応していることが分かる。
【0099】
・数列と入れ替えの対応について
先に述べたように、本実施の形態1においては、初期決定配列V1を、整数Xに従って各要素を入れ替えて配列Vを出力するわけである。先にも述べたように、その入れ替えは、数列R_n,R_(n−1),R_(n−2),…,R_3,R_2により定まる。なぜならば、カウント値cがnである時の入れ替え処理終了時点での配列Vのn番目の要素は、初期決定配列V1の(R_n+1)番目の要素である。以降は、配列Vのn番目の要素は入れ替わらない。同様にして、カウント値cがiの時の入れ替え処理終了時点での配列Vのn番目の要素は、カウント値cが(i+1)の時の入れ替え処理終了時点での配列Vの(R_i+1)番目の要素である。以降は、配列Vのi番目の要素は入れ替わらない。即ち、Vのn番目からi番目の要素までは変わらない。またカウント値cが(i+1)時の入れ替え処理終了時点での配列Vは、数列R_n、R_(n−1)、…、R_(i+1)により定まっているからである。
【0100】
また、初期決定配列V1のn個の要素の入れ替え方は、「n個の元の置換」と考えられる。任意の「n個の元の置換」に対して、その置換は上に説明した配列要素置換部120の処理内容により実現できる。以下にその説明を行う。置換の表現として、入力であるn個の順序付要素V[1],V[2],…,V[n]を置換した結果である順序列を用いることにする。例えば、
(V[σ1],V[σ2],…,V[σn])で1つの置換を表す。但し集合として{1,2,…,n}={σ1,σ2,…,σn}である。
【0101】
この時、σnの値は、上記R_nの値により定まることは明らかである。またσ(n−1)の値も、R_n,R_(n−1)の値により定まり、σnの値とは異なる全ての値から一様に選ばれることは明らかである。以下同様にして、σiの値は、R_n,R_(n−1),…,R_(i+1)の値により定まり、σn,σ(n−1),…,σ(i+1)の値とは異なる全ての値から決まる。よって、上記配列要素置換部120の処理により、初期決定配列V1の全ての置換方法が決まっている。即ち、0≦X≦(n!−1)なる整数Xと、初期決定配列V1の置換方法は1対1に対応していることが分かる。
【0102】
今まで説明してきた議論は、初期決定配列V1の各要素の値が同じであるかどうかは関係なく、各要素の位置情報、即ちインデックスが違えば、違う要素と考えて行ってきた。しかし実際には、初期決定配列V1の各要素は、n1個の1、n2個の−1、(n−n1−n2)個の0から構成されている。出力される配列Vにおいて、1が入っているn1個の要素の位置集合が同じであれば、配列Vの値も同じである。このことは、n2個の−1、(n−n1−n2)個の0についても同様のことが言える。以下では、どれくらい同じ出力配列を出すことがあるかについて説明していく。
【0103】
次に、配列要素置換部120からの出力の一様性について説明する。
先に述べたように、0≦X≦(n!−1)を満たす整数Xと「n個の元の置換」は1対1に対応する。その変換をτとする。配列要素置換部120は、整数Xに対応するτを用いて、τ(V1)をVとして出力していることになる。τからτ(V1)は一意的に決定する。次にあるτ0に対して、
【0104】
τ0(V1)=τ1(V1)となる変換τ1がいくつ存在するかについて説明する。
τ0(V1)におけるn1個の1については、その位置が入れ替わっても、τ0(V1)の値としては変わらない。同様に、n2個の−1についても、(n−n1−n2)の0についても、その位置が入れ替わってもτ0(V1)の結果は変わらない。しかし、1入っている位置と0の入っている位置が入れ替わったり、1の入っている位置と−1の入っている位置が入れ替わったりすると、τ0(V1)の結果が変わってしまう。ゆえに、n1個の1、n2個の−1、(n−n1−n2)個の0内の位置の入れ替えの組み合わせ分しか、取りうるτ1は存在しない。1がn1個であるため、(n1)!種類ある。同様に、−1がn2個、0が(n−n1−n2)個の入れ替えは、それぞれ、(n2)!、(n−n1−n2)!種類ある。従って、τ1は(n1)!×(n2)!×(n−n1−n2)!種類存在する。
【0105】
ゆえに、実施の形態1の配列出力部100は、n!種類の整数Xをn!/((n1)!×(n2)!×(n−n1−n2)!)種類の置換に変換可能であることがいえる。また、一様性については、先の議論が置換の種類に関係なく、n1、n2により決まっていることは明らかである。
【0106】
以上説明したように、配列出力部100は、入力される整数Xに基づいて一様にn次元の配列を出力することができる。また、以上の説明から配列出力部100は、同じ入力に対していつも同じ出力を行うことは明らかである。
【0107】
以上は、X<n!の場合についての議論であるが、X>n!の場合もXをn!で割った余りを取ることによって、同様の議論が可能である。
【0108】
実際のパラメータの場合について説明する。n=263、n1=16、n2=16とする時、L(n、n1、n2)に属する配列は、n!/((n1)!×(n2)!×(n−n1−n2)!)≒2^163種類存在する。ここで、x^yはxのy乗を表している。n!≒2^1741であり、ハッシュ関数の分布の一様性を保持するためには、ハッシュ関数の出力長として、1741ビット以上必要になる。出力が1741ビット以上のハッシュ関数は現在のところ存在しないが、ハッシュ関数を用いて、ハッシュ関数の出力長より長いハッシュ関数値を計算する方法がある。そのため、出力が1741ビット以上のような長いハッシュ関数値が必要であっても、安全な暗号方式の構成することを妨げるような問題にはならない。
【0109】
このように本実施の形態によれば、配列出力部100は、入力された整数Xに基づいて一様にn次元の配列を出力することができる。そのため、NTRU暗号にFOSRTを適用した場合において、配列出力部100は、ハッシュ関数部40より出力されるハッシュ関数値H(m)を基に、一様にn次元の配列を出力することができ、ハッシュ関数部40によるハッシュ関数の分布の一様性を保持することが可能となる。従って、暗号化装置10は、安全性の高い暗号文e(v)を生成することができる。
【0110】
さらに、配列出力部100は、整数Xのみに基づいて配列Vを設定しているため、メモリテーブルを用いる必要がなく、メモリが少なくてよいという効果が得られる。
【0111】
また、図1(b)の復号化装置15の配列出力部105も配列出力部100と同様の構成をしており、暗号化装置10が暗号化した暗号文の復号が可能となる。
【0112】
尚、本実施の形態では、暗号化装置10および復号化装置15を構成する各部が行う処理は、マイクロコンピュータのソフトウェアで行うものとしたが、電子回路やICなどのハードウェアで動作するようにしてもよい。
【0113】
また、配列出力部100を暗号化装置10に用いて、ハッシュ関数値を基に配列を出力する構成としたがこれに限定されない。
【0114】
さらに、図2に示した配列出力部100は、初期配列決定部110と配列要素置換部120とを備え、初期配列決定部110が決定した初期決定配列V1の各要素を配列要素置換部120が整数Xを基に置換する構成であるが、整数Xと予め設定された初期決定配列V1を入力とし、その初期決定配列V1を、整数Xを基に置換して配列Vを出力する配列要素置換部120と同様の処理を行う構成の配列出力部(以下、配列出力部100aという)であってもよい。
【0115】
このような構成の配列出力部100aは、配列要素置換部120と同様の処理を行うため、ハッシュ関数の分布の一様性を保持することができ、さらにテーブルを用いず、整数Xのみの情報より配列V1を置換しているため、メモリが少なくてよいという効果が得られる。
【0116】
また、配列出力部100aは、整数Xを鍵、初期決定配列V1をメッセージ、配列Vを暗号文とする暗号装置または、暗号方法であってもよい。また、配列出力部100aを使用する暗号装置または、暗号方法であってもよい。
【0117】
(実施の形態2)
以下、本発明における第2の実施の形態に係る暗号化装置について説明する。
本実施の形態における暗号化装置は、図1(a)の暗号化装置10と比べて配列出力部100が異なる構成の配列出力部200となっている。その他の構成は共通しているため、その説明を省略する。
【0118】
図5は、本実施の形態における配列出力部200の構成を示すブロック図である。
この配列出力部200は、整数Xを入力とし、L(n、n1、n2)に属する配列V20を出力するものである。ここで、L(n,n1,n2)は、n1個の要素が1、n2個の要素が−1、その他の(n−n1−n2)個の要素が0であるn次元配列全体であり、n、n1、n2は配列出力部200に予め設定されているものとする。
【0119】
配列出力部200は、第1の数配置部210と第2の数配置部220からなり、配列出力部100と同様にマイクロコンピュータのソフトウェア、あるいは電子回路などのハードウェアにより処理を実行する。
【0120】
第1の数配置部210は、整数Xを入力とし、n1個の要素が1、その他の要素が0であるn次元の配列V10と、整数Xに所定の演算が行われた整数X1を第2の数配置部220に出力する。第1の数配置部210は、すべての配列要素が0の配列要素を暫定的に決定し、0の配列要素を整数Xに基づいて1に改編する。
【0121】
第2の数配置部220は、第1の数配置部210より出力された配列V10と、整数X1とを入力とし、n1個の要素が1、n2個の要素が−1、その他の(n−n1−n2)個の要素が0であるn次元の配列V20を出力する。ここで、第2の数配置部220は、第1の数配置部210が出力する配列の0の配列要素を−1に改編する。
【0122】
まず、第1の数配置部210の動作を説明する。
図6は、第1の数配置部210が行う処理を示すフローチャートである。第1の数配置部210は、以下のようなステップの処理で行われる。なお、以下では、配列V10の(左から)i番目の要素をV10[i]とする。また、カウンタc1’の値をカウント値c1、カウンタc2’の値をカウント値c2とする。
【0123】
図7は第1の数配置部210における配列V10の各段階での配列状態を示している。
まず、第1の数配置部210は、整数Xを変数Y1に代入する(ステップS201)。
【0124】
次に、第1の数配置部210は、配列V10を全ての要素を0(整数P1)とする(ステップS202)。ここで、初期配列が決定される。
次に、第1の数配置部210は、カウンタc1’のカウント値c1を1に設定する(ステップS203)。
【0125】
次に、第1の数配置部210は、カウンタc2’のカウント値c2をnに設定する(ステップS204)。
次に、第1の数配置部210は、変数Y1(被除数)をカウント値c2(除数)で割った商Sと余りRを求める(ステップS205)。
【0126】
次に、第1の数配置部210は、配列V10の0である要素の中で、左から(R+1)番目の要素を1(整数P2)に設定する(ステップS206)。
次に、第1の数配置部210は、商Sを変数Y1に代入する(ステップS207)
【0127】
次に、第1の数配置部210は、カウント値c1=n1であるかを判定し(ステップS208)、カウント値c1=n1でないと判定した場合は(ステップS208のNo)、配列V10の1である要素がn1個に達していないとして、カウント値c1をカウントアップし(c1←c1+1)、カウント値c2をカウントダウン(c2←c2−1)する処理に移る(ステップS209)。そして、第1の数配置部210は、再度、変数Y1をカウント値c2で割った商Sと余りRを求める処理(ステップS205)を行う。
【0128】
一方、第1の数配置部210は、カウント値c1=n1であると判定した場合は(ステップS208のYes)、配列V10の1である要素がn1個になったとして、配列V10と、変数Y1(整数X1)の値を第2の数配置部220に出力して(ステップS210)、処理を終了する。
【0129】
このように、第1の数配置部210は、カウンタc1’のカウント値c1がn1となるまで、商Sと余りRを求める処理(ステップS205)からカウント値c1をカウントアップし、カウント値c2をカウントダウンする処理(ステップS209)までを繰り返す。そして、カウンタc1’のカウント値c1がn1となると、すなわち配列V10の要素のうち1がn1個となると、第1の数配置部210は、配列V10を第2の数配置部220に出力する。
【0130】
この第1の数配置部210の動作を、具体例を用いて説明する。実際に入力される整数X=5644とし、また第1の数配置部210が出力するn次元の配列V10が、例えば8次元の配列であり(n=8)、3個(n1=3)の要素が1、その他の5個の要素が0である場合の例を用いて説明する。
【0131】
まず、第1の数配置部210は、変数Y1に5644を代入する(ステップS201)。
次に、第1の数配置部210は、配列V10の配列状態を、図7の配列V11に示す、すべての要素が0である配列状態とする(ステップS202)。
【0132】
次に、第1の数配置部210は、カウント値c1=1とし(ステップS203)、カウント値c2=8(ステップS204)とする。
次に、第1の数配置部210は、変数Y1=5644、およびカウント値c2=8より、商S=705、余りR=4を求める(ステップS205)。
【0133】
次に、第1の数配置部210は、配列V10の0である要素のうち左から(R+1)番目、すなわち5番目の要素V10[5]を1に設定し、図7の配列V12に示す配列状態とする(ステップS206)。
次に、第1の数配置部210は、変数Y1に705(=商S)を代入する(ステップS207)。
【0134】
そして、カウント値c1=1であり、カウント値c1=3(=n1)でないので(ステップS208のNo)、第1の数配置部210は、カウント値c1=2(カウントアップ)、カンウト値c2=7(カウントダウン)とする(ステップS209)。
【0135】
次に、第1の数配置部210は、変数Y1=705、およびカウント値c2=7より、再度、商S、余りRを求める(ステップS205)。商S=100、余りR=5となる。
【0136】
次に、第1の数配置部210は、配列V10の0である要素のうち左から6番目の要素を1に設定する。この設定前の配列V10の配列状態は、図7の配列V12に示す配列状態である。配列V12の0の要素は、V12[5]以外の要素である。配列V12の0の要素の中で6番目の要素は、V12[7]であるので、V12[7]の0を1にする(ステップS206)。これにより、図7に示す配列V13となる。
【0137】
このように、第1の数配置部210は、配列V10の要素のうち1がn1個(本例ではn1=3)となるまで、余りRに応じて配列V10の0の要素を1にし、図7の配列V14に示すように1である要素が3個となれば、その配列を配列V10として第2の数配置部220に出力する。
【0138】
次に、第2の数配置部220の動作を説明する。
図8は、第2の数配置部220が行う処理を示すフローチャートである。
図9は第2の数配置部220における配列V20の各段階での配列状態を示している。
なお、以下では、配列V20の(左から)i番目の要素をV10[i]とする。また、カウンタc1’の値をカウント値c1、カウンタc2’の値をカウント値c2とする。
【0139】
まず、第2の数配置部220は、第1の数配置部210から出力された変数Y1(整数X1)の値を変数Y2に代入する(ステップS301)。
次に、第2の数配置部220は、第1の数配置部210から出力された配列V10を配列V20に代入する(ステップS302)。
次に、第2の数配置部220は、カウント値c1を1に設定する(ステップS303)。
【0140】
次に、第2の数配置部220は、カウント値c2を(n−n1)に設定する(ステップS304)。
次に、第2の数配置部220は、変数Y2(被除数)をカウント値c2(除数)で割った商Sと余りRを求める(ステップS305)。
次に、第2の数配置部220は、配列V20の0である要素の中で、左から(R+1)番目の要素を−1に設定する(ステップS306)。
次に、第2の数配置部220は、商Sを変数Y2に代入する(ステップS307)。
【0141】
次に、第2の数配置部220は、カウント値c1=n2であるかを判定し(ステップS308)、カウント値c1=n2でないと判定した場合は(ステップS308のNo)、配列V20の−1である要素がn2個に達していないとして、カウント値c1をカウントアップし(c1←c1+1)、カウント値c2をカウントダウン(c2←c2−1)する処理(ステップS309)に移る。つづいて、第2の数配置部220は、再度、変数Y2をカウント値c2で割った商Sと余りRを求める処理を行う(ステップS305)。
【0142】
一方、第2の数配置部220は、カウント値c1=n2であると判定した場合は(ステップS308のYes)、配列V20の−1である要素がn2個になったとして、配列V20を出力して(ステップS310)、処理を終了する。
【0143】
このように、第2の数配置部220は、カウント値c1=n2となるまで、商Sと余りRを求める処理(ステップS305)からカウント値c1をカウントアップし、カウント値c2をカウントダウンする処理(ステップS309)までを繰り返し、カウント値c1=n2となると、配列V20の要素のうち−1がn2個(本例ではn2=2)となったとして、配列V20を出力する。
【0144】
この第2の数配置部220の動作を、具体例を用いて説明する。実際に第1の数配置部210から出力される整数X1=150とし、また第2の数配置部220が出力するn次元の配列V20が、例えば8次元の配列であり(n=8)、3個(n1=3)の要素が1であり、2個(n2=2)の要素が−1であり、その他の3個の要素が0である例を用いて説明する
【0145】
まず、第2の数配置部220は、変数Y2に150を代入する(ステップS301)。
次に、第2の数配置部220は、配列V20に、第1の数配置部210から出力される3個の要素が1であり、その他の5個の要素が0である配列V10を代入する。図9の配列V21がその代入した配列である(ステップS302)。
【0146】
次に、第2の数配置部220は、カウント値c1=1とし(ステップS303)、カウント値c2=n−n1=8−3=5とする(ステップS304)。
次に、第2の数配置部220は、変数Y2=150、およびカウント値c2=5より、商S=30、余りR=0を求める(ステップS305)。
【0147】
次に、第2の数配置部220は、配列V20の0である要素のうち左から1番目の要素、すなわちV20[1]を−1にする(ステップS306)。図9の配列V22がその配列状態を示している。
次に、第2の数配置部220は、変数Y2=30(=商S)とする(ステップS307)。
【0148】
そして、カウント値c1=1であり、カウント値c1はn2(=2)でないので(ステップS308のNo)、第2の数配置部220は、カウント値c1=2(カウントアップ)、カウント値c2=4(カウントダウン)とする(ステップS309)。
【0149】
次に、第2の数配置部220は、変数Y2=30、およびカウント値c2=4より、再度、商S、余りRを求める(ステップS305)。商S=7、余りR=2となる。
【0150】
次に、第2の数配置部220は、配列V20の0である要素のうち左から(R+1)番目、すなわち3番目の要素を−1に設定する。設定前の配列V20の配列状態は、図9に示す配列V22であり、0の要素は、V22[3]、V22[4]、V22[6]、V22[8]である。配列V22の0の要素の中で左から3番目の要素は、V22[6]であるので、V22[6]の0を−1にする(ステップS306)。この設定後の配列状態は、図9に示す配列V23である。
【0151】
次に、第2の数配置部220は、変数Y2に7(=商S)を代入する(ステップS307)。
【0152】
そして現時点で、カウント値c1=2、即ちカウント値c1=n2であるため(ステップS308のYes)、第2の数配置部220は、配列V20を出力する(ステップS310)。この出力される配列20は、図9の配列V23に示す配列状態である。
【0153】
このように、配列出力部200は、ハッシュ関数値H(m)である整数Xからn1個の要素が1、n2個の要素が−1、(n−n1−n2)個の要素が0であるn次元の配列を出力する。
【0154】
上述した配列出力部200は、0≦X≦(((n!)/(n−n1−n2)!)−1)を満たす整数Xに基づいて、一様な配列L(n、n1、n2)を出力している。以下では、0≦X≦(((n!)/(n−n1−n2)!)−1)を満たす整数Xに限定して説明を行う。
【0155】
第1の数配置部210では、整数Xに基づいた位置の配列V10の要素を1に設定している。以下では、この要素を1に設定する処理について具体的に見ていく。また、実施の形態1と同様に、第1の数配置部210の構成において、カウント値c2におけるステップS205の余りをR_c2とする。全体の説明の流れは、以下の通りである。
(1)入れ替え処理が重複しないことについて説明する。
(2)(1)の結果を利用して、数Xと配列要素置換部における処理内容が1対1に対応していることを説明する。
(3)同じ配列を出力する数Xが何種類あるかを計算する。
【0156】
この(3)の計算において配列に依らず、整数Xの種類の数が同じであることが示すことが可能であるため、入力に対して出力が一様に分布することがいえる。
【0157】
まず、配置処理が重複しないことについて説明する。
以下では、まず、配列の同じ位置に対する値(1または−1)の配置が複数回起こらない、即ち、配置が終わった位置は、その処理以降の配置の対象にならないことについて説明する。
【0158】
・カウント値c2がnの時
ステップS206では、配列V10の0である要素の中で、R_n+1番目の要素を1に設定している。ここで、カウント値c2がnの時は、R_n+1番目の要素を1に設定する前のV10は全ての要素が0であるため、単純に、R_n+1番目を1に設定していることになる。
【0159】
・カウント値c2がn−1の時
ステップS206では、配列V10の0である要素の中で、R_(n−1)+1番目の要素を1に設定している。ここで、配列V10の0である要素を1に設定する要素の対象としているため、カウント値c2がnの時に設定したR_n番目の要素はその対象とならないことに注意する。配列V10が0である要素の中で、R_(n−1)+1番目の要素は、R_(n−1)<R_nである時は、単純に、配列V10のR_(n−1)+1番目の要素になっている。R_(n−1)>R_nである時は、配列V10のR_(n−1)+2番目の要素になっている。
【0160】
上記のように、カウント値c2がiの時に1に設定した要素は、カウント値c2がi+1以降のステップで、1に設定する要素の対象にならないため、1回設定した要素をさらに設定することがない。
【0161】
・第1の数配置部210の処理が終了した後
従って、カウント値c2がnから(n−n1+1)までの全ての処理が終わった時点で、配列V10は、n1個の要素が1であり、その他の(n−n1)個の要素が0になっている。上記の第1の数配置部210の議論は、第2の数配置部220でも同様に行える。第2の数配置部220の処理が終了した時点で、配列V20は、n1個の要素が1であり、n2個の要素が−1であり、その他の(n−n1−n2)個の要素が0になっている。
【0162】
第1の数配置部210と第2の数配置部の処理の一意性について説明する。
以下では、上記の結果(値の配置が重複しない)を利用して、整数Xと数配置部における処理内容が1対1に対応していることを説明していく。
【0163】
・整数Xと数列の対応
整数Xを0≦X≦(((n!)/(n−n1−n2)!)−1)を満たす整数とする。この時、実施の形態1と同様に、カウント値c2がiの時の第1の数配置部のステップS205のRをR_i、第2の数配置部の同様の処理を行うステップS305のRもR_iとする。ここで、第1の数配置部210のカウント値c2は、nからn−n1+1までの範囲にあり、第2の数配置部220のカウント値c2は、n−n1からn−n1−n2+1までの範囲にあるため、カウント値c2が第1の数配置部と、第2の数配置部の間で重なることがないことを注意しておく。この時、整数Xは、実施の形態1と同様に以下のようにおける。
【0164】
Figure 0004208230
従って、整数Xは、数列R_(n−n1−n2+1)、…、R_nが1対1対応していることが分かる。
【0165】
・数列と整数配置
R_i(n−n1−n2+1≦i≦n)によって、カウンタc2がiの時に、配列V20のR’_i+1番目がn−n1+1≦i≦nの場合は、1、n−n1−n2+1≦i≦n−n1の場合は、−1に設定されたと考える。その時、数列R_(n−n1−n2+1)、…、R_nと、上記の設定は、順序即ち、1または、−1に設定された時のカウンタc2の値も含めて考えると1対1対応することが分かる。
【0166】
カウント値c2がj(j≠i)の時に、R’_i+1番目の要素をy(yは1または、−1)に設定し、カウント値c2がiの時にR’_j+1番目の要素をyに設定するように、yに設定する時のカウント値c2の値が入れ替わっても、同じ配列V20を出力する。この他に同じ配列Vを出力するようなケースは存在しない。このようなカウント値c2の値の入れ替えは、実施の形態1と同様に考えると、yが1の場合で、(n1)!個、yが−1の場合で、(n2)!個存在する。従って、同じ配列V20を出力する整数Xは、(n1)!×(n2)!種類存在することになる。
【0167】
L(n、n1、n2)に属する配列は、n!/((n1)!×(n2)!×(n−n1−n2)!)種類存在する。ゆえに、実施の形態2の配列出力部200は、n!/(n−n1−n2)!種類の整数Xに基づいて、n!/((n1)!×(n2)!×(n−n1−n2)!)種類の配列を一様に出力可能であることがいえる。
【0168】
また、以上の説明から配列出力部200は、同じ入力に対していつも同じ出力を行うことは明らかである。
【0169】
以上は、X<n!/(n−n1−n2)!の場合についての議論であるが、X>n!/(n−n1−n2)!の場合もXを(n!/(n−n1−n2)!)で割った余りを取ることによって、同様の議論が可能である。
【0170】
ここで、実施の形態2と実施の形態1の効果との差異を説明する。
実施の形態1では、カウンタc’のカウント値cは、nから2までの範囲で動く。それに対して、実施の形態2では、第1の数配置部210と第2の数配置部220において、カウンタc2’のカウント値c2は、nから(n−n1−n2+1)までの範囲で動く。そのため、整数Xの値が、実施の形態1では、n!種類存在するのに対し、実施の形態2では、(n!/(n−n1−n2)!)種類存在する。ゆえに、実施の形態2は実施の形態1より、入力の種類が(1/(n−n1−n2)!)に削減でき、必要な入力のビット長も短くてすむ。
【0171】
実際のパラメータの場合について説明する。n=263、n1=16、n2=16とする時、L(n、n1、n2)に属する配列は、n!/((n1)!×(n2)!×(n−n1−n2)!)≒2^163である。この時、n!/(n−n1−n2)!≒2^255であり、ハッシュ関数の分布の一様性を保持するためには、ハッシュ関数の出力長として、255ビット以上必要になる。実施の形態1に比べると必要なハッシュ関数出力長が1486ビット小さく、実施の形態1より効率がよい。
【0172】
このように、本実施の形態によれば、配列出力部200は、整数Xに基づいてn次元の配列を一様に出力することができる。そのため、NTRU暗号にFOSRTを適用した場合において、図1(a)の暗号化装置10の配列出力部100の代わりにこの配列出力部200とし、ハッシュ関数部40より出力されるハッシュ関数値H(m)に基づいて、配列出力部200がn次元の配列を一様に出力することで、ハッシュ関数の分布の一様性を保持することが可能となり、暗号化装置10で生成する暗号文の安全性を高めることができる。
【0173】
さらに、配列出力部200は、整数Xのみの情報より配列V20を設定しているため、メモリテーブルを用いる必要がなく、メモリが少なくてよいという効果が得られる。
【0174】
また、図1(b)の復号化装置15の配列出力部105の代わりに、この配列出力部200を用いることで暗号化された暗号文の復号が可能となる。
【0175】
尚、また、配列出力部200を暗号化装置10に用いて、ハッシュ関数値を基に配列を出力する構成としたがこれに限定されない。
【0176】
(実施の形態3)
本発明における第3の実施の形態に係る暗号化装置を説明する。本実施の形態の暗号化装置は、図1の暗号化装置10と比べて配列出力部100が異なる構成の配列出力部300となっている。その他の構成は共通しているため、その説明を省略する。
【0177】
本実施の形態における配列出力部300を、図面を用いて説明する。
図10は、本実施の形態における配列出力部300の構成を示すブロック図である。
【0178】
この配列出力部300は、整数Xを入力とし、L(n、n1、n2)に属する配列V40を出力するものである。ここで、n、n1、n2は予め設定され、この配列出力部300に与えられているものとする。
【0179】
配列出力部300は、第1の数配置部310と第2の数配置部320からなり、配列出力部100と同様、マイクロコンピュータのソフトウェア、あるいは電子回路などのハードウェアにより処理を実行する。
【0180】
第1の数配置部310は、整数Xを入力とし、n1個の要素が1、その他の要素が0であるn次元の配列V30と、整数Xに所定の演算が行われた整数X2を出力する。第1の数配置部310は、すべての配列要素が0の配列要素を暫定的に決定し、0の配列要素を整数Xに基づいて1に改編する。
【0181】
第2の数配置部320は、第1の数配置部310より出力された配列V30および整数X2を入力として、n1個の要素が1、n2個の要素が−1、その他の(n−n1−n2)個の要素が0であるn次元の配列V40を出力する。ここで、第2の数配置部320は、第1の数配置部310が出力する配列の0の配列要素を−1に改編する。
【0182】
第1の数配置部310の動作を説明する。
図11は、第1の数配置部310の処理を示すフローチャートである。第1の数配置部310は、以下のようなステップの処理で行われる。なお、以下では、配列V30の(左から)i番目の要素をV30[i]とする。また、カウンタc1’の値をカウント値c1、カウンタc2’の値をカウント値c2とする。また、C(s、t)は、s個のものからt個を選ぶ組み合わせの数を示す。具体的には、C(s、t)=s!/((s−t)!×t!)である。
【0183】
まず、第1の数配置部310は、整数Xを変数Z1に代入し、配列V30を全ての要素が0のn次元配列とする(ステップS401)。ここで、初期配列が決定される。
【0184】
次に、第1の数配置部310は、カウンタc1’のカウント値c1をn1に設定し、カウンタc2’のカウント値c2を1に設定する(ステップS402)。
【0185】
次に、第1の数配置部310は、変数Z1≧C(n−c2,c1)であるかを判定する(ステップS403)。第1の数配置部310は、変数Z1≧C(n−c2、c1)であると判定した時(ステップS403のYes)、変数Z1にZ1−C(n−c2、c1)を代入し、カウンタc1’のカウント値c1をカウントダウンし(c1←c1−1)、配列V30の(n−c2+1)番目の要素を1にする(V30[n−c2+1]←1)(ステップS404)。そして、第1の数配置部310は、カウンタc2’のカウント値c2をカウントアップする(ステップS406)。
【0186】
一方、第1の数配置部310は、変数Z1≧C(n−c2、c1)でないと判定した時(ステップS403のNo)、配列V30の(n−c2+1)番目の要素を0にする(V30[n−c2+1]←0)(スレップS405)。そして、第1の数配置部310は、カウンタc2’のカウント値c2をカウントアップする(ステップS406)。
【0187】
このように、変数Z1とC(n−c2,c1)の大小関係に応じて、配列V30の(n−c2+1)番目の要素を0か1に設定する。
そして、第1の数配置部310は、カウント値c2をカウントアップすると(ステップS406)、カウント値c2>nを判定する(ステップS407)。
【0188】
第1の数配置部310は、カウント値c2>nでないと判定した場合は(ステップS407のNo)、再度、変数Z1≧C(n−c2、c1)であるかを判定する判定処理を行い(ステップS403)、その判定処理(ステップS403)からカウント値c2>nを判定する(ステップS407)までの処理を、カウント値c2>nとなるまで繰り返す。
【0189】
一方、第1の数配置部310は、カウンタc2>nと判定した場合(ステップS407のYes)、配列V30と、整数X2(整数X2=整数X/C(n,n1))とを第2の数配置部320に出力する。
【0190】
この第1の数配置部310の動作を、具体例を用いて説明する。実際に入力される整数X=50とし、また第1の数配置部310が出力する配列V30が、例えば8次元の配列であり(n=8)、4個(n1=4)の要素が1、その他の4個の要素が0である場合の例を用いて説明する。
【0191】
図13(a)は、配列V30の各段階の配列状態を示している。
【0192】
まず、第1の数配置部310は、変数Z1に50を代入する(ステップS401)。
【0193】
次に、第1の数配置部310は、カウンタc1’のカウント値c1を4とし、カウンタc2’のカウント値c2を1とする(ステップS402)。
【0194】
この場合、変数Z1(=50)≧C(7,4)(=35)であるので(ステップS403のYes)、第1の数配置部310は、変数Z1←50−35=15、カウント値c1=3、配列V30の左から8番目の要素V30[8]=1とする(ステップS404)。このときの配列V30の配列状態は図13に示す配列V31である。
【0195】
次に、第1の数配置部310は、カウント値c2を2にカウントアップする(ステップS406)。
ここで、カウント値c2>8でないため(ステップS407のNo)、第1の数配置部310は配列V30の出力を行わず、再度、変数Z1とC(n−c2,c1)の大小関係を判定する(ステップS403)。
【0196】
この場合、変数Z1(=15)<C(6,3)(=20)であるので(ステップS403のNo)、第1の数配置部310は、配列V30の左から7番目の要素V30[7]=0とする(ステップS405)。このときの配列V30の配列状態は図13に示す配列V32である。
【0197】
このように、変数Z1とC(n−c2,c1)の大小関係に応じて、配列V30の各要素に順番に1か0を設定していき、全要素について決定したときに、第1の数配置部310は、第2の数配置部320に配列V30を出力する。
【0198】
上記の処理は、Schalkvijkのアルゴリズムと呼ばれる。Schalkvijkのアルゴリズムについて、Schalkvijk、“An Algorithm for Source Coding”、IT72−18、1972が詳しい。以下では、この文献を「非特許文献4」とよぶ。
【0199】
次に、第2の数配置部320の動作を説明する。
図12は、第2の数配置部320の処理を示すフローチャートである。第2の数配置部320は、以下のようなステップの処理で行われる。
【0200】
なお、以下では、配列V40の(左から)i番目の要素をV40[i]とする。また、カウンタc1’の値をカウント値c1、カウンタc2’の値をカウント値c2とする。
【0201】
まず、第2の数配置部320は、第1の数配置部310から出力された整数X2を変数Z2に代入し、配列V30を配列V40に代入し、さらに配列Wを全ての要素が0である(n−n1)次元の配列とする(ステップS501)。
【0202】
次に、第2の数配置部320は、カウンタc1’のカウント値c1をn2、カウンタc2’のカウント値c2を1とする(ステップS502)。
【0203】
次に、第2の数配置部320は、変数Z2≧C(n−n1−c2、c1)であるかを判定し(ステップS503)、Z2≧C(n−n1−c2、c1)であると判定した時(ステップ503のYes)、変数Z2にZ2−C(n−n1−c2、c1)を代入し、カウント値c1をカウントダウンし(c1←c1−1)、配列Wの(n−n1−c2+1)番目の要素を−1にする(ステップS504)。そして、第2の数配置部320は、カウント値c2をカウントアップする(ステップS506)。
【0204】
一方、第2の数配置部320は、Z2≧C(n−n1−c2、c1)でないと判定した時(ステップ503のNo)、配列Wの(n−n1−c2+1)番目の要素を0とする(ステップS505)。そして、第2の数配置部320は、カウント値c2をカウントアップする(ステップS506)。
【0205】
このように、変数Z2とC(n−n1−c2,c1)の大小関係に応じて、配列Wの(n−n1−c2+1)番目の要素が0か−1に設定される。
【0206】
そして第2の数配置部320は、カウント値c2のカウントアップを行うと(ステップS506)、カウント値c2がc2>n−n1であるかを判定する(ステップS507)。第2の数配置部320は、c2>n−n1でないと判定した時(ステップS507のNo)、変数Z2≧C(n−n1−c2、c1)であるかを再度判定する判定処理を行い(ステップS503)、c2>n−n1となるまで、上記判定処理(ステップS503)からc2>n−n1の処理(ステップS507)を繰り返す。
【0207】
すなわち、第2の数配置部320は、カウント値c2が1から(n−n1)の各場合において、変数Z2とC(n−n1−c2,c1)の大小関係に応じて、配列Wの(n−n1−c2+1)番目の要素が0か−1に設定される。
【0208】
一方、第2の数配置部320は、c2>n−n1であると判定すると(ステップS507のYes)、カウント値c1を1、カウント値c2を1とする処理に移る(ステップS508)。
【0209】
次に、第2の数配置部320は、配列V40のc1番目の要素V40[c1]が1であるかの判定処理を行い(ステップS509)、V40[c1]=1と判定したとき(ステップS509のYes)、カウント値c1をカウントアップし(c1←c1+1)(ステップS512)、再度、上記判定処理(ステップS509)を行う。
【0210】
一方、第2の数配置部320は、V40[c1]=1でないと判定したとき(ステップS509のNo)、配列V40のc1番目の要素V40[c1]に配列Wのc2番目の要素W[c2]を代入し、カウント値c2をカウントアップ(c2←c2+1)する(ステップS510)。
【0211】
次に、第2の数配置部320は、カウント値c2がc2>n−n1であるかを判定し(ステップS511)、c2>n−n1でないと判定したとき(ステップS512のNo)、カウント値c1をカウントアップする処理(c1←c1+1)(ステップS512)に移る。
【0212】
一方、第2の数配置部320は、カウント値c2がc2>n−n1であると判定した時は、配列V40を外部に出力して処理を終了する。
【0213】
ここで、上述したカウント値c1を1、カウント値c2を1とする処理(ステップS508)から配列V40を出力する(ステップS512まで)までの処理では、V[c1]の0の要素にW[c2]の要素を順番に代入している。
【0214】
この第2の数配置部320の動作を、具体例を用いて説明する。実際に入力される整数X2=20とし、また第1の数配置部320が出力する配列V40が、例えば8次元の配列であり(n=8)、4個(n1=4)の要素が1、2個(n2=2)の要素が−1、その他の2個の要素が0である場合の例を用いて説明する。
【0215】
図13(b)は、配列V40の各段階の配列状態を示しており、図13(c)は、配列Wの各段階の配列状態を示している。
【0216】
まず、第2の数配置部320は、変数Z2=20とし、配列V40に例えば、第1の数配置部310から出力された図13(b)の配列V41に示す配列状態を代入し、さらに配列Wをすべての要素が0の(n−n1)次元(4次元)の配列とする(ステップS501)。
【0217】
次に、第2の数配置部320は、カウンタc1’のカウント値c1を2に設定し、カウンタc2を1に設定する(ステップs502)。
【0218】
次に、第2の数配置部320は、変数Z2とC(n−n1−c2,c1)の大小関係を判定し(ステップS503)、変数Z2(=20)≧C(3,2)(=3)であるため(ステップS503のYes)、第2の数配置部320は、変数Z2=20−3=17とし、カウント値c1を1とし、配列Wの左から4番目の要素、すなわちW[n−n1−c2+1]を−1とする(ステップS504)。この配列状態は図13(c)の配列W1に示した通りである。
【0219】
このように、配列Wの各要素に0か−1を設定する。図13(c)の配列W2は、全要素の設定された配列状態の一例である。
【0220】
そして、第2の数配置部320は、配列Wの全要素を設定すると(ステップS507のYes)、カウンタc1’のカウント値c1を1にし、カウンタc2’のカウント値c2を1にする(ステップS508)。この以降の処理で、配列V41の0の要素に配列Wの各要素を代入する。
【0221】
現時点での配列V40の配列状態を配列V41とし、配列Wの配列状態を配列W2とする。まず、配列V41のc1番目の要素、すなわちV41[1]=0であるため(ステップS509のNo)、V41[1]に配列Wのc2番目の要素、すなわちW[1]である0を代入する。図13(b)の配列V42がその配列状態である。
【0222】
このように、第2の数配置部320は、配列V41の0の要素に配列W2の全要素を代入し(ステップS509からステップS512の処理)、配列41を出力する。図13(b)の配列V43が配列V41の0の要素に配列2の要素を代入した配列状態である。
【0223】
ここで、配列出力部300全体の動作を説明する。まず、第1の数配置部310は、整数Xを入力とし、n1個の要素が1、他の要素が0であるn次元の配列V30と、整数X2(整数X2=整数X/C(n,n1))とを第2の数配置部320に出力する。
【0224】
次に、第2の数配置部320は、第1の数配置部310から出力された配列V30、整数X2を入力とし、n1個の要素が1、n2個の要素が−1、他の要素が0であるn次元の配列V40を出力する。
【0225】
本実施の形態では、Schalkvijkのアルゴリズムを応用している。具体的には、第1の数配置部310での配列V30における1の要素の配置場所を決定する箇所と、第2の数配置部320での配列V40における−1の要素の配置場所を決定する箇所に、Schalkvijkのアルゴリズムを使用している。
【0226】
この配列出力部300は、0≦X≦C(n、n1)×C(n−n1、n2)(=n!/((n1)!×(n2)!×(n−n1−n2)!)を満たす整数XをL(n、n1、n2)に1対1に変換している。
【0227】
以下では、0≦X≦C(n、n1)×C(n−n1、n2)を満たす整数Xに限定して、1対1に変換していることについて説明を行う。
【0228】
第1の数配置部310、第2の数配置部320では、Schalkvijkアルゴリズムを利用して、1、−1の配置場所を決定している。Schalkvijkアルゴリズムは、入力の出力の種類以下に限定すれば、1対1に変換可能であることが知られている。これについては、先の非特許文献4が詳しい。従って、実施の形態3における配列出力部300は、整数Xに対して1対1に対応する配列V40を出力している。そのため、配列出力部300は、入力された整数Xに基づいて一様に配列を出力していることになる。
【0229】
ここで、実施の形態3と、実施の形態1、2の効果との差異を説明する。
整数Xの値が、実施の形態1では、一つの出力値に対して、入力値が(n1)!×(n2)!×(n−n1−n2)!、実施の形態2では、(n1)!×(n2)!種類存在する。それに対して、実施の形態3では、1対1で変換する。そのため、入力の一様性を保持するために必要な入力のビット長が最小になっている。
【0230】
実際のパラメータの場合について説明する。n=263、n1=16、n2=16とする時、φ(n、n1、n2)に属する配列は、n!/((n1)!×(n2)!×(n−n1−n2)!)≒2^163であるので、ハッシュ関数の出力長は、163ビット以上でよく、これは、実施の形態2に比べて、92ビット短い。
【0231】
しかし、実施の形態3の配列出力装置300の第1の数配置部、第2の数配置部では、C(n−n1、c2)やC(n−n1−n2、c2)の計算を行う必要がある。この計算は、階乗の計算を含むため、計算量が大きくなる。一方、実施の形態1、2では、階乗の計算を行わないため、計算量が小さい。
【0232】
このように、本実施の形態によれば、配列出力部300は、整数Xに基づいて一様にn次元の配列を出力することができる。そのため、NTRU暗号にFOSRTを適用して、図1(a)の暗号化装置10の配列出力部100の代わりにこの配列出力部300とし、ハッシュ関数部40より出力されるハッシュ関数値H(m)に基づいて、配列出力部300が一様にn次元の配列を出力することで、ハッシュ関数の分布の一様性を保持することが可能となり、暗号化装置10で生成する暗号文の安全性を高めることができる。
【0233】
さらに、配列出力部300は、整数Xのみの情報より配列V40を設定しているため、メモリテーブルを用いる必要がなく、メモリが少なくてよいという効果が得られる。
【0234】
また、図1(b)の復号化装置15の配列出力部105の代わりに、この配列出力部300を用いることで暗号化された暗号文の復号が可能となる。
【0235】
尚、また、配列出力部300を暗号化装置10に用いて、ハッシュ関数値を基に配列を出力する構成としたがこれに限定されない。
【0236】
(実施の形態4)
本発明における第4の実施の形態に係る暗号化装置を説明する。本実施の形態の暗号化装置は、図1の暗号化装置10と比べて配列出力部100が異なる構成の配列出力部400となっている。その他の構成は共通しているため、その説明を省略する。
【0237】
本実施の形態における配列出力部400を、図面を用いて説明する。
図14は、本実施の形態における配列出力部400の構成を示すブロック図である。
【0238】
この配列出力部400は、整数Xを入力とし、L(n、n1、n2)に属する配列V50を出力するものである。ここで、L(n,n1,n2)は、n1個の要素が1、n2個の要素が−1、その他の(n−n1−n2)個の要素が0であるn次元配列全体であり、n、n1、n2は配列出力部400に予め設定されているものとする。この配列出力部400は、すべての配列要素が0の配列要素を暫定的に決定し、0の配列要素を整数Xに基づいて1、および−1に改編する。
【0239】
配列出力部400は、配列出力部100と同様、マイクロコンピュータのソフトウェア、あるいは電子回路などのハードウェアにより処理を実行する。
【0240】
次に、配列出力部400の動作を説明する。
まず、配列出力部400は、配列V50をすべての要素が0である配列状態にする。
【0241】
次に、配列出力部400は、整数Xを8ビット毎に分割する。整数Xは0,1の2値で表されたビット情報の集まりで示されており、図16に示すように、整数Xは8ビット毎に(n1+n2)個に分割される。
【0242】
図16は、整数Xを各分割情報[0],分割情報D[1]〜分割情報D[n1+n2−1]に分解した状態を示す図である。各分割情報D[0],分割情報D[1]〜分割情報D[n1+n2−1]は、それぞれ8ビットの情報により整数を示す。
【0243】
ここで、8ビットの分割情報D[0]が整数Qを示しているとすると、次に配列出力部400は、配列V50において、Q+1番目(以下、p0番目という)の要素が0である場合に1に設定する。つづいて、配列出力部400は、p1=(p0+D[1])mod(n)で示されるp1番目の要素が0である場合に1に設定する。
【0244】
このように、配列出力部400は、分割情報D[i]を基に、配列V50のpi=(P(i−1)+D[i])mod(n)(ここで、i=1〜n1+n2−1)で示されるpi番目の要素が0である場合に順に1に設定する。また、配列V50のpi番目の要素とは配列V50の左からpi番目の要素をいう。
【0245】
このとき、配列出力部400は、配列V50のpi番目の要素が0でない場合は1に設定せず、pi←(pi+1)mod(n)とし、pi番目の右側にある0の要素を1に設定する。
【0246】
配列出力部400は、このように配列V50の要素を1に設定する処理を行い、1の要素がn1個になると、次に同様に分割情報D[i]を基に、配列V50の−1の要素がn2個になるまで−1の要素を設定する処理を行う。
【0247】
ここで配列出力部400の詳細な動作を説明する。
図15は、配列出力部400が行う処理を示すフローチャートである。配列出力部400は、以下のようなステップの処理で行われる。なお、カウンタc1’の値をカウント値c1、カウンタc2’の値をカウント値c2とする。
【0248】
まず配列出力部400は、変数Y10に整数Xを代入する(ステップS601)。
次に、配列出力部400は、配列V50を全ての要素が0である配列状態とする(ステップS602)。
【0249】
次に、配列出力部400は、整数Xを8ビット毎に区切って分割情報D[0],分割情報D[1]〜分割情報D[n1+n2−1]に分割する(ステップS603)。
【0250】
次に、配列出力部400は、カウンタc1’のカウント値c1を0にする(ステップS604)。
【0251】
次に、配列出力部400は、カウンタc2’のカウント値c2をD[0]+1とする(ステップS605)。すなわち、カウント値c2は、8ビットの分割情報D[0]で示される整数Q+1の値となる。
【0252】
次に、配列出力部400は、配列V50のc2番目の要素V50[c2]が0であるかを判定し(ステップS606)、0でないと判定した時は(ステップS606のNo)、カウント値c2をc2←(c2+1)mod(n)とし(ステップS607)、再度、要素V50[c2]が0であるか否かの判定を行う(ステップS606)。一方、配列出力部400は、V50[c2]が0であると判定した時は(ステップS606のYes)、要素V50[c2]を1に設定する(ステップS608)。
【0253】
これらの要素V50[c2]が0であるかの判定処理(ステップS606)、c2←(c2+1)mod(n)の処理(ステップS607)、およびV50[c2]←1の処理(ステップS608)により、V50[c2]の要素が0でない場合に、V50[c2]の右側の要素で0であるものを巡回移動しながら順に探して1に設定する。
【0254】
そして次に、配列出力部400は、カウンタc1’のカウント値c1がc1<n1−1であるかの判定を行う(ステップS609)。
【0255】
配列出力部400は、c1<n1−1であると判定したとき(ステップS609のYes)、カウント値c1をカウントアップすると共に(c1←c1+1)、カウント値c2をc2←(c2+D[c1])mod(n)とし(ステップS610)、そして再度、V50[c2]が0であるかの判定を行う(ステップS606)。
【0256】
このように、配列V50の1の要素がn1個になるまで、1の要素の設定処理が行われる。
【0257】
一方、配列出力部400は、c1<n1−1でないと判定したとき(ステップS609のNo)、配列V50の1の要素がn1個になったとして、配列V50における−1の要素の設定処理に移るべく、カウント値c1を0とし(ステップS611)、カウント値c2をc2←(c2+D[n1])mod(n)とする(ステップS612)。
【0258】
次に、配列出力部400は、配列V50の要素V50[c2]が0であるかを判定し(ステップS614)、0でないと判定した時は(ステップS614のNo)、カウント値c2をc2←(c2+1)mod(n)とし(ステップS613)、再度、要素V50[c2]が0であるか否かの判定を行う(ステップS614)。一方、配列出力部400は、V50[c2]が0であると判定した時(ステップS614のYes)、要素V50[c2]を−1に設定する(ステップS615)。
【0259】
これらの要素V50[c2]が0であるかの判定処理(ステップS614)、c2←(c2+1)mod(n)の処理(ステップS613)、およびV50[c2]←−1の処理(ステップS615)により、V50[c2]の要素が0でない場合に、V50[c2]の右側の要素で0であるものを巡回移動しながら順に探して−1に設定する。
【0260】
そして次に、配列出力部400は、カウンタc1’のカウント値c1がc1<n2−1であるかの判定を行う(ステップS616)。
【0261】
配列出力部400は、c1<n2−1であると判定したとき(ステップS616のYes)、カウント値c1をカウントアップすると共に(c1←c1+1)、カウント値c2をc2←(c2+D[c1+n1])mod(n)とし(ステップS617)、そして再度、V50[c2]が0であるかの判定を行う(ステップS614)。
【0262】
一方、配列出力部400は、c1<n2−1でないと判定したとき(ステップS616のNo)、配列V50の−1の要素がn2個になったとして配列V50を出力する。
【0263】
次に、図15のフローチャートにそって具体例を説明する。
図17は配列出力部400における配列V50の各段階での配列状態を示している。
【0264】
配列V50は251次元の配列(n=251)であり、n1=50、n2=50とする。また、整数Xを8ビットごとに分割したときの分割情報を例えば、分割情報D[0]=139、分割情報D[1]=130とする。
【0265】
図15のフローチャートによる流れで、本具体例に従えば、カウント値c2=D[0]+1=140となる(ステップS605)。
【0266】
そして、配列V50は全要素が0であるため、配列V50の左から140番目の要素V50[140]を1に設定する(ステップS608)。この配列状態は、図17に示す配列V51の通りであり、左から140番目の要素が1であり、その他の要素が0となっている。
【0267】
次に、配列V50の1の要素は50個でないため(ステップS609のNo)、配列V50の要素を1に設定する処理をさらに行うため、カウント値c2をc2←(c2+D[1])mod(n)とする(ステップS610)。カウント値c2=(140+130)mod251=19mod251となり、配列V51の左から19番の要素V51[19]を1にする。この配列状態は、図17に示す配列V52の通りであり、左から19番目と140番目の要素が1であり、その他の要素が0となっている。
【0268】
このように、配列V50の各要素に1を設定する処理をするとき、設定する位置の要素、例えばV50[120]がすでに1となっている場合は、その右側の要素を巡回移動して0の要素を探し、一番初めの0の要素を1に設定する。そして、V50[251]までのすべての要素が0でない場合は、巡回移動して一番左のV50[1]の要素に戻り、0の要素を1に設定する。
同様にして、配列V50の−1の要素を順に設定する。
【0269】
上述したように、配列出力部400は、配列V50における最初の1の要素を整数Xより求まる分割情報D[0]に基づいて一様に決定する。そして、最初に決定された1の要素の場所から整数Xにより求まる分割情報D[i]を基に順に次の要素を設定する位置を決定して、1あるいは−1を設定するため、配列V50は、整数Xから一様に分布する。
【0270】
このとき、配列出力部400は、配列V50におけるn1個の1の要素と、n2個の−1の要素を決定するために、入力される整数Xは、8ビットの分割情報を(n1+n2)個必要である。そのために、整数Xは、配列V50の各要素を十分設定できる大きいものを設計段階で選択すればよい。
【0271】
このように、本実施の形態によれば、配列出力部400は、整数Xに基づいて、一様にn次元の配列を出力することができる。そのため、NTRU暗号にFOSRTを適用した場合において、図1(a)の暗号化装置10の配列出力部100の代わりにこの配列出力部400とし、ハッシュ関数部40より出力されるハッシュ関数値H(m)に基づいて、配列出力部400が一様にn次元の配列を出力することで、ハッシュ関数の分布の一様性を保持することが可能となり、暗号化装置10で生成する暗号文の安全性を高めることができる。
【0272】
さらに、配列出力部400は、整数Xのみの情報より配列V50を設定しているため、メモリテーブルを用いる必要がなく、メモリが少なくてよいという効果が得られる。
【0273】
また、図1(b)の復号化装置15の配列出力部105の代わりに、この配列出力部200を用いることで暗号化された暗号文の復号が可能となる。
【0274】
尚、配列出力部100を暗号化装置10に用いて、ハッシュ関数値を基に配列を出力する構成としたがこれに限定されない。
【0275】
また、各実施の形態で説明した暗号化装置10は、図18に示す携帯電話機500内に搭載されて使用されたり、また、インターネット上の電子決済、電子商取引として使用されたりする。
【0276】
また、各実施の形態1、2、3、4において、各配列出力部は、n1個の要素が1、n2個の要素が−1、その他の要素が0の配列を出力しているが、1、−1が他の数であってもよい。また、各実施の形態1、2、3、4において、各配列出力部は、1、−1、0の3値の配列を出力するが、2値であってもよいし、4値以上であってもよい。
【0277】
また各実施の形態1、2、3、4のうちのいずれかを使用する暗号方法であってもよい。
【0278】
【発明の効果】
以上の説明から明らかなように、本発明に係る配列出力装置においては、入力された整数に依存して、K値の整数の組み合わせからなるn次元の様々な配列を出力する配列出力装置であって、初期配列を暫定的に決定する初期配列決定手段と、前記入力された整数に基づいて、前記初期配列決定手段が決定した前記初期配列の配列要素を改編する改編手段とを備えることを特徴とする。
【0279】
これによって、多くのメモリを使用することなく、整数値に基づいて一様にn次元の配列を得ることができ、ハッシュ関数値などの一様に分布された整数値に基づいてその一様性を保持してn次元の配列を得ることが可能となる。
【0280】
また、前記改編手段は、前記入力された整数を所定の整数で除算し剰余を求める除算部と、前記除算部が求めた剰余に基づいて、前記初期配列の配列要素を置換する置換部とを備えるようにしてもよい。
【0281】
これにより、ハッシュ関数値などの一様に分布された整数値に基づいてその一様性を保持してn次元の配列を得ることが可能となる。
【0282】
また、前記改編手段は、前記入力された整数を所定の整数で除算し剰余を求める除算部と、前記初期配列における整数P3の配列要素のうち前記除算部が求めた剰余に基づく位置の配列要素を整数P1に置き換える整数配置部とを備えるようにしてもよい。
【0283】
これにより、ハッシュ関数値などの一様に分布された整数値に基づいてその一様性を保持してn次元の配列を得ることが可能となる。
【0284】
また、メッセージを暗号化する暗号化装置であって、メッセ−ジを一方向関数で演算し、その結果を関数値として出力する関数値出力手段と、初期配列を暫定的に決定する初期配列決定手段、および前記関数値出力手段が出力する関数値に基づいて、前記初期配列決定手段が決定した前記初期配列の要素を改編する改編手段を備え、前記関数値に依存して、K値の整数の組み合わせからなるn次元の様々な配列を出力する配列出力手段と、前記配列出力手段が出力する配列を基に、暗号文を生成する暗号文生成手段とを備えることを特徴とする。
【0285】
これにより、メッセージ値のハッシュ関数値などの、一方向関数により一様に分布された整数値に基づいて、その一様性を保持してn次元の配列を得ることが可能となり、暗号文の安全性を高くすることができる。
【図面の簡単な説明】
【図1】本発明における第1の実施の形態に係る(a)は暗号化装置の構成を示すブロック図であり、(b)は復号化装置の構成を示すブロック図である。
【図2】同上の配列出力部の構成を示すブロック図である。
【図3】同上の配列出力部から出力される配列の配列状態を示す図である。
【図4】同上の配列出力部の動作を示すフローチャートである。
【図5】本発明における第2の実施の形態に係る配列出力部の構成を示すブロック図である。
【図6】同上の配列出力部における第1の数配置部の動作を示すフローチャートである。
【図7】同上の配列出力部における第1の数配置部から出力される配列の配列状態を示す図である。
【図8】同上の配列出力部における第2の数配置部の動作を示すフローチャートである。
【図9】同上の配列出力部における第2の数配置部から出力される配列の配列状態を示す図である。
【図10】本発明における第3の実施の形態に係る配列出力部の構成を示すブロック図である。
【図11】同上の配列出力部における第1の数配置部から出力される配列の配列状態を示す図である。
【図12】同上の配列出力部における第2の数配置部から出力される配列の配列状態を示す図である。
【図13】(a)(b)(c)はいずれも同上の配列出力部の各部で設定される配列の配列状態を示す図である。
【図14】本発明における第4の実施の形態に係る配列出力部の構成を示す図である。
【図15】同上の配列出力部の動作を示すフローチャートである。
【図16】同上の配列出力部に入力される整数を示す図である。
【図17】同上の配列出力部から出力される配列の配列状態を示す図である。
【図18】本発明の配列出力部を有する暗号化装置が搭載される携帯電話機の外観を示す外観図である。
【図19】従来の配列出力方法を示すフローチャートである。
【符号の説明】
10 暗号化装置
15 復号化装置
20 乱数生成部
25 復号部
30 連結部
35 分割部
40 ハッシュ関数部
45 ハッシュ関数部
50 暗号文生成部
55 暗号文生成部
65 判定部
100 配列出力部
110 初期配列決定部
120 配列要素置換部
200 配列出力部
210 第1の数配置部
220 第2の数配置部
300 配列出力部
310 第1の数配置部
320 第2の数配置部
400 配列出力部
500 携帯電話機

Claims (22)

  1. 入力された整数に依存して、K値の整数の組み合わせからなるn次元の様々な配列を出力する配列出力装置であって、
    初期配列を暫定的に決定する初期配列決定手段と、
    前記入力された整数に基づいて、前記初期配列決定手段が決定した前記初期配列の配列要素を改編する改編手段とを備え
    前記初期配列決定手段は、K値の整数の組み合わせからなるn次元の配列の1つであってK値のうちの同じ整数がそれぞれ連続した位置に配置されている配列を初期配列として暫定的に決定し、
    前記改編手段は、前記入力された整数に基づいて、前記初期配列決定手段が決定した前記初期配列の配列要素を置換し出力する
    ことを特徴とする配列出力装置。
  2. 前記n次元の配列は、n1個の配列要素が整数P1、n2個の配列要素が整数P2、・・・、nk個の配列要素が整数PkであるK値の整数の組み合わせからなる
    ことを特徴とする請求項記載の配列出力装置。
  3. 前記改編手段は、
    前記入力された整数を所定の整数で除算し剰余を求める除算部と、
    前記除算部が求めた剰余に基づいて、前記初期配列の配列要素を置換する置換部とを備える
    ことを特徴とする請求項に記載の配列出力装置。
  4. 前記除算部は、前記入力された整数を所定の整数で除算したときの商を被除数としてさらに所定の整数で除算することを繰り返し、
    前記置換部は、前記除算部が除算毎に求める剰余に基づいて、前記初期配列の配列要素を順次置換する
    ことを特徴とする請求項記載の配列出力装置。
  5. 前記置換部は、前記初期配列の配列要素のうち、前記除算部が除算したときの除数J番目の配列要素と、前記除算部が除算したときの剰余R+1番目の配列要素とを置換し、さらに置換された配列においても前記除算部が繰り返す除算毎に求める除数および剰余に基づいて同様に順次置換する
    ことを特徴とする請求項記載の配列出力装置。
  6. 前記除算部は、除数をnから2までの各場合において順に除算を行い、
    前記置換部は、前記除算部が行う除算毎に前記初期配列を順次置換する
    ことを特徴とする請求項記載の配列出力装置。
  7. 前記n次元の配列は、1,−1,0の3値の組み合わせからなる配列である
    ことを特徴とする請求項記載の配列出力装置。
  8. 入力された整数に依存して、K値の整数の組み合わせからなるn次元の様々な配列を出力する配列出力装置であって、
    初期配列を暫定的に決定する初期配列決定手段と、
    前記入力された整数に基づいて、前記初期配列決定手段が決定した前記初期配列の配列要素を改編する改編手段とを備え、
    前記初期配列決定手段は、すべての配列要素がK値のうちのいずれかの整数P3である配列を初期配列として暫定的に決定し、
    前記改編手段は、前記初期配列決定手段が決定した前記初期配列における整数P3の配列要素のうち前記入力された整数に基づく位置の配列要素をK値の他の整数P1に置き換えて出力し、
    前記n次元の配列は、n1個の配列要素が整数P1、n2個の配列要素が整数P2、・・・、nk個の配列要素が整数PkであるK値の整数の組み合わせからなり、
    前記改編手段は、さらに、
    前記入力された整数を所定の整数で除算し剰余を求める除算部と、
    前記初期配列における整数P3の配列要素のうち前記除算部が求めた剰余に基づく位置の配列要素を整数P1に置き換える整数配置部とを備え、
    前記改編手段は、さらに、
    前記整数配置部が前記初期配列のn1個の配列要素を整数P1に置き換えた配列における整数P3の配列要素のうち、さらにn2個の配列要素を前記除算部が求める剰余に基づいてK値のうちの整数P2に置き換える第2の整数配置部を備え、
    前記n次元の配列は3値の組み合わせからなる配列であり、前記整数P1、整数P2、整数P3は、それぞれ1,−1,0のうちいずれかである
    ことを特徴とする請求項1記載の配列出力装置。
  9. 前記除算部は、前記入力された整数を所定の整数で除算したときの商を被除数としてさらに所定の整数で除算することを繰り返し、
    前記整数配置部は、整数P1がn1個となるまで前記初期配列における整数P3の配列要素のうち前記除算部が除算毎に求める剰余に基づく位置の配列要素を整数P1に順次置き換える
    ことを特徴とする請求項記載の配列出力装置。
  10. 前記入力された整数は複数のビット情報で示されており、
    前記改編手段は、前記入力された整数を、所定数のビット情報からなる個々の分割情報に分割する分割部と、
    前記初期配列における整数P3の配列要素のうち、前記分割情報に基づく位置の配列要素をK値の他の整数P1に置き換える第3の整数配置部とを備える
    ことを特徴とする請求項記載の配列出力装置。
  11. 前記n次元の配列は、n1個の配列要素が整数P1、n2個の配列要素が整数P2、・・・、nk個の配列要素が整数PkであるK値の整数の組み合わせからなることを特徴とする請求項記載の配列出力装置。
  12. 前記第3の整数配置部は、前記初期配列における整数P3の配列要素のうち、前記個々の分割情報が示す整数に基づく位置の配列要素をK値の他の整数P1に順次置き換える
    ことを特徴とする請求項10記載の配列出力装置。
  13. 前記第3の整数配置部は、前記初期配列における整数P3の配列要素のうちn1個の配列要素が整数P1となるまで、個々の分割情報が示す整数を順に加算した累積値に基づく位置の配列要素を順次整数P1に置き換える
    ことを特徴とする請求項11記載の配列出力装置。
  14. 前記改編手段はさらに、前記第3の整数配置部が前記初期配列のn1個の配列要素を整数P1に置き換えた配列における整数P3の配列要素のうち、さらにn2個の配列要素を前記分割情報に基づいてK値のうちの整数P2に置き換える第4の整数配置部を備える
    ことを特徴とする請求項12に記載の配列出力装置。
  15. 前記n次元の配列は3値の組み合わせからなる配列であり、前記整数P1、整数P2、整数P3はそれぞれ、1,−1,0のうちのいずれかであることを特徴とする請求項13記載の配列出力装置。
  16. 入力された整数に依存して、K値の整数の組み合わせからなるn次元の様々な配列を出力する配列出力装置に用いられる配列出力方法であって、
    K値の整数の組み合わせからなるn次元の配列の1つであってK値のうちの同じ整数がそれぞれ連続した位置に配置されている配列を初期配列として暫定的に決定して前記配列出力装置内の記憶部に格納する初期配列決定ステップと、
    前記入力された整数に基づいて、前記初期配列決定ステップで決定した前記初期配列の配列要素を前記記憶部から読出して、置換し出力する改編ステップとを備える
    ことを特徴とする配列出力方法。
  17. 前記改編ステップは、
    前記入力された整数を所定の整数で除算し剰余を求める除算ステップと、
    前記除算ステップで求めた剰余に基づいて、前記初期配列の配列要素を置換する置換ステップとを備える
    ことを特徴とする請求項16に記載の配列出力方法。
  18. 入力された整数に依存して、K値の整数の組み合わせからなるn次元の様々な配列を出力する配列出力装置に用いられる配列出力方法であって、
    すべての配列要素がK値のうちのいずれかの整数P3である配列を初期配列として暫定的に決定して前記配列出力装置内の記憶部に格納する初期配列決定ステップと、
    前記入力された整数に基づいて、前記初期配列決定ステップで決定した前記初期配列における整数P3の配列要素のうち前記入力された整数に基づく位置の配列要素を前記記憶部から読出して、K値の他の整数P1に置き換えて出力する改編ステップとを備え、
    前記n次元の配列は、n1個の配列要素が整数P1、n2個の配列要素が整数P2、・・・、nk個の配列要素が整数PkであるK値の整数の組み合わせからなり、
    前記改編ステップは、さらに、
    前記入力された整数を所定の整数で除算し剰余を求める除算ステップと、
    前記初期配列における整数P3の配列要素のうち前記除算部が求めた剰余に基づく位置の配列要素を整数P1に置き換える整数配置ステップとを備え、
    前記除算ステップは、前記入力された整数を所定の整数で除算したときの商を被除数としてさらに所定の整数で除算することを繰り返し、
    前記整数配置ステップは、整数P1がn1個となるまで前記初期配列における整数P3の配列要素のうち前記除算部が除算毎に求める剰余に基づく位置の配列要素を整数P1に順次置き換え、
    前記改編ステップは、さらに、
    前記整数配置部が前記初期配列のn1個の配列要素を整数P1に置き換えた配列における整数P3の配列要素のうち、さらにn2個の配列要素を前記除算部が求める剰余に基づいてK値のうちの整数P2に置き換える第2の整数配置ステップを備え、
    前記n次元の配列は3値の組み合わせからなる配列であり、前記整数P1、整数P2、整数P3は、それぞれ1,−1,0のうちいずれかである
    ことを特徴とする配列出力方法。
  19. 入力された整数に依存して、K値の整数の組み合わせからなるn次元の様々な配列を出力する配列出力装置のためのプログラムであって、
    前記配列出力装置のコンピュータに対し、
    K値の整数の組み合わせからなるn次元の配列の1つであってK値のうちの同じ整数がそれぞれ連続した位置に配置されている配列を初期配列として暫定的に決定して前記配列出力装置内の記憶部に格納する初期配列決定処理と、
    前記入力された整数に基づいて、前記初期配列決定ステップで決定した前記初期配列の配列要素を前記記憶部から読出して、置換し出力する改編処理とを実行させる
    ことを特徴とするプログラム。
  20. 入力された整数に依存して、K値の整数の組み合わせからなるn次元の様々な配列を出力する配列出力装置のためのプログラムであって、
    前記配列出力装置のコンピュータに対し、
    すべての配列要素がK値のうちのいずれかの整数P3である配列を初期配列として暫定的に決定して前記配列出力装置内の記憶部に格納する初期配列決定処理と、
    前記入力された整数に基づいて、前記初期配列決定ステップで決定した前記初期配列における整数P3の配列要素のうち前記入力された整数に基づく位置の配列要素を前記記憶部から読出して、K値の他の整数P1に置き換えて出力する改編処理とを実行させ、
    前記n次元の配列は、n1個の配列要素が整数P1、n2個の配列要素が整数P2、・・・、nk個の配列要素が整数PkであるK値の整数の組み合わせからなり、
    前記改編処理は、さらに、
    前記入力された整数を所定の整数で除算し剰余を求める除算処理と、
    前記初期配列における整数P3の配列要素のうち前記除算部が求めた剰余に基づく位置の配列要素を整数P1に置き換える整数配置処理とを含み、
    前記除算処理は、前記入力された整数を所定の整数で除算したときの商を被除数としてさらに所定の整数で除算することを繰り返し、
    前記整数配置処理は、整数P1がn1個となるまで前記初期配列における整数P3の配列要素のうち前記除算部が除算毎に求める剰余に基づく位置の配列要素を整数P1に順次置き換え、
    前記改編処理は、さらに、
    前記整数配置部が前記初期配列のn1個の配列要素を整数P1に置き換えた配列における整数P3の配列要素のうち、さらにn2個の配列要素を前記除算部が求める剰余に基づいてK値のうちの整数P2に置き換える第2の整数配置処理を含み、
    前記n次元の配列は3値の組み合わせからなる配列であり、前記整数P1、整数P2、整数P3は、それぞれ1,−1,0のうちいずれかである
    ことを特徴とするプログラム。
  21. メッセージを暗号化する暗号化装置であって、
    メッセ−ジを一方向関数で演算し、その結果を関数値として出力する関数値出力手段と、
    初期配列を暫定的に決定する初期配列決定手段、および前記関数値出力手段が出力する関数値に基づいて、前記初期配列決定手段が決定した前記初期配列の要素を改編する改編手段を備え、前記関数値に依存して、K値の整数の組み合わせからなるn次元の様々な配列を出力する配列出力手段と、
    前記配列出力手段が出力する配列を基に、暗号文を生成する暗号文生成手段とを備え、
    前記初期配列決定手段は、K値の整数の組み合わせからなるn次元の配列の1つであってK値のうちの同じ整数がそれぞれ連続した位置に配置されている配列を初期配列として暫定的に決定し、
    前記改編手段は、前記入力された整数に基づいて、前記初期配列決定手段が決定した前記初期配列の配列要素を置換し出力する
    ことを特徴とする暗号化装置。
  22. 請求項21記載の暗号化装置で生成された暗号文を復号化して元のメーセッジを出力する復号化装置であって、
    暗号文を復号し、元のメッセージに対応する復号値を出力する復号手段と、
    前記復号手段が出力する復号値を一方向関数で演算し、その結果を関数値として出力する第2の関数値出力手段と、
    初期配列を暫定的に決定する初期配列決定手段、および前記第2の関数値出力手段が出力する関数値に基づいて、前記初期配列決定手段が決定した前記初期配列の要素を改編する改編手段を備え、前記関数値に依存して、K値の整数の組み合わせからなるn次元の様々な配列を出力する配列出力手段と、
    前記配列出力手段が出力する配列を基に、チェック用暗号文を生成する暗号文生成手段と、
    前記暗号文と前記チェック用暗号文が一致するか否かを判定し、一致するときに前記復号手段が出力する前記復号値に対して所定の処理を施し元のメッセージを出力する出力手段とを備える
    ことを特徴とする復号化装置。
JP2002299549A 2001-10-19 2002-10-11 配列出力装置、配列出力方法、暗号化装置、および復号化装置 Expired - Lifetime JP4208230B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2002299549A JP4208230B2 (ja) 2001-10-19 2002-10-11 配列出力装置、配列出力方法、暗号化装置、および復号化装置

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2001-321651 2001-10-19
JP2001321651 2001-10-19
JP2002299549A JP4208230B2 (ja) 2001-10-19 2002-10-11 配列出力装置、配列出力方法、暗号化装置、および復号化装置

Publications (2)

Publication Number Publication Date
JP2003195755A JP2003195755A (ja) 2003-07-09
JP4208230B2 true JP4208230B2 (ja) 2009-01-14

Family

ID=27615576

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002299549A Expired - Lifetime JP4208230B2 (ja) 2001-10-19 2002-10-11 配列出力装置、配列出力方法、暗号化装置、および復号化装置

Country Status (1)

Country Link
JP (1) JP4208230B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4567364B2 (ja) * 2003-04-24 2010-10-20 パナソニック株式会社 パラメータ生成装置、暗号化システム、復号化システム、暗号装置、暗号化方法、復号化方法、およびプログラム
KR101024768B1 (ko) 2003-04-24 2011-03-24 파나소닉 주식회사 파라미터 생성 장치, 암호 시스템, 복호 시스템, 암호장치, 복호 장치, 암호화 방법, 복호화 방법, 및 그프로그램
WO2005098796A1 (ja) * 2004-03-31 2005-10-20 Nec Corporation 暗号方式の安全性を保証するパディング適用方法

Also Published As

Publication number Publication date
JP2003195755A (ja) 2003-07-09

Similar Documents

Publication Publication Date Title
US7564970B2 (en) Exponential data transform to enhance security
AU2005277664B2 (en) Permutation data transform to enhance security
US7577250B2 (en) Key derivation functions to enhance security
JP5000365B2 (ja) ハッシュ値生成装置、プログラム及びハッシュ値生成方法
JP6007975B2 (ja) フォーマット保存暗号化装置、方法およびプログラム、復号化装置、方法およびプログラム
KR20150003932A (ko) 의사 랜덤 시퀀스 생성 방법 및 데이터 스트림의 코딩 또는 디코딩 방법
US8077861B2 (en) Permutation data transform to enhance security
EP1304829B1 (en) A numerical array output device, a numerical array output method, an encryption device, and a decryption device
RU2411666C1 (ru) Способ шифрования
JP2017126970A (ja) 共有鍵生成プログラム、共有鍵生成方法および情報処理端末
JP4208230B2 (ja) 配列出力装置、配列出力方法、暗号化装置、および復号化装置
JP2002252610A (ja) 暗号装置および復号装置並びに公開鍵暗号方式および公開鍵復号方式
Chang et al. Novel Encryption Scheme Based on Continued Fraction and Permutation
JP3238670B2 (ja) ハッシュ関数方式
JP2004302378A (ja) 暗号化方式、復号化方式並びに暗号化システム、復号化システム
Venkata et al. Application of Huffman data compression algorithm in hashing computation
CN116366251A (zh) 基于向量解码的格公钥数据加解密方法和密钥封装方法
JP2002139995A (ja) 公開鍵生成装置、暗号化装置および復号装置
JPH06138820A (ja) 暗号化装置及び暗号復号装置
Abbas et al. Audio cryptosystem based on LFSH and Chaotic map with ECC key management
Kammadanam et al. A Public Key Exchange Cryptosystem Based on Ideal Secrecy
JP3220099B2 (ja) ハッシュ関数方式
KR20020050680A (ko) 행열 다항식 환 과 체를 기반으로 한 공개키 암호시스템

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20050701

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080805

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080825

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

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

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 4208230

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20111031

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20121031

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20131031

Year of fee payment: 5

EXPY Cancellation because of completion of term