(57)【要約】【構成】  平文を符号語に変換し，ベクトルＶの全成分の和Ｓよりも小さな法Ｐを用いて，ナップザック暗号に変換し送信する．復号側では，中間平文の候補に変換し，この候補に中間平文の欠損部を推定して復号し，符号語が得られると復号に成功したものとし，符号語が得られないと欠損部の推定値を変更して，再度復号する．【効果】  ナップザック暗号の強度を増すことができる．【選択図】  図３
2006189607.tif 000002
【特許請求の範囲】
【請求項１】
ナップザック暗号文Ｃを復号するための装置において，
暗号文Ｃを，ベクトルＶの全成分の和Ｓよりも小さな自然数Ｐを法とし，かつ秘密の数ｗを用いて，中間平文の候補Ｍ'へ復号するための中間平文算出手段と，
中間平文の候補Ｍ'を変更しながらベクトルＶを用いて復号し，復号過程で所定の集合Ｆに属する拡大平文ｍ'が得られればナップザック暗号を復号したものとし，得られなければ中間平文の候補Ｍ'を変更するための復号手段と，
得られた拡大平文ｍ'を，語長が拡大平文ｍ'よりも短い平文ｍに変換するための変換手段とを設けたことを特徴とする，復号装置．
【請求項２】
前記所定の集合Ｆは符号語の集合Codeであることを特徴とする，請求項１の復号装置．
【請求項３】
前記復号手段では，中間平文の候補Ｍ'を法Ｐずつ変更，もしくはベクトルＶの各成分Ｖi単位で変更するようにしたことを特徴とする，請求項１または２の復号装置．
【請求項４】
前記復号手段では，中間平文の候補Ｍ'をベクトルＶの各成分Ｖi(ｉ＝ｔ＋１〜ｎ)単位で変更し，かつこれ以外の成分Ｖi(ｉ＝１〜ｔ)において，ベクトルＶが超増加性を有することを特徴とする，請求項３の復号装置．
【請求項５】
前記拡大平文ｍ'が符号語の連接で，前記復号手段では，個々の符号語単位で復号して，符号語が得られると中間平文の候補Ｍ'の復号を続行し，符号語以外のものが得られると中間平文の候補Ｍ'を変更するようにしたことを特徴とする，請求項２の復号装置．
【請求項６】
ナップザック暗号文Ｃを復号するためのプログラムにおいて，
暗号文Ｃを，ベクトルＶの全成分の和Ｓよりも小さな自然数Ｐを法とし，かつ秘密の数ｗを用いて，中間平文の候補Ｍ'へ復号するための中間平文算出命令と，
中間平文の候補Ｍ'を変更しながらベクトルＶを用いて復号し，復号過程で所定の集合Ｆに属する拡大平文ｍ'が得られればナップザック暗号を復号したものとし，得られなければ中間平文の候補Ｍ'を変更するための復号命令と，
得られた拡大平文ｍ'を，語長が拡大平文ｍ'よりも短い平文ｍに変換するための変換命令とを設けたことを特徴とする，復号プログラム．
【請求項７】
前記復号命令では，中間平文の候補Ｍ'を法Ｐずつ変更，もしくはベクトルＶの各成分Ｖi単位で変更するようにしたことを特徴とする，請求項６の復号プログラム．
【請求項８】
前記所定の集合Ｆは符号語を連接したものであり，かつ前記拡大平文  ｍ'は符号語の連接で，前記復号命令では，個々の符号語単位で復号して，符号語が得られると中間平文の候補Ｍ'の復号を続行し，符号語以外のものが得られると中間平文の候補  Ｍ'を変更するようにしたことを特徴とする，請求項６の復号プログラム．
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は暗号通信に関し，特に法ＰをベクトルＶの全成分の和Ｓよりも小さくした新規なナップザック暗号システムに関し，特にこのような暗号を効率的に復号するための復号装置とそのプログラムとに関する．
【背景技術】
【０００２】
MerkleとHellmanは，暗号化処理が加算のみにより実行し得る公開鍵暗号として，超増加数列をトラップドアに用いたナップザック暗号(ＭＨ暗号)を提案した(非特許文献１)．しかしながら，ナップザック暗号は，Shamirの攻撃(非特許文献２)や低密度攻撃(非特許文献３〜５)によって，容易に解読できることが知られている．このため，ナップザック暗号の安全性は疑問視されている．
【０００３】
しかしながら，量子コンピュータが実現すると，素因数分解や離散対数問題の困難性に基礎を置く，多くの公開鍵暗号は解読されることが知られている．従って，安全なナップザック暗号を探求することは非常に重要な意味を持つ．このような観点から発明者らは，ナップザック暗号を改良して，暗号化や復号を高速で行えるとの利点を維持しながら，安全性を向上することを検討してきた(特許文献１)．
【０００４】
ナップザック暗号の構成法を以下に示す．またナップザック暗号の鍵等を，表１に示す．
【０００５】
表１
ナップザック暗号の鍵  他
秘密鍵：        Ｐ(素数)，
Ｖ(超増加ベクトルでその全成分の和をＳとする)，
ｗ(秘密の数)  
公開鍵：        ａ(超増加ベクトルＶと同じ次元のベクトル)  
平文：          ｍ(ブロック長ｎ)
【０００６】
復号側のBobは以下に述べる手順に従って鍵を生成する．まず，秘密鍵の超増加ベクトルＶ＝(Ｖ１,Ｖ２,…,Ｖｎ)を生成する．すなわち，Ｖ1を正整数の乱数とし，Ｖｉ
(ｉ＝２,３,…,ｎ)を(1)式を充たす正整数の乱数となるように，生成する．
Ｖｉ＞Ｓｉ−１                             (1)  
ただし，
Ｓｉ＝ΣＶｋ    (ｋ＝１〜ｉ)              (2)
とする．任意のｉ(ｉ≧２)について，(1)式が成立することを超増加性という．このとき，(7)式で表される密度の損失を最小限にするために，
Ｖｉ＝Ｓｉ−１＋σｉ，  １＜＜σｉ＜＜Ｓｉ−１ とするのが望ましい．次に，
Ｐ＞Ｓｎ＝Ｓ                             (3)  
を満たすように素数Ｐを生成する．さらに，秘密鍵ｗ∈Ｚ＊Ｐをランダムに生成し，(4)式に従って，超増加ベクトルＶをモジュラ変換することにより，公開鍵ベクトルａを得る．
a＝ｗＶ mod Ｐ                      (4) 
【０００７】
暗号化は次のようにして行う．送信者のAliceは，平文ｍ＝(ｍ１,ｍ２,…,ｍｎ)∈
｛０,１｝ｍと公開鍵ベクトルａを用いて，(5)式により暗号化を行い，暗号文Ｃを得る．
Ｃ＝ｍａ＝Σ(ｍｉａｉ)  i=1〜n              (5) 
【０００８】
暗号文Ｃを受信したBobは，まず中間平文Ｍを(6)式により求める．ここにｗ−１は体Ｚ＊Ｐでのｗの逆数である．
Ｍ＝ｗ−１Ｃ  mod Ｐ                      (6)
Bobは次いで，表２のアルゴリズムにより復号を行う．この過程で，各ｍiの値がｎから始めて１までの順に定まる．復号が可能なのは，Ｐ＞Ｓ  で暗号文Ｃに平文ｍが１：１に対応し，かつ超増加ベクトルＶを用いているので，ｍiの値を一意に決定できるからである．
【０００９】
表２
ナップザック暗号の復号アルゴリズム
for i＝n doｗnto 1 
｛if (M≧Ｖi) ｛ｍｉ＝1，Ｍ←Ｍ−Ｖｉ｝ else｛mi＝0｝｝
【００１０】
次にナップザック暗号の強度，特に低密度攻撃への強度を決定する密度について，説明する．ナップザック暗号の密度は，平文ｍの次元をｎ，最大の暗号文をＣmaxとすると，(7)式で表される．
ρ＝n／log2 Ｃｍａｘ                    (7)
密度がρ＜0.9408  のとき，ナップザック暗号は低密度攻撃により解読できる（非特許文献５）．
【非特許文献１】R.C. Merkle，M.E. Hellman: “Hiding information and Signatures in trapdoor knapsacks,” IEEE，Trans. Inf. Theory，IT-24(5)，pp.525.530，1978.
【非特許文献２】A. Shamir: “A polynomial time algorithm for breaking the basic Merkle-Hellman cryptosystems,” Proc. Crypto'82，LNCS，pp.279.288，Springer-Verlag，Berlin，1982.
【非特許文献３】E.F. Brickell: “Solving loｗ density knapsacks,” Proc. Crypto'83，LNCS，pp.25.37，Springer-Verlag，Berlin，1984.
【非特許文献４】J.C. Lagarias，A.M. Odlyzko: “Solving loｗ density Subset Sum problems,” J. Assoc. Comp. Math.，Vol.32，pp.229.246，Preliminary Version in Proc. 24th IEEE，1985.
【非特許文献５】M.J. Coster，B.A. LaMacchia，A.M. Odlyzko，C.P. Schnorr:”An improved loｗ-density subset sum algorithm,” Proc. Eurocrypto'91,LNCS，pp.54.67. Springer-Verlag，Berlin，1991.
【特許文献１】特開2002-116692
【発明の開示】
【発明が解決しようとする課題】
【００１１】
この発明の課題は，安全性の高い新規なナップザック暗号システムを提案し，それに用いる復号装置や復号プログラムを提供することにある．
この発明の追加の課題は，復号を高速化することにある．
【課題を解決するための手段】
【００１２】
この発明で用いる，改良型のナップザック暗号システムについて説明する．まず，従来より小さな法を使用する(法縮小と称する)ことにより，暗号文の密度を増し，安全性を高める．法Ｐは超増加ベクトルの和Ｓｎ＝Ｓ  よりも小さなものを用い，暗号文の密度ρは例えば  ρ＞１  にできる．これによって低密度攻撃は実質上不可能になり，暗号強度は飛躍的に向上する．
【００１３】
しかし法Ｐを縮小することによって，一意復号が保証されなくなる．そこで平文を拡大して冗長性を持たせることにより，再度一意性を保証する．例えばブロック長ｕの平文ｍを語長ｎの拡大平文ｍ'へ変換する．この変換での平文の集合｛ｍ｝の像を所定の集合Ｆとする．法ＰがＳよりも小さいので，正しい中間平文Ｍを得ることが難しい．そこで中間平文の値を推定し，これを中間平文の候補Ｍ'とする．中間平文の候補Ｍ'を正しく復号できれば，Ｆの元が得られ，正しく復号できなければＦの元以外のものが得られる．従って中間平文の候補Ｍ'を推定し，復号してＦの元が得られるかどうかを評価し，得られれば復号をうち切り，得られなければ中間平文の候補Ｍ'を変更するループを，Ｆの元が得られるまで繰り返せば一意に復号できる．
【００１４】
この発明の復号装置は，ナップザック暗号文Ｃを復号するための装置において，暗号文Ｃを，ベクトルＶの全成分の和Ｓよりも小さな自然数Ｐを法とし，かつ秘密の数ｗを用いて，中間平文の候補Ｍ'へ復号するための中間平文算出手段と，中間平文の候補Ｍ'を変更しながらベクトルＶを用いて復号し，復号過程で所定の集合Ｆに属する拡大平文ｍ'が得られればナップザック暗号を復号したものとし，得られなければ中間平文の候補Ｍ'を変更するための復号手段と，得られた拡大平文ｍ'を，語長が拡大平文ｍ'よりも短い平文ｍに変換するための変換手段とを設けたことを特徴とする．
【００１５】
好ましくは，前記所定の集合Ｆを符号語の集合Codeとする．
【００１６】
また好ましくは，前記復号手段では，中間平文の候補Ｍ'を法Ｐずつ変更，もしくはベクトルＶの各成分Ｖi単位で変更する．中間平文の候補Ｍ'を法Ｐずつ変更することを中間平文の探索と称し，中間平文の候補Ｍ'をベクトルＶの各成分Ｖi単位で変更することを欠損情報の探索と称する．なおＶi単位でとは，Ｖi±Ｖj  (ｉ≠ｊ)のように超増加ベクトルの複数の成分の加算値や差を用いて，中間平文の候補Ｍ'を変更することを含んでいる．
【００１７】
さらに好ましくは，前記復号手段では，中間平文の候補Ｍ'をベクトルＶの各成分Ｖi(ｉ＝ｔ＋１〜ｎ)単位で変更し，かつこれ以外の成分Ｖi(ｉ＝１〜ｔ)において，ベクトルＶが超増加性を有するようにする．なお成分Ｖi(ｉ＝ｔ＋１〜ｎ)では，ベクトルＶは超増加性も単なる増加性も特に必要ではない．
【００１８】
最も好ましくは，前記拡大平文ｍ'が符号語の連接で，前記復号手段では，個々の符号語単位で復号して，符号語が得られると中間平文の候補Ｍ'の復号を続行し，符号語以外のものが得られると中間平文の候補Ｍ'を変更する．
【００１９】
この発明の復号装置と復号プログラムは実質的に同じものであり，復号装置に関する記載は特に断らない限り，復号プログラムにも当てはまり，また復号プログラムに関する記載は特に断らない限り復号装置にも当てはまる．特許請求の範囲等の符号は，実施例との対応のためのもので，特許請求の範囲を限定するためのものではない．
【００２０】
この発明の復号プログラムは，ナップザック暗号文Ｃを復号するためのプログラムにおいて，暗号文Ｃを，ベクトルＶの全成分の和Ｓよりも小さな自然数Ｐを法とし，かつ秘密の数ｗを用いて，中間平文の候補Ｍ'へ復号するための中間平文算出命令と，中間平文の候補Ｍ'を変更しながらベクトルＶを用いて復号し，復号過程で所定の集合Ｆに属する拡大平文ｍ'が得られればナップザック暗号を復号したものとし，得られなければ中間平文の候補Ｍ'を変更するための復号命令と，得られた拡大平文ｍ'を，語長が拡大平文ｍ'よりも短い平文ｍに変換するための変換命令とを設けたことを特徴とする．
【００２１】
好ましくは，前記復号命令では，中間平文の候補Ｍ'を法Ｐずつ変更，もしくはベクトルＶの各成分Ｖi単位で変更する．
【００２２】
特に好ましくは，前記所定の集合Ｆは符号語を連接したものであり，かつ前記拡大平文ｍ'は符号語の連接で，前記復号命令では，個々の符号語単位で復号して，符号語が得られると中間平文の候補Ｍ'の復号を続行し，符号語以外のものが得られると中間平文の候補Ｍ'を変更する．
【発明の効果】
【００２３】
この発明では，ナップザック暗号に対して法Ｐを全成分の和Ｓよりも小さくすることにより，暗号文を高密度化する．これにより例えば１を越える高い密度を実現でき，低密度攻撃に対して非常に高い耐性を有する暗号システムが得られる．そしてこのようなナップザック暗号を復号するため，中間平文を何らかの意味で探索しながら復号する．復号は単純なナップザック暗号に対して低速であるが，一般にナップザック暗号は他の公開鍵暗号に比較して非常に高速に復号できるため，実用上問題となるものではない．このためこの発明では，安全性が極めて高い新規なナップザック暗号システムを提案して，その復号装置と復号プログラムとを提供できる．
【発明を実施するための最良の形態】
【００２４】
以下に本発明を実施するための最適実施例を示す。
【実施例】
【００２５】
実施例の概要を説明する．実施例では，法縮小を用いる暗号の基本方式としてCHK暗号を説明する．次に，法縮小を行う暗号に対する復号法として二種の探索復号法を説明する．最初のものは中間平文探索法で，これをCHK-1暗号と称する．次のものは欠損情報探索法でこれをCHK-2暗号と称する．最後にCHK-1暗号を改良したCHK-3'暗号と，CHK-2暗号を改良したCHK-3暗号を説明する．CHK-2やCHK-3暗号では，秘密鍵を超増加ベクトルとする必要がない．
【００２６】
CHK-1，2暗号では，中間平文の候補を最後まで復号しないと真の中間平文か否かを判定できず，復号に時間を要する．これに対して，CHK-3暗号やCHK-3'暗号では，中間平文の候補が真の中間平文でない場合，速やかにこの候補を棄却して，次の候補を処理できる．
【００２７】
表３に実施例で用いる主な記号を示す．
【００２８】
表３
改良ナップザック暗号の符号
平文：    ｍ            ブロック長ｕ
拡大平文：ｍ'            ｍ'＝ｆ(ｍ)でブロック長ｎ 
ｆ(｛ｍ｝)をCodeとし，Codeから｛ｍ｝への全射をｇ(ｍ')とする
：ｒ            誤り訂正符号の誤り訂正記号
秘密鍵：法Ｐ            好ましくは素数    ２−ｈＳｎ＜Ｐ＜Ｓｎ
ベクトルＶ      CHK-2,CHK-3で欠損情報を探索する部分について，
増加性不要
他の部分は超増加ベクトルとする
乱数ｗ          Ｐが素数で無い場合，Ｐとｗが互いに素なことが好ましいが，                        公約数を持っても良い
公開鍵：a 
公開情報：ｆ(・)，u，n 
CHK-3やCHK-3'では，拡大平文ｍ'をｄ個の符号語の連接として，各i(i＝1〜d)
毎に，符号化関数ｆiやブロック長ｕiを定めても良い．
中間平文の候補：        Ｍ'
Ｍ'＋ｋＰ(ｋ＝０〜２ｈ)の順に探索するものを中間平文探索
ｉ＞ｔについて，ｍi'の値を(０,０,…,０)から(１,１,…,１)の範囲で仮定し，        Ｍ−Σｍi'Ｖiを中間平文の候補とするものを，欠損情報探索という
【００２９】
CHK暗号 
平文をｍ ＝(ｍ1,ｍ2,…,ｍu)∈｛0,1｝u とする．拡大平文ベクトルｍ'∈｛0,1｝nを公開の拡大変換関数(符号化関数)ｆ(・)を用いて(8)式により定義する．
ｍ'＝ｆ(ｍ)                                (8) 
ただしｆには任意のｍ∈ {0,1｝u に対して，ｍ ＝ ｇ(ｆ(ｍ))を満たす変換関数ｇ が存在する．また，符号語全体の集合Codeを(9)式で定義する．
Code＝ {ｆ(ｍ)｜ｍ∈｛0,1｝u               (9)
任意の符号語ｍ'について，ｍ'∈Code であるか否かの判定を行う多項式アルゴリズムが必要で，好ましくはｆ(・)は例えば誤り訂正符号や誤り検査符号の符号化関数を用いる．この場合，ｍ'は誤り訂正・検査符号の符号語である．
【００３０】
Bobは，ナップザック暗号同様に，(1)式によりｎ次元のベクトルＶを生成し，(2)式によりＳｎを求め，
2−ｈ Ｓｎ ＜ Ｐ ＜ Ｓｎ                     (10) 
を満たすように素数Ｐを生成する．ｈは例えば，  ｈ＋ｕ＝ｎ  である．さらに秘密鍵ｗ∈Ｚ＊Ｐをランダムに生成し，(16)式によりＶをモジュラ変換することにより，公開鍵ａを得る．
ａ＝ｗＶ mod Ｐ                           (11) 
【００３１】
好ましくはa の成分を置換σで適当に置換して公開する．すなわち，n次対称群の元σを秘密にし，σにより置換した(aσ(1),aσ(2),…,aσ(n))を公開鍵ベクトルａとする．置換前の鍵を置換後の鍵ａから特に区別して言及する場合，鍵ａ０と呼ぶ．この場合でもσを知るBobは復号できる．またAliceは，(8)式により，平文ベクトルｍにｆ(ｍ)により求めた拡大平文ｍ'を計算し，次式により暗号化を行い，暗号文Ｃを得る．
Ｃ＝ｍ'ａ                                (12) 
【００３２】
法ＰはＳｎより小さいので，拡大平文ｍ'のビット長が暗号文Ｃの情報量より多くなる．すなわちAliceが送ろうとした情報の一部は欠損し，Bobに伝えることができない．このため中間平文候補Ｍ'を(13)式により求め，適当な探索復号アルゴリズムにより復号する．
Ｍ'＝ ｗ−１Ｃ mod Ｐ                      (13) 
【００３３】
CHK-1暗号では，正当な中間平文を探索できた際には，超増加数列の性質により正しく復号できることを利用して復号する．このとき，真の中間平文Ｍは適当な正整数  k ＜ 2h が存在し，
Ｍ ＝ Ｍ'＋kＰ                          (14)
と表現される．表４に復号アルゴリズムを示す．
【００３４】
表４
中間平文探索法での復号アルゴリズム 
do {Ｍ＝Ｍ' 
for ｉ=ｎ downto 1 
｛ if (Ｍ≧Ｖi)  ｛ｍi'＝１；  Ｍ←Ｍ−Ｖi}  else｛ｍi'＝０｝}
if  ｍ'∈Code  and  Ｍ＝0｝
｛ｍ＝ｇ(ｍ')；  output  ｍ｝
Ｍ'←Ｍ'＋Ｐ
｝  while  (Ｍ'≦Ｓｎ)
【００３５】
CHK-2暗号では，中間平文の候補Ｍ'を(13)式により求め，欠損情報である
(ｍ't+1,…,ｍ'n)のｎ−ｔビットを順次推定しながら補填し，残りを復号する．この過程で必ず正当な平文を探し出すことができる．ただし，ｔは  Ｓt ＜Ｐ ＜ Ｖt+1を満たすものとする．表５に復号アルゴリズムを示す．
【００３６】
表５
欠損情報探索法での復号アルゴリズム 
for (ｍ't+1,…,ｍ'n)＝(０,…,０)to(１,…,１)
Ｍ＝(Ｍ−Σｍ'iＶi)  (ｉ＝t+1〜n)  modＰ
for ｉ=ｔ downto 1 
｛ if (Ｍ≧Ｖi)  ｛ｍi'＝１；  Ｍ←Ｍ−Ｖi}  else｛ｍi'＝０｝}
if  ｍ'∈Code  and  Ｍ＝0｝
｛ｍ＝ｇ(ｍ')；  output  ｍ｝｝
【００３７】
復号法に中間平文探索復号法を用いる場合は，中間平文を探索し，超増加数列の性質を利用して復号を行う．これに対し，欠損情報探索法を用いる場合には，欠損した情報部分を順に仮定し欠損情報を補填するので，秘密鍵Ｖi の欠損情報部分である  i ＞ t は，超増加ベクトルにも，単なる増加ベクトルにも，する必要がない．ただし１≦ｉ≦ｔについては，中間平文探索復号法でも欠損情報探索法でも，ベクトルＶの成分を超増加数列とする．
【００３８】
平文ｍおよび拡大平文ｍ'について説明する．平文をｍ＝(ｍ1,ｍ2,…,ｍu)∈{０,１｝ｕ とする．冗長記号ベクトルr ＝(r1,r2,…,rh)∈{０,１｝ｈは，公開の関数ｆ(・)を用いて以下のように定義する．
ｒ：ｆ(ｍ)中の誤り訂正記号もしくは誤り検査記号部分
さらに，ｍおよびｒを連接した拡大平文ベクトルｍ'＝ｆ(ｍ) ∈{０,１｝ｎを(15)式により定義する．
ｍ'＝[ｍ｜ｒ]＝(ｍ1,ｍ2,…,ｍu,ｒ1,ｒ2,…,ｒh)     (15) 
【００３９】
ただし，n＝u＋h とする．なお，ｆ(・)には例えばCRC符号等の誤り検査符号や誤り訂正符号の，検査記号や誤り訂正記号を出力する関数を用いるとよい．この場合はｍ'は誤り検査符号や誤り訂正符号の符号語となっている．また復号時にはｍ'を求めて，前半のｍと後半のｒとに分割し，ｒが検査記号や誤り訂正記号であるかどうかを判別すると良い．なお，非組織符号からなる誤り訂正符号を用いる場合には，復号アルゴリズムに於いて，(1) 正当性の検証部分で符号語か否かを判断し，(2)次いで出力時に誤り訂正符号の復号を行う，という変更が必要である．
【００４０】
復号を高速化したCHK-3暗号，CHK-3'暗号を説明する．CHK-3暗号は欠損情報探索法を用いたもので，超増加ベクトルを用いる必要がない．CHK-3'暗号は中間平文探索法を用いたものである．平文および拡大平文及び秘密鍵はCHK-1暗号やCHK-2暗号と同様である．ただし公開情報ｆ(・)を，ｆi(・)，ui  (i ＝1,2,．．,d)  と変更し，ｄ個の符号語を用いる．CHK-3，CHK-3'暗号の利点は，１つの中間平文の候補Ｍ'を最後まで復号しなくても，途中まで復号した段階で不適切な候補を棄却できる点である．他の点ではCHK-1暗号やCHK-2暗号と同様である．ここでｄ個の符号語の連接ｍ'＝[ｍ'1｜…｜ｍ'd]を  Ｃ＝ｍ'ａ  で暗号化すると，欠損部分がｍ'dに由来する部分に集中するので，復号速度が低下する．例えばパリティ符号を用いると，探索したｍ'dの約半数がチェックを通過し，ｍ'd-1〜ｍ'1の部分で不正な平文が棄却される．このことを問題にする場合，ｍ'dの部分の冗長記号ビット数を増し，誤り検出距離を他の部分よりも大きくしておくと良い．公開鍵ａの置換では，置換は同じ符号語に由来する部分の範囲内には制限されないが，余りに広い範囲に渡るように置換すると，復号速度が低下する．従って置換には，同じ符号語に由来する部分の範囲内，あるいは隣接した符号語に由来する部分までの範囲内，などの制約を課すことが好ましい．
【００４１】
図１は暗号通信システムを示し，２は復号装置で，４は暗号化装置で，これらはインターネットなどの必ずしも安全でない通信路を介して通信する．復号装置２は図５のプログラム４８を記憶し，情報処理装置で構成され，詳細な構造を図３，図４に示す．
【００４２】
暗号化装置４を図２に示すと，平文ｍを分配手段１２によりｄ個に分割して，
ｍ＝[ｍ1｜ｍ2｜…｜ｍd]とし，符号化手段１４−１〜１４−ｄへ供給する．ただし，
ｍi ∈｛０,１｝ｕｉ(ｉ＝１,２,…,ｄ)である．冗長記号ｒi∈｛０,１｝ｈｉ
(i ＝ 1,2,…,d)を，公開の関数ｆi(・)を用いて(16)式により定義し，各ｍiを符号化手段１４−１〜１４−ｄで符号化する．
ｒi ＝ｆi(ｍi)                (16) 
さらに，ｍi およびｒiを連接した拡大平文ベクトルｍ'∈｛０,１｝ｎを(17)式により定義する．
ｍ' ＝[ｍ1｜ｒ1｜ｍ2｜ｒ2｜…ｍd｜ｒd]       (17)
ただし，h＝Σｈi  i=1〜d とし，n＝u＋h とする．なお，ｆi(ｍi)−１  をｍiのパリティを出力する関数としても構わない．拡大平文ベクトルｍ'を暗号化手段１６により，(12)式により暗号化する．暗号化は添字ｄ毎に符号語単位で別個に行っても良い．
【００４３】
復号はCHK-1暗号やCHK-2暗号と同様に行われる．唯一異なる点は，i ＝ d,…,1 について，[ｍi｜ｒi] のペアが得られる毎に，次式が成立するか否かの判断を行う点である．
ｒi ＝ ｆi(ｍi)                          (18) 
もし，復号の途中で一回でも満たされない場合には，その時点で不正な平文として棄却する．もちろん，真の平文はすべてのiに関して(18)式の検査を合格するため，正しく復号できる．CHK-1暗号やCHK-2暗号では，最後まで復号して平文の正当性を検査できたが，CHK-3暗号やCHK-3'暗号では不正な平文ならば，最後まで復号することなく，非常に高い確率で早期に棄却するため，全体として復号を高速化することが可能である．
【００４４】
図３に欠損情報探索法（CHK-3暗号）での復号装置２を示すと，中間平文発生手段２２は(13)式により中間平文の候補を発生し，推定値発生手段２４で表５のアルゴリズムに従い，欠損情報の推定値を順次発生させ，ナップザック復号手段２６で各符号語単位で復号し，符号語が得られたかどうかを符号判定手段２８で判定する．符号語が得られれば，その部分までは正しく復号できたものとして次の符号語の部分を復号し，得られなければ欠損情報の推定値を変更する．このループは，符号語が得られるまで繰り返す．
【００４５】
図４に中間平文探索法での復号装置３２を示すと，中間平文変更手段３４は表４のアルゴリズムで中間平文の候補を変更する．他の点では図３と同様である．
【００４６】
図５に，図３に対応した実施例の暗号通信装置プログラム４２を示すと，暗号化プログラム４４は符号化命令４５と暗号化命令４６とを備え，符号化命令４５は平文を複数に分割して個々に符号化してこれらの連接（拡大平文ベクトル）を出力する．暗号化命令４６は，拡大平文ベクトルを暗号化する．
【００４７】
復号プログラム４８では，中間平文発生命令４９で中間平文の候補を発生し，推定値発生命令５０で欠損情報を推定する．ナップザック復号命令５１は欠損情報を推定した中間平文の候補を復号し，この過程で符号語が得られたかどうかを符号判定命令５２で判定し，符号語以外のものが得られると欠損情報の推定値を変更する．符号語が得られると復号を続行する．中間平文探索法の場合，推定値発生命令５０に代えて，表４のアルゴリズムに対応する中間平文変更命令５４を設けると良い．
【００４８】
各公開鍵ａの大きさを法Ｐと同じと仮定すると，log２Ｃmax＝log２Ｐ＋log２ ｎ  と見積もることができる．このとき，(7)式より，CHK暗号の密度は次式で表わされる．
ρ＝ｎ／(log２ Ｐ+ log２ n)            (19) 
従って，ρ＞1 となるためには，
log２ Ｐ ＜n−log２ n                 (20) 
が成立すればよい．一方，(10)式 より，
log２ Ｓｎ − h＜log２ Ｐ ＜log２ Ｓｎ      (21) 
が成立する．また，n＋log２ Ｖ1 ＜log２ Ｓｎ より，
u＋ log２ Ｖ1 ＜log２ Ｐ                 (22) 
が成立する．ゆえに，Ｐは以下の条件を満たす．
u＋ log２ Ｖ1 ＜log２ Ｐ ＜n− log２ n      (23) 
【００４９】
従って，低密度攻撃に対して安全な暗号であるためには，
log２ Ｖ1 ＜h− log２ n                  (24) 
が成立すればよい．この条件は，例えば，n＝ 128，u＝ 112，h＝ 16，｜Ｖi| ＝ i+ 2，｜Ｐ| ＝ 121  とすると満足される．なおこの場合は復号時に10ビット程度の探索を行う必要がある．またベクトルＶの内で超増加性を有する部分を特定できると，低密度攻撃などの攻撃が可能になる恐れがある．このようにベクトルａ０に置換σを施してから公開鍵ａとすることには，暗号強度上の意味がある．超増加性を有する部分の推定を困難にするにはnＣtを充分に大きくすれば良く，例えば前記の例ではこの値は２４８程度となる．暗号強度をさらに増すには，ｎやｔの値をより大きく設定すると良い．
【図面の簡単な説明】
【００５０】
【図１】実施例の復号装置を用いた暗号通信システムのブロック図
【図２】図１の暗号化装置のブロック図
【図３】実施例の復号装置のブロック図
【図４】変形例の復号装置のブロック図
【図５】実施例の暗号通信装置プログラムのブロック図
【符号の説明】
【００５１】
２，３２ 復号装置
４  暗号化装置
１２  分配手段
１４  符号化手段
１６  暗号化手段
２２  中間平文発生手段
２４  推定値発生手段
２６  ナップザック復号手段
２８  符号判定手段
３４  中間平文変更手段
４２  暗号通信装置プログラム
４４  暗号化プログラム
４５  符号化命令
４６  暗号化命令
４８  復号プログラム
４９  中間平文発生命令
５０  推定値発生命令
５１  ナップザック復号命令
５２  符号判定命令
５４  中間平文変更命令
【図１】
2006189607.tif 000003
【図２】
2006189607.tif 000004
【図３】
2006189607.tif 000005
【図４】
2006189607.tif 000006
【図５】
2006189607.tif 000007