(57)【特許請求の範囲】
【請求項１】
送信者Ｓ側のコンピュータの演算処理装置に、
任意のビット長の乱数ｒを乱数発生器の乱数生成手段を用いて生成するステップと、
この乱数ｒを、１／０いずれか一方の符号の出現回数が一定となる可変ビット長のブロックｂに分割するステップと、
このブロックｂの１／０いずれか一方の符号の配列順序を数値化してその合計値ｓを算出するステップと、
この合計値ｓを、所定のハッシュ関数を用いて検査数値ａに圧縮するステップと、
この検査数値ａを、固定ビット長の検査符号ｃに変換してブロックｂの境界に挿入すると共に、以上のステップを繰り返して乱数ｒの全てのブロックｂの境界に検査符号ｃを挿入してそれを暗号検査情報ｄとするステップと、
この暗号検査情報ｄを、通信路を介して送信するステップ
を実行させ、
受信者Ｒ側のコンピュータの演算処理装置に、
受信した暗号検査情報ｄの１／０いずれか一方の符号の出現回数をカウントしてブロックｂの境界を検出するステップと、
検出したブロックｂの１／０いずれか一方の符号の配列順序を数値化してその合計値ｓを算出するステップと、
この合計値ｓを、所定のハッシュ関数を用いて検査数値ａに圧縮するステップと、
この検査数値ａとブロックｂの境界に挿入された検査符号ｃを比較し、一致すれば通信相手が本人であることを認証し、一致しなければ否認もしくは再送要求すると共に、以上のステップを繰り返して暗号検査情報ｄの全てのブロックｂの境界に挿入された検査符号ｃを検証するステップ
を実行させるための
一方向通信相手認証用プログラム。
【請求項２】
一方向通信相手認証用プログラムであって、
（Ａ）送信者Ｓ側のコンピュータの演算処理装置に以下のステップを実行させる。
（Ａ１）任意のビット長の乱数ｒを乱数発生器の乱数生成手段を用いて生成するステップ
（Ａ２）以下のステップを繰り返して暗号検査情報ｄを作成するステップ
・前記乱数ｒを、１／０いずれか一方の符号の出現回数が一定となる可変ビット長のブロックｂに分割するステップ
・このブロックｂの１／０いずれか一方の符号の配列順序を数値化してその合計値ｓを算出するステップ
・この合計値ｓを、所定のハッシュ関数を用いて検査数値ａに圧縮するステップ
・この検査数値ａを、固定ビット長の検査符号ｃに変換してブロックｂに付加するステップ
（Ａ３）当該暗号検査情報ｄを、通信路を介して送信するステップ
（Ｂ）受信者Ｒ側のコンピュータの演算処理装置に以下のステップを実行させる。
（Ｂ１）前記暗号検査情報ｄを、通信路を介して受信するステップ
（Ｂ２）前記暗号検査情報ｄにつき、以下のステップを繰り返すステップ
・暗号検査情報ｄの１／０いずれか一方の符号の出現回数をカウントしてブロックｂの境界を検出するステップ
・検出したブロックｂの１／０いずれか一方の符号の配列順序を数値化してその合計値ｓを算出するステップ
・この合計値ｓを、所定のハッシュ関数を用いて検査数値ａに圧縮するステップ
（Ｂ３）全ての検査数値ａとこれに対応する検査符合ｃにつき、一致すれば通信相手が本人であることを認証し、一致しなければ否認もしくは再送要求するステップ。
【請求項３】
送信者Ｓ側のコンピュータにおいて、送信する暗号検査情報ｄを共通鍵Ｋｃを用いて暗号化するステップと、
受信者Ｒ側のコンピュータにおいて、受信した暗号検査情報ｄを前記共通鍵Ｋｃを用いて復号するステップ
を実行させるための、請求項１又は請求項２に記載のプログラム。
【請求項４】
ブロックｂのビット長を決定する鍵となる１／０いずれか一方の符号の出現回数につき、先頭ビットの符号が１であるか０であるかによって、それぞれ別の一定値を割り当てることを特徴とする請求項１乃至請求項３のいずれか記載のプログラム。
【請求項５】
前記ブロックｂの先頭ビットの符号が１であるか０であるかによって異なるハッシュ関数を用いることを特徴とする請求項１乃至請求項４のいずれか記載のプログラム。
【請求項６】
前記ハッシュ関数が、合計値ｓを１０で割って余りを求めるモジュロ演算によるハッシュ関数であることを特徴とする請求項１乃至請求項５のいずれか記載のプログラム。
【請求項７】
前記ハッシュ関数が、合計値ｓの各桁同士の加算値が１桁になるまで加算値の各桁同士の加算を繰り返す代数演算によるハッシュ関数であることを特徴とする請求項１乃至請求項５のいずれか記載のプログラム。
【請求項８】
前記暗号検査情報ｄを暗号鍵ｋの配送媒体とするために、
送信者Ｓ側のコンピュータにおいて、前記暗号鍵ｋに前記検査符号ｃを挿入してそれを暗号検査情報ｄとして送信するステップと、
受信者Ｒ側のコンピュータにおいて、受信した暗号検査情報ｄの検査符号ｃを検証した後にそれを削除して元の暗号鍵ｋに復号するステップと、
を実行させるための請求項１乃至請求項７のいずれか記載のプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、通信の相手が本人であることを確認する相手認証方法（以下、場合により「認証プロトコル」という。）に関し、特に一方向通信で相手認証が可能な一方向通信相手認証プロトコルに関する。
【０００２】
【発明が解決しようとする課題】
チャレンジ／レスポンス方式の相手認証プロトコルは、認証プロトコルの過程で攻撃者がレスポンスを傍受してそれを再利用するのを防ぐため、検証者が毎回異なるチャレンジ（乱数）を送信し、利用者がそのチャレンジに対して秘密鍵を用いて生成したレスポンスを応答する双方向通信を行う。
そのため、安全でない通信路の途中で送受信される双方向の情報が傍受されて秘密鍵が解読される危険性がある。
また、双方向通信を行うため、通信のオーバヘッドが大きく、認証に要する時間が長くなる。
【０００３】
また、チャレンジ／レスポンス方式の相手認証プロトコルには、共通鍵暗号化方式と公開鍵暗号化方式の２つの方式がある。
共通鍵暗号化方式は、検証者と利用者が同一の共通鍵を所有し、それを秘密に保管する必要がある。
そのため、検証者と利用者が組ごとに別々の共通鍵を持つことになり、利用者の数が増えると、それだけ共通鍵の数が増加してその管理が大変になる。
また、共通鍵を第三者に盗聴されることなく安全に配布する方法も慎重に検討する必要がある。
【０００４】
公開鍵暗号化方式は、非常に大きな桁数の数を因数分解するのは難しいという考え方に基づいて暗号化・復号化を行うので、計算量が大きく、演算処理に長い時間がかかるようになっている。
そのため、認証をスムーズに行うためには、高性能で大規模な処理装置を必要とする。
【０００５】
そこで本発明は、安全性や通信効率に問題のある双方向通信を行う必要がなく、鍵の管理や計算量に問題のある共通鍵や公開鍵を使用しない相手認証プロトコルを提案することを目的になされたものである。
【０００６】
【課題を解決するための手段】
かかる目的を達成するために、本発明は以下のように構成した。
すなわち、請求項１の発明は、送信者Ｓ側の装置における、
任意のビット長の乱数ｒを生成するステップと、
この乱数ｒを１／０いずれか一方の符号の出現回数が一定となる可変ビット長のブロックｂに分割するステップと、
このブロックｂの１／０いずれか一方の符号の配列順序を数値化してその合計値ｓを算出するステップと、
この合計値ｓを所定のハッシュ関数を用いて検査数値ａに圧縮するステップと、
この検査数値ａを固定ビット長の検査符号ｃに変換してブロックｂの境界に挿入すると共に、以上のステップを繰り返して乱数ｒの全てのブロックｂの境界に検査符号ｃを挿入してそれを暗号検査情報ｄとするステップと、
この暗号検査情報ｄを通信路を介して送信するステップと、
受信者Ｒ側の装置における、
受信した暗号検査情報ｄの１／０いずれか一方の符号の出現回数をカウントしてブロックｂの境界を検出するステップと、
検出したブロックｂの１／０いずれか一方の符号の配列順序を数値化してその合計値ｓを算出するステップと、
この合計値ｓを所定のハッシュ関数を用いて検査数値ａに圧縮するステップと、
この検査数値ａとブロックｂの境界に挿入された検査符号ｃを比較し、一致すれば通信相手が本人であることを認証し、一致しなければ否認もしくは再送要求すると共に、以上のステップを繰り返して暗号検査情報ｄの全てのブロックｂの境界に挿入された検査符号ｃを検証するステップと、
で構成してなる一方向通信相手認証方法である。
【０００７】
請求項２の発明は、前記送信者Ｓ側の装置と受信者Ｒ側の装置が秘密の共通鍵Ｋｃを共有し、
送信者Ｓ側の装置において、この共通鍵Ｋｃを用いて送信する暗号検査情報ｄを暗号化し、
受信者Ｒ側の装置において、この共通鍵Ｋｃを用いて受信した暗号検査情報ｄを復号してなる請求項１に記載の一方向通信相手認証方法である。
【０００８】
請求項３の発明は、前記ブロックｂの先頭ビットの符号によってブロックｂのビット長を決定する鍵となる１／０いずれか一方の符号の出現回数を変化させてなる請求項１に記載の一方向通信相手認証方法である。
【０００９】
請求項４の発明は、前記ブロックｂの先頭ビットの符号によって異なるハッシュ関数を用いてなる請求項１に記載の一方向通信相手認証方法である。
【００１０】
請求項５の発明は、前記ハッシュ関数を合計値ｓを１０で割って余りを求めるモジュロ演算によるハッシュ関数とする請求項１に記載の一方向通信相手認証方法である。
【００１１】
請求項６の発明は、前記ハッシュ関数を合計値ｓの各桁同士の加算値が１桁になるまで加算値の各桁同士の加算を繰り返す代数演算によるハッシュ関数とする請求項１に記載の一方向通信相手認証方法である。
【００１２】
請求項７の発明は、前記暗号検査情報ｄを暗号鍵ｋの配送媒体とするときは、
送信者Ｓ側の装置において、暗号鍵ｋに前記検査符号ｃを挿入してそれを暗号検査情報ｄとして送信し、
受信者Ｒ側の装置において、受信した暗号検査情報ｄの検査符号ｃを検証した後にそれを削除して元の暗号鍵ｋに復号してなる請求項２に記載の一方向通信相手認証方法である。
【００１３】
【発明の実施の形態】
以下に図面を参照して本発明の実施の形態について説明する。
図１に、本発明を実施した一方向通信相手認証プロトコルの処理フローを示す。
送信者Ｓ側の装置（以下、「送信者Ｓ」という。）においては、まず、無調整発振器の高周波波形や熱雑音などをサンプリングして任意のビット長の乱数ｒを生成する（ステップ１０１）。
乱数ｒは、再利用によるなりすましを防ぐため、通信する毎に新しく生成する。
図の例では、３６ビットの乱数ｒ＝０１０１１０１０１０００１１１１１０１１００００１１０１１１０００１００（１６進表示５Ａ８ＦＢ０ＤＣ４）を生成している。
【００１４】
次に、乱数ｒを１／０いずれか一方の符号の出現回数が一定となる可変ビット長のブロックｂに分割する（ステップ１０２）。
このとき、ブロックｂの先頭ビットの符号によってブロックｂのビット長を決定する鍵となる１／０いずれか一方の符号の出現回数を変化させる。
例えば、ブロックｂの先頭ビットの符号が０のときは出現回数を７とし、１のときは９とする。
【００１５】
図の例では、乱数ｒの先頭ビットの符号が０なので、１の符号の出現回数が７となるビット列＝０１０１１０１０１０００１１をブロックｂ１とし、次のビット列の先頭ビットの符号が１なので、１の符号の出現回数が９となるビット列＝１１１０１１００００１１０１１をブロックｂ２とし、残りのビット列＝１０００１００をブロックｂ３としている。
【００１６】
次に、ブロックｂの１／０いずれか一方の符号の配列順序を数値化してその合計値ｓを算出する（ステップ１０３）。
配列順序は、ブロックｂの先頭ビットを１として各ビットに付与した１６進の一連番号で、１／０いずれか一方の符号の番号を合計して１６進数値の合計値ｓを算出する。
【００１７】
図の例では、ブロックｂ１のビット列＝０１０１１０１０１０００１１の１の符号の番号２、４、５、７、９、Ｄ、Ｅを合計して合計値ｓ１＝３６を、ブロックｂ２のビット列＝１１１０１１００００１１０１１の１の符号の番号１、２、３、５、６、Ｂ、Ｃ、Ｅ、Ｆを合計して合計値ｓ２＝４５を、ブロックｂ３のビット列＝１０００１００の１の符号の番号１、５を合計して合計値ｓ３＝６をそれぞれ算出している。
【００１８】
次に、合計値ｓを所定のハッシュ関数を用いて１６進数値１桁の検査数値ａに圧縮する（ステップ１０４）。
このとき、ブロックｂの先頭ビットの符号によって異なるハッシュ関数を用いる。
例えば、ブロックｂの先頭ビットの符号が０のときは、合計値ｓを１０で割って余りを求めるモジュロ演算によるハッシュ関数を用い、１のときは、合計値ｓの各桁同士の加算値が１桁になるまで加算値の各桁同士の加算を繰り返す代数演算によるハッシュ関数を用いる。
【００１９】
図の例では、ブロックｂ１の先頭ビットの符号が０なので、モジュロ演算によるハッシュ関数を用いて合計値ｓ１＝３６を１０で割った余り３６ｍｏｄ１０＝６を検査数値ａ１としている。
また、ブロックｂ２の先頭ビットの符号が１なので、代数演算によるハッシュ関数を用いて合計値ｓ２＝４５の各桁同士の加算値４＋５＝９を検査数値ａ２としている。
【００２０】
また、ブロックｂ３の先頭ビットの符号が１なので、代数演算によるハッシュ関数を用いるが、合計値ｓ３＝６がすでに１桁なので、それをそのまま検査数値ａ３＝６としている。
次に、検査数値ａを固定ビット長の検査符号ｃに変換してブロックｂの境界に挿入すると共に、以上のステップを繰り返して乱数ｒの全てのブロックｂの境界に検査符号ｃを挿入してそれを暗号検査情報ｄとする（ステップ１０５）。
【００２１】
図の例では、検査数値ａ１＝６を４ビットの検査符号ｃ１＝０１１０に変換してブロックｂ１の後に挿入し、検査数値ａ２＝９を４ビットの検査符号ｃ２＝１００１に変換してブロックｂ２の後に挿入し、検査数値ａ３＝６を４ビットの検査符号ｃ３＝０１１０に変換してブロックｂ３の後に挿入している。
検査符号ｃは、ブロックｂの前に挿入してもよい。
【００２２】
そして、以上の乱数ｒに検査符号ｃを挿入したビット列＝０１０１１０１０１０００１１０１１０１１１０１１００００１１０１１１００１１０００１０００１１０を暗号検査情報ｄとしている。
【００２３】
最後に、暗号検査情報ｄに送信者Ｓと受信者Ｒが共有する共通鍵Ｋｃをビット毎に排他的論理和で加えて暗号検査情報ｄを暗号化し、それを暗号化暗号検査情報ｄ′として通信路を介して送信する（ステップ１０６）。
【００２４】
図の例では、暗号検査情報ｄ＝０１０１１０１０１０００１１０１１０１１１０１１００００１１０１１１００１１０００１０００１１０に共通鍵Ｋｃ＝０１００１００１１０１１０１１０１１００１０００００１１１１１００１１１０００００１０１０００１（１６進表示４９Ｂ６Ｃ８３Ｅ７０５１）を排他的論理和で加えて暗号化暗号検査情報ｄ′＝０００１００１１００１１１０１１０１１１００１１００１１００１１１０１１１１０００００１０１１１としている。
【００２５】
受信者Ｒ側の装置（以下、「受信者Ｒ」という。）においては、まず、受信した暗号化暗号検査情報ｄ'に共通鍵Ｋｃをビット毎に排他的論理和で加えて元の暗号検査情報ｄに復号する（ステップ２０１）。
暗号検査情報ｄは、再利用によるなりすましを防ぐため、過去に受信した暗号検査情報ｄと重複がないことを確認し、重複があれば否認する。
【００２６】
図の例では、暗号化暗号検査情報ｄ′＝０００１００１１００１１１０１１０１１１００１１００１１００１１１０１１１１０００００１０１１１に共通鍵Ｋｃ＝０１００１００１１０１１０１１０１１００１０００００１１１１１００１１１０００００１０１０００１を排他的論理和で加えて元の暗号検査情報ｄ＝０１０１１０１０１０００１１０１１０１１１０１１００００１１０１１１００１１０００１０００１１０に復号している。
【００２７】
次に、暗号検査情報ｄの１／０いずれか一方の符号の出現回数をカウントしてブロックｂの境界を検出する（ステップ２０２）。
図の例では、暗号検査情報ｄの先頭から列順に１の符号の出現回数をカウントし、先頭ビットの符号が０なので、１の符号の出現回数が７になるまでの符号列＝０１０１１０１０１０００１１をブロックｂ１とし、次の先頭ビットの符号が１なので、１の符号の出現回数が９になるまでの符号列＝１１１０１１００００１１０１１をブロックｂ２とし、残りの符号列＝１０００１００をブロックｂ３としてブロックｂの境界を検出している。
【００２８】
次に、検出したブロックｂの１／０いずれか一方の符号の配列順序を数値化してその合計値ｓを算出する（ステップ２０３）。
図の例では、前述のステップ１０３と同じ手順でブロックｂ１、ｂ２、ｂ３の１の符号の番号を合計して合計値ｓ１＝３６、ｓ２＝４５、ｓ３＝６をそれぞれ算出している。
【００２９】
次に、合計値ｓを所定のハッシュ関数を用いて１６進数値１桁の検査数値ａに圧縮する（ステップ２０４）。
図の例では、前述のステップ１０４と同じ手順で合計値ｓ１＝３６、ｓ２＝４５、ｓ３＝６をそれぞれ検査数値ａ１＝６、ａ２＝９、ａ３＝６に変換している。
【００３０】
最後に、検査数値ａとブロックｂの境界に挿入された検査符号ｃを比較し、一致すれば通信相手が本人であることを認証し、一致しなければ否認もしくは再送要求すると共に、以上のステップを繰り返して暗号検査情報ｄの全てのブロックｂの境界に挿入された検査符号ｃを検証する（ステップ２０５）。
【００３１】
図の例では、検査数値ａ１＝６とブロックｂ１の後に挿入された検査符号ｃ１＝０１１０を１６進数値＝６に変換して比較している。
また、検査数値ａ２＝９とブロックｂ２の後に挿入された検査符号ｃ２＝１００１を１６進数値＝９に変換して比較している。
また、検査数値ａ３＝６とブロックｂ３の後に挿入された検査符号ｃ３＝０１１０を１６進数値＝６に変換して比較している。
【００３２】
本発明の一方向通信相手認証プロトコルは、暗号鍵ｋの配送手段としても利用できる。
その場合、送信者Ｓが乱数ｒの代わりに暗号鍵ｋに検査符号ｃを挿入してそれを暗号検査情報ｄとし、共通鍵Ｋｃと排他的論理和で加えて暗号化暗号検査情報ｄ′として送信し、受信者Ｒが受信した暗号化暗号検査情報ｄ′を共通鍵Ｋｃと排他的論理和で加えて暗号検査情報ｄを復号して、暗号検査情報ｄの検査符号ｃを検証した後でそれを削除して元の暗号鍵ｋに復号する。これにより送信者Ｓと受信者Ｒが共有する暗号鍵が生成されたことになり、共通鍵Ｋｃの更新が可能となる。
【００３３】
【発明の効果】
以上説明したように、本発明の一方向通信相手認証プロトコルは、送信者Ｓが任意の乱数ｒを生成してそのビット配列によって長さが変化する可変ビット長のブロックｂに分割し、そのビット列をビット配列によって値が変化する数値に数値化して所定のハッシュ関数で検査数値ａに圧縮し、それを固定ビット長の検査符号ｃに変換してブロックｂの境界に挿入し、それを暗号検査情報ｄとして送信すると共に、受信者Ｒが受信した暗号検査情報ｄのブロックｂを検出し、そのビット列を数値化して同じハッシュ関数で検査数値ａに圧縮し、それとブロックｂの境界に挿入された検査符号ｃを比較して通信相手の正当性を検証する。
【００３４】
従って、本発明によれば、送信者Ｓがチャレンジ（乱数ｒ）とレスポンス（検査符号ｃ）を同時に送信する一方向の通信だけで、受信者Ｒが、両者を比較して送信者Ｓがプロトコルを知っていることを確認できるので、一方向通信の相手認証が可能になる。
【００３５】
また、送信者Ｓと受信者Ｒがプロトコルを共有して相手認証を行うので、従来の共通鍵や公開鍵を使用せずに相手認証が可能になる。
また、乱数ｒの中に検査符号ｃが広く分散してビット配列によって位置や値が変化するので、傍受した通信情報だけから暗号を解読する暗号文攻撃を受けても容易に防ぐことができる。
【００３６】
また、衝突を起しにくい一方向性のハッシュ関数を使用して可変ビット長のブロックｂを固定ビット長の検査符号ｃに高い圧縮率で変換するので、通信文を短くして通信効率を高めることができる。
また、本発明の一方向通信相手認証プロトコルは、共通鍵Ｋｃを用いて暗号検査情報ｄを暗号化する。
【００３７】
従って、本発明によれば、攻撃者にプロトコルを知られても、暗号検査情報ｄが正しい共通鍵Ｋｃで暗号化されなければ、検証時に必ず検査符号ｃが変化するので、攻撃者のなりすましを防止できる。
また、本発明の一方向通信相手認証プロトコルは、ブロックｂの先頭ビットの符号によってブロックｂのビット長を決定する鍵となる符号の出現回数を変化させる。
また、ブロックｂの先頭ビットの符号によって異なるハッシュ関数を用いる。
【００３８】
従って、本発明によれば、ビット符号によって検査符号ｃの位置や値がさらに変化するので、通信情報の暗号解読をより困難にすることができる。
また、本発明の一方向通信相手認証プロトコルは、モジュロ演算あるいは代数演算によるハッシュ関数を用いる。
従って、本発明によれば、ハッシュ関数の計算量が少ないので、専用のＤＳＰやＬＳＩを用いなくても高速リアルタイム処理による迅速な認証が可能になる。
【図面の簡単な説明】
【図１】  本発明を実施した一方向通信相手認証プロトコルの処理フローである。
【符号の説明】
ａ    検査数値
ｂ    ブロック
ｃ    検査符号
ｄ    暗号検査情報
ｄ′  暗号化暗号検査情報
ｋ    暗号鍵
ｒ    乱数
ｓ    合計値
Ｋｃ  共通鍵
Ｒ    受信者
Ｓ    送信者
【図１】
0004122164.tif 000002