(57)【特許請求の範囲】
【請求項１】
ｓ個の素数冪ｑｊ〔１≦ｊ≦ｓ〕、正の有理整数ｎおよびｋを記憶する記憶手段と、
ｓ個の素数冪ｑｊ〔１≦ｊ≦ｓ〕の積を演算して合成数Ｎを算出する合成数算出手段と、
各既約剰余類群（Ｚ／ｑｊＺ）×〔１≦ｊ≦ｓ〕の生成元となる有理整数ｇを算出する生成元算出手段と、
どの２つも互いに素である有理整数ｐｉ〔１≦ｉ≦ｎ；但し、各有理整数ｐｉは合成数Ｎと互いに素である。〕を算出する秘密鍵集合算出手段と、
各ｉ〔１≦ｉ≦ｎ〕に対してｇａｉ≡ｐｉ（ｍｏｄ  Ｎ）を満たす有理整数ａｉを算出するナップザック生成因子算出手段と、
乱数ｄを生成して、これを出力する乱数生成手段と、
各有理整数ａｉ〔１≦ｉ≦ｎ〕に乱数ｄを加算して有理整数ｂｉ〔１≦ｉ≦ｎ〕を生成するナップザック生成手段と
を備え、
公開鍵は少なくとも正の有理整数ｋ、有理整数ｂｉ〔１≦ｉ≦ｎ〕、
秘密鍵は合成数Ｎ、正の有理整数ｋ、有理整数ｇ、乱数ｄ、有理整数ｐｉ〔１≦ｉ≦ｎ〕である
ことを特徴とする鍵生成装置。
【請求項２】
請求項１に記載の鍵生成装置によって生成された公開鍵（少なくとも正の有理整数ｋ、有理整数ｂｉ〔１≦ｉ≦ｎ〕）および平文Ｍを記憶する記憶手段と、
平文を符号列に変換し（符号変換）、符号列を平文に変換する（逆符号変換）ことが可能な符号変換方式によって、平文Ｍを長さｎ、重みｋの符号列ｍ＝｛ｍｉ｝〔１≦ｉ≦ｎ；但し、Σｉ＝１ｎｍｉ＝ｋとする。〕に変換する符号変換手段と、
符号列ｍｉおよび公開鍵ｂｉから暗号文ｃ＝Σｉ＝１ｎｍｉｂｉを生成する暗号化手段と
を備えたことを特徴とする暗号化装置。
【請求項３】
請求項１に記載の鍵生成装置によって生成された秘密鍵（合成数Ｎ、有理整数ｇ、乱数ｄ、有理整数ｐｉ〔１≦ｉ≦ｎ〕）および暗号文ｃを記憶する記憶手段と、
暗号文ｃから秘密鍵ｋと秘密鍵ｄとの積を減算して指数ｒを算出する指数算出手段と、
指数ｒ、秘密鍵ｇおよびＮからｕ≡ｇｒ（ｍｏｄ  Ｎ）を演算した冪乗剰余演算結果ｕを算出する冪乗剰余演算手段と、
冪乗剰余演算結果ｕを各秘密鍵ｐｉ〔１≦ｉ≦ｎ〕で除し、割り切れた場合と割り切れなかった場合とでそれぞれ異なる符号値ｗｉを与え、符号列ｗ＝｛ｗｉ｝〔１≦ｉ≦ｎ〕を算出する符号再生手段と、
請求項２に記載の暗号化装置における符号変換手段で用いた符号変換方式によって、符号列ｗを平文に変換してこの平文を出力する復号化手段と
を備えたことを特徴とする復号化装置。
【請求項４】
鍵生成装置、暗号化装置および復号化装置がそれぞれデータ送信可能に接続され、
鍵生成装置は、
ｓ個の素数冪ｑｊ〔１≦ｊ≦ｓ〕、正の有理整数ｎおよびｋを記憶する記憶手段と、
ｓ個の素数冪ｑｊ〔１≦ｊ≦ｓ〕の積を演算して合成数Ｎを算出する合成数算出手段と、
各既約剰余類群（Ｚ／ｑｊＺ）×〔１≦ｊ≦ｓ〕の生成元となる有理整数ｇを算出する生成元算出手段と、
どの２つも互いに素である有理整数ｐｉ〔１≦ｉ≦ｎ；但し、各有理整数ｐｉは合成数Ｎと互いに素である。〕を算出する秘密鍵集合算出手段と、
各ｉ〔１≦ｉ≦ｎ〕に対してｇａｉ≡ｐｉ（ｍｏｄ  Ｎ）を満たす有理整数ａｉを算出するナップザック生成因子算出手段と、
乱数ｄを生成して、これを出力する乱数生成手段と、
各有理整数ａｉ〔１≦ｉ≦ｎ〕に乱数ｄを加算して有理整数ｂｉ〔１≦ｉ≦ｎ〕を生成するナップザック生成手段と、
公開鍵は少なくとも正の有理整数ｋ、有理整数ｂｉ〔１≦ｉ≦ｎ〕、秘密鍵は合成数Ｎ、正の有理整数ｋ、有理整数ｇ、乱数ｄ、有理整数ｐｉ〔１≦ｉ≦ｎ〕であるとして、
公開鍵を暗号化装置に送信可能な対暗号化装置送信手段と、
秘密鍵を復号化装置に送信可能な対復号化装置送信手段とを備え、
暗号化装置は、
鍵生成装置から公開鍵を受信可能な対鍵生成装置受信手段と、
暗号化装置の対鍵生成装置受信手段によって受信した公開鍵（少なくとも正の有理整数ｋ、有理整数ｂｉ〔１≦ｉ≦ｎ〕）および平文Ｍを記憶する記憶手段と、
平文を符号列に変換し（符号変換）、符号列を平文に変換する（逆符号変換）ことが可能な符号変換方式によって、平文Ｍを長さｎ、重みｋの符号列ｍ＝｛ｍｉ｝〔１≦ｉ≦ｎ；但し、Σｉ＝１ｎｍｉ＝ｋとする。〕に変換する符号変換手段と、
符号列ｍｉおよび公開鍵ｂｉから暗号文ｃ＝Σｉ＝１ｎｍｉｂｉを生成する暗号化手段と、
暗号文ｃを復号化装置に送信可能な対復号化装置送信手段とを備え、
復号化装置は、
鍵生成装置から秘密鍵を受信可能な対鍵生成装置受信手段と、
暗号文ｃを暗号化装置から受信可能な対暗号化装置受信手段と、
復号化装置の対鍵生成装置受信手段によって受信した秘密鍵（合成数Ｎ、有理整数ｇ、乱数ｄ、有理整数ｐｉ〔１≦ｉ≦ｎ〕）および復号化装置の対暗号化装置受信手段によって受信した暗号文ｃを記憶する記憶手段と、
暗号文ｃから秘密鍵ｋと秘密鍵ｄとの積を減算して指数ｒを算出する指数算出手段と、
指数ｒ、秘密鍵ｇおよびＮからｕ≡ｇｒ（ｍｏｄ  Ｎ）を演算した冪乗剰余演算結果ｕを算出する冪乗剰余演算手段と、
冪乗剰余演算結果ｕを各秘密鍵ｐｉ〔１≦ｉ≦ｎ〕で除し、割り切れた場合と割り切れなかった場合とでそれぞれ異なる符号値ｗｉを与え、符号列ｗ＝｛ｗｉ｝〔１≦ｉ≦ｎ〕を算出する符号再生手段と、
上記暗号化装置における符号変換手段で用いた符号変換方式によって、符号列ｗを平文に変換してこの平文を出力する復号化手段とを備えた
ことを特徴とする乗法型ナップザック暗号システム。
【請求項５】
鍵生成装置、暗号化装置および復号化装置がそれぞれデータ送信可能に接続され、
鍵生成装置の記憶手段には、ｓ個の素数冪ｑｊ〔１≦ｊ≦ｓ〕、正の有理整数ｎおよびｋが記憶されており、
暗号化装置の記憶手段には、平文Ｍが記憶されており、
鍵生成装置の合成数算出手段が、ｓ個の素数冪ｑｊ〔１≦ｊ≦ｓ〕の積を演算して合成数Ｎを算出する合成数算出ステップと、
鍵生成装置の生成元算出手段が、各既約剰余類群（Ｚ／ｑｊＺ）×〔１≦ｊ≦ｓ〕の生成元となる有理整数ｇを算出する生成元算出ステップと、
鍵生成装置の秘密鍵集合算出手段が、どの２つも互いに素である有理整数ｐｉ〔１≦ｉ≦ｎ；但し、各有理整数ｐｉは合成数Ｎと互いに素である。〕を算出する秘密鍵集合算出ステップと、
鍵生成装置のナップザック生成因子算出手段が、各ｉ〔１≦ｉ≦ｎ〕に対してｇａｉ≡ｐｉ（ｍｏｄ  Ｎ）を満たす有理整数ａｉを算出するナップザック生成因子算出ステップと、
鍵生成装置の乱数生成手段が、乱数ｄを生成して、これを出力する乱数生成ステップと、
鍵生成装置のナップザック生成手段が、各有理整数ａｉ〔１≦ｉ≦ｎ〕に乱数ｄを加算して有理整数ｂｉ〔１≦ｉ≦ｎ〕を生成するナップザック生成ステップと、
公開鍵は少なくとも正の有理整数ｋ、有理整数ｂｉ〔１≦ｉ≦ｎ〕、秘密鍵は合成数Ｎ、正の有理整数ｋ、有理整数ｇ、乱数ｄ、有理整数ｐｉ〔１≦ｉ≦ｎ〕であるとして、
鍵生成装置の対暗号化装置送信手段が、公開鍵を暗号化装置に送信可能な対暗号化装置送信ステップと、
鍵生成装置の対復号化装置送信手段が、秘密鍵を復号化装置に送信可能な対復号化装置送信ステップと、
暗号化装置の対鍵生成装置受信手段が、鍵生成装置から公開鍵を受信する対鍵生成装置受信ステップと、
暗号化装置の符号変換手段が、平文を符号列に変換し（符号変換）、符号列を平文に変換する（逆符号変換）ことが可能な符号変換方式によって、平文Ｍを長さｎ、重みｋの符号列ｍ＝｛ｍｉ｝〔１≦ｉ≦ｎ；但し、Σｉ＝１ｎｍｉ＝ｋとする。〕に変換する符号変換ステップと、
暗号化装置の暗号化手段が、符号列ｍｉおよび公開鍵ｂｉから暗号文ｃ＝Σｉ＝１ｎｍｉｂｉを生成する暗号化手段と、
暗号化装置の対復号化装置送信手段が、暗号文ｃを復号化装置に送信する対復号化装置送信ステップと、
復号化装置の対鍵生成装置受信手段が、鍵生成装置から秘密鍵を受信する対鍵生成装置受信ステップと、
復号化装置の対暗号化装置受信手段が、暗号文ｃを暗号化装置から受信する対暗号化装置受信ステップと、
復号化装置の指数算出手段が、暗号文ｃから秘密鍵ｋと秘密鍵ｄとの積を減算して指数ｒを算出する指数算出ステップと、
復号化装置の冪乗剰余演算手段が、指数ｒ、秘密鍵ｇおよびＮからｕ≡ｇｒ（ｍｏｄ  Ｎ）を演算した冪乗剰余演算結果ｕを算出する冪乗剰余演算ステップと、
復号化装置の符号再生手段が、冪乗剰余演算結果ｕを各秘密鍵ｐｉ〔１≦ｉ≦ｎ〕で除し、割り切れた場合と割り切れなかった場合とでそれぞれ異なる符号値ｗｉを与え、符号列ｗ＝｛ｗｉ｝〔１≦ｉ≦ｎ〕を算出する符号再生ステップと、
復号化装置の復号化手段が、上記符号変換ステップで用いた符号変換方式によって、符号列ｗを平文に変換してこの平文を出力する復号化ステップとを有する
ことを特徴とする乗法型ナップザック暗号復号方法。
【請求項６】
正の有理整数ｎ、ｋを記憶する記憶手段と、
少なくとも代数体Ｋの整数環ＺＫのイデアルνを設定する基底設定手段と、
各既約剰余類群（ＺＫ／τｊ）×〔１≦ｊ≦ｓ；τｊはイデアルνを構成するどの２つのノルムも互いに素な素イデアルである。〕の生成元となる整数環ＺＫの整数ｇを算出する生成元算出手段と、
どの２つのノルムも互いに素である整数環ＺＫの整数ｐｉ〔１≦ｉ≦ｎ；但し、各有理整数ｐｉのノルムはイデアルνのノルムと互いに素である。〕を算出する秘密鍵集合算出手段と、
各ｉ〔１≦ｉ≦ｎ〕に対してｇａｉ≡ｐｉ（ｍｏｄ  ν）を満たす有理整数ａｉを算出するナップザック生成因子算出手段と、
乱数ｄを生成して、これを出力する乱数生成手段と、
各有理整数ａｉ〔１≦ｉ≦ｎ〕に乱数ｄを加算して有理整数ｂｉ〔１≦ｉ≦ｎ〕を生成するナップザック生成手段と
を備え、
公開鍵は少なくとも正の有理整数ｋ、有理整数ｂｉ〔１≦ｉ≦ｎ〕、
秘密鍵は少なくともイデアルν、正の有理整数ｋ、整数環ＺＫの整数ｇ、乱数ｄ、整数環ＺＫの整数ｐｉ〔１≦ｉ≦ｎ〕である
ことを特徴とする鍵生成装置。
【請求項７】
請求項６に記載の鍵生成装置によって生成された公開鍵（少なくとも正の有理整数ｋ、有理整数ｂｉ〔１≦ｉ≦ｎ〕）および平文Ｍを記憶する記憶手段と、
平文を符号列に変換し（符号変換）、符号列を平文に変換する（逆符号変換）ことが可能な符号変換方式によって、平文Ｍを長さｎ、重みｋの符号列ｍ＝｛ｍｉ｝〔１≦ｉ≦ｎ；但し、Σｉ＝１ｎｍｉ＝ｋとする。〕に変換する符号変換手段と、
符号列ｍｉおよび公開鍵ｂｉから暗号文ｃ＝Σｉ＝１ｎｍｉｂｉを生成する暗号化手段と
を備えたことを特徴とする暗号化装置。
【請求項８】
請求項６に記載の鍵生成装置によって生成された秘密鍵（少なくともイデアルν、正の有理整数ｋ、整数環ＺＫの整数ｇ、乱数ｄ、整数環ＺＫの整数ｐｉ〔１≦ｉ≦ｎ〕）および暗号文ｃを記憶する記憶手段と、
暗号文ｃから秘密鍵ｋと秘密鍵ｄとの積を減算して指数ｒを算出する指数算出手段と、
指数ｒ、秘密鍵ｇおよびνからｕ≡ｇｒ（ｍｏｄ  ν）を演算した冪乗剰余演算結果ｕを算出する冪乗剰余演算手段と、
冪乗剰余演算結果ｕを各秘密鍵ｐｉ〔１≦ｉ≦ｎ〕で除し、割り切れた場合と割り切れなかった場合とでそれぞれ異なる符号値ｗｉを与え、符号列ｗ＝｛ｗｉ｝〔１≦ｉ≦ｎ〕を算出する符号再生手段と、
請求項７に記載の暗号化装置における符号変換手段で用いた符号変換方式によって、符号列ｗを平文に変換してこの平文を出力する復号化手段と
を備えたことを特徴とする復号化装置。
【請求項９】
鍵生成装置、暗号化装置および復号化装置がそれぞれデータ送信可能に接続され、
鍵生成装置は、
正の有理整数ｎ、ｋを記憶する記憶手段と、
少なくとも代数体Ｋの整数環ＺＫのイデアルνを設定する基底設定手段と、
各既約剰余類群（ＺＫ／τｊ）×〔１≦ｊ≦ｓ；τｊはイデアルνを構成するどの２つのノルムも互いに素な素イデアルである。〕の生成元となる整数環ＺＫの整数ｇを算出する生成元算出手段と、
どの２つのノルムも互いに素である整数環ＺＫの整数ｐｉ〔１≦ｉ≦ｎ；但し、各整数ｐｉのノルムはイデアルνのノルムと互いに素である。〕を算出する秘密鍵集合算出手段と、
各ｉ〔１≦ｉ≦ｎ〕に対してｇａｉ≡ｐｉ（ｍｏｄ  ν）を満たす有理整数ａｉを算出するナップザック生成因子算出手段と、
乱数ｄを生成して、これを出力する乱数生成手段と、
各有理整数ａｉ〔１≦ｉ≦ｎ〕に乱数ｄを加算して有理整数ｂｉ〔１≦ｉ≦ｎ〕を生成するナップザック生成手段と、
公開鍵は少なくとも正の有理整数ｋ、有理整数ｂｉ〔１≦ｉ≦ｎ〕、秘密鍵は少なくともイデアルν、正の有理整数ｋ、整数環ＺＫの整数ｇ、乱数ｄ、整数環ＺＫの整数ｐｉ〔１≦ｉ≦ｎ〕であるとして、
公開鍵を暗号化装置に送信可能な対暗号化装置送信手段と、
秘密鍵を復号化装置に送信可能な対復号化装置送信手段とを備え、
暗号化装置は、
鍵生成装置から公開鍵を受信可能な対鍵生成装置受信手段と、
暗号化装置の対鍵生成装置受信手段によって受信した公開鍵（少なくとも正の有理整数ｋ、有理整数ｂｉ〔１≦ｉ≦ｎ〕）および平文Ｍを記憶する記憶手段と、
平文を符号列に変換し（符号変換）、符号列を平文に変換する（逆符号変換）ことが可能な符号変換方式によって、平文Ｍを長さｎ、重みｋの符号列ｍ＝｛ｍｉ｝〔１≦ｉ≦ｎ；但し、Σｉ＝１ｎｍｉ＝ｋとする。〕に変換する符号変換手段と、
符号列ｍｉおよび公開鍵ｂｉから暗号文ｃ＝Σｉ＝１ｎｍｉｂｉを生成する暗号化手段と、
暗号文ｃを復号化装置に送信可能な対復号化装置送信手段とを備え、
復号化装置は、
鍵生成装置から秘密鍵を受信可能な対鍵生成装置受信手段と、
暗号文ｃを暗号化装置から受信可能な対暗号化装置受信手段と、
復号化装置の対鍵生成装置受信手段によって受信した秘密鍵（少なくともイデアルν、正の有理整数ｋ、整数環ＺＫの整数ｇ、乱数ｄ、整数環ＺＫの整数ｐｉ〔１≦ｉ≦ｎ〕）および復号化装置の対暗号化装置受信手段によって受信した暗号文ｃを記憶する記憶手段と、
暗号文ｃから秘密鍵ｋと秘密鍵ｄとの積を減算して指数ｒを算出する指数算出手段と、
指数ｒ、秘密鍵ｇおよびνからｕ≡ｇｒ（ｍｏｄ  ν）を演算した冪乗剰余演算結果ｕを算出する冪乗剰余演算手段と、
冪乗剰余演算結果ｕを各秘密鍵ｐｉ〔１≦ｉ≦ｎ〕で除し、割り切れた場合と割り切れなかった場合とでそれぞれ異なる符号値ｗｉを与え、符号列ｗ＝｛ｗｉ｝〔１≦ｉ≦ｎ〕を算出する符号再生手段と、
上記暗号化装置における符号変換手段で用いた符号変換方式によって、符号列ｗを平文に変換してこの平文を出力する復号化手段とを備えた
ことを特徴とする乗法型ナップザック暗号システム。
【請求項１０】
鍵生成装置、暗号化装置および復号化装置がそれぞれデータ送信可能に接続され、
鍵生成装置の記憶手段には、正の有理整数ｎ、ｋが記憶されており、
暗号化装置の記憶手段には、平文Ｍが記憶されており、
鍵生成装置の基底設定手段が、少なくとも代数体Ｋの整数環ＺＫのイデアルνを設定する基底設定ステップと、
鍵生成装置の生成元算出手段が、各既約剰余類群（ＺＫ／τｊ）×〔１≦ｊ≦ｓ；τｊはイデアルνを構成するどの２つのノルムも異なる素イデアルである。〕の生成元となる整数環ＺＫの整数ｇを算出する生成元算出ステップと、
鍵生成装置の秘密鍵集合算出手段が、どの２つのノルムも互いに素である整数環ＺＫの整数ｐｉ〔１≦ｉ≦ｎ；但し、各整数ｐｉのノルムはイデアルνのノルムと互いに素である。〕を算出する秘密鍵集合算出ステップと、
鍵生成装置のナップザック生成因子算出手段が、各ｉ〔１≦ｉ≦ｎ〕に対してｇａｉ≡ｐｉ（ｍｏｄ  ν）を満たす有理整数ａｉを算出するナップザック生成因子算出ステップと、
鍵生成装置の乱数生成手段が、乱数ｄを生成して、これを出力する乱数生成ステップと、
鍵生成装置のナップザック生成手段が、各有理整数ａｉ〔１≦ｉ≦ｎ〕に乱数ｄを加算して有理整数ｂｉ〔１≦ｉ≦ｎ〕を生成するナップザック生成ステップと、
公開鍵は少なくとも正の有理整数ｋ、有理整数ｂｉ〔１≦ｉ≦ｎ〕、秘密鍵は少なくともイデアルν、正の有理整数ｋ、整数環ＺＫの整数ｇ、乱数ｄ、整数環ＺＫの整数ｐｉ〔１≦ｉ≦ｎ〕であるとして、
鍵生成装置の対暗号化装置送信手段が、公開鍵を暗号化装置に送信可能な対暗号化装置送信ステップと、
鍵生成装置の対復号化装置送信手段が、秘密鍵を復号化装置に送信可能な対復号化装置送信ステップと、
暗号化装置の対鍵生成装置受信手段が、鍵生成装置から公開鍵を受信する対鍵生成装置受信ステップと、
暗号化装置の符号変換手段が、平文を符号列に変換し（符号変換）、符号列を平文に変換する（逆符号変換）ことが可能な符号変換方式によって、平文Ｍを長さｎ、重みｋの符号列ｍ＝｛ｍｉ｝〔１≦ｉ≦ｎ；但し、Σｉ＝１ｎｍｉ＝ｋとする。〕に変換する符号変換ステップと、
暗号化装置の暗号化手段が、符号列ｍｉおよび公開鍵ｂｉから暗号文ｃ＝Σｉ＝１ｎｍｉｂｉを生成する暗号化手段と、
暗号化装置の対復号化装置送信手段が、暗号文ｃを復号化装置に送信する対復号化装置送信ステップと、
復号化装置の対鍵生成装置受信手段が、鍵生成装置から秘密鍵を受信する対鍵生成装置受信ステップと、
復号化装置の対暗号化装置受信手段が、暗号文ｃを暗号化装置から受信する対暗号化装置受信ステップと、
復号化装置の指数算出手段が、暗号文ｃから秘密鍵ｋと秘密鍵ｄとの積を減算して指数ｒを算出する指数算出ステップと、
復号化装置の冪乗剰余演算手段が、指数ｒ、秘密鍵ｇおよびνからｕ≡ｇｒ（ｍｏｄ  ν）を演算した冪乗剰余演算結果ｕを算出する冪乗剰余演算ステップと、
復号化装置の符号再生手段が、冪乗剰余演算結果ｕを各秘密鍵ｐｉ〔１≦ｉ≦ｎ〕で除し、割り切れた場合と割り切れなかった場合とでそれぞれ異なる符号値ｗｉを与え、符号列ｗ＝｛ｗｉ｝〔１≦ｉ≦ｎ〕を算出する符号再生ステップと、
復号化装置の復号化手段が、上記符号変換ステップで用いた符号変換方式によって、符号列ｗを平文に変換してこの平文を出力する復号化ステップとを有する
ことを特徴とする乗法型ナップザック暗号復号方法。
【請求項１１】
請求項１または請求項６に記載された鍵生成装置としてコンピュータを機能させるための鍵生成プログラム。
【請求項１２】
請求項２または請求項７に記載された暗号化装置としてコンピュータを機能させるための暗号化プログラム。
【請求項１３】
請求項３または請求項８に記載された復号化装置としてコンピュータを機能させるための復号化プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報セキュリティ技術に関し、より詳しくはナップザック問題を拠り所とする公開鍵暗号に関する。
【背景技術】
【０００２】
公開鍵暗号は、その安全性の拠り所とする問題によって類別される。安全性の拠り所となる問題としては、素因数分解問題、離散対数問題などがある。そして具体的には、素因数分解問題を拠り所にした公開鍵暗号としてはＲＳＡ暗号、離散対数問題を拠り所とした公開鍵暗号としてはＰＳＥＣ暗号などが挙げられる。
【０００３】
ところで、いわゆる量子計算機が実現すると、Shorによって提案されたアルゴリズムを用いることで、素因数分解問題や離散対数問題を非常に効率的に解くことが可能となることが知られている。従って、これら問題に基づく公開鍵暗号は完全に解読されてしまう。
【０００４】
これに対し、量子計算機が実現しても解読が困難であると考えられているナップザック問題を安全性の拠り所とした公開鍵暗号として、西暦２０００年に岡本龍明、田中圭介、内山成憲が提案した公開鍵暗号（以下、「ＯＴＵ暗号」と呼ぶ。）がある（特許文献１、特許文献２、特許文献３、非特許文献１参照。）。
【特許文献１】特許第３６１５１３２号公報
【特許文献２】特許第３６１５１３３号公報
【特許文献３】特許第３６１５１３７号公報
【非特許文献１】T. Okamoto, K. Tanaka, S. Uchiyama, "Quantum Public-Key Cryptosystems", LNCS 1880, pp.147-165, Springer-Verlag, 2000
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ＯＴＵ暗号は、鍵生成の過程において、有限体上の離散対数問題に関する複数回の計算を必要とする。離散対数問題は量子計算機を用いることで容易に計算可能であるが、既存の計算機を用いた場合、剰余計算の法である素数ｐのビット長が長いとき（例えば素数ｐが１０２４ビットの場合など）の離散対数問題を解くことは、現状の計算機能力や技術においては容易なものではない。
【０００６】
そのため、ＯＴＵ暗号は、量子計算機が実現した後に有効的な公開鍵暗号と言えるが、反面、現在の計算機で利用することが容易なものとは言い難い。
【０００７】
そこで本発明は、既存の計算機でも比較的容易に利用可能でありながら、量子計算機が実現しても解読できないナップザック問題を安全性の拠り所とした公開鍵暗号（鍵生成、暗号化および復号化を実現する各装置、これら装置で構成されるシステムおよびその方法）を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明では、鍵生成装置は、ｓ個の素数冪ｑｊ〔１≦ｊ≦ｓ〕、正の有理整数ｎおよびｋを記憶する記憶手段と、ｓ個の素数冪ｑｊ〔１≦ｊ≦ｓ〕の積を演算して合成数Ｎを算出する合成数算出手段と、各既約剰余類群（Ｚ／ｑｊＺ）×〔１≦ｊ≦ｓ〕の生成元となる有理整数ｇを算出する生成元算出手段と、どの２つも互いに素である有理整数ｐｉ〔１≦ｉ≦ｎ；但し、各有理整数ｐｉは合成数Ｎと互いに素である。〕を算出する秘密鍵集合算出手段と、各ｉ〔１≦ｉ≦ｎ〕に対してｇａｉ≡ｐｉ（ｍｏｄ  Ｎ）〔但し、ｇの指数ａｉを記号ａｉで表している。〕を満たす有理整数ａｉを算出するナップザック生成因子算出手段と、乱数ｄを生成して、これを出力する乱数生成手段と、各有理整数ａｉ〔１≦ｉ≦ｎ〕に乱数ｄを加算して有理整数ｂｉ〔１≦ｉ≦ｎ〕を生成するナップザック生成手段とを備え、公開鍵は少なくとも正の有理整数ｋ、有理整数ｂｉ〔１≦ｉ≦ｎ〕、秘密鍵は合成数Ｎ、正の有理整数ｋ、有理整数ｇ、乱数ｄ、有理整数ｐｉ〔１≦ｉ≦ｎ〕であるとする。また、暗号化装置は、公開鍵（少なくとも正の有理整数ｋ、有理整数ｂｉ〔１≦ｉ≦ｎ〕）および平文Ｍを記憶する記憶手段と、平文を符号列に変換し（符号変換）、符号列を平文に変換する（逆符号変換）ことが可能な符号変換方式によって、平文Ｍを長さｎ、重みｋの符号列ｍ＝｛ｍｉ｝〔１≦ｉ≦ｎ；但し、Σｉ＝１ｎｍｉ＝ｋとする。〕に変換する符号変換手段と、符号列ｍｉおよび公開鍵ｂｉから暗号文ｃ＝Σｉ＝１ｎｍｉｂｉを生成する暗号化手段とを備える。そして、復号化装置は、秘密鍵（合成数Ｎ、有理整数ｇ、乱数ｄ、有理整数ｐｉ〔１≦ｉ≦ｎ〕）および暗号文ｃを記憶する記憶手段と、暗号文ｃから秘密鍵ｋと秘密鍵ｄとの積を減算して指数ｒを算出する指数算出手段と、指数ｒ、秘密鍵ｇおよびＮからｕ≡ｇｒ（ｍｏｄ  Ｎ）を演算した冪乗剰余演算結果ｕを算出する冪乗剰余演算手段と、冪乗剰余演算結果ｕを各秘密鍵ｐｉ〔１≦ｉ≦ｎ〕で除し、割り切れた場合と割り切れなかった場合とでそれぞれ異なる符号値ｗｉを与え、符号列ｗ＝｛ｗｉ｝〔１≦ｉ≦ｎ〕を算出する符号再生手段と、上記暗号化装置における符号変換手段で用いた符号変換方式によって、符号列ｗを平文に変換してこの平文を出力する復号化手段とを備える。これら鍵生成装置、暗号化装置および復号化装置がそれぞれデータ送信可能に接続されて乗法型ナップザック暗号システムが構成される。
このように、素数冪の積である合成数Ｎを法とした、既約剰余類群（Ｚ／ＮＺ）×の部分巡回群において乗法型ナップザック暗号を構成する。
【０００９】
また、上記課題を解決するために、本発明では、鍵生成装置は、正の有理整数ｎ、ｋを記憶する記憶手段と、少なくとも代数体Ｋの整数環ＺＫのイデアルνを設定する基底設定手段と、各既約剰余類群（ＺＫ／τｊ）×〔１≦ｊ≦ｓ；τｊはイデアルνを構成するどの２つのノルムも互いに素な素イデアルである。〕の生成元となる整数環ＺＫの整数ｇを算出する生成元算出手段と、どの２つのノルムも互いに素である整数環ＺＫの整数ｐｉ〔１≦ｉ≦ｎ；但し、各整数ｐｉのノルムはイデアルνのノルムと互いに素である。〕を算出する秘密鍵集合算出手段と、各ｉ〔１≦ｉ≦ｎ〕に対してｇａｉ≡ｐｉ（ｍｏｄ  ν）を満たす有理整数ａｉを算出するナップザック生成因子算出手段と、乱数ｄを生成して、これを出力する乱数生成手段と、各有理整数ａｉ〔１≦ｉ≦ｎ〕に乱数ｄを加算して有理整数ｂｉ〔１≦ｉ≦ｎ〕を生成するナップザック生成手段とを備え、公開鍵は少なくとも正の有理整数ｋ、有理整数ｂｉ〔１≦ｉ≦ｎ〕、秘密鍵は少なくともイデアルν、正の有理整数ｋ、整数環ＺＫの整数ｇ、乱数ｄ、整数環ＺＫの整数ｐｉ〔１≦ｉ≦ｎ〕であるとする。また、暗号化装置は、公開鍵（少なくとも正の有理整数ｋ、有理整数ｂｉ〔１≦ｉ≦ｎ〕）および平文Ｍを記憶する記憶手段と、平文を符号列に変換し（符号変換）、符号列を平文に変換する（逆符号変換）ことが可能な符号変換方式によって、平文Ｍを長さｎ、重みｋの符号列ｍ＝｛ｍｉ｝〔１≦ｉ≦ｎ；但し、Σｉ＝１ｎｍｉ＝ｋとする。〕に変換する符号変換手段と、符号列ｍｉおよび公開鍵ｂｉから暗号文ｃ＝Σｉ＝１ｎｍｉｂｉを生成する暗号化手段とを備える。そして、復号化装置は、秘密鍵（少なくともイデアルν、正の有理整数ｋ、整数環ＺＫの整数ｇ、乱数ｄ、整数環ＺＫの整数ｐｉ〔１≦ｉ≦ｎ〕）および暗号文ｃを記憶する記憶手段と、暗号文ｃから秘密鍵ｋと秘密鍵ｄとの積を減算して指数ｒを算出する指数算出手段と、指数ｒ、秘密鍵ｇおよびνからｕ≡ｇｒ（ｍｏｄ  ν）を演算した冪乗剰余演算結果ｕを算出する冪乗剰余演算手段と、冪乗剰余演算結果ｕを各秘密鍵ｐｉ〔１≦ｉ≦ｎ〕で除し、割り切れた場合と割り切れなかった場合とでそれぞれ異なる符号値ｗｉを与え、符号列ｗ＝｛ｗｉ｝〔１≦ｉ≦ｎ〕を算出する符号再生手段と、上記暗号化装置における符号変換手段で用いた符号変換方式によって、符号列ｗを平文に変換してこの平文を出力する復号化手段とを備える。これら鍵生成装置、暗号化装置および復号化装置がそれぞれデータ送信可能に接続されて乗法型ナップザック暗号システムが構成される。
このように、代数体Ｋの整数環ＺＫにおける複数の素イデアルの積νを法とした、既約剰余類群（ＺＫ／ν）×の巡回部分群において乗法型ナップザック暗号を構成する。
【発明の効果】
【００１０】
本発明は、素数冪の積である合成数Ｎを法とした既約剰余類群（Ｚ／ＮＺ）×の部分巡回群、あるいは、代数体Ｋの整数環ＺＫにおける複数の素イデアルの積νを法とした既約剰余類群（ＺＫ／ν）×の巡回部分群において乗法型ナップザック暗号を構成することで、合成数を構成するより小さい素数冪あるいはイデアルνを構成するノルムがより小さい素イデアルを法として、乗法型ナップザック暗号で必要な離散対数計算を既存の計算機でも演算可能となるから、既存の計算機でも比較的容易に利用可能である。また、ナップザック問題を安全性の拠り所とするから、量子計算機が実現しても解読の虞がない。
【００１１】
一例として合成数Ｎが１０２４ビットの場合を考えると、従来は、１０２４ビットの素数を法とした離散対数計算をしなければならなかったが、本発明では、合成数Ｎを１２８ビットの素数冪８個ｑ１、ｑ２、・・・、ｑ８の積とすれば、各ｑｉ（１≦ｉ≦８）を法とした離散対数を計算すればよく、１２８ビット程度の離散対数計算は、現在の計算機環境においても、数体ふるい法などを利用することで、実用的な時間で解を得ることができる。
【発明を実施するための最良の形態】
【００１２】
各実施形態で説明する本発明である鍵生成装置、暗号化装置および復号化装置の細部においては、整数論における数値計算処理が必要となる場合があるが、整数論における数値計算処理自体は、公知技術と同様にして達成されるので、その演算処理方法などの詳細な説明は省略する（この点の技術水準を示す整数論における数値計算処理が可能なソフトウェアとしては、例えばＰＡＲＩ／ＧＰ、ＫＡＮＴ／ＫＡＳＨなどが挙げられる。ＰＡＲＩ／ＧＰについては、例えばインターネット〈URL: http://pari.math.u-bordeaux.fr/〉［平成１７年１２月１４日検索］を参照のこと。ＫＡＮＴ／ＫＡＳＨについては、例えばインターネット〈URL: http://www.math.tu-berlin.de/algebra/〉［平成１７年１２月１４日検索］を参照のこと。）。
また、この点に関する文献として、参考文献１を挙げることができる。
（参考文献１）  H. Cohen, "A Course in Computational Algebraic Number Theory", GTM 138, Springer-Verlag, 1993.
【００１３】
《第１実施形態》
本発明の第１実施形態を、図面を参照して説明する。
ここでは、第１実施形態の各装置（鍵生成装置、暗号化装置、復号化装置）の構成および処理、各装置で構成する乗法型ナップザック暗号システム、そのシステムにおける処理を叙述的に説明する。
第１実施形態における乗法型ナップザック暗号システムは、必要に応じて「鍵生成装置」「暗号化装置」「復号化装置」の各装置で構成される。
なお、第１実施形態では、下記の処理に係わる集合が有理整数環であることに留意しなければならない（第１実施形態で、「整数」とは「有理整数」を意味する。）。
【００１４】
［鍵生成装置］
（ハードウェア構成並びにハードウェア資源とソフトウェアとの協働による情報処理の実現）
図１は、鍵生成装置（１）のハードウェア構成を例示した構成ブロック図である。図１に例示するように、鍵生成装置（１）は、キーボードやポインティングデバイスなどの入力手段が接続可能な入力部（１１）、液晶ディスプレイなどの出力手段が接続可能な出力部（１２）、鍵生成装置（１）外部に通信可能な通信装置（例えば通信ケーブルなど。）が接続可能な通信部（１３）、ＣＰＵ（Central Processing Unit）（１４）〔キャッシュメモリなどを備えていてもよい。〕、メモリであるＲＡＭ（１５）、ＲＯＭ（１６）やハードディスクである外部記憶装置（１７）並びにこれらの入力部（１１）、出力部（１２）、通信部（１３）、ＣＰＵ（１４）、ＲＡＭ（１５）、ＲＯＭ（１６）、外部記憶装置（１７）間のデータのやり取りが可能なように接続するバス（１８）を備えている。また必要に応じて、鍵生成装置（１）に、ＣＤ−ＲＯＭなどの記憶媒体を読み書きできる装置（ドライブ）などを設けるとしてもよい。このようなハードウェア資源を備えた物理的実体としては、汎用コンピュータなどがある。
【００１５】
鍵生成装置（１）の外部記憶装置（１７）には、後述する鍵（公開鍵、秘密鍵）を生成するためのプログラムおよびこのプログラムの処理において必要となるデータなどが保存記憶されている。また、プログラムの処理によって得られるデータなどは、ＲＡＭ（１５）や外部記憶装置（１７）などに適宜に保存記憶される。
【００１６】
より具体的に外部記憶装置（１７）〔あるいはＲＯＭなど〕には、合成数Ｎを生成するためのプログラム、既約剰余類群の生成元となる（合成数Ｎを法とする）整数ｇを求めるためのプログラム、ナップザック問題を解くために用いられる秘密鍵となる元の集合（以下、「秘密鍵集合」とも云う。）を生成するためのプログラム、合成数Ｎを法とし整数ｇを底として秘密鍵となる各元の指数（以下、「ナップザック生成因子」と云う。）を与えるためのプログラム、乱数を生成するためのプログラム、ナップザックを生成するためのプログラム、これらのプログラムに基づく処理を制御するための制御プログラムなどが保存記憶されている。
また、これらのプログラムの処理において必要となるデータとして、正の整数ｎおよびｋ（但し、ｎ＞ｋとする。）、合成数Ｎを与える素数冪ｑｊ（１≦ｊ≦ｓ）が予め外部記憶装置（１７）に保存記憶されているとする。なお、これらのデータは、予め鍵生成装置（１）の外部記憶装置（１７）に保存記憶しておくのではなく、例えば、入力部（１１）から入力されるとしてもよいし、あるいは、これらのデータを格納した記録媒体からドライブを駆動して読み込むようにしてもよく、適宜に変更可能である。
【００１７】
鍵生成装置（１）では、外部記憶装置（１７）〔あるいはＲＯＭなど〕に記憶された各プログラムとこの各プログラムの処理に必要なデータが必要に応じてＲＡＭ（１５）に読み込まれて、適宜にＣＰＵ（１４）で解釈実行・処理される。その結果、ＣＰＵ（１４）が所定の機能（合成数算出部、生成元算出部、秘密鍵集合算出部、ナップザック生成因子算出部、乱数生成部、ナップザック生成部、制御部）を実現する。
【００１８】
（鍵生成処理）
次に、図２および図３を参照して、鍵生成装置（１）における鍵生成処理の流れを叙述的に説明する。
【００１９】
まず、制御部（１４０）が、外部記憶装置（１７）から、正の整数ｎおよびｋ、素数冪ｑｊ（１≦ｊ≦ｓ）を読み込み、それぞれをＲＡＭ（１５）の所定の格納領域に格納しておく。以後、「ＲＡＭから○○を読み込む」旨の説明をした場合は、「ＲＡＭにおいて○○が格納されている所定の格納領域から○○を読み込む」ことを意味するとする。
なお、素数冪とは素数の冪乗を表し、冪数が１の場合も含むとする。
【００２０】
〔ステップＳ１２〕
次に、合成数算出部（１４１）が、ＲＡＭ（１５）から素数冪ｑｊ（１≦ｊ≦ｓ）を読み込み、式（１）に従った演算を行って合成数Ｎを算出し、この算出した合成数ＮをＲＡＭ（１５）の所定の格納領域に格納する。
【数１】
0004685621.tif 000002
【００２１】
〔ステップＳ１３〕
次に、生成元算出部（１４２）が、ＲＡＭ（１５）から素数冪ｑｊ（１≦ｊ≦ｓ）を読み込み、全てのｊ（１≦ｊ≦ｓ）について既約剰余類群（Ｚ／ｑｊＺ）×の生成元となる（合成数Ｎを法とする）整数ｇを算出して、この算出した整数ｇをＲＡＭ（１５）の所定の格納領域に格納する。
この整数ｇの算出は、公知の方法によって可能であり、例えば次のような方法による。即ち、まず、既約剰余類群（Ｚ／ｑ１Ｚ）×の生成元となる整数ｇ１、既約剰余類群（Ｚ／ｑ２Ｚ）×の生成元となる整数ｇ２、…、既約剰余類群（Ｚ／ｑｓＺ）×の生成元となる整数ｇｓをそれぞれの既約剰余類群ごとに総当りで求め、次いで、これらの整数ｇ１、ｇ２、…、ｇｓに対して中国人剰余定理を適用して整数ｇを求めればよい。
より具体的に説明すると、中国人剰余定理に拠れば、互いに素な各ｑｊ（１≦ｊ≦ｓ）について、ｇ≡ｇ１（ｍｏｄ  ｑ１）、ｇ≡ｇ２（ｍｏｄ  ｑ２）、・・・、ｇ≡ｇｓ（ｍｏｄ  ｑｓ）なる連立方程式を満たす整数ｇがＮ＝Πｊ＝１ｓｑｊ〔式（１）〕を法として一意に決まるので、全てのｊ（１≦ｊ≦ｓ）について既約剰余類群（Ｚ／ｑｊＺ）×の生成元となる（合成数Ｎを法とする）整数ｇを算出できる〔この場合、整数ｇは法ｑｊに関するｇｊの類に一致する。〕。
【００２２】
〔ステップＳ１４〕
次に、秘密鍵集合算出部（１４３）が、ＲＡＭ（１５）から正の整数ｎおよびｋ、合成数Ｎを読み込み、以下の条件を満たす、互いに素である元の集合｛ｐ１，ｐ２，・・・，ｐｎ｝を生成して、この集合｛ｐ１，ｐ２，・・・，ｐｎ｝をＲＡＭ（１５）の所定の格納領域に格納する。この集合｛ｐ１，ｐ２，・・・，ｐｎ｝が秘密鍵集合である。
・条件（ａ）：各ｐｉ（１≦ｉ≦ｎ）は合成数Ｎと互いに素である。
・条件（ｂ）：集合｛ｐ１，ｐ２，・・・，ｐｎ｝の部分集合であり、要素数がｋである任意の部分集合｛ｐｈ１，ｐｈ２，…，ｐｈｋ｝が、式（２）を満たす。
【数２】
0004685621.tif 000003
【００２３】
条件（ａ）は、元ｐｉが既約剰余類群（Ｚ／ＮＺ）×の元となることの条件である。
また、条件（ｂ）は、後述の復号化処理において復号の一意性を保証するための条件である。但し、式（２）は、後述する暗号化処理において平文Ｍを数え上げ符号方式でビット列に変換する場合に対応したものであり、例えば平文Ｍをパワーライン符号方式で自然数列に変換する場合には当該方式に適応した条件式になることに留意しなければならない。
いずれの符号変換方式でも満たすべき条件（ｂ）は、式（３）で表すことができる〔式（３）は、パワーライン符号方式における条件式でもある。〕。
【数３】
0004685621.tif 000004
【００２４】
集合｛ｐ１，ｐ２，・・・，ｐｎ｝の生成は、公知の方法によって可能であり、例えば次のような方法による。即ち、ｐ１＜ｐ２＜・・・＜ｐｎとして、既約剰余類群（Ｚ／ＮＺ）×の元の集合から、ｐｎ−ｋ＋１×ｐｎ−ｋ＋２×・・・×ｐｎ−１×ｐｎ＜Ｎを満たすようなｎ個の元を選択すればよい。なお、既約剰余類群（Ｚ／ＮＺ）×の元の集合の要素数は、ｎより大きいとする。
【００２５】
〔ステップＳ１５〕
次に、ナップザック生成因子算出部（１４４）が、ＲＡＭ（１５）から合成数Ｎ、整数ｇ、秘密鍵集合｛ｐ１，ｐ２，・・・，ｐｎ｝を読み込み、式（４）を満たす整数ａｉ（１≦ｉ≦ｎ）を算出し、この算出した整数ａｉ（１≦ｉ≦ｎ）をＲＡＭ（１５）の所定の格納領域に格納する。この整数ａｉ（１≦ｉ≦ｎ）がナップザック生成因子である。
【数４】
0004685621.tif 000005
【００２６】
式（４）はいわゆる離散対数問題であり、一般的には整数ａｉを求めることは困難とされる。
しかし、合成数Ｎの素因子ｑｊが或る程度小さい場合（現在の技術水準では上限４００ビット程度であるが、例えば６４ビット〜２５６ビット程度でよい。）には、容易に整数ａｉを求めることが可能である。例えば、各ｉ（１≦ｉ≦ｎ）について、以下の処理を行えばよい。
【００２７】
〔ステップＳ１５−１〕
各ｊ（１≦ｊ≦ｓ）について、式（５）を満たす整数ａｉ，ｊを計算する。素因子ｑｊが短いビット長の素数冪であれば、ａｉ，ｊを求めるためには、数体ふるい法やPollardのρと呼ばれる方式（モンテカルロ法）を用いることによって、容易に計算することが可能である。
【数５】
0004685621.tif 000006
【００２８】
〔ステップＳ１５−２〕
全てのｊ（１≦ｊ≦ｓ）について、式（６）を満たす整数ａｉを計算する。なお、φはオイラー関数である。
【数６】
0004685621.tif 000007
【００２９】
〔ステップＳ１６〕
次に、乱数生成部（１４５）が、乱数ｄを生成して、この生成した乱数ｄをＲＡＭ（１５）の所定の格納領域に格納する。
【００３０】
〔ステップＳ１７〕
次に、ナップザック生成部（１４６）が、ＲＡＭ（１５）から乱数ｄ、整数ａｉ（１≦ｉ≦ｎ）を読み込み、各ｉ（１≦ｉ≦ｎ）について、整数ａｉに乱数ｄを加算して整数ｂｉ〔１≦ｉ≦ｎ〕を算出し、この算出されたｂｉをＲＡＭ（１５）の所定の格納領域に格納する。このｂｉ（１≦ｉ≦ｎ）がナップザックである。
ここで、「整数ａｉに乱数ｄを加算して整数ｂｉ〔１≦ｉ≦ｎ〕を算出」する具体的な方法としては、例えば、ｂｉ＝ａｉ＋ｄを演算して行う。なお、ナップザックであるｂｉ（１≦ｉ≦ｎ）の算出方法は、ｂｉ＝ａｉ＋ｄなる演算に限定されるものではない。要はナップザックとして利用可能なｎ個の元の集合を生成できればよく、例えば次のような方法でナップザックを生成してもよい。即ち、ナップザック生成部（１４６）が、ＲＡＭ（１５）から乱数ｄ、整数ａｉ（１≦ｉ≦ｎ）、合成数Ｎを読み込み、各ｉ（１≦ｉ≦ｎ）について、ｂｉ＝ａｉ＋ｄ  ｍｏｄ  φ（Ｎ）を演算してｂｉを算出し、この算出されたｂｉをＲＡＭ（１５）の所定の格納領域に格納する。
【００３１】
〔ステップＳ１８〕
以上の処理を経てＲＡＭ（１５）に格納されている合成数Ｎ、正の整数ｋ、整数ｇ、乱数ｄおよび秘密鍵集合｛ｐ１，ｐ２，・・・，ｐｎ｝が秘密鍵となり、ナップザックｂｉ（１≦ｉ≦ｎ）、正の整数ｎおよびｋが公開鍵となる。なお、公開鍵のうちｎについてはナップザックｂｉ（１≦ｉ≦ｎ）の個数から得られるから、ｎを公開鍵に含めることは必須ではない。本明細書では、説明の便宜上、このｎを含めて公開鍵とする。
制御部（１４０）は、通信部（１３）を制御して、公開鍵（ｎ，ｋ，ｂ１，ｂ２，・・・，ｂｎ）を暗号化装置に送信し、秘密鍵（Ｎ，ｋ，ｇ，ｄ，ｐ１，ｐ２，・・・，ｐｎ）を復号化装置に送信する。なお、少なくとも秘密鍵を送信する通信路は安全性が保証されたものであることが望ましい。なお、鍵生成装置（１）が復号化装置を兼ねる場合には、秘密鍵を送信する必要がない。また、公開鍵を暗号化装置に送信するのではなく、例えば公開鍵登録サーバ装置などに送信して、公開鍵登録サーバ装置がこれにアクセスした暗号化装置に公開鍵を送信する構成としてもよい。結局のところ、秘密鍵が安全に復号化装置に供給されること、公開鍵が暗号化装置に供給されること、の２点を満たせば、その供給方法に限定はない。
【００３２】
［暗号化装置］
（ハードウェア構成並びにハードウェア資源とソフトウェアとの協働による情報処理の実現）
図４は、暗号化装置（２）のハードウェア構成を例示した構成ブロック図である。図４に例示するように、暗号化装置（２）は、キーボードやポインティングデバイスなどの入力手段が接続可能な入力部（２１）、液晶ディスプレイなどの出力手段が接続可能な出力部（２２）、暗号化装置（２）外部に通信可能な通信装置（例えば通信ケーブルなど。）が接続可能な通信部（２３）、ＣＰＵ（Central Processing Unit）（２４）〔キャッシュメモリなどを備えていてもよい。〕、メモリであるＲＡＭ（２５）、ＲＯＭ（２６）やハードディスクである外部記憶装置（２７）並びにこれらの入力部（２１）、出力部（２２）、通信部（２３）、ＣＰＵ（２４）、ＲＡＭ（２５）、ＲＯＭ（２６）、外部記憶装置（２７）間のデータのやり取りが可能なように接続するバス（２８）を備えている。また必要に応じて、暗号化装置（２）に、ＣＤ−ＲＯＭなどの記憶媒体を読み書きできる装置（ドライブ）などを設けるとしてもよい。このようなハードウェア資源を備えた物理的実体としては、汎用コンピュータなどがある。
【００３３】
暗号化装置（２）の外部記憶装置（２７）には、平文を暗号化するためのプログラムおよびこのプログラムの処理において必要となるデータなどが保存記憶されている。また、プログラムの処理によって得られるデータなどは、ＲＡＭ（２５）や外部記憶装置（２７）などに適宜に保存記憶される。
【００３４】
より具体的に外部記憶装置（２７）〔あるいはＲＯＭなど〕には、平文Ｍを所定のビット長に符号化するためのプログラム、符号化された平文を暗号化するためのプログラム、これらのプログラムに基づく処理を制御するための制御プログラムなどが保存記憶されている。
また、これらのプログラムの処理において必要となるデータとして、平文Ｍ、公開鍵（ｎ，ｋ，ｂ１，ｂ２，・・・，ｂｎ）が予め外部記憶装置（２７）に保存記憶されているとする。なお、平文Ｍは、予め暗号化装置（２）の外部記憶装置（２７）に保存記憶しておくのではなく、例えば、入力部（２１）から入力されるとしてもよいし、あるいは、これらのデータを格納した記録媒体からドライブを駆動して読み込むようにしてもよく、適宜に変更可能である。また、公開鍵（ｎ，ｋ，ｂ１，ｂ２，・・・，ｂｎ）は、暗号化装置（２）の通信部（２３）によって、鍵生成装置（１）から受信して外部記憶装置（２７）に保存記憶されたものである。
【００３５】
暗号化装置（２）では、外部記憶装置（２７）〔あるいはＲＯＭなど〕に記憶された各プログラムとこの各プログラムの処理に必要なデータが必要に応じてＲＡＭ（２５）に読み込まれて、適宜にＣＰＵ（２４）で解釈実行・処理される。その結果、ＣＰＵ（２４）が所定の機能（符号変換部、暗号化部、制御部）を実現する。
【００３６】
（暗号化処理）
次に、図５および図６を参照して、暗号化装置（２）における暗号化処理の流れを叙述的に説明する。
【００３７】
まず、制御部（２４０）が、外部記憶装置（２７）から、平文Ｍおよび公開鍵（ｎ，ｋ，ｂ１，ｂ２，・・・，ｂｎ）を読み込み、それぞれをＲＡＭ（２５）の所定の格納領域に格納しておく。以後、「ＲＡＭから○○を読み込む」旨の説明をした場合は、「ＲＡＭにおいて○○が格納されている所定の格納領域から○○を読み込む」ことを意味するとする。
【００３８】
〔ステップＳ２２〕
次に、符号変換部（２４１）が、ＲＡＭ（２５）から平文Ｍ、公開鍵ｎおよびｋを読み込み、平文Ｍを、長さｎビット、ハミング（Hamming）重みｋの符号列ｍ＝（ｍ１，ｍ２，・・・，ｍｎ）に変換し、変換された平文をＲＡＭ（２５）の所定の格納領域に格納する。
ここで、平文Ｍのビット長は、┗log２  ｎＣｋ┛ビットとする（後述の数え上げ符号方式の場合に相当する。）。また、ｍｉ（１≦ｉ≦ｎ）∈｛０，１｝、Σｉ＝１ｎｍｉ＝ｋである。つまり、ビット列ｍの中では、値１のものがｋ個、値０のものがｎ−ｋ個である。
なお、記号┗＊┛は、＊を超えない最大の整数を表し、ｎＣｋは、ｎ個のものからｋ個のものを取り出す組み合わせの総数（いわゆる二項係数に相当する。）を表す。
【００３９】
平文Ｍを、長さｎビット、ハミング（Hamming）重みｋのビット列ｍに変換する方法は公知の方法によればよく、「数え上げ符号（enumerable encoding）」という方式を用いればよい（参考文献２参照。）。なお、この方式に限定する趣旨ではなく、後述する復号化処理が可能となるためには、符号列ｍがΣｉ＝１ｎｍｉ＝ｋという条件を満たしていれば十分であるため、符号列ｍ＝（ｍ１，ｍ２，・・・，ｍｎ）はビット列ではなく自然数列でもよい。平文Ｍをこのような自然数列に変換する方法として、「パワーライン符号（powerline encoding）」と呼ばれる方式がある（参考文献３参照。）。このパワーライン符号方式を用いる場合には、平文Ｍをこの方式に適合したビット長にすればよい。パワーライン符号方式の場合には、ビット長を┗log２  ｎＨｋ┛＝┗log２  ｎ＋ｋ-１Ｃｋ┛とする。パワーライン符号方式の場合、符号化できる整数の総数は「ｎ個のものから重複を許してｋ個のものを取り出す組み合わせの総数（重複組み合わせ）ｎＨｋ」に一致する。
（参考文献２）  T. M. Cover, "Enumerable source encoding", IEEE Trans. Inform. Theory, vol.IT-19, pp.73-77, 1973. 
（参考文献３）  P. Camion, H. Chabanne, "On the Powerline system", AAECC, vo1 9, pp.405-432, Springer-Verlag, 1999.
【００４０】
なお、第１実施形態では数え上げ符号方式を用いることから、平文Ｍのビット長を┗log２  ｎＣｋ┛ビットとしたが、このようなビット長の平文Ｍに限定する趣旨ではない。あるビット長の平文をビット長┗log２  ｎＣｋ┛ごとに分割し、分割された平文（分割平文）ごとに符号化を行うようにしてもよい。分割でビット長┗log２  ｎＣｋ┛よりも短い分割平文ができた場合には、足りないビット長を０で埋めてビット長を┗log２  ｎＣｋ┛に揃えればよい。このことは、パワーライン符号方式の場合でも同様である。
【００４１】
〔ステップＳ２３〕
次に、暗号化部（２４２）が、ＲＡＭ（２５）からビット列ｍ、公開鍵ｂ１，ｂ２，・・・，ｂｎを読み込み、ｃ＝Σｉ＝１ｎｍｉｂｉなる演算を行って暗号文ｃを算出し、この算出した暗号文ｃをＲＡＭ（２５）の所定の格納領域に格納する。
【００４２】
〔ステップＳ２４〕
制御部（２４０）は、通信部（２３）を制御して、ＲＡＭ（２５）に格納されている暗号文ｃを復号化装置に送信する。
【００４３】
［復号化装置］
（ハードウェア構成並びにハードウェア資源とソフトウェアとの協働による情報処理の実現）
図７は、復号化装置（３）のハードウェア構成を例示した構成ブロック図である。図７に例示するように、復号化装置（３）は、キーボードやポインティングデバイスなどの入力手段が接続可能な入力部（３１）、液晶ディスプレイなどの出力手段が接続可能な出力部（３２）、復号化装置（３）外部に通信可能な通信装置（例えば通信ケーブルなど。）が接続可能な通信部（３３）、ＣＰＵ（Central Processing Unit）（３４）〔キャッシュメモリなどを備えていてもよい。〕、メモリであるＲＡＭ（３５）、ＲＯＭ（３６）やハードディスクである外部記憶装置（３７）並びにこれらの入力部（３１）、出力部（３２）、通信部（３３）、ＣＰＵ（３４）、ＲＡＭ（３５）、ＲＯＭ（３６）、外部記憶装置（３７）間のデータのやり取りが可能なように接続するバス（３８）を備えている。また必要に応じて、復号化装置（３）に、ＣＤ−ＲＯＭなどの記憶媒体を読み書きできる装置（ドライブ）などを設けるとしてもよい。このようなハードウェア資源を備えた物理的実体としては、汎用コンピュータなどがある。
【００４４】
復号化装置（３）の外部記憶装置（３７）には、暗号文を復号化するためのプログラムおよびこのプログラムの処理において必要となるデータなどが保存記憶されている。また、プログラムの処理によって得られるデータなどは、ＲＡＭ（３５）や外部記憶装置（３７）などに適宜に保存記憶される。
【００４５】
より具体的に外部記憶装置（３７）〔あるいはＲＯＭなど〕には、暗号文ｃおよび秘密鍵から暗号処理に用いる指数を求めるためのプログラム、秘密鍵および前記指数から冪乗剰余演算を行うためのプログラム、冪乗剰余演算結果から符号列を再生するためのプログラム、再生された符号列を平文に変換するためのプログラム、これらのプログラムに基づく処理を制御するための制御プログラムなどが保存記憶されている。
また、これらのプログラムの処理において必要となるデータとして、秘密鍵（Ｎ，ｋ，ｇ，ｄ，ｐ１，ｐ２，・・・，ｐｎ）、暗号文ｃが予め外部記憶装置（３７）に保存記憶されているとする。秘密鍵（Ｎ，ｋ，ｇ，ｄ，ｐ１，ｐ２，・・・，ｐｎ）は、復号化装置（３）の通信部（３３）によって、鍵生成装置（１）から受信して外部記憶装置（３７）に保存記憶されたものである。また、暗号文ｃは、復号化装置（３）の通信部（３３）によって、暗号化装置（２）から受信して外部記憶装置（３７）に保存記憶されたものである。なお、これらのデータを格納した記録媒体からドライブを駆動して読み込むようにしてもよく、適宜に変更可能である。
【００４６】
復号化装置（３）では、外部記憶装置（３７）〔あるいはＲＯＭなど〕に記憶された各プログラムとこの各プログラムの処理に必要なデータが必要に応じてＲＡＭ（３５）に読み込まれて、適宜にＣＰＵ（３４）で解釈実行・処理される。その結果、ＣＰＵ（３４）が所定の機能（指数算出部、冪乗剰余演算部、符号列再生部、復号化部、制御部）を実現する。
【００４７】
（復号化処理）
次に、図８および図９を参照して、復号化装置（３）における復号化処理の流れを叙述的に説明する。
【００４８】
まず、制御部（３４０）が、外部記憶装置（３７）から、秘密鍵（Ｎ，ｋ，ｇ，ｄ，ｐ１，ｐ２，・・・，ｐｎ）、暗号文ｃを読み込み、それぞれをＲＡＭ（３５）の所定の格納領域に格納しておく。以後、「ＲＡＭから○○を読み込む」旨の説明をした場合は、「ＲＡＭにおいて○○が格納されている所定の格納領域から○○を読み込む」ことを意味するとする。
【００４９】
〔ステップＳ３２〕
次に、指数算出部（３４１）が、ＲＡＭ（３５）から暗号文ｃ、秘密鍵ｋおよびｄを読み込み、ｒ＝ｃ−ｋｄなる演算を行って指数ｒを算出し、この算出した指数ｒをＲＡＭ（３５）の所定の格納領域に格納する。
なお、ここで指数ｒの算出方法は、鍵生成装置（１）における鍵生成処理のステップＳ１７に対応しており、ナップザックｂｉ（１≦ｉ≦ｎ）をｂｉ＝ａｉ＋ｄなる演算をして算出した場合には、ｒ＝ｃ−ｋｄなる演算を行って指数ｒを算出するが、例えばナップザックｂｉ（１≦ｉ≦ｎ）をｂｉ＝ａｉ＋ｄ  ｍｏｄ  φ（Ｎ）を演算して算出した場合には、ｒ＝ｃ−ｋｄ  ｍｏｄ  φ（Ｎ）なる演算を行って指数ｒを算出することに留意しなければならない。
【００５０】
〔ステップＳ３３〕
次に、冪乗剰余演算部（３４２）が、ＲＡＭ（３５）から指数ｒ、秘密鍵Ｎおよびｇを読み込み、ｕ＝ｇｒ  ｍｏｄ  Ｎなる演算を行って冪乗剰余演算結果ｕを算出し、この算出した冪乗剰余演算結果ｕをＲＡＭ（３５）の所定の格納領域に格納する。
【００５１】
〔ステップＳ３４〕
次に、符号列再生部（３４３）が、ＲＡＭ（３５）から冪乗剰余演算結果ｕ、秘密鍵ｐ１，ｐ２，・・・，ｐｎを読み込み、各ｉ（１≦ｉ≦ｎ）について、冪乗剰余演算結果ｕを秘密鍵ｐｉで除し、冪乗剰余演算結果ｕが秘密鍵ｐｉで割り切れる場合にはｍｉ＝１とし、冪乗剰余演算結果ｕが秘密鍵ｐｉで割り切れない場合にはｍｉ＝０として、符号列（ビット列）ｍ＝（ｍ１，ｍ２，・・・，ｍｎ）を求める。そして、符号列再生部（３４３）は、求めた符号列（ビット列）ｍ＝（ｍ１，ｍ２，・・・，ｍｎ）をＲＡＭ（３５）の所定の格納領域に格納する。
【００５２】
ステップＳ３２〜Ｓ３４の処理について補足説明をする。
鍵生成処理のステップＳ１７において、ナップザックｂｉ（１≦ｉ≦ｎ）をｂｉ＝ａｉ＋ｄなる演算をして算出した場合に対応して、ステップＳ３２において、ｒ＝ｃ−ｋｄなる演算を行って指数ｒを算出した場合で説明すると、ｒ＝ｃ−ｋｄなる演算は、次のような演算であることを意味する。即ち、ｒ＝Σｉ＝１ｎｍｉｂｉ−ｋｄ＝Σｉ＝１ｎｍｉ（ａｉ＋ｄ）−ｋｄ＝Σｉ＝１ｎｍｉａｉ＋ｄ×Σｉ＝１ｎｍｉ−ｋｄ＝Σｉ＝１ｎｍｉａｉ＋ｋｄ−ｋｄ＝Σｉ＝１ｎｍｉａｉである（∵Σｉ＝１ｎｍｉ＝ｋ）。
従って冪乗剰余演算は、ｕ＝ｇｒ  ｍｏｄ  Ｎ＝ｇ＾（Σｉ＝１ｎｍｉａｉ）  ｍｏｄ  Ｎ＝ｇ＾（ｍ１ａ１）×ｇ＾（ｍ２ａ２）×・・・×ｇ＾（ｍｎａｎ）  ｍｏｄ  Ｎとなる〔但し、記号＾は冪乗を表す。〕。ここで式（４）および秘密鍵集合｛ｐ１，ｐ２，・・・，ｐｎ｝のどの２つの元も互いに素であることに留意すれば、冪乗剰余演算結果ｕが秘密鍵ｐｉで割り切れる場合とは、冪乗剰余演算結果ｕがｇ＾ａｉを素因子として有していることに他ならず、さらに、ｍｉ（１≦ｉ≦ｎ）∈｛０，１｝であることに留意すれば、ｍｉ＝１であることが判明する。一方、冪乗剰余演算結果ｕが秘密鍵ｐｉで割り切れない場合とは、冪乗剰余演算結果ｕがｇ＾ａｉを素因子として有していないことに他ならず、さらに、ｍｉ（１≦ｉ≦ｎ）∈｛０，１｝であることに留意すれば、ｍｉ＝０であることが判明する。
【００５３】
〔ステップＳ３５〕
次に、復号化部（３４４）が、ＲＡＭ（３５）から符号列（ビット列）ｍ＝（ｍ１，ｍ２，・・・，ｍｎ）を読み込み、暗号化装置（２）における暗号化処理のステップＳ２２と対応した逆変換を行い（参考文献２参照。）、平文Ｍを復元してこれをＲＡＭ（３５）の所定の格納領域に格納する。
【００５４】
なお、分割平文の場合には、分割平文ごとに暗号化された各分割暗号文に対してステップＳ３１〜Ｓ３５の処理を行って、得られた分割平文を結合することで平文全体を得ることができる。
【００５５】
［乗法型ナップザック暗号システムとその処理］
第１実施形態の乗法型ナップザック暗号システムは、種々のシステム構成が考えられ、ここでは代表的な２形態について説明する。
【００５６】
（システムその１）
乗法型ナップザック暗号システム（１０００）は、上記鍵生成装置（１）、暗号化装置（２）、復号化装置（３）、公開鍵登録サーバ装置（４）で構成される。図１０は、乗法型ナップザック暗号システム（１０００）の構成例を示す図である。
【００５７】
鍵生成装置（１）、暗号化装置（２）、復号化装置（３）、公開鍵登録サーバ装置（４）は、それぞれインターネットやＬＡＮ（Local Area Network）などのネットワーク（５）に通信可能に接続される。なお、ネットワーク（５）には複数の暗号化装置（２）が接続されるとしてもよい。
【００５８】
鍵生成装置（１）によって生成された公開鍵（ｎ，ｋ，ｂ１，ｂ２，・・・，ｂｎ）は、いずれも乗法型ナップザック暗号システム（１０００）において公開される。乗法型ナップザック暗号システム（１０００）において公開される公開鍵は、鍵生成装置（１）の外部記憶装置（１７）に保存記憶されるとし、ネットワーク（５）を経由して暗号化装置（２）などからアクセスされることによって配布されるものとしてもよい。しかし、鍵生成装置（１）では、秘密鍵（Ｎ，ｇ，ｋ，ｄ，ｐ１，ｐ２，・・・，ｐｎ）も生成されるため、不正アクセスによる秘密鍵などの漏洩に対処するため、公開鍵登録サーバ装置（４）の外部記憶装置に、乗法型ナップザック暗号システム（１０００）において公開される公開鍵を保存しておくのがよい。つまり乗法型ナップザック暗号システム（１０００）では、公開鍵登録サーバ装置（４）が暗号化装置（２）からのアクセスを受けることで、公開鍵の提供がなされる。
【００５９】
鍵生成装置（１）において生成された秘密鍵は、その秘匿性が高度に要求される。従って、少なくとも秘密鍵を送信する通信路は安全性が保証されたものであることが望ましい。もし、ネットワーク（５）が通信傍受の可能性のあるものである場合には、これを経由して復号化装置（３）に秘密鍵が送信されるのではなく、別途記憶媒体に記憶して、この記憶媒体を郵送などの手段で復号化装置（３）の下に送り、この記憶媒体から復号化装置（３）の外部記憶装置（３７）に記憶させるとしてもよい。
【００６０】
１つあるいは複数の暗号化装置（２）は、公開鍵登録サーバ装置（４）にアクセスして公開鍵を入手し、平文Ｍから暗号文ｃを生成する。暗号化装置（２）は生成した暗号文ｃを、ネットワーク（５）を介して復号化装置（３）に送信する。
【００６１】
復号化装置（３）は、秘密鍵を用いて、ネットワーク（５）経由で受信した、暗号化装置（２）で生成された暗号文ｃの復号化を行う。
【００６２】
図１１は、乗法型ナップザック暗号システム（１０００）における乗法型ナップザック暗号復号方法の処理フローを示す図である。
まず、鍵生成装置（１）が公開鍵および秘密鍵を生成する（ステップＳ１００）。ステップＳ１００の具体的な処理は、上記ステップＳ１２〜Ｓ１７を参照のこと。次に、鍵生成装置（１）の通信部（１３）が、公開鍵登録サーバ装置（４）に公開鍵を送信する（ステップＳ１０１）。そして公開鍵登録サーバ装置（４）の通信部（図示しない。）が、鍵生成装置（１）から公開鍵を受信する（ステップＳ１０２）。また、鍵生成装置（１）の通信部（１３）が、復号化装置（３）に秘密鍵を送信する（ステップＳ１０３）。そして復号化装置（３）の通信部（３３）が、鍵生成装置（１）から秘密鍵を受信する（ステップＳ１０４）。暗号化装置（２）は、暗号化装置（２）の通信部（２３）によって公開鍵登録サーバ装置（４）にアクセスし、公開鍵を取得する（ステップＳ１０５）。次いで、暗号化装置（２）は、平文Ｍおよび公開鍵を用いて暗号文ｃを生成する（ステップＳ１０６）。ステップＳ１０６の具体的な処理は、上記ステップＳ２２、Ｓ２３を参照のこと。そして、暗号化装置（２）の通信部（２３）は、復号化装置（３）に暗号文ｃを送信する（ステップＳ１０７）。復号化装置（３）の通信部（３３）は、暗号化装置（２）から暗号文ｃを受信する（ステップＳ１０８）。復号化装置（３）は、秘密鍵を用いて暗号文ｃから平文Ｍを得る（ステップＳ１０９）。ステップＳ１０９の具体的な処理は、上記ステップＳ３２〜Ｓ３５を参照のこと。
なお、乗法型ナップザック暗号システム（１０００）が公開鍵登録サーバ装置（４）を備えない場合は、ステップＳ１０１、Ｓ１０２は不要となり、ステップＳ１０５の処理は、暗号化装置（２）が、暗号化装置（２）の通信部（２３）によって鍵生成装置（１）にアクセスし、公開鍵を取得するものとなる。
【００６３】
（システムその２）
乗法型ナップザック暗号システム（１００１）は、上記暗号化装置（２）、鍵生成装置を兼ねる復号化装置（３’）で構成される。図１２は、乗法型ナップザック暗号システム（１００１）の構成例を示す図である。
【００６４】
暗号化装置（２）、鍵生成装置兼復号化装置（３’）は、それぞれインターネットやＬＡＮ（Local Area Network）などのネットワーク（５）に通信可能に接続される。なお、ネットワーク（５）には複数の暗号化装置（２）が接続されるとしてもよい。
【００６５】
鍵生成装置兼復号化装置（３’）によって生成された公開鍵（ｎ，ｋ，ｂ１，ｂ２，・・・，ｂｎ）および秘密鍵（Ｎ，ｇ，ｋ，ｄ，ｐ１，ｐ２，・・・，ｐｎ）は、鍵生成装置兼復号化装置（３’）の外部記憶装置（３７’）に保存記憶されるとし、例えば鍵生成装置兼復号化装置（３’）と暗号化装置（２）とのネットワーク（５）を介したpeer to peerな通信によって、鍵生成装置兼復号化装置（３’）が公開鍵を暗号化装置（２）に送信する。
【００６６】
１つあるいは複数の暗号化装置（２）は、鍵生成装置兼復号化装置（３’）から受信した公開鍵を用いて平文Ｍから暗号文ｃを生成する。暗号化装置（２）は生成した暗号文ｃを、ネットワーク（５）を介して鍵生成装置兼復号化装置（３’）に送信する。
【００６７】
鍵生成装置兼復号化装置（３’）は、秘密鍵を用いて、ネットワーク（５）経由で受信した、暗号化装置（２）で生成された暗号文ｃの復号化を行う。
【００６８】
ところで、鍵生成装置兼復号化装置（３’）は、一般的に物理的実体という視点からは１つの筐体として存在する。しかし、このことは、鍵生成装置兼復号化装置（３’）が、鍵生成装置（１）や復号化装置（３）とは全く異なる装置であることを意味しない。例えば１つの汎用コンピュータが、処理するプログラムによって鍵生成装置（１）としても復号化装置（３）としても機能し、さらに、両者のプログラムを有することで、１つの汎用コンピュータが鍵生成装置（１）および復号化装置（３）としての役割を演じることを考慮すれば、１つの汎用コンピュータが機能的側面において二面性（多面性）を有していると考えることができる。この「機能」に対応して「装置」を定義すれば、物理的実体として１個の汎用コンピュータが、鍵生成装置（１）且つ復号化装置（３）であると云える。換言して言えば、１個の汎用コンピュータで実現される鍵生成装置兼復号化装置（３’）は、鍵生成装置（１）且つ復号化装置（３）であり、あたかも鍵生成装置（１）および復号化装置（３）という２つの物理的実体が存在することと同視できる。従って、システムその２で述べたシステム構成は、（秘密鍵の送信が不要という異なる点があるものの）システムその１のシステム構成と実質的に異なるものではないことに留意しなければならない。
【００６９】
図１３は、乗法型ナップザック暗号システム（１００１）における乗法型ナップザック暗号復号方法の処理フローを示す図である。
まず、鍵生成装置兼復号化装置（３’）が公開鍵および秘密鍵を生成する（ステップＳ２００）。ステップＳ２００の具体的な処理は、上記ステップＳ１２〜Ｓ１７を参照のこと。次に、鍵生成装置兼復号化装置（３’）の通信部が、暗号化装置（２）に公開鍵を送信する（ステップＳ２０１）。暗号化装置（２）は、鍵生成装置兼復号化装置（３’）から公開鍵を受信する（ステップＳ２０２）。次いで、暗号化装置（２）は、平文Ｍおよび公開鍵を用いて暗号文ｃを生成する（ステップＳ２０３）。ステップＳ２０３の具体的な処理は、上記ステップＳ２２、Ｓ２３を参照のこと。そして、暗号化装置（２）の通信部（２３）は、鍵生成装置兼復号化装置（３’）に暗号文ｃを送信する（ステップＳ２０４）。鍵生成装置兼復号化装置（３’）の通信部は、暗号化装置（２）から暗号文ｃを受信する（ステップＳ２０５）。鍵生成装置兼復号化装置（３’）は、秘密鍵を用いて暗号文ｃから平文Ｍを得る（ステップＳ２０６）。ステップＳ２０６の具体的な処理は、上記ステップＳ３２〜Ｓ３５を参照のこと。
【００７０】
《第２実施形態》
本発明の第２実施形態を、図面を参照して説明する。なお、第１実施形態に対応するハードウェア構成要素などについては、同一参照符号を付けるなどして重複説明を省略する。
【００７１】
第１実施形態では、各処理に係わる集合が有理整数環であったが、第２実施形態における各処理に係わる集合は、代数体の整数環である。このことに伴い、第１実施形態との対比を容易にするためできるだけ同じ記号（例えばｇ、ｐｉ、ａｉ、ｂｉなど）を用いて説明するが、これらの記号が第１実施形態で用いたときの意味と同一であるわけではないことに留意しなければならない（第２実施形態における各処理に係わる集合が代数体の整数環であることを無視してはならない。）。
以下では、Ｋを代数体、ＺＫをその整数環とする。また、「整数」とはＺＫの要素を表し、「有理整数」は、有理整数集合Ｚの要素を表す。
【００７２】
［鍵生成装置］
（ハードウェア構成並びにハードウェア資源とソフトウェアとの協働による情報処理の実現）
第２実施形態に係わる鍵生成装置（１ｓ）のハードウェア構成・資源は、第１実施形態の鍵生成装置（１）と同様である（図１参照。）。
【００７３】
鍵生成装置（１ｓ）の外部記憶装置（１７）には、後述する鍵（公開鍵、秘密鍵）を生成するためのプログラムおよびこのプログラムの処理において必要となるデータなどが保存記憶されている。また、プログラムの処理によって得られるデータなどは、ＲＡＭ（１５）や外部記憶装置（１７）などに適宜に保存記憶される。
【００７４】
より具体的に鍵生成装置（１ｓ）の外部記憶装置（１７）〔あるいはＲＯＭなど〕には、既約剰余類群の生成元となる整数ｇを求めるためのプログラム、ナップザック問題を解くために用いられる秘密鍵となる元の集合（以下、「秘密鍵集合」とも云う。）を生成するためのプログラム、イデアルνを法とし整数ｇを底として秘密鍵となる各元の指数（以下、「ナップザック生成因子」と云う。）を与えるためのプログラム、乱数を生成するためのプログラム、ナップザックを生成するためのプログラム、これらのプログラムに基づく処理の制御や代数体の設定などをするための制御プログラムなどが保存記憶されている。
また、これらのプログラムの処理において必要となるデータとして、正の有理整数ｎ、ｋおよびｆ（但し、ｎ＞ｋとする。）が予め鍵生成装置（１ｓ）の外部記憶装置（１７）に保存記憶されているとする。なお、これらのデータは、予め鍵生成装置（１ｓ）の外部記憶装置（１７）に保存記憶しておくのではなく、例えば、鍵生成装置（１ｓ）の入力部（１１）から入力されるとしてもよいし、あるいは、これらのデータを格納した記録媒体からドライブを駆動して読み込むようにしてもよく、適宜に変更可能である。
【００７５】
鍵生成装置（１ｓ）では、外部記憶装置（１７）〔あるいはＲＯＭなど〕に記憶された各プログラムとこの各プログラムの処理に必要なデータが必要に応じてＲＡＭ（１５）に読み込まれて、適宜にＣＰＵ（１４）で解釈実行・処理される。その結果、ＣＰＵ（１４）が所定の機能（生成元算出部、秘密鍵集合算出部、ナップザック生成因子算出部、乱数生成部、ナップザック生成部、制御部）を実現する。
【００７６】
（鍵生成処理）
次に、図１４および図１５を参照して、鍵生成装置（１ｓ）における鍵生成処理の流れを叙述的に説明する。
【００７７】
まず、制御部（１４０ｓ）が、外部記憶装置（１７）から、正の有理整数ｎ、ｋ、ｆを読み込み、それぞれをＲＡＭ（１５）の所定の格納領域に格納しておく。以後、「ＲＡＭから○○を読み込む」旨の説明をした場合は、「ＲＡＭにおいて○○が格納されている所定の格納領域から○○を読み込む」ことを意味するとする。
【００７８】
〔ステップＳ１２ｓ〕
次に、制御部（１４０ｓ）が、ＲＡＭ（１５）から正の有理整数ｆを読み込み、ｆ次代数体として代数体Ｋを、さらに、式（７）で表される代数体Ｋの整数環ＺＫのイデアルνを設定する。そして制御部（１４０ｓ）は、代数体Ｋおよびイデアルνの設定に必要な情報（例えばｆ次有理係数多項式などである。）をＲＡＭ（１５）の所定の格納領域に格納する。なお、式（７）のτｊ（１≦ｊ≦ｓ）はどの２つのノルムも互いに素な素イデアルである。また、制御部（１４０ｓ）は、剰余環ＺＫ／νの完全代表系を１つ固定し、その集合をＲ（ν）として設定して、Ｒ（ν）をＲＡＭ（１５）の所定の格納領域に格納する。
【数７】
0004685621.tif 000008
【００７９】
なお、代数体やイデアルの設定に必要な情報などについて簡単な説明を加えておく。
ｆ次代数体は、モニック（monic）な有理整数係数ｆ次既約多項式Ｆ（ｘ）＝ｘｆ＋ｃｆ−１ｘｆ−１＋・・・＋ｃ１ｘ＋ｃ０〔ｃは有理整数係数〕として設定される。ｆ次代数体の元は、次数がｆ次未満の有理数係数多項式として表される。また、整数環やイデアルは、有理整数環上の基底ω１、ω２、・・・、ωｆ〔ωはｆ次未満の有理数係数多項式〕によって表される（整数環やイデアルは、Ｚω１＋Ｚω２＋・・・＋Ｚωｆと表すことができるため。但し、Ｚは有理整数集合。）。
【００８０】
第２実施形態では代数体Ｋを設定するとしたが、必ず代数体Ｋを設定しなければならないということではない。予め、鍵生成装置（１ｓ）および後述の復号化装置（３ｓ）において、代数体Ｋにおいて演算を行うことを規約しておけば（つまり、予め両装置の外部記憶装置に代数体Ｋの設定に必要な情報を保存記憶しておけばよい。）、代数体Ｋを設定する必要がなく、また、代数体Ｋの設定に必要な情報を公開鍵にする必要がなくなる。
【００８１】
〔ステップＳ１３ｓ〕
次に、生成元算出部（１４２ｓ）が、全てのｊ（１≦ｊ≦ｓ）について既約剰余類群（ＺＫ／τｊ）×の生成元となる（イデアルνを法とする）整数ｇを算出して、この算出した整数ｇをＲＡＭ（１５）の所定の格納領域に格納する。
この整数ｇの算出は、公知の方法によって可能であり、例えば次のような方法による。即ち、まず、既約剰余類群（ＺＫ／τ１）×の生成元となる整数ｇ１、既約剰余類群（ＺＫ／τ２）×の生成元となる整数ｇ２、…、既約剰余類群（ＺＫ／τｓ）×の生成元となる整数ｇｓをそれぞれの既約剰余類群ごとに総当りで求め、これらの整数ｇ１、ｇ２、…、ｇｓに対して中国人剰余定理を適用して整数ｇを求めればよい。詳細は第１実施形態で述べたとおりであるが、第２実施形態では法がイデアルνであることに留意しなければならない。
ここで、代数体のイデアルνを法とする合同式ａ≡ｂ（ｍｏｄ  ν）は、（ａ−ｂ）∈νを意味する。
【００８２】
〔ステップＳ１４ｓ〕
次に、秘密鍵集合算出部（１４３ｓ）が、ＲＡＭ（１５）から正の有理整数ｎおよびｋを読み込み、以下の条件を満たす、各ノルムが互いに素である元の集合｛ｐ１，ｐ２，・・・，ｐｎ｝⊂ＺＫを生成して、この集合｛ｐ１，ｐ２，・・・，ｐｎ｝⊂ＺＫをＲＡＭ（１５）の所定の格納領域に格納する。この集合｛ｐ１，ｐ２，・・・，ｐｎ｝⊂ＺＫが秘密鍵集合である。
・条件（ｃ）：各整数ｐｉ（１≦ｉ≦ｎ）のノルムはイデアルνのノルムと互いに素である。
・条件（ｄ）：集合｛ｐ１，ｐ２，・・・，ｐｎ｝の部分集合であり、要素数がｋである任意の部分集合｛ｐｈ１，ｐｈ２，…，ｐｈｋ｝が、式（８）を満たす。
【数８】
0004685621.tif 000009
【００８３】
条件（ｃ）は、整数ｐｉがＲ（ν）の元となることの条件である。
また、条件（ｄ）は、復号化処理において復号の一意性を保証するための条件である。但し、式（８）は、暗号化処理において平文Ｍを数え上げ符号方式でビット列に変換する場合に対応したものであり、例えば平文Ｍをパワーライン符号方式で自然数列に変換する場合には当該方式に適応した条件式になることに留意しなければならない。
【００８４】
集合｛ｐ１，ｐ２，・・・，ｐｎ｝⊂ＺＫの生成は、公知の方法によって可能であり、例えば次のような方法による。素イデアルτｊ（１≦ｊ≦ｓ）のノルムが素数ｑｊの冪〔但し、第１実施形態の合成数Ｎを構成する素数冪ｑｊと必ずしも同じではない。〕で表されるときＮ１＝Πｊ＝１ｓｑｊとすると、Ｎ１と互いに素であり、１以上Ｎ１未満の整数で、次の条件（ｅ）を満たす、どの２元も互いに素な整数ｐ１，ｐ２，・・・，ｐｎを選べばよい（０以上Ｎ１未満の有理整数は、ＺＫ／νの完全代表系に含めることができる。）。
・条件（ｅ）：集合｛ｐ１，ｐ２，・・・，ｐｎ｝の部分集合であり、要素数がｋである任意の部分集合｛ｐｈ１，ｐｈ２，…，ｐｈｋ｝が、式（９）を満たす。
【数９】
0004685621.tif 000010
【００８５】
〔ステップＳ１５ｓ〕
次に、ナップザック生成因子算出部（１４４ｓ）が、ＲＡＭ（１５）から整数ｇ、秘密鍵集合｛ｐ１，ｐ２，・・・，ｐｎ｝を読み込み、式（１０）を満たす有理整数ａｉ（１≦ｉ≦ｎ）を算出し、この算出した有理整数ａｉ（１≦ｉ≦ｎ）をＲＡＭ（１５）の所定の格納領域に格納する。この有理整数ａｉ（１≦ｉ≦ｎ）がナップザック生成因子である。
【数１０】
0004685621.tif 000011
【００８６】
式（１０）はいわゆる離散対数問題であり、一般的には有理整数ａｉを求めることは困難とされる。
しかし、τｊのノルムが或る程度小さい（現在の技術水準では上限４００ビット程度であるが、例えば６４ビット〜２５６ビット程度でよい。）素イデアルのノルムの冪となるようにイデアルνを選択することによって、容易に有理整数ａｉを求めることが可能である。例えば、各ｉ（１≦ｉ≦ｎ）について、以下の処理を行えばよい。
【００８７】
〔ステップＳ１５ｓ−１〕
各ｊ（１≦ｊ≦ｓ）について、式（１１）を満たす有理整数ａｉ，ｊを計算する。素イデアルτｊのノルムが短いビット長の素数冪であれば、ａｉ，ｊを求めるためには、数体ふるい法やPollardのρと呼ばれる方式（モンテカルロ法）を用いることによって、容易に計算することが可能である。
【数１１】
0004685621.tif 000012
【００８８】
〔ステップＳ１５ｓ−２〕
全てのｊ（１≦ｊ≦ｓ）について、式（１２）を満たす有理整数ａｉを計算する。なお、Ｎ（τｊ）はτｊのノルムを表す。
【数１２】
0004685621.tif 000013
【００８９】
〔ステップＳ１６ｓ〕
次に、乱数生成部（１４５ｓ）が、有理整数である乱数ｄを生成して、この生成した乱数ｄをＲＡＭ（１５）の所定の格納領域に格納する。
【００９０】
〔ステップＳ１７ｓ〕
次に、ナップザック生成部（１４６ｓ）が、ＲＡＭ（１５）から乱数ｄ、有理整数ａｉ（１≦ｉ≦ｎ）を読み込み、各ｉ（１≦ｉ≦ｎ）について、有理整数ａｉに乱数ｄを加算して有理整数ｂｉ〔１≦ｉ≦ｎ〕を算出し、この算出されたｂｉをＲＡＭ（１５）の所定の格納領域に格納する。このｂｉ（１≦ｉ≦ｎ）がナップザックである。
ここで、「有理整数ａｉに乱数ｄを加算して有理整数ｂｉ〔１≦ｉ≦ｎ〕を算出」する具体的な方法としては、例えば、ｂｉ＝ａｉ＋ｄを演算して行う。なお、ナップザックであるｂｉ（１≦ｉ≦ｎ）の算出方法は、ｂｉ＝ａｉ＋ｄなる演算に限定されるものではない。要はナップザックとして利用可能なｎ個の元の集合を生成できればよく、例えば次のような方法でナップザックを生成してもよい。即ち、ナップザック生成部（１４６ｓ）が、ＲＡＭ（１５）から乱数ｄ、有理整数ａｉ（１≦ｉ≦ｎ）を読み込み、各ｉ（１≦ｉ≦ｎ）について、ｂｉ＝ａｉ＋ｄ  ｍｏｄ  Πｊ＝１ｓ（Ｎ（τｊ）−１）を演算してｂｉを算出し、この算出されたｂｉをＲＡＭ（１５）の所定の格納領域に格納する。
【００９１】
〔ステップＳ１８ｓ〕
以上の処理を経てＲＡＭ（１５）に格納されている正の有理整数ｋ、整数ｇ、乱数ｄ、秘密鍵集合｛ｐ１，ｐ２，・・・，ｐｎ｝、代数体Ｋおよびイデアルνを設定するための情報が秘密鍵となり、ナップザックｂｉ（１≦ｉ≦ｎ）、正の有理整数ｎおよびｋが公開鍵となる。なお、公開鍵のうちｎについてはナップザックｂｉ（１≦ｉ≦ｎ）の個数から得られるから、ｎを公開鍵に含めることは必須ではない。本明細書では、説明の便宜上、このｎを含めて公開鍵とする。また、秘密鍵のうち代数体Ｋを設定するための情報については、既述のとおり、代数体Ｋを設定するための情報を予め復号化装置に保存記憶しておく場合には、秘密鍵に含めることは必須ではない。本明細書では、説明の便宜上、代数体Ｋを設定するための情報を含めて秘密鍵とする。以下、代数体Ｋおよびイデアルνを設定するための情報を単に記号Ｋ、νで表す。
制御部（１４０ｓ）は、通信部（１３）を制御して、公開鍵（ｎ，ｋ，ｂ１，ｂ２，・・・，ｂｎ）を暗号化装置に送信し、秘密鍵（Ｋ，ν，ｇ，ｋ，ｄ，ｐ１，ｐ２，・・・，ｐｎ）を復号化装置に送信する。なお、少なくとも秘密鍵を送信する通信路は安全性が保証されたものであることが望ましい。なお、鍵生成装置（１ｓ）が復号化装置を兼ねる場合には、秘密鍵を送信する必要がない。また、公開鍵を暗号化装置に送信するのではなく、例えば公開鍵登録サーバ装置などに送信して、公開鍵登録サーバ装置がこれにアクセスした暗号化装置に公開鍵を送信する構成としてもよい。結局のところ、秘密鍵が安全に復号化装置に供給されること、公開鍵が暗号化装置に供給されること、の２点を満たせば、その供給方法に限定はない。
【００９２】
［暗号化装置および暗号化処理］
第２実施形態に係わる暗号化装置（２ｓ）のハードウェア構成・資源は、第１実施形態の暗号化装置（２）と同様であり、また、暗号化装置（２ｓ）における暗号化処理も第１実施形態の暗号化処理と同様であるから、第１実施形態における暗号化装置（２）および暗号化処理の説明を援用し、第２実施形態における暗号化装置（２ｓ）および暗号化処理の説明を省略する（図４、５、６参照。）。なお、暗号化装置（２ｓ）の暗号化処理に用いる公開鍵は、鍵生成装置（１ｓ）によって生成された公開鍵（ｎ，ｋ，ｂ１，ｂ２，・・・，ｂｎ）であり、暗号化装置（２ｓ）の通信部によって、鍵生成装置（１ｓ）から受信して外部記憶装置（２７）に保存記憶されたものである。また、第２実施形態においても、数え上げ符号方式によって平文Ｍを符号化してビット長ｎ、ハミング重みｋのビット列ｍを生成するとする。
【００９３】
［復号化装置］
（ハードウェア構成並びにハードウェア資源とソフトウェアとの協働による情報処理の実現）
第２実施形態に係わる復号化装置（３ｓ）のハードウェア構成・資源や機能構成並びにプログラムは、第１実施形態の復号化装置（３）と同様である（図７参照。）。
【００９４】
（復号化処理）
次に、図１６および図１７を参照して、復号化装置（３ｓ）における復号化処理の流れを叙述的に説明する。
なお、下記の復号化処理では、秘密鍵Ｋを明示的に用いていないが、これは秘密鍵として代数体Ｋが不要という趣旨ではない。一般的に、（代数）体Ｋは、既約多項式Ｆ（ｘ）によって規定される。そして、（代数）体Ｋの元はｘの多項式として表されるものの、ｘの多項式のみでは（代数）体Ｋの元を表現することができないので、（代数）体Ｋの情報が必要になる（上記ＰＡＲＩ／ＧＰでは、体Ｋの元は、ｘの多項式を既約多項式Ｆ（ｘ）で除した余りとして表される。）。つまり、下記の復号化処理は、代数体Ｋにおける演算として行われる。
【００９５】
まず、制御部（３４０ｓ）が、外部記憶装置（３７）から、秘密鍵（Ｋ，ν，ｇ，ｋ，ｄ，ｐ１，ｐ２，・・・，ｐｎ）、暗号文ｃを読み込み、それぞれをＲＡＭ（３５）の所定の格納領域に格納しておく。秘密鍵は、復号化装置（３ｓ）の通信部によって、鍵生成装置（１ｓ）から受信して外部記憶装置（３７）に保存記憶されたものである。また、暗号文ｃは、復号化装置（３）の通信部によって、暗号化装置（２）から受信して外部記憶装置（３７）に保存記憶されたものである。なお、これらのデータを格納した記録媒体からドライブを駆動して読み込むようにしてもよく、適宜に変更可能である。以後、「ＲＡＭから○○を読み込む」旨の説明をした場合は、「ＲＡＭにおいて○○が格納されている所定の格納領域から○○を読み込む」ことを意味するとする。
【００９６】
〔ステップＳ３２ｓ〕
次に、指数算出部（３４１ｓ）が、ＲＡＭ（３５）から暗号文ｃ、秘密鍵ｋおよびｄを読み込み、ｒ＝ｃ−ｋｄなる演算を行って指数ｒを算出し、この算出した指数ｒをＲＡＭ（３５）の所定の格納領域に格納する。
なお、ここで指数ｒの算出方法は、鍵生成装置（１ｓ）における鍵生成処理のステップＳ１７ｓに対応しており、ナップザックｂｉ（１≦ｉ≦ｎ）をｂｉ＝ａｉ＋ｄなる演算をして算出した場合には、ｒ＝ｃ−ｋｄなる演算を行って指数ｒを算出するが、例えばナップザックｂｉ（１≦ｉ≦ｎ）をｂｉ＝ａｉ＋ｄ  ｍｏｄ  Πｊ＝１ｓ（Ｎ（τｊ）−１）を演算して算出した場合には、ｒ＝ｃ−ｋｄ  ｍｏｄ  Πｊ＝１ｓ（Ｎ（τｊ）−１）なる演算を行って指数ｒを算出することに留意しなければならない。
【００９７】
〔ステップＳ３３ｓ〕
次に、冪乗剰余演算部（３４２ｓ）が、ＲＡＭ（３５）から指数ｒ、秘密鍵νおよびｇを読み込み、ｕ＝ｇｒ  ｍｏｄ  νなる演算を行って冪乗剰余演算結果ｕを算出し、この算出した冪乗剰余演算結果ｕをＲＡＭ（３５）の所定の格納領域に格納する。
【００９８】
〔ステップＳ３４ｓ〕
次に、符号列再生部（３４３ｓ）が、ＲＡＭ（３５）から冪乗剰余演算結果ｕ、秘密鍵ｐ１，ｐ２，・・・，ｐｎを読み込み、各ｉ（１≦ｉ≦ｎ）について、冪乗剰余演算結果ｕを秘密鍵ｐｉで除し、冪乗剰余演算結果ｕが秘密鍵ｐｉで割り切れる場合にはｍｉ＝１とし、冪乗剰余演算結果ｕが秘密鍵ｐｉで割り切れない場合にはｍｉ＝０として、符号列（ビット列）ｍ＝（ｍ１，ｍ２，・・・，ｍｎ）を求める。そして、符号列再生部（３４３ｓ）は、求めた符号列（ビット列）ｍ＝（ｍ１，ｍ２，・・・，ｍｎ）をＲＡＭ（３５）の所定の格納領域に格納する。
【００９９】
ステップＳ３２〜Ｓ３４の処理について補足説明をする。
鍵生成処理のステップＳ１７ｓにおいて、ナップザックｂｉ（１≦ｉ≦ｎ）をｂｉ＝ａｉ＋ｄなる演算をして算出した場合に対応して、ステップＳ３２ｓにおいて、ｒ＝ｃ−ｋｄなる演算を行って指数ｒを算出した場合で説明すると、ｒ＝ｃ−ｋｄなる演算は、次のような演算であることを意味する。即ち、ｒ＝Σｉ＝１ｎｍｉｂｉ−ｋｄ＝Σｉ＝１ｎｍｉ（ａｉ＋ｄ）−ｋｄ＝Σｉ＝１ｎｍｉａｉ＋ｄ×Σｉ＝１ｎｍｉ−ｋｄ＝Σｉ＝１ｎｍｉａｉ＋ｋｄ−ｋｄ＝Σｉ＝１ｎｍｉａｉである（∵Σｉ＝１ｎｍｉ＝ｋ）。
従って冪乗剰余演算は、ｕ＝ｇｒ  ｍｏｄ  Ｎ＝ｇ＾Σｉ＝１ｎｍｉａｉ  ｍｏｄ  ν＝ｇ＾（ｍ１ａ１）×ｇ＾（ｍ２ａ２）×・・・×ｇ＾（ｍｎａｎ）  ｍｏｄ  νとなる。ここで式（１０）および秘密鍵集合｛ｐ１，ｐ２，・・・，ｐｎ｝のどの２つの元も互いに素であることに留意すれば、冪乗剰余演算結果ｕが秘密鍵ｐｉで割り切れる場合とは、冪乗剰余演算結果ｕがｇ＾ａｉを素因子として有していることに他ならず、さらに、ｍｉ（１≦ｉ≦ｎ）∈｛０，１｝であることに留意すれば、ｍｉ＝１であることが判明する。一方、冪乗剰余演算結果ｕが秘密鍵ｐｉで割り切れない場合とは、冪乗剰余演算結果ｕがｇ＾ａｉを素因子として有していないことに他ならず、さらに、ｍｉ（１≦ｉ≦ｎ）∈｛０，１｝であることに留意すれば、ｍｉ＝０であることが判明する。
【０１００】
〔ステップＳ３５ｓ〕
次に、復号化部（３４４ｓ）が、ＲＡＭ（３５）から符号列（ビット列）ｍ＝（ｍ１，ｍ２，・・・，ｍｎ）を読み込み、暗号化装置（２ｓ）における暗号化処理と対応した逆変換を行い（参考文献２参照。）、平文Ｍを復元してこれをＲＡＭ（３５）の所定の格納領域に格納する。
【０１０１】
［乗法型ナップザック暗号システムとその処理］
第２実施形態の乗法型ナップザック暗号システムは、システムを構成する物理的実体が鍵生成装置（１）→鍵生成装置（１ｓ）、暗号化装置（２）→暗号化装置（２ｓ）、復号化装置（３）→復号化装置（３ｓ）に変更（これは上記システムその１に相当する場合であり、上記システムその２に相当する場合も同様である。）となる以外は、第１実施形態と同様のシステム構成であり、また当該システムでの処理も第１実施形態と同様であるから、第１実施形態における乗法型ナップザック暗号システムおよびその処理の説明を援用し、第２実施形態における乗法型ナップザック暗号システムおよびその処理の説明を省略する（図１０〜図１３参照。）。
【０１０２】
＜第１実施形態と第２実施形態との相違について＞
○実装の容易性・演算速度について。
第１実施形態では、各処理に係わる集合が有理整数環であるため、各処理に係わる集合を代数体の整数環とする第２実施形態の場合に比して、既存の計算機を本発明の鍵生成装置などとして機能させることが比較的容易であり、また、比較的高速に演算処理が行える。
○安全性について。
第１実施形態の場合は、秘密鍵は（Ｎ，ｋ，ｇ，ｄ，ｐ１，ｐ２，・・・，ｐｎ）であるところ、公開鍵であるｂ１，ｂ２，・・・，ｂｎからＮおよびｄのビット長の上限を得ることができる。ここで、Ｎおよびｄのビット長から推測される秘密鍵の総数は有限である。従って、“理論的には”秘密鍵を推測できないわけではない（実際は、実時間で推測困難になるように合成数Ｎのビット長などを設定する。）。
第２実施形態の場合は、秘密鍵は（Ｋ，ν，ｇ，ｄ，ｐ１，ｐ２，・・・，ｐｎ）であるところ、公開鍵であるｂ１，ｂ２，・・・，ｂｎからイデアルνのノルムおよびｄのビット長の上限を得ることができる。しかし、代数体Ｋは、（次数ｆを固定したとしても）無限に構成することができ、単なる整数であるｂ１，ｂ２，・・・，ｂｎから代数体Ｋの情報を得ることはできない。このことは、代数体Ｋを秘密鍵に含めない場合でも同様である。代数体Ｋが不明であると、イデアルνやｐ１，ｐ２，・・・，ｐｎの決定が極めて困難であり、秘密鍵（Ｋ，ν，ｇ，ｄ，ｐ１，ｐ２，・・・，ｐｎ）を推測できる可能性は無いと言っても過言ではない。従って、第２実施形態の場合は、第１実施形態に比して安全性が高いものとなっている。
【０１０３】
＜上記各装置全般について＞
本発明である上記各装置は上述の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。また、上記各装置において説明した処理は、記載の順に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されるとしてもよい。
【０１０４】
また、上記各装置における処理機能をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することによって、上記各装置における処理機能がコンピュータ上で実現される。
【０１０５】
また、上記各装置は、異なるコンピュータとして独立に構成される場合はもちろん、例えば１つのコンピュータにおいて、鍵生成装置の有すべき機能の処理内容が記述されたプログラムと、復号化装置の有すべき機能の処理内容が記述されたプログラムとを有することによって、１つのコンピュータが鍵生成装置としても復号化装置としても機能するように、コンピュータを複合的に機能させることもできる。
【０１０６】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。具体的には、例えば、磁気記録装置として、ハードディスク装置、フレキシブルディスク、磁気テープ等を、光ディスクとして、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ（Random Access Memory）、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）等を、光磁気記録媒体として、ＭＯ（Magneto-Optical disc）等を、半導体メモリとしてＥＥＰ−ＲＯＭ（Electronically Erasable and Programmable-Read Only Memory）等を用いることができる。
【０１０７】
また、このプログラムの流通は、例えば、そのプログラムを記録したＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【０１０８】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記録媒体に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるＡＳＰ（Application Service Provider）型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの（コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等）を含むものとする。
【０１０９】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、上記各装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【産業上の利用可能性】
【０１１０】
本発明は、現在の計算機環境において実用的でありながら、量子計算機が実現した場合でも解読困難な公開鍵暗号であるから、量子計算機実現後も社会基盤の中枢であり続けると考えられる（量子通信路に比較して古典的な）インターネットのような通信網における公開鍵暗号として用いることができる。
【図面の簡単な説明】
【０１１１】
【図１】鍵生成装置（１）のハードウェア構成を例示した構成ブロック図。
【図２】鍵生成装置（１）における鍵（公開鍵、秘密鍵）生成の処理機能を示す機能ブロック図。
【図３】鍵生成装置（１）における鍵生成の処理フロー。
【図４】暗号化装置（２）のハードウェア構成を例示した構成ブロック図。
【図５】暗号化装置（２）における暗号文生成の処理機能を示す機能ブロック図。
【図６】暗号化装置（２）における暗号文生成の処理フロー。
【図７】復号化装置（３）のハードウェア構成を例示した構成ブロック図。
【図８】復号化装置（３）における平文復号の処理機能を示す機能ブロック図。
【図９】復号化装置（３）における平文復号の処理フロー。
【図１０】乗法型ナップザック暗号システム（１０００）のシステム構成を例示する図。
【図１１】乗法型ナップザック暗号システム（１０００）における乗法型ナップザック暗号復号方法の処理フロー。
【図１２】乗法型ナップザック暗号システム（１００１）のシステム構成を例示する図。
【図１３】乗法型ナップザック暗号システム（１００１）における乗法型ナップザック暗号復号方法の処理フロー。
【図１４】鍵生成装置（１ｓ）における鍵（公開鍵、秘密鍵）生成の処理機能を示す機能ブロック図。
【図１５】鍵生成装置（１ｓ）における鍵生成の処理フロー。
【図１６】復号化装置（３ｓ）における平文復号の処理機能を示す機能ブロック図。
【図１７】復号化装置（３ｓ）における平文復号の処理フロー。
【符号の説明】
【０１１２】
１        鍵生成装置
１ｓ      鍵生成装置
２        暗号化装置
３        復号化装置
３’      鍵生成装置兼復号化装置
３ｓ      復号化装置
４        公開鍵登録サーバ装置
５        ネットワーク
１４０    制御部
１４０ｓ  制御部
１４１    合成数算出部
１４２    生成元算出部
１４２ｓ  生成元算出部
１４３    秘密鍵集合算出部
１４３ｓ  秘密鍵集合算出部
１４４    ナップザック生成因子算出部
１４４ｓ  ナップザック生成因子算出部
１４５    乱数生成部
１４５ｓ  乱数生成部
１４６    ナップザック生成部
１４６ｓ  ナップザック生成部
２４１    符号変換部
２４２    暗号化部
３４１    指数算出部
３４１ｓ  指数算出部
３４２    冪乗剰余演算部
３４２ｓ  冪乗剰余演算部
３４３    符号再生部
３４３ｓ  符号再生部
３４４    復号化部
３４４ｓ  復号化部
１０００  乗法型ナップザック暗号システム
１００１  乗法型ナップザック暗号システム
【図１】
0004685621.tif 000014
【図２】
0004685621.tif 000015
【図３】
0004685621.tif 000016
【図４】
0004685621.tif 000017
【図５】
0004685621.tif 000018
【図６】
0004685621.tif 000019
【図７】
0004685621.tif 000020
【図８】
0004685621.tif 000021
【図９】
0004685621.tif 000022
【図１０】
0004685621.tif 000023
【図１１】
0004685621.tif 000024
【図１２】
0004685621.tif 000025
【図１３】
0004685621.tif 000026
【図１４】
0004685621.tif 000027
【図１５】
0004685621.tif 000028
【図１６】
0004685621.tif 000029
【図１７】
0004685621.tif 000030