(57)【特許請求の範囲】
【請求項１】
既知の素数ｑより大きい素数候補Ｎを算出して素数判定する素数算出装置であって、
既知の素数ｑ、生成すべき素数に対応し奇数の管理情報及び所定の検証値を記憶している情報記憶手段と、
乱数を生成する乱数生成手段と、
素数ｑ、前記管理情報及び前記検証値を読み出し、前記管理情報に前記乱数を乗じて乗算値Ｒを算出し、２×ｗ×素数ｑ＋１＝検証値  （ｍｏｄ  管理情報）を満たすｗについて、Ｎ＝２×（乗算値Ｒ＋ｗ）×素数ｑ＋１により、素数候補Ｎを算出する候補算出手段と、
算出された素数候補Ｎが素数であるか否かを判定する素数判定手段と、
素数であると判定される場合に、算出された素数候補Ｎを素数として出力する出力手段と
を備えることを特徴とする素数算出装置。
【請求項２】
前記情報記憶手段に記憶されている前記検証値は、１であり、
前記候補算出手段は、Ｎ＝２×乗算値Ｒ×素数ｑ＋１により、素数候補Ｎを算出する
ことを特徴とする請求項１に記載の素数算出装置。
【請求項３】
前記素数判定手段は、
前記素数候補Ｎに対して、２N-1 ＝１  ｍｏｄ  Ｎを満たすか否かを判定する第１判定部と、
前記第１判定部により満たすと判定される場合に、さらに、素数候補Ｎ及び乗算値Ｒに対して、２2R  ≠１  ｍｏｄ  Ｎを満たすか否かを判定し、満たすと判定するときに、素数候補Ｎが素数であると決定し、又はＧＣＤ（２2R  −１、Ｎ）＝１を満たすか否かを判定し、満たすと判定するときに、素数候補Ｎが素数であると決定する第２判定部と
を含むことを特徴とする請求項１に記載の素数算出装置。
【請求項４】
前記情報記憶手段は、さらに、既知の素数ｇ及び一意の発行識別子を記憶しており、
前記素数算出装置は、さらに、
前記素数ｇ及び発行識別子を用いて、一意に素数を生成する素数生成関数を施して、素数ｇｐを生成し、生成した素数ｇｐを出力する素数生成手段と、
生成した素数ｇｐを、前記管理情報として前記情報記憶手段に書き込む書込手段と
を含むことを特徴とする請求項１に記載の素数算出装置。
【請求項５】
前記素数生成手段は、
前記発行識別子と変数ｃとの結合体を生成し、
素数候補＝２×素数ｇ×ｆ（結合体）＋１  を算出し、
算出した素数候補が、素数であるか否かを判定し、素数であると判定される場合に、素数候補を、前記素数ｇｐとして出力し、
変数ｃは、０又は正整数である
ことを特徴とする請求項４に記載の素数算出装置。
【請求項６】
前記素数生成手段は、
生成した素数候補が、素数でないと判定される場合に、変数ｃに１の値を加算し、
前記発行識別子と、１の値が加算された変数ｃとの結合体を生成し、
素数候補＝２×素数ｇ×ｆ（結合体）＋１  を算出し、
算出した素数候補が、素数であるか否かを判定し、素数であると判定される場合に、素数候補を、前記素数ｇｐとして出力する
ことを特徴とする請求項５に記載の素数算出装置。
【請求項７】
前記素数算出装置は、さらに、
前記素数判定手段により素数であると判定されるまで、前記乱数生成手段、前記候補算出手段及び前記素数判定手段に対して、乱数の生成と、素数候補Ｎの算出と、前記判定とを繰り返すように制御する繰返制御手段
を含むことを特徴とする請求項１に記載の素数算出装置。
【請求項８】
前記素数算出装置は、さらに、
既知の素数ｐを記憶している前段素数記憶手段と、
乱数Ｒ’を算出する前段乱数算出手段と、
前記素数ｐ及び生成された前記乱数Ｒ’を用いて、Ｎ’＝２×乱数Ｒ’×素数ｐ＋１により、素数候補Ｎ’を算出する前段候補算出手段と、
算出された素数候補Ｎ’が素数であるか否かを判定する前段素数判定手段と、
素数であると判定される場合に、算出された素数候補Ｎ’を、前記素数ｑとして、前記情報記憶手段に書き込む前段書込手段と、
前記前段素数判定手段により素数であると判定されるまで、前記前段乱数算出手段、前記前段候補算出手段及び前記前段素数判定手段に対して、乱数Ｒ’の生成と、素数候補Ｎ’の算出と、前記判定とを繰り返すように制御する前段繰返制御手段
を含むことを特徴とする請求項７に記載の素数算出装置。
【請求項９】
前記素数算出装置は、ＲＳＡ暗号の公開鍵及び秘密鍵を生成する鍵生成装置であり、
前記素数算出装置は、さらに、
算出された素数Ｎを用いて、ＲＳＡ暗号の公開鍵を生成する公開鍵生成手段と、
生成された公開鍵を用いて、ＲＳＡ暗号の秘密鍵を生成する秘密鍵生成手段とを含む
ことを特徴とする請求項７に記載の素数算出装置。
【請求項１０】
前記公開鍵生成手段は、前記繰返制御手段に対して、新たに素数Ｎ’が得られるように指示し、前記素数Ｎ及び新たに得られた素数Ｎ’を用いて、ｎ＝素数Ｎ×素数Ｎ’により、数ｎを算出し、乱数ｅを生成し、
算出された数ｎと生成された乱数ｅとの組が前記公開鍵であり、
前記秘密鍵生成手段は、ｅ×ｄ＝１  ｍｏｄ  Ｌを満たすｄを算出し、
Ｌは、素数Ｎ−１と素数Ｎ’−１との最小公倍数であり、
算出されたｄが前記秘密鍵である
ことを特徴とする請求項９に記載の素数算出装置。
【請求項１１】
前記情報記憶手段は、さらに、前記検証値とは異なる別の検証値を記憶しており、
前記公開鍵生成手段は、前記繰返制御手段に対して、新たに素数Ｎ’が得られるように指示し、
前記候補算出手段は、Ｎ’＝２×乗算値Ｒ×素数ｑ＋前記別の検証値により、素数候補Ｎ’を算出し、
前記公開鍵生成手段は、前記素数Ｎ及び新たに得られた素数Ｎ’を用いて、ｎ＝素数Ｎ×素数Ｎ’により、数ｎを算出し、乱数ｅを生成し、
算出された数ｎと生成された乱数ｅとの組が前記公開鍵であり、
前記秘密鍵生成手段は、ｅ×ｄ＝１  ｍｏｄ  Ｌを満たすｄを算出し、
Ｌは、素数Ｎ−１と素数Ｎ’−１との最小公倍数であり、
算出されたｄが前記秘密鍵である
ことを特徴とする請求項９に記載の素数算出装置。
【請求項１２】
前記素数算出装置は、端末装置に対して、ＲＳＡの秘密鍵及び公開鍵を生成し、発行する鍵発行サーバ装置であり、
前記素数算出装置は、さらに、
生成した前記秘密鍵を、端末装置に対して出力する鍵出力手段と、
生成した前記公開鍵を、公開する公開手段とを含む
ことを特徴とする請求項９に記載の素数算出装置。
【請求項１３】
前記素数算出装置は、さらに、
前記端末装置を一意に識別する端末装置識別子を取得する識別子取得手段と、
取得した端末装置識別子を含む前記管理情報を生成する管理情報生成手段と、
生成した前記管理情報を前記情報記憶手段に書き込む書込手段と
含むことを特徴とする請求項１２に記載の素数算出装置。
【請求項１４】
前記素数算出装置は、さらに、
鍵発行サーバ装置としての当該素数算出装置を一意に識別するサーバ識別子を予め記憶しているサーバ識別子記憶手段を含み、
前記管理情報生成手段は、さらに、前記サーバ識別子記憶手段から前記サーバ識別子を読み出し、読み出したサーバ識別子をさらに含む前記管理情報を生成する
ことを特徴とする請求項１３に記載の素数算出装置。
【請求項１５】
請求項１の素数算出装置により出力された素数Ｎを検証する素数検証装置であって、
前記管理情報及び前記検証値を記憶している情報記憶手段と、
素数Ｎから前記検証値を減じて素数減算値を得る減算手段と、
得られた素数減算値が、前記管理情報で割り切れるか否かを判断する判断手段と、
割り切れると判断される場合に、前記素数Ｎの利用を許可し、割り切れないと判断する場合に、前記素数Ｎの利用を禁止する制御手段と
を備えることを特徴とする素数検証装置。
【請求項１６】
前記素数算出装置は、１である前記検証値を記憶しており、Ｎ＝２×乗算値Ｒ×素数ｑ＋１により、素数候補Ｎを算出し、
前記情報記憶手段に記憶されている前記検証値は、１であり、
前記減算手段は、素数Ｎから１を減じて減算値を得る
ことを特徴とする請求項１５に記載の素数検証装置。
【請求項１７】
前記素数算出装置は、さらに、既知の素数ｇ及び一意の発行識別子を記憶しており、前記素数ｇ及び発行識別子を用いて、一意に素数を生成する素数生成関数を施して、素数ｇｐを生成し、生成した素数ｇｐを出力し、生成した素数ｇｐを、前記管理情報として前記情報記憶手段に書き込み、
前記情報記憶手段は、さらに、前記素数ｇ及び前記発行識別子を記憶しており、
前記素数検証装置は、さらに、
前記素数ｇ及び発行識別子を用いて、一意に素数を生成する素数生成関数を施して、素数ｇｐを生成し、生成した素数ｇｐを出力する素数生成手段と、
生成した素数ｇｐを、前記管理情報として前記情報記憶手段に書き込む書込手段と
を含むことを特徴とする請求項１５に記載の素数検証装置。
【請求項１８】
前記素数算出装置は、前記発行識別子と変数ｃとの結合体を生成し、素数候補＝２×素数ｇ×ｆ（結合体）＋１  を算出し、算出した素数候補が、素数であるか否かを判定し、素数であると判定される場合に、素数候補を、前記素数ｇｐとして出力し、変数ｃは、０又は正整数であり、
前記素数生成手段は、
前記発行識別子と変数ｃとの結合体を生成し、
素数候補＝２×素数ｇ×ｆ（結合体）＋１  を算出し、
算出した素数候補が、素数であるか否かを判定し、素数であると判定される場合に、素数候補を、前記素数ｇｐとして出力する
ことを特徴とする請求項１７に記載の素数検証装置。
【請求項１９】
前記素数算出装置は、生成した素数候補が、素数でないと判定される場合に、変数ｃに１の値を加算し、前記発行識別子と、１の値が加算された変数ｃとの結合体を生成し、素数候補＝２×素数ｇ×ｆ（結合体）＋１  を算出し、算出した素数候補が、素数であるか否かを判定し、素数であると判定される場合に、素数候補を、前記素数ｇｐとして出力し、
前記素数生成手段は、
生成した素数候補が、素数でないと判定される場合に、変数ｃに１の値を加算し、
前記発行識別子と、１の値が加算された変数ｃとの結合体を生成し、
素数候補＝２×素数ｇ×ｆ（結合体）＋１  を算出し、
算出した素数候補が、素数であるか否かを判定し、素数であると判定される場合に、素数候補を、前記素数ｇｐとして出力する
ことを特徴とする請求項１８に記載の素数検証装置。
【請求項２０】
前記素数算出装置は、ＲＳＡ暗号の公開鍵及び秘密鍵を生成する鍵生成装置であり、さらに、算出された素数Ｎを用いて、ＲＳＡ暗号の公開鍵を生成し、生成された公開鍵を用いて、ＲＳＡ暗号の秘密鍵を生成し、
前記素数検証装置は、前記公開鍵を検証する鍵検証装置であり、
前記素数検証装置は、さらに、
前記公開鍵を取得する取得手段と、
取得した前記公開鍵の正当性を検証する検証手段と
を含むことを特徴とする請求項１５に記載の素数検証装置。
【請求項２１】
前記素数算出装置は、新たに素数Ｎ’を得、前記素数Ｎ及び新たに得られた素数Ｎ’を用いて、ｎ＝素数Ｎ×素数Ｎ’により、数ｎを算出し、乱数ｅを生成し、算出された数ｎと生成された乱数ｅとの組が前記公開鍵であり、ｅ×ｄ＝１  ｍｏｄ  Ｌを満たすｄを算出し、Ｌは、素数Ｎ−１と素数Ｎ’−１との最小公倍数であり、算出されたｄが前記秘密鍵であり、
前記取得手段は、前記公開鍵として、数ｎと乱数ｅとの組を取得し、
前記検証手段は、
取得した数ｎから、前記検証値の二乗値を減じて公開鍵減算値を得る減算部と、
得られた素数減算値が、前記管理情報で割り切れるか否かを判断する判断部と、
割り切れると判断される場合に、前記公開鍵の出力を許可し、割り切れないと判断する場合に、前記公開鍵Ｎの出力を禁止する制御手段と
を含むことを特徴とする請求項２０に記載の素数検証装置。
【請求項２２】
前記素数算出装置は、さらに、前記検証値とは異なる別の検証値を記憶しており、Ｎ’＝２×乗算値Ｒ×素数ｑ＋前記別の検証値により、素数候補Ｎ’を算出することにより、新たに素数Ｎ’を得、前記素数Ｎ及び新たに得られた素数Ｎ’を用いて、ｎ＝素数Ｎ×素数Ｎ’により、数ｎを算出し、乱数ｅを生成し、算出された数ｎと生成された乱数ｅとの組が前記公開鍵であり、ｅ×ｄ＝１  ｍｏｄ  Ｌを満たすｄを算出し、Ｌは、素数Ｎ−１と素数Ｎ’−１との最小公倍数であり、算出されたｄが前記秘密鍵であり、
前記情報記憶手段は、前記別の検証値を記憶しており、
前記取得手段は、前記公開鍵として、数ｎと乱数ｅとの組を取得し、
前記検証手段は、
前記検証値と前記別の検証値を乗じて、乗算値を得、取得した数ｎから、前記乗算値を減じて公開鍵減算値を得る減算部と、
得られた素数減算値が、前記管理情報で割り切れるか否かを判断する判断部と、
割り切れると判断される場合に、前記公開鍵の出力を許可し、割り切れないと判断する場合に、前記公開鍵Ｎの出力を禁止する制御部と
を含むことを特徴とする請求項２０に記載の素数検証装置。
【請求項２３】
前記素数検証装置は、鍵検証サーバ装置であり、
前記取得手段は、端末装置に対してＲＳＡの公開鍵及び秘密鍵を生成する鍵発行サーバ装置から、前記公開鍵を取得する
ことを特徴とする請求項２０に記載の素数検証装置。
【請求項２４】
前記情報記憶手段に記憶されている前記管理情報は、前記端末装置を一意に識別する端末装置識別子を含み、
前記判断手段は、得られた素数減算値が、前記端末装置識別子を含む前記管理情報で割り切れるか否かを判断する
ことを特徴とする請求項２３に記載の素数検証装置。
【請求項２５】
前記情報記憶手段に記憶されている前記管理情報は、鍵発行サーバ装置としての前記素数算出装置を一意に識別するサーバ識別子を含み、
前記判断手段は、得られた素数減算値が、前記サーバ識別子を含む前記管理情報で割り切れるか否かを判断する
ことを特徴とする請求項２４に記載の素数検証装置。
【請求項２６】
前記素数検証装置は、公開鍵証明書発行サーバ装置であって、さらに、
前記検証手段により、前記公開鍵が正当であると認定された場合に、少なくとも前記公開鍵を含む公開鍵情報にデジタル署名を施して、署名データを生成し、少なくとも前記署名データ及び前記公開鍵を含む公開鍵証明書を生成する証明書生成手段と、
生成した公開鍵証明書を出力する証明書出力手段と
を含むことを特徴とする請求項２３に記載の素数検証装置。
【請求項２７】
端末装置と、前記端末装置に対して、ＲＳＡの秘密鍵及び公開鍵を生成し、発行する鍵発行サーバ装置とから構成される鍵発行システムであって、
前記鍵発行サーバ装置は、
既知の素数ｑ、生成すべき素数に対応する管理情報及び所定の検証値を記憶している情報記憶手段と、
乱数を生成する乱数生成手段と、
素数ｑ、前記管理情報及び前記検証値を読み出し、前記管理情報に前記乱数を乗じて乗算値Ｒを算出し、Ｎ＝２×乗算値Ｒ×素数ｑ＋検証値により、素数候補Ｎを算出する候補算出手段と、
算出された素数候補Ｎが素数であるか否かを判定する素数判定手段と、
素数であると判定される場合に、算出された素数候補Ｎを素数として出力する出力手段と、
前記素数判定手段により素数であると判定されるまで、前記乱数生成手段、前記候補算出手段及び前記素数判定手段に対して、乱数の生成と、素数候補Ｎの算出と、前記判定とを繰り返すように制御する繰返制御手段と、
出力された素数Ｎを用いて、ＲＳＡ暗号の公開鍵を生成する公開鍵生成手段と、
生成された公開鍵を用いて、ＲＳＡ暗号の秘密鍵を生成する秘密鍵生成手段と、
生成した前記秘密鍵を、端末装置に対して出力する鍵出力手段と、
生成した前記公開鍵を、公開する公開手段とを含み、
前記端末装置は、前記秘密鍵を取得して記憶し、記憶している秘密鍵を利用する
ことを特徴とする鍵発行システム。
【請求項２８】
前記鍵発行サーバ装置は、新たに素数Ｎ’を得、前記素数Ｎ及び新たに得られた素数Ｎ’を用いて、ｎ＝素数Ｎ×素数Ｎ’により、数ｎを算出し、乱数ｅを生成し、算出された数ｎと生成された乱数ｅとの組が前記公開鍵であり、ｅ×ｄ＝１  ｍｏｄ  Ｌを満たすｄを算出し、Ｌは、素数Ｎ−１と素数Ｎ’−１との最小公倍数であり、算出されたｄが前記秘密鍵であり、
前記鍵発行システムは、さらに、
前記鍵発行サーバ装置から、前記公開鍵として、数ｎと乱数ｅとの組を取得する取得手段と、
取得した前記公開鍵の正当性を検証する検証手段とを備える鍵検証サーバ装置を含み、
前記検証手段は、
取得した数ｎから、前記検証値の二乗値を減じて公開鍵減算値を得る減算部と、
得られた素数減算値が、前記管理情報で割り切れるか否かを判断する判断部と、
割り切れると判断される場合に、前記公開鍵の出力を許可し、割り切れないと判断する場合に、前記公開鍵Ｎの出力を禁止する制御手段と
を含むことを特徴とする請求項２７に記載の鍵発行システム。
【請求項２９】
乱数生成手段、候補算出手段、素数判定手段、出力手段及び既知の素数ｑ、生成すべき素数に対応し奇数の管理情報及び所定の検証値を記憶している情報記憶手段を備え、既知の素数ｑより大きい素数候補Ｎを算出して素数判定する素数算出装置で用いられる素数算出方法であって、
前記乱数生成手段により、乱数を生成する乱数生成ステップと、
前記候補算出手段により、素数ｑ、前記管理情報及び前記検証値を読み出し、前記管理情報に前記乱数を乗じて乗算値Ｒを算出し、２×ｗ×素数ｑ＋１＝検証値  （ｍｏｄ  管理情報）を満たすｗについて、Ｎ＝２×（乗算値Ｒ＋ｗ）×素数ｑ＋１により、素数候補Ｎを算出する候補算出ステップと、
前記素数判定手段により、算出された素数候補Ｎが素数であるか否かを判定する素数判定ステップと、
前記出力手段により、素数であると判定される場合に、算出された素数候補Ｎを素数として出力する出力ステップと
を含むことを特徴とする素数算出方法。
【請求項３０】
乱数生成手段、候補算出手段、素数判定手段、出力手段及び既知の素数ｑ、生成すべき素数に対応し奇数の管理情報及び所定の検証値を記憶している情報記憶手段を備え、既知の素数ｑより大きい素数候補Ｎを算出して素数判定する素数算出装置で用いられる素数算出用のコンピュータプログラムであって、
コンピュータである前記素数算出装置に、
前記乱数生成手段により、乱数を生成する乱数生成ステップと、
前記候補算出手段により、素数ｑ、前記管理情報及び前記検証値を読み出し、前記管理情報に前記乱数を乗じて乗算値Ｒを算出し、２×ｗ×素数ｑ＋１＝検証値  （ｍｏｄ  管理情報）を満たすｗについて、Ｎ＝２×（乗算値Ｒ＋ｗ）×素数ｑ＋１により、素数候補Ｎを算出する候補算出ステップと、
前記素数判定手段により、算出された素数候補Ｎが素数であるか否かを判定する素数判定ステップと、
前記出力手段により、素数であると判定される場合に、算出された素数候補Ｎを素数として出力する出力ステップと
を実行させることを特徴とするコンピュータプログラム。
【請求項３１】
前記コンピュータプログラムは、
コンピュータ読み取り可能な記録媒体に記録されている
ことを特徴とする請求項３０に記載のコンピュータプログラム。
【請求項３２】
前記コンピュータプログラムは、
搬送波に乗せられて送信される
ことを特徴とする請求項３０に記載のコンピュータプログラム。
【請求項３３】
請求項１の素数算出装置により出力された素数Ｎを検証し、減算手段、判断手段、制御手段及び前記管理情報及び前記検証値を記憶している情報記憶手段を備える素数検証装置で用いられる素数検証方法であって、
前記減算手段により、素数Ｎから前記検証値を減じて素数減算値を得る減算ステップと、
前記判断手段により、得られた素数減算値が、前記管理情報で割り切れるか否かを判断する判断ステップと、
前記制御手段により、前記判断ステップにおいて割り切れると判断される場合に、前記素数Ｎの利用を許可し、割り切れないと判断する場合に、前記素数Ｎの利用を禁止する制御ステップと
を含むことを特徴とする素数検証方法。
【請求項３４】
請求項１の素数算出装置により出力された素数Ｎを検証し、減算手段、判断手段、制御手段及び前記管理情報及び前記検証値を記憶している情報記憶手段を備える素数検証装置で用いられる素数検証用のコンピュータプログラムであって、
コンピュータである前記素数検証装置に、
前記減算手段により、素数Ｎから前記検証値を減じて素数減算値を得る減算ステップと、
前記判断手段により、得られた素数減算値が、前記管理情報で割り切れるか否かを判断する判断ステップと、
前記制御手段により、前記判断ステップにおいて割り切れると判断される場合に、前記素数Ｎの利用を許可し、割り切れないと判断する場合に、前記素数Ｎの利用を禁止する制御ステップと
を実行させることを特徴とするコンピュータプログラム。
【請求項３５】
前記コンピュータプログラムは、
コンピュータ読み取り可能な記録媒体に記録されている
ことを特徴とする請求項３４に記載のコンピュータプログラム。
【請求項３６】
前記コンピュータプログラムは、
搬送波に乗せられて送信される
ことを特徴とする請求項３４に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、素因数分解の困難さを安全性の根拠として情報のセキュリティを保持する技術に関する。
【背景技術】
【０００２】
近年、コンピュータ技術及び通信技術に基づくデータ通信が広く普及してきており、このデータ通信においては、秘密通信方式やデジタル署名方式が用いられる。ここで、秘密通信方式とは、特定の通信相手以外に通信内容を漏らすことなく通信を行う方式である。またデジタル署名方式とは、通信相手に通信内容の正当性を示したり、発信者の身元を証明したりする通信方式である。
【０００３】
１．公開鍵暗号方式
これらの秘密通信方式又はデジタル署名方式においては、公開鍵暗号方式とよばれる暗号方式が用いられる。公開鍵暗号方式を用いる秘密通信では、暗号化鍵と復号化鍵とが異なり、復号化鍵は秘密にするが、暗号化鍵は公開する。秘密にする復号化鍵を秘密鍵と呼び、公開する暗号化鍵を公開鍵と呼ぶ。通信相手が多数のとき、共通鍵暗号では通信相手間で鍵をもつ必要があるが、公開鍵暗号では通信相手が一つの固有の鍵をもつだけで通信可能になるため、通信相手が増えても、共通鍵暗号より鍵の数が少なくてよい。このように、公開鍵暗号は多数の通信相手と通信を行うのに適しており、不可欠な基盤技術である。
【０００４】
公開鍵暗号方式の１種であるＲＳＡ暗号方式では、整数の素因数分解問題を解くことが、計算量の上で困難であることを安全性の根拠としている。素因数分解問題とは、ｐ，ｑを素数とし、整数ｎ＝ｐ×ｑとするとき、整数ｎに対して、素数ｐ，ｑを求める問題である。ここで、×は通常の乗算である。一般にｐ，ｑが１０２４ビットの数のように大きい場合は、素因数分解問題が困難である。それにより、ＲＳＡ暗号方式の公開鍵から秘密鍵を求めることや、秘密鍵を持たないユーザが暗号文から平文を求めることが、困難になる。なお、素因数分解問題については、非特許文献１の１４４〜１５１ページに詳しく述べられている。
【０００５】
（素因数分解問題を応用するＲＳＡ暗号方式）
ここで、素因数分解問題を応用するＲＳＡ暗号方式について説明する。
（１）鍵の生成
次に示すようにして公開鍵及び秘密鍵を計算する。
・ランダムに大きい素数ｐ，ｑを選択し、その積ｎ＝ｐ×ｑを計算する。
【０００６】
・（ｐ−１）及び（ｑ−１）の最小公倍数Ｌ＝ＬＣＭ（ｐ−１，ｑ−１）を計算する。
・Ｌと互いに素でＬより小さい自然数ｅをランダムに選ぶ。
１≦ｅ≦Ｌ−１、ＧＣＤ（ｅ，Ｌ）＝１
ここで、ＧＣＤ（ｅ，Ｌ）は、ｅとＬの最大公約数を示している。
・ｅ×ｄ＝１    ｍｏｄ    Ｌを満たすｄを計算する。ＧＣＤ（ｅ，Ｌ）＝１より、このようなｄは必ず存在する。このようにして、得られた整数ｅ及び整数ｎが、公開鍵である。また、整数ｄが、秘密鍵である。ここで、ｘ  ｍｏｄ  ｙは、ｘをｙで割った余りを示す。
【０００７】
（２）暗号文の生成
公開鍵である整数ｅ及び整数ｎを用いて、平文ｍに暗号演算を施して暗号文ｃを計算する。
ｃ＝ｍ＾ｅ      ｍｏｄ    ｎ
なお、この明細書において、演算子＾は、べき乗を示す。例えば、Ａ＾ｘは、ｘ＞０のときはＡをｘ回乗じたものを示す。
【０００８】
（３）復号文の生成
秘密鍵である整数ｄを用いて、暗号文ｃに復号演算を施して復号文ｍ'を計算する。
ｍ'＝ｃ＾ｄ      ｍｏｄ    ｎ
なお、
ｍ'＝ｃ＾ｄ      ｍｏｄ    ｎ
＝（ｍ＾ｅ  ）＾ｄ      ｍｏｄ    ｎ
＝ｍ＾（ｅ×ｄ    ｍｏｄ    Ｌ）    ｍｏｄ    ｎ
＝ｍ＾１      ｍｏｄ    ｎ
＝ｍ    ｍｏｄ    ｎ
であるので、復号文ｍ'は、平文ｍと一致する。
【０００９】
また、ＲＳＡ暗号については、非特許文献２の１１０〜１１３ページに詳しく説明されている。
上記に示した素因数分解を応用したＲＳＡ暗号における公開鍵の生成のステップにおいて、素数生成が行われる。素数生成については、非特許文献３の１４５〜１５４ページに詳しく説明されている。素数生成方法には、確率的素数生成法と確定的素数生成方法がある。確率的素数生成法により生成される素数は、「素数である確率が高い」数であり、１００％素数であるとは限らない。一方、確定的素数生成方法は、確実に素数である数を生成する。確率的素数生成方法及び確定的素数生成方法については、非特許文献２に詳しく説明されている。以下では、確定的素数生成方法について説明する。
【００１０】
２．従来例１−確定的素数生成方法
確定的に素数を生成することができるＭａｕｒｅｒ法による確定的素数生成方法について説明する。ここで、Ｍａｕｒｅｒ法については、非特許文献３の１５２〜１５３ページに詳しく説明されている。
前記確定的素数生成方法では、次に示すステップを繰り返すことにより、素数を生成する。あらかじめビットサイズｌｅｎｑの素数ｑが与えられている。
【００１１】
（ステップ１）（ｌｅｎｑ−１）ビットの乱数Ｒを選択する。なお、乱数Ｒの先頭ビットは、必ず１となるようにする。
（ステップ２）数Ｎを以下の式により計算する。
Ｎ＝２×ｑ×Ｒ＋１
（ステップ３）数Ｎが素数であるか否かを、次に示す第１判定及び第２判定がともに、成立する場合に、素数と判定する。他の場合に、素数でないと判定する。
（第１判定）    ２＾（Ｎ−１）  ＝１    ｍｏｄ    Ｎ
（第２判定）    ＧＣＤ（２＾（２Ｒ）−１、Ｎ）＝１
素数であると判定される場合には、数Ｎを素数として出力する。素数でないと判定される場合には、ステップ１へ戻って、素数が出力されるまで、処理を繰り返す。
【００１２】
ステップ３で述べられている判定方法は、Ｐｏｃｋｌｉｎｇｔｏｎの素数判定法とよばれ、非特許文献３の１４４ページに詳しく述べられている。Ｐｏｃｋｌｉｎｇｔｏｎの素数判定法では、Ｎ＝２×ｑ×Ｒ＋１のｑが素数であり、第１判定及び第２判定の結果が真であれば、必ず、Ｎが素数になる。そのため、確定的に素数であることを判定でき、確定的な素数生成が可能になる。
【００１３】
このようにして、Ｍａｕｒｅｒ法による確定的素数生成方法では、サイズｌｅｎｑの素数ｑを基にして、サイズ２×ｌｅｎｑの素数Ｎを生成する。従って、Ｍａｕｒｅｒ法による確定的素数生成方法を用いて所定長の素数を生成する場合には、前記所定長以下の素数の生成を繰り返し行う。例えば、５１２ビット長の素数を生成する場合には、あらかじめ与えられた８ビットの素数を基にして１６ビットの素数を生成する。次に、生成した１６ビットの素数を基にして３２ビットの素数を生成する。次に、生成した３２ビットの素数を基にして６４ビットの素数を生成する。以下同様の素数生成を繰り返して、５１２ビットの素数を生成する。
【００１４】
なお、前記第２判定を次の判定に代えてもよい。
（第３判定）    ２＾（２Ｒ）≠１    ｍｏｄ    Ｎ
上記第３判定方法は、非特許文献４に詳しく述べられている。以降、こちらの判定方法を使用していく。
３．複数の鍵発行サーバをもつ鍵発行システム
公開鍵暗号の鍵発行システムでは、ユーザが鍵を生成する場合や、鍵発行サーバによりユーザに鍵を発行する場合がある。鍵発行サーバにより鍵を発行する場合、ユーザに鍵を発行するサーバは一台であることが多い。しかし、処理の負荷を軽減するために、鍵発行システムは、複数台の鍵管理サーバを備え、複数台の鍵管理サーバのそれぞれにおいて、鍵を発行することもある。
【特許文献１】特開２００３−５６４４号公報
【非特許文献１】岡本龍明、太田和夫共編、「暗号・ゼロ知識問題・数論」、共立出版、１９９０
【非特許文献２】岡本龍明、山本博資、"現代暗号"、産業図書（１９９７年）
【非特許文献３】Ａ．Ｊ．  Ｍｅｎｅｚｅｓ，  Ｐ．Ｃ．  ｖａｎ  Ｏｏｒｓｃｈｏｔ，  Ｓ．Ａ．  Ｖａｎｓｔｏｎｅ，  “Ｈａｎｄｂｏｏｋ  ｏｆ  ａｐｐｌｉｅｄ  ｃｒｙｐｔｏｇｒａｐｈｙ"，ＣＲＣ  Ｐｒｅｓ ｓ，  １９９７
【非特許文献４】岡本  栄司、「暗号理論入門」、共立出版、１９９３、２１ページ
【非特許文献５】Ｈｅｎｒｉ  Ｃｏｈｅｎ，  “Ａ  Ｃｏｕｒｓｅ  ｉｎ  Ｃｏｍｐｕｔａｔｉｏｎａｌ  Ａｌｇｅｂｒａｉｃ  Ｎｕｍｂｅｒ  Ｔｈｅｏｒｙ"，  ＧＴＭ  １３８，  Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ， １９９３
【発明の開示】
【発明が解決しようとする課題】
【００１５】
複数台の鍵発行サーバを用いた鍵発行システムでは、第１の鍵発行サーバと、第２の鍵発行サーバにおいて、それぞれ発行したＲＳＡ鍵を互いにチェックすることはない。なぜなら、発行したＲＳＡ鍵を、他の鍵発行サーバへ公開すると、セキュリティ上問題があるからである。このため、偶然、第１及び第２の鍵発行サーバが、第１のユーザ及び第２のユーザのために、同じ公開鍵と同じ秘密鍵を生成することが起こりうる。
【００１６】
このため、暗号方式を利用する際に、セキュリティが確保できないという問題がある。
例えば、第３のユーザが、第１のユーザのための前記公開鍵を用いて、第１のユーザに対して、暗号文を生成して送付すると、第１のユーザは、当然、自身の秘密鍵を用いて、暗号文を復号できるが、第２のユーザも自身の秘密鍵を用いて、前記暗号文を復号できてしまう。
【課題を解決するための手段】
【００１７】
このような問題を解決するためには、ＲＳＡの公開鍵は２つの異なる素数の積により演算されるので、どの装置により生成されたものであるかが特定できる素数が生成できれば、他の鍵発行サーバが、誤って同じ素数を生成したとしても、その素数を排除することができる。
そこで、本発明は、生成源を確認できる素数を算出する素数算出装置、前記確認を行う素数検証装置、鍵発行システム、素数算出方法、素数検証方法及びコンピュータプログラムを提供することを目的とする。
【００１８】
上記目的を達成するために、本発明は、既知の素数ｑより大きい素数候補Ｎを算出して素数判定する素数算出装置であって、既知の素数ｑ、生成すべき素数に対応し奇数の管理情報及び所定の検証値を記憶している情報記憶手段と、乱数を生成する乱数生成手段と、素数ｑ、前記管理情報及び前記検証値を読み出し、前記管理情報に前記乱数を乗じて乗算値Ｒを算出し、２×ｗ×素数ｑ＋１＝検証値  （ｍｏｄ  管理情報）を満たすｗについて、Ｎ＝２×（乗算値Ｒ＋ｗ）×素数ｑ＋１により、素数候補Ｎを算出する候補算出手段と、算出された素数候補Ｎが素数であるか否かを判定する素数判定手段と、素数であると判定される場合に、算出された素数候補Ｎを素数として出力する出力手段とを備えることを特徴とする。
【発明の効果】
【００１９】
上記の構成によると、素数算出装置は、生成すべき素数に対応する管理情報に乱数を乗じて乗算値Ｒを算出し、２×ｗ×素数ｑ＋１＝検証値  （ｍｏｄ  管理情報）を満たすｗについて、Ｎ＝２×（乗算値Ｒ＋ｗ）×素数ｑ＋１により、素数候補Ｎを算出するので、算出された素数候補Ｎが素数である場合には、素数Ｎ−検証値が、前記管理情報により割り切れるかどうかを判断することにより、素数の生成源を確認できるという効果がある。
【００２０】
なお、素数の生成源とは、当該素数を算出した素数算出装置を示す概念であることは言うまでもないが、さらに当該素数算出装置に関連する他の装置やグループをも示す概念でもある。
ここで、前記情報記憶手段に記憶されている前記検証値は、１であり、前記候補算出手段は、Ｎ＝２×乗算値Ｒ×素数ｑ＋１により、素数候補Ｎを算出するとしてもよい。
【００２１】
この構成によると、Ｎ＝２×乗算値Ｒ×素数ｑ＋１により、素数候補Ｎを算出するので、素数Ｎ−１が、前記管理情報により割り切れるかどうかを判断することにより、素数の生成源を確認できるという効果がある。
ここで、前記素数判定手段は、前記素数候補Ｎに対して、２N-1 ＝１  ｍｏｄ  Ｎを満たすか否かを判定する第１判定部と、前記第１判定部により満たすと判定される場合に、さらに、素数候補Ｎ及び乗算値Ｒに対して、２2R  ≠１  ｍｏｄ  Ｎを満たすか否かを判定し、満たすと判定するときに、素数候補Ｎが素数であると決定し、又はＧＣＤ（２2R  −１、Ｎ）＝１を満たすか否かを判定し、満たすと判定するときに、素数候補Ｎが素数であると決定する第２判定部とを含むとしてもよい。
【００２２】
この構成によると、生成した素数候補の素数判定が確実に行える。
ここで、前記情報記憶手段は、さらに、既知の素数ｇ及び一意の発行識別子を記憶しており、前記素数算出装置は、さらに、前記素数ｇ及び発行識別子を用いて、一意に素数を生成する素数生成関数を施して、素数ｇｐを生成し、生成した素数ｇｐを出力する素数生成手段と、生成した素数ｇｐを、前記管理情報として前記情報記憶手段に書き込む書込手段とを含むように構成してもよい。
【００２３】
また、前記素数生成手段は、前記発行識別子と変数ｃとの結合体を生成し、素数候補＝２×素数ｇ×ｆ（結合体）＋１  を算出し、算出した素数候補が、素数であるか否かを判定し、素数であると判定される場合に、素数候補を、前記素数ｇｐとして出力し、変数ｃは、０又は正整数であるとしてもよい。
また、前記素数生成手段は、生成した素数候補が、素数でないと判定される場合に、変数ｃに１の値を加算し、前記発行識別子と、１の値が加算された変数ｃとの結合体を生成し、素数候補＝２×素数ｇ×ｆ（結合体）＋１  を算出し、算出した素数候補が、素数であるか否かを判定し、素数であると判定される場合に、素数候補を、前記素数ｇｐとして出力するとしてもよい。
【００２４】
これらの構成によると、一意の管理情報を生成することができる。
ここで、前記素数算出装置は、さらに、前記素数判定手段により素数であると判定されるまで、前記乱数生成手段、前記候補算出手段及び前記素数判定手段に対して、乱数の生成と、素数候補Ｎの算出と、前記判定とを繰り返すように制御する繰返制御手段を含むように構成してもよい。
【００２５】
この構成によると、素数が確実に算出できる。
ここで、前記素数算出装置は、さらに、既知の素数ｐを記憶している前段素数記憶手段と、乱数Ｒ’を算出する前段乱数算出手段と、前記素数ｐ及び生成された前記乱数Ｒ’を用いて、Ｎ’＝２×乱数Ｒ’×素数ｐ＋１により、素数候補Ｎ’を算出する前段候補算出手段と、算出された素数候補Ｎ’が素数であるか否かを判定する前段素数判定手段と、素数であると判定される場合に、算出された素数候補Ｎ’を、前記素数ｑとして、前記情報記憶手段に書き込む前段書込手段と、前記前段素数判定手段により素数であると判定されるまで、前記前段乱数算出手段、前記前段候補算出手段及び前記前段素数判定手段に対して、乱数Ｒ’の生成と、素数候補Ｎ’の算出と、前記判定とを繰り返すように制御する前段繰返制御手段を含むように構成してもよい。
【００２６】
この構成によると、既知の素数の２倍の素数Ｎ’を生成し、さらにその２倍の素数Ｎを生成することができる。
ここで、前記素数算出装置は、ＲＳＡ暗号の公開鍵及び秘密鍵を生成する鍵生成装置であり、前記素数算出装置は、さらに、算出された素数Ｎを用いて、ＲＳＡ暗号の公開鍵を生成する公開鍵生成手段と、生成された公開鍵を用いて、ＲＳＡ暗号の秘密鍵を生成する秘密鍵生成手段とを含むように構成してもよい。
【００２７】
この構成によると、生成源を確認できる素数Ｎを用いたＲＳＡの公開鍵及び秘密鍵が生成できる。
ここで、前記公開鍵生成手段は、前記繰返制御手段に対して、新たに素数Ｎ’が得られるように指示し、前記素数Ｎ及び新たに得られた素数Ｎ’を用いて、ｎ＝素数Ｎ×素数Ｎ’により、数ｎを算出し、乱数ｅを生成し、算出された数ｎと生成された乱数ｅとの組が前記公開鍵であり、前記秘密鍵生成手段は、ｅ×ｄ＝１  ｍｏｄ  Ｌを満たすｄを算出し、Ｌは、素数Ｎ−１と素数Ｎ’−１との最小公倍数であり、算出されたｄが前記秘密鍵であるとしてもよい。
【００２８】
この構成によると、ｎ＝素数Ｎ×素数Ｎ’により、公開鍵ｎを算出するので、
（公開鍵ｎ−（検証値×検証値））が、前記管理情報により割り切れるかどうかを判断することにより、公開鍵の生成源を確認できるような、前記公開鍵を生成することができるという効果がある。
なお、公開鍵の生成源とは、当該公開鍵を算出した鍵生成装置を示す概念であることは言うまでもないが、さらに当該鍵生成装置に関連する他の装置やグループをも示す概念でもある。例えば、生成した秘密鍵を割り当てる端末装置をも示す概念である。
【００２９】
ここで、前記情報記憶手段は、さらに、前記検証値とは異なる別の検証値を記憶しており、前記公開鍵生成手段は、前記繰返制御手段に対して、新たに素数Ｎ’が得られるように指示し、前記候補算出手段は、Ｎ’＝２×乗算値Ｒ×素数ｑ＋前記別の検証値により、素数候補Ｎ’を算出し、前記公開鍵生成手段は、前記素数Ｎ及び新たに得られた素数Ｎ’を用いて、ｎ＝素数Ｎ×素数Ｎ’により、数ｎを算出し、乱数ｅを生成し、算出された数ｎと生成された乱数ｅとの組が前記公開鍵であり、前記秘密鍵生成手段は、ｅ×ｄ＝１  ｍｏｄ  Ｌを満たすｄを算出し、Ｌは、素数Ｎ−１と素数Ｎ’−１との最小公倍数であり、算出されたｄが前記秘密鍵であるとしてもよい。
【００３０】
この構成によると、検証値を用いて素数Ｎを生成し、別の検証値を用いて素数Ｎ’を生成し、ｎ＝素数Ｎ×素数Ｎ’により、公開鍵ｎを算出するので、（公開鍵ｎ−（検証値×別の検証値））が、前記管理情報により割り切れるかどうかを判断することにより、公開鍵の生成源を確認できるような、前記公開鍵を生成することができるという効果がある。
ここで、前記素数算出装置は、端末装置に対して、ＲＳＡの秘密鍵及び公開鍵を生成し、発行する鍵発行サーバ装置であり、前記素数算出装置は、さらに、生成した前記秘密鍵を、端末装置に対して出力する鍵出力手段と、生成した前記公開鍵を、公開する公開手段とを含むように構成してもよい。
【００３１】
この構成によると、端末装置のために生成した秘密鍵を出力するので、端末装置は、秘密鍵を取得して利用することができる。
ここで、前記素数算出装置は、さらに、前記端末装置を一意に識別する端末装置識別子を取得する識別子取得手段と、取得した端末装置識別子を含む前記管理情報を生成する管理情報生成手段と、生成した前記管理情報を前記情報記憶手段に書き込む書込手段と含むように構成してもよい。
【００３２】
管理情報は、端末装置を一意に識別する端末装置識別子を含むので、公開鍵の生成源として、前記端末装置を確認できるように、前記公開鍵を生成することができるという効果がある。
ここで、前記素数算出装置は、さらに、鍵発行サーバ装置としての当該素数算出装置を一意に識別するサーバ識別子を予め記憶しているサーバ識別子記憶手段を含み、前記管理情報生成手段は、さらに、前記サーバ識別子記憶手段から前記サーバ識別子を読み出し、読み出したサーバ識別子をさらに含む前記管理情報を生成するように構成してもよい。
【００３３】
管理情報は、鍵発行サーバ装置を一意に識別するサーバ識別子を含むので、公開鍵の生成源として、前記鍵発行サーバ装置を確認できるように、前記公開鍵を生成することができるという効果がある。
また、本発明は、前記素数算出装置により出力された素数Ｎを検証する素数検証装置であって、前記管理情報及び前記検証値を記憶している情報記憶手段と、素数Ｎから前記検証値を減じて素数減算値を得る減算手段と、得られた素数減算値が、前記管理情報で割り切れるか否かを判断する判断手段と、割り切れると判断される場合に、前記素数Ｎの利用を許可し、割り切れないと判断する場合に、前記素数Ｎの利用を禁止する制御手段とを備えることを特徴とする。
【００３４】
この構成によると、素数Ｎ−検証値が、管理情報により割り切れるかどうかを判断することにより、素数の生成源を確認できるという効果がある。
ここで、前記素数算出装置は、１である前記検証値を記憶しており、Ｎ＝２×乗算値Ｒ×素数ｑ＋１により、素数候補Ｎを算出し、前記情報記憶手段に記憶されている前記検証値は、１であり、前記減算手段は、素数Ｎから１を減じて減算値を得るとしてもよい。
【００３５】
この構成によると、素数Ｎ−１が、管理情報により割り切れるかどうかを判断することにより、素数の生成源を確認できるという効果がある。
ここで、前記素数算出装置は、さらに、既知の素数ｇ及び一意の発行識別子を記憶しており、前記素数ｇ及び発行識別子を用いて、一意に素数を生成する素数生成関数を施して、素数ｇｐを生成し、生成した素数ｇｐを出力し、生成した素数ｇｐを、前記管理情報として前記情報記憶手段に書き込み、前記情報記憶手段は、さらに、前記素数ｇ及び前記発行識別子を記憶しており、前記素数検証装置は、さらに、前記素数ｇ及び発行識別子を用いて、一意に素数を生成する素数生成関数を施して、素数ｇｐを生成し、生成した素数ｇｐを出力する素数生成手段と、生成した素数ｇｐを、前記管理情報として前記情報記憶手段に書き込む書込手段とを含むように構成してもよい。
【００３６】
前記素数算出装置は、前記発行識別子と変数ｃとの結合体を生成し、素数候補＝２×素数ｇ×ｆ（結合体）＋１  を算出し、算出した素数候補が、素数であるか否かを判定し、素数であると判定される場合に、素数候補を、前記素数ｇｐとして出力し、変数ｃは、０又は正整数であり、前記素数生成手段は、前記発行識別子と変数ｃとの結合体を生成し、素数候補＝２×素数ｇ×ｆ（結合体）＋１  を算出し、算出した素数候補が、素数であるか否かを判定し、素数であると判定される場合に、素数候補を、前記素数ｇｐとして出力するように構成してもよい。
【００３７】
前記素数算出装置は、生成した素数候補が、素数でないと判定される場合に、変数ｃに１の値を加算し、前記発行識別子と、１の値が加算された変数ｃとの結合体を生成し、素数候補＝２×素数ｇ×ｆ（結合体）＋１  を算出し、算出した素数候補が、素数であるか否かを判定し、素数であると判定される場合に、素数候補を、前記素数ｇｐとして出力し、前記素数生成手段は、生成した素数候補が、素数でないと判定される場合に、変数ｃに１の値を加算し、前記発行識別子と、１の値が加算された変数ｃとの結合体を生成し、素数候補＝２×素数ｇ×ｆ（結合体）＋１  を算出し、算出した素数候補が、素数であるか否かを判定し、素数であると判定される場合に、素数候補を、前記素数ｇｐとして出力するように構成してもよい。
【００３８】
この構成によると、一意の管理情報を生成することができる。
ここで、前記素数算出装置は、ＲＳＡ暗号の公開鍵及び秘密鍵を生成する鍵生成装置であり、さらに、算出された素数Ｎを用いて、ＲＳＡ暗号の公開鍵を生成し、生成された公開鍵を用いて、ＲＳＡ暗号の秘密鍵を生成し、前記素数検証装置は、前記公開鍵を検証する鍵検証装置であり、前記素数検証装置は、さらに、前記公開鍵を取得する取得手段と、取得した前記公開鍵の正当性を検証する検証手段とを含むように構成してもよい。
【００３９】
この構成によると、ＲＳＡの公開鍵の生成源を確認できる。
ここで、前記素数算出装置は、新たに素数Ｎ’を得、前記素数Ｎ及び新たに得られた素数Ｎ’を用いて、ｎ＝素数Ｎ×素数Ｎ’により、数ｎを算出し、乱数ｅを生成し、算出された数ｎと生成された乱数ｅとの組が前記公開鍵であり、ｅ×ｄ＝１  ｍｏｄ  Ｌを満たすｄを算出し、Ｌは、素数Ｎ−１と素数Ｎ’−１との最小公倍数であり、算出されたｄが前記秘密鍵であり、前記取得手段は、前記公開鍵として、数ｎと乱数ｅとの組を取得し、前記検証手段は、取得した数ｎから、前記検証値の二乗値を減じて公開鍵減算値を得る減算部と、得られた素数減算値が、前記管理情報で割り切れるか否かを判断する判断部と、割り切れると判断される場合に、前記公開鍵の出力を許可し、割り切れないと判断する場合に、前記公開鍵Ｎの出力を禁止する制御手段とを含むように構成してもよい。
【００４０】
この構成によると、ｎ＝素数Ｎ×素数Ｎ’により、公開鍵ｎを算出するので、（公開鍵ｎ−（検証値×検証値））が、前記管理情報により割り切れるかどうかを判断することにより、公開鍵の生成源を確認できるという効果がある。
ここで、前記素数算出装置は、さらに、前記検証値とは異なる別の検証値を記憶しており、Ｎ’＝２×乗算値Ｒ×素数ｑ＋前記別の検証値により、素数候補Ｎ’を算出することにより、新たに素数Ｎ’を得、前記素数Ｎ及び新たに得られた素数Ｎ’を用いて、ｎ＝素数Ｎ×素数Ｎ’により、数ｎを算出し、乱数ｅを生成し、算出された数ｎと生成された乱数ｅとの組が前記公開鍵であり、ｅ×ｄ＝１  ｍｏｄ  Ｌを満たすｄを算出し、Ｌは、素数Ｎ−１と素数Ｎ’−１との最小公倍数であり、算出されたｄが前記秘密鍵であり、前記情報記憶手段は、前記別の検証値を記憶しており、前記取得手段は、前記公開鍵として、数ｎと乱数ｅとの組を取得し、前記検証手段は、前記検証値と前記別の検証値を乗じて、乗算値を得、取得した数ｎから、前記乗算値を減じて公開鍵減算値を得る減算部と、得られた素数減算値が、前記管理情報で割り切れるか否かを判断する判断部と、割り切れると判断される場合に、前記公開鍵の出力を許可し、割り切れないと判断する場合に、前記公開鍵Ｎの出力を禁止する制御部とを含むように構成してもよい。
【００４１】
この構成によると、検証値を用いて素数Ｎを生成し、別の検証値を用いて素数Ｎ’を生成し、ｎ＝素数Ｎ×素数Ｎ’により、公開鍵ｎを算出するので、（公開鍵ｎ−（検証値×別の検証値））が、前記管理情報により割り切れるかどうかを判断することにより、公開鍵の生成源を確認できるという効果がある。
ここで、前記情報記憶手段に記憶されている前記管理情報は、前記端末装置を一意に識別する端末装置識別子を含み、前記判断手段は、得られた素数減算値が、前記端末装置識別子を含む前記管理情報で割り切れるか否かを判断するとしてもよい。
【００４２】
管理情報は、端末装置を一意に識別する端末装置識別子を含むので、公開鍵の生成源として、前記端末装置を確認できるという効果がある。
ここで、前記情報記憶手段に記憶されている前記管理情報は、鍵発行サーバ装置としての前記素数算出装置を一意に識別するサーバ識別子を含み、前記判断手段は、得られた素数減算値が、前記サーバ識別子を含む前記管理情報で割り切れるか否かを判断するとしてもよい。
【００４３】
管理情報は、鍵発行サーバ装置を一意に識別するサーバ識別子を含むので、公開鍵の生成源として、前記鍵発行サーバ装置を確認できるという効果がある。
ここで、前記素数検証装置は、公開鍵証明書発行サーバ装置であって、さらに、前記検証手段により、前記公開鍵が正当であると認定された場合に、少なくとも前記公開鍵を含む公開鍵情報にデジタル署名を施して、署名データを生成し、少なくとも前記署名データ及び前記公開鍵を含む公開鍵証明書を生成する証明書生成手段と、生成した公開鍵証明書を出力する証明書出力手段とを含むように構成してもよい。
【００４４】
この構成によると、前記公開鍵が正当であると認定された場合に、公開鍵証明書を生成して出力するので、公開鍵の生成源を確認できるような、公開鍵証明書を生成することができる。
【発明を実施するための最良の形態】
【００４５】
１．第１の実施の形態
本発明に係る第１の実施の形態としての鍵発行システム１について、説明する。
１．１  鍵発行システム１の概要
鍵発行システム１は、図１に示すように、鍵発行サーバ１００、１０１、１０２と、証明書発行サーバ２００と、端末装置３００、３０１、・・・、３０２、３０３、・・・、３０４、３０５、・・・、３０６とから構成されている。端末装置の台数は、例えば１０００台である。
【００４６】
鍵発行サーバ１００、１０１及び１０２は、それぞれ異なる会社にて管理されている。端末装置３００、３０１、・・・、３０２は、鍵発行サーバ１００に対して、鍵の発行要求し、端末装置３０３、・・・、３０４は、鍵発行サーバ１０１に対して、鍵の発行要求し、端末装置３０５、・・・、３０６は、鍵発行サーバ１０２に対して、鍵の発行要求をする。なお、端末装置３００、３０１、・・・、３０２は、鍵発行サーバ１００との間には、安全な通信経路が確立されているものとする。また、端末装置３０３、・・・、３０４と、鍵発行サーバ１０１との間、及び端末装置３０５、・・・、３０６と、鍵発行サーバ１０２との間においても、同様に、安全な通信経路が確立されているものとする。
【００４７】
また、鍵発行サーバ１００、１０１、１０２と、証明書発行サーバ２００との間においても、同様に、安全な通信経路が確立されているものとする。
なお、以下においては、鍵発行サーバ１００、証明書発行サーバ２００、及び端末装置３００を用いて、鍵発行システム１の概要を説明する。
鍵発行サーバ１００は、端末装置３００より鍵の発行要求を受け取ると、ＲＳＡ暗号における秘密鍵及び公開鍵を生成し、証明書発行サーバ２００に対して、生成した公開鍵に対する公開鍵証明書の発行要求をする。なお、ここで、生成する各鍵の鍵長は、１０２４ビットとする。
【００４８】
証明書発行サーバ２００は、鍵発行サーバ１００より証明書の発行要求を受け取ると、公開鍵証明書を発行して、発行した公開鍵証明書を鍵発行サーバ１００へ送信する。
鍵発行サーバ１００は、証明書発行サーバ２００より公開鍵証明書を受け取ると、受け取った公開鍵証明書と、生成した秘密鍵とを、端末装置３００へ送信する。
端末装置３００は、公開鍵証明書と、秘密鍵とを、鍵発行サーバ１００より受け取ると、受け取った公開鍵証明書と、秘密鍵とを記憶する。
【００４９】
以降、例えば、端末装置４００のユーザは、先ず、鍵発行サーバ１００より、端末装置３００の公開鍵証明書を入手、又は端末装置３００より公開鍵証明書を入手し、証明書発行サーバ２００が有する公開鍵を用いて、公開鍵証明書の正当性を確認し、正当な公開鍵証明書であると判断する場合に、入手した公開鍵証明書を、端末装置４００にて記憶する。端末装置４００は、記憶している公開鍵証明書に含まれる公開鍵を用いて、端末装置３００へ送信する電子メールを暗号化して、暗号化された電子メールを端末装置３００へ送信する。
【００５０】
端末装置３００は、端末装置４００より暗号化された電子メールを受信すると、記憶している秘密鍵を用いて、暗号化された電子メールを復号して、復号された電子メールを表示する。
これにより、端末装置３００と端末装置４００との間では、安全にデータのやりとりができるようになる。
【００５１】
なお、端末装置３０１、・・・、３０２は、端末装置３００と同様であるため、説明は省略する。また、鍵発行サーバ１０１、及び１０２は、鍵発行サーバ１００と同様であるため、説明は省略する。
以降の説明において、各端末装置の代表として端末装置３００を、各鍵発行サーバの代表として鍵発行サーバ１００を用いる。
【００５２】
１．２  鍵発行サーバ１００の構成
鍵発行サーバ１００は、図２にて示すように、識別子格納部１１０、秘密鍵格納部１１１、公開鍵格納部１１２、証明書格納部１１３、制御部１１４、識別子生成部１１５、素数生成部１１６、鍵判定部１１７、鍵生成部１１８、情報取得部１１９、受信部１２０及び送信部１２１から構成されている。
【００５３】
鍵発行サーバ１００は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレィユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、鍵発行サーバ１００は、その機能を達成する。
【００５４】
なお、鍵発行サーバ１０１、及び１０２は、鍵発行サーバ１００と同様の構成であるため、説明は省略する。
（１）識別子格納部１１０
識別子格納部１１０は、ビットサイズが１２６ビット以下である発行識別子情報を記憶するための領域を有している。発行識別子情報のビットサイズは、例えば、６４ビットである。
【００５５】
（２）秘密鍵格納部１１１
秘密鍵格納部１１１は、秘密鍵生成の際に用いられる２つの素数を記憶するための素数格納領域と、鍵生成部１１８にて生成された秘密鍵を記憶するための秘密鍵格納領域とを有している。
（３）公開鍵格納部１１２
公開鍵格納部１１２は、鍵生成部１１８にて生成された公開鍵を記憶するための領域を有している。
【００５６】
（４）証明書格納部１１３
証明書格納部１１３は、証明書発行サーバにて発行された公開鍵証明書を記憶する領域を有している。
（５）制御部１１４
制御部１１４は、図２に示すように、サーバ識別子記憶領域１３０と、端末情報記憶領域１３１とを有している。
【００５７】
サーバ識別子記憶領域１３０は、当該サーバを識別するサーバ識別子を予め記憶している。例えば、鍵発行サーバ１００は、ＳＩＤＡを、鍵発行サーバ１０１は、ＳＩＤＢを、鍵発行サーバ１０２は、ＳＩＤＣを記憶している。なお、以降では、鍵発行サーバ１００のサーバサーバ識別子を「ＳＩＤ」として説明する。ここでは、サーバ識別子のビットサイズを３１ビットとする。
【００５８】
端末情報記憶領域１３１は、鍵発行の要求のあった端末装置を識別する端末識別子を記憶する領域を有している。ここで、端末識別子は、例えば、端末装置のシリアル番号である。ここでは、シリアル番号のビットサイズを３２ビットする。
制御部１１４は、端末装置３００から受信部１２０を介して、鍵の発行要求を示す鍵発行依頼情報と、端末装置３００の端末識別子「ＴＩＤ」とを受け取ると、受け取った端末識別子「ＴＩＤ」を端末情報記憶領域１３１へ書き込む。制御部１１４は、発行識別子情報の生成命令と、受け取った端末識別子「ＴＩＤ」とを識別子生成部１１５へ出力する。
【００５９】
制御部１１４は、証明書発行サーバ２００から受信部１２０を介して、公開鍵証明書「Ｃｅｒｔ」を受け取ると、受け取った公開鍵証明書「Ｃｅｒｔ」を証明書格納部１１３へ書き込む。制御部１１４は、秘密鍵及び公開鍵証明書を、鍵の発行要求のあった端末装置３００へ配布の処理を開始する配布開始命令を情報取得部１１９へ出力する。
（６）識別子生成部１１５
識別子生成部１１５は、制御部１１４から発行識別子情報の生成命令と、端末識別子「ＴＩＤ」とを受け取ると、サーバ識別子記憶領域にて記憶されているサーバ識別子「ＳＩＤ」を取得する。
【００６０】
識別子生成部１１５は、取得したサーバ識別子「ＳＩＤ」と、受け取った端末識別子「ＴＩＤ」と数「１」とから、発行識別子情報「ＩＤＩ＝ＳＩＤ｜｜ＴＩＤ｜｜１」を生成する。ここで、記号「｜｜」はビットまたはバイト連結である。発行識別子情報「ＩＤＩ」の最下位ビットを「１」とすることにより、発行識別子情報「ＩＤＩ」は、常に奇数となり、そのビットサイズは、６４ビットとなる。
【００６１】
識別子生成部１１５は、生成した発行識別子情報「ＩＤＩ」を識別子格納部１１０へ書き込み、素数生成部１１６へ、素数の生成開始命令を出力する。
（７）素数生成部１１６
素数生成部１１６は、図３に示すように、繰返制御部１３２及び素数情報生成部１３３とを有している。
【００６２】
素数生成部１１６は、８ビットの素数から５１２ビットの素数を生成し、生成した５１２ビットの素数を鍵判定部１１７へ出力する。
＜繰返制御部１３２＞
繰返制御部１３２は、８ビットからなる素数とその素数のビットサイズ（つまり「８」）とを予め記憶している初期値記憶領域と、素数情報生成部１３３から受け取った素数を一時的に記憶する一時記憶領域とを有している。
【００６３】
繰返制御部１３２は、図３に示すように、素数情報生成部１３３の動作の繰返回数をカウントする繰返カウンタ１３５と、鍵判定部１１７へ出力した素数の個数、つまり生成した５１２ビットの素数の出力回数をカウントする出力カウンタ１３６とを有している。なお、繰返カウンタ１３５及び出力カウンタ１３６の初期値は、それぞれ「1」である。
繰返制御部１３２は、図４に示す制御情報テーブルＴ１００を有している。制御情報テーブルＴ１００は、回数と制御情報とからなる組を１以上格納している。回数は、繰返カウンタ１３５の値に対応する。制御情報は、素数情報生成部１３３にて生成する素数の生成方法の種別を示す。
【００６４】
繰返制御部１３２は、識別子生成部１１５から素数の生成開始命令を受け取ると、素数情報生成部１３３が素数を生成するよう制御する。素数情報生成部１３３から素数を受け取ると、繰返カウンタ１３５及び出力カウンタ１３６のそれぞれの値に基づいて、再度、素数情報生成部１３３へ素数生成の命令、及び受け取った素数を鍵判定部１１７へ出力の何れかを行う。
【００６５】
以下に、その動作について説明する。
繰返制御部１３２は、識別子生成部１１５から素数の生成開始命令を受け取ると、繰返カウンタ１３５及び出力カウンタ１３６を、それぞれ「１」に設定する。
繰返制御部１３２は、素数情報生成部１３３から、素数を受け取ると、繰返カウンタ１３５の値に  「１」を加算し、加算結果が、７であるか否かを判断する。
【００６６】
加算結果が７であると判断する場合には、繰返制御部１３２は、出力カウンタ１３６の値が、１であるか否かを判断する。１であると判断する場合には、繰返制御部１３２は、受け取った素数を素数「ｐ１」として、鍵判定部１１７へ出力し、出力カウンタ１３６の値に「１」を加算し、繰返カウンタ１３５の値に「１」を設定する。１でない、つまり２以上であると判断する場合には、繰返制御部１３２は、受け取った素数を素数「ｐ２」として、素数「ｐ２」と判定開始命令を鍵判定部１１７へ出力する。
【００６７】
加算結果が７でないと判断する場合には、受け取った素数のビットサイズを算出し、繰返制御部１３２は、受け取った素数と、算出したビットサイズとを、一時記憶領域に一時的に記憶する。
繰返制御部１３２は、素数の生成開始命令を受け取り、繰返カウンタ１３５及び出力カウンタ１３６のそれぞれの値に「１」を加算した後、素数情報生成部１３３から受け取った素数とそのビットサイズとを一時的に記憶した後、及び出力カウンタ１３６に「１」を加算し、且つ繰返カウンタ１３５の値を「１」に設定した後の何れかの場合において、繰返制御部１３２は、以下の動作を行う。
【００６８】
繰返制御部１３２は、繰返カウンタ１３５の値が、１であるか否かを判断する。１であると判断する場合には、初期値記憶領域より８ビットの素数とそのビットサイズを読み出し、１でないと判断する場合には、一時記憶領域よりビットサイズ「８×（２＾（ｎ−１））」と、その素数とを読み出す。つまり、繰返制御部１３２は、繰返カウンタ１３５の値が、１でないと判断する場合には、一時記憶領域より、直前に一時的に記憶した素数とそのビットサイズとを読み出す。ここで、「ｎ」は、繰返カウンタの値である。これにより、繰返制御部１３２は、一時記憶領域より、前回生成した素数及びそのビットサイズを読み出す。例えば、繰返カウンタ１３５に値が「２」である場合には、繰返制御部１３２は、「１６」ビットからなる素数を読み出し、繰返カウンタ１３５に値が「３」である場合には、「３１」ビットからなる素数を読み出す。つまり、繰返カウンタ１３５の値が「２」から「６」までの間、順に、「１６」ビットからなる素数、「３２」ビットからなる素数、「６４」ビットからなる素数、「１２８」ビットからなる素数、及び「２５６」ビットからなる素数を読み出すことになる。
【００６９】
繰返カウンタ１３５の値に対応する制御情報を制御情報テーブルＴ１００より読み出し、読み出した制御情報が、「情報Ｃ」であるか否かを判断する。
「情報Ｃ」であると判断する場合には、繰返制御部１３２は、読み出した素数及びそのビットサイズと、制御情報とからなる第１情報を生成し、生成した第１情報を、素数情報生成部１３３へ出力する。
【００７０】
「情報Ｃ」でないと判断する場合には、繰返制御部１３２は、識別子格納部１１０より発行識別情報「ＩＤＩ」を取得し、取得した発行識別子情報「ＩＤＩ」のビットサイズ「ｌｅｎＩＤＩ」を算出し、読み出した素数及びそのビットサイズと、制御情報と、発行識別子情報「ＩＤＩ」及びそのビットサイズ「ｌｅｎＩＤＩ」とからなる第２情報を生成し、生成した第２情報を、素数情報生成部１３３へ出力する。
【００７１】
また、繰返制御部１３２は、鍵判定部１１７より素数を再度生成する旨の再生成命令を受け取ると、出力カウンタ１３６の値に「１」を加算し、且つ繰返カウンタ１３５の値を「１」に設定し、繰返カウンタ１３５の値が、１であるか否かの判断を行う動作以降を行う。
＜素数情報生成部１３３＞
素数情報生成部１３３は、図５に示すように、情報制御部１４０、乱数生成部１４１、素数候補生成部１４２、第１素数判定部１４３及び第２素数判定部１４４から構成されている。
【００７２】
素数情報生成部１３３は、繰返制御部１３２から受け取った素数のビットサイズが２倍のビットサイズからなる素数を生成する。例えば、８ビットからなる素数を受け取った場合には、１６ビットからなる素数を生成し、１６ビットからなる素数を受け取った場合には、３２ビットからなる素数を生成する。
なお、以下の説明において、繰返制御部１３２から受け取る素数を素数「ｑ」、そのビットサイズを「ｌｅｎｑ」として、各構成要素について説明する。
【００７３】
＜情報制御部１４０＞
情報制御部１４０は、第１情報及び第２情報を記憶するための情報記憶領域を有している。
情報制御部１４０は、証明書発行サーバ２００により割り当てられ、且つ制御情報「情報Ａ」に基づいて素数を生成する際に用いる第１検証値「ｃ１１」及び第２検証値「ｃ１２」を予め記憶している検証値記憶領域を有している。
【００７４】
情報制御部１４０は、繰返制御部１３２から、素数「ｑ」と、素数のビットサイズ「ｌｅｎｑ」と、制御情報とからなる第１情報を受け取ると、受け取った第１情報を情報記憶領域へ書き込む。つまり、素数「ｑ」と、素数のビットサイズ「ｌｅｎｑ」と、制御情報（この場合、「情報Ｃ」）とを書き込む。
情報制御部１４０は、繰返制御部１３２から、素数「ｑ」と、素数のビットサイズ「ｌｅｎｑ」と、制御情報と、発行識別子情報「ＩＤＩ」と、そのビットサイズ「ｌｅｎＩＤＩ」とからなる第２情報を受け取ると、受け取った第２情報を情報記憶領域へ書き込む。つまり、素数「ｑ」と、素数のビットサイズ「ｌｅｎｑ」と、制御情報、発行識別子情報「ＩＤＩ」と、そのビットサイズ「ｌｅｎＩＤＩ」とを書き込む。
【００７５】
情報制御部１４０は、受け取った情報の書き込み後、乱数の生成の指示を示す第１生成指示を、乱数生成部１４１へ出力する。
情報制御部１４０は、第２素数判定部１４４より、素数を受け取ると、受け取った素数を繰返制御部１３２へ出力する。
情報制御部１４０は、素数候補生成部１４２から出力カウンタ１３６の値を読み出す旨の回数読出命令を受け取ると、繰返制御部１３２の出力カウンタ１３６の値を読み出す。情報制御部１４０は、読み出した値を、素数候補生成部１４２へ出力する。
【００７６】
＜乱数生成部１４１＞
乱数生成部１４１は、乱数の生成の指示を示す第１生成指示を、情報制御部１４０から受け取ると、情報制御部１４０の情報記憶領域にて記憶されている制御情報を読み出す。乱数生成部１４１は、読み出した制御情報が「情報Ｃ」であるか否かを判断する。
「情報Ｃ」であると判断する場合には、乱数生成部１４１は、情報制御部１４０の情報記憶領域にて記憶されている「ｌｅｎｑ」を読み出し、（ｌｅｎｑ−１）ビットからなる乱数「Ｒ１」を生成し、生成した乱数「Ｒ１」と読み出した制御情報とを素数候補生成部１４２へ出力する。ここで、乱数「Ｒ１」の最上位ビットは１とする。乱数生成方法は、非特許文献２が詳しい。
【００７７】
「情報Ｃ」でないと判断する場合には、乱数生成部１４１は、情報制御部１４０の情報記憶領域にて記憶されている「ｌｅｎｑ」及び「ｌｅｎＩＤＩ」を読み出し、（ｌｅｎｑ−ｌｅｎＩＤＩ−１）ビットからなる乱数「Ｒ１」を生成し、生成した乱数「Ｒ１」と読み出した制御情報とを素数候補生成部１４２へ出力する。ここで、乱数「Ｒ１」の最上位ビットは１とする。
【００７８】
また、乱数生成部１４１は、第１素数判定部１４３及び第２素数判定部１４４の何れかから、再度乱数を生成する旨の第２生成指示を受け付けると、制御情報を情報記憶領域より読み出し、上記の動作を行う。
＜素数候補生成部１４２＞
素数候補生成部１４２は、生成された情報を記憶する生成情報記憶領域と、単射である関数「ｆ」を予め記憶している関数記憶領域とを有している。ここで、関数「ｆ」は、例えば、ｆ（Ｘ｜｜Ｙ）＝Ｅｎｃ（Ｋ、Ｘ｜｜Ｙ）である。Ｅｎｃ（Ｋ、Ｘ｜｜Ｙ）は鍵Ｘを用いたときの（Ｘ｜｜Ｙ）の共通鍵暗号による暗号文である。共通鍵暗号の暗号化関数は一般的に全単射である。また、記号「｜｜」はビットまたはバイト連結である。暗号化関数「Ｅｎｃ（Ｋ、Ｘ｜｜Ｙ）」の一例は、「Ｅｎｃ（Ｋ、Ｘ｜｜Ｙ）＝Ｋ  ＸＯＲ  Ｘ｜｜Ｙ」である。なお、共通暗号の一例は、ＤＥＳであり、ＤＥＳを用いる場合には、鍵長は１２８ビットとなる。このとき、素数候補生成部１４２は、所定の鍵「Ｋ」を記憶している。
【００７９】
素数候補生成部１４２は、乱数生成部１４１より、乱数「Ｒ１」と制御情報とを受け取ると、受け取った制御情報が「情報Ｃ」であるか否かの判断をする。
「情報Ｃ」であると判断する場合には、素数候補生成部１４２は、情報制御部１４０の情報記憶領域より素数「ｑ」を読み出す。素数候補生成部１４２は、読み出した素数「ｑ」と乱数生成部１４１より受け取った乱数「Ｒ１」とを用いて、数「Ｎ＝２×Ｒ１×ｑ＋１」を生成する。このとき生成した数  「Ｎ」が素数候補となる。
【００８０】
素数候補生成部１４２は、生成した数「Ｎ」のビットサイズ「ｌｅｎＮ」が「ｌｅｎｑ」と一致するか否かを判断し、一致すると判断する場合には、素数候補生成部１４２は、生成した数「Ｎ」を第１素数判定部１４３へ出力し、受け取った乱数「Ｒ１」を、「Ｒ」として生成情報記憶領域に記憶する。
一致しないと判断する場合には、素数候補生成部１４２は、乱数生成部１４１より受け取った乱数  「Ｒ１」に２を掛けて、その結果を「Ｒ１」として、再度、上記の動作を行い、数「Ｎ＝２×Ｒ１×ｑ＋１」を生成する。
【００８１】
制御情報が「情報Ｃ」でないと判断する場合には、素数候補生成部１４２は、情報制御部１４０の情報記憶領域より素数「ｑ」及び発行識別子情報「ＩＤＩ」を読み出す。素数候補生成部１４２は、制御情報が「情報Ｂ」であるか否かを判断する。
「情報Ｂ」であると判断する場合には、素数候補生成部１４２は、受け取った乱数「Ｒ１」と読み出した発行識別子情報「ＩＤＩ」とから、結合値「ＩＤＩ｜｜Ｒ１」を生成し、生成した結合値「ＩＤＩ｜｜Ｒ１」と関数記憶領域にて記憶している関数「ｆ」とを用いて、数「Ｒ＝ｆ（ＩＤＩ｜｜Ｒ１）」を生成する。素数候補生成部１４２は、生成した数「Ｒ」と読み出した素数「ｑ」とを用いて、数「Ｎ＝２×Ｒ×ｑ＋１」を生成する。このとき生成した数「Ｎ」が素数候補となる。
【００８２】
素数候補生成部１４２は、生成した数「Ｎ」のビットサイズ「ｌｅｎＮ」が「２×ｌｅｎｑ」であるか否かを判断する。
「２×ｌｅｎｑ」であると判断する場合には、素数候補生成部１４２は、生成した数「Ｎ」を第１素数判定部１４３へ出力し、生成した数「Ｒ」を生成情報記憶領域に記憶する。
【００８３】
「２×ｌｅｎｑ」でないと判断する場合には、素数候補生成部１４２は、乱数生成部１４１より受け取った乱数「Ｒ１」に２を掛けて、その結果を「Ｒ１」として、再度、数「Ｒ」及び「Ｎ」を生成する。
「情報Ｂ」でないと判断する場合には、素数候補生成部１４２は、受け取った乱数「Ｒ１」と読み出した発行識別子情報「ＩＤＩ」とを用いて、数「Ｒ＝ＩＤＩ×Ｒ１」を生成する。素数候補生成部１４２は、回数読出命令を情報制御部１４０へ出力し、情報制御部１４０から、出力カウンタ１３６の値を受け取る。素数候補生成部１４２は、出力カウンタ１３６の値が「１」であるか否かを判断する。
【００８４】
出力回数が「１」であると判断する場合には、素数候補生成部１４２は、情報制御部１４０の検証値記憶領域より第１検証値「ｃ１１」を読み出す。
出力回数が「１」でない、つまり「２」以上であると判断する場合には、素数候補生成部１４２は、情報制御部１４０の検証値記憶領域より第２検証値「ｃ１２」を読み出す。
なお、第１検証値「ｃ１１」を読み出した場合の動作と、第２検証値「ｃ１２」を読み出した場合の動作とは、同じであるため、以下においては、検証値「ｃ」として説明する。
【００８５】
素数候補生成部１４２は、読み出した素数「ｑ」、発行識別子情報「ＩＤＩ」、検証値「ｃ」及び生成した数「Ｒ」とを用いて、数「Ｎ＝２×（Ｒ＋ｗ）×ｑ＋１」を生成する。このとき生成した数「Ｎ」が素数候補となる。
ここで、「ｗ」は「２×ｗ×ｑ＋１＝ｃ  ｍｏｄ  ＩＤＩ、０≦ｗ＜ＩＤＩ」を満たす数である。  「ｗ」は、「ｗ＝（ｃ−１）×ｍ  ｍｏｄ  ＩＤＩ」を計算することにより求める。「ｍ」は「（２×ｑ）×ｍ＝１  ｍｏｄ  ＩＤＩ」を満たす数である。上述したように、発行識別子情報「ＩＤＩ」が奇数、すなわち、「ＧＣＤ（ＩＤＩ、２）＝１」であり、「ＩＤＩ＜ｑ」であるため、「ｍ」は計算可能である。計算方法については、非特許文献５が詳しい。なお、以降において、第１検証値「ｃ１１」を用いた場合の「ｗ」を「ｗ１」と表記、及び第２検証値を用いた場合の「ｗ」を「ｗ２」と表記する。
【００８６】
素数候補生成部１４２は、素数「ｑ」のビットサイズ「ｌｅｎｑ」を、情報制御部１４０の情報記憶領域より読み出し、生成した数「Ｎ」のビットサイズが「２×ｌｅｎｑ」であるか否かを判断する。
「２×ｌｅｎｑ」であると判断する場合には、素数候補生成部１４２は、生成した数「Ｎ」を第１素数判定部１４３へ出力し、生成した数「Ｒ」を生成情報記憶領域に記憶する。
【００８７】
「２×ｌｅｎｑ」でないと判断する場合には、素数候補生成部１４２は、乱数生成部１４１より受け取った乱数「Ｒ１」に２を掛けて、その結果を「Ｒ１」として、再度、数「Ｒ」及び「Ｎ」を生成する。
＜第１素数判定部１４３＞
第１素数判定部１４３は、数「Ｎ」を素数候補生成部１４２より受け取ると、受け取った数「Ｎ」を用いて、以下の式の成立を判定する。
【００８８】
２＾（Ｎ−１）  ＝  １  ｍｏｄ  Ｎ    （ｅｑ１）
ここで、２＾（Ｎ−１）は、２のＮ−１乗を示している。
第１素数判定部１４３は、式（ｅｑ１）が成立していると判断する場合には、数「Ｎ」を第２素数判定部１４４へ出力する。
第１素数判定部１４３は、式（ｅｑ１）が成立していないと判断する場合には、乱数生成部１４１へ第２生成指示を出力する。
【００８９】
＜第２素数判定部１４４＞
第２素数判定部１４４は、数「Ｎ」を第１素数判定部１４３より受け取ると、素数候補生成部１４２の生成情報記憶領域にて記憶されている数「Ｒ」を読み出す。
第２素数判定部１４４は、数「Ｎ」及び「Ｒ」とを用いて、以下の式の成立を判定する。
【００９０】
２＾（２×Ｒ）  ≠  １  ｍｏｄ  Ｎ    （ｅｑ２）
第２素数判定部１４４は、式（ｅｑ２）が成立していると判断する場合には、数「Ｎ」を素数「Ｎ」として、情報制御部１４０を介して、繰返制御部１３２へ出力する。
第２素数判定部１４４は、式（ｅｑ２）が成立していないと判断する場合には、乱数生成部１４１へ第２生成指示を出力する。
【００９１】
（８）鍵判定部１１７
鍵判定部１１７は、素数生成部１１６より受け取った２つの素数「ｐ１」及び「ｐ２」を、記憶する素数記憶領域を有する。
鍵判定部１１７は、素数生成部１１６より素数「ｐ１」及び「ｐ２」を受け取ると、受け取った素数「ｐ１」及び「ｐ２」をそれぞれ素数記憶領域へ記憶する。
【００９２】
鍵判定部１１７は、素数生成部１１６より判定開始命令を受け取ると、素数記憶領域にて記憶している２つの素数「ｐ１」と「ｐ２」とが一致するか否かを判断する。一致すると判断する場合には、記憶している素数「ｐ２」を消去し、再生成命令を繰返制御部１３２へ出力する。
一致しないと判断する場合には、記憶している２つの素数「ｐ１」及び「ｐ２」を、秘密鍵格納部１１１の素数格納領域へ書き込み、鍵生成開始命令を鍵生成部１１８へ出力する。
【００９３】
（９）鍵生成部１１８
鍵生成部１１８は、鍵判定部１１７より鍵生成命令を受け取ると、秘密鍵格納部１１１の素数格納領域にて記憶されている２つの素数「ｐ１」及び「ｐ２」を読み出し、読み出した素数「ｐ１」と「ｐ２」との積「ｎ＝ｐ１×ｐ２」を計算する。
鍵生成部１１８は、乱数「ｅ」を生成し、算出した「ｎ」と、生成した乱数「ｅ」とからなる組「ＰＫ＝（ｎ、ｅ）」を公開鍵として生成し、生成した公開鍵「ＰＫ」を公開鍵格納部１１２へ書き込む。ここで、乱数「ｅ」は、従来と同様に、乱数「ｅ」は、数「Ｌ」と互いに素であり、「１≦ｅ≦Ｌ−１、ＧＣＤ（ｅ、Ｌ）＝１」を満たす。ここで、ＧＣＤ（ｅ、Ｌ）は、ｅとＬの最大公約数を示し、数  「Ｌ」は、「Ｌ＝ＬＣＭ（ｐ１−１、ｐ２−１）」であり、ＬＣＭ（ｐ１−１、ｐ２−１）は、「ｐ１−１」と「ｐ２−１」との最小公倍数を示す。
【００９４】
鍵生成部１１８は、「ｅ×ｄ＝１  ｍｏｄ  Ｌ」を満たす「ｄ」を算出し、算出した「ｄ」と、素数「ｐ１」及び「ｐ２」とからなる組「ＳＫ＝（ｐ１、ｐ２、ｄ）」を秘密鍵として、秘密鍵格納部１１１の秘密鍵格納領域へ書き込む。鍵生成部１１８は、公開鍵証明書の要求処理を開始する要求開始命令を、情報取得部１１９へ出力する。
（１０）情報取得部１１９
情報取得部１１９は、鍵生成部１１８から要求開始命令を受け取ると、識別子格納部１１０から発行識別子情報「ＩＤＩ」と、公開鍵格納部１１２から公開鍵「ＰＫ」と、制御部１１４のサーバ識別子記憶領域１３０からサーバ識別子とを、それぞれ読み出す。情報取得部１１９は、読み出した発行識別子情報「ＩＤＩ」と、公開鍵「ＰＫ」と、サーバ識別子と、公開鍵証明書の発行を依頼する証明書発行依頼情報とを送信部１２１を介して、証明書発行サーバ２００へ送信する。
【００９５】
情報取得部１１９は、制御部１１４から配布開始命令を受け取ると、秘密鍵格納部１１１にて記憶している秘密鍵「ＳＫ」と、証明書格納部１１３にて記憶している公開鍵証明書「Ｃｅｒｔ」と、制御部１１４の端末情報記憶領域にて記憶している端末識別子とを、それぞれ読み出し、読み出した秘密鍵  「ＳＫ」及び公開鍵証明書「Ｃｅｒｔ」を、読み出した端末識別子に対応する端末装置３００へ送信部１２１を介して送信する。
【００９６】
（１１）受信部１２０
受信部１２０は、インターネットを介して、証明書発行サーバ２００及び端末装置３００より情報を受信し、受信した情報を、制御部１１４へ出力する。
（１２）送信部１２１
送信部１２１は、情報取得部１１９より、発行識別子情報「ＩＤＩ」と、公開鍵「ＰＫ」と、サーバ識別子と、証明書発行依頼情報とを受け取ると、受け取った各情報を証明書発行サーバ２００へ送信する。
【００９７】
送信部１２１は、情報取得部１１９より、秘密鍵「ＳＫ」及び公開鍵証明書「Ｃｅｒｔ」を受け取り、受け取った各情報を、端末装置３００に送信する。
１．３  証明書発行サーバ２００の構成
証明書発行サーバ２００は、鍵発行サーバ１００、１０１、及び１０２から証明書発行依頼情報を受け取ると、公開鍵証明書を発行し、発行した公開鍵証明書を発行依頼のあった鍵発行サーバへ送信する。
【００９８】
証明書発行サーバ２００は、図６にて示すように、秘密鍵格納部２１０、発行公開鍵格納部２１１、発行識別子情報格納部２１２、公開鍵証明書格納部２１３、発行公開鍵確認部２１４、公開鍵証明書生成部２１５、証明書取得部２１６、受信部２１７及び送信部２１８から構成されている。
証明書発行サーバ２００は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレィユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、証明書発行サーバ２００は、その機能を達成する。
【００９９】
なお、鍵発行サーバ１００から証明書発行依頼情報を受け取った場合の動作と、他の鍵発行サーバから証明書発行依頼情報を受け取った場合の動作とは、同じであるため、以降の説明では、鍵発行サーバ１００から送信された証明書発行依頼情報を用いて説明する。
（１）秘密鍵格納部２１０
秘密鍵格納部２１０は、証明書発行サーバ２００のみが有する秘密鍵「ＳＫＣＡ」を予め記憶している。
【０１００】
ここで、秘密鍵「ＳＫＣＡ」に対応する公開鍵「ＰＫＣＡ」は、端末装置４００に配布されているものとする。
（２）発行公開鍵格納部２１１
発行公開鍵格納部２１１は、鍵発行サーバ１００より受け取った公開鍵「ＰＫ」を記憶する領域を有している。
【０１０１】
（３）発行識別子情報格納部２１２
発行識別子情報格納部２１２は、鍵発行サーバ１００より受け取った発行識別子情報「ＩＤＩ」を記憶する領域を有している。
（４）公開鍵証明書格納部２１３
公開鍵証明書格納部２１３は、発行した公開鍵証明書「Ｃｅｒｔ」を記憶する領域を有している。
【０１０２】
（５）発行公開鍵確認部２１４
発行公開鍵確認部２１４は、図６に示すように、サーバ情報記憶領域２２０及び確認情報記憶領域２２１を有している。
サーバ情報記憶領域２２０は、公開鍵証明書の発行依頼のあった鍵発行サーバを識別するサーバ識別子を記憶する領域を有している。
【０１０３】
確認情報記憶領域２２１は、図７に示すように、検証値テーブルＴ２００を有している。検証値テーブルＴ２００は、サーバ識別子と、第１検証値と、第２検証値とからなる組を１以上記憶する領域を有している。サーバ識別子は、鍵発行サーバを識別する識別子であり、「ＳＩＤＡ」は、鍵発行サーバ１００を示し、「ＳＩＤＢ」は、鍵発行サーバ１０１を示し、「ＳＩＤＢ」は、鍵発行サーバ１０２を示す。第１検証値及び第２検証値は、対応付けられたサーバ識別子にて示される鍵発行サーバに割り当てた検証値である。なお、以降では、鍵発行サーバ１００のサーバ識別子を「ＳＩＤ」として説明する。
【０１０４】
発行公開鍵確認部２１４は、鍵発行サーバ１００から受信部２１７を介して、発行識別子情報「ＩＤＩ」と、公開鍵「ＰＫ」と、サーバ識別子と、証明書発行依頼情報とを受け取る。
発行公開鍵確認部２１４は、受け取ったサーバ識別子を、サーバ情報記憶領域２２０に書き込む。
【０１０５】
発行公開鍵確認部２１４は、受け取ったサーバ識別子を用いて、対応する第１検証値「ｃ１１」及び第２検証値「ｃ１２」を読み出す。
発行公開鍵確認部２１４は、受け取った公開鍵「ＰＫ」と発行識別子情報「ＩＤＩ」とを用いて、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されたか否かを確認する。
【０１０６】
ここで、確認方法について、説明する。公開鍵「ＰＫ」は、上述したように「ＰＫ＝（ｎ、ｅ）」である。発行公開鍵確認部２１４は、「ｎ−（ｃ１１×ｃ１２）」を算出し、算出結果が、「ＩＤＩ」で割り切れるか否かを検証する。これにより、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されたか否かを確認することができる。
発行公開鍵確認部２１４は、「ｎ−（ｃ１１×ｃ１２）」が、「ＩＤＩ」で割り切れると判断する場合には、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されたと判断し、「ｎ−（ｃ１１×ｃ１２）」が、「ＩＤＩ」で割り切れないと判断する場合には、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されていないと判断する。
【０１０７】
発行公開鍵確認部２１４は、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されたと判断する場合には、受け取った公開鍵「ＰＫ」を発行公開鍵格納部２１１へ、発行識別子情報を発行識別子情報格納部２１２へ、それぞれ書き込む。発行公開鍵確認部２１４は、公開鍵証明書の生成開始命令を公開鍵証明書生成部２１５へ出力する。
発行公開鍵確認部２１４は、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されていないと判断する場合には、処理を終了する。
【０１０８】
（６）公開鍵証明書生成部２１５
公開鍵証明書生成部２１５は、発行公開鍵確認部２１４より、公開鍵証明書の生成開始命令を受け取ると、秘密鍵格納部２１０より秘密鍵「ＳＫＣＡ」を、発行公開鍵格納部２１１より公開鍵「ＰＫ」を、発行識別子情報格納部２１２より発行識別子情報「ＩＤＩ」を、それぞれ読み出す。
【０１０９】
公開鍵証明書生成部２１５は、読み出した秘密鍵「ＳＫＣＡ」、公開鍵「ＰＫ」及び発行識別子情報「ＩＤＩ」を用いて、公開鍵証明書「Ｃｅｒｔ」を生成する。生成する公開鍵証明書「Ｃｅｒｔ」は、具体的には、「Ｃｅｒｔ＝ｎ｜｜ｅ｜｜ＩＤＩ｜｜Ｓｉｇ（ＳＫＣＡ、ｎ｜｜ｅ｜｜ＩＤＩ）」である。ここで、Ｓｉｇ（Ｋ、Ｄ）は、データ「Ｄ」に対して、秘密鍵「Ｋ」を用いたときの署名データである。記号「｜｜」は、ビットまたはバイトの連結である。
【０１１０】
公開鍵証明書生成部２１５は、生成した公開鍵証明書「Ｃｅｒｔ」を公開鍵証明書格納部２１３へ書き込み、公開鍵証明書「Ｃｅｒｔ」の送信開始命令を証明書取得部２１６へ出力する。
（７）証明書取得部２１６
証明書取得部２１６は、公開鍵証明書生成部２１５より、公開鍵証明書「Ｃｅｒｔ」の送信開始命令を受け取ると、公開鍵証明書格納部２１３から公開鍵証明書「Ｃｅｒｔ」を、サーバ情報記憶領域２２０からサーバ識別子を、それぞれ読み出し、読み出した公開鍵証明書「Ｃｅｒｔ」を、読み出したサーバ識別子に対応する鍵発行サーバ１００へ送信部２１８を介して送信する。
【０１１１】
（８）受信部２１７
受信部２１７は、鍵発行サーバ１００より情報を受信し、受信した情報を、発行公開鍵確認部２１４へ出力する。
（９）送信部２１８
送信部２１８は、証明書取得部２１６より情報を受け取り、受け取った情報を鍵発行サーバ１００へ送信する。
【０１１２】
１．４  端末装置３００の構成
端末装置３００は、図８にて示すように、秘密鍵格納部３１０、公開鍵証明書格納部３１１、制御部３１２、受付部３１３、無線部３１４、ベースバンド信号処理部３１５、スピーカー３１６、マイク３１７及び表示部３１８から構成されている。端末装置３００の一例は、携帯電話機である。
【０１１３】
端末装置３００は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレィユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、端末装置３００は、その機能を達成する。
【０１１４】
なお、端末装置３０１、・・・、３０２、３０３、・・、３０４、３０５、・・・、３０６は、端末装置３００と同様の構成であるため、説明は省略する。
また、端末装置３０１、・・・、３０２から鍵発行依頼情報と、端末識別子とを、鍵発行サーバ１００へ送信した場合、端末装置３０３、・・・、３０４から鍵発行依頼情報と、端末識別子とを、鍵発行サーバ１０１へ送信した場合、及び端末装置３０５、・・・、３０６から鍵発行依頼情報と、端末識別子とを、鍵発行サーバ１０２へ送信した場合の動作は、端末装置３００から鍵発行依頼情報と、端末識別子とを、鍵発行サーバ１００へ送信した場合の動作と同じであるため、以降の説明では、鍵発行依頼情報と、端末識別子とを、鍵発行サーバ１００へ送信した場合の動作について説明する。
【０１１５】
（１）秘密鍵格納部３１０
秘密鍵格納部３１０は、鍵発行依頼情報を送信した鍵発行サーバ、ここでは、鍵発行サーバ１００にて発行された秘密鍵「ＳＫ＝（ｐ１、ｐ２、ｄ）」を記憶する領域を有している。
（２）公開鍵証明書格納部３１１
公開鍵証明書格納部３１１は、鍵発行サーバ１００にて発行された秘密鍵に対応する公開鍵の公開鍵証明書「Ｃｅｒｔ」を記憶する領域を有している。
【０１１６】
（３）制御部３１２
制御部３１２は、図８にて示すように、端末識別子記憶領域３２０を有している。
制御部３１２は、暗号化された電子メールを記憶するメール記憶領域をも有している。
端末識別子記憶領域３２０は、当該装置を識別する端末識別子「ＴＩＤ」を予め記憶している。
【０１１７】
制御部３１２は、受付部３１３より鍵発行要求の指示を受け付けると、端末識別子記憶領域３２０から端末識別子「ＴＩＤ」を読み出す。
制御部３１２は、鍵発行依頼情報と、読み出した端末識別子「ＴＩＤ」とを、鍵発行サーバ１００へ、ベースバンド信号処理部３１５及び無線部３１４を介して送信する。
制御部３１２は、鍵発行サーバ１００より、無線部３１４及びベースバンド信号処理部３１５を介して、秘密鍵「ＳＫ」及び公開鍵証明書「Ｃｅｒｔ」を受け取ると、受け取った秘密鍵「ＳＫ」を秘密鍵格納部３１０へ、公開鍵証明書「Ｃｅｒｔ」を公開鍵証明書格納部３１１へ、それぞれ書き込む。
【０１１８】
制御部３１２は、端末装置４００より、無線部３１４及びベースバンド信号処理部３１５を介して、暗号化された電子メールを受け取ると、受け取った暗号化された電子メールをメール記憶領域へ書き込む。
制御部３１２は、受付部３１３より、暗号化された電子メールの表示命令を受け取ると、秘密鍵格納部３１０より秘密鍵「ＳＫ」を、メール記憶領域より暗号化された電子メールを、それぞれ読み出し、読み出した秘密鍵「ＳＫ」を用いて、暗号化された電子メールを復号し、復号された電子メール（以下、単に「電子メール」という。）を表示部３１８へ出力する。
【０１１９】
（４）受付部３１３
受付部３１３は、ユーザの操作により、鍵発行要求の指示を受け付けると、受け付けた指示を制御部３１２へ出力する。
受付部３１３は、ユーザの操作により、暗号化された電子メールの表示の指示を受け付けると、表示命令を制御部３１２へ出力する。
【０１２０】
（５）無線部３１４
無線部３１４は、アンテナ３１９を備えており、無線信号の送受信を行う。
（６）ベースバンド信号処理部３１５
ベースバンド信号処理部３１５は、無線部３１４より受け取った信号をスピーカー３１６へ出力するための信号処理や、マイク３１７より受け取った音声を無線部３１４へ出力するための信号処理を行う。
【０１２１】
ベースバンド信号処理部３１５は、制御部３１２から鍵発行依頼情報及び端末識別子を受け取ると、受け取ったから鍵発行依頼情報及び端末識別子を、無線部３１４を介して鍵発行サーバ１００へ送信する。
ベースバンド信号処理部３１５は、鍵発行サーバ１００から秘密鍵及び公開鍵証明書とを、無線部３１４を介して受け取ると、受け取った秘密鍵及び公開鍵証明書を制御部３１２へ出力する。
【０１２２】
ベースバンド信号処理部３１５は、鍵発行サーバ１００から秘密鍵及び公開鍵証明書とを、無線部３１４を介して受け取ると、受け取った秘密鍵及び公開鍵証明書を制御部３１２へ出力する。
ベースバンド信号処理部３１５は、端末装置４００から暗号化された電子メールを、無線部３１４を介して受け取ると、受け取った暗号化された電子メールを制御部３１２へ出力する。
【０１２３】
（７）スピーカー３１６
スピーカー３１６は、ベースバンド信号処理部３１５にて処理された信号を音声として出力する。
（８）マイク３１７
マイク３１７は、使用者の音声を受け付け、受け付けた音声をベースバンド信号処理部３１５へ出力する。
【０１２４】
（９）表示部３１８
表示部３１８は、制御部３１２より受け取った電子メールを表示する。
１．５  鍵発行システム１の動作
ここでは、鍵発行システム１の動作について説明する。
（１）鍵発行システム１の動作概要
鍵発行システム１の動作概要を図９に示す流れ図を用いて、説明する。
【０１２５】
以下では、鍵発行サーバ１００が端末装置３００に鍵を発行するときの動作概要を示す。
端末装置３００は、まず、鍵依頼処理にて、鍵発行依頼情報及び端末識別子「ＴＩＤ」を鍵発行サーバ１００へ送信する（ステップＳ５）。
鍵発行サーバ１００は、端末装置３００より鍵発行依頼情報及び端末識別子「ＴＩＤ」を受信すると、鍵発行処理にて、発行識別子情報「ＩＤＩ」、秘密鍵「ＳＫ＝（ｐ１、ｐ２、ｄ）」及び公開鍵「ＰＫ＝（ｎ、ｅ）」を生成する。鍵発行サーバ１００は、生成した発行識別子情報「ＩＤＩ」及び公開鍵「ＰＫ」と、証明書発行依頼情報と、サーバ識別子「ＳＩＤ」とを、証明書発行サーバ２００へ送信する（ステップＳ１０）。
【０１２６】
証明書発行サーバ２００は、発行識別子情報「ＩＤＩ」及び公開鍵「ＰＫ」と、証明書発行依頼情報と、サーバ識別子「ＳＩＤ」とを受信すると、証明書発行処理にて、公開鍵「ＰＫ」に対応する秘密鍵「ＳＫ」に含まれる素数「ｐ１」、「ｐ２」が発行識別子情報「ＩＤＩ」を用いて生成されているかを判定し、判定結果が肯定的な場合に、公開鍵「ＰＫ」に対する公開鍵証明書「Ｃｅｒｔ」を生成する。証明書発行サーバ２００は、生成した公開鍵証明書「Ｃｅｒｔ」を鍵発行サーバ１００へ送信する（ステップＳ１５）。
【０１２７】
鍵発行サーバ１００は、鍵発行処理にて、証明書発行サーバ２００から公開鍵証明書「Ｃｅｒｔ」を受信すると、秘密鍵「ＳＫ＝（ｐ１、ｐ２、ｄ）」と公開鍵証明書「Ｃｅｒｔ」を端末装置３００へ送信する（ステップＳ２０）。
端末装置３００は、鍵依頼処理にて、鍵発行サーバ１００から秘密鍵「ＳＫ」と公開鍵証明書「Ｃｅｒｔ」とを受信すると、受信した秘密鍵「ＳＫ」、公開鍵証明書「Ｃｅｒｔ」を格納し、システムを終了する。
【０１２８】
（２）鍵依頼処理
ここでは、図９に示す鍵依頼処理の動作について、図１０に示す流れ図を用いて、説明する。なお、ここでは、端末装置３００及び鍵発行サーバ１００を用いて、鍵依頼処理の動作を説明する。
端末装置３００の受付部３１３は、ユーザの操作により、鍵発行要求の指示を受け付ける（ステップＳ１００）。
【０１２９】
端末装置３００の制御部３１２は、端末識別子記憶領域３２０から端末識別子「ＴＩＤ」を取得する（ステップＳ１０５）。
端末装置３００の制御部３１２は、鍵発行依頼情報と、取得した端末識別子「ＴＩＤ」とを、鍵発行サーバ１００へ、ベースバンド信号処理部３１５及び無線部３１４を介して送信する（ステップＳ１１０）。
【０１３０】
端末装置３００の制御部３１２は、鍵発行サーバ１００より、無線部３１４及びベースバンド信号処理部３１５を介して、秘密鍵「ＳＫ」及び公開鍵証明書「Ｃｅｒｔ」を受け取る（ステップＳ１１５）。
制御部３１２は、受け取った秘密鍵「ＳＫ」を秘密鍵格納部３１０へ書き込み（ステップＳ１２０）、公開鍵証明書「Ｃｅｒｔ」を公開鍵証明書格納部３１１へ書き込む（ステップＳ１２５）。
【０１３１】
（３）鍵発行処理
ここでは、図９に示す鍵発行処理の動作について、図１１、図１２、図１３及び図１３に示す流れ図を用いて、説明する。
鍵発行サーバ１００の制御部１１４は、端末装置３００から受信部１２０を介して、鍵発行依頼情報と、端末装置３００の端末識別子「ＴＩＤ」とを受け取ると（ステップＳ２００）、受け取った端末識別子「ＴＩＤ」を端末情報記憶領域１３１へ書き込み、発行識別子情報の生成命令と、受け取った端末識別子「ＴＩＤ」とを識別子生成部１１５へ出力する（ステップＳ２０５）。
【０１３２】
識別子生成部１１５は、制御部１１４から発行識別子情報の生成命令と、端末識別子「ＴＩＤ」とを受け取ると、サーバ識別子記憶領域にて記憶されているサーバ識別子「ＳＩＤ」を取得する。識別子生成部１１５は、取得したサーバ識別子「ＳＩＤ」と、受け取った端末識別子「ＴＩＤ」と数「１」とから、発行識別子情報「ＩＤＩ」を生成し、生成した発行識別子情報「ＩＤＩ」を識別子格納部１１０へ書き込み、素数の生成命令を素数生成部１１６へ出力する（ステップＳ２１０）。
【０１３３】
繰返制御部１３２は、識別子生成部１１５から素数の生成開始命令を受け取ると、繰返カウンタ１３５及び出力カウンタ１３６を、それぞれ「１」に設定する（ステップＳ２１５）。
繰返制御部１３２は、繰返カウンタ１３５の値が、１であるか否かを判断する（ステップＳ２２０）。
【０１３４】
１であると判断する場合には（ステップＳ２２０における「ＹＥＳ」）、繰返制御部１３２は、初期値記憶領域より素数とそのビットサイズを読み出し（ステップＳ２２５）、１でないと判断する場合には（ステップＳ２２０における「ＮＯ」）、一時記憶領域よりビットサイズ「８×（２＾（ｎ−１））」と、その素数、つまり前回生成した素数とそのビットサイズとを読み出す（ステップＳ２３０）。つまり、繰返制御部１３２は、繰返カウンタ１３５の値が、１でないと判断する場合には、一時記憶領域より、前回生成した素数とそのビットサイズとを読み出す。ここで、「ｎ」は、繰返カウンタの値である。
【０１３５】
繰返カウンタ１３５の値に対応する制御情報を制御情報テーブルＴ１００より読み出し（ステップＳ２３５）、読み出した制御情報が、「情報Ｃ」であるか否かを判断する（ステップＳ２４０）。
「情報Ｃ」であると判断する場合には（ステップＳ２４０における「ＹＥＳ」）、繰返制御部１３２は、読み出した素数及びそのビットサイズと、制御情報とからなる第１情報を生成し、生成した第１情報を、素数情報生成部１３３へ出力する（ステップＳ２４５）。
【０１３６】
「情報Ｃ」でないと判断する場合には（ステップＳ２４０における「ＮＯ」）、繰返制御部１３２は、識別子格納部１１０より発行識別子情報「ＩＤＩ」を取得し、取得した発行識別子情報「ＩＤＩ」のビットサイズ「ｌｅｎＩＤＩ」を算出し、読み出した素数及びそのビットサイズと、制御情報と、発行識別子情報「ＩＤＩ」及びそのビットサイズ「ｌｅｎＩＤＩ」とからなる第２情報を生成し、生成した第２情報を、素数情報生成部１３３へ出力する（ステップＳ２５０）。
【０１３７】
素数情報生成部１３３は、素数生成処理により素数を生成し、生成した素数を繰返制御部１３２へ出力する（ステップＳ２５５）。
繰返制御部１３２は、素数情報生成部１３３から、素数を受け取ると、繰返カウンタ１３５の値に  「１」を加算し（ステップＳ２６０）、加算結果が、７であるか否かを判断する（ステップＳ２６５）。
【０１３８】
加算結果が７でないと判断する場合には（ステップＳ２６５における「ＮＯ」）、繰返制御部１３２は、受け取った素数のビットサイズを算出し（ステップＳ２７０）、受け取った素数と、算出したビットサイズとを一時的に記憶し（ステップＳ２７５）、ステップＳ２２０へ戻る。
加算結果が７であると判断する場合には（ステップＳ２６５における「ＹＥＳ」）、繰返制御部１３２は、出力カウンタ１３６の値が、１であるか否かを判断する（ステップＳ２８０）。
【０１３９】
１であると判断する場合には（ステップＳ２８０における「ＹＥＳ」）、繰返制御部１３２は、受け取った素数を素数「ｐ１」として、鍵判定部１１７へ出力し（ステップＳ２８５）、出力カウンタ１３６の値に「１」を加算し（ステップＳ２９０）、繰返カウンタ１３５の値に「１」を設定し（ステップＳ２９５）、ステップＳ２２０へ戻る。
１でない、つまり２以上であると判断する場合には（ステップＳＮＯにおける「ＮＯ」）、繰返制御部１３２は、受け取った素数を素数「ｐ２」として、素数「ｐ２」と判定開始命令を鍵判定部１１７へ出力する（ステップＳ３００）。
【０１４０】
鍵判定部１１７は、ステップＳ２８５にて繰返制御部１３２より素数「ｐ１」を受け取ると、受け取った素数「ｐ１」を素数記憶領域へ記憶する。鍵判定部１１７は、ステップＳ３００にて繰返制御部１３２より「ｐ２」及び判定開始命令とを受け取ると、受け取った素数「ｐ２」を素数記憶領域へ記憶する。鍵判定部１１７は、素数記憶領域にて記憶している２つの素数「ｐ１」と「ｐ２」とが一致するか否かを判断する（ステップＳ３０５）。一致すると判断する場合には、記憶している素数「ｐ２」を消去し、再生成命令を繰返制御部１３２へ出力し（ステップＳ３０５における「ＹＥＳ」）、繰返制御部１３２は、鍵判定部１１７より素数を再度生成する旨の再生成命令を受け取ると、上述したステップＳ２９０及びステップＳ２９５を行い、ステップＳ２２０へ戻る。
【０１４１】
一致しないと判断する場合には、記憶している２つの素数「ｐ１」及び「ｐ２」を、秘密鍵格納部１１１の素数格納領域へ書き込み、鍵生成開始命令を鍵生成部１１８へ出力し（ステップＳ３０５における「ＮＯ」）、鍵生成部１１８は、鍵判定部１１７より鍵生成命令を受け取ると、秘密鍵格納部１１１の素数格納領域にて記憶されている２つの素数「ｐ１」及び「ｐ２」を読み出し、読み出した素数「ｐ１」と「ｐ２」との積「ｎ＝ｐ１×ｐ２」を計算する（ステップＳ３１０）。
【０１４２】
鍵生成部１１８は、乱数「ｅ」を生成し（ステップＳ３１５）、算出した「ｎ」と、生成した乱数  「ｅ」とからなる組「ＰＫ＝（ｎ、ｅ）」を公開鍵として生成し、生成した公開鍵「ＰＫ」を公開鍵格納部１１２へ書き込む（ステップＳ３２０）。ここで、乱数「ｅ」は、従来と同様に、乱数「ｅ」は、数「Ｌ」と互いに素であり、「１≦ｅ≦Ｌ−１、ＧＣＤ（ｅ、Ｌ）＝１」を満たす。数「Ｌ」は、「Ｌ＝ＬＣＭ（ｐ１−１、ｐ２−１）」である。
【０１４３】
鍵生成部１１８は、「ｅ×ｄ＝１  ｍｏｄ  Ｌ」を満たす「ｄ」を算出し（ステップＳ３２５）、算出した「ｄ」と、素数「ｐ１」及び「ｐ２」とからなる組「ＳＫ＝（ｐ１、ｐ２、ｄ）」を秘密鍵として、秘密鍵格納部１１１の秘密鍵格納領域へ書き込み、要求開始命令を、情報取得部１１９へ出力する（ステップＳ３３０）。
情報取得部１１９は、鍵生成部１１８から要求開始命令を受け取ると、識別子格納部１１０から発行識別子情報「ＩＤＩ」と、公開鍵格納部１１２から公開鍵「ＰＫ」と、制御部１１４のサーバ識別子記憶領域１３０からサーバ識別子とを、それぞれ読み出す（ステップＳ３３５）。情報取得部１１９は、読み出した発行識別子情報「ＩＤＩ」と、公開鍵「ＰＫ」と、サーバ識別子と、公開鍵証明書の発行を依頼する証明書発行依頼情報とを送信部１２１を介して、証明書発行サーバ２００へ送信する（ステップＳ３４０）。
【０１４４】
制御部１１４は、証明書発行サーバ２００から受信部１２０を介して、公開鍵証明書「Ｃｅｒｔ」を受け取ると、受け取った公開鍵証明書「Ｃｅｒｔ」を証明書格納部１１３へ書き込み、配布開始命令を情報取得部１１９へ出力する（ステップＳ３４５）。
情報取得部１１９は、制御部１１４から配布開始命令を受け取ると、秘密鍵格納部１１１にて記憶している秘密鍵「ＳＫ」と、証明書格納部１１３にて記憶している公開鍵証明書「Ｃｅｒｔ」と、制御部１１４の端末情報記憶領域にて記憶している端末識別子とを、それぞれ読み出し（ステップＳ３５０）、読み出した秘密鍵「ＳＫ」及び公開鍵証明書「Ｃｅｒｔ」を、読み出した端末識別子に対応する端末装置３００へ送信部１２１を介して送信する（ステップＳ３５５）。
【０１４５】
（４）素数生成処理
ここでは、図１２に示す素数生成処理の動作について、図１５に示す流れ図を用いて、説明する。
情報制御部１４０は、繰返制御部１３２から、素数「ｑ」と、素数のビットサイズ「ｌｅｎｑ」と、制御情報とからなる第１情報及び素数「ｑ」と、素数のビットサイズ「ｌｅｎｑ」と、制御情報と、発行識別子情報「ＩＤＩ」と、そのビットサイズ「ｌｅｎＩＤＩ」とからなる第２情報の何れかを受け取ると、受け取った情報を情報記憶領域へ書き込み、乱数の生成の指示を示す第１生成指示を、乱数生成部１４１へ出力する（ステップＳ４００）。
【０１４６】
乱数生成部１４１は、乱数の生成の指示を示す第１生成指示を、情報制御部１４０から受け取ると、情報制御部１４０の情報記憶領域にて記憶されている制御情報を読み出し（ステップＳ４０５）、読み出した制御情報が「情報Ｃ」であるか否かを判断する（ステップＳ４１０）。
「情報Ｃ」であると判断する場合には（ステップＳ４１０における「ＹＥＳ」）、乱数生成部１４１は、情報制御部１４０の情報記憶領域にて記憶されている「ｌｅｎｑ」を読み出し（ステップＳ４１５）、（ｌｅｎｑ−１）ビットからなる乱数「Ｒ１」を生成し、生成した乱数「Ｒ１」と読み出した制御情報とを素数候補生成部１４２へ出力する（ステップＳ４２０）。ここで、乱数「Ｒ１」の最上位ビットは１とする。乱数生成方法は、非特許文献２が詳しい。
【０１４７】
「情報Ｃ」でないと判断する場合には（ステップＳ４１０における「ＮＯ」）、乱数生成部１４１は、情報制御部１４０の情報記憶領域にて記憶されている「ｌｅｎｑ」及び「ｌｅｎＩＤＩ」を読み出し（ステップＳ４２５）、（ｌｅｎｑ−ｌｅｎＩＤＩ−１）ビットからなる乱数「Ｒ１」を生成し、生成した乱数「Ｒ１」と読み出した制御情報とを素数候補生成部１４２へ出力する（ステップＳ４３０）。ここで、乱数「Ｒ１」の最上位ビットは１とする。
【０１４８】
素数候補生成部１４２は、素数候補生成処理により、乱数「Ｒ」と、素数候補である数「Ｎ」とを生成し、生成した乱数「Ｒ」を生成情報記憶領域に記憶し、生成した数「Ｎ」を第１素数判定部１４３へ出力する（ステップＳ４３５）。
第１素数判定部１４３は、数「Ｎ」を素数候補生成部１４２より受け取ると、受け取った数「Ｎ」を用いて、上述した式（ｅｑ１）が成立するか否かを判断する（ステップＳ４４０）。
【０１４９】
第１素数判定部１４３は、式（ｅｑ１）が成立していると判断する場合には、数「Ｎ」を第２素数判定部１４４へ出力し（ステップＳ４４０における「ＹＥＳ」）、第２素数判定部１４４は、数「Ｎ」を第１素数判定部１４３より受け取ると、素数候補生成部１４２の生成情報記憶領域にて記憶されている数「Ｒ」を読み出し、上述した式（ｅｑ２）が成立するか否かを判断する（ステップＳ４４５）。
【０１５０】
第２素数判定部１４４は、式（ｅｑ２）が成立していると判断する場合には（ステップＳ４４５における「ＹＥＳ」）、数「Ｎ」を素数「Ｎ」として、情報制御部１４０を介して、繰返制御部１３２へ出力する（ステップＳ４５０）。
第１素数判定部１４３は、式（ｅｑ１）が成立していないと判断する場合には、乱数生成部１４１へ第２生成指示を出力（ステップＳ４４０における「ＮＯ」）、第２素数判定部１４４は、式（ｅｑ２）が成立していないと判断する場合には、乱数生成部１４１へ第２生成指示を出力し（ステップＳ４４５における「ＮＯ」）、乱数生成部１４１は、第１素数判定部１４３及び第２素数判定部１４４の何れかから、再度乱数を生成する旨の第２生成指示を受け付けると、ステップＳ４０５に戻る。
【０１５１】
（５）素数候補生成処理
ここでは、図１５に示す素数候補生成処理の動作について、図１６及び図１７に示す流れ図を用いて、説明する。
素数候補生成部１４２は、乱数生成部１４１より、乱数「Ｒ１」と制御情報とを受け取ると（ステップＳ５００）、受け取った制御情報が「情報Ｃ」であるか否かの判断をする（ステップＳ５０５）。
【０１５２】
「情報Ｃ」であると判断する場合には（ステップＳ５０５における「ＹＥＳ」）、素数候補生成部１４２は、情報制御部１４０の情報記憶領域より素数「ｑ」を読み出す（ステップＳ５１０）。素数候補生成部１４２は、読み出した素数「ｑ」と乱数生成部１４１より受け取った乱数「Ｒ１」とを用いて、数「Ｎ＝２×Ｒ１×ｑ＋１」を生成する（ステップＳ５１５）。素数候補生成部１４２は、生成した数「Ｎ」のビットサイズ「ｌｅｎＮ」が「ｌｅｎｑ」と一致するか否かを判断し（ステップＳ５２０）、一致すると判断する場合には（ステップＳ５２０における「ＹＥＳ」）、素数候補生成部１４２は、生成した数「Ｎ」を第１素数判定部１４３へ出力し、受け取った乱数「Ｒ１」を、「Ｒ」として生成情報記憶領域に記憶する（ステップＳ５９５）。
【０１５３】
一致しないと判断する場合には（ステップＳ５２０における「ＮＯ」）、素数候補生成部１４２は、乱数生成部１４１より受け取った乱数「Ｒ１」に２を掛けて、その結果を「Ｒ１」とし（ステップＳ５２５）、ステップＳ５１５に戻る。
制御情報が「情報Ｃ」でないと判断する場合には（ステップＳ５０５における「ＮＯ」）、素数候補生成部１４２は、情報制御部１４０の情報記憶領域より素数「ｑ」及び発行識別子情報「ＩＤＩ」を読み出す（ステップＳ５３０）。素数候補生成部１４２は、制御情報が「情報Ｂ」であるか否かを判断する（ステップＳ５３５）。
【０１５４】
「情報Ｂ」であると判断する場合には（ステップＳ５３５における「ＹＥＳ」）、素数候補生成部１４２は、受け取った乱数「Ｒ１」と読み出した発行識別子情報「ＩＤＩ」とから、結合値「ＩＤＩ｜｜Ｒ１」を生成し、生成した結合値「ＩＤＩ｜｜Ｒ１」と関数記憶領域にて記憶している関数「ｆ」とを用いて、数「Ｒ＝ｆ（ＩＤＩ｜｜Ｒ１）」を生成する（ステップＳ５４０）。素数候補生成部１４２は、生成した数「Ｒ」と読み出した素数「ｑ」とを用いて、数「Ｎ＝２×Ｒ×ｑ＋１」を生成する（ステップＳ５４５）。
【０１５５】
素数候補生成部１４２は、生成した数「Ｎ」のビットサイズ「ｌｅｎＮ」が「２×ｌｅｎｑ」であるか否かを判断する（ステップＳ５５０）。
「２×ｌｅｎｑ」であると判断する場合には（ステップＳ５５０における「ＹＥＳ」）、素数候補生成部１４２は、生成した数「Ｎ」を第１素数判定部１４３へ出力し、生成した数「Ｒ」を生成情報記憶領域に記憶する（ステップＳ５９５）。
【０１５６】
「２×ｌｅｎｑ」でないと判断する場合には（ステップＳ５５０における「ＮＯ」）、素数候補生成部１４２は、乱数生成部１４１より受け取った乱数「Ｒ１」に２を掛けて、その結果を「Ｒ１」とし  （ステップＳ５５５）、ステップＳ５４０へ戻る。
「情報Ｂ」でないと判断する場合には（ステップＳ５３５における「ＮＯ」）、素数候補生成部１４２は、受け取った乱数「Ｒ１」と読み出した発行識別子情報「ＩＤＩ」とを用いて、数「Ｒ＝ＩＤＩ×Ｒ１」を生成する（ステップＳ５６０）。素数候補生成部１４２は、回数読出命令を情報制御部１４０へ出力し、情報制御部１４０から、出力カウンタ１３６の値を受け取る。素数候補生成部１４２は、受け取った値が「１」であるか否かを判断する（ステップＳ５６５）。
【０１５７】
出力回数が「１」であると判断する場合には（ステップＳ５６５における「ＹＥＳ」）、素数候補生成部１４２は、情報制御部１４０の検証値記憶領域より第１検証値「ｃ１１」を読み出す（ステップＳ５７０）。素数候補生成部１４２は、読み出した素数「ｑ」、発行識別子情報「ＩＤＩ」、検証値「ｃ１１」及び生成した数「Ｒ」とを用いて、数「Ｎ＝２×（Ｒ＋ｗ１）×ｑ＋１」を生成する（ステップＳ５７５）。ここで、「ｗ１」は「２×ｗ１×ｑ＋１＝ｃ１１  ｍｏｄ  ＩＤＩ、０≦ｗ１＜ＩＤＩ」を満たす数である。
【０１５８】
出力回数が「１」でない、つまり「２」以上であると判断する場合には（ステップＳ５６５における「ＮＯ」）、素数候補生成部１４２は、情報制御部１４０の検証値記憶領域より第２検証値「ｃ１２」を読み出す（ステップＳ５８０）。素数候補生成部１４２は、読み出した素数「ｑ」、発行識別子情報「ＩＤＩ」、検証値「ｃ１２」及び生成した数「Ｒ」とを用いて、数「Ｎ＝２×（Ｒ＋ｗ２）×ｑ＋１」を生成する（ステップＳ５８５）。ここで、「ｗ２」は「２×ｗ２×ｑ＋１＝ｃ１２  ｍｏｄ  ＩＤＩ、０≦ｗ２＜ＩＤＩ」を満たす数である。
【０１５９】
素数候補生成部１４２は、素数「ｑ」のビットサイズ「ｌｅｎｑ」を、情報制御部１４０の情報記憶領域より読み出し、生成した数「Ｎ」のビットサイズが「２×ｌｅｎｑ」であるか否かを判断する（ステップＳ５９０）。
「２×ｌｅｎｑ」であると判断する場合には（ステップＳ５９０における「ＹＥＳ」）、素数候補生成部１４２は、生成した数「Ｎ」を第１素数判定部１４３へ出力し、生成した数「Ｒ」を生成情報記憶領域に記憶する（ステップＳ５９５）。
【０１６０】
「２×ｌｅｎｑ」でないと判断する場合には（ステップＳ５９０における「ＮＯ」）、素数候補生成部１４２は、乱数生成部１４１より受け取った乱数「Ｒ１」に２を掛けて、その結果を「Ｒ１」とし  （ステップＳ６００）、ステップＳ５６０に戻る。
（６）証明書発行処理
ここでは、図９に示す証明書発行処理の動作について、図１８に示す流れ図を用いて、説明する。
【０１６１】
証明書発行サーバ２００の発行公開鍵確認部２１４は、鍵発行サーバ１００から受信部２１７を介して、発行識別子情報「ＩＤＩ」と、公開鍵「ＰＫ」と、サーバ識別子と、証明書発行依頼情報とを受け取る（ステップＳ６５０）。
発行公開鍵確認部２１４は、受け取ったサーバ識別子を、サーバ情報記憶領域２２０に書き込む（ステップＳ６５５）。
【０１６２】
発行公開鍵確認部２１４は、受け取ったサーバ識別子を用いて、対応する第１検証値「ｃ１１」及び第２検証値「ｃ１２」を読み出す（ステップＳ６６０）。
発行公開鍵確認部２１４は、読み出した第１検証値「ｃ１１」及び第２検証値「ｃ１２」と、受け取った公開鍵「ＰＫ」と、発行識別子情報「ＩＤＩ」とを用いて、公開鍵「ＰＫ」が、発行識別子情報  「ＩＤＩ」を用いて生成されたか否かを確認する（ステップＳ６６０）。
【０１６３】
発行公開鍵確認部２１４は、「ｎ−（ｃ１１×ｃ１２）」が、「ＩＤＩ」で割り切れると判断する場合、つまり公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されたと判断する場合には（ステップＳ６６０における「ＹＥＳ」）、発行公開鍵確認部２１４は、受け取った公開鍵「ＰＫ」を発行公開鍵格納部２１１へ、発行識別子情報を発行識別子情報格納部２１２へ、それぞれ書き込み、発行公開鍵確認部２１４は、公開鍵証明書の生成開始命令を公開鍵証明書生成部２１５へ出力する（ステップＳ６６５）。
【０１６４】
発行公開鍵確認部２１４は、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されていないと判断する場合には（ステップＳ６６０における「ＹＥＳ」）、処理を終了する。
公開鍵証明書生成部２１５は、発行公開鍵確認部２１４より、公開鍵証明書の生成開始命令を受け取ると、秘密鍵格納部２１０より秘密鍵「ＳＫＣＡ」を、発行公開鍵格納部２１１より公開鍵「ＰＫ」を、発行識別子情報格納部２１２より発行識別子情報「ＩＤＩ」を、それぞれ読み出す（ステップＳ６７０）。
【０１６５】
公開鍵証明書生成部２１５は、読み出した秘密鍵「ＳＫＣＡ」、公開鍵「ＰＫ」及び発行識別子情報「ＩＤＩ」を用いて、公開鍵証明書「Ｃｅｒｔ」を生成し、生成した公開鍵証明書「Ｃｅｒｔ」を公開鍵証明書格納部２１３へ書き込み、公開鍵証明書「Ｃｅｒｔ」の送信開始命令を証明書取得部２１６へ出力する（ステップＳ６７５）。
証明書取得部２１６は、公開鍵証明書生成部２１５より、公開鍵証明書「Ｃｅｒｔ」の送信開始命令を受け取ると、公開鍵証明書格納部２１３から公開鍵証明書「Ｃｅｒｔ」を、サーバ情報記憶領域２２０からサーバ識別子を、それぞれ読み出し、読み出した公開鍵証明書「Ｃｅｒｔ」を、読み出したサーバ識別子に対応する鍵発行サーバ１００へ送信部２１８を介して送信する（ステップＳ６８０）。
【０１６６】
１．６  素数情報生成部１３３の動作検証
素数情報生成部１３３の第１素数判定部１４３及び、第２素数判定部１４４は、Ｐｏｃｋｌｉｎｇｔｏｎ判定である。Ｐｏｃｋｌｉｎｇｔｏｎ判定は、非特許文献１の１４４ページ及び非特許文献４が詳しい。以下に、簡単に説明する。
Ｐｏｃｋｌｉｎｇｔｏｎ判定によると、「Ｎ＝２×Ｒ×ｑ＋１」の「ｑ」が素数であり
２＾（Ｎ−１）  ＝  １  ｍｏｄ  Ｎ
２＾（２Ｒ）  ≠１  ｍｏｄ  Ｎ
の両方が成り立つ場合、数「Ｎ」は素数となり、素数情報生成部１３３は、数「Ｎ」を素数として出力することができる。
【０１６７】
また、乱数「Ｒ１」のビットサイズが（ｌｅｎｑ−ｌｅｎＩＤＩ−１）であるので、数「Ｒ」のビットサイズが（ｌｅｎｑ−１）になり、ほとんどの数「Ｎ」のビットサイズが（２×ｌｅｎｑ）になる。ここで、素数「ｑ」や発行識別子情報「ＩＤＩ」などの値によっては、ビットサイズが（２×ｌｅｎｑ−１）となる場合がある。その場合は、素数候補生成部１４２は、上述したように、Ｒ１に２を掛けて、それを新たにＲ１とすることにより、生成する数「Ｎ」のビットサイズを（２×ｌｅｎｑ）になるように設定することができる。
【０１６８】
１．７  第１の実施の形態の効果
（１）生成される鍵の一意性
ここでは、鍵発行サーバ１００にて生成される鍵、つまり素数の一意性について説明する。
ここで、以下の命題を証明する。
【０１６９】
（命題）発行識別子情報ＩＤＩが異なれば、出力される素数「Ｎ」が異なる。
まず、以下の補題を証明し、その補題を用いて、上記の命題を証明する。
（補題）二つの素数「ｐ１＝２×ｑ１×Ｒ１＋１」及び「ｐ２＝２×ｑ２×Ｒ２＋１」に対し、ｐ１＝ｐ２であれば、ｑ１＝ｑ２かつＲ１＝Ｒ２となる。
（証明）ｐ１＝ｐ２の場合、素数「ｑ１」及び「ｑ２」のビットサイズは、それぞれ２５６ビットであり、数「Ｒ１」及び「Ｒ２」のビットサイズは、それぞれ２５５ビットであるため、ｑ１＝ｑ２となるのは明らか。また、ｑ１＝ｑ２より、Ｒ１＝Ｒ２も成り立つ（証明終）。
【０１７０】
上記補題より、ｐ１＝ｐ２であれば、Ｒ１＝Ｒ２が成り立つ。Ｒ１＝ｆ（ＩＤＩ１｜｜Ｒ１１）、Ｒ２＝ｆ（ＩＤＩ２｜｜Ｒ２２）とおくと、Ｒ１＝Ｒ２であり、ｆは単射であるため、ＩＤＩ１＝ＩＤＩ２が成り立つ。したがって、この対偶を取ることにより、上記の命題が成り立つ。  以上より、ＩＤＩが異なれば必ず素数が異なる。したがって、鍵発行サーバ１００に与えるＩＤＩを毎回変えることで、毎回異なる素数を生成することができる。これにより、生成される素数は、一意性が保たれる。
【０１７１】
したがって、複数回生成した素数が一致しないことを比較することなく、証明できる。
（２）生成された鍵の正当性
鍵発行サーバ１００にて生成された素数「ｐ１」に対して、「ｐ１−ｃ１１」は必ず発行識別子情報「ＩＤＩ」で割り切れる。
なぜなら、「ｐ１−ｃ１１＝２×ｑ×（Ｒ＋ｗ１）＋１−ｃ１１＝２×ｑ×（ＩＤＩ×Ｒ１＋ｗ１）＋１−ｃ１１＝２×ｑ×ＩＤＩ×Ｒ１＋２×ｑ×ｗ１＋１−ｃ１１」であり、項「２×ｑ×ＩＤＩ×Ｒ」は、「ＩＤＩ」で割り切れることが分かる。また、上述したように、「２×ｑ×ｗ１＋１＝ｃ１１  ｍｏｄ  ＩＤＩ」が成り立っているため、残りの項「２×ｑ×ｗ１＋１−ｃ１１」も「ＩＤＩ」で割り切れる。つまり、鍵発行サーバ１００にて生成された素数「ｐ１」に対して、「ｐ１−ｃ１１」は必ず発行識別子情報「ＩＤＩ」で割り切れる。したがって、生成された素数「ｐ１」に対し、「ｐ１−ｃ１１」が発行識別子情報「ＩＤＩ」で割り切れるか否かで、鍵発行サーバ１００を用いて素数が生成されたかを確認することができる。
【０１７２】
また、上記と同様の理由により、素数「ｐ１」に対して、「ｐ２−ｃ１２」は必ず発行識別子情報  「ＩＤＩ」で割り切れる。
したがって、「ｎ−ｃ１１×ｃ１２」は「ＩＤＩ」で割り切れるため、証明書発行サーバ２００は、「ｎ−ｃ１１×ｃ１２」が「ＩＤＩ」で割り切れることを確認することで、素数「ｐ１」、「ｐ２」が正しく発行識別子情報「ＩＤＩ」を用いて生成しているかを確認することができる。
【０１７３】
なぜなら、秘密鍵である素数「ｐ１」、「ｐ２」はそれぞれ、素数「ｑ１」、「ｑ２」、乱数「Ｒ１１」、「Ｒ１２」、発行識別子情報「ＩＤＩ」に対して、「ｐ１＝２×ｑ１×（ＩＤＩ×Ｒ１１＋ｗ１）＋１＝ｃ１１  ｍｏｄ  ＩＤＩ」、「ｐ２＝２×ｑ２×（ＩＤＩ×Ｒ１２＋ｗ１）＋１＝ｃ１２  ｍｏｄ  ＩＤＩ」を満たすため、
ｎ＝ｐ１×ｐ２＝（２×ｑ１×ＩＤＩ×Ｒ１１＋１）×（２×ｑ２×ＩＤＩ×Ｒ１２＋１）
＝ｃ１１×ｃ１２  ｍｏｄ  ＩＤＩ
となる。そのため、証明書発行サーバ２００は、「ｎ−ｃ１１×ｃ１２」が「ＩＤＩ」で割り切れるか否かを確認することにより、鍵発行サーバが正しく発行識別子情報ＩＤＩを用いて生成しているかを確認することができる。
【０１７４】
なお、「ＩＤＩ」のビットサイズが「ｌｅｎＩＤＩ」であり、「Ｒ１」のビットサイズが（ｌｅｎｑ−ｌｅｎＩＤＩ−１）であるため、ほとんどの「Ｎ１＝２×ｑ×（ＩＤＩ×Ｒ１＋ｗ）＋１」のビットサイズは、２×ｌｅｎｑ１となる。ここで、「ｑ１」や「ＩＤＩ」などの値によっては、ビットサイズが（２×ｌｅｎｑ−１）となる場合がある。その場合は、素数候補生成部１４２で、「Ｒ１」に２を掛けて、それを新たに「Ｒ１」とみなすことにより、「Ｎ１」のビットサイズを「２×ｌｅｎｑ１」になるように設定することができる。
【０１７５】
さらに、鍵発行システム１は、端末がその端末がもつ秘密鍵を用いて、不正を働いたとき、以下の確認方法により、秘密鍵より不正を働いた端末の情報を得ることができる。不正を働いた端末の秘密鍵  「ｐ１」、「ｐ２」が判明したとする。また、不正の追跡者、例えば証明書発行サーバ２００の管理者は、発行識別子情報と端末の対応表と持っているとする。「ｐ１−ｃ１１」、「ｐ２−ｃ１２」は共に発行識別子情報「ＩＤＩ」で割り切れる。そのため、ＧＣＤ（ｐ１−ｃ１１、ｐ２−ｃ１２）は発行識別子情報で割り切れる。したがって、ＧＣＤ（ｐ１−ｃ１１、ｐ２−ｃ１２）の素因数を調べることにより、不正の追跡者は、取りうる発行識別子情報を限定でき、発行識別子情報を知る、すなわち、端末を特定するための助けとなる。
【０１７６】
１．１０  素数生成の変形例１
上記実施の形態では、第１検証値及び第２検証値の２つの検証値を用いたが、ここでは、１つの検証値を用いた場合の素数の生成について、説明する。
上記実施の形態と異なる点は、鍵発行サーバにおける素数情報生成部と、証明書発行サーバにおける発行公開鍵確認部とが異なる。以下に、本変形例における素数情報生成部１３３Ａ、及び発行公開鍵確認部２１４Ａについて説明する。なお、他の構成要素については、第１の実施の形態にて示した構成要素を用いる。
【０１７７】
（１）素数情報生成部１３３Ａ
素数情報生成部１３３Ａは、図１９に示すように、情報制御部１４０Ａ、乱数生成部１４１Ａ、素数候補生成部１４２Ａ、第１素数判定部１４３Ａ及び第２素数判定部１４４Ａから構成されている。
素数情報生成部１３３Ａは、繰返制御部１３２から受け取った素数のビットサイズが２倍のビットサイズからなる素数を生成する。
【０１７８】
なお、以下の説明において、繰返制御部１３２から受け取る素数を素数「ｑ」、そのビットサイズを「ｌｅｎｑ」として、各構成要素について説明する。
＜情報制御部１４０Ａ＞
情報制御部１４０Ａは、第１情報及び第２情報を記憶するための情報記憶領域を有している。
【０１７９】
情報制御部１４０Ａは、証明書発行サーバ２００により割り当てられ、且つ制御情報「情報Ａ」に基づいて素数を生成する際に用いる検証値「ｃ１」を予め記憶している検証値記憶領域を有している。
情報制御部１４０Ａは、繰返制御部１３２から、素数「ｑ」と、素数のビットサイズ「ｌｅｎｑ」と、制御情報とからなる第１情報を受け取ると、受け取った第１情報を情報記憶領域へ書き込む。つまり、素数「ｑ」と、素数のビットサイズ「ｌｅｎｑ」と、制御情報（この場合、「情報Ｃ」）とを書き込む。
【０１８０】
情報制御部１４０Ａは、繰返制御部１３２から、素数「ｑ」と、素数のビットサイズ「ｌｅｎｑ」と、制御情報と、発行識別子情報「ＩＤＩ」と、そのビットサイズ「ｌｅｎＩＤＩ」とからなる第２情報を受け取ると、受け取った第２情報を情報記憶領域へ書き込む。つまり、素数「ｑ」と、素数のビットサイズ「ｌｅｎｑ」と、制御情報、発行識別子情報「ＩＤＩ」と、そのビットサイズ「ｌｅｎＩＤＩ」とを書き込む。
【０１８１】
情報制御部１４０Ａは、受け取った情報の書き込み後、乱数の生成の指示を示す第１生成指示を、乱数生成部１４１Ａへ出力する。
情報制御部１４０Ａは、第２素数判定部１４４Ａより、素数を受け取ると、受け取った素数を繰返制御部１３２へ出力する。
＜乱数生成部１４１Ａ＞
乱数生成部１４１Ａは、第１の実施の形態にて示す乱数生成部１４１Ａと同様であるため、説明は省略する。
【０１８２】
＜素数候補生成部１４２Ａ＞
素数候補生成部１４２Ａは、生成された情報を記憶する生成情報記憶領域と、単射である関数「ｆ」を予め記憶している関数記憶領域とを有している。ここで、関数「ｆ」は、例えば、ｆ（Ｘ｜｜Ｙ）＝Ｅｎｃ（Ｋ、Ｘ｜｜Ｙ）である。Ｅｎｃ（Ｋ、Ｘ｜｜Ｙ）は鍵Ｘを用いたときの（Ｘ｜｜Ｙ）の共通鍵暗号による暗号文である。共通鍵暗号の暗号化関数は一般的に全単射である。また、記号「｜｜」はビットまたはバイト連結である。暗号化関数「Ｅｎｃ（Ｋ、Ｘ｜｜Ｙ）」の一例は、「Ｅｎｃ（Ｋ、Ｘ｜｜Ｙ）＝Ｋ  ＸＯＲ  Ｘ｜｜Ｙ」である。なお、共通暗号の一例は、ＤＥＳであり、ＤＥＳを用いる場合には、鍵長は１２８ビットとなる。
【０１８３】
素数候補生成部１４２Ａは、乱数生成部１４１Ａより、乱数「Ｒ１」と制御情報とを受け取ると、受け取った制御情報が「情報Ｃ」であるか否かの判断をする。
「情報Ｃ」であると判断する場合には、素数候補生成部１４２Ａは、情報制御部１４０Ａの情報記憶領域より素数「ｑ」を読み出す。素数候補生成部１４２Ａは、読み出した素数「ｑ」と乱数生成部１４１Ａより受け取った乱数「Ｒ１」とを用いて、数「Ｎ＝２×Ｒ１×ｑ＋１」を生成する。素数候補生成部１４２Ａは、生成した数「Ｎ」のビットサイズ「ｌｅｎＮ」が「ｌｅｎｑ」と一致するか否かを判断し、一致すると判断する場合には、素数候補生成部１４２Ａは、生成した数「Ｎ」を第１素数判定部１４３Ａへ出力し、受け取った乱数「Ｒ１」を、「Ｒ」として生成情報記憶領域に記憶する。
【０１８４】
一致しないと判断する場合には、素数候補生成部１４２Ａは、乱数生成部１４１Ａより受け取った乱数「Ｒ１」に２を掛けて、その結果を「Ｒ１」として、再度、上記の動作を行い、数「Ｎ＝２×Ｒ１×ｑ＋１」を生成する。
制御情報が「情報Ｃ」でないと判断する場合には、素数候補生成部１４２Ａは、情報制御部１４０Ａの情報記憶領域より素数「ｑ」及び発行識別子情報「ＩＤＩ」を読み出す。素数候補生成部１４２Ａは、制御情報が「情報Ｂ」であるか否かを判断する。
【０１８５】
「情報Ｂ」であると判断する場合には、素数候補生成部１４２Ａは、受け取った乱数「Ｒ１」と読み出した発行識別子情報「ＩＤＩ」と関数記憶領域にて記憶している関数「ｆ」とを用いて、数「Ｒ＝ｆ（ＩＤＩ｜｜Ｒ１）」を生成する。素数候補生成部１４２Ａは、生成した数「Ｒ」と読み出した素数  「ｑ」とを用いて、数「Ｎ＝２×Ｒ×ｑ＋１」を生成する。
【０１８６】
素数候補生成部１４２Ａは、生成した数「Ｎ」のビットサイズ「ｌｅｎＮ」が「２×ｌｅｎｑ」であるか否かを判断する。
「２×ｌｅｎｑ」であると判断する場合には、素数候補生成部１４２Ａは、生成した数「Ｎ」を第１素数判定部１４３Ａへ出力し、生成した数「Ｒ」を生成情報記憶領域に記憶する。
【０１８７】
「２×ｌｅｎｑ」でないと判断する場合には、素数候補生成部１４２Ａは、乱数生成部１４１Ａより受け取った乱数「Ｒ１」に２を掛けて、その結果を「Ｒ１」として、再度、数「Ｒ」及び「Ｎ」を生成する。
「情報Ｂ」でないと判断する場合には、素数候補生成部１４２Ａは、受け取った乱数「Ｒ１」と読み出した発行識別子情報「ＩＤＩ」とを用いて、数「Ｒ＝ＩＤＩ×Ｒ１」を生成する。
【０１８８】
素数候補生成部１４２Ａは、情報制御部１４０Ａの検証値記憶領域より検証値「ｃ１」を読み出す。
素数候補生成部１４２Ａは、読み出した素数「ｑ」、発行識別子情報「ＩＤＩ」、検証値「ｃ１」及び生成した数「Ｒ」とを用いて、数「Ｎ＝２×（Ｒ＋ｗ）×ｑ＋１」を生成する。
【０１８９】
ここで、「ｗ」は「２×ｗ×ｑ＋１＝ｃ１  ｍｏｄ  ＩＤＩ、０≦ｗ＜ＩＤＩ」を満たす数である。「ｗ」は、「ｗ＝（ｃ１−１）×ｍ  ｍｏｄ  ＩＤＩ」を計算することにより求める。「ｍ」は「（２×ｑ）×ｍ＝１  ｍｏｄ  ＩＤＩ」を満たす数である。
素数候補生成部１４２Ａは、素数「ｑ」のビットサイズ「ｌｅｎｑ」を、情報制御部１４０Ａの情報記憶領域より読み出し、生成した数「Ｎ」のビットサイズが「２×ｌｅｎｑ」であるか否かを判断する。
【０１９０】
「２×ｌｅｎｑ」であると判断する場合には、素数候補生成部１４２Ａは、生成した数「Ｎ」を第１素数判定部１４３Ａへ出力し、生成した数「Ｒ」を生成情報記憶領域に記憶する。
「２×ｌｅｎｑ」でないと判断する場合には、素数候補生成部１４２Ａは、乱数生成部１４１Ａより受け取った乱数「Ｒ１」に２を掛けて、その結果を「Ｒ１」として、再度、数「Ｒ」及び「Ｎ」を生成する。
【０１９１】
＜第１素数判定部１４３Ａ＞
第１素数判定部１４３Ａは、第１の実施の形態にて示す第１素数判定部１４３と同様であるため、説明は省略する。
＜第２素数判定部１４４Ａ＞
第２素数判定部１４４Ａは、第１の実施の形態にて示す第２素数判定部１４４と同様であるため、説明は省略する。
【０１９２】
（２）発行公開鍵確認部２１４Ａ
発行公開鍵確認部２１４Ａは、図示していないが、サーバ情報記憶領域２２０Ａ及び確認情報記憶領域２２１Ａを有している。
サーバ情報記憶領域２２０Ａは、公開鍵証明書の発行依頼のあった鍵発行サーバを識別するサーバ識別子を記憶する領域を有している。
【０１９３】
確認情報記憶領域２２１Ａは、図２０に示すように、検証値テーブルＴ２５０を有している。検証値テーブルＴ２５０は、サーバ識別子と、検証値とからなる組を１以上記憶する領域を有している。サーバ識別子は、鍵発行サーバを識別する識別子であり、「ＳＩＤＡ」は、鍵発行サーバ１００を示し、  「ＳＩＤＢ」は、鍵発行サーバ１０１を示し、「ＳＩＤＢ」は、鍵発行サーバ１０２を示す。検証値は、対応付けられたサーバ識別子にて示される鍵発行サーバに割り当てた検証値である。なお、以降では、鍵発行サーバ１００のサーバ識別子を「ＳＩＤ」として説明する。
【０１９４】
発行公開鍵確認部２１４Ａは、鍵発行サーバ１００から受信部２１７を介して、発行識別子情報「ＩＤＩ」と、公開鍵「ＰＫ」と、サーバ識別子と、証明書発行依頼情報とを受け取る。
発行公開鍵確認部２１４Ａは、受け取ったサーバ識別子を、サーバ情報記憶領域２２０Ａに書き込む。
【０１９５】
発行公開鍵確認部２１４Ａは、受け取ったサーバ識別子を用いて、対応する検証値「ｃ１」を読み出す。
発行公開鍵確認部２１４Ａは、受け取った公開鍵「ＰＫ」と発行識別子情報「ＩＤＩ」とを用いて、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されたか否かを確認する。
【０１９６】
ここで、確認方法は、「ｎ−（ｃ１）＾２」が、「ＩＤＩ」で割り切れるか否かを検証する。これにより、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されたか否かを確認することができる。
発行公開鍵確認部２１４Ａは、「ｎ−（ｃ１）＾２」が、「ＩＤＩ」で割り切れると判断する場合には、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されたと判断し、「ｎ−（ｃ１）＾２」が、「ＩＤＩ」で割り切れないと判断する場合には、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されていないと判断する。
【０１９７】
発行公開鍵確認部２１４Ａは、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されたと判断する場合には、受け取った公開鍵「ＰＫ」を発行公開鍵格納部２１１へ、発行識別子情報を発行識別子情報格納部２１２へ、それぞれ書き込む。発行公開鍵確認部２１４Ａは、公開鍵証明書の生成開始命令を公開鍵証明書生成部２１５へ出力する。
発行公開鍵確認部２１４Ａは、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されていないと判断する場合には、処理を終了する。
【０１９８】
（３）素数候補生成処理
本変形例に係る素数候補生成処理について、第１実施の形態にて示した素数候補生成処理と異なる点のみ説明する。なお、鍵発行処理、及び素数生成処理の動作の流れは、第１の実施の形態と同様であるため、説明は省略する。
素数候補生成部１４２Ａは、図１６及び図１７に示すステップＳ５００からステップＳ５６０までを実行後、ステップＳ５６５を省略して、ステップＳ５７０にて、検証値「ｃ１」を読み出す。素数候補生成部１４２Ａは、ステップＳ５７５にて、数「Ｎ＝２×（Ｒ＋ｗ）×ｑ＋１」を生成する。つまり、ステップＳ５６５、ステップＳ５８０及びステップＳ５８５を省略し、ステップＳ５７０及びステップＳ５７５を上記のように変更する。
【０１９９】
以降は、第１の実施の形態と同様であるため、説明は省略する。
つまり、本変形例に係る素数候補生成処理は、出力カウンタの値に関わらず、検証値「ｃ１」と素数「ｑ」と数「Ｒ」とを用いて、数「Ｎ」を生成することになる。
（４）証明書発行処理
本変形例に係る証明書発行処理について、第１実施の形態にて示した証明書発行処理と異なる点のみ説明する。
【０２００】
発行公開鍵確認部２１４Ａは、ステップＳ６６０にて、受け取ったサーバ識別子に対応する検証値  （例えば、「ｃ１」）を読み出し、ステップＳ６７０にて、読み出した検証値「ｃ１」と、公開鍵「ＰＫ」と発行識別子情報「ＩＤＩ」とを用いて、「ＰＫ」が「ＩＤＩ」より生成されたか否かを確認する。
１．１１  素数生成の変形例２
上記実施の形態では、第１検証値及び第２検証値の２つの検証値を用いたが、ここでは、１個の検証値であり、且つその検証値が固定値「１」である場合の素数の生成について、説明する。
上記実施の形態と異なる点は、鍵発行サーバにおける素数情報生成部と、証明書発行サーバにおける発行公開鍵確認部とが異なる。以下に、本変形例における素数情報生成部１３３Ｂ、及び発行公開鍵確認部２１４Ｂについて説明する。なお、他の構成要素については、第１の実施の形態にて示した構成要素を用いる。
【０２０１】
（１）素数情報生成部１３３Ｂ
素数情報生成部１３３Ｂは、図２１に示すように、情報制御部１４０Ｂ、乱数生成部１４１Ｂ、素数候補生成部１４２Ｂ、第１素数判定部１４３Ｂ及び第２素数判定部１４４Ｂから構成されている。
素数情報生成部１３３Ｂは、繰返制御部１３２から受け取った素数のビットサイズが２倍のビットサイズからなる素数を生成する。
【０２０２】
なお、以下の説明において、繰返制御部１３２から受け取る素数を素数「ｑ」、そのビットサイズを「ｌｅｎｑ」として、各構成要素について説明する。
＜情報制御部１４０Ｂ＞
情報制御部１４０Ｂは、第１情報及び第２情報を記憶するための情報記憶領域を有している。
【０２０３】
情報制御部１４０Ｂは、制御情報「情報Ａ」に基づいて素数を生成する際に用いる検証値「１」を予め記憶している検証値記憶領域を有している。
情報制御部１４０Ｂは、繰返制御部１３２から、素数「ｑ」と、素数のビットサイズ「ｌｅｎｑ」と、制御情報とからなる第１情報を受け取ると、受け取った第１情報を情報記憶領域へ書き込む。つまり、素数「ｑ」と、素数のビットサイズ「ｌｅｎｑ」と、制御情報（この場合、「情報Ｃ」）とを書き込む。
【０２０４】
情報制御部１４０Ｂは、繰返制御部１３２から、素数「ｑ」と、素数のビットサイズ「ｌｅｎｑ」と、制御情報と、発行識別子情報「ＩＤＩ」と、そのビットサイズ「ｌｅｎＩＤＩ」とからなる第２情報を受け取ると、受け取った第２情報を情報記憶領域へ書き込む。つまり、素数「ｑ」と、素数のビットサイズ「ｌｅｎｑ」と、制御情報、発行識別子情報「ＩＤＩ」と、そのビットサイズ「ｌｅｎＩＤＩ」とを書き込む。
【０２０５】
情報制御部１４０Ｂは、受け取った情報の書き込み後、乱数の生成の指示を示す第１生成指示を、乱数生成部１４１Ｂへ出力する。
情報制御部１４０Ｂは、第２素数判定部１４４Ｂより、素数を受け取ると、受け取った素数を繰返制御部１３２へ出力する。
＜乱数生成部１４１Ｂ＞
乱数生成部１４１Ｂは、第１の実施の形態にて示す乱数生成部１４１Ｂと同様であるため、説明は省略する。
【０２０６】
＜素数候補生成部１４２Ｂ＞
素数候補生成部１４２Ｂは、生成された情報を記憶する生成情報記憶領域と、単射である関数「ｆ」を予め記憶している関数記憶領域とを有している。
素数候補生成部１４２Ｂは、乱数生成部１４１Ｂより、乱数「Ｒ１」と制御情報とを受け取ると、受け取った制御情報が「情報Ｃ」であるか否かの判断をする。
【０２０７】
「情報Ｃ」であると判断する場合には、素数候補生成部１４２Ｂは、情報制御部１４０Ｂの情報記憶領域より素数「ｑ」を読み出す。素数候補生成部１４２Ｂは、読み出した素数「ｑ」と乱数生成部１４１Ｂより受け取った乱数「Ｒ１」とを用いて、数「Ｎ＝２×Ｒ１×ｑ＋１」を生成する。素数候補生成部１４２Ｂは、生成した数「Ｎ」のビットサイズ「ｌｅｎＮ」が「ｌｅｎｑ」と一致するか否かを判断し、一致すると判断する場合には、素数候補生成部１４２Ｂは、生成した数「Ｎ」を第１素数判定部１４３Ｂへ出力し、受け取った乱数「Ｒ１」を、「Ｒ」として生成情報記憶領域に記憶する。
【０２０８】
一致しないと判断する場合には、素数候補生成部１４２Ｂは、乱数生成部１４１Ｂより受け取った乱数「Ｒ１」に２を掛けて、その結果を「Ｒ１」として、再度、上記の動作を行い、数「Ｎ＝２×Ｒ１×ｑ＋１」を生成する。
制御情報が「情報Ｃ」でないと判断する場合には、素数候補生成部１４２Ｂは、情報制御部１４０Ｂの情報記憶領域より素数「ｑ」及び発行識別子情報「ＩＤＩ」を読み出す。素数候補生成部１４２Ｂは、制御情報が「情報Ｂ」であるか否かを判断する。
「情報Ｂ」であると判断する場合には、素数候補生成部１４２Ｂは、受け取った乱数「Ｒ１」と読み出した発行識別子情報「ＩＤＩ」と関数記憶領域にて記憶している関数「ｆ」とを用いて、数「Ｒ＝ｆ（ＩＤＩ｜｜Ｒ１）」を生成する。素数候補生成部１４２Ｂは、生成した数「Ｒ」と読み出した素数  「ｑ」とを用いて、数「Ｎ＝２×Ｒ×ｑ＋１」を生成する。
【０２０９】
素数候補生成部１４２Ｂは、生成した数「Ｎ」のビットサイズ「ｌｅｎＮ」が「２×ｌｅｎｑ」であるか否かを判断する。
「２×ｌｅｎｑ」であると判断する場合には、素数候補生成部１４２Ｂは、生成した数「Ｎ」を第１素数判定部１４３Ｂへ出力し、生成した数「Ｒ」を生成情報記憶領域に記憶する。
【０２１０】
「２×ｌｅｎｑ」でないと判断する場合には、素数候補生成部１４２Ｂは、乱数生成部１４１Ｂより受け取った乱数「Ｒ１」に２を掛けて、その結果を「Ｒ１」として、再度、数「Ｒ」及び「Ｎ」を生成する。
「情報Ｂ」でないと判断する場合には、素数候補生成部１４２Ｂは、受け取った乱数「Ｒ１」と読み出した発行識別子情報「ＩＤＩ」とを用いて、数「Ｒ＝ＩＤＩ×Ｒ１」を生成する。
【０２１１】
素数候補生成部１４２Ｂは、情報制御部１４０Ｂの検証値記憶領域より検証値「１」を読み出す。
素数候補生成部１４２Ｂは、読み出した素数「ｑ」、発行識別子情報「ＩＤＩ」、検証値「１」及び生成した数「Ｒ」とを用いて、数「Ｎ＝２×Ｒ×ｑ＋１」を生成する。ここで、最後の項の「１」が検証値である。
【０２１２】
素数候補生成部１４２Ｂは、素数「ｑ」のビットサイズ「ｌｅｎｑ」を、情報制御部１４０Ｂの情報記憶領域より読み出し、生成した数「Ｎ」のビットサイズが「２×ｌｅｎｑ」であるか否かを判断する。
「２×ｌｅｎｑ」であると判断する場合には、素数候補生成部１４２Ｂは、生成した数「Ｎ」を第１素数判定部１４３Ｂへ出力し、生成した数「Ｒ」を生成情報記憶領域に記憶する。
【０２１３】
「２×ｌｅｎｑ」でないと判断する場合には、素数候補生成部１４２Ｂは、乱数生成部１４１Ｂより受け取った乱数「Ｒ１」に２を掛けて、その結果を「Ｒ１」として、再度、数「Ｒ」及び「Ｎ」を生成する。
＜第１素数判定部１４３Ｂ＞
第１素数判定部１４３Ｂは、第１の実施の形態にて示す第１素数判定部１４３と同様であるため、説明は省略する。
【０２１４】
＜第２素数判定部１４４Ｂ＞
第２素数判定部１４４Ｂは、第１の実施の形態にて示す第２素数判定部１４４と同様であるため、説明は省略する。
（２）発行公開鍵確認部２１４Ｂ
発行公開鍵確認部２１４Ｂは、図示していないが、サーバ情報記憶領域２２０Ｂ及び確認情報記憶領域２２１Ｂを有している。
【０２１５】
サーバ情報記憶領域２２０Ｂは、公開鍵証明書の発行依頼のあった鍵発行サーバを識別するサーバ識別子を記憶する領域を有している。
確認情報記憶領域２２１Ｂは、固定値である検証値「１」を記憶している。
発行公開鍵確認部２１４Ｂは、鍵発行サーバ１００から受信部２１７を介して、発行識別子情報「ＩＤＩ」と、公開鍵「ＰＫ」と、サーバ識別子と、証明書発行依頼情報とを受け取る。
【０２１６】
発行公開鍵確認部２１４Ｂは、受け取ったサーバ識別子を、サーバ情報記憶領域２２０Ｂに書き込む。
発行公開鍵確認部２１４Ｂは、検証値「１」を、確認情報記憶領域２２１Ｂから読み出す。
発行公開鍵確認部２１４Ｂは、受け取った公開鍵「ＰＫ」と発行識別子情報「ＩＤＩ」とを用いて、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されたか否かを確認する。
【０２１７】
ここで、確認方法は、「ｎ−検証値」、つまり「ｎ−１」が、「ＩＤＩ」で割り切れるか否かを検証する。これにより、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されたか否かを確認することができる。
発行公開鍵確認部２１４Ｂは、「ｎ−１」が、「ＩＤＩ」で割り切れると判断する場合には、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されたと判断し、「ｎ−１」が、「ＩＤＩ」で割り切れないと判断する場合には、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されていないと判断する。
【０２１８】
発行公開鍵確認部２１４Ｂは、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されたと判断する場合には、受け取った公開鍵「ＰＫ」を発行公開鍵格納部２１１へ、発行識別子情報を発行識別子情報格納部２１２へ、それぞれ書き込む。発行公開鍵確認部２１４Ｂは、公開鍵証明書の生成開始命令を公開鍵証明書生成部２１５へ出力する。
発行公開鍵確認部２１４Ｂは、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されていないと判断する場合には、処理を終了する。
【０２１９】
（３）素数候補生成処理
本変形例に係る素数候補生成処理について、第１実施の形態にて示した素数候補生成処理と異なる点のみ説明する。なお、鍵発行処理、及び素数生成処理の動作の流れは、第１の実施の形態と同様であるため、説明は省略する。
素数候補生成部１４２Ｂは、図１６及び図１７に示すステップＳ５００からステップＳ５６０までを実行後、ステップＳ５６５を省略して、ステップＳ５７０にて、検証値「１」を読み出す。素数候補生成部１４２Ｂは、ステップＳ５７５にて、数「Ｎ＝２×（Ｒ＋ｗ）×ｑ＋１」を生成する。つまり、ステップＳ５６５、ステップＳ５８０及びステップＳ５８５を省略し、ステップＳ５７０及びステップＳ５７５を上記のように変更する。なお、数「Ｎ」を算出する際の最後の項が検証値である。
【０２２０】
以降は、第１の実施の形態と同様であるため、説明は省略する。
つまり、本変形例に係る素数候補生成処理は、出力カウンタの値に関わらず、素数「ｑ」と数「Ｒ」とを用いて、数「Ｎ」を生成することになる。
（４）証明書発行処理
本変形例に係る証明書発行処理について、第１実施の形態にて示した証明書発行処理と異なる点のみ説明する。
【０２２１】
発行公開鍵確認部２１４Ｂは、ステップＳ６６０にて、検証値「１」を読み出し、ステップＳ６７０にて、読み出した検証値「１」と、公開鍵「ＰＫ」と発行識別子情報「ＩＤＩ」とを用いて、「ＰＫ」が「ＩＤＩ」より生成されたか否かを確認する。
（５）確認方法の検証
上記に示した方法にて、証明書発行サーバは、鍵発行サーバが正しく発行識別子情報ＩＤＩを用いて生成しているかを確認することができる。
【０２２２】
なぜなら、秘密鍵である素数「ｐ１」、「ｐ２」はそれぞれ、素数「ｑ１」、「ｑ２」、乱数「Ｒ１１」、「Ｒ１２」、発行識別子情報「ＩＤＩ」を用いて、「ｐ１＝２×ｑ１×ＩＤＩ×Ｒ１１＋１」、「ｐ２＝２×ｑ２×ＩＤＩ×Ｒ１２＋１」を満たすため、
ｎ＝ｐ１×ｐ２＝（２×ｑ１×ＩＤＩ×Ｒ１１＋１）×（２×ｑ２×ＩＤＩ×Ｒ１２＋１）
＝ＩＤＩ×（４×ｑ１×ｑ２×Ｒ１１×Ｒ１２×ＩＤＩ＋２×ｑ１×Ｒ１１＋２×ｑ２×Ｒ１２）＋１
となる。そのため、「ｎ−１」は「ＩＤＩ」で割り切れるため、「ｎ−１」が「ＩＤＩ」で割り切れることを確認することで、素数「ｐ１」、「ｐ２」が正しく発行識別子情報「ＩＤＩ」を用いて生成しているかを確認することができる。
【０２２３】
１．１２  素数生成の変形例３
上記実施の形態では、２５６ビットの素数を生成する際に、単射関数を施して、生成する素数の一意性を満たし、５１２ビットの素数を生成する際に、生成する素数の正当性を確認するための要素を付加したが、ここでは、素数の一意性及び正当性を確認するための要素の付加を、１回の動作にて行う場合について、説明する。
【０２２４】
上記実施の形態と異なる点は、鍵発行サーバにおける素数生成部と、証明書発行サーバにおける発行公開鍵確認部とが異なる。以下に、本変形例における素数生成部１１６Ｃ、及び発行公開鍵確認部２１４Ｃについて説明する。なお、他の構成要素については、第１の実施の形態にて示した構成要素を用いる。
また、ここでは、サーバ識別子のビットサイズを１５ビット、端末装置の端末識別子のビットサイズを１６ビットとし、発行識別子情報のビットサイズを３２ビットする。
【０２２５】
（１）素数生成部１１６Ｃ
素数生成部１１６Ｃは、図２２に示すように、繰返制御部１３２Ｃ及び素数情報生成部１３３Ｃとを有している。
素数生成部１１６Ｃは、８ビットの素数から５１２ビットの素数を生成し、生成した５１２ビットの素数を鍵判定部１１７へ出力する。
【０２２６】
＜繰返制御部１３２Ｃ＞
繰返制御部１３２Ｃは、８ビットからなる素数とその素数のビットサイズ（つまり「８」）とを予め記憶している初期値記憶領域と、素数情報生成部１３３Ｃから、受け取った素数を一時的に記憶する一時記憶領域とを有している。
繰返制御部１３２Ｃは、素数情報生成部１３３Ｃの動作の繰返回数をカウントする繰返カウンタ１３５Ｃと、鍵判定部１１７へ出力した素数の個数、つまり生成した５１２ビットの素数の出力回数をカウントする出力カウンタ１３６Ｃとを有している。なお、繰返カウンタ１３５Ｃ及び出力カウンタ１３６Ｃの初期値は、それぞれ「1」である。
【０２２７】
繰返制御部１３２Ｃは、図２３に示す制御情報テーブルＴ１５０を有している。制御情報テーブルＴ１５０は、回数と制御情報とからなる組を１以上格納している。回数は、繰返カウンタ１３５Ｃの値に対応する。制御情報は、素数情報生成部１３３Ｃにて生成する素数の生成方法の種別を示す。
繰返制御部１３２Ｃは、識別子生成部１１５から素数の生成開始命令を受け取ると、素数情報生成部１３３Ｃが素数を生成するよう制御する。素数情報生成部１３３Ｃから素数を受け取ると、繰返カウンタ１３５Ｃ及び出力カウンタ１３６Ｃのそれぞれの値に基づいて、再度、素数情報生成部１３３Ｃへ素数生成の命令、及び受け取った素数を鍵判定部１１７へ出力の何れかを行う。
【０２２８】
以下に、その動作について説明する。
繰返制御部１３２Ｃは、識別子生成部１１５から素数の生成開始命令を受け取ると、繰返カウンタ１３５Ｃ及び出力カウンタ１３６Ｃを、それぞれ「１」に設定する。
繰返制御部１３２Ｃは、素数情報生成部１３３Ｃから、素数を受け取ると、繰返カウンタ１３５Ｃの値に「１」を加算し、加算結果が、７であるか否かを判断する。
【０２２９】
加算結果が７であると判断する場合には、繰返制御部１３２Ｃは、出力カウンタ１３６Ｃの値が、１であるか否かを判断する。１であると判断する場合には、繰返制御部１３２Ｃは、受け取った素数を素数「ｐ１」として、鍵判定部１１７へ出力し、出力カウンタ１３６Ｃの値に「１」を加算し、繰返カウンタ１３５Ｃの値に「１」を設定する。１でない、つまり２以上であると判断する場合には、繰返制御部１３２Ｃは、受け取った素数を素数「ｐ２」として、素数「ｐ２」と判定開始命令を鍵判定部１１７へ出力する。
【０２３０】
加算結果が７でないと判断する場合には、受け取った素数のビットサイズを算出し、受け取った素数と、算出したビットサイズとを、一時記憶領域に一時的に記憶する。
繰返制御部１３２Ｃは、素数の生成開始命令を受け取り、繰返カウンタ１３５Ｃ及び出力カウンタ１３６Ｃのそれぞれの値に「１」を加算した後、素数情報生成部１３３Ｃから受け取った素数とそのビットサイズとを一時的に記憶した後、及び出力カウンタ１３６Ｃに「１」を加算し、且つ繰返カウンタ１３５Ｃの値を「１」に設定した後の何れかの場合において、繰返制御部１３２Ｃは、以下の動作を行う。
【０２３１】
繰返制御部１３２Ｃは、繰返カウンタ１３５Ｃの値が、１であるか否かを判断する。１であると判断する場合には、繰返制御部１３２Ｃは、初期値記憶領域より８ビットの素数とそのビットサイズを読み出し、１でないと判断する場合には、一時記憶領域よりビットサイズ「８×（２＾（ｎ−１））」と、その素数とを読み出す。つまり、繰返制御部１３２Ｃは、繰返カウンタ１３５Ｃの値が、１でないと判断する場合には、一時記憶領域より、前回生成した素数とそのビットサイズとを読み出す。ここで、  「ｎ」は、繰返カウンタの値である。
【０２３２】
繰返カウンタ１３５Ｃの値に対応する制御情報を制御情報テーブルＴ１５０より読み出し、読み出した制御情報が、「情報Ｃ」であるか否かを判断する。
「情報Ｃ」であると判断する場合には、繰返制御部１３２Ｃは、読み出した素数及びそのビットサイズと、制御情報とからなる第１情報を生成し、生成した第１情報を、素数情報生成部１３３Ｃへ出力する。
【０２３３】
「情報Ｃ」でないと判断する場合には、繰返制御部１３２Ｃは、識別子格納部１１０より発行識別情報「ＩＤＩ」を取得し、取得した発行識別子情報「ＩＤＩ」のビットサイズ「ｌｅｎＩＤＩ」を算出し、読み出した素数及びそのビットサイズと、制御情報と、発行識別子情報「ＩＤＩ」及びそのビットサイズ「ｌｅｎＩＤＩ」とからなる第２情報を生成し、生成した第２情報を、素数情報生成部１３３Ｃへ出力する。
【０２３４】
また、繰返制御部１３２Ｃは、鍵判定部１１７より素数を再度生成する旨の再生成命令を受け取ると、出力カウンタ１３６Ｃの値に「１」を加算し、且つ繰返カウンタ１３５Ｃの値を「１」に設定し、繰返カウンタ１３５Ｃの値が、１であるか否かの判断を行う動作以降を行う。
＜素数情報生成部１３３Ｃ＞
素数情報生成部１３３Ｃは、図２４に示すように、情報制御部１４０Ｃ、乱数生成部１４１Ｃ、素数候補生成部１４２Ｃ、第１素数判定部１４３Ｃ及び第２素数判定部１４４Ｃから構成されている。
【０２３５】
素数情報生成部１３３Ｃは、繰返制御部１３２Ｃから受け取った素数のビットサイズが２倍のビットサイズからなる素数を生成する。例えば、８ビットからなる素数を受け取った場合には、１６ビットからなる素数を生成し、１６ビットからなる素数を受け取った場合には、３２ビットからなる素数を生成する。
なお、以下の説明において、繰返制御部１３２Ｃから受け取る素数を素数「ｑ」、そのビットサイズを「ｌｅｎｑ」として、各構成要素について説明する。
【０２３６】
＜情報制御部１４０Ｃ＞
情報制御部１４０Ｃは、第１情報及び第２情報を記憶するための情報記憶領域を有している。
情報制御部１４０Ｃは、証明書発行サーバ２００により割り当てられ、且つ制御情報「情報ＡＢ」に基づいて素数を生成する際に用いる素数「ｑｇ」とそのビットサイズ「ｌｅｎｑｇ」とを予め記憶している割当素数記憶領域を有している。ここで、素数「ｑｇ」のビットサイズは、例えば、「６４」ビットである。
【０２３７】
情報制御部１４０Ｃは、繰返制御部１３２Ｃから、素数「ｑ」と、素数のビットサイズ「ｌｅｎｑ」と、制御情報とからなる第１情報を受け取ると、受け取った第１情報を情報記憶領域へ書き込む。つまり、素数「ｑ」と、素数のビットサイズ「ｌｅｎｑ」と、制御情報（この場合、「情報Ｃ」）とを書き込む。
情報制御部１４０Ｃは、繰返制御部１３２Ｃから、素数「ｑ」と、素数のビットサイズ「ｌｅｎｑ」と、制御情報と、発行識別子情報「ＩＤＩ」と、そのビットサイズ「ｌｅｎＩＤＩ」とからなる第２情報を受け取ると、受け取った第２情報を情報記憶領域へ書き込む。つまり、素数「ｑ」と、素数のビットサイズ「ｌｅｎｑ」と、制御情報、発行識別子情報「ＩＤＩ」と、そのビットサイズ「ｌｅｎＩＤＩ」とを書き込む。
【０２３８】
情報制御部１４０Ｃは、受け取った情報の書き込み後、乱数の生成の指示を示す第１生成指示を、乱数生成部１４１Ｃへ出力する。
情報制御部１４０Ｃは、第２素数判定部１４４Ｃより、素数を受け取ると、受け取った素数を繰返制御部１３２Ｃへ出力する。
情報制御部１４０Ｃは、素数候補生成部１４２Ｃから出力カウンタ１３６Ｃの値を読み出す旨の回数読出命令を受け取ると、繰返制御部１３２Ｃの出力カウンタ１３６Ｃの値を読み出す。情報制御部１４０Ｃは、読み出した値を、素数候補生成部１４２Ｃへ出力する。
【０２３９】
＜乱数生成部１４１Ｃ＞
乱数生成部１４１Ｃは、乱数の生成の指示を示す第１生成指示を、情報制御部１４０Ｃから受け取ると、情報制御部１４０Ｃの情報記憶領域にて記憶されている制御情報を読み出す。乱数生成部１４１Ｃは、読み出した制御情報が「情報Ｃ」であるか否かを判断する。
【０２４０】
「情報Ｃ」であると判断する場合には、乱数生成部１４１Ｃは、情報制御部１４０Ｃの情報記憶領域にて記憶されている「ｌｅｎｑ」を読み出し、（ｌｅｎｑ−１）ビットからなる乱数「Ｒ１」を生成し、生成した乱数「Ｒ１」と読み出した制御情報とを素数候補生成部１４２Ｃへ出力する。ここで、乱数「Ｒ１」の最上位ビットは１とする。乱数生成方法は、非特許文献２が詳しい。
【０２４１】
「情報Ｃ」でないと判断する場合には、乱数生成部１４１Ｃは、情報制御部１４０Ｃの情報記憶領域にて記憶されている「ｌｅｎｑ」を、割当素数記憶領域にて記憶されている「ｌｅｎｑｇ」を、それぞれ読み出す。乱数生成部１４１Ｃは、読み出した「ｌｅｎｑ」及び「ｌｅｎｑｇ」を用いて、（ｌｅｎｑ−２×ｌｅｎｑｇ−１）ビットからなる乱数「Ｒ１」を生成し、生成した乱数「Ｒ１」と読み出した制御情報とを素数候補生成部１４２Ｃへ出力する。ここで、乱数「Ｒ１」の最上位ビットは１とする。
【０２４２】
また、乱数生成部１４１Ｃは、第１素数判定部１４３及び第２素数判定部１４４の何れかから、再度乱数を生成する旨の第２生成指示を受け付けると、制御情報を情報記憶領域より読み出し、上記の動作を行う。
＜素数候補生成部１４２Ｃ＞
素数候補生成部１４２Ｃは、生成された情報を記憶する生成情報記憶領域と、発行識別子情報「ＩＤＩ」と素数「ｑｇ」とから一意的に素数を生成する素数生成関数「ｇｐ」、及び単射である関数「ｆ」を予め記憶している関数記憶領域とを有している。
【０２４３】
ここで、素数生成関数「ｇｐ」を用いた素数生成の一例を、以下に示す。
先ず、「ｃ＝０」として、「２×ｑｇ×ｆ（ＩＤＩ｜｜ｃ）＋１」が素数であるかを判定する。素数である場合は、「ｇｐ（ＩＤＩ，ｑｇ）＝２×ｑｇ×ｆ（ＩＤＩ｜｜ｃ）＋１」とする。素数でなければ、「ｃ」に「１」加算して、「２×ｑｇ×ｆ（ＩＤＩ｜｜ｃ）＋１」が素数であるかを判定する。素数であれば、「ｇｐ（ＩＤＩ，ｑｇ）＝２×ｑｇ×ｆ（ＩＤＩ｜｜ｃ）＋１」とする。素数でなければ、「ｃ」に「１」加算して同様の判定を行い素数になるまで繰り返す。このように関数「ｇｐ」を定義するとき、関数「ｑｇ」と「ｆ」とを保持していれば、発行識別子情報「ＩＤＩ」に対して、素数候補生成部１４２Ｃは、何回素数生成関数により素数を生成しても、同じ素数を生成するができる。このとき、「ＩＤＩ」のビットサイズ及び「ｑｇ」のビットサイズが、それぞれ「３２」ビット及び「６４」ビットである場合には、「ｇｐ（ＩＤＩ、ｑｇ）」のビットサイズは、１２８ビットとなる。
【０２４４】
素数候補生成部１４２Ｃは、乱数生成部１４１Ｃより、乱数「Ｒ１」と制御情報とを受け取ると、受け取った制御情報が「情報Ｃ」であるか否かの判断をする。
「情報Ｃ」であると判断する場合には、素数候補生成部１４２Ｃは、情報制御部１４０Ｃの情報記憶領域より素数「ｑ」を読み出す。素数候補生成部１４２Ｃは、読み出した素数「ｑ」と乱数生成部１４１Ｃより受け取った乱数「Ｒ１」とを用いて、数「Ｎ＝２×Ｒ１×ｑ＋１」を生成する。素数候補生成部１４２Ｃは、生成した数「Ｎ」のビットサイズ「ｌｅｎＮ」が「ｌｅｎｑ」と一致するか否かを判断し、一致すると判断する場合には、素数候補生成部１４２Ｃは、生成した数「Ｎ」を第１素数判定部１４３Ｃへ出力し、受け取った乱数「Ｒ１」を、「Ｒ」として生成情報記憶領域に記憶する。
【０２４５】
一致しないと判断する場合には、素数候補生成部１４２Ｃは、乱数生成部１４１より受け取った乱数「Ｒ１」に２を掛けて、その結果を「Ｒ１」として、再度、上記の動作を行い、数「Ｎ＝２×Ｒ１×ｑ＋１」を生成する。
制御情報が「情報Ｃ」でないと判断する場合、つまり制御情報が「情報ＡＢ」であると判断する場合には、素数候補生成部１４２Ｃは、情報制御部１４０Ｃの情報記憶領域より素数「ｑ」及び発行識別子情報「ＩＤＩ」を、割当素数記憶領域より素数「ｑｇ」を、それぞれ読み出す。
【０２４６】
素数候補生成部１４２Ｃは、読み出した発行識別子情報「ＩＤＩ」及び素数「ｑｇ」と、関数記憶領域にて記憶している関数「ｆ」及び「ｇｐ」とを用いて、上記に示す方法にて、素数「ｐＩＤＩ＝ｇｐ（ＩＤＩ、ｑｇ）」を生成し、生成した素数「ｐＩＤＩ」を生成情報記憶領域へ記憶する。
素数候補生成部１４２Ｃは、生成情報記憶領域にて記憶している素数「ｐＩＤＩ」を読み出し、読み出した素数「ｐＩＤＩ」と、受け取った乱数「Ｒ１」と、読み出した素数「ｑ」とを用いて、数「Ｎ＝２×Ｒ１×ｑ×ｐＩＤＩ＋１」を生成する。
【０２４７】
素数候補生成部１４２Ｃは、生成した数「Ｎ」のビットサイズ「ｌｅｎＮ」が「２×ｌｅｎｑ」であるか否かを判断する。
「２×ｌｅｎｑ」であると判断する場合には、素数候補生成部１４２Ｃは、生成した数「Ｎ」を第１素数判定部１４３Ｃへ出力し、受け取った乱数「Ｒ１」を「Ｒ」として生成情報記憶領域に記憶する。
【０２４８】
「２×ｌｅｎｑ」でないと判断する場合には、素数候補生成部１４２Ｃは、乱数生成部１４１Ｃより受け取った乱数「Ｒ１」に２を掛けて、その結果を「Ｒ１」として、再度、数「Ｎ」を生成する。
＜第１素数判定部１４３Ｃ＞
第１素数判定部１４３Ｃは、第１の実施の形態にて示す第１素数判定部１４３と同様であるため、説明は省略する。
【０２４９】
＜第２素数判定部１４４Ｃ＞
第２素数判定部１４４Ｃは、第１の実施の形態にて示す第１素数判定部１４４と同様であるため、説明は省略する。
（２）発行公開鍵確認部２１４Ｃ
発行公開鍵確認部２１４Ｃは、図示していないが、サーバ情報記憶領域２２０Ｃ及び確認情報記憶領域２２１Ｃを有している。
【０２５０】
サーバ情報記憶領域２２０Ｃは、公開鍵証明書の発行依頼のあった鍵発行サーバを識別するサーバ識別子を記憶する領域を有している。
確認情報記憶領域２２１Ｃは、鍵発行サーバ１００に割り当てた素数「ｑｇ」とそのビットサイズ  「ｌｅｎｑｇ」と、鍵発行サーバ１００にて記憶している素数生成関数及び単射関数のそれぞれと同様の関数「ｇｐ」及び「ｆ」を予め記憶している。
【０２５１】
発行公開鍵確認部２１４Ｃは、鍵発行サーバ１００から受信部２１７を介して、発行識別子情報「ＩＤＩ」と、公開鍵「ＰＫ＝（ｎ、ｅ）」と、サーバ識別子と、証明書発行依頼情報とを受け取る。
発行公開鍵確認部２１４Ｃは、受け取ったサーバ識別子を、サーバ情報記憶領域２２０Ｃに書き込む。
【０２５２】
発行公開鍵確認部２１４Ｃは、受け取った公開鍵「ＰＫ」と発行識別子情報「ＩＤＩ」とを用いて、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されたか否かを確認する。
以下に、確認方法を示す。先ず、発行公開鍵確認部２１４Ｃは、受け取った発行識別子情報「ＩＤＩ」と、記憶している素数「ｑｇ」、関数「ｇｐ」及び「ｆ」とを用いて、素数「ｇｐ（ＩＤＩ、ｑｇ）」を生成し、生成した素数素数「ｇｐ（ＩＤＩ、ｑｇ）」を確認情報記憶領域２２１Ｃへ書き込む。素数「ｇｐ（ＩＤＩ、ｑｇ）」の生成方法は、上記に示す方法と同様であるため、説明は省略する。このとき、発行公開鍵確認部２１４Ｃにて生成される素数「ｇｐ（ＩＤＩ、ｑｇ）」は、鍵発行サーバの素数候補生成部１４２Ｃにて生成される素数「ｐＩＤＩ」と同じであることが分かる。
【０２５３】
次に、発行公開鍵確認部２１４Ｃは、確認情報記憶領域２２１Ｃにて記憶している素数「ｇｐ（ＩＤＩ、ｑｇ）」を読み出し、「ｎ−１」が、読み出した素数「ｇｐ（ＩＤＩ、ｑｇ）」で割り切れるか否かを検証する。これにより、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されたか否かを確認することができる。
発行公開鍵確認部２１４Ｃは、「ｎ−１」が、素数「ｇｐ（ＩＤＩ、ｑｇ）」で割り切れると判断する場合には、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されたと判断し、「ｎ−１」が、素数「ｇｐ（ＩＤＩ、ｑｇ）」で割り切れないと判断する場合には、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されていないと判断する。
【０２５４】
発行公開鍵確認部２１４Ｃは、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されたと判断する場合には、受け取った公開鍵「ＰＫ」を発行公開鍵格納部２１１へ、発行識別子情報を発行識別子情報格納部２１２へ、それぞれ書き込む。発行公開鍵確認部２１４Ｃは、公開鍵証明書の生成開始命令を公開鍵証明書生成部２１５へ出力する。
発行公開鍵確認部２１４Ｃは、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されていないと判断する場合には、処理を終了する。
【０２５５】
（３）素数生成処理
本変形例に係る素数生成処理について、第１実施の形態にて示した素数生成処理と異なる点のみ説明する。なお、鍵発行処理の動作の流れは、第１の実施の形態と同様であるため、説明は省略する。
図１５に示す素数生成処理のステップＳ４２５において、乱数生成部１４１Ｃは、乱数生成部１４１Ｃは、情報制御部１４０Ｃの情報記憶領域にて記憶されている「ｌｅｎｑ」を、割当素数記憶領域にて記憶されている「ｌｅｎｑｇ」を、それぞれ読み出すように変更する。次に、ステップＳ４３０において、乱数生成部１４１Ｃは、読み出した「ｌｅｎｑ」及び「ｌｅｎｑｇ」を用いて、（ｌｅｎｑ−２×ｌｅｎｑｇ−１）ビットからなる乱数「Ｒ１」を生成し、生成した乱数「Ｒ１」と読み出した制御情報とを素数候補生成部１４２Ｃへ出力するように変更する。ここで、乱数「Ｒ１」の最上位ビットは１とする。
【０２５６】
（４）素数候補生成処理
本変形例に係る素数候補生成処理について、図２５に示す流れ図を用いて説明する。
素数候補生成部１４２Ｃは、乱数生成部１４１Ｃより、乱数「Ｒ１」と制御情報とを受け取ると（ステップＳ７００）、受け取った制御情報が「情報Ｃ」であるか否かの判断をする（ステップＳ７０５）。
【０２５７】
「情報Ｃ」であると判断する場合には（ステップＳ７０５における「ＹＥＳ」）、素数候補生成部１４２Ｃは、情報制御部１４０Ｃの情報記憶領域より素数「ｑ」を読み出す（ステップＳ７１０）。素数候補生成部１４２Ｃは、読み出した素数「ｑ」と乱数生成部１４１Ｃより受け取った乱数「Ｒ１」とを用いて、数「Ｎ＝２×Ｒ１×ｑ＋１」を生成する（ステップＳ７１５）。素数候補生成部１４２Ｃは、生成した数「Ｎ」のビットサイズ「ｌｅｎＮ」が「ｌｅｎｑ」と一致するか否かを判断し（ステップＳ７２０）、一致すると判断する場合には（ステップＳ７２０における「ＹＥＳ」）、素数候補生成部１４２Ｃは、生成した数「Ｎ」を第１素数判定部１４３Ｃへ出力し、受け取った乱数「Ｒ１」を、「Ｒ」として生成情報記憶領域に記憶する（ステップＳ７５５）。
【０２５８】
一致しないと判断する場合には（ステップＳ７２０における「ＮＯ」）、素数候補生成部１４２Ｃは、乱数生成部１４１より受け取った乱数「Ｒ１」に２を掛けて、その結果を「Ｒ１」とし（ステップＳ７２５）、ステップＳ７１５へ戻る。
制御情報が「情報Ｃ」でないと判断する場合（ステップＳ７０５における「ＮＯ」）、つまり制御情報が「情報ＡＢ」であると判断する場合には、素数候補生成部１４２Ｃは、情報制御部１４０Ｃの情報記憶領域より素数「ｑ」及び発行識別子情報「ＩＤＩ」を、割当素数記憶領域より素数「ｑｇ」を、それぞれ読み出す（ステップＳ７３０）。
【０２５９】
素数候補生成部１４２Ｃは、読み出した発行識別子情報「ＩＤＩ」及び素数「ｑｇ」と、関数記憶領域にて記憶している関数「ｆ」及び「ｇｐ」とを用いて、上記に示す方法にて、素数「ｐＩＤＩ＝ｇｐ（ＩＤＩ、ｑｇ）」を生成し、生成した素数「ｐＩＤＩ」を生成情報記憶領域へ記憶する（ステップＳ７３５）。
素数候補生成部１４２Ｃは、生成情報記憶領域にて記憶している素数「ｐＩＤＩ」を読み出し、読み出した素数「ｐＩＤＩ」と、読み出した素数「ｑ」と、生成した素数「ｐＩＤＩ」とを用いて、数「Ｎ＝２×Ｒ１×ｑ×ｐＩＤＩ＋１」を生成する（ステップＳ７４０）。
【０２６０】
素数候補生成部１４２Ｃは、生成した数「Ｎ」のビットサイズ「ｌｅｎＮ」が「２×ｌｅｎｑ」であるか否かを判断する（ステップＳ７４５）。
「２×ｌｅｎｑ」であると判断する場合には（ステップＳ７４５における「ＹＥＳ」）、素数候補生成部１４２Ｃは、生成した数「Ｎ」を第１素数判定部１４３Ｃへ出力し、乱数「Ｒ１」を「Ｒ」として生成情報記憶領域に記憶する（ステップＳ７５５）。
【０２６１】
「２×ｌｅｎｑ」でないと判断する場合には（ステップＳ７４５における「ＮＯ」）、素数候補生成部１４２Ｃは、乱数生成部１４１Ｃより受け取った乱数「Ｒ１」に２を掛けて、その結果を「Ｒ１」とし（ステップＳ７５０）、ステップＳ７４０へ戻る。
（５）証明書発行処理
本変形例に係る証明書発行処理について、第１実施の形態にて示した証明書発行処理と異なる点のみ説明する。
【０２６２】
発行公開鍵確認部２１４Ｃは、ステップＳ６６０にて、受け取った発行識別子情報「ＩＤＩ」と、記憶している素数「ｑｇ」、関数「ｇｐ」及び「ｆ」とを用いて、素数「ｇｐ（ＩＤＩ、ｑｇ）」を生成し、確認情報記憶領域２２１Ｃへ書き込むように変更する。ステップＳ６６５においては、発行公開鍵確認部２１４Ｃは、素数「ｇｐ（ＩＤＩ、ｑｇ）」を読み出し、受け取った公開鍵「ＰＫ」及び発行識別子情報「ＩＤＩ」と、読み出した素数「ｇｐ（ＩＤＩ、ｑｇ）」とを用いて、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されたか否かを確認する。
【０２６３】
（６）素数の一意性及び確認方法の検証
上記と同様の証明により、素数生成部１１６Ｃにて生成される素数の一意性は満たされる。つまり、端末装置ごとに、異なる発行識別子情報が生成されるため、素数生成に用いる関数「ｆ」の単射の性質により、生成される素数も異なる。これにより、端末装置毎に、異なる秘密鍵及びそれに対応する公開鍵を割り当てることができる。
【０２６４】
上記に示した方法にて、証明書発行サーバは、鍵発行サーバが正しく発行識別子情報ＩＤＩを用いて生成しているかを確認することができる。
なぜなら、秘密鍵である素数「ｐ１」、「ｐ２」はそれぞれ、素数「ｑ１」、「ｑ２」、乱数「Ｒ１１」、「Ｒ１２」、及び素数「ｐＩＤＩ＝ｇｐ（ＩＤＩ、ｑｇ）」を用いて、「ｐ１＝２×ｑ１×ｐＩＤＩ×Ｒ１１＋１」、「ｐ２＝２×ｑ２×ｐＩＤＩ×Ｒ１２＋１」を満たすため、
ｎ＝ｐ１×ｐ２＝（２×ｑ１×ｐＩＤＩ×Ｒ１１＋１）×（２×ｑ２×ｐＩＤＩ×Ｒ１２＋１）
＝ｐＩＤＩ×（４×ｑ１×ｑ２×Ｒ１１×Ｒ１２×ｐＩＤＩ＋２×ｑ１×Ｒ１１＋２×ｑ２×Ｒ１２）＋１
となる。そのため、「ｎ−１」は「ｐＩＤＩ」で割り切れるため、「ｎ−１」が「ｐＩＤＩ」で割り切れることを確認することで、素数「ｐ１」、「ｐ２」が正しく発行識別子情報「ＩＤＩ」を用いて生成しているかを確認することができる。
【０２６５】
（７）変形例
本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
上記の変形例では、予め１個の素数「ｑｇ」を記憶しているとしたが、これに限定されない。鍵発行サーバは、予め２つの素数「ｑｇ１」、「ｑｇ２」を記憶しておき、素数「ｐ１」を生成する場合に、素数「ｑｇ１」を用い、素数「ｐ２」を生成する場合に、素数「ｑｇ２」を用いてもよい。
【０２６６】
また、上記の変形例では、素数「ｐ１」及び「ｐ２」を生成する場合に用いる「ｐＩＤＩ」を同一のものととしたが、これに限定されない。例えば、素数「ｐ１」の生成に用いる「ｃ」の値と、例えば、素数「ｐ２」の生成に用いる「ｃ」の値とを異なるように設定し、素数「ｐ１」及び「ｐ２」を生成する場合に用いる、それぞれの「ｐＩＤＩ」の値を異なるようにしてもよい。
【０２６７】
２．第２の実施の形態
本発明に係る第２の実施の形態としての鍵発行システム２について、第１の実施の形態における鍵発行システム１と異なる点を中心に説明する。
２．１  鍵発行システム２の概要
鍵発行システム２は、図２６に示すように、鍵発行サーバ１１００、１１０１、１１０２と、鍵発行監査サーバ１２００と、端末装置１３００、１３０１、・・・、１３０２、１３０３、・・・、１３０４、１３０５、・・・、１３０６から構成されている。端末装置の台数は、例えば１０００台である。
【０２６８】
鍵発行サーバ１１００、１１０１及び１１０２は、それぞれ異なる会社にて管理されている。端末装置１３００、１３０１、・・・、１３０２は、鍵発行サーバ１１００に対して、鍵の発行要求し、端末装置１３０３、・・・、１３０４は、鍵発行サーバ１１０１に対して、鍵の発行要求し、端末装置１３０５、・・・、１３０６は、鍵発行サーバ１１０２に対して、鍵の発行要求をする。なお、端末装置１３００、１３０１、・・・、１３０２は、鍵発行サーバ１１００との間には、安全な通信経路が確立されているものとする。また、端末装置１３０３、・・・、１３０４と、鍵発行サーバ１１０１との間、及び端末装置１３０５、・・・、１３０６は、鍵発行サーバ１１０２との間においても、同様に、安全な通信経路が確立されているものとする。
【０２６９】
また、鍵発行サーバ１１００、１１０１、１１０２と、鍵発行監査サーバ１２００との間においても、同様に、安全な通信経路が確立されているものとする。
なお、以下においては、鍵発行サーバ１１００、鍵発行監査サーバ１２００、及び端末装置１３００を用いて、鍵発行システム２の概要を説明する。
鍵発行サーバ１１００は、端末装置１３００より鍵の発行要求を受け取ると、ＲＳＡ暗号における秘密鍵及び公開鍵を生成する。さらに、鍵発行サーバ１１００は、生成した公開鍵に対する公開鍵証明書を生成し、生成した公開鍵証明書及び秘密鍵を、端末装置１３００へ送信する。なお、ここで、生成する各鍵の鍵長は、１０２４ビットとする。
【０２７０】
鍵発行サーバ１１００は、鍵発行監査サーバ１２００より、発行済みの公開鍵及び発行識別子情報を要求する旨の発行済鍵依頼情報を受信すると、発行した公開鍵と、公開鍵の生成に用いた発行識別子情報とからなる発行済鍵情報を鍵発行監査サーバ１２００へ送信する。
鍵発行監査サーバ１２００は、鍵発行サーバ１１００より発行済公開鍵情報を受け取ると、発行された公開鍵の正当性を監査し、監査結果を表示する。
【０２７１】
端末装置１３００は、公開鍵証明書と、秘密鍵とを、鍵発行サーバ１１００より受け取ると、受け取った公開鍵証明書と、秘密鍵とを記憶する。
以降、例えば、端末装置１４００のユーザは、先ず、鍵発行サーバ１１００より、端末装置１３００の公開鍵証明書を入手、又は端末装置１３００より公開鍵証明書を入手し、鍵発行サーバ１１００が有し、公開鍵証明書の正当性を確認する際に用いる証明書用公開鍵「Ｃ＿ＰＫ」を用いて、公開鍵証明書の正当性を確認し、正当な公開鍵証明書であると判断する場合に、入手した公開鍵証明書を、端末装置１４００にて記憶する。端末装置１４００は、記憶している公開鍵証明書に含まれる公開鍵を用いて、端末装置１３００へ送信する電子メールを暗号化して、暗号化された電子メールを端末装置１３００へ送信する。
【０２７２】
端末装置１３００は、端末装置１４００より暗号化された電子メールを受信すると、記憶している秘密鍵を用いて、暗号化された電子メールを復号して、復号された電子メールを表示する。
これにより、端末装置１３００と端末装置１４００との間では、安全にデータのやりとりができるようになる。
【０２７３】
なお、端末装置１３０１、・・・、１３０２は、端末装置１３００と同様であるため、説明は省略する。また、鍵発行サーバ１１０１、及び１１０２は、鍵発行サーバ１１００と同様であるため、説明は省略する。
以降の説明において、各端末装置の代表として端末装置１３００を、各鍵発行サーバの代表として鍵発行サーバ１１００を用いる。
【０２７４】
２．２  鍵発行サーバ１１００の構成
鍵発行サーバ１１００は、図２７にて示すように、識別子格納部１１１０、秘密鍵格納部１１１１、公開鍵格納部１１１２、証明書格納部１１１３、制御部１１１４、識別子生成部１１１５、素数生成部１１１６、鍵判定部１１１７、鍵生成部１１１８、情報取得部１１１９、受信部１１２０、送信部１１２１、証明書生成部１１２２、証明書用秘密鍵格納部１１２３及び発行済鍵情報格納部１１２４から構成されている。
【０２７５】
鍵発行サーバ１１００は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレィユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、鍵発行サーバ１１００は、その機能を達成する。
【０２７６】
なお、鍵発行サーバ１１０１、及び１１０２は、鍵発行サーバ１１００と同様の構成であるため、説明は省略する。
（１）識別子格納部１１１０
識別子格納部１１１０は、第１の実施の形態における識別子格納部１１１０と同様に、ビットサイズが１２６ビット以下である発行識別子情報を記憶するための領域を有している。発行識別子情報のビットサイズは、例えば、６４ビットである。
【０２７７】
（２）秘密鍵格納部１１１１
秘密鍵格納部１１１１は、第１の実施の形態における秘密鍵格納部１１１１と同様に、素数格納領域と秘密鍵格納領域とを有している。
（３）公開鍵格納部１１１２
公開鍵格納部１１１２は、第１の実施の形態における公開鍵格納部１１２と同様に、公開鍵を記憶するための領域を有している。
【０２７８】
（４）証明書格納部１１１３
証明書格納部１１１３は、当該サーバにて生成した証明書発行サーバにて発行された公開鍵証明書を記憶する領域を有している。
（５）証明書用秘密鍵格納部１１２３
証明書用秘密鍵格納部１１２３は、公開鍵証明書を生成する際に用いられる証明書用秘密鍵「Ｃ＿ＳＫ」を、予め記憶している。
【０２７９】
（６）制御部１１１４
制御部１１１４は、図２７に示すように、サーバ識別子記憶領域１１３０と、端末情報記憶領域１１３１とを有している。
サーバ識別子記憶領域１１３０は、当該サーバを識別するサーバ識別子を予め記憶している。例えば、鍵発行サーバ１１００は、ＳＩＤＡを、鍵発行サーバ１１０１は、ＳＩＤＢを、鍵発行サーバ１１０２は、ＳＩＤＣを記憶している。なお、以降では、鍵発行サーバ１１００のサーバサーバ識別子を「ＳＩＤ」として説明する。ここでは、サーバ識別子のビットサイズを３１ビットとする。
【０２８０】
端末情報記憶領域１１３１は、鍵発行の要求のあった端末装置を識別する端末識別子を記憶する領域を有している。ここで、端末識別子は、例えば、端末装置のシリアル番号である。ここでは、シリアル番号のビットサイズを３２ビットする。
制御部１１１４は、端末装置１３００から受信部１１２０を介して、鍵発行依頼情報と、端末装置１３００の端末識別子「ＴＩＤ」とを受け取ると、受け取った端末識別子「ＴＩＤ」を端末情報記憶領域１１３１へ書き込む。制御部１１１４は、発行識別子情報の生成命令と、受け取った端末識別子「ＴＩＤ」とを識別子生成部１１１５へ出力する。
【０２８１】
制御部１１１４は、鍵発行監査サーバ１２００から受信部１１２０を介して、発行済鍵依頼情報を受け取ると、鍵情報取得命令を情報取得部１１１９へ出力する。
（７）識別子生成部１１１５
識別子生成部１１１５は、第１の実施の形態における識別子生成部１１５と同様であるため、説明は省略する。
【０２８２】
（８）素数生成部１１１６
素数生成部１１１６は、第１の実施の形態における素数生成部１１６の素数の生成方法と同様の方法にて、５１２ビットの素数を生成する。
（９）鍵判定部１１１７
鍵判定部１１１７は、第１の実施の形態における鍵判定部１１７と同様であるため、説明は省略する。
【０２８３】
（１０）鍵生成部１１１８
鍵生成部１１１８は、鍵判定部１１１７より鍵生成命令を受け取ると、秘密鍵格納部１１１の素数記憶領域にて記憶されている２つの素数「ｐ１」及び「ｐ２」を読み出し、読み出した素数「ｐ１」と  「ｐ２」との積「ｎ＝ｐ１×ｐ２」を計算する。
鍵生成部１１８は、乱数「ｅ」を生成し、算出した「ｎ」と、生成した乱数「ｅ」とからなる組「ＰＫ＝（ｎ、ｅ）」を公開鍵として生成し、生成した公開鍵「ＰＫ」を公開鍵格納部１１２へ書き込む。ここで、乱数「ｅ」は、従来と同様に、乱数「ｅ」は、数「Ｌ」と互いに素であり、「１≦ｅ≦Ｌ−１、ＧＣＤ（ｅ、Ｌ）＝１」を満たす。ここで、ＧＣＤ（ｅ、Ｌ）は、ｅとＬの最大公約数を示し、数  「Ｌ」は、「Ｌ＝ＬＣＭ（ｐ１−１、ｐ２−１）」であり、ＬＣＭ（ｐ１−１、ｐ２−１）は、「ｐ１−１」と「ｐ２−１」との最小公倍数を示す。
鍵生成部１１１８は、「ｅ×ｄ＝１  ｍｏｄ  Ｌ」を満たす「ｄ」を算出し、算出した「ｄ」と、素数「ｐ１」及び「ｐ２」とからなる組「ＳＫ＝（ｐ１、ｐ２、ｄ）」を秘密鍵として、秘密鍵格納部１１１の秘密鍵格納領域へ書き込む。鍵生成部１１８は、公開鍵証明書の生成命令を、証明書生成部１１２２へ出力する。
【０２８４】
（１１）証明書生成部１１２２
証明書生成部１１２２は、鍵生成部１１１８より公開鍵証明書の生成命令を受け取ると、証明書用秘密鍵格納部より証明書用秘密鍵「Ｃ＿ＳＫ」を、公開鍵格納部１１１２より公開鍵「ＰＫ」を、識別子格納部１１１０より発行識別子情報「ＩＤＩ」を、それぞれ読み出す。
【０２８５】
証明書生成部１１２２は、読み出した秘密鍵「Ｃ＿ＳＫ」、公開鍵「ＰＫ」及び発行識別子情報「ＩＤＩ」を用いて、公開鍵証明書「Ｃｅｒｔ」を生成する。生成する公開鍵証明書「Ｃｅｒｔ」は、具体的には、「Ｃｅｒｔ＝ｎ｜｜ｅ｜｜ＩＤＩ｜｜Ｓｉｇ（Ｃ＿ＳＫ、ｎ｜｜ｅ｜｜ＩＤＩ）」である。ここで、Ｓｉｇ（Ｋ、Ｄ）は、データ「Ｄ」に対して、秘密鍵「Ｋ」を用いたときの署名データである。記号「｜｜」は、ビットまたはバイトの連結である。
【０２８６】
証明書生成部１１２２は、生成した公開鍵証明書「Ｃｅｒｔ」を証明書格納部１１１３へ書き込み、公開鍵証明書「Ｃｅｒｔ」の配布開始命令を情報取得部１１１９へ出力する。
（１２）情報取得部１１１９
情報取得部１１１９は、証明書生成部１１２２から配布開始命令を受け取ると、秘密鍵格納部１１１１にて記憶している秘密鍵「ＳＫ」と、証明書格納部１１１３にて記憶している公開鍵証明書「Ｃｅｒｔ」と、制御部１１１４の端末情報記憶領域１１３１にて記憶している端末識別子とを、それぞれ読み出し、読み出した秘密鍵「ＳＫ」及び公開鍵証明書「Ｃｅｒｔ」を、読み出した端末識別子に対応する端末装置１３００へ送信部１１２１を介して送信する。
【０２８７】
情報取得部１１１９は、秘密鍵「ＳＫ」及び公開鍵証明書「Ｃｅｒｔ」を、端末装置１３００へ送信部１１２１を介して送信した後、公開鍵格納部１１１２より発行した公開鍵「ＰＫ＝（ｎ、ｅ）」を、識別子格納部１１１０より発行した発行識別子情報「ＩＤＩ」を、それぞれ読み出し、読み出した公開鍵「ＰＫ」及び発行識別子情報「ＩＤＩ」を１つの組として、発行済鍵情報格納部１１２４へ書き込む。
【０２８８】
情報取得部１１１９は、制御部１１１４から鍵情報取得命令を受け取ると、発行済鍵情報格納部１１２４より、全ての発行済鍵情報を読み出す。情報取得部１１１９は、制御部１１１４のサーバ識別子記憶領域１１３０よりサーバ識別子を読み出し、読み出した全ての発行済鍵情報とサーバ識別子とを、送信部１１２１を介して鍵発行監査サーバ１２００へ送信する。
【０２８９】
（１３）発行済鍵情報格納部１１２４
発行済鍵情報格納部１１２４は、図２８に示すように、発行済鍵情報テーブルＴ１１００を有している。
発行済鍵情報テーブルＴ１１００は、発行済公開鍵と、発行済識別子情報とからなる組を１以上記憶するための領域を有している。
【０２９０】
発行済公開鍵は、当該鍵発行サーバにて発行した公開鍵であり、発行済識別子情報は、公開鍵及びその公開鍵に対応する秘密鍵を生成する際に用いられた発行識別子情報である。
上記により、鍵発行サーバ１１００は、発行した公開鍵と、発行した発行識別子情報とを蓄積していくことができる。
【０２９１】
なお、発行済鍵情報格納部１１２４は、発行済公開鍵情報である発行履歴を格納するために使用するため、電源が切れてもデータが消えない不揮発性メモリ（例えば、ハードディスクなど）でなければならない。
（１４）受信部１１２０
受信部１１２０は、鍵発行監査サーバ１２００及び端末装置１３００より情報を受信し、受信した情報を、制御部１１１４へ出力する。
【０２９２】
（１５）送信部１１２１
送信部１１２１は、情報取得部１１１９より、秘密鍵「ＳＫ」及び公開鍵証明書「Ｃｅｒｔ」を受け取り、受け取った各情報を、端末装置１３００に送信する。
送信部１１２１は、情報取得部１１１９より、１以上の発行済鍵情報とサーバ識別子とを受け取ると、受け取った１以上の発行済鍵情報とサーバ識別子とを鍵発行監査サーバ１２００へ送信する。
【０２９３】
２．３  鍵発行監査サーバ１２００
鍵発行監査サーバ１２００は、図２９に示すように、確認情報格納部１２１０、発行済鍵情報格納部１２１１、制御部１２１２、発行公開鍵確認部１２１３、受付部１２１４、監査結果出力部１２１５、受信部１２１６及び送信部１２１７から構成されている。
鍵発行監査サーバ１２００は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレィユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、鍵発行監査サーバ１２００は、その機能を達成する。
【０２９４】
なお、鍵発行サーバ１１００から発行済鍵情報を受け取った場合の動作と、他の鍵発行サーバから発行済鍵情報を受け取った場合の動作とは、同じであるため、以降の説明では、鍵発行サーバ１００から送信された発行済鍵情報を用いて説明する。
（１）確認情報格納部１２１０
確認情報格納部１２１０は、図３０に示すように、検証値テーブルＴ１２００を有している。検証値テーブルＴ１２００は、サーバ識別子と、第１検証値と、第２検証値とからなる組を１以上記憶する領域を有している。サーバ識別子は、鍵発行サーバを識別する識別子であり、「ＳＩＤＡ」は、鍵発行サーバ１１００を示し、「ＳＩＤＢ」は、鍵発行サーバ１１０１を示し、「ＳＩＤＢ」は、鍵発行サーバ１１０２を示す。第１検証値及び第２検証値は、対応付けられたサーバ識別子にて示される鍵発行サーバに割り当てた検証値である。なお、以降では、鍵発行サーバ１１００のサーバ識別子を「ＳＩＤ」として説明する。
【０２９５】
（２）発行済鍵情報格納部１２１１
発行済鍵情報格納部１２１１は、鍵発行サーバ１１００より送信された１以上の発行済鍵情報を記憶するための領域を有している。
（３）制御部１２１２
制御部１２１２は、図２９に示すように、サーバ情報記憶領域１２２０を有している。
【０２９６】
サーバ情報記憶領域２２０は、公開鍵証明書の発行依頼のあった鍵発行サーバを識別するサーバ識別子を記憶する領域を有している。
制御部１２１２は、受付部１２１４より、公開鍵の監査を開始する監査開始命令と、監査対象のサーバ識別子（ここでは、「ＳＩＤ」とする。）を受け付けると、発行済鍵依頼情報を、送信部１２１７を介してサーバ識別子に対応する鍵発行サーバ１１００へ送信する。
【０２９７】
制御部１２１２は、受付部１２１４より受け取ったサーバ識別子をサーバ情報記憶領域１２２０へ書き込む。
制御部１２１２は、鍵発行サーバ１１００から受信部２１７を介して、１以上の発行済鍵情報とサーバ識別子とを受け取る。
制御部１２１２は、受け取ったサーバ識別子と、サーバ情報記憶領域にて記憶しているサーバ識別子とが一致するか否かを判断する。
【０２９８】
一致すると判断する場合には、制御部１２１２は、受け取った１以上の発行済鍵情報を発行済鍵情報格納部１２１１へ書き込み、監査開始命令と受け取ったサーバ識別子とを発行公開鍵確認部１２１３へ出力する。
一致しないと判断する場合には、制御部１２１２は、処理を終了する。
（４）発行公開鍵確認部１２１３
発行公開鍵確認部１２１３は、制御部１２１２より監査開始命令とサーバ識別子とを受け取ると、受け取ったサーバ識別子を用いて、対応する第１検証値「ｃ１１」及び第２検証値「ｃ１２」を、確認情報格納部１２１０から読み出す。
【０２９９】
発行公開鍵確認部１２１３は、未読の発行済鍵情報のうち１つの発行済鍵情報を、発行済鍵情報格納部１２１１から読み出す。
発行公開鍵確認部１２１３は、読み出した発行済鍵情報に含まれる公開鍵「ＰＫ」と発行識別子情報「ＩＤＩ」と、第１検証値「ｃ１１」及び第２検証値「ｃ１２」とを用いて、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されたか否かを確認する。
【０３００】
ここで、確認方法は、第１の実施の形態と同様であるため、説明は省略する。
発行公開鍵確認部１２１３は、「ｎ−（ｃ１１×ｃ１２）」が、「ＩＤＩ」で割り切れると判断する場合には、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されたと判断し、「ｎ−（ｃ１１×ｃ１２）」が、「ＩＤＩ」で割り切れないと判断する場合には、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されていないと判断し、読み出した発行識別子情報「ＩＤＩ」を一時的に記憶する。
【０３０１】
発行公開鍵確認部１２１３は、未読の発行済鍵情報が存在するか否かを判断し、未読の発行済鍵情報が存在すると判断する場合には、上記の動作を繰り返す。未読の発行済鍵情報が存在しないと判断する場合には、一時的に記憶している発行識別子情報が存在するか否かを判断する。
一時的に記憶している発行識別子情報が存在すると判断する場合には、発行公開鍵確認部１２１３は、記憶されている全ての発行識別子を連結し、不正発行識別子情報群を生成し、生成した不正発行識別子情報群を監査結果出力部１２１５へ出力する。
【０３０２】
一時的に記憶している発行識別子情報が存在しないと判断する場合には、発行公開鍵確認部１２１３は、全ての公開鍵の正当性が確認されたことを示す旨の正当メッセージを監査結果出力部１２１５へ出力する。
（５）受付部１２１４
受付部１２１４は、ユーザの操作により、監査を開始する指示と、監査対象の鍵発行サーバのサーバ識別子とを受け付けると、監査開始命令と、サーバ識別子を制御部１２１２へ出力する。
【０３０３】
（６）監査結果出力部１２１５
監査結果出力部１２１５は、発行公開鍵確認部１２１３から不正発行識別子情報群を受け取ると、受け取った不正発行識別子情報群をモニタ１２５０へ出力する。
監査結果出力部１２１５は、発行公開鍵確認部１２１３から正当メッセージを受け取ると、受け取った正当メッセージをモニタ１２５０へ出力する。
【０３０４】
なお、モニタ１２５０では、監査結果出力部１２１５より受け取った情報を表示する。
（７）受信部１２１６
受信部１２１６は、鍵発行サーバ１１００より、１以上の発行済鍵情報と、サーバ識別子とを受信すると、受信した１以上の発行済鍵情報と、サーバ識別子とを制御部１２１２へ出力する。
【０３０５】
（８）送信部１２１７
送信部１２１７は、制御部１２１２より、発行済鍵依頼情報を受け取ると、受け取った発行済鍵依頼情報を鍵発行サーバ１１００へ送信する。
２．４  端末装置１３００の構成
端末装置１３００は、第１の実施の形態における端末装置３００と同様であるため、説明は省略する。
【０３０６】
なお、端末装置１３０１、・・・、１３０２、１３０３、・・・、１３０４、１３０５、・・・、１３０６についても、端末装置３００と同様であるため、説明は省略する。
２．５  鍵発行システム２の動作
ここでは、鍵発行システム２の動作について説明する。
（１）鍵発行システム２の動作概要
ここでは、鍵発行システム２の動作概要を説明する。
【０３０７】
以下では、鍵発行サーバ１１００が端末装置１３００に鍵を発行するときの動作概要を示す。
以降の説明において、１以上の発行済鍵情報を発行済鍵情報群として、記述する。
＜鍵発行時の動作概要＞
鍵発行時の動作概要を図３１に示す流れ図を用いて、説明する。
【０３０８】
端末装置１３００は、ユーザの操作により、鍵発行要求の指示を受け付けると、鍵発行依頼情報と、端末識別子「ＴＩＤ」とを、鍵発行サーバ１００へ送信する（ステップＳ１０００）。
鍵発行サーバ１１００は、鍵発行依頼情報と、端末識別子「ＴＩＤ」とを、端末装置１３００より受信すると、鍵発行処理にて秘密鍵及び公開鍵を生成し（ステップＳ１００５）、証明書発行処理により、ステップＳ１００５にて生成した公開鍵に対する公開鍵証明書を発行し、発行した公開鍵証明書と、ステップＳ１００５にて生成した秘密鍵とを、端末装置１３００へ送信する（ステップＳ１０１０）
端末装置１３００は、鍵発行サーバ１１００より、秘密鍵「ＳＫ」及び公開鍵証明書「Ｃｅｒｔ」を受信すると、受信した秘密鍵「ＳＫ」、及び公開鍵証明書「Ｃｅｒｔ」を記憶する（ステップＳ１０１５）。
【０３０９】
＜鍵の監査時の動作概要＞
鍵の監査時の動作概要を図３２に示す流れ図を用いて、説明する。
鍵発行監査サーバ１２００は、監査処理にて、発行済鍵依頼情報を鍵発行サーバ１１００へ送信する（ステップＳ１０５０）。
鍵発行サーバ１１００は、鍵情報取得処理にて取得した発行済鍵情報群と、サーバ識別子とを鍵発行監査サーバ１２００へ送信する（ステップＳ１０５５）。
【０３１０】
（２）鍵発行処理
ここでは、図３１に示す鍵発行処理の動作について、第１の実施の形態にて示す鍵発行処理との異なる点のみを、図１１、図１２、図１３及び図１４に示す流れ図を用いて、説明する。
本実施の形態に係る鍵発行処理は、図１１、図１２及び図１３に示すステップＳ２００からステップＳ３２５まで実行する。
【０３１１】
本実施の形態に係る鍵発行処理は、図１３に示すステップＳ３３０を、鍵生成部１１１８は、組「ＳＫ＝（ｐ１、ｐ２、ｄ）」を秘密鍵として、秘密鍵格納部１１１１の秘密鍵格納領域へ書き込み、公開鍵証明書の生成命令を、証明書生成部１１２２へ出力するように変更する。
本実施の形態に係る鍵発行処理は、変更後のステップＳ３３０を実行すると、処理を終了する。
【０３１２】
（３）証明書発行処理
ここでは、図３１に示す鍵発行処理の動作について、図３３に示す流れ図を用いて、説明する。
証明書生成部１１２２は、鍵生成部１１１８より公開鍵証明書の生成命令を受け取ると、証明書用秘密鍵格納部より証明書用秘密鍵「Ｃ＿ＳＫ」を、公開鍵格納部１１１２より公開鍵「ＰＫ」を、識別子格納部１１１０より発行識別子情報「ＩＤＩ」を、それぞれ読み出す（ステップＳ１１００）。
【０３１３】
証明書生成部１１２２は、読み出した秘密鍵「Ｃ＿ＳＫ」、公開鍵「ＰＫ」及び発行識別子情報「ＩＤＩ」を用いて、公開鍵証明書「Ｃｅｒｔ」を生成し、生成した公開鍵証明書「Ｃｅｒｔ」を証明書格納部１１１３へ書き込み、公開鍵証明書「Ｃｅｒｔ」の配布開始命令を情報取得部１１１９へ出力する（ステップＳ１１０５）。
情報取得部１１１９は、証明書生成部１１２２から配布開始命令を受け取ると、秘密鍵格納部１１１１にて記憶している秘密鍵「ＳＫ」と、証明書格納部１１１３にて記憶している公開鍵証明書「Ｃｅｒｔ」と、制御部１１１４の端末情報記憶領域にて記憶している端末識別子とを、それぞれ読み出し、読み出した秘密鍵「ＳＫ」及び公開鍵証明書「Ｃｅｒｔ」を、読み出した端末識別子に対応する端末装置１３００へ送信部１１２１を介して送信する（ステップＳ１１１０）。
【０３１４】
情報取得部１１１９は、公開鍵格納部１１１２より発行した公開鍵「ＰＫ＝（ｎ、ｅ）」を、識別子格納部１１１０より発行した発行識別子情報「ＩＤＩ」を、それぞれ読み出し、読み出した公開鍵「ＰＫ」及び発行識別子情報「ＩＤＩ」を１つの組として、発行済鍵情報格納部１１２４へ書き込む（ステップＳ１１１５）。
（４）鍵情報取得処理
ここでは、図３２に示す鍵情報取得処理の動作について、図３４に示す流れ図を用いて、説明する。
【０３１５】
鍵発行サーバ１１００の制御部１１１４は、鍵発行監査サーバ１２００から受信部１１２０を介して、発行済鍵依頼情報を受け取ると、鍵情報取得命令を情報取得部１１１９へ出力する（ステップＳ１２００）。
鍵発行サーバ１１００の情報取得部１１１９は、制御部１１１４から鍵情報取得命令を受け取ると、発行済鍵情報格納部１１２４より、全ての発行済鍵情報を読み出す（ステップＳ１２０５）。
【０３１６】
情報取得部１１１９は、制御部１１１４のサーバ識別子記憶領域１１３０よりサーバ識別子を読み出し、読み出した発行済鍵情報群とサーバ識別子とを、送信部１１２１を介して鍵発行監査サーバ１２００へ送信する（ステップＳ１２１０）。
（５）監査処理
ここでは、図３２に示す監査処理の動作について、図３５に示す流れ図を用いて、説明する。
【０３１７】
鍵発行監査サーバ１２００の受付部１２１４は、ユーザの操作により、監査を開始する指示と、監査対象の鍵発行サーバのサーバ識別子とを受け付けると、監査開始命令と、サーバ識別子を制御部１２１２へ出力する（ステップＳ１３００）。
制御部１２１２は、受付部１２１４より、公開鍵の監査を開始する監査開始命令と、監査対象のサーバ識別子（ここでは、「ＳＩＤ」とする。）を受け付けると、発行済鍵依頼情報を、送信部１２１７を介してサーバ識別子に対応する鍵発行サーバ１１００へ送信する（ステップＳ１３０５）。
【０３１８】
制御部１２１２は、受付部１２１４より受け取ったサーバ識別子をサーバ情報記憶領域１２２０へ書き込む（ステップＳ１３１０）。
制御部１２１２は、鍵発行サーバ１１００から受信部２１７を介して、１以上の発行済鍵情報とサーバ識別子とを受け取る（ステップＳ１３１５）。
制御部１２１２は、受け取ったサーバ識別子と、サーバ情報記憶領域にて記憶しているサーバ識別子とが一致するか否かを判断する（ステップＳ１３２０）。
【０３１９】
一致すると判断する場合には（ステップＳ１３２０における「ＹＥＳ」）、制御部１２１２は、受け取った１以上の発行済鍵情報を発行済鍵情報格納部１２１１へ書き込み、監査開始命令と受け取ったサーバ識別子とを発行公開鍵確認部１２１３へ出力する（ステップＳ１３２５）。
発行公開鍵確認部１２１３は、確認処理において、公開鍵の正当性の確認を行い、結果をモニタ１２５０にて表示する。
【０３２０】
一致しないと判断する場合には（ステップＳ１３２０における「ＮＯ」）、制御部１２１２は、処理を終了する。
（６）確認処理
ここでは、図３５に示す確認処理の動作について、図３６に示す流れ図を用いて、説明する。
【０３２１】
発行公開鍵確認部１２１３は、制御部１２１２より監査開始命令とサーバ識別子とを受け取ると、受け取ったサーバ識別子を用いて、対応する第１検証値「ｃ１１」及び第２検証値「ｃ１２」を、確認情報格納部１２１０から読み出す（ステップＳ１４００）。
発行公開鍵確認部１２１３は、発行済鍵情報格納部１２１１から、未読の発行済鍵情報を１つ読み出す（ステップＳ１４０５）。
【０３２２】
発行公開鍵確認部１２１３は、読み出した発行済鍵情報に含まれる公開鍵「ＰＫ」と発行識別子情報「ＩＤＩ」と、第１検証値「ｃ１１」及び第２検証値「ｃ１２」とを用いて、公開鍵「ＰＫ」が、発行識別子情報「ＩＤＩ」を用いて生成されたか否かを確認する（ステップＳ１４１０）。なお、確認方法は、第１の実施の形態と同様であるため、説明は省略する。
【０３２３】
発行公開鍵確認部１２１３は、「ｎ−（ｃ１１×ｃ１２）」が、「ＩＤＩ」で割り切れないと判断する場合、つまり公開鍵が不正であると判断する場合（ステップＳ１４１０における「ＮＯ」）、読み出した発行識別子情報「ＩＤＩ」を一時的に記憶する（ステップＳ１４１５）。
発行公開鍵確認部１２１３は、「ｎ−（ｃ１１×ｃ１２）」が、「ＩＤＩ」で割り切れると判断する場合、つまり公開鍵が正当であると判断する場合には（ステップＳ１４１０における「ＹＥＳ」）、ステップＳ１４１５を省略する。
【０３２４】
発行公開鍵確認部１２１３は、未読の発行済鍵情報が存在するか否かを判断し（ステップＳ１４２０）、未読の発行済鍵情報が存在すると判断する場合には（ステップＳ１４２０における「ＹＥＳ」）、ステップＳ１４０５へ戻る。
未読の発行済鍵情報が存在しないと判断する場合には（ステップＳ１４２０における「ＮＯ」）、一時的に記憶している発行識別子情報が存在するか否かを判断する（ステップＳ１４２５）。
【０３２５】
一時的に記憶している発行識別子情報が存在すると判断する場合には（ステップＳ１４２５における「ＹＥＳ」）、発行公開鍵確認部１２１３は、記憶されている全ての発行識別子を連結し、不正発行識別子情報群を生成し、生成した不正発行識別子情報群を、監査結果出力部１２１５を介して、モニタ１２５０にて表示する（ステップＳ１４３０）。
一時的に記憶している発行識別子情報が存在しないと判断する場合には（ステップＳ１４２５における「ＮＯ」）、発行公開鍵確認部１２１３は、全ての公開鍵の正当性が確認されたことを示す旨の正当メッセージを、監査結果出力部１２１５を介して、モニタ１２５０にて表示する（ステップＳ１４３５）。
【０３２６】
３．まとめ
上記の第１の実施の形態にて示す鍵発行サーバ１００の素数生成部１１６の素数情報生成部１３３は、図３７に示す動作を繰り返すことにより、８ビットの素数から５１２ビットの素数を生成する。
素数情報生成部１３３は、８ビットの素数から１６ビットの素数を生成し（ステップＳ１７００）、生成した１６ビットの素数から３２ビットの素数を生成し（ステップＳ１７０５）、以降順に、３２ビットの素数から６４ビットの素数、６４ビットの素数から１２８ビットの素数、１２８ビットの素数から２５６ビットの素数を生成し（ステップＳ１７１０、Ｓ１７１５、及びＳ１７２０）、最後に、生成した２５６ビットの素数から５１６ビットの素数を生成する（ステップＳ１７２５）。
【０３２７】
素数生成部１１６は、８ビットから１２８ビットの素数を生成する間は、制御情報「情報Ｃ」により、従来と同様の生成方法にて、素数を生成する。
素数生成部１１６は、ステップＳ１７２０においては、制御情報「情報Ｂ」により、生成される素数が、発行識別子情報「ＩＤＩ」に対して一意となるように、単射の関数「ｆ」を用いて２５６ビットの素数を生成する。
【０３２８】
素数生成部１１６は、ステップＳ１７２５においては、制御情報「情報Ａ」により、生成される素数の正当性を確認できるように、発行識別子情報「ＩＤＩ」を埋め込んだ５１２ビットの素数を生成する。
これにより、鍵発行サーバ１００は、単射関数「ｆ」を用いることにより、端末装置毎に異なる秘密鍵及び公開鍵を生成することができる。また、鍵発行サーバ１００にて、２５６ビットの素数から５１２ビットの素数を生成する際に、生成される素数に、発行識別子情報「ＩＤＩ」が埋め込まれているため、証明書発行サーバ２００は、生成された公開鍵と発行識別子情報とを用いて、公開鍵の正当性を確認することができる。
【０３２９】
なお、第２の実施の形態においても、上記の記載と同様に、鍵発行サーバ１１００は、単射関数「ｆ」を用いることにより、端末装置毎に異なる秘密鍵及び公開鍵を生成することができる。また、鍵発行サーバ１１００にて、２５６ビットの素数から５１２ビットの素数を生成する際に、生成される素数に、発行識別子情報「ＩＤＩ」が埋め込まれているため、鍵発行監査サーバ１２００は、生成された公開鍵と発行識別子情報とを用いて、公開鍵の正当性を確認することができる。
【０３３０】
上記第１の実施の形態によると、鍵発行サーバ１００は、単射の関数「ｆ」を用いることにより、複数回素数生成を行っても、素数が一致しないことを比較することなく、証明できる素数を生成することが実現できる。
上記第１の実施の形態によると、鍵発行サーバ１００が、生成する素数に発行識別子情報「ＩＤＩ」を埋め込むことにより、証明書発行サーバ２００は、正しく鍵発行しているかを発行識別子情報「ＩＤＩ」で割り切れるかをチェックすることで確認できる。
【０３３１】
従来、１台の鍵発行サーバを有する鍵発行システムがある。しかしながら、ユーザが増加すると、素数を生成する際に、複数回べき乗を行うことにより計算量が大きくなるため、計算時間が大きくなってくる。そこで、鍵発行サーバを複数もち、それぞれで鍵発行をすることにより、計算量の分散を図ることがある。しかしながら、複数台の鍵発行サーバをもつ従来の鍵発行システムでは、例えば、２人のユーザで同じ素数が鍵となる場合がある。このとき、暗号の安全性が著しく低下する。なぜなら、例えば、ユーザＡの素数をｐＡ１、ｐＡ２とし、ｎＡ＝ｐＡ１×ｐＡ２、ユーザＢの素数をｐＢ１、ｐＢ２とし、ｎＢ＝ｐＢ１×ｐＢ２とする。このとき、ｐＡ１＝ｐＢ１であれば、ユーザＡはＧＣＤ（ｐＡ１，ｎＢ）を求めることにより、ユーザＢの素数の一つがｐＡ１と等しいことがわかり、その結果、ｎＢ／ｐＡ１を計算することにより、ｐＢ２も得ることができる。ＲＳＡ暗号は、素因数分解を安全性の根拠としているため、素因数が判明すると、簡単に解読可能になる。そのため、ユーザＡはユーザＢの公開鍵で暗号化した暗号文を解ける。また、同様に、ユーザＢはユーザＡの公開鍵で暗号化した暗号文を解けてしまう。
【０３３２】
従来技術では、複数回素数生成を行ったときに素数が一致する可能性があり、それにより、暗号の安全性を著しく低下させる。それに対しては、発行済の素数（秘密鍵）と発行した素数を比較することにより、一致しないことを確認できる。しかし、通常の公開鍵暗号のシステムでは、発行した後の公開鍵は鍵発行サーバで管理するが、秘密鍵は機密性が高いため、削除してしまうことが多い。そのため、新たに発行済の素数（秘密鍵）を管理する必要がある。さらに、発行数が１０億個程度に大きさになると、比較する時間が大きく現実的でない。
【０３３３】
また、複数の鍵発行サーバで発行した場合、すべての鍵発行サーバで発行した素数が一致させないため、各鍵発行サーバ間で、発行した素数、すなわち、秘密鍵を互いにチェックさせる必要がある。各鍵発行サーバ間で信頼関係がある場合は問題ないが、各鍵発行サーバはそれぞれ別の会社が設置することが多いため、信頼できるとは限らない。さらに、もし、各鍵発行サーバ間で信頼関係がある場合であっても、鍵を発行するたびに、各鍵発行サーバの秘密鍵のデータベースにアクセスするため、各鍵発行サーバ間の通信量が大きくなる。このように各鍵発行サーバ間で互いにチェックすることも現実的でない。
【０３３４】
本発明の鍵発行サーバを用いると、素数の生成を複数回行っても、素数が一致しないことを比較することなく、証明できる。
３．１  変形例
本発明を上記の第１、第２実施の形態及び素数生成の変形例１、２、３に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
【０３３５】
（１）発行識別子情報「ＩＤＩ」は、サーバ識別子、端末識別子及び数「１」の連結からなるとしたが、これに限定されない。ＩＤＩはサーバ識別子と、カウンタにより生成される発行識別子「ＰＩＤ」とを用いて生成してもよい。ここで、発行識別子「ＰＩＤ」は、１から発行順に割り当てられた奇数である。このとき、識別子生成部１１５は、素数を発行（生成）するたびに、数「２」をインクリメントしていくことで、容易に毎回異なる素数を生成できることになる。
【０３３６】
（２）１２８ビットから２５６ビットの素数を生成する際に、単射関数を用いたが、これに限定されない。発行識別子情報を埋め込む前であれば、単射関数を施す動作は、どの段階でもよい。
例えば、８ビットの素数から１６ビットの素数を生成する際に、単射関数を施してもよい。または、１６ビットの素数から３２ビットの素数を生成する際に、単射関数を施してもよい。または、３２ビットの素数から６４ビットの素数を生成する際に、単射関数を施してもよい。または、６４ビットの素数から１２８ビットの素数を生成する際に、単射関数を施してもよい。
【０３３７】
ただし、発行識別子「ＩＤＩ」のビット数は、入力の用いられる素数「ｑ」のビット数よりも小さく、乱数「Ｒ１」のビット数は、（ｌｅｎｑ−ｌｅｎＩＤＩ−１）ビットであり、数「Ｒ」のビット数は、（ｌｅｎｑ−１）ビットである。
（３）第１の実施の形態における素数生成部１１６を、１つの素数生成装置としてもよい。このとき、素数生成装置は、発行識別子情報「ＩＤＩ」とそのビットサイズ「ｌｅｎＩＤＩ」が与えられた場合、与えられた「ＩＤＩ」及びそのビットサイズ「ｌｅｎＩＤＩ」と、予め記憶されている８ビットの素数とから、５１２ビットの素数を生成する。
【０３３８】
また、第２の実施の形態における素数生成部１１１６も同様に、１つの素数生成装置としてもよい。
（４）第１の実施の形態における素数生成部１１６を、予め記憶している８ビットの素数から１２８ビットの素数を生成する第１素数生成部と、１２８ビットの素数から５１２ビットの素数を生成する第２素数生成部とからなるとしてもよい。また、第１素数生成部及び第２素数生成部を、それぞれ個別の素数生成装置としてもよい。
【０３３９】
第１素数生成部は、従来と同様の方法にて、８ビットの素数から１２８ビットの素数を生成する。従来の方法については、特許文献１及び非特許文献３が詳しい。
以下に、第２素数生成部の構成の一例を、図３８に示す。ここでは、第２素数生成部を１つの素数生成装置２１００として説明する。素数生成装置２１００は、素数「ｑ１」と、そのビットサイズ「ｌｅｎｑ１」（ここでは、ビットサイズを１２８ビットとする。）と、発行識別子情報「ＩＤＩ」と、そのビットサイズ「ｌｅｎＩＤＩ」とが与えられた場合に、（４×ｌｅｎｑ１）ビットからなる素数「Ｎ」を出力する。なお、ここで示す素数生成装置２１００は、第１の実施の形態にて示す第１及び第２検証値を用いないで、素数「Ｎ」を生成する。
【０３４０】
素数生成装置２１００は、図３８に示すように、受付部２１０１、受付情報記憶部２１０２、素数シード生成部２１０３、乱数生成部２１０４、素数候補生成部２１０５、第１素数判定部２１０６及び第２素数判定部２１０７から構成されている。
素数生成装置２１００は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレィユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、素数生成装置２１００は、その機能を達成する。
【０３４１】
＜受付情報記憶部２１０２＞
受付情報記憶部２１０２は、素数「Ｎ」を生成する際に与えられた素数「ｑ１」、素数「ｑ１」のビットサイズ「ｌｅｎｑ１」、発行識別子情報「ＩＤＩ」及び発行識別子情報のビットサイズ「ｌｅｎＩＤＩ」を記憶する領域を備えている。
＜受付部２１０１＞
受付部２１０１は、素数「ｑ１」、素数「ｑ１」のビットサイズ「ｌｅｎｑ１（例えば、１２８ビット）」、発行識別子情報「ＩＤＩ」及び発行識別子情報のビットサイズ「ｌｅｎＩＤＩ」を、外部（例えば、上記に示す第１素数生成部）より受け付け、受け付けた素数「ｑ１」、そのビットサイズ「ｌｅｎｑ１」、発行識別子情報「ＩＤＩ」及びそのビットサイズ「ｌｅｎＩＤＩ」を受付情報記憶部２１０２へ書き込む。
【０３４２】
受付部２１０１は、受け付けた各情報を、素数シード生成部２１０３へ出力する。
＜素数シード生成部２１０３＞
素数シード生成部２１０３は、上記第１の実施の形態にて示す素数生成部１１６において、制御情報装が「情報Ｂ」の場合に行う動作と同様の動作を行うので、ここでの説明は省略する。なお、ここでは、１２８ビットの素数「ｑ１」から２５６ビットの素数「ｑ２」を生成するものとする。
【０３４３】
素数シード生成部２１０３、生成した素数「ｑ２」を素数候補生成部２１０５へ出力する。
＜乱数生成部２１０４＞
乱数生成部２１０４は、第１生成指示を、素数候補生成部２１０５から受け取ると、素数「ｑ１」のビットサイズ「ｌｅｎｑ１」と、発行識別子情報「ＩＤＩ」のビットサイズ「ｌｅｎＩＤＩ」とを、受付情報記憶部２１０２より読み出す。
【０３４４】
乱数生成部２１０４は、読み出したビットサイズ「ｌｅｎｑ１」及び「ｌｅｎＩＤＩ」を用いて、  （２×ｌｅｎｑ１−ｌｅｎＩＤＩ−１）ビットの乱数「Ｒ１」を生成する。ここで、乱数「Ｒ１」の最上位ビットは１とする。
乱数生成部２１０４は、生成した乱数「Ｒ１」を素数候補生成部２１０５へ出力する。
また、乱数生成部２１０４は、第１素数判定部２１０６及び第２素数判定部２１０７の何れかから、再度乱数を生成する旨の第２生成指示を受け付けると、各ビットサイズを読み出し、上記の動作を行う。
【０３４５】
＜素数候補生成部２１０５＞
素数候補生成部２１０５は、生成された数を記憶する生成情報記憶領域とを有している。
素数候補生成部２１０５は、素数シード生成部２１０３より素数「ｑ２」を受け取ると、第１生成指示を乱数生成部２１０４へ出力する。
【０３４６】
素数候補生成部２１０５は、乱数生成部２１０４より、乱数「Ｒ１」を受け取ると、受付情報記憶部２１０２にて記憶している発行識別子情報「ＩＤＩ」を読み出す。
素数候補生成部２１０５は、素数シード生成部２１０３より受け取った素数「ｑ２」、受付情報記憶部２１０２より読み出した発行識別子情報「ＩＤＩ」及び乱数生成部２１０４より受け取った乱数「Ｒ１」とを用いて、数「Ｒ＝ＩＤＩ×Ｒ１」と、数「Ｎ＝２×Ｒ×ｑ２＋１」とを生成する。
【０３４７】
素数候補生成部２１０５は、素数「ｑ１」のビットサイズ「ｌｅｎｑ１」を、受付情報記憶部２１０２より読み出し、生成した数「Ｎ」のビットサイズが「４×ｌｅｎｑ１」であるか否かを判断する。
「４×ｌｅｎｑ１」であると判断する場合には、素数候補生成部２１０５は、生成した数「Ｎ」を第１素数判定部２１０６へ出力し、生成した数「Ｒ」を生成情報記憶領域に記憶する。
【０３４８】
「４×ｌｅｎｑ１」でないと判断する場合には、素数候補生成部２１０５は、乱数生成部２１０４より受け取った乱数「Ｒ１」に２を掛けて、その結果を「Ｒ１」として、再度、上記の動作を行い、数  「Ｒ」及び「Ｎ」を生成する。
素数候補生成部２１０５は、数「Ｎ」のビットサイズが、「４×ｌｅｎｑ１」となるまで、上記の動作を繰り返す。
【０３４９】
＜第１素数判定部２１０６＞
第１素数判定部２１０６は、第１の実施の形態にて示す第１素数判定部１４３と同様の動作であるため、ここでの説明は省略する。
＜第２素数判定部２１０７＞
第２素数判定部２１０７は、第１の実施の形態にて示す第２素数判定部１４４と同様の動作であるため、ここでの説明は省略する。
【０３５０】
なお、第２素数判定部２１０７は、判定により、生成した数「Ｎ」が素数であると判断する場合には、生成した数「Ｎ」を素数「Ｎ」として出力する。
＜素数生成装置２１００の動作＞
以下に、素数生成装置２１００の動作について説明する。
（素数生成処理）
ここでは、素数生成装置２１００にて行われる素数生成処理について、図３９に示す流れ図を用いて、説明する。
【０３５１】
素数生成装置２１００は、受付部２１０１において、素数「ｑ１」、素数「ｑ１」のビットサイズ  「ｌｅｎｑ１」、発行識別子情報「ＩＤＩ」及び発行識別子情報のビットサイズ「ｌｅｎＩＤＩ」を受け付け、受け付けた各情報を受付情報記憶部２１０２へ書き込む（ステップＳ２０００）。
素数生成装置２１００は、素数シード生成部２１０３において、ステップＳ２０００にて受け付けた各情報を用いて、素数「ｑ２」を生成する（ステップＳ２００５）。
【０３５２】
素数生成装置２１００は、乱数生成部２１０４において、ステップＳ２０００にて受け付けたビットサイズ「ｌｅｎｑ１」及び「ｌｅｎＩＤＩ」を用いて、（２×ｌｅｎｑ１−ｌｅｎＩＤＩ−１）ビットの乱数「Ｒ１」を生成する（ステップＳ２０１０）。ここで、乱数「Ｒ１」の最上位ビットは１とする。
素数生成装置２１００は、素数候補生成部２１０５において、ステップＳ２０００にて受け付けられた発行識別子情報「ＩＤＩ」、ステップＳ２００５にて生成された素数「ｑ２」及びステップＳ２０１０にて生成された乱数「Ｒ１」とを用いて、素数候補生成処理を施すことにより、数「Ｒ」及び「Ｎ」を生成する（ステップＳ２０１５）。素数生成装置２１００は、第１素数判定部２１０６において、ステップＳ２０１５にて生成した数「Ｎ」を用いて、上記に示す式（ｅｑ１）が成立するか否かを判定する（ステップＳ２０２０）。
【０３５３】
式（ｅｑ１）が成立していると判断する場合には（ステップＳ２０２０における「ＹＥＳ」）、素数生成装置２１００は、第２素数判定部２１０７において、ステップＳ２０１５にて生成した数「Ｒ」と「Ｎ」とを用いて、上記に示す式（ｅｑ２）が成立するか否かを判定する（ステップＳ２０２５）。
式（ｅｑ２）が成立していると判断する場合には（ステップＳ２０２５における「ＹＥＳ」）、素数生成装置２１００は、数「Ｎ」を素数「Ｎ」として出力し、処理を終了する（ステップＳ２０３０）。
【０３５４】
式（ｅｑ１）が成立していないと判断する場合（ステップＳ２０２０における「ＮＯ」）、及び式  （ｅｑ２）が成立していないと判断する場合には（ステップＳ２０２５における「ＮＯ」）、ステップＳ２０１０に戻り、再度処理を行う。
（素数候補生成処理）
ここでは、素数生成処理のステップＳ２０１５にて行われる素数候補生成処理について、図４０に示す流れ図を用いて説明する。
【０３５５】
素数候補生成部２１０５は、素数生成処理のステップＳ２０００にて受け付けた発行識別子情報「ＩＤＩ」と、ステップＳ２０１０にて生成した乱数「Ｒ１」とを用いて、数「Ｒ」を生成する（ステップＳ２０５０）。ここで、数「Ｒ」は「Ｒ＝ＩＤＩ×Ｒ１」である。
素数候補生成部２１０５は、素数生成処理のステップＳ２００５にて生成された素数「ｑ２」と、ステップＳ２０５０にて生成された数「Ｒ」とを用いて、数「Ｎ」を生成する（ステップＳ２０５５）。ここで、数「Ｎ」は、「Ｎ＝２×Ｒ×ｑ２＋１」である。
【０３５６】
素数候補生成部２１０５は、生成した数「Ｎ」のビットサイズが「４×ｌｅｎｑ１」であるか否かを判断する（ステップＳ２０６０）。
「４×ｌｅｎｑ１」であると判断する場合には（ステップＳ２０６０における「ＹＥＳ」）、処理を終了する。「４×ｌｅｎｑ１」でないと判断する場合には（ステップＳ２０６０における「ＮＯ」）、素数生成処理のステップＳ２０１０にて生成した乱数「Ｒ１」に２を掛けて、その結果を「Ｒ１」として、ステップＳ２０５０へ戻る（ステップＳ２０６５）。
【０３５７】
＜その他＞
ここでは、生成する秘密鍵である素数のビットサイズは５１２ビットとしているが、これに限定されない。１０２４ビットであっても、２０４８ビットであってもよい。また、上記の第１素数生成部で生成する素数も同様に１２８ビットに限らない。
（５）上記に示す素数シード生成部２１０３を１つの素数生成装置としてもよい。以下に、この場合の素数生成装置２２００について、説明する。素数生成装置２２００は、素数「ｑ」と、そのビットサイズ「ｌｅｎｑ」（ここでは、ビットサイズを１２８ビットとする。）と、発行識別子情報「ＩＤＩ」と、そのビットサイズ「ｌｅｎＩＤＩ」とが与えられた場合に、（２×ｌｅｎｑ）ビットからなる素数「Ｎ」を出力する。
【０３５８】
素数生成装置２２００は、図４１に示すように、受付部２２０１、受付情報記憶部２２０２、乱数生成部２２０３、素数候補生成部２２０４、第１素数判定部２２０５及び第２素数判定部２２０６から構成されている。
素数生成装置２２００は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレィユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、素数生成装置２２００は、その機能を達成する。
【０３５９】
＜受付情報記憶部２２０２＞
受付情報記憶部２２０２は、素数「Ｎ」を生成する際に与えられた素数「ｑ」、素数「ｑ」のビットサイズ「ｌｅｎｑ」、発行識別子情報「ＩＤＩ」及び発行識別子情報のビットサイズ「ｌｅｎＩＤＩ」を記憶する領域を備えている。
＜受付部２２０１＞
受付部２２０１は、素数「ｑ」、素数「ｑ」のビットサイズ「ｌｅｎｑ」、発行識別子情報「ＩＤＩ」及び発行識別子情報のビットサイズ「ｌｅｎＩＤＩ」を、外部（例えば、上記に示す第１素数生成部）より受け付け、受付部２２０１は、受け付けた素数「ｑ」、そのビットサイズ「ｌｅｎｑ」、発行識別子情報「ＩＤＩ」及びそのビットサイズ「ｌｅｎＩＤＩ」を受付情報記憶部２２０２へ書き込む。
【０３６０】
受付部２２０１は、処理を開始する旨の開始指示を素数候補生成部２２０４へ出力する。
＜乱数生成部２２０３＞
乱数生成部２２０３は、乱数を生成する旨の第１生成指示を、素数候補生成部２２０４から受け取ると、素数「ｑ」のビットサイズ「ｌｅｎｑ」と、発行識別子情報「ＩＤＩ」のビットサイズ「ｌｅｎＩＤＩ」とを受付情報記憶部２２０２より読み出す。
【０３６１】
乱数生成部２２０３は、読み出したビットサイズ「ｌｅｎｑ」及び「ｌｅｎＩＤＩ」を用いて、（ｌｅｎｑ−ｌｅｎＩＤＩ−１）ビットの乱数「Ｒ１」を生成する。ここで、乱数「Ｒ１」の最上位ビットは１とする。乱数生成方法は、非特許文献２が詳しい。
乱数生成部２２０３は、生成した乱数「Ｒ１」を素数候補生成部２２０４へ出力する。
また、乱数生成部２２０３は、第１素数判定部２２０５及び第２素数判定部２２０６の何れかから、再度乱数を生成する旨の第２生成指示を受け付けると、各ビットサイズを読み出し、上記の動作を行う。
【０３６２】
＜素数候補生成部２２０４＞
素数候補生成部２２０４は、単射である関数「ｆ」を予め記憶している関数記憶領域と、関数「ｆ」を用いて生成された数を記憶する生成情報記憶領域とを有している。
素数候補生成部２２０４は、受付部２２０１より開始指示を受け取ると、第１生成指示を乱数生成部２２０３へ出力する。
【０３６３】
素数候補生成部２２０４は、乱数「Ｒ１」を乱数生成部２２０３より受け取ると、受付情報記憶部２２０２にて記憶している素数「ｑ」及び発行識別子情報「ＩＤＩ」を読み出す。
素数候補生成部２２０４は、関数記憶領域にて記憶している関数「ｆ」と、読み出した素数「ｑ」及び発行識別子情報「ＩＤＩ」と、乱数生成部２２０３より受け取った乱数「Ｒ１」とを用いて、数「Ｒ＝ｆ（ＩＤＩ｜｜Ｒ１）」と、数「Ｎ＝２×Ｒ×ｑ＋１」とを生成する。
【０３６４】
素数候補生成部２２０４は、生成した数「Ｎ」のビットサイズが「２×ｌｅｎｑ」であるか否かを判断する。
「２×ｌｅｎｑ」であると判断する場合には、素数候補生成部２２０４は、生成した数「Ｎ」を第１素数判定部２２０５へ出力し、生成した数「Ｒ」を生成情報記憶領域に記憶する。
【０３６５】
「２×ｌｅｎｑ」でないと判断する場合には、素数候補生成部２２０４は、乱数生成部２２０３より受け取った乱数「Ｒ１」に２を掛けて、その結果を「Ｒ１」として、再度、上記の動作を行い、上記の式を満たす数「Ｒ」及び「Ｎ」を生成する。
素数候補生成部２２０４は、生成した数「Ｎ」のビットサイズが、「２×ｌｅｎｑ」となるまで、上記の動作を繰り返す。
【０３６６】
＜第１素数判定部２２０５＞
第１素数判定部２２０５は、第１の実施の形態にて示す第１素数判定部１４３と同様の動作であるため、ここでの説明は省略する。
＜第２素数判定部２２０６＞
第２素数判定部２２０６は、第１の実施の形態にて示す第２素数判定部１４４と同様の動作であるため、ここでの説明は省略する。
【０３６７】
なお、第２素数判定部２２０６は、判定により、生成した数「Ｎ」が素数であると判断する場合には、生成した数「Ｎ」を素数「Ｎ」として出力する。
＜素数生成装置２２００の動作＞
以下に、素数生成装置２２００の動作について説明する。
（素数生成処理）
ここでは、素数生成装置２２００にて行われる素数生成処理について、図３９に示す流れ図を用いて、変更点のみ説明する。
【０３６８】
素数生成装置２２００は、ステップＳ２０００において、素数「ｑ」、素数「ｑ」のビットサイズ  「ｌｅｎｑ」、発行識別子情報「ＩＤＩ」及び発行識別子情報のビットサイズ「ｌｅｎＩＤＩ」を、ユーザ操作により受け付け、受け付けた各情報を受付情報記憶部２２０２へ書き込むように変更する。
素数生成装置２２００は、上記のように変更されたステップＳ２０００の実行後、ステップＳ２００５を省略し、以下のように変更されたステップＳ２０１０を実行する。素数生成装置２２００は、ステップＳ２０１０において、（ｌｅｎｑ−ｌｅｎＩＤＩ−１）ビットの乱数「Ｒ１」を生成するように変更する。
【０３６９】
以降の動作の流れは、図３９と同様であるため、説明は省略する。
（素数候補生成処理）
ここでは、素数候補生成処理について、図４０に示す流れ図を用いて、変更点のみ説明する。
先ず、ステップＳ２０５０を、数「Ｒ＝ｆ（ＩＤＩ｜｜Ｒ１）」を生成するように変更する。
【０３７０】
次に、ステップＳ２０５５を、数「Ｎ＝２×Ｒ×ｑ＋１」を生成するように変更する。
以降の動作の流れは、図４０と同様であるため、説明は省略する。
（６）素数生成変形例３における素数生成部１１６Ｃを、予め記憶している８ビットの素数から２５６ビットの素数を生成する第１素数生成部と、２５６ビットの素数から５１２ビットの素数を生成する第２素数生成部とからなるとしてもよい。また、第１素数生成部及び第２素数生成部を、それぞれ個別の素数生成装置としてもよい。
【０３７１】
第１素数生成部は、従来と同様の方法にて、８ビットの素数から２５６ビットの素数を生成する。
以下に、第２素数生成部の構成の一例を、図４２に示す。ここでは、第２素数生成部を１つの素数生成装置２３００として説明する。素数生成装置２３００は、素数「ｑ」と、そのビットサイズ「ｌｅｎｑ」（ここでは、ビットサイズを１２８ビットとする。）と、発行識別子情報「ＩＤＩ」と、そのビットサイズ「ｌｅｎＩＤＩ」とが与えられた場合に、（２×ｌｅｎｑ）ビットからなる素数「Ｎ」を出力する。なお、ここで示す素数生成装置２３００は、第１の実施の形態にて示す第１及び第２検証値を用いないで、素数「Ｎ」を生成する。
【０３７２】
素数生成装置２３００は、図４２にて示すように、受付部２３０１、受付情報記憶部２３０２、識別子素数生成部２３０３、乱数生成部２３０４、素数候補生成部２３０５、第１素数判定部２３０６及び第２素数判定部２３０７から構成されている。
素数生成装置２３００は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレィユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、素数生成装置２３００は、その機能を達成する。
【０３７３】
＜受付情報記憶部２３０２＞
受付情報記憶部２３０２は、素数「Ｎ」を生成する際に与えられた素数「ｑ」、素数「ｑ」のビットサイズ「ｌｅｎｑ」、発行識別子情報「ＩＤＩ」及び発行識別子情報のビットサイズ「ｌｅｎＩＤＩ」を記憶する領域を備えている。
＜受付部２３０１＞
受付部２３０１は、素数「ｑ」、素数「ｑ」のビットサイズ「ｌｅｎｑ」、発行識別子情報「ＩＤＩ」及び発行識別子情報のビットサイズ「ｌｅｎＩＤＩ」を、外部（例えば、第１の素数生成部）より受け付け、受け付けた素数「ｑ」、そのビットサイズ「ｌｅｎｑ」、発行識別子情報「ＩＤＩ」及びそのビットサイズ「ｌｅｎＩＤＩ」を受付情報記憶部２３０２へ書き込む。
【０３７４】
受付部２３０１は、処理を開始する旨の開始指示を、識別子素数生成部２３０３へ出力する。
＜識別子素数生成部２３０３＞
識別子素数生成部２３０３は、素数「ｑｇ」及びそのビットサイズ「ｌｅｎｑｇ」を予め記憶している。
【０３７５】
識別子素数生成部２３０３は、発行識別子「ＩＤＩ」と素数「ｑｇ」から一意的に素数を生成する素数生成関数「ｇｐ」と、単射の関数「ｆ」とを予め記憶している。
識別子素数生成部２３０３は、受付部２３０１より開始指示を受け取ると、発行識別子情報「ＩＤＩ」を、受付情報記憶部２３０２より読み出す。
識別子素数生成部２３０３は、予め記憶している素数「ｑｇ」及び素数生成関数「ｇｐ」と、読み出した発行識別子情報「ＩＤＩ」より、素数「ｐＩＤＩ＝ｇｐ（ＩＤＩ，ｑｇ）」を生成する。素数「ｐＩＤＩ」の生成方法は、素数生成の変形例３にて示す方法と同様であるため、説明は省略する。
【０３７６】
識別子素数生成部２３０３は、生成した素数「ｐＩＤＩ」を素数候補生成部２３０５へ出力する。
＜乱数生成部２３０４＞
乱数生成部２３０４は、第１生成指示を、素数候補生成部２３０５から受け取ると、素数「ｑ」のビットサイズ「ｌｅｎｑ」を、受付情報記憶部２３０２より読み出し、素数「ｑｇ」のビットサイズ「ｌｅｎｑｇ」を識別子素数生成部２３０３より読み出す。
【０３７７】
乱数生成部２３０４は、読み出したビットサイズ「ｌｅｎｑ」及び「ｌｅｎｑｇ」を用いて、（ｌｅｎｑ−２×ｌｅｎｑｇ−１）ビットの乱数「Ｒ」を生成する。ここで、乱数「Ｒ」の最上位ビットは１とする。
乱数生成部２３０４は、生成した乱数「Ｒ」を素数候補生成部２３０５へ出力する。
また、乱数生成部２３０４は、第１素数判定部２３０６及び第２素数判定部２３０７の何れかから、再度乱数を生成する旨の第２生成指示を受け付けると、各ビットサイズを読み出し、上記の動作を行う。
【０３７８】
＜素数候補生成部２３０５＞
素数候補生成部２３０５は、識別子素数生成部２３０３より素数「ｐＩＤＩ」を受け取ると、第１生成指示を乱数生成部２３０４へ出力する。
素数候補生成部２３０５は、乱数生成部２３０４より、乱数「Ｒ」を受け取ると、受付情報記憶部２３０２にて記憶している素数「ｑ」を読み出す。
【０３７９】
素数候補生成部２３０５は、識別子素数生成部２３０３より受け取った素数「ｐＩＤＩ」、受付情報記憶部２３０２より読み出した素数「ｑ」及び乱数生成部２３０４より受け取った乱数「Ｒ」とを用いて、「Ｎ＝２×Ｒ×ｑ×ｐＩＤＩ＋１」を生成する。
素数候補生成部２３０５は、素数「ｑ」のビットサイズ「ｌｅｎｑ」を、受付情報記憶部２３０２より読み出し、生成した数「Ｎ」のビットサイズが「２×ｌｅｎｑ」であるか否かを判断する。
【０３８０】
「２×ｌｅｎｑ」であると判断する場合には、素数候補生成部２３０５は、生成した数「Ｎ」を第１素数判定部２３０６へ出力し、乱数「Ｒ」を一時的に記憶する。
「２×ｌｅｎｑ」でないと判断する場合には、素数候補生成部２３０５は、乱数生成部２３０４より受け取った乱数「Ｒ」に２を掛けて、その結果を「Ｒ」として、再度、上記の動作を行い、数「Ｎ」を生成する。
【０３８１】
素数候補生成部２３０５は、数「Ｎ」のビットサイズが、「２×ｌｅｎｑ」となるまで、上記の動作を繰り返す。
＜第１素数判定部２３０６＞
第１素数判定部２３０６は、第１の実施の形態にて示す第１素数判定部１４３と同様の動作であるため、ここでの説明は省略する。
【０３８２】
＜第２素数判定部２３０７＞
第２素数判定部２３０７は、第１の実施の形態にて示す第２素数判定部１４４と同様の動作であるため、ここでの説明は省略する。
なお、第２素数判定部２３０７は、判定により、生成した数「Ｎ」が素数であると判断する場合には、生成した数「Ｎ」を素数「Ｎ」として出力する。
【０３８３】
＜素数生成装置２３００の動作＞
以下に、素数生成装置２３００の動作について説明する。
（素数生成処理）
ここでは、素数生成装置２３００にて行われる素数生成処理について、図３９に示す流れ図を用いて、変更点のみ説明する。
【０３８４】
素数生成装置２３００は、ステップＳ２０００において、素数「ｑ」、素数「ｑ」のビットサイズ  「ｌｅｎｑ」、発行識別子情報「ＩＤＩ」及び発行識別子情報のビットサイズ「ｌｅｎＩＤＩ」を、ユーザ操作により受け付け、受け付けた各情報を受付情報記憶部２２０２へ書き込むように変更する。
素数生成装置２３００は、ステップＳ２００５において、素数「ｐＩＤＩ」を生成するように変更する。
【０３８５】
素数生成装置２３００は、ステップＳ２０１０において、（ｌｅｎｑ−２×ｌｅｎｑｇ−１）ビットの乱数「Ｒ」を生成するように変更する。
以降の動作の流れは、図３９と同様であるため、説明は省略する。
（素数候補生成処理）
ここでは、素数候補生成処理について、図４０に示す流れ図を用いて、変更点のみ説明する。
【０３８６】
先ず、ステップＳ２０５０を、省略する。
次に、ステップＳ２０５５を、数「Ｎ＝２×Ｒ×ｑ×ｐＩＤＩ＋１」を生成するように変更する。
以降の動作の流れは、図４０と同様であるため、説明は省略する。
＜その他＞
ここでは、生成する秘密鍵である素数のビットサイズは５１２ビットとしているが、これに限定されない。１０２４ビットであっても、２０４８ビットであってもよい。また、上記の第１素数生成部で生成する素数も同様に２５６ビットに限らない。
【０３８７】
（７）第１の実施の形態における素数生成部１１６を、予め記憶している８ビットの素数から２５６ビットの素数を生成する第１素数生成部と、２５６ビットの素数から５１２ビットの素数を生成する第２素数生成部とからなるとしてもよい。また、第１素数生成部及び第２素数生成部を、それぞれ個別の素数生成装置としてもよい。
第１素数生成部は、従来と同様の方法にて、８ビットの素数から１２８ビットの素数を生成し、上記に示す素数生成装置２２００を適用して、１２８ビットの素数から２５６ビットの素数を生成する。
【０３８８】
以下に、第２素数生成部の構成の一例を、図４３に示す。ここでは、第２素数生成部を１つの素数生成装置２４００として説明する。素数生成装置２４００は、素数「ｑ」と、そのビットサイズ「ｌｅｎｑ」（ここでは、ビットサイズを２５６ビットとする。）と、発行識別子情報「ＩＤＩ」と、そのビットサイズ「ｌｅｎＩＤＩ」とが与えられた場合に、（２×ｌｅｎｑ）ビットからなる素数「Ｎ」を出力する。なお、ここで示す素数生成装置２４００は、第１の実施の形態にて示す第１及び第２検証値を用いないで、素数「Ｎ」を生成する。
【０３８９】
素数生成装置２４００は、図４３に示すように、受付部２４０１、受付情報記憶部２４０２、乱数生成部２４０３、素数候補生成部２４０４、第１素数判定部２４０５及び第２素数判定部２４０６から構成されている。
素数生成装置２４００は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレィユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、素数生成装置２４００は、その機能を達成する。
【０３９０】
＜受付情報記憶部２４０２＞
受付情報記憶部２４０２は、素数「Ｎ」を生成する際に与えられた素数「ｑ」、素数「ｑ」のビットサイズ「ｌｅｎｑ」、発行識別子情報「ＩＤＩ」及び発行識別子情報のビットサイズ「ｌｅｎＩＤＩ」を記憶する領域を備えている。
＜受付部２４０１＞
受付部２４０１は、素数「ｑ」、素数「ｑ」のビットサイズ「ｌｅｎｑ」、発行識別子情報「ＩＤＩ」及び発行識別子情報のビットサイズ「ｌｅｎＩＤＩ」を、外部（例えば、上記に示す第１素数生成部）より受け付け、受付部２４０１は、受け付けた素数「ｑ」、そのビットサイズ「ｌｅｎｑ」、発行識別子情報「ＩＤＩ」及びそのビットサイズ「ｌｅｎＩＤＩ」を受付情報記憶部２４０２へ書き込む。
【０３９１】
受付部２４０１は、処理を開始する旨の開始指示を素数候補生成部２４０４へ出力する。
＜乱数生成部２４０３＞
乱数生成部２４０３は、乱数を生成する旨の第１生成指示を、素数候補生成部２４０４から受け取ると、素数「ｑ」のビットサイズ「ｌｅｎｑ」と、発行識別子情報「ＩＤＩ」のビットサイズ「ｌｅｎＩＤＩ」とを受付情報記憶部２４０２より読み出す。
【０３９２】
乱数生成部２４０３は、読み出したビットサイズ「ｌｅｎｑ」及び「ｌｅｎＩＤＩ」を用いて、（ｌｅｎｑ−ｌｅｎＩＤＩ−１）ビットの乱数「Ｒ１」を生成する。ここで、乱数「Ｒ１」の最上位ビットは１とする。
乱数生成部２４０３は、生成した乱数「Ｒ１」を素数候補生成部２４０４へ出力する。
また、乱数生成部２４０３は、第１素数判定部２４０５及び第２素数判定部２４０６の何れかから、再度乱数を生成する旨の第２生成指示を受け付けると、各ビットサイズを読み出し、上記の動作を行う。
【０３９３】
＜素数候補生成部２４０４＞
素数候補生成部２４０４は、生成された数を記憶する生成情報記憶領域とを有している。
素数候補生成部２４０４は、受付部２４０１より開始指示を受け取ると、第１生成指示を乱数生成部２４０３へ出力する。
【０３９４】
素数候補生成部２４０４は、乱数「Ｒ１」を乱数生成部２４０３より受け取ると、受付情報記憶部２４０２にて記憶している素数「ｑ」及び発行識別子情報「ＩＤＩ」を読み出す。
素数候補生成部２４０４は、読み出した素数「ｑ」及び発行識別子情報「ＩＤＩ」と、乱数生成部２４０３より受け取った乱数「Ｒ１」とを用いて、数「Ｒ＝ＩＤＩ×Ｒ１」と、数「Ｎ＝２×Ｒ×ｑ＋１」とを生成する。
【０３９５】
素数候補生成部２４０４は、生成した数「Ｎ」のビットサイズが「２×ｌｅｎｑ」であるか否かを判断する。
「２×ｌｅｎｑ」であると判断する場合には、素数候補生成部２４０４は、生成した数「Ｎ」を第１素数判定部２４０５へ出力し、生成した数「Ｒ」を生成情報記憶領域に記憶する。
【０３９６】
「２×ｌｅｎｑ」でないと判断する場合には、素数候補生成部２４０４は、乱数生成部２４０３より受け取った乱数「Ｒ１」に２を掛けて、その結果を「Ｒ１」として、再度、上記の動作を行い、数「Ｒ」及び「Ｎ」を生成する。
素数候補生成部２４０４は、生成した数「Ｎ」のビットサイズが、「２×ｌｅｎｑ」となるまで、上記の動作を繰り返す。
【０３９７】
＜第１素数判定部２４０５＞
第１素数判定部２４０５は、第１の実施の形態にて示す第１素数判定部１４３と同様の動作であるため、ここでの説明は省略する。
＜第２素数判定部２４０６＞
第２素数判定部２４０６は、第１の実施の形態にて示す第２素数判定部１４４と同様の動作であるため、ここでの説明は省略する。
【０３９８】
なお、第２素数判定部２４０６は、判定により、生成した数「Ｎ」が素数であると判断する場合には、生成した数「Ｎ」を素数「Ｎ」として出力する。
＜素数生成装置２４００の動作＞
以下に、素数生成装置２４００の動作について説明する。
（素数生成処理）
ここでは、素数生成装置２４００にて行われる素数生成処理について、図３９に示す流れ図を用いて、変更点のみ説明する。
【０３９９】
素数生成装置２４００は、ステップＳ２０００において、素数「ｑ」、素数「ｑ」のビットサイズ  「ｌｅｎｑ」、発行識別子情報「ＩＤＩ」及び発行識別子情報のビットサイズ「ｌｅｎＩＤＩ」を受け付け、受け付けた各情報を受付情報記憶部２４０２へ書き込むように変更する。
素数生成装置２４００は、上記のように変更されたステップＳ２０００の実行後、ステップＳ２００５を省略し、以下のように変更されたステップＳ２０１０を実行する。素数生成装置２４００は、ステップＳ２０１０において、（ｌｅｎｑ−ｌｅｎＩＤＩ−１）ビットの乱数「Ｒ１」を生成するように変更する。
【０４００】
以降の動作の流れは、図３９と同様であるため、説明は省略する。
（素数候補生成処理）
ここでは、素数候補生成処理について、図４０に示す流れ図を用いて、変更点のみ説明する。
先ず、ステップＳ２０５０を、数「Ｒ＝ＩＤＩ×Ｒ１」を生成するように変更する。
【０４０１】
次に、ステップＳ２０５５を、数「Ｎ＝２×Ｒ×ｑ＋１」を生成するように変更する。
以降の動作の流れは、図４０と同様であるため、説明は省略する。
（８）第１の実施の形態における素数生成部１１６を、予め記憶している８ビットの素数から２５６ビットの素数を生成する第１素数生成部と、２５６ビットの素数から５１２ビットの素数を生成する第２素数生成部とからなるとしてもよい。また、第１素数生成部及び第２素数生成部を、それぞれ個別の素数生成装置としてもよい。
【０４０２】
第１素数生成部は、従来と同様の方法にて、８ビットの素数から１２８ビットの素数を生成し、上記に示す素数生成装置２２００を適用して、１２８ビットの素数から２５６ビットの素数を生成する。
以下に、第２素数生成部の構成の一例を、図４４に示す。ここでは、第２素数生成部を１つの素数生成装置２５００として説明する。素数生成装置２５００は、素数「ｑ」と、そのビットサイズ「ｌｅｎｑ」（ここでは、ビットサイズを２５６ビットとする。）と、発行識別子情報「ＩＤＩ」と、そのビットサイズ「ｌｅｎＩＤＩ」と、検証値「ｃ」が与えられた場合に、（２×ｌｅｎｑ）ビットからなる素数「Ｎ」を出力する。
【０４０３】
素数生成装置２５００は、図４４に示すように、受付部２５０１、受付情報記憶部２５０２、乱数生成部２５０３、素数候補生成部２５０４、第１素数判定部２５０５及び第２素数判定部２５０６から構成されている。
素数生成装置２５００は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレィユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭ又は前記ハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、素数生成装置２５００は、その機能を達成する。
【０４０４】
＜受付情報記憶部２５０２＞
受付情報記憶部２５０２は、素数「Ｎ」を生成する際に与えられた素数「ｑ」、素数「ｑ」のビットサイズ「ｌｅｎｑ」、発行識別子情報「ＩＤＩ」、発行識別子情報のビットサイズ「ｌｅｎＩＤＩ」及び検証値「ｃ」を記憶する領域を備えている。
＜受付部２５０１＞
受付部２５０１は、素数「ｑ」、素数「ｑ」のビットサイズ「ｌｅｎｑ」、発行識別子情報「ＩＤＩ」、発行識別子情報のビットサイズ「ｌｅｎＩＤＩ」及び検証値「ｃ」を、外部（例えば、上記に示す第１素数生成部）より受け付け、受付部２５０１は、受け付けた素数「ｑ」、そのビットサイズ「ｌｅｎｑ」、発行識別子情報「ＩＤＩ」、そのビットサイズ「ｌｅｎＩＤＩ」及び検証値「ｃ」を受付情報記憶部２５０２へ書き込む。
【０４０５】
受付部２５０１は、処理を開始する旨の開始指示を素数候補生成部２５０４へ出力する。
＜乱数生成部２５０３＞
乱数生成部２５０３は、乱数を生成する旨の第１生成指示を、素数候補生成部２５０４から受け取ると、素数「ｑ」のビットサイズ「ｌｅｎｑ」と、発行識別子情報「ＩＤＩ」のビットサイズ「ｌｅｎＩＤＩ」とを受付情報記憶部２５０２より読み出す。
【０４０６】
乱数生成部２５０３は、読み出したビットサイズ「ｌｅｎｑ」及び「ｌｅｎＩＤＩ」を用いて、（ｌｅｎｑ−ｌｅｎＩＤＩ−１）ビットの乱数「Ｒ１」を生成する。ここで、乱数「Ｒ１」の最上位ビットは１とする。
乱数生成部２５０３は、生成した乱数「Ｒ１」を素数候補生成部２５０４へ出力する。
また、乱数生成部２５０３は、第１素数判定部２５０５及び第２素数判定部２５０６の何れかから、再度乱数を生成する旨の第２生成指示を受け付けると、各ビットサイズを読み出し、上記の動作を行う。
【０４０７】
＜素数候補生成部２５０４＞
素数候補生成部２５０４は、生成された数を記憶する生成情報記憶領域とを有している。
素数候補生成部２５０４は、受付部２５０１より開始指示を受け取ると、第１生成指示を乱数生成部２５０３へ出力する。
【０４０８】
素数候補生成部２５０４は、乱数「Ｒ１」を乱数生成部２５０３より受け取ると、受付情報記憶部２５０２にて記憶している素数「ｑ」、発行識別子情報「ＩＤＩ」及び検証値「ｃ」を読み出す。
素数候補生成部２５０４は、読み出した素数「ｑ」、発行識別子情報「ＩＤＩ」及び検証値「ｃ」と、乱数生成部２５０３より受け取った乱数「Ｒ１」とを用いて、数「Ｒ＝ＩＤＩ×Ｒ１」と、数「Ｎ＝２×（Ｒ＋ｗ）×ｑ＋１」とを生成する。
【０４０９】
ここで、「ｗ」は「２×ｗ×ｑ＋１＝ｃ  ｍｏｄ  ＩＤＩ、０≦ｗ＜ＩＤＩ」を満たす数である。  「ｗ」は、「ｗ＝（ｃ−１）×ｍ  ｍｏｄ  ＩＤＩ」を計算することにより求める。「ｍ」は「（２×ｑ）×ｍ＝１  ｍｏｄ  ＩＤＩ」を満たす数である。
素数候補生成部２５０４は、生成した数「Ｎ」のビットサイズが「２×ｌｅｎｑ」であるか否かを判断する。
【０４１０】
「２×ｌｅｎｑ」であると判断する場合には、素数候補生成部２５０４は、生成した数「Ｎ」を第１素数判定部２５０５へ出力し、生成した数「Ｒ」を生成情報記憶領域に記憶する。
「２×ｌｅｎｑ」でないと判断する場合には、素数候補生成部２５０４は、乱数生成部２５０３より受け取った乱数「Ｒ１」に２を掛けて、その結果を「Ｒ１」として、再度、上記の動作を行い、数「Ｒ」及び「Ｎ」を生成する。
【０４１１】
素数候補生成部２５０４は、生成した数「Ｎ」のビットサイズが、「２×ｌｅｎｑ」となるまで、上記の動作を繰り返す。
＜第１素数判定部２５０５＞
第１素数判定部２５０５は、第１の実施の形態にて示す第１素数判定部１４３と同様の動作であるため、ここでの説明は省略する。
【０４１２】
＜第２素数判定部２５０６＞
第２素数判定部２５０６は、第１の実施の形態にて示す第２素数判定部１４４と同様の動作であるため、ここでの説明は省略する。
なお、第２素数判定部２５０６は、判定により、生成した数「Ｎ」が素数であると判断する場合には、生成した数「Ｎ」を素数「Ｎ」として出力する。
【０４１３】
＜素数生成装置２５００の動作＞
以下に、素数生成装置２４００の動作について説明する。
（素数生成処理）
ここでは、素数生成装置２５００にて行われる素数生成処理について、図３９に示す流れ図を用いて、変更点のみ説明する。
【０４１４】
素数生成装置２５００は、ステップＳ２０００において、素数「ｑ」、素数「ｑ」のビットサイズ  「ｌｅｎｑ」、発行識別子情報「ＩＤＩ」、発行識別子情報のビットサイズ「ｌｅｎＩＤＩ」及び検証値「ｃ」を受け付け、受け付けた各情報を受付情報記憶部２５０２へ書き込むように変更する。
素数生成装置２５００は、上記のように変更されたステップＳ２０００の実行後、ステップＳ２００５を省略し、以下のように変更されたステップＳ２０１０を実行する。素数生成装置２５００は、ステップＳ２０１０において、（ｌｅｎｑ−ｌｅｎＩＤＩ−１）ビットの乱数「Ｒ１」を生成するように変更する。
【０４１５】
以降の動作の流れは、図３９と同様であるため、説明は省略する。
（素数候補生成処理）
ここでは、素数候補生成処理について、図４０に示す流れ図を用いて、変更点のみ説明する。
先ず、ステップＳ２０５０を、数「Ｒ＝ＩＤＩ×Ｒ１」を生成するように変更する。
【０４１６】
次に、ステップＳ２０５５を、数「Ｎ＝２×（Ｒ＋ｗ）×ｑ＋１」を生成するように変更する。
以降の動作の流れは、図４０と同様であるため、説明は省略する。
（９）上記第１の実施の形態において、素数生成部１１６は、単射関数「ｆ」を施し、その後、発行識別子情報「ＩＤＩ」の埋め込みを行ったが、単射関数「ｆ」を施すだけでもよいし、発行識別子情報「ＩＤＩ」の埋め込みのみを行ってもよい。
【０４１７】
単射関数を施しただけの場合には、生成される素数は一意性が満たされる。このとき、単射関数を施すタイミングは、いつでもよい。
発行識別子情報「ＩＤＩ」の埋め込みのみを行う場合には、生成された素数の一意性は満たされないが、生成された鍵の正当性の確認は、「ＩＤＩ」を用いて行うことができる。なお、発行識別子情報  「ＩＤＩ」の埋め込みのみを行う場合は、２５６ビットの素数から５１２ビットの素数を生成するタイミングに行う。
【０４１８】
また、第２の実施の形態においても同様である。
（１０）上記第１及び第２の実施の形態において、制御情報が「情報Ｂ」である場合に、素数生成部１１６は、単射関数を施し、数「Ｒ＝ｆ（ＩＤＩ｜｜Ｒ１）」を生成したが、これに限定されない。
例えば、制御情報が「情報Ｂ」である場合に、素数生成部１１６は、数「Ｒ＝ｆ（Ｒ１｜｜ＩＤＩ）」を生成してもよいし、数「Ｒ＝ｆ（ＩＤＩ）｜｜Ｒ１」を生成してもよし、数「Ｒ＝Ｒ１｜｜ｆ（ＩＤＩ）」を生成してもよい。
【０４１９】
また、単射関数を用いないで、数「Ｒ＝（ＩＤＩ｜｜Ｒ１）」を生成してもよいし、数「Ｒ＝Ｒ１｜｜ＩＤＩ」を生成してもよい。
また、発行識別子情報「ＩＤＩ」のビット列に、乱数「Ｒ１」を構成する各ビットを埋め込み、埋め込んだ結果（以下、「ＩＤＩ＿Ｒ１」という。）に単射関数「ｆ」を施して数「Ｒ」を生成してもよい。
【０４２０】
その一例を図４５に示す。発行識別子情報「ＩＤＩ」は、上述したように具体的には、６４ビットからなり、そのビット列を「Ｓ1Ｓ2Ｓ3Ｓ4・・・Ｓ62Ｓ63Ｓ64」とする。乱数「Ｒ１」は、具体的には、６３ビットからなり、そのビット列を「Ｔ1Ｔ2Ｔ3Ｔ4・・・Ｔ61Ｔ62Ｔ63」とする。ここで、「Ｓn」 及び「Ｔm」は、「０」及び「１」の何れかである。なお、「ｎ」は１以上６４以下の数であり、「ｍ 」は１以上６３以下の数である。このとき、数「ＩＤＩ＿Ｒ１」のビット列は、「Ｓ1Ｔ1Ｓ2Ｔ2Ｓ3Ｔ3S4Ｔ4・・・Ｔ61Ｓ62Ｔ62Ｓ63Ｔ63Ｓ64」となる。
【０４２１】
なお、一例では、発行識別子情報「ＩＤＩ」のビット列に対して、１ビット置きに、乱数「Ｒ１」の各ビットを埋め込んだが、これに限定されない。発行識別子情報「ＩＤＩ」のビット列に対して、複数ビット置きに、乱数「Ｒ１」の各ビットを埋め込んで、数「ＩＤＩ＿Ｒ１」を生成してもよい。このとき、「ＩＤＩ」のビット列の間に埋め込まれないビット全てを、「ＩＤＩ」のビット列における末尾のビット以降に、結合して、「ＩＤＩ＿Ｒ１」を生成する。
【０４２２】
また、乱数「Ｒ１」のビット列に対して、発行識別子情報「ＩＤＩ」の各ビットを埋め込んで、数  「ＩＤＩ＿Ｒ１」を生成してもよい。例えば、１ビット置きに埋め込む場合には、数「ＩＤＩ＿Ｒ１」のビット列は、「Ｔ1Ｓ1Ｔ2Ｓ2Ｔ3Ｓ3Ｔ4Ｓ4・・・Ｔ62Ｓ62Ｔ63Ｓ63Ｓ64」となる。
また、発行識別子情報「ＩＤＩ」と乱数「Ｒ１」とから、数「ＩＤＩ＿Ｒ１」を生成し、生成した数「ＩＤＩ＿Ｒ１」に単射関数「ｆ」を施して数「Ｒ」を生成したが、これに限定されない。数「Ｒ」は、「Ｒ＝ＩＤＩ＿Ｒ１」としてもよい。
【０４２３】
（１１）上記第１の実施の形態において、制御情報が「情報Ａ」である場合に、素数生成部１１６は、発行識別子情報「ＩＤＩ」の埋め込みを行ったが、埋め込む情報は、「ＩＤＩ」に限定されない。
例えば、鍵発行サーバ１００と証明書発行サーバ２００とだけが既知の秘密関数であり、且つ１対１の関数である「ｇ」を用いた値であってもよい。このとき、「ＩＤＩ」の代わりに埋め込む値は、「ｇ（ＩＤＩ）」である。
【０４２４】
また、第２の実施の形態においても同様である。
（１２）上記第１の実施の形態において、鍵発行サーバ１００と端末装置３００との間に、安全な通信経路を確立して、鍵発行サーバ１００から端末装置３００へ、秘密鍵及び公開鍵の送付を行ったが、これに限定されない。
例えば、端末装置３００の製造時に、鍵発行サーバ１００と端末装置３００とを、入出力装置を介して、秘密鍵及び公開鍵の送付を行ってもよい。
【０４２５】
また、第２の実施の形態においても同様である。
（１３）上記第１及び第２の実施の形態において、端末装置の具体例として、携帯電話機としたが、これに限定されない。
暗号化されたデータをネットワークを介して受信し、復号できる端末装置であればよい。
【０４２６】
例えば、パーソナルコンピュータや、ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔｓ）である。
（１４）上記第１及び第２の実施の形態において、発行識別子情報「ＩＤＩ」は、奇数であるとしたが、素数生成に検証値を用いない場合には、発行識別子情報「ＩＤＩ」は、奇数でなくてもよい。
【０４２７】
このとき、サーバ識別子と、カウンタにより、１から順に生成される発行識別子「ＰＩＤ」とを用いて生成する場合には、このとき、識別子生成部１１５は、素数を発行（生成）するたびに、数「１」をインクリメントしていくことで、容易に毎回異なる素数を生成できることになる。
（１５）第１及び第２の実施の形態にて、生成する秘密鍵である素数のビットサイズは５１２ビットに限らない。１０２４ビットであっても、２０４８ビットであってもよい。このとき、素数生成部１１６は、秘密鍵である素数のビットサイズ（ここでは、「ｌｅｎＮ」とする。）に対して、（ｌｅｎＮ／４）ビットからなる素数を、従来の素数の生成方法により生成し、その後、単射関数「ｆ」を施して、（ｌｅｎＮ／２）ビットからなる素数を生成し、最後に、発行識別子情報「ＩＤＩ」を埋め込んだ「ｌｅｎＮ」ビットからなる素数「Ｎ」を生成する。
【０４２８】
なお、発行識別子情報「ＩＤＩ」の埋め込みのみを行う場合には、素数生成部は、（ｌｅｎＮ／２）ビットからなる素数を、従来の素数の生成方法により生成し、最後に、発行識別子情報「ＩＤＩ」を埋め込んだ「ｌｅｎＮ」ビットからなる素数「Ｎ」を生成する。
また、単射関数「ｆ」を施し、一意な素数を生成するのみの場合は、（ｌｅｎＮ／２）ビットからなる素数を、従来の素数の生成方法により生成し、その後、単射関数「ｆ」を施して、「ｌｅｎＮ」ビットからなる素数を生成する。
【０４２９】
（１６）第１の実施の形態における素数生成部１１６を、１つの素数生成装置としてもよい。このとき、この素数生成装置は、整数ｌｅｎと発行識別子情報ＩＤＩを入力とし、ｌｅｎビットの素数を出力するとしてもよい。
また、上述したように、第１実施の形態における素数生成部１１６は、素数情報生成部１３３の代わりに、素数生成の変形例１、２及び３にて示す素数情報生成部１３３Ａ、素数情報生成部１３３Ｂ及び素数情報生成部１３３Ｃの何れかを用いてもよい。
【０４３０】
また、第１実施の形態における素数生成部１１６は、８ビットの素数から５１２ビットの素数を生成する際に、発行識別子情報「ＩＤＩ」を埋め込まないで、単射関数「ｆ」を１回のみ施してもよい。このとき、証明書発行サーバ２００では、証明書発行依頼情報と、公開鍵を受け取ると、正当性の確認を行わないで、公開鍵証明書「Ｃｅｒｔ」を発行する。
【０４３１】
（１７）素数に発行識別子情報を含ませる方法は、実施の形態に限らない。例えば、下位ｌｅｎＩＤＩビットがＩＤＩである素数を生成・発行するとしてもよい。
（１８）鍵発行サーバは３台に限定されない。鍵発行サーバは１台以上であればよい。このとき、各鍵発行サーバにて行う素数の生成方法は、同一の方法を用いる。
（１９）第１の実施の形態における第２素数判定部１４４は、素数の判定に用いる条件式は、上記に示す（ｅｑ２）に限定されない。
【０４３２】
条件式「ＧＣＤ（２＾（２Ｒ）−１、Ｎ）＝１」を用いて、第２素数判定部１４４は、第１素数判定部１４３より受け取った数「Ｎ」が、当該条件式を満たすか否かを判断し、満たすと判断する場合に、数「Ｎ」を素数「Ｎ」としてもよい。
（２０）第１の実施の形態において、鍵発行サーバ１００は、端末装置３００へ秘密鍵と公開鍵証明書を配布したが、これに限定されない。鍵発行サーバ１００は、端末装置３００へ秘密鍵のみを配布してもよい。このとき、鍵発行サーバ１００は、公開鍵証明書を第三者に対して、公開する。または、鍵発行サーバ１００は、公開鍵を第三者に対して、公開する。
【０４３３】
（２１）第１の実施の形態において、素数生成部１１６は、出力カウンタ１３６にて、鍵判定部１１７へ出力した素数の個数を管理したが、これに限定されない。
鍵判定部１１７にて、受け取った素数の個数をカウントしてもよい。この場合の一例を、以下に示す。
素数生成部１１６は、識別子生成部１１５から素数の生成開始命令を受け取ると、素数「ｐ１」を生成し、生成した素数「ｐ１」を鍵判定部１１７へ出力する。素数生成部１１６は、鍵判定部１１７から次の素数の要求を受け取ると、素数「ｐ２」を生成し、生成した素数「ｐ２」を鍵判定部１１７へ出力する。なお、素数「ｐ１」及び「ｐ２」の生成は、第１の実施の形態と同様であるため、説明は省略する。
【０４３４】
鍵判定部１１７は、カウンタ（初期値は「０」である。）を用いて、素数生成部１１６より素数を受け取ると、カウンタに「１」をインクリメントし、その結果が、１であるか否かを判断する。１であると判断する場合には、鍵判定部１１７は、素数生成部１１６へ、次の素数を要求する。１でないと判断する場合には、鍵判定部１１７は、素数「ｐ１」と「ｐ２」とが、一致するか否かの判断を行う。以降の動作は、第１の実施の形態と同様であるため、説明は省略する。
【０４３５】
（２２）上記第１及び第２の実施の形態において、発行識別子情報「ＩＤＩ」のビットサイズを６４ビットとしたが、これに限定されない。（ｌｅｎｑ−１）よりも小さいビットサイズであればよい。
また、素数生成の変形例３において、素数「ｑｇ」のビットサイズを６４ビットとしたが、これに限定されない。素数「ｑｇ」は、ビットサイズ「ｌｅｎｑｇ」が「（２×ｌｅｎｑｇ）＜（ｌｅｎｑ−１）」を満たす素数であればよい。このとき、発行識別子情報は、そのビットサイズが、素数「ｑｇ」のビットサイズより小さければよい。
【０４３６】
（２３）証明書発行サーバ２００の発行公開鍵確認部２１４において、公開鍵「ＰＫ＝（ｎ、ｅ）」が、発行識別子情報「ＩＤＩ」を用いて生成されたか否かを確認する方法について、「ｎ−（ｃ１１×ｃ１２）」が、「ＩＤＩ」で割り切れるか否かを検証するとしている。ここで、検証方法の具体例を示す。
検証方法の具体的な動作の流れを、図４６に示す流れ図を用いて説明する。
【０４３７】
発行公開鍵確認部２１４は、数「ｎ−（ｃ１１×ｃ１２）」を「Ｑ」とする（ステップＳ２５００）。
次に、発行公開鍵確認部２１４は、「Ｑ−ＩＤＩ」を算出し、算出結果を、再度、「Ｑ」とする（ステップＳ２５０５）。
発行公開鍵確認部２１４は、数「Ｑ」が、発行識別子情報「ＩＤＩ」より小さいか否かを判断する  （ステップＳ２５１０）。
【０４３８】
小さいと判断する場合には（ステップＳ２５１０における「ＹＥＳ」）、発行公開鍵確認部２１４は、数「Ｑ」が「０」であるか否かを判断する（ステップＳ２５１５）。
「０」であると判断する場合には（ステップＳ２５１５における「ＹＥＳ」）、検証結果「０」を出力する（ステップＳ２５２０）。「０」でないと判断する場合には（ステップＳ２５１５における「ＮＯ」）、検証結果「１」を出力する（ステップＳ２５２５）。
【０４３９】
数「Ｑ」が、発行識別子情報「ＩＤＩ」以上であると判断する場合には（ステップＳ２５１０における「ＮＯ」）、ステップＳ２５０５へ戻る。
この動作により、公開鍵「ＰＫ＝（ｎ、ｅ）」が、発行識別子情報「ＩＤＩ」を用いて生成されたか否かを確認することができる。
発行公開鍵確認部２１４は、図１８に示すステップＳ６７０にて、上記の検証処理を実行後、出力された検証結果が「０」である場合には、公開鍵「ＰＫ」は発行識別子情報「ＩＤＩ」を用いて生成されたと判断し、検証結果が「１」である場合には、公開鍵「ＰＫ」は発行識別子情報「ＩＤＩ」を用いて生成されていないと判断する。
【０４４０】
（２４）素数候補生成部１４２にて生成された数「Ｎ」が、「ｌｅｎＮ＝２×ｌｅｎｑ」を満たさない場合、「Ｒ１＝２×Ｒ１」としているが、その演算の具体例を以下に示す。
素数候補生成部１４２は、生成された数「Ｎ」が、「ｌｅｎＮ＝２×ｌｅｎｑ」を満たさない場合には、数「Ｒ１」のビット列を、左に１ビット分だけシフトする。このとき、末尾のビットには「０」が設定される。これにより、「Ｒ１＝２×Ｒ１」とすることできる。
【０４４１】
（２５）第１及び第２の実施の形態において、数「Ｎ」を算出する際に、「Ｎ＝２×（Ｒ＋ｗ）×ｑ＋１」としたが、これに限定されない。「Ｎ＝２×Ｒ×ｑ＋ｃ」としてもよい。
なぜなら、上記の実施の形態にて示した「ｗ」及び「ｍ」の条件式「ｗ＝（ｃ−１）×ｍ  ｍｏｄ  ＩＤＩ」と、「（２×ｑ）×ｍ＝１  ｍｏｄ  ＩＤＩ」とを用いると、「Ｎ＝２×（Ｒ＋ｗ）×ｑ＋１」は、以下のように変形することができるからである。
【０４４２】
２×（Ｒ＋ｗ）×ｑ＋１＝２×Ｒ×ｑ＋２×ｗ×ｑ＋１
＝２×Ｒ×ｑ＋２×（ｃ−１）×ｍ×ｑ＋１
＝２×Ｒ×ｑ＋2×（ｃ−１）×（１／２ｑ）×ｑ＋１
＝２×Ｒ×ｑ＋（ｃ−１）＋１
＝２×Ｒ×ｑ＋ｃ
これにより、「Ｎ＝２×（Ｒ＋ｗ）×ｑ＋１」の代わりに、「Ｎ＝２×Ｒ×ｑ＋ｃ」としてもよいことがわかる。
【０４４３】
なお、「ｃ」は検証値であり、出力カウンタの値が「１」の場合には、検証値「ｃ」は、「ｃ１１」となり、出力カウンタの値が「２」以上の場合には、検証値「ｃ」は、「ｃ１２」となる。例えば、第１の実施の形態における証明書発行サーバ２００は、「Ｎ−ｃ１１×ｃ１２」が、「ＩＤＩ」で割り切れるか否かを判断することにより、生成された公開鍵の正当性を確認することができる。
【０４４４】
（２６）第１の実施の鍵発行システム１において、鍵発行サーバにて生成された素数の正当性を検証する素数検証装置を加えてもよい。
この場合における素数検証装置及び鍵発行サーバ１００の動作について、以下に説明する。
素数検証装置は、証明書発行サーバと同様に、検証値テーブルを予め記憶している。
【０４４５】
鍵発行サーバ１００は、素数生成部１１６にて素数「ｐ１」を生成すると、生成した素数「ｐ１」、発行識別子情報「ＩＤＩ」及びサーバ識別子を、素数検証装置へ出力する。
素数検証装置は、鍵発行サーバ１００より、素数「ｐ１」、発行識別子情報「ＩＤＩ」及びサーバ識別子を受け取ると、受け取ったサーバ識別子に対応する第１検証値「ｃ１１」を読み出し、読み出した第１検証値「ｃ１１」を用いて、「ｐ１−ｃ１１」を算出し、算出結果が、「ＩＤＩ」で割り切れるか否かを判断する。割り切れると判断する場合には、素数検証装置は、素数「ｐ１」の利用を許可する情報を鍵発行サーバ１００へ出力する。割り切れないと判断する場合には、素数「ｐ１」の利用を禁止する情報を鍵発行サーバ１００へ出力する。
【０４４６】
鍵発行サーバ１００の素数生成部１１６は、素数検証装置から、素数「ｐ１」の利用を禁止する情報を受け取ると、再度、素数「ｐ１」を生成して、上記動作を繰り返す。
鍵発行サーバ１００の素数生成部１１６は、素数検証装置から、素数「ｐ１」の利用を許可する情報を受け取ると、生成した素数「ｐ１」を鍵判定部１１７へ出力し、素数「ｐ２」を生成する。素数生成部１１６は、生成した素数「ｐ２」、発行識別子情報「ＩＤＩ」及びサーバ識別子を、素数検証装置へ出力する。
【０４４７】
素数検証装置は、鍵発行サーバ１００より、素数「ｐ２」、発行識別子情報「ＩＤＩ」及びサーバ識別子を受け取ると、受け取ったサーバ識別子に対応する第２検証値「ｃ１２」を読み出し、読み出した第１検証値「ｃ１２」を用いて、「ｐ１−ｃ１２」を算出し、算出結果が、「ＩＤＩ」で割り切れるか否かを判断する。割り切れると判断する場合には、素数検証装置は、素数「ｐ２」の利用を許可する情報を鍵発行サーバ１００へ出力する。割り切れないと判断する場合には、素数「ｐ２」の利用を禁止する情報を鍵発行サーバ１００へ出力する。
【０４４８】
鍵発行サーバ１００の素数生成部１１６は、素数検証装置から、素数「ｐ２」の利用を禁止する情報を受け取ると、再度、素数「ｐ２」を生成して、上記動作を繰り返す。
鍵発行サーバ１００の素数生成部１１６は、素数検証装置から、素数「ｐ２」の利用を許可する情報を受け取ると、生成した素数「ｐ２」と判定開始命令とを鍵判定部１１７へ出力する。
【０４４９】
鍵発行サーバ１００における以降の動作は、第１の実施の形態と同様であるため、説明は省略する。
なお、素数生成部１１６は、鍵判定部１１７より再生成命令を受け取った場合には、再度素数「ｐ２」を生成し、上記の動作を繰り返す。
（２７）第１及び第２の実施の形態において、第１及び第２検証値は、鍵発行サーバ毎に割り当てたが、これに限定されない。
【０４５０】
端末装置毎に第１及び第２検証値を割り当て、端末識別子と、端末装置毎に割り当てられた第１及び第２検証値とからなるテーブルを鍵発行サーバ及び証明書発行サーバにて管理してもよい。
鍵発行サーバは、鍵発行の要求のあった端末装置に対応する第１及び第２検証値を用いて、素数「ｐ１」及び「ｐ２」を生成し、生成した「ｐ１」及び「ｐ２」を用いて、公開鍵及び秘密鍵を生成する。鍵発行サーバは、公開鍵証明書を要求する際には、公開鍵、発行識別子情報、サーバ識別子及び端末識別子を、証明書発行サーバへ送信する。
【０４５１】
証明書発行サーバは、受け取った端末識別子に対応する第１及び第２検証値を読み出し、読み出した検証値と、受け取った公開鍵、及び発行識別子情報とを用いて、公開鍵の正当性を検証する。
端末装置毎に、２つの検証値を割り当てることにより、公開鍵の一意性を保ちながら、端末装置毎に割り当てた公開鍵の正当性を検証することができる。
【０４５２】
また、上記に示す素数検証装置を用いて、生成した素数毎に、正当な素数であるか否かの検証を行ってもよい。なお、素数検証装置は、端末識別子と、端末装置毎に割り当てられた第１及び第２検証値とからなるテーブルを有しているとする。
（２８）第１及び第２の実施の形態において、端末装置と鍵発行サーバとを、それぞれ個別の装置としたが、端末装置にて鍵発行を行ってもよい。
【０４５３】
このとき、端末装置は、例えば、第１の形態にて示す構成に加えて、鍵発行サーバ１００の構成にて説明した識別子格納部、識別子生成部、素数生成部、鍵判定部、鍵生成部及び公開鍵格納部とを有する。
端末装置は、識別子生成部を用いて、端末識別子と、数「１」とから発行識別子情報「ＩＤＩ＝ＴＩＤ｜｜１」を生成し、生成した発行識別子情報を識別子格納部にて記憶する。
【０４５４】
端末装置は、素数生成部、鍵判定部及び鍵生成部を用いて、公開鍵と秘密鍵とを生成し、生成した公開鍵を公開鍵格納部へ格納し、生成した秘密鍵を秘密鍵格納部へ格納する。
さらに、端末装置は、発行識別子情報と、公開鍵と、端末識別子と、証明書発行依頼情報とを、証明書発行サーバへ送信し、公開鍵証明書を、証明書発行サーバから受信する。
また、端末装置は、ＩＣカードであってもよい。この場合、ＩＣカードは、鍵の生成及び格納を行う。なお、発行識別子情報の生成及び格納をもＩＣカードが行ってもよい。このとき、ＩＣカードと、証明書発行サーバとの通信は、証明書発行サーバとネットワーク接続された装置に、ＩＣカードを装着することにより行う。
【０４５５】
（２９）端末識別子は、一例として、シリアル番号としているが、これに限定されない。
端末識別子は、ユーザの生体科学的特徴を示すバイオメトリックス情報であってもよい。バイオメトリックス情報は、例えば、ユーザの指紋の特徴を示す指紋情報、ユーザの声紋の特徴を示す声紋情報、ユーザの虹彩の特徴を示す虹彩情報、ユーザの顔の輪郭の特徴を示す輪郭情報、ユーザのＤＮＡの特徴を示すＤＮＡ情報又は、これら情報の組合せである。
【０４５６】
また、端末識別子の一部が、バイオメトリックス情報であるとしてもよい。
また、端末識別子は、端末装置を管理する管理サーバにて発行され、管理サーバからネットワークによる通信によって、与えられるものとしてもよい。または、管理サーバにて発行された端末識別子を、ＳＤカード等の記録媒体によって、与えられるとしてもよい。
（３０）本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
【０４５７】
また、本発明は、前記コンピュータプログラム又は前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ―ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリなど、に記録したものとしてもよい。また、これらの記録媒体に記録されている前記コンピュータプログラム又は前記デジタル信号であるとしてもよい。
【０４５８】
また、本発明は、前記コンピュータプログラム又は前記デジタル信号を、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク等を経由して伝送するものとしてもよい。
また、本発明は、マイクロプロセッサとメモリとを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムに従って動作するとしてもよい。
【０４５９】
また、前記プログラム又は前記デジタル信号を前記記録媒体に記録して移送することにより、又は前記プログラム又は前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
（３１）上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
【産業上の利用可能性】
【０４６０】
発明を構成する各サーバ及び各端末装置は、電器機器製造産業において、経営的に、また継続的及び反復的に、製造し、販売することができる。また、本発明を構成する各サーバ及び各端末装置は、インターネットを用いたサービス産業において、経営的に、また継続的及び反復的に使用することができる。
【図面の簡単な説明】
【０４６１】
【図１】鍵発行システム１の全体の概要を示す図である。
【図２】鍵発行サーバ１００の構成を示すブロック図である。
【図３】素数生成部１１６の構成を示すブロック図である。
【図４】制御情報テーブルＴ１００のデータ構造の一例を示す図である。
【図５】素数情報生成部１３３の構成を示すブロック図である。
【図６】証明書発行サーバ２００の構成を示すブロック図である。
【図７】検証値テーブルＴ２００のデータ構造の一例を示す図である。
【図８】端末装置３００の構成を示すブロック図である。
【図９】鍵発行システム１の動作概要を示す流れ図である。
【図１０】鍵発行システム１における鍵依頼処理の動作を示す流れ図である。
【図１１】鍵発行システム１における鍵発行処理の動作を示す流れ図である。図１２へ続く。
【図１２】鍵発行システム１における鍵発行処理の動作を示す流れ図である。図１１から続き、図１３へ続く。
【図１３】鍵発行システム１における鍵発行処理の動作を示す流れ図である。図１２から続き、図１４へ続く。
【図１４】鍵発行システム１における鍵発行処理の動作を示す流れ図である。図１３から続く。
【図１５】素数生成処理の動作を示す流れ図である。
【図１６】素数候補生成処理の動作を示す流れ図である。図１７へ続く。
【図１７】素数候補生成処理の動作を示す流れ図である。図１６から続く。
【図１８】鍵発行システム１における証明書発行処理の動作を示す流れ図である。
【図１９】素数情報生成部１３３Ａの構成を示すブロック図である。
【図２０】検証値テーブルＴ２５０のデータ構造の一例を示す図である。
【図２１】素数情報生成部１３３Ｂの構成を示すブロック図である。
【図２２】素数生成部１１６Ｃの構成を示すブロック図である。
【図２３】制御情報テーブルＴ１５０のデータ構造の一例を示す図である。
【図２４】素数情報生成部１３３Ｃの構成を示すブロック図である。
【図２５】素数候補生成処理の動作を示す流れ図である。
【図２６】鍵発行システム２の全体の概要を示す図である。
【図２７】鍵発行サーバ１１００の構成を示すブロック図である。
【図２８】発行済鍵情報テーブルＴ１１００のデータ構造の一例を示す図である。
【図２９】鍵発行監査サーバ１２００の構成を示すブロック図である。
【図３０】検証値テーブルＴ１２００のデータ構造の一例を示す図である。
【図３１】鍵発行時における鍵発行システム２の動作概要を示す流れ図である。
【図３２】鍵監査時における鍵発行システム２の動作概要を示す流れ図である。
【図３３】鍵発行システム２における証明書発行処理の動作を示す流れ図である。
【図３４】鍵発行システム２における鍵情報取得処理の動作を示す流れ図である。
【図３５】鍵発行システム２における監査処理の動作を示す流れ図である。
【図３６】確認処理の動作を示す流れ図である。
【図３７】８ビットの素数から５１２ビットの素数を生成するの動作を示す図である。
【図３８】素数生成装置２１００の構成を示すブロック図である。
【図３９】素数生成処理の動作を示す流れ図である。
【図４０】素数候補生成処理の動作を示す流れ図である。
【図４１】素数生成装置２２００の構成を示すブロック図である。
【図４２】素数生成装置２３００の構成を示すブロック図である。
【図４３】素数生成装置２４００の構成を示すブロック図である。
【図４４】素数生成装置２５００の構成を示すブロック図である。
【図４５】発行識別子情報「ＩＤＩ」のビット列に、乱数「Ｒ１」を構成する各ビットを埋め込んだ結果「ＩＤＩ＿Ｒ１」の一例を示す図である。
【図４６】検証処理の動作を示す流れ図である。
【符号の説明】
【０４６２】
１    鍵発行システム
１００、１０１、１０２    鍵発行サーバ
１１０    識別子格納部
１１１    秘密鍵格納部
１１２    公開鍵格納部
１１３    証明書格納部
１１４    制御部
１１５    識別子生成部
１１６    素数生成部
１１７    鍵判定部
１１８    鍵生成部
１１９    情報取得部
１２０    受信部
１２１    送信部
１３０    サーバ識別子記憶領域
１３１    端末情報記憶領域
１３２    繰返制御部
１３３    素数情報生成部
１３５    繰返カウンタ
１３６    出力カウンタ
１４０    情報制御部
１４１    乱数生成部
１４２    素数候補生成部
１４３    第１素数判定部
１４４    第２素数判定部
２００    証明書発行サーバ
２１０    秘密鍵格納部
２１１    発行公開鍵格納部
２１２    発行識別子情報格納部
２１３    公開鍵証明書格納部
２１４    発行公開鍵確認部
２１５    公開鍵証明書生成部
２１６    証明書取得部
２１７    受信部
２１８    送信部
２２０    サーバ情報記憶領域
２２１    確認情報記憶領域
３００、３０１、３０２、３０３、３０４、３０５、３０６    端末装置
３１０    秘密鍵格納部
３１１    公開鍵証明書格納部
３１２    制御部
３１３    受付部
３１４    無線部
３１５    ベースバンド信号処理部
３１６    スピーカー
３１７    マイク
３１８    表示部
３１９    アンテナ
３２０    端末識別子記憶領域
４００    端末装置
２    鍵発行システム
１１００、１１０１、１１０２    鍵発行サーバ
１１１０    識別子格納部
１１１１    秘密鍵格納部
１１１２    公開鍵格納部
１１１３    証明書格納部
１１１４    制御部
１１１５    識別子生成部
１１１６    素数生成部
１１１７    鍵判定部
１１１８    鍵生成部
１１１９    情報取得部
１１２０    受信部
１１２１    送信部
１１２２    証明書生成部
１１２３    証明書用秘密鍵格納部
１１２４    発行済鍵情報格納部
１１３０    サーバ識別子記憶領域
１１３１    端末情報記憶領域
１２００    鍵発行監査サーバ
１２１０    確認情報格納部
１２１１    発行済鍵情報格納部
１２１２    制御部
１２１３    発行公開鍵確認部
１２１４    受付部
１２１５    監査結果出力部
１２１６    受信部
１２１７    送信部
１２２０    サーバ情報記憶領域
１２５０    モニタ
１３００、１３０１、１３０２、１３０３、１３０４、１３０５、１３０６    端末装置
１４００    端末装置
２１００    素数生成装置
２１０１    受付部
２１０２    受付情報記憶部
２１０３    素数シード生成部
２１０４    乱数生成部
２１０５    素数候補生成部
２１０６    素数判定部
２１０７    素数判定部
２２００    素数生成装置
２２０１    受付部
２２０２    受付情報記憶部
２２０３    乱数生成部
２２０４    素数候補生成部
２２０５    素数判定部
２２０６    素数判定部
２３００    素数生成装置
２３０１    受付部
２３０２    受付情報記憶部
２３０３    識別子素数生成部
２３０４    乱数生成部
２３０５    素数候補生成部
２３０６    素数判定部
２３０７    素数判定部
２４００    素数生成装置
２４０１    受付部
２４０２    受付情報記憶部
２４０３    乱数生成部
２４０４    素数候補生成部
２４０５    素数判定部
２４０６    素数判定部
２５００    素数生成装置
２５０１    受付部
２５０２    受付情報記憶部
２５０３    乱数生成部
２５０４    素数候補生成部
２５０５    素数判定部
２５０６    素数判定部
【図１】
0004668796.tif 000002
【図２】
0004668796.tif 000003
【図３】
0004668796.tif 000004
【図４】
0004668796.tif 000005
【図５】
0004668796.tif 000006
【図６】
0004668796.tif 000007
【図７】
0004668796.tif 000008
【図８】
0004668796.tif 000009
【図９】
0004668796.tif 000010
【図１０】
0004668796.tif 000011
【図１１】
0004668796.tif 000012
【図１２】
0004668796.tif 000013
【図１３】
0004668796.tif 000014
【図１４】
0004668796.tif 000015
【図１５】
0004668796.tif 000016
【図１６】
0004668796.tif 000017
【図１７】
0004668796.tif 000018
【図１８】
0004668796.tif 000019
【図１９】
0004668796.tif 000020
【図２０】
0004668796.tif 000021
【図２１】
0004668796.tif 000022
【図２２】
0004668796.tif 000023
【図２３】
0004668796.tif 000024
【図２４】
0004668796.tif 000025
【図２５】
0004668796.tif 000026
【図２６】
0004668796.tif 000027
【図２７】
0004668796.tif 000028
【図２８】
0004668796.tif 000029
【図２９】
0004668796.tif 000030
【図３０】
0004668796.tif 000031
【図３１】
0004668796.tif 000032
【図３２】
0004668796.tif 000033
【図３３】
0004668796.tif 000034
【図３４】
0004668796.tif 000035
【図３５】
0004668796.tif 000036
【図３６】
0004668796.tif 000037
【図３７】
0004668796.tif 000038
【図３８】
0004668796.tif 000039
【図３９】
0004668796.tif 000040
【図４０】
0004668796.tif 000041
【図４１】
0004668796.tif 000042
【図４２】
0004668796.tif 000043
【図４３】
0004668796.tif 000044
【図４４】
0004668796.tif 000045
【図４５】
0004668796.tif 000046
【図４６】
0004668796.tif 000047