(57)【特許請求の範囲】
【請求項１】
ゼロ知識入力プロトコルによって認証が実施される、確認装置を使用して少なくとも１つの識別装置を認証する認証方法において、ゼロ知識入力プロトコルは、シンドローム問題によるデコード又はモジュラーナップザックとして知られた問題に基づいており、且つ、
（１）識別装置と確認装置との間の対話を可能にするためのサイズがｎでハミング重みがｄ（ｄ＜ｎ）である少なくとも１つのベクトルｓｉで構成された識別装置における第１不揮発性メモリにおける秘密キーと、係数がランダムに選択されるサイズがｎ×ｋのマトリックスＭと少なくとも１つのベクトルＫｉ（Ｋｉ＝Ｍｓｉ）とで構成される確認装置における第２不揮発性メモリにおけるパブリックキーとを設定するステップと、
（２）識別装置側の第１ランダムアクセスメモリで、サイズがｎのランダムに選択されるベクトルｙとランダムに選択される順列ｐとを生成し、ｙ、ｐ、ｓ、Ｍの関数としてパラメータに暗号ハッシュ関数Ｈを適用して得られたコミットメントを通信インターフェースにより確認装置へ送るステップと、
（３）確認装置の第１ランダムアクセスメモリにより選択されたそして通信インターフェースにより識別装置へ送られたランダム数の関数として、ｓｉを明らかにしないで、識別装置へ、ｙ、ｐ、ｓｉの関数としてある要素を明らかにするステップと、
（４）ランダム数の関数として、受信された要素とパブリックキーとを用いて確認装置側でコミットメントが正確であることをテストするステップと、
（５）所望の安全レベルに応じた回数で上記の動作を反復するステップと
を有することを特徴とする、認証方法。
【請求項２】
上記ベクトルｓｉが２進数ベクトルである請求項１に記載の方法。
【請求項３】
ランダムに選択されたベクトルｙとランダムに選択された順列ｐを選択した後に識別装置が下記の式：
ｈ１＝Ｈ（ｐ、Ｍｙ）、ｈ２＝Ｈ（ｙｐ）、ｈ３＝Ｈ（ｙ  ｘｏｒ  ｓ）ｐ）
を計算して確認装置にコミットメント｛ｈ１、ｈ２、ｈ３｝を送り（ここで、ｘｐはｐで順列化されたベクトルｘを表し、ｘｏｒは排他的ＯＲ関数を表す）、次に、確認装置はランダムな数０＜ｑ＜４を取り、その数を識別装置へ送り、次に、識別装置は、下記のように：
ｑ＝１ならば、ｒ＝｛ｙ、ｐ｝
ｑ＝２ならば、ｒ＝｛ｙ  ｘｏｒ  ｓ、ｐ｝
ｑ＝３ならば、ｒ＝｛ｙｐ、ｓｐ｝
によって定義される応答を計算して確認装置に送り、確認装置はｒ＝｛Ｕ、Ｖ｝を受けて下記：
ｑ＝１ならば、ｈ１＝Ｈ（Ｖ、ＭＵ）かつｈ２＝Ｈ（Ｕｖ）
ｑ＝２ならば、ｈ１＝Ｈ（Ｖ、（ＭＵ）ｘｏｒ  Ｋ）かつｈ３＝Ｈ（Ｕｖ）
ｑ＝３ならば、ｈ２＝Ｈ（Ｕ）、ｈ３＝Ｈ（Ｕ  ｘｏｒ  Ｖ）かつＶのハミング重みはｄである
ことをテストし、
ｑに対応するテストが正確であること分かった時に、確認装置はプロトコルが成功裏に終了したとみなす請求項１または２に記載の方法。
【請求項４】
ランダムに選択されたベクトルｙとランダムに選択された順列ｐとを選択した後、識別装置が下記の式：
ｈ１＝Ｈ（ｐ）、ｈ２＝Ｈ（ｙｐ）、ｈ３＝Ｈ（ｙ  ｘｏｒ  ｓ）ｐ）
を計算して確認装置にコミットメント｛ｈ１、ｈ２、ｈ３｝を送り、
確認装置は互いに分離した数のリストＧ＝｛ｇ１、・・・ｇｆ｝（ここで、１＜ｇｉ＜ｋ）をランダムに取ってそれを識別装置に送り、
識別装置はＧによって示された位置でＭｙのｆビットのみを計算し、この計算で得られたベクトルＺを確認装置へ送り、
確認装置はランダムな数０＜ｑ＜４を取り、その数を識別装置へ送り、
識別装置は下記：
ｑ＝１ならば、ｒ＝｛ｙ、ｐ｝
ｑ＝２ならば、ｒ＝｛ｙ  ｘｏｒ  ｓ、ｐ｝
ｑ＝３ならば、ｒ＝｛ｙｐ、ｓｐ｝
で定義される応答ｒを計算して確認装置に送り、
確認装置はｒ＝｛Ｕ、Ｖ｝を受けて下記のように制御し：
ｑ＝１ならば、ｈ１＝Ｈ（Ｖ）、ｈ２＝Ｈ（Ｕｖ）かつエキス（ＭＵ、Ｇ）ｘｏｒ  Ｚ＝０（ここで、エキス（ｘ、Ｇ）はｘ中でＧによって表されたビットだけを選択することによって得られた射影ベクトルを表す）、
ｑ＝２ならば、ｈ１＝Ｈ（Ｖ）、ｈ３＝Ｈ（Ｕｖ）かつエキス（ＭＵ  ｘｏｒ  Ｋ、Ｇ）ｘｏｒ  Ｚ＝０、
ｑ＝３ならば、ｈ２＝Ｈ（Ｕ）、ｈ３＝＝Ｈ（Ｕ  ｘｏｒ  Ｖ）かつＶのハミング重みはｄである、
ｑに対応するテストが正確であること分かった時に、確認装置はプロトコルが成功裏に終了したとみなす請求項１または２に記載の方法。
【請求項５】
ランダムに選択されたベクトルｙとランダムに選択された順列ｐとを選択した後に、識別装置が下記の式：
ｈ１＝Ｈ（ｐ）、ｈ２＝Ｈ（ｙｐ）、ｈ３＝Ｈ（ｙ  ｘｏｒ  ｓ）ｐ）を計算して確認装置にコミットメント｛ｈ１、ｈ２、ｈ３｝を送り、
識別装置はＱ＝Ｍｙを計算し、得られたベクトルＱを確認装置へ送り、
確認装置は互いに分離した数のリストＧ＝｛ｇ１、・・・ｇｆ｝（ここで、１＜ｇｉ＜ｋ）をランダムに取ってベクトルＺ＝エキス（Ｑ、Ｇ）を計算し、
確認装置はランダムな数０＜ｑ＜４を取ってその数を識別装置へ送り、
次に、識別装置は下記：
ｑ＝１ならば、ｒ＝｛ｙ、ｐ｝
ｑ＝２ならば、ｒ＝｛ｙ  ｘｏｒ  ｓ、ｐ｝
ｑ＝３ならば、ｒ＝｛ｙｐ、ｓｐ｝
で定義される応答ｒを計算して確認装置へ送り、
確認装置はｒ＝｛Ｕ、Ｖ｝を受けて下記の制御をし：
ｑ＝１ならば、ｈ１＝Ｈ（Ｖ）、ｈ２＝Ｈ（Ｕｖ）かつエキス（ＭＵ、Ｇ）ｘｏｒ  Ｚ＝０）、
ｑ＝２ならば、ｈ１＝Ｈ（Ｖ）、ｈ３＝Ｈ（Ｕｖ）かつエキス（ＭＵ  ｘｏｒ  Ｋ、Ｇ）ｘｏｒ  Ｚ＝０、
ｑ＝３ならば、ｈ２＝Ｈ（Ｕ）、ｈ３＝Ｈ（Ｕ  ｘｏｒ  Ｖ）かつＶのハミング重みはｄである、
ｑに対応するテストが正確であることが分かった時に、確認装置がプロトコルが成功裏に終了したとみなす請求項１に記載の１に記載の方法。
【請求項６】
ベクトルｓｉが長い単体コードを形成するベクトルの組ｓ［１］，・・・ｓ［ｗ］によって置換されている請求項１に記載の方法。
【請求項７】
ベクトルＫｉがベクトルの組Ｋ［１］、・・・Ｋ［ｗ］によって置換されて、Ｍ（ｓ［ｉ］）＝Ｋ［ｉ］である請求項６に記載の方法。
【請求項８】
識別装置がランダムに選択されたベクトルｙとランダムに選択された順列ｐとを選択した後に、ｈ１＝Ｈ（Ｍｙ、ｐ）、ｈ２＝Ｈ（ｙｐ、ｓ［１］ｐ，・・・，ｓ［ｗ］ｐ）を計算し、コミットメント｛ｈ１、ｈ２｝を識別装置へ送り、
確認装置はランダムに２進数ベクトルｂ［１］、・・・、ｂ［ｗ］を取ってそれを識別装置へ送り、
識別装置は下記の式：
ｚ＝ｙｐ  ｘｏｒ  ｓ［１］ｐ  ｂ［１］  ｘｏｒ  ｓ［２］ｐ  ｂ［２］  ｘｏｒ  ｓ［３］ｐ  ｂ［３］・・・ｘｏｒ  ｓ［ｗ］ｐ  ｂ［ｗ］
で定義される応答ｚを計算して確認装置へ送り、
確認装置はビットｑをランダムに取って識別装置へ送り、
識別装置は下記の式：
ｑ＝０ならば、ｒ＝｛ｙｐ、ｓ［１］ｐ，・・・，ｓ［ｗ］ｐ｝
ｑ＝１ならば、ｒ＝｛ｐ｝
で定義される応答ｒを送り、
確認装置は下記回答ｒ：
ｑ＝０ならば、ｒ＝｛ｒ［０］、ｒ［１］、・・・、ｒ［ｗ］｝
ｑ＝１ならばｒ＝｛ｒ［０］｝
を受けて下記をテストする：
ｑ＝０ならば、ｈ２＝Ｈ（ｒ）、ｚ＝ｒ［０］  ｘｏｒ  ｒ［１］ｂ［１］  ｘｏｒ  ｒ［２］ｂ［２］  ｘｏｒ  ｒ［３］ｂ［３］・・・ｘｏｒ  ｒ［ｗ］ｂ［ｗ］且つ  ｛ｒ［１］，ｒ［２］，・・・，ｒ［ｗ］｝が単体コードを形成する、
ｑ＝１ならば、Ｈ（Ｍ（順列（ｚ、ｒ［０］））  ｘｏｒ  （Ｋ［１］ｂ［１］  ｘｏｒ  Ｋ［２］ｂ［２］  ｘｏｒ  Ｋ［３］ｂ［３］・・・ｘｏｒ  Ｋ［ｗ］ｂ［ｗ］，  ｒ［０］）＝ｈ１、
ｑに対応するテストが正確であることが分かった時に、確認装置はプロトコルが成功裏に終了したとみなす請求項６または７に記載の方法。
【請求項９】
識別装置がランダムに選択されたベクトルｙとランダムに選択された順列ｐとを選択した後に、ｈ１＝Ｈ（ｐ）、ｈ２＝Ｈ（ｙｐ，ｓ［１］ｐ，・・・，ｓ［ｗ］ｐ）を計算して確認装置へコミットメント｛ｈ１、ｈ２｝とベクトルｈ０＝Ｍｙとを送り、
確認装置はランダムに２進数ベクトルｂ［１］，・・・，ｂ［ｗ］を取って識別装置へそれを送り、
識別装置は下記の式：
ｚ＝ｙｐ  ｘｏｒ  ｓ［１］ｐ  ｂ［１］  ｘｏｒ  ｓ［２］ｐ  ｂ［２］  ｘｏｒ  ｓ［３］ｐ  ｂ［３］・・・ｘｏｒ  ｓ［ｗ］ｐ  ｂ［ｗ］
で定義される応答ｚを計算して確認装置に送り、
確認装置はビットｑをランダムに取って識別装置へ送り、
識別装置は下記の式：
ｑ＝０ならば、ｒ＝｛ｙｐ、ｓ［１］ｐ，・・・，ｓ［ｗ］ｐ｝
ｑ＝１ならば、ｒ＝｛ｐ｝
で定義される応答ｒを送り、
確認装置は、
ｑ＝０ならば応答ｒ＝｛ｒ［０］、ｒ［１］、・・・、ｒ［ｗ］｝、
ｑ＝１ならばｒ＝｛ｒ［０］｝
を受けて下記をテストし：
ｑ＝０ならば、ｈ２＝Ｈ（ｒ）、ｚ＝ｒ［０］  ｘｏｒ  ｒ［１］ｂ［１］ｘｏｒ  ｒ［２］ｂ［２］  ｘｏｒ  ｒ［３］ｂ［３］・・・ｘｏｒ  ｒ［ｗ］ｂ［ｗ］かつ｛ｒ［１］，ｒ［２］，・・・，ｒ［ｗ］｝は単体コードを形成する、
ｑ＝１ならば、ｈ１＝Ｈ（ｒ［０］）かつ（ｈ０）ｒ  ［０］  ｘｏｒ  （Ｋ［１］ｂ［１］  ｘｏｒ  Ｋ［２］ｂ［２］  ｘｏｒ  Ｋ［３］ｂ［３］・・・ｘｏｒＫ［ｗ］ｂ［ｗ］）ｒ［０］＝ｚ、
対応するテストが正確であると分かった時に、確認装置はプロトコルが成功裏に終了したとみなす請求項６または７に記載の方法。
【請求項１０】
請求項１〜９のいずれか一項に記載の方法であって、前記プロトコルがｔ回反復され、その全てのプロトコルが成功した時にのみ確認装置が識別装置を認証する請求項１〜９のいずれか一項に記載の方法。
【請求項１１】
ｔを０＜ｔ＜６０の範囲で選択する請求項１０に記載の方法。
【請求項１２】
ハミング重みｄを下記の式：
ｄ＝（ｋ−ｎ）ｌｏｇ２（１−（ｋ／ｎ））−ｋ  ｌｏｇ２（ｋ／ｎ）
に選択し、好ましくはこの値より小さくする請求項１〜１１のいずれか一項に記載の方法。
【請求項１３】
ハミング重みｄを下記の式：
ｄ＝（ｎ−（ｋ−ｎ）ｌｏｇ２（１−（ｋ／ｎ））＋ｋ  ｌｏｇ２（ｋ／ｎ）
に選択し、好ましくはこの値より大きくする請求項１〜１１のいずれか一項に記載の方法。
【請求項１４】
ｎ＝２ｋである請求項１２または１３に記載の方法。
【請求項１５】
ｄ＝０．１１ｎまたはｄ＝０．８９ｎである請求項１２〜１４のいずれか一項に記載の方法。
【請求項１６】
ｎとｋとが下記の値の組の１つを取る請求項１〜１５のいずれか一項に記載の方法：
｛ｎ＝３８４、ｋ＝１９６｝、｛ｎ＝５１２、ｋ＝２５６｝、｛ｎ＝１０２４、ｋ＝５１２｝または｛ｎ＝７６８、ｋ＝３８４｝。
【請求項１７】
暗号ハッシュ関数を暗号化関数で置換して、ハッシュされるメッセージが上記のキーおよび／または暗号化すべきメッセージの役目をし且つハッシュされたメッセージの真実性の検査でハッシュされたメッセージおよび／または暗号化キーを明らかにする請求項１〜１６のいずれか一項に記載の方法。
【請求項１８】
ｍを数２、３、５、７または２ｃ（ここで、ｃは小さい整数である）の中から選択する請求項１７に記載の方法。
【請求項１９】
｛ｎ、ｋ、ｍ｝が下記の値の１つをとる請求項１７または１８に記載の方法：
｛１９６、１２８、３｝、｛３８４、２５６、３｝、｛１２８、６４、５｝または｛１９２、９６、５｝
【請求項２０】
Ｈ（ｐ）の計算をＨ（ｅｐ）（ここで、ｅは一定の擬似ランダムベクトルである）の計算で行う請求項１乃至１９のいずれか１項に記載の方法。
【請求項２１】
各ユーザの識別子ＩＤをキー｛ｓｉ、Ｋｉ｝と組み合わせるために正当権限者が主な秘密キーの組｛ＫＰｉ｝を選択し、ＫＰｉ値の関数としてｓｉを計算するための２進数ベクトルＩ＝Ｈ（ＩＤ）にＩＤをハッシュし、正当権限者は全パプリックキー｛ＰＰｉ｝または｛ＰＰｉ｝＝ｆ（ＫＰｉ）を公表する請求項1乃至２０のいずれか一項に記載の方法。
【請求項２２】
ＫＰｉがｓの計算に関連するか否かを決める選択インジケータとして正当権限者が１に等しいビットを用いる請求項２１に記載の方法。
【請求項２３】
組｛ＫＰｉ｝が１つまたは複数の拡大した単体コードを形成する請求項２２に記載の方法。
【請求項２４】
Ｉが５６ビットの数である請求項２３に記載の方法。
【請求項２５】
ｓがＫＰｉの一次の組み合わせ、すなわち、
ｓ＝ｌ［１］ＫＰ１＋Ｉ［２］ＫＰ２＋・・・Ｉ〔Ｉのサイズ〕ＫｐＩのサイズ
（ここで、ＰＰｉ＝（ＫＰｉ））
として計算する請求項２１乃至２４に記載の方法。
【請求項２６】
正当権限者が１に等しいのビットが２ａｔの位置に分配された重みａｔのｔ個の秘密ＫＰｉを選択し、ＰＰｉ＝（ＭＰｉ）値を公表し且つ下記〔式１〕の部分三角測量によってコードｓを生成する：
【式１】
0003675494.tif 000006
ｓの重み＝ｔａ−ｔ／２であり、
サイズは、下記の関係式で選択：
０．１１ｎ＝ｔａ−ｔ／２、２ｋ＝ｎかつ２ａｔδ＞５６
（ここで、２ａ−２ａＨ２（δ）≡１）
の計算を実行することを特徴とする、請求項２１、２２または２４に記載の方法によってＩＤをｓに関連付ける方法。
【請求項２７】
ｔ＝５６、ｄ＝９５、ｎ＝８６４、ｋ＝４３２である請求項２６に記載の方法。
【請求項２８】
識別装置は、制御装置と、不揮発性メモリと、ランダムアクセスメモリと、ベクトル−マトリックス乗算器と、２進数排他的ＯＲ実施手段と、ランダム数発生器と、刻み機能と、順列発生器とを有し、確認装置は、制御装置を有し、制御装置には、不揮発性メモリと、ハミング重み計算器と、比較器と、ベクトル−マトリックス乗算器と、ランダムアクセスメモリと、２進数排他的ＯＲ実施手段と、ランダム数発生器と、刻み機能と、順列発生器とが接続され、識別装置と確認装置との間には通信インターフェースが接続されていることを特徴とする請求項１〜３１のいずれか一項に記載の方法。
【請求項２９】
請求項１〜２８のいずれか１項に記載の方法を実施するための識別装置であって、
サイズｎ×ｋのマトリックスＭをｎビットのベクトルによって乗算するための少なくとも１つの手段と、ハミング重みｄの秘密ベクトルｓｉを記憶するための手段と、ランダムなベクトルｙとランダムな順列ｙとを生成する手段と、暗号ハッシュＨを実施するための手段と、確認装置との通信手段とを有することを特徴とする装置。
【請求項３０】
請求項１〜２８のいずれか１項に記載の方法を実施するための確認装置であって、
サイズｎ×ｋのマトリックスＭをｎビットのベクトルによって乗算するための少なくとも１つの手段と、少なくとも１つのパブリックベクトルＫｉ（Ｋｉ＝Ｍｓｉ）を記憶するための手段と、整数をランダムに生成する手段と、暗号法ハッシュＨを実施する手段と、識別装置との通信装置とを有する装置。
【請求項３１】
マトリックスＭが擬似ランダム数の決定発生器によって生成される請求項２９または３０に記載の装置。
【請求項３２】
マトリックス乗算器Ｍが一列整列の複数のＡＮＤゲートによって形成されており、これらのゲートの各々の入力にベクトルｙのビットとマトリックスＭの現在の行のビットとが入力され、ＡＮＤゲートの出力は排他的ＯＲゲートの三角網に供給され、回路の出力で、ｙとマトリックスMの現在の行によるスカラー積に対応するビットが得られることを特徴とする請求項２９〜３１のいずれか一項に記載の装置。
【請求項３３】
識別装置は、制御装置と、不揮発性メモリと、ランダムアクセスメモリと、ベクトル−マトリックス乗算器と、２進数排他的ＯＲ実施手段と、ランダム数発生器と、刻み機能と、順列発生器とを有し、確認装置は、制御装置を有し、制御装置には、不揮発性メモリと、ハミング重み計算器と、比較器と、ベクトル−マトリックス乗算器と、ランダムアクセスメモリと、２進数排他的ＯＲ実施手段と、ランダム数発生器と、刻み機能と、順列発生器とが接続され、識別装置と確認装置との間には通信インターフェースが接続されていることを特徴とする請求項２９〜３２のいずれか一項に記載の装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は確認装置によって少なくとも１つの識別装置を認証(authentifier)する方法に関するものであり、特にシンドロームによるデコード化 (decodage par syndrome)の問題に基づいて解読を無効にするプロトコル(protocole a apport nul de connaissance)で行われる認証方法に関するものである。本発明は、さらに、上記方法を実施するための識別装置および確認装置にも関するものである。
本発明は特に安全性が疑わしいチャネルを介して２つの装置間でデータを交換する場合いわゆるセキュリティー（安全）通信に適用される。
【０００２】
【従来の技術】
セキュリティー通信では相互認識手段すなわち確認装置にユーザを認証させてユーザがデータまたはサービスにアクセスできるようにする手段が必要である。セキュリティー通信の必要は多数あり、特に、銀行のコンピュータで命令を転送する場合等を挙げることができる。この場合には、２つのコンピュータは正しく通信でき且つ不正者とは通信しないということが確実でなければならない。この他に、切符の自動販売機、有料テレビのデコーダー、カード公衆電話等を挙げることができる。これらのシステムでは識別装置がチップカード（ＩＣカードともいう）や電子キー等の携帯装置で構成され、販売機やデコーダに収容された確認装置でチップカードや電子キーのような各種のアクセス手段の有効性を管理しなければならない。
【０００３】
こうした場合に多く用いられる方法は秘密キーを用いた暗号化法を基礎とした認証方法であり、これまではこの方法が最も容易に実行できる方法であった。この方法では、チップカード等の識別装置と確認装置（例えば、端末装置、カード読取機、デコーダー、カード公衆電話等）とが同じ秘密キーを持ち、対称的アルゴリズムすなわち１方向機能によって識別が行われる。この方法の欠点は両者すなわち確認装置と識別装置とが互いに秘密を共有しなければならず、しかも、この条件が常に確認されていない点にある。すなわち、同じ秘密キーがネットワークの両方の端末すなわち確認装置と識別装置とに存在するため、海賊行為者が確認装置を購入してそれを分析すれば、確認装置の内部構造は知ることができるので、分析結果に基づいて海賊行為者が高性能な識別装置を作ることが技術的に可能であるという欠点がある。
【０００４】
従来法のこの欠点から保護するための種々の方法の中で、解読を無効にするプロトコルが今日までのところより高い安全性を保証している。この解読を無効にするプロトコルの機能上の特徴は、限定された回数だけ識別装置と相互に情報交換し且つ確認装置の構造を完全に分析しただけでは識別装置を再構成することはできないという点にある。この解読を無効にするプロトコルはフィアット(FIAT)の米国特許第 4,748,668号やギロー(GUILLOU) 達の欧州特許出願第A-0,311,470 号等に記載されている。
しかし、この解読を無効にするプロトコルは識別問題の理想的な解決方法ではあるが、大きな欠点もある。すなわち、この方法を行うためには極めて多くの演算が必要であるためエレクトロニクス的には実施が難しい。
【０００５】
そのために、エレクトロニクス的に容易に実施可能な識別方法を開発する試みが種々行われてきた。その１つの方法がシャミール(SHAMIR)の米国特許第4,932,056 号に記載されている。この特許に記載の方法はＰＫＰ法として呼ばれ、多数の数を扱う他のアルゴリズムに比べれば、エレクトロニクス的に比較的容易に実行できる。しかし、確認装置と識別装置間との間の交換速度が遅いという欠点がある。
【０００６】
【発明が解決しようとする課題】
本発明の目的は上記欠点を解消したエレクトロニクス的に容易に実行可能な確認装置による識別装置の迅速な認証方法を提供することにある。
【０００７】
【課題を解決するための手段】
本発明は「モジュラーナップザック（Ｍｏｄｕｌａｒ  Ｋｎａｐｓａｃｋ）」として知られた問題すなわちシンドロームによるデコード化の問題に基づく解読を無効にするプロトコルによって認証を実施する、確認装置によって少なくとも１つの識別装置を認証する認証方法を提供する。
本発明の認証方法の特徴は下記段階にある：
（１）識別装置と確認装置との間の対話を可能にするための、サイズがｎでハミング重み（ｐｏｉｄｓ  ｄｅ  Ｈａｍｍｉｎｇ）がｄ（ｄ＜ｎ）である少なくとも１つのベクトルｓｉで構成された秘密キーと、係数がランダムに選択されるサイズｎ×ｋのマトリックスＭとＫｉ＝Ｍｓｉ等の少なくとも１つのベクトルＫｉとで構成されるパブリックキーとを設定し、
（２）識別装置側で、サイズがｎのランダムなベクトルｙとランダムな順列（ｕｎｅ  ｐｅｒｍｕｔａｔｉｏｎ）ｐとを生成し、ｙ、ｐ、ｓ、Ｍの関数パラメータに暗号ハッシュ関数（ｕｎｅ  ｆｏｎｃｔｉｏｎ  ｄｅ  ｈａｃｈａｇｅ）Ｈを適用して、得られたコミットメント（ｅｎｇａｇｅｍｅｎｔ）を確認装置へ送り、
（３）確認装置が取って識別装置へ送った任意の数の関数で、ｓｉを明らかにしないでｙ、ｐ、ｓｉのある関数要素を識別装置で明らかにし、
（４）受けた要素とパブリックキーとを用いて確認装置側で上記の数の関数でコミットメントが正確であることをテストし、
（５）所望の安全レベルに応じた回数で上記の動作を反復する。この安全レベルは回数と共に指数的に大きくなる。
【０００８】
【作用】
上記認証方法ではサイズｎ×ｋのマトリックスＭを用いる。このマトリックスＭは全てのユーザに共通でランダムに構成される。各ユーザは予め書き込まれた数ｄの１でｎビットのワードの秘密キーを受ける。この場合、システムはパブリックキーＫを例えばＫ＝ＭＳのように計算する。
あるいは、各ユーザに複数の秘密キーｓ[1],・・・, ｓ[w] を与え、この各々にパブリックキーＫ[i] ＝Ｍs[i]を組み合せることもできる。これらのベクトルｓ[1],  ・・・, s[w]は展開した単位コードを形成するのが好ましい。
【０００９】
上記の識別方法は原理的にコミットメント法（ｔｅｃｈｎｉｑｕｅ  ｄ’  ｅｎｇａｇｅｍｅｎｔ）の概念に基づいている。今、Ｕを２進数要素のシーケンスとすると、Ｕに対するコミットメントは一定の暗号ハッシュ関数を介したＵの画像である。このコミットメントは一方向関数として使用される。
【００１０】
本発明認証方法の第１実施例では、第１段階で、
(a) 各プロセスに共通して、識別装置がその識別子および／またはこの識別子がベルトルＫi に対応することを確認する確認装置に割り当てられた１つまたは複数のキーを明らかにする。
次いで、ランダムなベクトルｙとランダムな順列ｐとを選択した後に、
(b) 識別装置が下記：
ｈ1 ＝Ｈ (ｐ、Ｍｙ）、ｈ2 ＝Ｈ (ｙp ) 、ｈ3 ＝Ｈ（y xor s)p )
を計算して確認装置へ順列｛ｈ1 、ｈ2 、ｈ3 ｝を送る。
（ここで、ｘp はｐで置換されたベクトルｘを表し、ｘｏｒは排他ＯＲ関数を表す)
(c) 次いで、確認装置がランダムに０＜ｑ＜４の数を取り、この数を識別装置へ送る。
(d) そして、識別装置が下記で定義される応答ｒを計算し、確認装置へ送る：
ｑ＝１ならば、ｒ＝｛ｙ、ｐ｝
ｑ＝２ならば、ｒ＝｛ｙ  xor ｓ、ｐ｝
ｑ＝３ならば、ｒ＝｛ｙp 、ｓp ｝
(e) 確認装置はｒ＝｛Ｕ、Ｖ｝を受けて下記であることを調べる：
ｑ＝１ならば、ｈ1 ＝Ｈ（Ｖ、ＭＵ）で、ｈ2 ＝Ｈ（Ｕv )
ｑ＝２ならば、ｈ1 ＝Ｈ（Ｖ、（ＭＵ）xor Ｋ）で、ｈ3 ＝Ｈ（Ｕv )
ｑ＝３ならば、ｈ2 ＝Ｈ（Ｕ）、ｈ3 ＝Ｈ（Ｕ xorＶ）且つＶのハミング重み(poids de Hamming)がｄである。
(f) このｑに対応するテストが正しいこと確認された時に、確認装置がプロトコ
ルは成功裏に終了したと見なす。
【００１１】
本発明の別の実施例では、ベクトルｓがｗ個のベクトルｓ［１］，ｓ［２］，・・・ｓ［Ｗ］で置換されて、重みｄの単体コードを形成する。この実施例では、ランダムなベクトルｙとランダムな順列ｐとを選択した後に、
（ｂ）識別装置がｈ１＝Ｈ（Ｍｙ，ｐ）、ｈ２＝Ｈ（ｙｐ，ｓ［１］ｐ，・・・，ｓ［ｗ］ｐ）を計算して、コミットメント｛ｈ１、ｈ２｝を識別装置へ送る。
（ｃ）確認装置はランダムに２進数ベクトルｂ［１］、・・・、ｂ［ｗ］を取ってそれを識別装置に送る。
（ｄ）識別装置は下記の式で定義される応答ｚを計算して確認装置へ送る：
ｚ＝ｙｐ  ｘｏｒ  ｒ  ｓ［１］ｐｂ［１］  ｘｏｒ  ｓ［２］ｐｂ［２］  ｘｏｒ  ｓ［３］ｐｂ［３］・・ｘｏｒ  ｓ［ｗ］ｐｂ［ｗ］
（ｅ）確認装置はビットｑをランダムに取って識別装置に送る。
（ｆ）識別装置は下記の式で定義される回答ｒを送る：
ｑ＝０ならば、ｒ＝｛ｙｐ、ｓ［１］ｐ，・・・，ｓ［ｗ］ｐ｝
ｑ＝１ならば、ｒ＝｛ｐ｝
（ｇ）確認装置はｑ＝０ならば、応答ｒ＝｛ｒ［０］、ｒ［１］，・・・，ｒ［ｗ］｝を受け、
ｑ＝１ならばｒ＝｛ｒ［０］｝を受ける。
（ｈ）確認装置は下記のことを調べる：
ｑ＝０ならば、ｈ２＝Ｈ（ｒ）、ｚ＝ｒ［０］  ｘｏｒ  ｒ［１］ｂ［１］ｘｏｒ  ｒ［２］ｂ［２］  ｘｏｒ  ｒ［３］ｂ［３］・・・ｘｏｒ  ｒ  ［ｗ］ｂ［ｗ］で、｛ｒ［１］，ｒ［２］，・・・ｒ［ｗ］｝は単体コードを形成。
ｑ＝１ならば、Ｈ（Ｍ（順列（ｚ，ｒ［０］））  ｘｏｒ  （Ｋ［１］ｂ［１］  ｘｏｒ  Ｋ［２］ｂ［２］  ｘｏｒ  Ｋ［３］ｂ［３］・・・ｘｏｒ  Ｋ［ｗ］ｂ［ｗ］）、ｒ［０］）＝ｈ１
（ここで、Ｋ［ｉ］＝Ｍｓ［ｉ］）
（ｉ）ｑに対応するテストが正確であることが明らかな時に、確認装置はプロトコルが成功裏に終了したとみなす。
本発明の上記以外の利点は添付図面を参照した以下の本発明方法の各種実施例から明らかになろう。
【００１２】
【実施例】
本発明は、解読を無効にするプロトコルによって実施される新規な認証方法に関するものである。
本発明方法の安全性はシンドロームによるデコード(DS)の問題に基づくものである。シンドロームによるデコード(DS)の問題は以下のように説明できよう。すなわち、２進数マトリックスＭの場合でも、２進数ベクトルＫの場合でも、Ｍｓ＝Ｋのように重みｓが比較的大きいか、小さい２進数ベクトルｓを見つけることである。重みとはそのベクトル中の１のビット数を意味する。この問題はマトリックスＭのサイズとｓのハミング重み(poid de Hamming) ｄとを正しく選択すると、現在公知の計算手段で解くのは極めて難しい。シンドロームによるデコート化の問題を解決するための公知のアルゴリズム、例えば、レオン(J. S. Leon)の論文「大きなエラー補正コードの最小重みを計算するための確率アルゴリズム (A probabilistic  algorithm for  computing  minimum weights of large error-correcting codes) 」（ＩＥＥＥ  ＴＩＴ  34(5) 第1354〜1359頁) やスターン(J. Stern)の論文「小さい重みのコードワードを見つける方法 (A method for finding codewords of small weight) 」 (Coding  Theory &  Applications, notes de lecture en  Computer Science 388(1989) 、第 106〜113 頁) に記載のアルゴリズムは、計算時間がマトリックスのサイズに比例して指数関数的に長くなる。
【００１３】
実際の計算手段では、Ｍのサイズが約 500×250 となり、ｄの値が50に近くなると、ｓを計算することができない。しかし、ｓ（偶然ではあるが、正しい重みが付いた）がわかると、Ｋは計算することができる。
本発明では、この１方向特性を使用して、Ｋを知っている確認装置が相互作用中にその値を知らせずに識別装置がｓを有しているか否かをテストすることができる。
【００１４】
本発明の認証方法を実施する際には、正当権限者（autorite、アクセスが許された正当な使用者）が係数ａijで構成されたマトリックスＭをランダムに選択して公表(ubliier) する。実際には、マトリックスＭ全体を記憶するのを避けるために、ｆ（ｉ、ｊ）によって各係数ａijを生成させることができる（ここで、ｆは公表された任意の擬似ランダム関数である）。
また、正当権限者はハミング重みが比較的小さい２進数ベクトルの組ｓj すなわちｓ1,ｓ2,・・・, ｓn を選択して、それを各識別装置に配分する。従って、識別装置ｉはｓi を受ける。一方、パブリックキーＫi （但し、Ｋi ＝Ｍｓi ）を公表する。
【００１５】
別の実施例では正当権限者がＫi に署名を付けて、パブリックキーを有効化するめには正当権限者との相互通信を必要とする閉じた暗証システムを構成する秘密キーｓi の保持者の同定システムを用いる。
以下、本発明方法の特殊な２つの実施態様を説明する。
【００１６】
第１の方法を図１を参照して説明する。
図１は認証のために識別装置と確認装置との間で実行される通信プロトコルの概念図である。識別装置は例えばチップカードや電子キーで構成される物理的に侵入不可能なものである。チップカードの場合には内部メモリにアクセスすることは不可能であるが、確認装置の環境に関しては何も仮定していない。
図３、図４に概念的に示した識別装置および確認装置では、識別装置が不揮発性メモリ内にその秘密キーｓｉとマトリックスＭとを有している。同様に、確認装置は不揮発性メモリ内にパブリックキーの組ＫｉとマトリックスＭとを有している。
識別装置が確認装置とコンタクトをとる場合に２つの装置が実行するプロトコルは下記の通りである：
（ａ）先ず、識別装置はその識別子および／またはそのキーＫｉを確認装置に提示して、その識別子がベクトルＫｉに対応することを確認する。
（ｂ）次に、識別装置はランダムな２進数ベクトルｙとランダムな順列ｐとを選択する。次いで、識別装置は下記要素：
ｈ１＝Ｈ（ｐ、Ｍｙ）、ｈ２＝Ｈ（ｙｐ）、ｈ３＝Ｈ（ｙ  ｘｏｒ  ｓ）ｐ）を計算し、確認装置にコミットメント｛ｈ１、ｈ２、ｈ３｝を送る。
（ここで、ｘｐはｐで順列化されたベクトルｘを示し、ｘｏｒは排他的ＯＲを表す）
（ｃ）次に、確認装置はランダムな数０＜ｑ＜４を取って、その数を識別装置へ送る。
（ｄ）次に、識別装置は下記で定義される回答を計算して確認装置へ送る：
ｑ＝１ならば、ｒ＝｛ｙ、ｐ｝
ｑ＝２ならば、ｒ＝｛ｙ  ｘｏｒ  ｓ，ｐ｝
ｑ＝３ならば、ｒ＝｛ｙｐ、ｓｐ｝
（ｅ）確認装置はｒ＝｛Ｕ、Ｖ｝を受けて下記をテストする：
ｑ＝１ならば、ｈ１＝Ｈ（Ｖ、ＭＵ）かつｈ２＝Ｈ（Ｕｖ）
ｑ＝２ならば、ｈ１＝Ｈ（Ｖ、（ＭＵ）ｘｏｒ  Ｋ）かつｈ３＝Ｈ（Ｕｖ）
ｑ＝３ならば、ｈ２＝Ｈ（Ｕ）、ｈ３＝Ｈ（Ｕ  ｘｏｒ  Ｖ）かつＶのハミング重みがｄである。
（ｆ）ｑに対応するテストが正解な場合には、確認装置はプロトコルを成功裏に終了する。テストが正解でない場合には識別装置は拒絶される。
識別装置が受入れられた時には、保護システムの入力／出力インターフェースに制御インパルスが送られてその後のトランザクションが開始される。上記の各操作全体は図１に示されており、その左側部分は識別装置側で実施された各操作であり、右側部分は確認装置側で実施された各操作である。矢印は一方の装置から他方の装置へ情報が送られることを示している。
【００１７】
上記プロセスの安全性を大きくするためには、識別装置と確認装置の２つの装置が上記の段階を複数回すなわちｔ回繰り返して、全ての回数でプロトコルが成功した時のみしか確認装置が識別装置を認証しないようにするのが好ましい。好ましくは０＜ｔ＜60のようなｔを選択する。
【００１８】
上記の基本的方法は、エレクトロニクス的に実行を単純化したり、計算時間を短くするために種々変更することができる。すなわち、ベクトルＭｙをキーで転送し、対応するテストを変更してＨ１＝Ｈ（ｐ）を再定義することができる。別の実施例では、確認装置および／または識別装置がベクトル座標の二次的な組に部分的なテストを実施してより迅速に計算を実施する。これらの場合に、プロセス上の幾つかの段階を下記のように変更する：
すなわち、ランダムなベクトルｙとランダムな順列ｐとを選択した後に、
（ｂ）識別装置が下記式：
ｈ１＝Ｈ（ｐ）、ｈ２＝Ｈ（ｙｐ）、ｈ３＝Ｈ（ｙ  ｘｏｒ  ｓ）ｐ）
を計算し、確認装置にコミットメント｛ｈ１、ｈ２、ｈ３｝を送り、
（ｃ）次に、確認装置は互いに分離した数のリストＧ＝｛ｇ１、・・・ｇｆ｝（但し、１＜ｇｉ＜ｋ）をランダムに取ってそれを識別装置へ送り、
（ｄ）識別装置は、置換がＧによって示されたＭｙのｆビットだけを計算し、得られたベクトルＺを確認装置へ送る。
【００１９】
この場合、段階(e) も下記のように変更される：
(e) 確認装置はｒ＝｛Ｕ、Ｖ｝を受けて下記のように制御する：
ｑ＝１ならば、ｈ1 ＝Ｈ（Ｖ）、ｈ2 ＝Ｈ（Ｕv ) かつエキス(Extrait)(ＭＵ、Ｇ） xor  Ｚ＝０ (ここで、エキス (ＭＵ、Ｇ）はｘ中でＧによって表されたビットだけを選択することによって、得られた射影ベクトルを表す）、
ｑ＝２ならば、ｈ1 ＝Ｈ（Ｖ）、ｈ3 ＝Ｈ（Ｕv ) かつエキス (ＭＵ xorＫ、Ｇ） xor  Ｚ＝０、
ｑ＝３ならば、ｈ2 ＝Ｈ（Ｕ）、ｈ3 ＝＝Ｈ（Ｕ xor  Ｖ）かつＶのハミング重みはｄである。
【００２０】
本発明の方法の別の実施例では（ｂ）段階を下記のように変更する：
（ｂ）ランダムなベクトルｙとランダムな順列ｐとを選択した後に、識別装置は下記式：
ｈ１＝Ｈ（ｐ）、ｈ２＝Ｈ（ｙｐ）、ｈ３＝Ｈ（ｙ  ｘｏｒ  ｓ）ｐ）を計算し、確認装置にコミットメント｛ｈ１、ｈ２、ｈ３｝を送り、
（ｃ）識別装置はＱ＝Ｍｙを計算し、得られたベクトルＱを確認装置に送り、（ｄ）確認装置は互いに分離した数のリストＧ＝｛ｇ１、・・・ｇｆ｝（ここで、１＜ｇｉ＜ｋ）をランダムに取ってベクトルＺ＝エキス（Ｑ、Ｇ）を計算する。
この場案には段階（ｅ）を下記のように変更する：
（ｅ）確認装置はｒ＝｛Ｕ、Ｖ｝を受けて下記のように制御する：
ｑ＝１ならば、ｈ１＝Ｈ（Ｖ）、ｈ２＝Ｈ（Ｕｖ）かつエキス（ＭＵ、Ｇ）  ｘｏｒ  Ｚ＝０）、
ｑ＝２ならば、ｈ１＝Ｈ（Ｖ）、ｈ３＝Ｈ（Ｕｖ）かつエキス（ＭＵ  ｘｏｒ  Ｋ、Ｇ）  ｘｏｒ  Ｚ＝０、
ｑ＝３ならば、ｈ２＝Ｈ（Ｕ）、ｈ３＝＝Ｈ（Ｕ  ｘｏｒ  Ｖ）かつＶのハミング重みはｄである。
【００２１】
次に、本発明の認証方法の別の実施例を図２を参照して説明する。この第２の実施例は上記の実施例より多くの計算を必要とするが、不法者の成功の確率はより急速に減少する。この場合には、ベクトルｓｉは拡張された単体コードを形成するベクトルｓ［１］，・・・ｓ［ｗ］の組に代える。また、ベクトルＫｉはＭ（ｓ［ｉ］）＝Ｋ［ｉ］のようなベクトルＫ［１］，・・・Ｋ［ｗ］の組に代える。
この実施例は図１で使用した記号と同様な記号で示した図２の下記の段階を有している：
（ａ）識別装置がランダムなベクトルｙとランダムな順列ｐとを選択した後に、
ｈ１＝Ｈ（Ｍｙ、ｐ）、ｈ２＝Ｈ（ｙｐ、ｓ［１］ｐ，・・・，ｓ［ｗ］ｐ）を計算して確認装置へコミットメント｛ｈ１、ｈ２｝を送り、
（ｂ）確認装置はランダムに２進数ベクトルｂ［１］，・・・，ｂ［ｗ］を取って識別装置へそれを送り、
（ｃ）識別装置は下記の式で定義される応答ｚを計算して確認装置へ送る：
ｚ＝ｙｐ  ｘｏｒ  ｓ［１］ｐｂ［１］  ｘｏｒ  ｓ［２］ｐｂ［２］  ｘｏｒ  ｓ［３］ｐｂ［３］・・・ｘｏｒ  ｓ［ｗ］ｐｂ［ｗ］
（ｄ）確認装置はビットｑをランダムに取って識別装置へ送り、
（ｅ）識別装置は下記の式で定義される応答ｒを送る：
ｑ＝０ならば、ｒ＝｛ｙｐ、ｓ［１］ｐ，・・・，ｓ［ｗ］ｐ｝
ｑ＝１ならば、ｒ＝｛ｐ｝
（ｆ）確認装置は、ｑ＝０ならば応答ｒ＝｛ｒ［０］、ｒ［１］、・・・、ｒ［ｗ］｝を受け、ｑ＝１ならばｒ＝｛ｒ［０］｝を受ける、
（ｇ）確認装置は下記のテストを行う：
ｑ＝０ならば、ｈ２＝Ｈ（ｒ）、ｚ＝ｒ［０］  ｘｏｒ  ｒ［１］ｂ［１］  ｘｏｒ  ｒ［２］ｂ［２］  ｘｏｒ  ｒ［３］ｂ［３］・・・ｘｏｒ  ｒ［ｗ］ｂ［ｗ］かつ｛ｒ［１］、ｒ［２］、・・・ｒ［ｗ］｝が単体コードを形成する、
ｑ＝１ならば、Ｈ（Ｍ（順列（ｚ、ｒ［０］））  ｘｏｒ  （Ｋ［１］ｂ［１］  ｘｏｒ  Ｋ［２］ｂ［２］  ｘｏｒ  Ｋ［３］ｂ［３］・・・ｘｏｒ  Ｋ［ｗ］ｂ［ｗ］、ｒ［０］）＝ｈ１
（ｈ）ｑに対応するテストが正確であることが分かった時に、確認装置はプロ
トコルが成功裏に終了したとみなす。
【００２２】
この方法はベクトルｚの脱順列（ｄｅ：ｅｒｍｕｔａｔｉｏｎ）を避けるために、上記のようなベクトルの座標の二次的な組について単純化された確認を実施するように変更することができる。この場合には例えば下記の段階を有する：
（ａ）識別装置はランダムなベクトルｙとランダムな順列ｐとを選択した後に、ｈ１＝Ｈ（ｐ）、ｈ２＝Ｈ（ｙｐ、ｓ［１］ｐ，・・・，ｓ［ｗ］ｐ）を計算し、確認装置にコミットメント｛ｈ１、ｈ２｝とベクトルｈ０＝Ｍｙを送り、
（ｂ）確認装置はランダムに２進数ベクトルｂ［１］，・・・，ｂ［ｗ］を取って識別装置にそれを送り、
（ｃ）識別装置は下記の式で定義される応答ｚを計算して確認装置へ送る：
ｚ＝ｙｐ  ｘｏｒ  ｓ［１］ｐｂ［１］  ｘｏｒ  ｓ［２］ｐｂ［２］  ｘｏｒ  ｓ［３］ｐｂ［３］・・・ｘｏｒ  ｓ［ｗ］ｐｂ［ｗ］
（ｄ）確認装置はビットｑをランダムに取って識別装置へ送り、
（ｅ）識別装置は下記の式で定義される応答ｒを送る：
ｑ＝０ならば、ｒ＝｛ｙｐ、ｓ［１］ｐ、・・・、ｓ［ｗ］ｐ｝
ｑ＝１ならば、ｒ＝｛ｐ｝
（ｆ）確認装置は、ｑ＝０ならば応答ｒ＝｛ｒ［０］、ｒ［１］、・・・、ｒ［ｗ］｝を受け、ｑ＝１ならばｒ＝｛ｒ［０］｝を受ける、
（ｇ）確認装置は下記をテストする：
ｑ＝０ならば、ｈ２＝Ｈ（ｒ）、ｚ＝ｒ［０］  ｘｏｒ  ｒ［１］ｂ［１］  ｘｏｒ  ｒ［２］ｂ［２］  ｘｏｒ  ｒ［３］ｂ［３］・・・ｘｏｒ  ｒ［ｗ］ｂ［ｗ］かつ｛ｒ［１］、ｒ［２］、・・・、ｒ［ｗ］｝は単体コードを形成する。
ｑ＝１ならば、ｈ１＝Ｈ（ｒ［０］）かつ（ｈ０）ｒ［０］  ｘｏｒ  （Ｋ［１］ｂ［１］  ｘｏｒ  Ｋ［２］ｂ［２］  ｘｏｒ  Ｋ［３］ｂ［３］・・・ｘｏｒ  Ｋ［ｗ］ｂ［ｗ］）ｒ［０］＝ｚ
対応するテストが正確であることが分かった時に、確認装置はプロトコルが成功裏に終了したとみなす。
第１の実施例の場合と同様に、上記のプロトコルもｔ回繰り返してプロトコルの全回が成功した時にのみ確認装置が識別装置を認証することもできる。
【００２３】
また、上記２つの方法の安全性は各種パラメータ、特にｄ、ｎ、ｋ及びｔのサイズに依存する。互いに交信する２つの装置のレベルで作動中にｔの選択を容易に変更できるということは当業者には明らかである。パラメータｄ、ｎ及びｋはシステムパラメータであり、これらの選択は最初に決定されており、変更は困難である。
これらのパラメータｄ、ｎ、ｋは、ランダムなコード（ｎ、Ｋ）の最小重みに対して理論限界値を与えるワルシャモフ−ギルバート(Warshamov-Gilbert) 限界で選択するのが好ましい。すなわち、ｄ＝ｎＨ2 （ｋ／ｎ）（ここで、Ｈ2(ｘ）はエントロピー関数Ｈ2 （ｘ）＝−ｘ log2 （ｘ）−（１−ｘ）log2（１−ｘ）である) 。この場合、ｄは下記のように選択する：
ｄ＝（ｋ−ｎ）log2（１−（ｋ／ｎ））−ｋlog2（ｋ／ｎ）または
ｄ＝（ｎ−（ｋ−ｎ）log2（１−（ｋ／ｎ））＋ｋlog2（ｋ／ｎ）
【００２４】
また、ワルシャモフ−ギルバート限界の制限下ではｎとｋとの値を結ぶ２ｋ＝ｎのような関係式を加えるのが便利である。
上記の関係式、好ましくは、ｄ＝0.11ｎまたはｄ＝0.89ｎを用いると、ｎとｋの組は下記の値の１つをとることができる：
｛ｎ＝384 、ｋ＝196 ｝または｛ｎ＝512 、ｋ＝256 ｝または｛ｎ＝1024、ｋ＝512 ｝または｛ｎ＝768 、ｋ＝384 ｝
【００２５】
上記の全ての方法で使用できる変形実施例では、暗号ハッシュ関数を暗号化関数（ｆｏｎｃｔｉｏｎ  ｄｅ  ｃｈｉｆｆｒｅｍｅｎｔ）に代えて、ハッシュされるメッセージ（ｍｅｓｓａｇｅ  ａ  ｈａｃｈｅｒ）がキーおよび／または暗号化すべきメッセージの役割を果たし且つハッシュされたメッセージの真実性の制御がハッシュされたメッセージおよび／または暗号化キーを明らかにする。この問題に関しては下記刊行物を参照することができる：
（１）ヴァン  ダムガード（Ｉｖａｎ  Ｄａｍｇａａｒｄ）、クリプト（Ｃｒｙｐｔｏ）’８９『ハッシュ関数の設計原理（Ｄｅｓｉｇｎ  ｐｒｉｎｃｉｐｌｅｓ  ｆｏｒｈａｓｈ−ｆｕｎｃｔｉｏｎｓ）』
（２）ナオール（Ｎａｏｒ）達の『１方向ハッシュ関数とその暗号への応用（Ｏｎｅ−ｗａｙ  ｈａｓｈ  ｆｕｎｃｔｉｏｎｓ  ａｎｄ  ｔｈｅｉｒ  ｃｒｙｐｔｏｇｒａｐｈｉｃ  ａｐｐｌｉｃａｔｉｏｎｓ）』（Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ２１ｓｔ  ａｎｎｕａｌ  ＡＣＭ  ｓｙｍｐｏｓｉｕｍ  ｏｎ  ｔｈｅｏｒｙ  ｏｆ  ｃｏｍｐｕｔｉｎｇ、Ｓｅａｔｔｌｅ、Ｗａｓｈｉｎｇｔｏｎ、Ｍａｙ１５〜１７、１９８９、３３〜４３頁）
（３）マティアス（Ｍａｔｙａｓ）の『暗号法アルゴリズムを用いた強い１方向関数の生成（Ｇｅｎｅｒａｔｉｎｇ  ｓｔｒｏｎｇ  ｏｎｅ−ｗａｙ  ｆｕｎｃｔｉｏｎｓ  ｗｉｔｈ  ｃｒｙｐｔｏｇｒａｐｈｉｃ  ａｌｇｏｒｉｔｈｍ）』（ＩＢＭ  Ｔｅｃｈｎｉｃａｌ  ｄｉｓｃｌｏｓｕｒｅ  ｂｕｌｌｅｔｉｎ、第２７巻、第１０Ａ号、１９８５年３月、５６８５〜５６９５頁）。
【００２６】
「モジュラーナップザック(Modular Knapsack)」を基礎とする方法の場合のベクトルｙの選択と全ての計算はモジュロ(modulo)ｍで実施され、ｘｏｒ演算はモジュロｍの加算または減算で置換される。重みのテストは、ベクトルの全座標が０であるか１であるかの確認と、このベクトルの重みが一定であることの確認で置換され、ｎ、ｋ及びｍの間の関係式はｎ−ｋIn（ｍ）／In２かつｎ−ｋ＞64である。従って、ｍは数２、３、５、７または２c （ここで、ｃは小さい整数である）の中から選択され、組｛ｎ、ｋ、ｍ｝は下記の１つをとることができる：
｛196 、128 、３｝または｛384 、256 、3 ｝または｛128 、64、5 ｝または｛192 、96、5 ｝
【００２７】
大抵の場合、識別装置の保持者の識別子ＩＤからｓを演繹する手段を有することが重要である。それによって、例えば確認装置でのパブリックキーＫｉのバックアップを防ぎ、新しいユーザがシステムに参加してパブリックキーの辞書を変えるのを防ぐことができる。
このために、正当権限者は全ての共通パラメータに対して一度に拡張した単体コードσ１、・・・、σｕを選択する。
識別子がＩＤであるユーザを記録するには、パプリックの１方向関数（例えばハッシュ関数）によってＩＤの値をハッシュし、２進数ベクトルｅ１・・・ｅｕを作って、下記〔式２〕を計算する：
【００２８】
【式２】
0003675494.tif 000002
【００２９】
Ｋ1 ＝Ｍ（σ1 ）、・・・、Ｋu ＝Ｍ（σ）u を公表し、ユーザＩＤにＳIDを与える。
確認装置は下記〔式３〕を計算して識別装置がｓIDを有することを確認することができる：
【００３０】
【式３】
0003675494.tif 000003
（ここで、ベクトルｅ１、・・・、ｅｕはＩＤのハッシュによって与えられる）
【００３１】
十分な安全度に達するには、ｕ＞40であることが不可欠であり、そのためには経験的にかなり大きなサイズの単体コードが必要である。実際には、サイズの小さいＬ個の単体コードの組（例えばｄ＝64、ｄｉｍ＝７、ｎ＝580 、ｋ＝290,Ｌ＝８）を選択し、各ユーザに対して下記のようにして得られたＬ個の秘密キーｓ[1] ID、ｓ[2] ID、・・・、ｓ[L] IDを計算することによって、適切なサイズにすることが容易にできる。
全ての単体コードＬについて一度にサイズdim を選択し、
σ[1]1、・・・σ[1] dim 
σ[2]1、・・・σ[2] dim 
σ[L]1、・・・σ[L] dim 
各識別装置でパブリックキーの完全な組Ｋ[i] j ＝Ｍ（σ[i] j ）を与える (ここで、ｉ＝１、・・・Ｌ、ｊ＝１、・・・dim)
【００３２】
各ユーザに対して、
(1) Ｈ（ＩＤ）＝ｅ1 、・・・ｅu を計算し、
(2) ベクトルを各々ｄｉｍビットのＬ個のセグメントｅ[1] 、・・・ｅ[L] に分割し、
(3) ｉ＝１〜Ｌに対して下記〔式４〕を計算する
【００３３】
【式４】
0003675494.tif 000004
【００３４】
(4) ユーザにｓ[1]ID、ｓ[2]ID、・・・、ｓ[I]IDを与える。
【００３５】
各ｓ［ｉ］ＩＤは、下記プロトコルに示すように、直列（ｓ［ｉ］ＩＤを順番に連続して使用する）または並行で使用する：
（ａ）識別装置は確認装置にその識別子ＩＤを明らかにし、
（ｂ）確認装置はＫ［１］ＩＤ、Ｋ［２］ＩＤ、・・・Ｋ［Ｌ］ＩＤを計算し、
（ｃ）識別装置はＬ個のベクトルｙ［１］、・・・ｙ［Ｌ］とＬ個の順列ｐ［１］、・・ｐ［Ｌ］を選択し、ｈ１＝Ｈ〔｛ｐ［１］｝，｛Ｍｙ［ｉ］｝〕、
ｈ２＝Ｈ（｛ｙ［ｉ］ｐ［ｉ］｝）、ｈ３＝Ｈ〔｛ｙ［ｉ］  ｘｏｒ  ｓ［ｉ］ｐ［ｉ］｝）を計算して確認装置へコミットメント｛ｈ１、ｈ２、ｈ３｝を送り、
（ｄ）確認装置はランダムな数０＜ｑ＜４を取って識別装置にそれを送り、
（ｅ）識別装置は下記で定義される応答ｒを確認装置に送る：
ｑ＝１ならば、ｒ＝｛｛ｙ［ｉ］｝、｛ｐ［ｉ］｝｝
ｑ＝２ならば、ｒ＝｛｛ｙ［ｉ］ｘｏｒ  ｓ［ｉ］｝、｛ｐ［ｉ］｝｝
ｑ＝３ならば、ｒ＝｛｛ｙ［ｉ］ｐ［ｉ］｝、｛ｓ［ｉ］ｐ［ｉ］｝｝
（ｆ）確認装置はｒ＝｛Ｕ、Ｖ｝を受けて下記をテストする：
ｑ＝１ならば、ｈ１＝Ｈ〔｛Ｖ［ｉ］｝、｛ＭＵ［ｉ］｝〕かつ
ｈ２＝Ｈ（｛Ｕ［ｉ］Ｖ［ｉ］｝）
ｑ＝２ならば、ｈ１＝Ｈ〔｛Ｖ［ｉ］｝、｛ＭＵ［ｉ］  ｘｏｒ  Ｋ［ｉ］｝）かつｈ３＝Ｈ（｛Ｕ［ｉ］ｖ［ｉ］｝）
ｑ＝３ならば、ｈ２＝Ｈ（｛Ｕ［ｉ］｝、ｈ３＝Ｈ（｛Ｕ［ｉ］  ｘｏｒ  Ｖ［ｉ］｝）で且つＶ［ｉ］の重みはｄである
（ｇ）ｑに対応するテストが正確であることが分かった時に、確認装置はプロトコルが成功裏に終了したとみなす。
（ｈ）両者の装置の間で上記（ａ）〜（ｆ）の段階をｔ回反復する。
【００３６】
並行の場合のプロトコルは下記の通り：
（ａ）識別装置は確認装置にその識別子ＩＤを明らかにし、
（ｂ）確認装置はＫ［１］ＩＤ、Ｋ［２］ＩＤ、・・・Ｋ［Ｌ］ＩＤを計算し、
（ｃ）識別装置はＬ個のベクトルｙ［１］、・・・ｙ［Ｌ］と、Ｌ個の順列ｐ［１］、・・ｐ［Ｌ］を選択し、ｈ１＝Ｈ〔｛ｐ［１］｝、｛Ｍｙ［ｉ］｝〕、ｈ２＝Ｈ（｛ｙ［ｉ］ｐ［ｉ］｝）、ｈ３＝Ｈ〔｛ｙ［ｉ］  ｘｏｒ  ｓ［ｉ］ｐ［ｉ］｝）を計算して確認装置にコミットメント｛ｈ１、ｈ２、ｈ３｝を送り、
（ｄ）確認装置はランダムにＬ個の数ｑ［１］、・・・ｑ［Ｌ］（但し、０＜ｑ＜４）を取って識別装置にそれを送り、
（ｅ）識別装置は下記で定義される応答ｒ［１］を計算して確認装置へ送る：
ｑ［ｉ］＝１ならば、ｒ［ｉ］＝｛ｙ［ｉ］、ｐ［ｉ］｝
ｑ［ｉ］＝２ならば、ｒ［ｉ］＝｛ｙ［ｉ］  ｘｏｒ  ｓ［ｉ］、ｐ［ｉ］｝
ｑ［ｉ］＝３ならば、ｒ［ｉ］＝｛ｙ［ｉ］ｐ［ｉ］ｓ［ｉ］ｐ［ｉ］｝
（ｆ）確認装置は｛ｒ［ｉ］｝を受け、当業者に自明な方法でコミットメントを制御する。
【００３７】
ＩＤをｓに関連づけるその他の方法は下記の通りである：
１のビットが２ａｔの位置に分割されたｔ個の秘密の重みを導入する。すなわちｓ[1] 、s[2]、・・・、s[t]であり、ｉ＝１、・・・、ｔについてＭｓ[i] を公表する。
この場合、キーは下記の手順で作られる。下記〔式５〕のようなワードを見つけることは、部分的な三角測量(tiangulation partielle)で容易にできる：
【００３８】
【式５】
0003675494.tif 000005
ｓの重みは約ｔａ−ｔ／２である。
【００３９】
この系でのサイズの選択は通常次の関係式：0.11ｎ＝ｔａ−ｔ／２、２ｋ＝ｎかつ２ａｔδ＞56（但し、２ａ−２ａＨ2(δ) −１）で支配される。
ｔ＝56の時の場合、一般には、ｄ＝95、ｎ＝863 、ｋ＝432 である。当業者には他の組み合わせが可能であることが明らかである。
【００４０】
次に、図３を参照して識別装置の概念的実施例を説明する。識別装置は例えばチップカードにすることができる。
この識別装置は制御装置１と、不揮発性メモリ２（この不揮発性メモリ２は、例えば上記マトリックスＭまたはこのマトリックスＭの係数を得ることが可能な関数と、識別装置自身の秘密キーｓｉとを収容したリードオンリーメモリにすることができる）と、ランダムアクセスメモリ３と、ベクトル−マトリックス乗算器（その機能は図５を参照して後で説明する）と、２進数排他的ＯＲ実施手段５と、ランダム数発生器６と、ハッシュ機能７と、順列発生器８とを有し、これら全ての要素は物理的に保護されている。さらに、識別装置には確認装置と識別装置の制御装置との間でデータを交換するための通信インターフェースが備えられている。ランダム数発生器６は例えばいわゆる「クード（ｃｏｕｄｅ）」区域を逆に分極したツェナーダイオード（ｚｅｎｅｒｄｉｏｄｅ）が生成するデジタル白色ノイズ源で形成するか、グンター（ＧＵＮＴＥＲ）の米国特許第４，８１７，１４５号またはアラゴン（ＡＲＡＧＯＮ）の米国特許第４，６４９，４１９号に記載の擬似ランダム数発生器で構成することができる。順列発生器８は、例えばナッカシュ（Ｄａｖｉｄ  Ｎａｃｃａｃｈｅ）の『順列の生成について（Ｏｎ  ｔｈｅ  ｇｅｎｅｒａｔｉｏｎ  ｏｆ  ｐｅｒｍｕｔａｔｉｏｎ）』（Ｓｏｕｔｈ  Ａｆｒｉｃａｎ  Ｃｏｍｐｕｔｅｒ  Ｊｏｕｒｎａｌ  第２号、１９９０年、１２〜１６頁）に記載の方法を用いた２進数ベクトル順列化装置にすることができる。
【００４１】
ハッシュ関数（ｆｏｎｃｔｉｏｎ  ｄｅ  ｈａｃｈａｇｅ）はクリプト９０でＲｉｖｅｓｔが発表したハッシュ関数ＭＤ４、ヨーロクリプト９２でＳｃｈｎｏｒが発表した適当に反復されるＦＦＴ−ＨａｓｈＩＩまたは暗号化アルゴリズムＤＥＳによって作ることができる。
【００４２】
図４は確認装置を示している。この確認装置は制御装置１０を有し、この制御装置１０にはマトリックスＭおよびパブリックキーＫを収容したＲＯＭ型の不揮発性メモリ１１と、ハミング（Ｈａｍｍｉｎｇ）重み計算器１２と、比較器１３と、マトリックス−ベクトル乗算器１４と、ランダムアクセスメモリ１５と、識別装置の手段５と同じ２進数排他的ＯＲ実施手段１６と、ランダム数発生器１７と、ハッシュ関数１７と同じハッシュ関数１８と、順列生成器１９とが接続されている。また、この制御装置１０には確認装置と各識別装置との間の通信を管理する通信インターフェースが接続されている。
【００４３】
次に、図５を参照してベクトルによるマトリックスの乗算関数の一実施例を説明する。この実施例は８ビットのベクトルｙを用いた単純化した方法である。図５に示したマトリックス乗算器Ｍは８ビットのベクトルｙを対応するサイズのマトリックスで乗算でき、８個のＡＮＤゲート 11, 12, 13, 14, 15, 16, 17, 18 で構成されている。各ＡＮＤゲートの入力にはベクトルｙの１ビットとマトリックスの現在の行の１ビットが入る。ＡＮＤゲートの出力は排他的ＯＲゲートの三角網(reseau triangulaire)  21, 22, 23, 24, 31, 32, 4に入って、回路の出力側でマトリックスＭの現在の行によるｙのスカラー積に対応したビットが得られる。特に、ゲート 11, 12 の出力は排他的ＯＲゲート２1 の入力へ送られ、ゲート 13, 14 の出力は排他的ＯＲゲート２2 の入力へ送られ、これらの２つの排他的ＯＲゲートの出力は排他的ＯＲゲート 31 の入力へ送られる。同様に、ゲート１5, 16 の出力は排他的ＯＲゲート２3 の入力へ送られ、ゲート 17, 18 の出力は排他的ＯＲゲート２4 の入力へ送られ、これらの２つの排他的ＯＲゲートの出力は排他的ＯＲゲート 32 の入力へ送られる。排他的ＯＲゲート 31, 32 の出力は排他的ＯＲゲート４の入力に送られる。このゲート４の出力ＳはマトリックスＭの現在の行によるｙのスカラー積に対応する。
【図面の簡単な説明】
【図１】  本発明の認証方法の第１の実施例を説明するための概念図。
【図２】  本発明方法の第２の実施例を説明するための概念図。
【図３】  本発明の識別装置のブロック図。
【図４】  本発明の確認装置のブッロク図。
【図５】  本発明のマトリックス／ベクトル乗算器の実施例の電気概念図。
【符号の説明】
１  制御装置
２  不揮発性メモリ
３  ランダムアクセスメモリ
４  ベクトル−マトリックス乗算器
５  排他的ＯＲゲート
６  ランダム数発生器
７  ハッシュ機能
８  置換発生器
１０  制御装置
１１  不揮発性メモリ
１２  ハミング重み計算器１３比較器
１４  ベクトル−マトリックス乗算器
１５  ランダムアクセスメモリ
１６  ２進数排他的ＯＲ形成手段
１７  ランダム数発生器
１８  ハッシュ機能
１９  置換発生器
２０  通信インターフェース
【図１】
0003675494.tif 000007
【図２】
0003675494.tif 000008
【図３】
0003675494.tif 000009
【図４】
0003675494.tif 000010
【図５】
0003675494.tif 000011