(57)【要約】  一部の実施形態は公開鍵暗号化デバイス２０および秘密鍵復号デバイス１０を対象とする。公開鍵暗号化デバイスは第２の公開鍵行列ｕを計算するように構成される。第２の公開鍵行列ｕは、秘密鍵復号デバイスの第１の公開鍵行列ｂよりも少ない行列要素を有する。これにより、公開鍵暗号化デバイス側の計算要件および帯域幅要件を低減することができる。
2022500911.tif 000002
【特許請求の範囲】
【請求項１】
秘密鍵復号デバイスと通信するための通信インターフェースと、プロセッサとを備える公開鍵暗号化デバイスであって、
前記プロセッサは、
前記秘密鍵復号デバイスに関連付けられた第１の公開鍵行列を取得し、
送信鍵の鍵サイズを取得し、
前記鍵サイズに従って前記送信鍵を生成し、
前記鍵サイズの前記送信鍵のマスキングに対応するように前記第２の秘密鍵行列の行列サイズを決定し、
前記行列サイズに従って第２の秘密鍵行列を生成し、前記第２の秘密鍵行列から第２の公開鍵行列を計算し、ここで、前記第２の公開鍵行列は前記第１の公開鍵行列よりも少ない行列要素を有し、
前記第２の秘密鍵行列および前記第１の公開鍵行列から第２の生の共有鍵を計算し、ここで、前記第２の生の共有鍵を計算することは、前記第２の秘密鍵行列と前記第１の公開鍵行列との間の行列乗算を含み、
前記第２の生の共有鍵の少なくとも一部を用いて前記送信鍵をマスキングし、
前記鍵サイズおよび／または行列サイズの指標、前記第２の公開鍵行列、および前記マスキングされた送信鍵を前記秘密鍵復号デバイスに送る、
公開鍵暗号化デバイス。
【請求項２】
公開鍵暗号化デバイスと通信するための通信インターフェースと、プロセッサとを備える秘密鍵復号デバイスであって、
前記プロセッサは、
第１の秘密鍵行列を生成して、前記第１の秘密鍵行列から第１の公開鍵行列を計算し、前記公開鍵暗号化デバイスに前記第１の公開鍵行列を送ることを許容し、
前記公開鍵暗号化デバイスから、鍵サイズおよび／または行列サイズの指標、第２の公開鍵行列、並びにマスキングされた送信鍵を受け取り、ここで、前記第２の公開鍵行列は前記第１の公開鍵行列よりも少ない行列要素を有し、
前記第２の公開鍵行列および前記第１の秘密鍵行列から第１の生の共有鍵を計算し、ここで、前記第１の生の共有鍵を計算することは、前記第２の公開鍵行列と前記第１の秘密鍵行列との間の行列乗算を含み、
前記第１の生の共有鍵の少なくとも一部を使用して、前記受け取られたサイズに基づき、前記マスキングされた送信鍵のマスキングを解除することで送信鍵を取得する、
秘密鍵復号デバイス。
【請求項３】
前記公開鍵暗号化デバイスの前記プロセッサは、前記秘密鍵復号デバイスとのハンドシェイクを実行し、前記ハンドシェイクの実行は、
前記秘密鍵復号デバイスの少なくとも２つの第１の公開鍵行列の少なくとも２つの指標を前記秘密鍵復号デバイスから受け取ることを含み、ここで、前記２つの第１の公開鍵行列は異なるサイズを有し、
前記ハンドシェイクの実行はさらに、前記公開鍵暗号化デバイスの鍵キャッシュが、前記２つの第１の公開鍵行列のうちの大きい方の行列を含むか否かを決定し、含む場合には前記大きい方の第１の公開鍵行列を選択することによって、第１の公開鍵行列を選択することと、
前記選択された第１の公開鍵行列の指標を前記秘密鍵復号デバイスに送り、前記鍵キャッシュ内で入手できない場合は前記第１の公開鍵行列をリクエストすることとを含み、ここで、前記送信鍵は、前記選択された第１の公開鍵を用いてカプセル化される、
または
前記秘密鍵復号デバイスの前記プロセッサが前記公開鍵暗号化デバイスとのハンドシェイクを実行し、前記ハンドシェイクの実行は、
前記秘密鍵復号デバイスの少なくとも２つの第１の公開鍵行列の少なくとも２つの指標を前記公開鍵暗号化デバイスに送ることを含み、ここで、前記２つの第１の公開鍵行列は異なるサイズを有し、
前記ハンドシェイクの実行はさらに、前記公開鍵暗号化デバイスから選択された第１の公開鍵行列の指標を受け取ること、前記選択された第１の公開鍵行列のリクエストが受け取られた場合には、前記選択された第１の公開鍵行列を送ることを含み、ここで、前記送信鍵は、前記選択された前記第１の公開鍵を用いてカプセル化解除される、
請求項１または２に記載の公開鍵暗号化デバイスまたは秘密鍵復号デバイス。
【請求項４】
前記第２の秘密鍵行列は前記第１の公開鍵行列よりも少ない行列要素を有し、および／または
前記第２の公開鍵行列は前記第１の秘密鍵行列よりも少ない行列要素を有する、
請求項１から３のいずれか一項に記載の公開鍵暗号化デバイスまたは秘密鍵復号デバイス。
【請求項５】
前記第２の公開鍵行列は第１のシステム次元および第２の次元（
【数１０５】
2022500911.tif 000109
)を有し、前記第１の公開鍵行列は前記第１のシステム次元および第２の次元(
【数１０６】
2022500911.tif 000110
)を有し、前記第２の公開鍵行列の前記第２の次元(
【数１０７】
2022500911.tif 000111
)は、前記第１の公開鍵行列の前記第２の次元(
【数１０８】
2022500911.tif 000112
)よりも小さい、
請求項１から４のいずれか一項に記載の公開鍵暗号化デバイスまたは秘密鍵復号デバイス。
【請求項６】
前記第２の公開鍵行列の前記第２の次元は、前記第１の公開鍵行列の前記第２の次元の半分以下であり、および／または
前記第２の公開鍵行列の前記第２の次元は１である、
請求項５に記載の公開鍵暗号化デバイスまたは秘密鍵復号デバイス。
【請求項７】
前記第２の公開鍵行列の前記第２の次元は設定可能である、請求項１から６のいずれか一項に記載の公開鍵暗号化デバイスまたは秘密鍵復号デバイス。
【請求項８】
前記公開鍵暗号化デバイスの前記プロセッサは、
前記第１の公開鍵に関連付けられた公開行列を取得し、
前記第２の公開鍵行列を計算することは、前記第２の秘密鍵行列と前記公開行列との間のノイジーな行列乗算を含み、ここで、前記公開行列は前記公開鍵暗号化デバイスと前記秘密鍵復号デバイスとの間で共有され、および／または
前記秘密鍵復号デバイスの前記プロセッサは、
公開行列を生成し、
前記第１の公開鍵行列を計算することは、前記第１の秘密鍵行列と前記公開行列との間のノイジーな行列乗算を含み、前記公開行列は前記公開鍵暗号化デバイスと前記秘密鍵復号デバイスとの間で共有され、前記第１の公開鍵行列は前記公開行列に関連付けられる、
請求項１から７のいずれか一項に記載の公開鍵暗号化デバイスまたは秘密鍵復号デバイス。
【請求項９】
前記ノイジーな行列乗算は、ｑ個の要素からｐ個の要素へのスケーリングを含み、ここで、
【数１０９】
2022500911.tif 000113
であり、前記公開鍵暗号化デバイスは、
前記第２の生の共有鍵の前記少なくとも一部のための調整データを生成し、ここで、前記調整データは、前記公開鍵暗号化デバイスおよび前記秘密鍵復号デバイスで導出された前記第１の生の鍵および前記第２の生の鍵の間の差異を減らすことを可能にする情報を含み、前記調整データは前記秘密鍵復号デバイスに送られ、
前記送信鍵のためのパリティビットを生成し、ここで、前記送信鍵および前記パリティビットは、誤り訂正符号に従うコードワードを形成し、前記送信鍵をマスキングすることは前記コードワードのカプセル化を含み、および／または
前記秘密鍵復号デバイスは、
前記第１の生の共有鍵の前記少なくとも一部のための調整データを受け取り、ここで、前記調整データは、前記公開鍵暗号化デバイスおよび前記秘密鍵復号デバイスで導出された前記第１の生の鍵および前記第２の生の鍵の間の差異を減らすことを可能にする情報を含み、前記第１の生の共有鍵の前記少なくとも一部および前記調整データに調整関数を適用し、
前記マスキングされた送信鍵のマスキングを解除してニアコードワードを取得し、前記誤り訂正符号に従って誤り訂正を適用する、
請求項８に記載の公開鍵暗号化デバイスまたは秘密鍵復号デバイス。
【請求項１０】
前記公開鍵暗号化デバイスの前記プロセッサは、少なくとも前記送信鍵に基づいて最終鍵を導出し、前記最終鍵を用いてメッセージを暗号化し、前記暗号化されたメッセージを前記秘密鍵復号デバイスに送り、および／または
前記秘密鍵復号デバイスの前記プロセッサは、前記秘密鍵復号デバイスから暗号化されたメッセージを受け取り、少なくとも前記送信鍵に基づいて前記最終鍵を導出し、前記最終鍵を用いて前記暗号化されたメッセージを復号する、
請求項１から９のいずれか一項に記載の公開鍵暗号化デバイスまたは秘密鍵復号デバイス。
【請求項１１】
送信鍵が、乱数である、一時的および／または対称的である、および／または、第１の公開鍵行列から独立している、請求項１から１０のいずれか一項に記載の公開鍵暗号化デバイスまたは秘密鍵復号デバイス。
【請求項１２】
前記公開鍵暗号化デバイスの前記プロセッサは、前記秘密鍵復号デバイスにて前記送信鍵を取得する際のエラーレートを下げるためにヘルパーデータを計算し、
前記秘密鍵復号デバイスの前記プロセッサは、前記公開鍵暗号化デバイスから前記ヘルパーデータを受け取り、前記ヘルパーデータを適用することで、前記秘密鍵復号デバイスにて前記送信鍵を取得する際の前記エラーレートを下げる、
請求項１から１１のいずれか一項に記載の公開鍵暗号化デバイスまたは秘密鍵復号デバイス。
【請求項１３】
前記第２の生の鍵は行列であり、前記送信鍵をマスキングすることは、前記送信鍵のビットを、前記第２の生の鍵行列の少なくとも一部の要素の最上位部分に加えること、および前記第２の生の鍵行列の前記少なくとも一部の要素のゼロ個以上の最下位ビットを破棄することを含み、
前記第１の生の鍵は行列であり、前記マスキングされた送信鍵のマスキングを解除することは、前記第１の生の鍵行列の少なくとも一部の要素のゼロ個以上の最下位ビットを破棄すること、前記カプセル化されたデータから前記第１の生の鍵行列の前記少なくとも一部の要素を差し引くこと、および、差し引かれた結果を丸めることを含む、
請求項１から１２のいずれか一項に記載の公開鍵暗号化デバイスまたは秘密鍵復号デバイス。
【請求項１４】
前記公開鍵暗号化デバイスの前記プロセッサは、前記送信鍵から前記第２の秘密鍵行列を導出し、および／または
前記秘密鍵復号デバイスの前記プロセッサは、前記送信鍵から前記第２の秘密鍵行列を再構築し、前記第２の公開鍵の計算および／または前記カプセル化された送信鍵の計算を検証する、
請求項１から１３のいずれか一項に記載の公開鍵暗号化デバイスまたは秘密鍵復号デバイス。
【請求項１５】
前記公開鍵暗号化デバイスの前記プロセッサは、公開鍵データベースから前記第１の公開鍵行列を取得し、および／または
前記秘密鍵復号デバイスの前記プロセッサは、前記第１の公開鍵行列を前記公開鍵データベース内に預ける、
請求項１から１４のいずれか一項に記載の公開鍵暗号化デバイスまたは秘密鍵復号デバイス。
【請求項１６】
前記第１および第２の公開鍵、前記第１および第２の秘密鍵、並びに前記第１および第２の生の鍵は有限体または環上の行列である、請求項１から１５のいずれか一項に記載の公開鍵暗号化デバイスまたは秘密鍵復号デバイス。
【請求項１７】
秘密鍵復号デバイスとの通信を確立するステップと、
前記秘密鍵復号デバイスに関連付けられた第１の公開鍵行列を取得するステップと、
送信鍵の鍵サイズを取得するステップと、
前記鍵サイズに従って前記送信鍵を生成するステップと、
前記鍵サイズの前記送信鍵のマスキングに対応するように第２の秘密鍵行列の行列サイズを決定するステップと、
前記行列サイズに従って前記第２の秘密鍵行列を生成し、前記第２の秘密鍵行列から第２の公開鍵行列を計算するステップであって、ここで、前記第２の公開鍵行列は前記第１の公開鍵行列よりも少ない行列要素を有する、ステップと、
前記第２の秘密鍵行列および前記第１の公開鍵行列から第２の生の共有鍵を計算するステップであって、ここで、前記第２の生の共有鍵の計算は、前記第２の秘密鍵行列と前記第１の公開鍵行列との間の行列乗算を含む、ステップと、
前記第２の生の共有鍵の少なくとも一部を用いて前記送信鍵をマスキングするステップと、
前記鍵サイズおよび／または行列サイズの指標、前記第２の公開鍵行列、および前記マスキングされた送信鍵を前記秘密鍵復号デバイスに送るステップとを含む、
公開鍵暗号化方法。
【請求項１８】
公開鍵暗号化デバイスとの通信を確立するステップと、
第１の秘密鍵行列を生成して、前記第１の秘密鍵行列から第１の公開鍵行列を計算し、前記公開鍵暗号化デバイスに前記第１の公開鍵行列を送ることを許容するステップと、
前記公開鍵暗号化デバイスから、鍵サイズおよび／または行列サイズの指標、第２の公開鍵行列、およびマスキングされた送信鍵を受け取るステップであって、ここで、前記第２の公開鍵行列は前記第１の公開鍵行列よりも少ない行列要素を有する、ステップと、
前記第２の公開鍵行列および前記第１の秘密鍵行列から第１の生の共有鍵を計算するステップであって、ここで、前記第１の生の共有鍵の計算は、前記第２の公開鍵行列と前記第１の秘密鍵行列との間の行列乗算を含む、ステップと、
前記第１の生の共有鍵の少なくとも一部を使用して、前記受け取られたサイズに基づき、前記マスキングされた送信鍵のマスキングを解除することで送信鍵を取得するステップとを含む、
秘密鍵復号方法。
【請求項１９】
請求項１７または１８に記載の方法をプロセッサシステムに実行させるための命令を表すデータを含む、一時的または非一時的なコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は公開鍵暗号化デバイス、秘密鍵復号デバイス、公開鍵暗号化方法、秘密鍵復号方法、およびコンピュータ可読媒体に関する。
【背景技術】
【０００２】
鍵配布の問題に対処する１つの方法は、いわゆる非対称暗号化を使用することである。非対称暗号化では公開鍵と秘密鍵で構成される鍵ペアが使用される。このため、非対称暗号化は公開鍵暗号化とも呼ばれる。
【０００３】
公開鍵は広く配布され得るが、秘密鍵は通常、少数のパーティ、例えば秘密鍵の所有者しか知らない。公開鍵は秘密鍵でのみ復号可能なメッセージの暗号化に使用できる。公開鍵暗号化システムでは、受信者の公開鍵を使用することで誰でもメッセージを暗号化できる。暗号化されたメッセージは受信者の秘密鍵を使用しなければ復号できない。対応する公開鍵から秘密鍵を見つけることは、計算上、非現実的である。公開鍵と秘密鍵とは鍵ペアと呼ばれる。
【０００４】
既知の公開鍵暗号化システムは、現時点で効率的な解法を認めていない数学的問題に基づく暗号化アルゴリズムに依拠する。例えば、ＲＳＡ公開鍵暗号化システムは素因数分解の困難さに依拠する。楕円曲線に基づく公開鍵暗号化は、離散対数の困難さに依拠する。
【０００５】
量子コンピュータは現代の暗号化に重大な脅威をもたらす。最も広く採用されている２つの公開鍵暗号システムであるＲＳＡおよび楕円曲線暗号（ＥＣＣ）は汎用量子コンピュータによって破られる。量子コンピュータに耐性のある代替手段として、格子暗号が使用され得る。残念ながら、格子計算にはセキュリティのために大きな公開鍵が必要とされる。
【発明の概要】
【０００６】
本明細書に記載の実施形態は上記および他の問題に対処する。公開鍵暗号化デバイスおよび秘密鍵復号デバイスが提供される。公開鍵暗号化デバイスを使用して、送信鍵を秘密鍵復号デバイスに送ることができる。送信鍵はメッセージを暗号化するために使用され得る。したがって、公開鍵へのアクセスを有すればメッセージを暗号化することができるが、暗号化されたメッセージを復号するには秘密鍵へのアクセスが必要である。
【０００７】
公開鍵暗号化デバイスは、秘密鍵復号デバイスに関連付けられた第１の公開鍵行列を取得し、また、第２の公開鍵行列を生成するように構成され得る。第２の公開鍵行列は第１の公開鍵行列よりも少ない行列要素を有する。
【０００８】
第２の公開鍵行列は第１の公開鍵行列よりも少ない行列要素を有するので、暗号化フェーズ中の（例えば、メッセージを暗号化する際の）オーバーヘッド（例えば、送信鍵を送るのに必要なオーバーヘッド）を減らすことができ、具体的には、登録フェーズ（例えば、公開鍵暗号化デバイスが第１の公開鍵を取得するフェーズ）に対して減らすことができる。具体的には、第１の公開鍵は、第２の公開鍵が送られる方法とは異なる方法で取得され、具体的には、第１の公開鍵は（例えば、ソフトウェアと一緒に（例えば、ブラウザソフトウェアと一緒に））事前に配布され得る。公開鍵暗号化が必要とされる時点と比較して、事前配布中に帯域幅を得るのはより容易である可能性があるため、これは特に有利である。
【０００９】
様々な目的のために様々な実施形態を用いることができる。第１の例として、例えばインターネットを介して、一時的な鍵共有（ｅｐｈｅｍｅｒａｌ  ｋｅｙ  ｅｘｃｈａｎｇｅ）が使用されてもよい。実施形態は、総帯域幅オーバーヘッド（例えば、公開鍵＋暗号文）を最小化するために使用されてもよい。なお、この式は、公開鍵が既に利用可能な状態にあるか否かによって大きな影響を受ける可能性があることに留意されたい。別の例として、例えば、電子メールなどのメッセージアプリケーションで使用するために、暗号文が最小化されてもよい。暗号文のサイズを最小化することにより公開鍵がより長くなったとしても、公開鍵が送信されるのは一度なので、これは重要ではない。
【００１０】
送信鍵を送る前に、両デバイスはどの公開鍵を使用するかについてネゴシエーションを行う可能性がある。例えば、鍵が事前に配布されている場合、公開鍵暗号化デバイスは事前に配布された鍵を使用することを望み得る。例えば、公開鍵が事前に配布されていない場合、公開鍵暗号化デバイスは、より小さな公開鍵を取得することを望み得る。２つの公開鍵が利用可能な場合、暗号化されたメッセージの送信に必要な帯域幅を減らすため、公開鍵暗号化デバイスは大きい方の公開鍵を優先する可能性がある。
【００１１】
興味深いことに、第２の公開鍵のサイズは、例えば、登録フェーズ中ではなく、暗号化時に（例えば、暗号化フェーズ中に）決定され得る。これは、第２の公開鍵とともに送られる送信鍵のサイズから独立して第２の公開鍵のサイズを選択できるという利点を提供する。例えば、機密性の高い用途の場合、機密性の低い用途よりも送信鍵のビット数が多くなる可能性がある。後者のケースでは、送信鍵を送る際のオーバーヘッドは小さい可能性がある。
【００１２】
一実施形態では、第２の公開鍵行列は第１のシステム次元および第２の次元を有し、第１の公開鍵行列は第１のシステム次元および第２の次元を有し、第２の公開鍵行列の第２の次元は、第１の公開鍵行列の第２の次元よりも小さい。具体的には、第２の公開鍵行列の第２の次元は１であり、第１の公開鍵の第２の次元は１より大きくてもよい。
【００１３】
一実施形態では、高ノイズ格子問題をパリティビットと組み合わせることで、１．５ｋＢ未満の第２の公開鍵が取得される。これにより、そのような実施形態がコンピュータネットワークで使用される場合、パケット断片化が回避される。
【００１４】
公開鍵暗号化（ＰＫＥ）は、例えば、Ｌｅａｒｎｉｎｇ  ｗｉｔｈ  Ｅｒｒｏｒｓ問題やＬｅａｒｎｉｎｇ  ｗｉｔｈ  Ｒｏｕｎｄｉｎｇ問題、またはこれらの組み合わせのように、非構造化格子問題（ｕｎｓｔｒｕｃｔｕｒｅｄ  ｌａｔｔｉｃｅ  ｐｒｏｂｌｅｍｓ）に基づくものであってもよい。実施形態は、復号側の公開鍵がより大きくなる代わりに、暗号化側の最小帯域幅および計算オーバーヘッドを保証するように最適化され得る。ただし、公開鍵は一度送って保存するだけでよい。暗号化がより高速になり、また最終的な暗号文がより小さくなるため、暗号化に必要な帯域幅が減るだけでなく、暗号化がより効率的になる可能性がある。具体的には、非環構成の暗号文は２０００Ｂ未満である可能性がある。
【００１５】
公開鍵暗号化デバイスおよび秘密鍵復号デバイスは電子デバイスであり得る。例えば、両デバイスはコンピュータまたはサーバなどであり得る。両デバイスは携帯電話やスマートカードなどのモバイル電子デバイスであってもよい。公開鍵暗号化デバイスおよび秘密鍵復号デバイスはセットトップボックスやテレビなどの家電製品であってもよい。公開鍵暗号化デバイスはセンサであってもよい。
【００１６】
実施形態に係るデバイスおよび方法は、幅広い実用的な用途に適用可能であり得る。実用的な用途は多数の暗号プロトコルを含む。そのような実用的な用途はメッセージアプリケーション、センサネットワーク、データ通信、金融アプリケーションなどを含む。
【００１７】
方法の実施形態は、コンピュータ実装方法としてコンピュータ上に、専用ハードウェアに、またはこれらの組み合わせとして実装されてもよい。方法の実施形態のための実行可能コードはコンピュータプログラム製品上に保存されてもよい。コンピュータプログラム製品の例は、メモリデバイス、光記憶デバイス、集積回路、サーバ、オンラインソフトウェアなどを含む。好ましくは、コンピュータプログラム製品は、プログラム製品がコンピュータ上で実行されるとき、方法の実施形態を実行するためのコンピュータ可読媒体上に保存された非一時的プログラムコードを含む。
【００１８】
一実施形態では、コンピュータプログラムは、該コンピュータプログラムがコンピュータ上で実行されたとき、方法の実施形態のステップの全てまたは一部を実行するように構成されたコンピュータプログラムコードを含む。好ましくは、コンピュータプログラムはコンピュータ可読媒体上に具現化される。
【００１９】
本発明の別の態様は、コンピュータプログラムをダウンロード可能にする方法を提供する。この態様は、コンピュータプログラムが例えばアップルのＡｐｐ  Ｓｔｏｒｅ、ＧｏｏｇｌｅのＰｌａｙ  Ｓｔｏｒｅ、またはＭｉｃｒｏｓｏｆｔのＷｉｎｄｏｗｓ  Ｓｔｏｒｅなどにアップロードされており、そのようなストアからコンピュータプログラムをダウンロード可能な場合に使用される。
【図面の簡単な説明】
【００２０】
以下、本発明の単なる例に過ぎないさらなる詳細、態様、および実施形態について、以下の図面を参照しながら説明する。図中の要素は、簡潔さおよび明瞭さを意図して描かれており、必ずしも縮尺通りに描かれていない。図面において、すでに説明した要素に対応する要素には同じ参照番号を付している。
【００２１】
【図１ａ】図１ａは、秘密鍵復号デバイス１００の実施形態の例を概略的に示す。
【図１ｂ】図１ｂは、公開鍵暗号化デバイス２００の実施形態の例を概略的に示す。
【図１ｃ】図１ｃは暗号システム１０１の実施形態の例を概略的に示す。
【図２ａ】図２ａは公開鍵暗号化および秘密鍵復号の例を概略的に示す。
【図２ｂ】図２ｂは公開鍵暗号化および秘密鍵復号の例を概略的に示す。
【図２ｃ】図２ｃはハンドシェイクの例を概略的に示す。
【図３】図３は公開鍵暗号化および秘密鍵復号の例を概略的に示す。
【図４】図４は公開鍵暗号化および秘密鍵復号の例を概略的に示す。
【図５】図５は、一実施形態に係る暗号システムの例を概略的に示す。
【図６ａ】図６ａは、一実施形態に係る公開鍵暗号化方法の例を概略的に示す。
【図６ｂ】図６ｂは、一実施形態に係る秘密鍵復号方法の例を概略的に示す。
【図７ａ】図７ａは、一実施形態に係るコンピュータプログラムを含む書き込み可能部分を有するコンピュータ可読媒体を概略的に示す。
【図７ｂ】図７ｂは、一実施形態に係るプロセッサシステムの表現を概略的に示す。
【符号の説明】
【００２２】
１０  秘密鍵復号デバイス  
２０  公開鍵暗号化デバイス
３１  登録フェーズ
３２  暗号化フェーズ
３３  復号フェーズ
１１〜１６  メッセージ
１００  秘密鍵復号デバイス
１３０  通信インターフェース
１９１  コンピュータネットワーク
１９２  ストレージインターフェース
１９４  プロセッサ
１９６  メモリ
２００  公開鍵暗号化デバイス
２３０  通信インターフェース
２９２  ストレージインターフェース
２９４  プロセッサ
２９６  メモリ
３００  秘密鍵復号デバイス
３０１  暗号システム
３０２  公開鍵デポジトリ
３０５  通信インターフェース  
３１５  公開／秘密鍵生成器
３２０  エラー訂正器
３２５  Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎユニット
３３５  調整ユニット
３４０  カプセル化解除ユニット
３５０  公開鍵暗号化デバイス
３５５  通信インターフェース
３６０  公開鍵取得器
３６５  公開／秘密鍵生成器
３７０  コードワード生成器
３７５  Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎユニット
３８０  高信頼性ビット生成器
３８５  調整データ生成器
３９０  カプセル化ユニット
１０００  コンピュータ可読媒体
１０１０  書き込み可能部分
１０２０  コンピュータプログラム
１１１０  集積回路
１１２０  処理ユニット
１１２２  メモリ
１１２４  専用集積回路
１１２６  通信要素
１１３０  相互接続部
１１４０  プロセッサシステム
【発明を実施するための形態】
【００２３】
本発明は、様々な形態の実施形態を取り得るが、図面および以下の説明では、１つまたは複数の具体的実施形態が詳細に示される。本開示は、本発明の原理の例示として考えられるべきであり、本発明を図示および説明される具体的実施形態に限定するものではないことを理解されたい。
【００２４】
以下、理解を目的として、動作中の実施形態の要素が説明される。しかしながら、各要素が、各要素によって実行されるものとして記載されている機能を実行するように構成されていることは明らかであろう。
【００２５】
さらに、本発明は、実施形態に限定されるものではなく、本発明は、本明細書に記載されるまたは互いに異なる従属請求項に記載される全ての新規の特徴または特徴の組み合わせに及ぶ。
【００２６】
図１ａは、秘密鍵復号デバイス１００の実施形態の例を概略的に示す。図１ｂは、公開鍵暗号化デバイス２００の実施形態の例を概略的に示す。秘密鍵復号デバイスは第１のデバイス、または第１の暗号デバイスと呼ばれることもある。公開鍵暗号化デバイスは第２のデバイス、または第２の暗号デバイスと呼ばれることもある。図１ｃは、秘密鍵復号デバイス１００および公開鍵暗号化デバイス２００を含む暗号システム１０１の一実施形態の例を概略的に示す。秘密鍵復号デバイス１００および公開鍵暗号化デバイス２００はそれぞれ、ストレージインターフェース１９２、２９２、プロセッサ１９４、２９４、およびメモリ１９６、２９６を１つ以上備え得る。秘密鍵復号デバイス１００は公開鍵／秘密鍵ペアを生成するように構成される。公開鍵および秘密鍵はそれぞれ、公開鍵行列および秘密鍵行列で構成される。公開鍵暗号化デバイス２００は、公開鍵行列を使用して、秘密鍵復号デバイスに送信鍵（ｔｒａｎｓｍｉｓｓｉｏｎ  ｋｅｙ）を送ることを可能にするように構成される。例えば、送信鍵は、公開鍵暗号化デバイスから秘密鍵復号デバイスに送られるべきメッセージを暗号化し、後に復号するための鍵として（典型的には対称鍵として）使用され得る。秘密鍵復号デバイスは、秘密鍵行列を使用して同じ送信鍵を取得するように構成される。あるいは、送信鍵は、さらなる鍵ネゴシエーションへの入力として使用することができる。例えば、送信鍵を１つまたは複数の他の鍵入力と組み合わせることで、例えば、送信鍵および他の鍵を入力として鍵導出関数を使用して最終的な鍵が導出されてもよい。他の鍵入力は、公開鍵暗号化デバイスおよび秘密鍵復号デバイスが立場を変え、本明細書に記載の様々なプロトコルにおいて反対の役割を担うようなプロトコルから得られたさらなる送信鍵を含み得る。
【００２７】
秘密鍵復号デバイス１００および公開鍵暗号化デバイス２００（例えば、システム１０１の様々なデバイス）は、コンピュータネットワーク１９１を介して互いに通信することができる。コンピュータネットワークはインターネット、イントラネット、ＬＡＮ、ＷＬＡＮ等であり得る。コンピュータネットワーク１９１はインターネットであり得る。コンピュータネットワークは全体的または部分的に有線であってもよく、および／または全体的または部分的に無線であってもよい。例えば、コンピュータネットワークはイーサネット接続を含み得る。例えば、コンピュータネットワークはＷｉ‐Ｆｉ（登録商標）やＺｉｇＢｅｅ（登録商標）などの無線接続を含み得る。デバイスは、必要に応じてシステム１０１の他のデバイスと通信するように構成された接続インターフェースを備える。例えば、接続インターフェースはコネクタ（例えば、有線コネクタ（例えば、イーサネットコネクタ）、または無線コネクタ（例えば、アンテナ（例えば、Ｗｉ‐Ｆｉ（登録商標）、４Ｇまたは５Ｇアンテナ））を含み得る。例えば、秘密鍵復号デバイス１００および公開鍵暗号化デバイス２００はそれぞれ通信インターフェース１３０、２３０を含み得る。コンピュータネットワーク１９１は追加の要素、例えばルータやハブなどを含み得る。
【００２８】
秘密鍵復号デバイス１００および公開鍵暗号化デバイス２００の実行は、プロセッサ、例えばプロセッサ回路において実装され、その例は本明細書に示されている。秘密鍵復号デバイス１００、特に秘密鍵復号デバイス１００のプロセッサは、図２ａ〜図２ｃ、図３、および図４に示されるように、秘密鍵復号デバイス１０の機能を実装し得る。公開鍵暗号化デバイス２００、特に公開鍵暗号化デバイス２００のプロセッサは、これらの図の公開鍵暗号化デバイス２０の機能を実装し得る。例えば、これらの機能は、デバイス１００または２００に保存された（例えば、デバイス１００または２００の電子メモリ内に保存された）コンピュータ命令として完全にまたは部分的に実装され得る。コンピュータ命令はデバイスのマイクロプロセッサによって実行可能である。ハイブリッド実施形態では、機能ユニットは部分的にハードウェアで、例えばコプロセッサ、例えば暗号化コプロセッサとして実装され、部分的に、デバイス１００または２００上で格納および実行されるソフトウェアで実装される。
【００２９】
デバイス１００および２００はメッセージ（場合によっては暗号化されたメッセージ）を保存および／または取り出すためのストレージインターフェースを備え得る。例えば、ストレージインターフェースは、例えば、デバイスに含まれるメモリ（例えば、それぞれメモリ１９６または２９６）へのインターフェースとして、ローカルに実装され得る。また、ストレージインターフェースはオフラインの、例えばローカルではないストレージ、例えばクラウドストレージ、例えば別のデバイス内に設けられたメモリまたはドライブなどのストレージに対するインターフェースであってもよい。クラウドストレージが使用される場合、デバイスはさらにローカルストレージ（例えば、メモリ）を含み得る。例えば、メモリはコンピュータプログラミング命令や一時的ファイルなどを保存するために使用され得る。
【００３０】
デバイス１００および２００の様々な実施形態において、様々な選択肢から通信入力インターフェースが選択され得る。例えば、インターフェースは、ローカルまたはワイドエリアネットワーク、例えばインターネットへのネットワークインターフェースであってもよく、または内部もしくは外部データストレージへのストレージインターフェース、またはアプリケーションインターフェース（ＡＰＩ）などであり得る。一実施形態では、公開鍵暗号化デバイスおよび秘密鍵復号デバイスは同一のデバイス内に実装される。これは、メッセージの暗号化および復号の両方に役立ち得る。例えば、通信インターフェースはストレージインターフェースであり、その場合、デバイスは暗号化された形式でメッセージを記憶し、後に暗号化されたメッセージを取り出して復号するために使用され得る。
【００３１】
デバイス１００および２００は、１つまたは複数のボタン、キーボード、ディスプレイ、タッチスクリーンなどのよく知られた要素を含み得るユーザインターフェースを有し得る。ユーザインターフェースは、鍵共有プロトコルを開始するためのユーザインタラクションに対応するように構成され得る。鍵共有プロトコルに応答して、公開鍵で暗号化されたメッセージを送信すること、公開鍵でメッセージを復号すること等を実行する。
【００３２】
ストレージは、例えば、フラッシュメモリ等の電子メモリや、ハードディスク等の磁気メモリとして実装されてもよい。ストレージは、ストレージを構成する複数の個別のメモリを備えてもよい。ストレージは一時的なメモリ、例えばＲＡＭであってもよい。
【００３３】
典型的には、デバイス１００および２００はそれぞれ、デバイス１００および２００に保存された適切なソフトウェアを実行するマイクロプロセッサを備える。例えば、ソフトウェアは、対応するメモリ、例えばＲＡＭのような揮発性メモリ、またはフラッシュのような不揮発性メモリにダウンロードおよび／または保存されていてもよい。あるいは、デバイス１００および２００は、全体的にまたは部分的に、例えばフィールドプログラマブルゲートアレイ（ＦＰＧＡ）として、プログラマブルロジックに実装されてもよい。デバイス１００および２００は、全体的にまたは部分的に、いわゆる特定用途向け集積回路（ＡＳＩＣ）、例えば、特定の用途向けにカスタマイズされた集積回路（ＩＣ）として実装されてもよい。例えば、回路は、例えばＶｅｒｉｌｏｇ、ＶＨＤＬなどのハードウェア記述言語を使用して、ＣＭＯＳで実装されてもよい。
【００３４】
一実施形態では、デバイス１００および２００は、それぞれのデバイスの１つ以上の機能または全ての機能を実装するための１つまたは複数の回路を備え得る。これらの回路は、本明細書に記載される対応する機能を実装し得る。回路は、プロセッサ回路および記憶回路であってもよく、プロセッサ回路は、記憶回路において電子的に表現される命令を実行する。
【００３５】
プロセッサ回路は分散された形で、例えば複数のサブプロセッサ回路として実装されてもよい。ストレージは、複数の分散サブストレージに分散されてもよい。メモリの一部または全部が電子メモリや磁気メモリ等であり得る。例えば、ストレージは、揮発性部分および不揮発性部分を有し得る。ストレージの一部が読み取り専用であってもよい。また、回路はＦＰＧＡ、ＡＳＩＣなどであってもよい。
【００３６】
図２ａは公開鍵暗号化および秘密鍵復号の例を概略的に示す。公開鍵暗号化側は公開鍵暗号化デバイス２０によって実行される。秘密鍵復号側は秘密鍵復号デバイス１０によって実行される。図１ａ〜図４のプロトコルは、例えば上記のように、公開鍵暗号化デバイス２００および秘密鍵復号デバイス１００によって実行され得る。
【００３７】
図２ａ〜図４における表記法は次の通りである。
−  ａは、公開行列、例えば、整数または環や体などに含まれる要素を有する行列を表す。要素は、あるモジュラス（例えば、２の累乗）を法とする整数であり得る。要素は、モジュラス（例えば、２の累乗）および多項式を法とする多項式であり得る。行列ａは通常、正方ｄ×ｄ行列である。モジュラスを法とする行列は非環構成（ｎｏｎ−ｒｉｎｇ  ｃｏｎｆｉｇｕｒａｔｉｏｎ）と称される。多項式およびモジュラスを法とする多項式エントリーを有する行列はモジュール構成と称される。
−  ｒおよびｓは、それぞれ、秘密鍵復号デバイスの秘密鍵行列および公開鍵暗号化デバイスの秘密鍵行列を表す。
−  ｂおよびｕは、ａ＊ｒまたはａ＊ｓの積として示されている秘密鍵復号デバイスおよび公開鍵暗号化デバイスのそれぞれの公開鍵行列を表す。
【００３８】
演算＊は、基礎となる問題の一方向性関数を表す。スター（＊）演算により、２つの基礎となる行列から新しい数学的オブジェクト（例えば、新しい行列）が、いくらかのノイズを導入しつつ導出される。例えば、ノイズは、ノイズ要素を加えることによって明示的に導入されてもよいし、あるいは、丸め等によって暗示的に導入されてもよい。スター演算の例は（Ｒ）ＬＷＥまたは（Ｒ）ＬＷＲ、あるいはこれらのモジュールバージョンにおいて見つけることができる。例えば、ａ＊ｒは、（例えばＬＷＲにおいて用いられる）Ｒｏｕｎｄ（（Ａ＊ｒ（ｍｏｄ  ｑ）），ｐ，ｑ）を意味し得る。これは、ｑを法とする、ｒと正方行列Ａとの積を意味する。その後、整数ｐおよびｑ（ｐ＜ｑ）を用いてｐ／ｑ（Ａ＊ｒ（ｍｏｄ  ｑ）を実行することによって結果が丸められる。
−  ｃはカプセル化された送信鍵Ｋを表す。
−  ｅｎｃａｐｓｕｌａｔｅ（ｋ，Ｋ）は、送信鍵Ｋがｋでカプセル化されることを意味する。例えば、ｋがＺ＿ｑに存在する場合、ＫもＺ＿ｑで表され得る。ｋがＺ＿２に存在する場合、これはＸＯＲであり得る。カプセル化は要素ごとに行われ、例えば、以下のようにｋおよびＫを行列として解釈することで行われてもよい。
ｃ＝ｋ＋Ｋ＊（ｑ／２）（ｍｏｄ  ｑ）
【００３９】
例えば、カプセル化関数は、ｋにおけるエラーがｍに対して及ぼす効果を限定するように（例えば、線形効果）、鍵ｋを使用して送信鍵Ｋをマスクし得る。例えば、Ｋの要素にＺ＿ｑの要素を乗算することによって、送信鍵Ｋの各ビットがＺ＿ｑにマッピングされ得る。ｑが偶数の場合、ｑ／２は良い選択である。次に、（Ｚ＿ｑの要素でもあり得る）鍵ｋの要素にＫのマッピングされた要素が加えられる。
−  ｄｅｃａｐｓｕｌａｔｅ（ｋ，ｃ）は、暗号文ｃが鍵ｋを使用してカプセル化解除され、ビット列を返すことを意味する。
【００４０】
以下の文献が参照される。
ＲＬＷＥ：Ｖａｄｉｍ  Ｌｙｕｂａｓｈｅｖｓｋｙ、Ｃｈｒｉｓ  Ｐｅｉｋｅｒｔ、およびＯｄｅｄ  Ｒｅｇｅｖによる“Ｏｎ  Ｉｄｅａｌ  Ｌａｔｔｉｃｅｓ  ａｎｄ  Ｌｅａｒｎｉｎｇ  ｗｉｔｈ  Ｅｒｒｏｒｓ  Ｏｖｅｒ  Ｒｉｎｇｓ”
ＲＬＷＲ：Ａｂｈｉｓｈｅｋ  Ｂａｎｅｒｊｅｅ、Ｃｈｒｉｓ  Ｐｅｉｋｅｒｔ、およびＡｌｏｎ  Ｒｏｓｅｎによる“Ｐｓｅｕｄｏｒａｎｄｏｍ  Ｆｕｎｃｔｉｏｎｓ  ａｎｄ  Ｌａｔｔｉｃｅｓ”
ＬＷＥ：Ｏｄｅｄ  Ｒｅｇｅｖによる“Ｏｎ  Ｌａｔｔｉｃｅｓ，  Ｌｅａｒｎｉｎｇ  ｗｉｔｈ  Ｅｒｒｏｒｓ，  Ｒａｎｄｏｍ  Ｌｉｎｅａｒ  Ｃｏｄｅｓ，  ａｎｄ  Ｃｒｙｐｔｏｇｒａｐｈｙ”
ＬＷＲ：Ａｂｈｉｓｈｅｋ  Ｂａｎｅｒｊｅｅ、Ｃｈｒｉｓ  Ｐｅｉｋｅｒｔ、およびＡｌｏｎ  Ｒｏｓｅｎによる“Ｐｓｅｕｄｏｒａｎｄｏｍ  Ｆｕｎｃｔｉｏｎｓ  ａｎｄ  Ｌａｔｔｉｃｅｓ”
Ｈｉｌａ５：Ｍａｒｋｋｕ−Ｊｕｈａｎｉ  Ｏ．  Ｓａａｒｉｎｅｎによる“ＨＩＬＡ５：  Ｏｎ  Ｒｅｌｉａｂｉｌｉｔｙ，  Ｒｅｃｏｎｃｉｌｉａｔｉｏｎ，  ａｎｄ  Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｏｎ  ｆｏｒ  Ｒｉｎｇ−ＬＷＥ  Ｅｎｃｒｙｐｔｉｏｎ”
【００４１】
スター演算はノイジー（ｎｏｉｓｙ）な行列乗算であり、例えば、通常の行列乗算の後にノイズが加えられてもよい。ノイズを加えることは、行列の乗算と統合されてもよい。スター演算においてノイズを加えることは複数の方法で実行され得る。ノイズを加える一例は、明示的なノイズを加えることであり、例えばノイズ行列が生成されて加えられてもよい。明示的なノイズを加えることの利点は、ノイズが暗号使用者の完全な制御下にあり、微調整できることであり、例えば、セキュリティに対するシステムの故障率を正確に制御することができる。また、明示的なノイズを加える場合、全ての行列が同じ環やフィールド等の上にあるため、分析が単純になるという利点がある。ノイズを加える方法の他の例はスケールダウン（ｓｃａｌｉｎｇ  ｄｏｗｎ）である。例えば、行列ａ、ｒ、およびｓは、モジュラスｑを法とする要素（例えば、ｑを法とする整数または多項式）を有し得る。スター演算は、行列演算の結果をモジュロｑからモジュロｐに切り捨てし、これは例えば、ｐ／ｑを掛け、丸め（例えば、切り上げ、切り捨て、または最も近い整数への丸め等）を行うことで実行され得る。
【００４２】
本願では行列には小文字が使用される。例えば、行列の型のために、または、両側の生の鍵がほぼ等しい必要がある場合など、必要に応じて行列を転置する必要があることが理解される。通常、これを行うには複数のやり方が存在する。例えば、一実施形態において全ての行列を転置することによって、別の実施形態が得られ得る。
【００４３】
以下に、行列オブジェクトが大文字で示され、転置が含まれる１つの例を示す。秘密鍵は行列
【数１】
2022500911.tif 000003
および
【数２】
2022500911.tif 000004
として定められる。なお、このような秘密鍵行列は実際には、
【数３】
2022500911.tif 000005
および
【数４】
2022500911.tif 000006
の独立した秘密鍵ベクトルをそれぞれ含むことに留意されたい。生の鍵の行列はＳＴＡＴＲであり、
【数５】
2022500911.tif 000007
内に存在する。生の鍵の各エントリーからＢ個の最上位ビットが抽出され、合わせて長さ
【数６】
2022500911.tif 000008
の生の鍵が生成される。公開鍵暗号化デバイスおよび秘密鍵復号デバイスのそれぞれにおいて導出される生の鍵は完全には等しくない可能性があるため、生の鍵はそのように言及される。
【００４４】
登録フェーズ３１において：
秘密鍵復号デバイスは公開行列Ａおよび第１の秘密鍵行列Ｒを選択する。
秘密鍵復号デバイスは、何らかのエラー行列Ｅについて、第１の公開鍵行列Ｂ＝ＡＲ＋Ｅを計算する。
秘密鍵復号デバイスは以下を送信する：Ａ、Ｂ
【００４５】
暗号化フェーズ３２において：
公開鍵暗号化デバイスは第２の秘密鍵行列Ｓを選択する。
公開鍵暗号化デバイスは、何らかのエラー行列Ｅ’について、第２の公開鍵行列Ｕ＝ＡＴＳ＋Ｅ’を計算する。
公開鍵暗号化デバイスは第２の生の鍵ＢＴＳを計算する。なお、ＢＴＳ＝ＳＴＡＴＲ＋ＥＴＲである。
公開鍵暗号化デバイスは送信鍵Ｋを生成し、カプセル化された送信鍵を調整（ｒｅｃｏｎｃｉｌａｔｉｏｎ）データとともに
【数７】
2022500911.tif 000009
として計算する。
公開鍵暗号化デバイスは以下を送信する：Ｕ、Ｃ
【００４６】
復号フェーズ３３において：
秘密鍵復号デバイスは第１の生の鍵ＢＴＳを計算する。なお、ＢＴＳ＝ＳＴＡＴＲ＋ＥＴＲである。
秘密鍵復号デバイスは、Ｃ−ＳＴＵを計算し、結果を
【数８】
2022500911.tif 000010
の倍数に丸めることによってカプセル化を解除する。次に、丸めから、例えば
【数９】
2022500911.tif 000011
で割ることによって、送信鍵Ｋが取得され得る。
【００４７】
上記の例では、行列Ａ、Ｂ、Ｓ、Ｕ、およびＲはＺ＿ｐ上にある。指数２Ｂの値Ｂは、Ｋをカプセル化するために生の鍵から取られる最上位ビットの数を示す。この例では、残りのより下位のビットが調整データとして使用される。例えば、カプセル化のためにＢ＝４ビットが取られ得る。例えば、モジュラスはｐ＝２１２として選択され得る。送信鍵は、Ｚ＿２＾Ｂ内のエントリー（例えば、｛０，１，・・・，２＾Ｂ−１｝から選択されたエントリー）を有する行列として符号化され得る。行列ＥおよびＥ’は、ｐを法とする、エントリーが小さい行列であってもよい。例えば、エントリーは以下の集合から選択されてもよい。
【数１０】
2022500911.tif 000012
ここで、ｗは小さい。ｗのサイズは、セキュリティとシステムの故障率のバランスをとるように選択される。ｗの値が低いとシステムの故障率が下がる。
【００４８】
行列Ｃがｐを法として計算され得る。帯域幅効率の観点から、公開鍵暗号化デバイスは
【数１１】
2022500911.tif 000013
を計算して送信し、ここで、ｔはｐを除算する。Ｍの復元にあたり、秘密鍵復号デバイスは
【数１２】
2022500911.tif 000014
を計算する。この場合、調整データとして利用される生の鍵のビット数は、利用可能なビット数よりも少ない。一般に、より下位のビットほど失敗率に与える影響が少ない。
【００４９】
エラー行列を使用する代わりに、明示的なノイズを加えることに代えて、スター演算においてスケールダウンを行ってノイズが加えられてもよい。スケールダウンには帯域幅が削減されるという利点がある。
【００５０】
図２ａに戻る。秘密鍵復号デバイス１０が自身の秘密鍵行列および公開鍵行列を生成し、公開鍵暗号化デバイス２０に対して公開鍵を利用可能にする登録フェーズ３１が図示されている。例えば、公開鍵がデバイス２０に送信されてもよい。例えば、公開鍵は公開鍵データベースに預けられ、デバイス２０がそれを取り出すことが可能であってもよい。例えば、デバイス１０およびでバイアス２０は異なるデバイスであってもよいし、同じデバイスでもよい。
【００５１】
登録フェーズ３１中、デバイス１０は第１の秘密鍵行列（ｒ）を生成し、第１の秘密鍵行列（ｒ）から第１の公開鍵行列（ｂ）を計算する。例えば、デバイス１０は公開行列（ａ）を生成し、第１の公開鍵行列（ｂ）を、第１の秘密鍵行列（ｒ）と公開行列（ａ）との間のノイジーな行列乗算として計算し得る。秘密鍵復号デバイスから公開鍵暗号化デバイス２０への第１の公開鍵行列（ｂ）の伝送が手配される。例えば、第１の公開鍵行列（ｂ）はメッセージ１１内で秘密鍵復号デバイスからデバイス２０に送信され得る。
【００５２】
公開行列（ａ）は、公開鍵暗号化デバイスと秘密鍵復号デバイスとの間で共有され、第１の公開鍵行列（ｂ）は公開行列（ａ）に関連付けられる。例えば、公開行列は公開鍵行列（ｂ）と同じ方法でデバイス２０に伝送される。通常、行列ａはシードから疑似ランダムに生成される。シードを送ることで行列を共有することができる。
【００５３】
暗号化フェーズ３２は登録フェーズ３１よりも後でもよく、場合によってははるかに後でもよい。暗号化フェーズ３２において、デバイス２０は送信鍵（Ｋ）を生成し、第２の秘密鍵行列（ｓ）を生成し、第２の秘密鍵行列（ｓ）から第２の公開鍵行列（ｕ）を計算する。例えば、デバイス２０は、第１の公開鍵行列（ｂ）に関連付けられた公開行列（ａ）を取得し、第２の公開鍵行列（ｕ）を、第２の秘密鍵行列と公開行列（ａ）との間のノイジーな行列乗算として計算し得る。公開行列は、公開行列の生成に使用されるシードの形式で取得されてもよい。一実施形態では、公開行列は異なるソースから取得される。例えば、デバイス１０およびデバイス２０の両方が第三者から公開行列を取得することができる。
【００５４】
送信鍵の生成はランダムに行われてもよい。
【００５５】
デバイス２０は、第２の秘密鍵行列（ｓ）および第１の公開鍵行列（ｂ）から第２の生の共有鍵（ｋ＊）を計算し、第２の秘密鍵行列（ｓ）と第１の公開鍵行列（ｂ）との間の行列乗算を含む、第２の生の共有鍵の計算を行い、カプセル化関数を適用することによって第２の生の共有鍵の少なくとも一部で送信鍵（Ｋ）をカプセル化して、カプセル化されたデータ（ｃ）を取得し、第２の公開鍵行列（ｕ）、および秘密鍵復号デバイスへのカプセル化されたデータ（ｃ）を送るように構成される。例えば、第２の公開鍵行列（ｕ）、および秘密鍵復号デバイスへのカプセル化されたデータはメッセージ１２内で送信され得る。
【００５６】
なお、これにより、送信鍵を生の鍵から独立させることができる。これにより、アクティブな攻撃に対する耐性が上昇する。
【００５７】
秘密鍵復号デバイスが公開鍵暗号化デバイスから第２の公開鍵行列（ｕ）およびカプセル化されたデータ（ｃ）を受信した後、秘密鍵復号デバイスは復号フェーズ３３において、第２の公開鍵行列（ｕ）および第１の秘密鍵行列（ｒ）から第１の生の共有鍵（ｋ’）を計算し、第２の公開鍵行列（ｕ）と第１の秘密鍵行列（ｒ）との間の行列乗算を含む、第１の生の共有鍵の計算を行い、第１の生の共有鍵（ｋ’）の少なくとも一部を使用してカプセル化されたデータ（ｃ）のカプセル化を解除することで送信鍵を取得し得る。
【００５８】
興味深いことに、一実施形態では、第２の公開鍵行列（ｕ）は、第１の公開鍵行列（ｂ）よりも少ない行列要素を有する。全ての行列が正方形で同じ型の場合、第２の公開鍵行列（ｕ）および第１の公開鍵行列（ｂ）は同じ数の要素を有する。発明者らは、これが必要でないとの見識を得た。これは、メッセージ１１および１２への公開鍵の寄与が等しくなることを意味する。しかし、これらのメッセージが送信される状況、およびメッセージを送信するデバイスは全く異なる可能性がある。第２の公開鍵行列（ｕ）のサイズを第１の公開鍵行列（ｂ）よりも小さくなるように選択することにより、メッセージ１２のための帯域幅要件は減少し、一方でメッセージ１１の帯域幅要件は増加する。
【００５９】
第２の公開鍵行列（ｕ）のサイズを第１の公開鍵行列（ｂ）の行列要素の数よりも小さくする１つの方法は、適切に小さい第２の秘密鍵行列を選択することである。特に、第２の秘密鍵行列（ｓ）は、第１の公開鍵行列（ｂ）よりも少ない行列要素を有するように選択されてもよい。これは、さらに、第２の公開鍵行列（ｕ）が第１の秘密鍵行列（ｒ）よりも少ない行列要素を有することを示唆し得る。
【００６０】
例えば、一実施形態では、システムの型／次元（ｄｉｍｅｎｓｉｏｎ：ｄ）が選択される。システムの型は部分的にシステムのセキュリティを決定する。ｎの値が大きいほどセキュリティが高くなる。各行列ａ、ｒ、ｂ、ｓ、ｕの次元の１つはシステムの次元ｄと等しい。エラー行列が使用される場合、エラー行列ｅ、ｅ’もシステムの次元に等しい次元を１つ有し得る。生の鍵ｋ、ｋ’、および／または送信鍵Ｋが行列として表される場合、同様に、これらもシステムの次元に等しい次元を１つ有し得る。これらの行列の他の次元は、加算および乗算（場合によっては転置を含む）に対応するように選択され得る。
【００６１】
一実施形態では、公開行列ａは型がｄ×ｄの正方行列である。第１の秘密鍵行列ｒおよび第１の公開鍵行列ｂの型は
【数１３】
2022500911.tif 000015
である。第２の秘密鍵行列ｓおよび第２の公開鍵行列ｕの型は
【数１４】
2022500911.tif 000016
である。第２の秘密鍵行列ｓおよび第２の公開鍵行列ｕの第２の次元
【数１５】
2022500911.tif 000017
を、第１の秘密鍵行列ｒおよび第１の公開鍵行列ｂの第２の次元
【数１６】
2022500911.tif 000018
よりも小さくなるように選択することによって、メッセージ１２内の公開鍵ｕがメッセージ１１内の公開鍵ｂよりも少ないエントリーを有することが保証される。
【００６２】
例えば、第２の公開鍵行列（ｕ）の第２の次元（
【数１７】
2022500911.tif 000019
）を、例えば、第１の公開鍵行列（ｂ）の第２の次元（
【数１８】
2022500911.tif 000020
）の半分以下になるように選択することにより、第２の公開鍵行列（ｕ）が第１の公開鍵行列（ｂ）の半分以下の数のエントリーを有することが保証される。
【００６３】
第２の秘密鍵行列および第２の公開鍵行列の第２の次元（
【数１９】
2022500911.tif 000021
）の特に好適な選択肢は１である。これにより、第２のメッセージ１２のサイズを最小化することができる。
【００６４】
例えば、メッセージ１１は、より多くの帯域幅が利用可能である登録フェーズ中に送信され得る。例えば、メッセージ１２は、より少ない帯域幅が利用可能である、システムでアクティブなやり取りが行われている間に送信され得る。例えば、デバイス１２は、十分な帯域幅があるとき（例えば、製造中またはセットアップ中）に第１の公開鍵を受け取るセンサであり、メッセージ１２は、帯域幅がより少ない可能性があるセンサの使用中に送信され得る。なお、メッセージ１１を、例えばコンピュータネットワークを介して送信する代わりに、第１の公開鍵は、例えばデバイス２０のメモリデバイス上にインストールされることによってデバイス２０において取得されてもよい。
【００６５】
興味深いことに、システムのセキュリティは、
【数２０】
2022500911.tif 000022
および
【数２１】
2022500911.tif 000023
の個々の大きさよりも、システムの次元ｄおよび積
【数２２】
2022500911.tif 000024
に依存すると考えられている。後者は生の鍵を導出するために使用できるビットの長さを示す。前者は、基礎となる格子のサイズに影響を与え、よって、基礎となる暗号問題の難しさに影響を与える。スキームの復号失敗確率は、部分的にＢの値に依存する。Ｂの値が高い場合、失敗率が悪化し、適応型能動的攻撃に対するＰＫＥスキームのセキュリティに悪影響を及ぼす。通常、Ｂは固定であり、例えば、標準化されたパラメータセットの形式をとる。
【００６６】
したがって、第１の公開鍵のサイズ（例えば、
【数２３】
2022500911.tif 000025
のサイズ）を大きくするとともに、
【数２４】
2022500911.tif 000026
のサイズを小さくすることにより、メッセージ１２に必要な帯域幅を減らしつつ、同じセキュリティを維持することができる。具体的には、
【数２５】
2022500911.tif 000027
かつ
【数２６】
2022500911.tif 000028
であるシステムは、
【数２７】
2022500911.tif 000029
かつ
【数２８】
2022500911.tif 000030
であるシステムと同等のセキュリティを備える。
【００６７】
興味深いことに、第２の公開鍵行列（ｕ）の第２の次元（
【数２９】
2022500911.tif 000031
）は事前決定されたものである必要はない。この次元は第１の秘密鍵および公開鍵の選択から独立して選択可能である。具体的には、次元（
【数３０】
2022500911.tif 000032
）から独立して選択可能である。一実施形態では、第２の次元（
【数３１】
2022500911.tif 000033
）は第２のデバイス２０において設定可能である。
【００６８】
ある例示的な実施形態では
【数３２】
2022500911.tif 000034
が使用され得る。Ｂは、生の鍵行列エントリーで使用される最上位ビットの数を示す。
【表１】
2022500911.tif 000035
【００６９】
表中、
ｎは、秘密行列および／または公開行列内の多項式の次数を示す。ｎ＝１の値は、モジュラスを法とする整数が使用されることを示す。値ｎは「環の次元（ｒｉｎｇ  ｄｉｍｅｎｓｉｏｎ）」、例えば、選択された多項式環の次数と称され得る。
ｄはシステムの型、例えば、公開行列ａの列および行の数を示す。
μは、送信鍵をカプセル化するのに使用される生の鍵行列の要素の数を示す。これらの要素は、事前に決定されたもの（例えば、標準化されたもの）であってもよいし、ランダムに選択されたものでもよいし、または意図的に選択されたもの（例えば、信頼できる要素として）であってもよい。したがって、共有秘密鍵の長さはμＢであり、上記の例では、これは６４×４＝２５６である。
【００７０】
一実施形態では、第１の公開鍵は以下を含み得る。
１．公開行列ａを再生成するためのシード。例えば、シードのビット長は共有秘密と同じに選択され得る（この例では２５６ビット）。
２．公開鍵行列ｂ。この行列の次元はｄおよび
【数３３】
2022500911.tif 000036
であり、ｐを法とする選択された要素を有し得る。例えば、第１の秘密行列は、ｑを法とする選択された要素を有し得る。この場合、ｑからｐにスケールダウンすることでノイズが加えられ得る。この例の公開鍵行列は
【数３４】
2022500911.tif 000037
ビット（この例では１２×１１９８×６４＝９２００６４ビット）に符号化され得る。
３．任意選択的に、追加のブックキーピング情報。例えば、鍵のタイプを示すために識別子が含められてもよい（例えば、１バイト）。例えば、識別子は公開行列ａの再生方法を示し得る。例えば、値
【数３５】
2022500911.tif 000038
が含められ得る（例えば、２バイト）。値
【数３６】
2022500911.tif 000039
のために２バイトの場合、
【数３７】
2022500911.tif 000040
をより大きな値に選択することができ、例えば、一部のユースケースでは
【数３８】
2022500911.tif 000041
の値が５１２であってもよい。これらの値および識別子は、例えばシステム設計者によって事前に定められていてもよく、その場合はそれらを含める必要はない。しかし、
【数３９】
2022500911.tif 000042
の値を含めることにより、帯域幅を暗号化フェーズから登録フェーズに、例えばその用途に必要な程度に動的にシフトすることができる。
【００７１】
この例の公開鍵行列の合計サイズは１１５００８バイトである。シードおよび／または識別子が含められる場合、３２バイトまたは３５バイト等が追加され得る。秘密鍵の生成は様々な方法で実行され得ることに留意されたい。例えば、秘密鍵行列は完全にランダムであってもよいが、ハミング重み制限等の制限を受けてもよい。例えば、秘密鍵行列内の長さｄのベクトルは事前に決定されたハミング重みを有し得る。例えば、この例ではハミング重みは５７４に選択されてもよい。
【００７２】
一実施形態では、暗号文は以下を含み得る。
１．第２の公開鍵行列ｕ。第２の公開鍵行列の次元はｄおよび
【数４０】
2022500911.tif 000043
であり、ｐを法とする選択された要素を有する。この例の公開鍵行列は
【数４１】
2022500911.tif 000044
ビットに、この例では１２×１１９８×１＝１４３７６ビットに符号化され得る。
２．カプセル化されたデータｃは、μの要素を有するベクトルとして符号化され、ここで、要素はｔを法として選択される。この例のカプセル化されたデータのサイズは
【数４２】
2022500911.tif 000045
ビットであり、この例では６４×１０＝６４０ビットである。このスキームは
【数４３】
2022500911.tif 000046
の調整ビットを使用するとみなすことができ、この例では６である。
３．任意選択的に、認証付き暗号がメッセージに使用される場合、認証タグ。例えば、Ｇａｌｏｉｓ／ｃｏｕｎｔｅｒモードが使用される場合、認証タグはＡＥＳＧＣＭ認証タグであり得る。ＰＫＥスキームの公開鍵に認証タグを含めることは必要ではない。
４．任意選択的に、
【数４４】
2022500911.tif 000047
の値。例えば、これは１バイトであってもよい。
【００７３】
したがって、この例では、暗号文のサイズは１２×１１９８×１＋６４×１０＝１５０１６ビット、つまり１８７７バイトであってもよい。暗号文のサイズには、暗号化されたメッセージのサイズは含まれない。任意選択的に、いくつかのビット、例えば８ビットが
【数４５】
2022500911.tif 000048
の値を送るために使用されてもよい。この例のＰＱセキュリティは２２３３と推定され、失敗率は２−１２９と推定される。
【００７４】
一実施形態では、能動的セキュリティは、より精巧なカプセル化関数（例えば、Ｈａｙｏ  Ｂａａｎらによる“Ｒｏｕｎｄ２：ＫＥＭ  ａｎｄ  ＰＫＥ  ｂａｓｅｄ  ｏｎ  ＧＬＷＲ”のアルゴリズム９のように）を使用してさらに強化され得る。そのような場合、暗号文はハッシュｇを含み、これは、秘密鍵復号デバイスの公開鍵をハッシングすることにより、公開鍵暗号化デバイスによって計算され得る。ハッシュは、最終的な共有秘密が、秘密鍵復号デバイスおよび公開鍵暗号化デバイスの両方からの寄与が含むことを保証するために使用され得る。例えば、藤崎・岡本変換が使用されてもよい。ハッシュは例えば、共有秘密のサイズ（この例では２５６ビット）を有し得る。
【００７５】
上記したように、送信鍵はメッセージｍを暗号化するために使用され得る。例えば、公開鍵暗号化デバイスは、メッセージ（ｍ）を送信鍵で暗号化し、暗号化されたメッセージを秘密鍵復号デバイスに送るように構成され得る。秘密鍵復号デバイスは、公開鍵暗号化デバイスから暗号化されたメッセージを、例えば第２の公開鍵行列およびカプセル化されたデータとともに受信し、送信鍵を用いて暗号化されたメッセージを復号し得る。
【００７６】
一実施形態では、送信鍵は第１の公開鍵行列（ｂ）に依存しない。例えば、送信鍵Ｋは、第１の公開鍵行列（ｂ）を使用せずに生成され、例えば、送信鍵は、ランダムに生成されてもよく、および／またはデバイス２０が第１の公開鍵行列（ｂ）を受け取る前に生成され得る。
【００７７】
同様に、送信鍵は第１の秘密鍵行列（ｒ）から独立していてもよい。送信鍵は、第２の秘密鍵行列（ｓ）および第２の公開鍵行列（ｕ）、カプセル化されたデータ（ｃ）から計算的に独立していてもよい。計算的に独立しているとは、攻撃者の計算限界内で、第２の秘密鍵行列を知ることが送信鍵に関する情報を提供しないことを意味する。
【００７８】
送信鍵Ｋは通常、一時的に使用され、例えば一過性であり、例えば、単一のメッセージｍ、または単一のセッション、プロトコル、ハンドシェイクなどを暗号化するためにのみ使用される。送信鍵Ｋは対称鍵であり、例えば、ブロック暗号の鍵として使用される。
【００７９】
例えば、デバイス２０は、送信鍵をカプセル化した後、メッセージおよび／または第２の秘密鍵行列を暗号化する送信鍵を削除するように構成され得る。例えば、カプセル化されたデータをデバイス１０に送信する前に送信鍵および／または第２の秘密鍵行列が削除されてもよい。同様に、デバイス１０は、メッセージを復号した後に送信鍵を削除してもよい。
【００８０】
一実施形態では、第２の秘密鍵行列は送信鍵から導出される。例えば、送信鍵は、真にまたは疑似的にランダム生成され、その後、鍵導出関数（例えば、シードを導出するためのハッシュ関数）への入力として使用され得る。追加の入力（例えば、メッセージ、第１の公開鍵行列など）が存在してもよい。その後、シードを使用して第２の秘密鍵行列が、例えばシードに依存する決定的疑似ランダム関数として生成される。鍵導出関数は、第２の秘密鍵行列から送信鍵を計算できないように選択されることが好ましい。
【００８１】
これは、デバイス１０が送信鍵を導出した後、送信鍵から第２の秘密鍵行列を再構築できるという効果を奏する（例えば、同じ鍵導出関数を適用して送信鍵から第２の秘密鍵行列を計算することによって）。次に、デバイス１０は、第２の公開鍵および／またはカプセル化されたデータが正しく計算されたか否かを検証し得る。これは、能動的な攻撃を達成することがはるかに難しいという利点を有する。デバイス１０が異常を発見した場合、例えば、受信されたデータと、再計算された第２の公開鍵および／または再計算されたカプセル化されたデータとの間の差異を発見した場合、デバイス１０は適切なアクションをとることができ、例えば警告信号を生成したり、第２のメッセージの復号を中止したりし得る。
【００８２】
送信鍵から第２の秘密鍵行列を導出することは、セキュリティを強化してＣＣＡ安全システムのセキュリティに近づけるという利点を有する。これは、特に第１の公開鍵行列が一度生成され、多くのメッセージに使用される場合に有利である。
【００８３】
一実施形態では、公開鍵暗号化デバイスのプロセッサは、ヘルパーデータを計算することで、秘密鍵復号デバイスにて送信鍵を取得する際のエラーレートを低減するように構成される。ノイジーな行列乗算に基づく公開鍵暗号化の性質上、秘密鍵復号側での送信鍵の再構築が失敗する可能性がある。失敗の確率は様々な方法で減らすことができるが、その１つは、秘密鍵復号デバイスが正しい送信鍵に到達するのに役立つヘルパーデータを計算して送ることである。
【００８４】
例えば、秘密鍵復号デバイスは、公開鍵暗号化デバイスからヘルパーデータを受け取り、ヘルパーデータを適用して、秘密鍵復号デバイスにて送信鍵を取得する際のエラーレートを低減するように構成され得る。
【００８５】
使用され得るヘルパーデータにはいくつかの種類が存在する。上記の例では１つの手法、いわゆる調整データが使用された。第２の生の鍵の一部が送信鍵をカプセル化するために使用され、一部が調整データとして使用されてもよい。
【００８６】
例えば、一実施形態では、第２の生の鍵は行列であり、送信鍵（Ｋ）をカプセル化することは、送信鍵のビットを、第２の生の鍵行列の要素の少なくとも一部の最上位部分に加えること、および第２の生の鍵行列の要素の前記少なくとも一部のゼロ以上の最下位ビットを破棄することを含む。一実施形態では、送信鍵をカプセル化するために送信鍵に加えられない全てのビットが調整データとして使用され得る。しかし、帯域幅を減らすために、最下位ビットのうちの１つ以上が破棄されてもよい。なお、生の鍵行列の全ての行列要素を使用しなくてもよいことに留意されたい。使用されない要素は完全に破棄されてもよい。これにより帯域幅を節約できる。デバイス１０において、カプセル化されたデータのカプセル化を解除することは、第１の生の鍵行列の少なくとも一部の要素のゼロ以上の最下位ビットを破棄すること、カプセル化されたデータから第１の生の鍵行列の少なくとも一部の要素を差し引くこと、および差し引いた結果を丸めることを含み得る。興味深いことに、ヘルパーデータはカプセル化された送信鍵に容易に組み込むことができる。
【００８７】
一実施形態では、公開鍵暗号化デバイスは、以下のうちの１つまたは複数を実行するように構成される。
ａ）高信頼性ビット関数を第２の生の共有鍵（ｋ＊）に適用し、第２の生の共有鍵の一部を選択し、第２の生の共有鍵の要素を指し示す高信頼性インデックスを取得し、ここで、指し示された要素からカプセル化のためのビットが導出され、さらに高信頼性インデックスを秘密鍵復号デバイスに送ること、および／または
ｂ）第２の生の共有鍵の少なくとも一部のための調整データ（ｈ）を生成し、ここで、調整データは、公開鍵暗号化デバイスおよび秘密鍵復号デバイスにおいて導出される第１の生の鍵と第２の生の鍵との間の差異を減らすことを可能にする情報を含み、さらに調整データ（ｈ）を秘密鍵復号デバイスに送ること、および／または
ｃ）送信鍵のためのパリティビットを生成し、ここで、送信鍵およびパリティビットは誤り訂正符号に従いコードワードを形成し、さらに、コードワードをカプセル化することを含む送信鍵のカプセル化を行うこと。
【００８８】
同様に、秘密鍵復号デバイスは、以下のうちの１つまたは複数を実行するように構成され得る。
ａ）公開鍵暗号化デバイスから高信頼性インデックスを受け取り、高信頼性インデックスによって指し示される第１の生の共有鍵の部分を選択すること、
ｂ）第１の生の共有鍵（ｋ’）の少なくとも一部のための調整データ（ｈ）を受け取り、ここで、調整データは、公開鍵暗号化デバイスおよび秘密鍵復号デバイスにおいて導出された第１の生の鍵と第２の生の鍵との間の差異を減らすことを可能にする情報を含み、さらに第１の生の共有鍵の前記少なくとも一部、および調整データに調整関数を適用すること、および
ｃ）カプセル化されたデータ（ｃ）のカプセル化を解除することでニアコードワードを取得し、誤り訂正符号に従って誤り訂正を適用すること。
【００８９】
高信頼性ビットは、両方のパーティで等しく計算される可能性が高いビットである。例えば、生の鍵行列の一部の要素が信頼性が高いと判断され、信頼性の低い他の要素は破棄されてもよい。選択された行列要素について、調整データが取得され得る。最後に、さらなるエラーを計算するためにパリティビットが計算され得る。これらの３種類のヘルパーデータは独立しており、１つ、２つ、または３つ全てを使用して、秘密鍵復号の失敗率を減らすことができる。
【００９０】
一実施形態では、調整データおよびパリティビットは組み合わされているが、高信頼性ビットは組み合わされていない。この手法の利点は、要素のサイズに関する情報を共有する必要がないことである。ヘルパーデータはカプセル化されたデータに含められてもよいが、デバイス２０からデバイス１０に別に送られてもよい。好都合なことに、調整データは、例えば本明細書に示されるように、カプセル化された送信鍵に組み込むことができる。パリティビットと調整データとが組み合わされているが、高信頼性ビットは組み合わされていない実施形態の例が図３に示されている。
【００９１】
公開鍵暗号化デバイスまたは秘密鍵復号デバイスの一実施形態では、高信頼性ビットは、指し示された要素の１つまたは複数の最上位ビットであり、指し示された要素のための調整データは、重要性において高信頼性ビットに続く指し示された要素の１つまたは複数のビットであり、指し示された要素の１つまたは複数の最下位ビットは破棄され得る。指し示された要素（すなわち、高信頼性要素）は、公開鍵暗号化デバイスから秘密鍵復号デバイスに伝達され得る（例えば、行列内のそれらの要素の位置）。
【００９２】
秘密鍵復号デバイスの一実施形態では、高信頼性インデックスによって指し示される生の鍵内の要素が選択され、対応する調整データと合致する修正された要素に置き換えられる。例えば、修正された要素は、選択された要素と修正された要素との間のリー距離を最小化し得る。高信頼性ビットは、修正された要素の１つまたは複数の最上位ビットとして取得され得る。
【００９３】
一実施形態では、修正された要素は、公開鍵暗号化デバイスによって破棄されなかったであろう対応する調整データと合致するように決定される。修正された要素は、選択された要素と修正された要素との間のリー距離を最小化する。
【００９４】
図２ｂは公開鍵暗号化および秘密鍵復号の例を概略的に示す。図２ｂにおいて、「ｉｎｄ」は鍵のサイズまたは行列のサイズの指標を表す。
【００９５】
図２ｂで示される実施形態は、図２ａの実施形態の上に構築されたものである。図２ｂに係るデバイス１０は、登録フェーズ３１の間、図２ａのデバイス１０と同じであり得る。しかし、暗号化フェーズ３２の間、デバイス２０は、送信鍵（Ｋ）の鍵サイズを取得し、鍵サイズに従って送信鍵（Ｋ）を生成するように構成される。例えば、暗号化すべき情報の機密性が高い場合、デバイス２０は２５６ビットの送信鍵Ｋを選択し得る。しかし、情報の機密性が低い場合、デバイス２０は１２８ビットの送信鍵Ｋを選択し得る。デバイス２０は、そのような鍵サイズの送信鍵のカプセル化に対応するよう、第２の秘密鍵行列のための行列サイズを決定し得る。例えば、大きい送信鍵を収容するために、デバイス２０は、より大きな、例えば、比例してより大きな第２の次元
【数４６】
2022500911.tif 000049
を選択し得る。
【００９６】
第２の次元
【数４７】
2022500911.tif 000050
は、
【数４８】
2022500911.tif 000051
が送信鍵の所望のビットサイズに等しいか、少なくとも同じ大きさを有するように選択され得る。例えば、１２８ではなく２５６ビットに対応するには、第２の次元
【数４９】
2022500911.tif 000052
は２倍の大きさとして選択され得る。例えば、
【数５０】
2022500911.tif 000053
が２５６または１２８になるために、
【数５１】
2022500911.tif 000054
は２または１であり得る。
【００９７】
選択された次元
【数５２】
2022500911.tif 000055
に応じて、デバイス２０は、行列サイズに従う（例えば、システム次元ｄおよび第２の次元
【数５３】
2022500911.tif 000056
に従う）第２の秘密鍵行列を生成する。次に、大きい行列に基づいて、デバイス２０は、例えば本明細書で、例えば図２ａに関連して述べられたように、生の鍵を計算して送信鍵をカプセル化する。しかし、デバイス２０は、鍵サイズおよび／または行列サイズの指標ｉｎｄを秘密鍵復号デバイスに送る。例えば、指標ｉｎｄは、送信鍵のサイズ（例えば、２５６もしくは１２８、または「大きい」もしくは「小さい」）、または第２の公開鍵／秘密鍵行列のサイズ（例えば、第２の次元（例えば、２または１））などであり得る。指標は暗示的であってもよく、例えば大きいまたは小さい第２の公開鍵行列を送ることによって暗示されてもよい。例えば、第２の公開鍵行列は、パケットのサイズまたは終わりなどを指し示す１つまたは複数のコンピュータネットワークパケット内で送信され、これにより、第２の公開鍵行列のサイズ（例えば、第２の次元のサイズ）が暗示される。
【００９８】
【数５４】
2022500911.tif 000057
の値がカプセル化に必要な値よりも大きい場合、（例えば鍵サイズが
【数５５】
2022500911.tif 000058
である）意図的に大きい送信鍵が選択されてもよい。その後、選択された送信鍵から、例えば鍵導出関数やハッシュなどによって、最終的な送信鍵が計算され得る。
【００９９】
デバイス１０は、例えば本明細書で、例えば図２ａに関連して述べられるように進行し得る。例えば、デバイス１０は、受信された公開鍵行列を使用して第１の生の鍵を計算し、カプセル化された送信鍵のカプセル化を解除し得る。生の鍵のサイズは公開鍵のサイズに依存して異なり得る。
【０１００】
一実施形態では、公開鍵暗号化デバイスが必要な
【数５６】
2022500911.tif 000059
値を決定できるよう、第１の公開鍵が、公開鍵のパラメータとしてのパラメータ
【数５７】
2022500911.tif 000060
と共に送られる。例えば、
【数５８】
2022500911.tif 000061
は、
【数５９】
2022500911.tif 000062
となるように公開鍵暗号化デバイスによって計算され得る。例えば、一実施形態では、公開鍵は公開鍵行列ｂ、公開鍵行列ａ、および次元
【数６０】
2022500911.tif 000063
を含む。後者は暗示的であってもよい。言い換えれば、デバイス１０は、所与のセキュリティレベルを達成することを可能にするパラメータセットをデバイス２０に送る。
【０１０１】
一実施形態に係る公開鍵暗号化は様々な既存のプロトコルで使用され得る。例えば、実施形態はＴＬＳ、ＩＰＳｅｃ、ＶＰＮなどのプロトコルに組み込まれてもよい。例えば、
ＴＬＳ１．３：クライアントがｃｌｉｅｎｔ＿ｈｅｌｌｏを送る。ｃｌｉｅｎｔ＿ｈｅｌｌｏは公開鍵行列を含み得る。ｃｌｉｅｎｔ＿ｈｅｌｌｏは、公開鍵の代わりに、公開鍵行列をダウンロードできる場所を示すＵＲＬを含んでもよい。サーバがまだ公開鍵を持っていない場合（例えば、キャッシュ）、サーバは公開鍵行列をダウンロードし、ローカルに保存し得る。公開鍵行列を用いて、サーバは対称鍵を暗号化することができる。暗号化された対称鍵はクライアントに送信され、レコード層のための対称鍵導出の元となるマスターキーとして使用される。この例では、クライアントは秘密鍵復号デバイスの役割を果たす。
【０１０２】
ＴＬＳ１．２：この例では逆である。クライアントはリクエストを送り、サーバは、サーバ公開鍵行列を取得できる場所のＵＲＬを送る。公開鍵がまだ利用可能な状態でない場合、クライアントはダウンロードを行い得る。クライアントが公開鍵行列を取得した後、例えばレコード層で使用するために、クライアント送信鍵の暗号化に進み得る。この例では、クライアントは公開鍵暗号化デバイスの役割を果たす。
【０１０３】
なお、公開鍵は事前に配布されていてもよい。例えば、ブラウザにおいて１つまたは複数（例えば、複数）の公開鍵行列が事前に配布されいてもよい。例えば、ソフトウェア（例えば、ブラウザ）が、事前配布を通じて公開鍵が取得されたか否かを確認することができるよう、公開鍵が公開鍵ＩＤ（例えば、鍵のハッシュ）で指し示されてもよい。事前配布のケースでは、帯域幅の非対称性が利点である。例えば、事前配布中は公開鍵行列が大きくても問題ないが、使用中はメッセージのサイズが小さくなる。また、例えば、（例えばＴＬＳベースの）ＶＰＮでは、公開鍵は、通信を行う当事者達の一方または両方において事前に構成され得る。
【０１０４】
一実施形態では、デバイス１０は、暗号情報（例えば、ＳＳＬまたはＴＬＳバージョン、あるいはクライアントの優先順位で、サポートされる暗号スイートなど）を列挙する第１のハローメッセージを送るように構成され得る。第１のハローメッセージへの応答として、デバイス２０は第２のハローメッセージを送信し得る。第２のハローメッセージは同様の詳細事項を含み得る。デバイス２０はまた、自身のデジタル証明書を第２のハローメッセージに含めて送信し得る。デバイス１０は証明書を検証し得る。第１および／または第２のハローメッセージは、公開鍵または公開鍵の指標を含み得る。第２のハローメッセージおよび／または後続するメッセージにおいて、１つまたは複数の送信鍵について合意がなされる。送信鍵は、デバイス１０とデバイス２０との間のその後の通信を暗号化または認証するために使用され得る。複数の送信鍵について合意がなされる場合、それらは単一の鍵に結合されてもよく、例えば、ハッシングによって結合されたり、ＸＯＲされたりしてもよい。
【０１０５】
図２ｃはハンドシェイクの例を概略的に示す。ハンドシェイクは既存のプロトコルと組み合わせて、または既存のプロトコル外で使用され得る。図２ｃはメッセージ１２〜１６を示しており、これらのメッセージの一部が組み合わせられてハンドシェイクにされてもよい。具体的には、メッセージ１３および１６の一方または両方が省かれてもよい。例えば、メッセージ１５が省かれてもよい。時間は図の下側に向かって進む。
【０１０６】
メッセージ１３は事前配布であり、事前配布中、デバイス２０は、秘密鍵復号デバイス１０に関連付けられた少なくとも１つの第１の公開鍵行列（ｂ）を取得する。その後、デバイス２０および／またはデバイス１０がハンドシェイクプロトコルを行うことを望むとき、デバイス２０は、デバイス１０から、秘密鍵復号デバイスの少なくとも２つの第１の公開鍵行列を指し示す少なくとも２つの識別子を受け取る。ここで、２つの第１の公開鍵行列は異なるサイズを有する。例えば、メッセージ１４はハローメッセージであってもよい。メッセージ１３とメッセージ１４との間の省略記号は、ハンドシェイクの開始前にメッセージ１３が送信されたことを示す。例えば、公開鍵行列はデバイス２０によって、ブラウザの一部として、公開鍵データベース等から取得され得る。
【０１０７】
デバイス２０は、公開鍵暗号化デバイスの鍵キャッシュが２つの第１の公開鍵行列のうちの大きい方を含むかを決定し、大きい方を含むのであれば、大きい方の第１の公開鍵行列を選択することによって、少なくとも２つの第１の公開鍵行列のうちの１つを選択する。例えば、デバイス２０は、以前に取得された複数の公開鍵行列が保存されている鍵キャッシュを含み得る。鍵キャッシュはブラウザの一部であってもよい。
【０１０８】
デバイス２０が公開鍵を選択するための様々なポリシーが存在し得る。第１の考慮事項はシステム次元のサイズであり得る。システム次元はセキュリティの考慮事項に基づいて選択され得る。次の考慮事項は、所望の送信鍵のサイズであり得る。さらなる考慮事項は、デバイス２０からデバイス１０に送信される最終的なメッセージ１２のサイズであり得る。例えば、一実施形態では、デバイス２０は、鍵キャッシュ内で入手可能な最大の鍵を選択するように構成され得る。
【０１０９】
所望の鍵が鍵キャッシュ内で入手可能でない場合、具体的には、デバイス１０の公開鍵のいずれも鍵キャッシュ内で入手可能でない場合、デバイス２０は、選択された第１の公開鍵行列を要求するリクエストメッセージ１５を送り得る。
【０１１０】
これに応答して、要求された公開鍵がメッセージ１６内でデバイス２０に送信され得る。なお、メッセージ１０３およびメッセージ１６は必ずしもデバイス１０から来る必要はなく、代わりに、例えば公開鍵データベースまたはソフトウェアデータベースなどから取得されてもよい。
【０１１１】
選択された公開鍵が利用可能になると、デバイス２０は、例えば送信鍵をカプセル化する等を行うことによって、本明細書で説明されるようにしてメッセージ１２に進み得る。デバイス２０は、選択された第１の公開鍵行列の指標を秘密鍵復号デバイスに送る。送信鍵（Ｋ）は選択された第１の公開鍵でカプセル化される。デバイス２０は、図２ｂに関連して説明したような実施形態を使用して、大きいまたは小さい送信鍵を選択的にカプセル化するために大きい公開鍵を使用してもよい。
【０１１２】
これに対応して、デバイス１０は、秘密鍵復号デバイスの少なくとも２つの第１の公開鍵行列の少なくとも２つの指標を含むメッセージ１４を送り（２つの第１の公開鍵行列は異なるサイズを有する）、公開鍵暗号化デバイスから、選択された第１の公開鍵行列の指標を含むメッセージ１２を受け取るように構成され得る。
【０１１３】
図２ｃに係る実施形態は、追加の帯域幅を必要としない場合（例えば、鍵が事前に配布される場合）、より大きな鍵を使用できるという利点を有する。大き鍵は、例えば、大きい送信鍵および小さい送信鍵の両方を暗号化するために使用されてもよい。鍵が事前に配布されない場合、システムは、帯域幅の消費を減らすために、小さい公開鍵を選択し得る。
【０１１４】
例えば、一実施形態では、大きい公開鍵は
【数６１】
2022500911.tif 000064
となるように選択される。ここで、Ｂは生の鍵行列の要素から取られるビットの数であり、例えばＢ＝１、２、４などである。Ｋｅｙｌｅｎｇｔｈは送信鍵のサイズであり、例えば２５６であってもよい。例えば、Ｂ＝４であり、鍵の長さが２５６の場合、
【数６２】
2022500911.tif 000065
と選択され得る。小さい公開鍵は
【数６３】
2022500911.tif 000066
となるように選択され得る。先の例と同じ値の場合、
【数６４】
2022500911.tif 000067
が使用され得る。この選択により、両公開鍵の間で必要な帯域幅のバランスを取ることができる。公開鍵暗号化デバイスがすでに大きい鍵へのアクセスを有する場合、帯域幅を最小化するために大きい鍵を使用してもよい。どちらの鍵へのアクセスも有さない場合、帯域幅のバランスを取るために小さい鍵をリクエストしてもよい。一実施形態では、例えば、大きい第１の公開鍵は、小さい第１の公開鍵の少なくとも２倍大きい、少なくとも４倍大きい、または少なくとも８倍大きくてもよい。
【０１１５】
例えば、公開鍵暗号化デバイスは、秘密鍵復号デバイスから、例えば、鍵識別子ｋｅｙｉｄ１０１および
【数６５】
2022500911.tif 000068
で第１の鍵を示し、鍵識別子ｋｅｙｉｄ１０２および
【数６６】
2022500911.tif 000069
で第２の鍵を示す｛（ｋｅｙｉｄ１０１，８），（ｋｅｙｉｄ１０２，６４）｝を含むハローメッセージを受信し得る。両方の鍵、またはＩＤがｋｅｙｉｄ１０２である鍵のみが公開鍵暗号化デバイスの鍵キャッシュ内で入手可能である場合、公開鍵暗号化デバイスは、例えば次元
【数６７】
2022500911.tif 000070
を使用して、この大きい方の鍵を使用することを選択し得る。入手可能な鍵がない場合、公開鍵暗号化デバイスは、例えば秘密鍵復号デバイスまたは他の場所からｋｅｙｉｄ１０１をリクエストし得る。その場合、暗号化は
【数６８】
2022500911.tif 000071
を使用し得る。どちらの場合も、送信鍵は同じ長さを有し得る。
【０１１６】
図３は公開鍵暗号化および秘密鍵復号の例を概略的に示す。図３では以下の表記法が使用されている。
−  ｐａｒｉｔｙ＿ｂｉｔｓはエラー訂正に使用される情報を指す。
−  ｏｂｔａｉｎ＿ｐａｒｉｔｙ＿ｂｉｔｓ（ｋ）は、ｋのいくつかのパリティビットが取得されることを意味する。例えば、パリティビットは誤り訂正符号に従って生成され得る。
−  ｅｒｒｏｒ＿ｃｏｒｒｅｃｔ（ｋ，ｐａｒｉｔｙ＿ｂｉｔｓ）は、ｐａｒｉｔｙ＿ｂｉｔｓを使用してｋまたはｐａｒｉｔｙ＿ｂｉｔｓにおける潜在的なエラーを訂正し、エラーが少ない可能性がより高いバージョンのｋを取得することを意味する。
【０１１７】
図３に係る実施形態は異なる種類のヘルパーデータを使用する。例えば、一実施形態によれば、デバイス２０は送信鍵のためのパリティビットを計算する。例えば、パリティビットは送信鍵とともに、誤り訂正符号（例えば、ＢＣＨ符号）に従うコードワードであり得る。コードワードは、例えば本明細書で説明されるように、生の鍵でカプセル化される。必要に応じて、カプセル化は調整データを含み得る。カプセル化解除のために、デバイス１０は最初に調整データを適用して、ニアコードワード、例えば、ビットエラーを包含する可能性があるコードワードを取得する。ニアコードワードは、誤り訂正符号に関連付けられた誤り訂正アルゴリズムを使用して訂正され得る。誤り訂正および調整データを使用することにより復号失敗の確率が改善されるため、パラメータを小さくすることができ、鍵サイズを小さくすることでパフォーマンスを向上させることができる。パリティビットと調整データとの組み合わせは、公開鍵行列のサイズを小さくすることを可能にする好ましい組み合わせである。
【０１１８】
このプロトコルのある実施形態では、第１の公開鍵は
【数６９】
2022500911.tif 000072
のベクトルを含む。暗号文は、第２の公開鍵ｕおよびカプセル化されたデータｃを含む。第２の公開鍵行列ｕは、Ｚ＿ｐ内の要素を有する次元がｄのベクトルであり得る。暗号文のサイズを最小化するために、
【数７０】
2022500911.tif 000073
が使用されてもよい。これは、生の鍵が
【数７１】
2022500911.tif 000074
以下の要素を有することを意味する。生の共有秘密のサイズを最適化するために、可能な限り多くの要素からＢビットを取る。よって、
【数７２】
2022500911.tif 000075
が使用される。カプセル化されたデータｃは、送信鍵を暗号化し、長さκ＝μＢの送信鍵をカプセル化することができるよう、
【数７３】
2022500911.tif 000076
の要素を有し得る。Ｂは各ベクトルエントリーから抽出されるビットの数である。
【０１１９】
一実施形態では、暗号文を最小化することが望まれる。公開鍵が長くなるという代償を払っても、暗号文のサイズをさらに最小化するための新しい洞察が得られる可能性があり、これは以下の通りである。
【０１２０】
第１の公開鍵行列は長さｄのベクトルを
【数７４】
2022500911.tif 000077
有する。これを用いて、
【数７５】
2022500911.tif 000078
をカプセル化することができる。ここで、κは送信鍵の長さであり、また、パリティビットとして機能するｐａｒｉｔｙ＿ｂｉｔｓ＿ｌｅｎｇｔｈ個のビットが存在する。
【０１２１】
追加のパリティビットを送信する必要があるため、ベクトルｃは
【数７６】
2022500911.tif 000079
だけ長くなる。しかし、これらのパリティビットがあるため、このスキームは復号エラーに対してより優れているので、より小さい値のｑおよびｐを選択することができる。ｐがより小さくなるため、同じセキュリティレベルを維持できることから、ｄも小さくすることができる。要約すると、このように誤り訂正符号を加えることにより、公開鍵が長くなったとしても、暗号文のサイズをさらに小さくすることができる。Ｂ＝１は効率的な選択肢であり、これを使用する場合は
【数７７】
2022500911.tif 000080
が必要となる。
【０１２２】
一実施形態では以下のパラメータが採用される。
【表２】
2022500911.tif 000081
１０３パリティビットにより、ビットエラーの訂正が可能になる。例えば、３ビットエラーの訂正を可能にする誤り訂正符号ＸＥｆが使用されてもよい。Ｘｅｆについては、Ｓａｕｖｉｋ  Ｂｈａｔｔａｃｈａｒｙａらによる“Ｒｏｕｎｄ５：  Ｃｏｍｐａｃｔ  ａｎｄ  Ｆａｓｔ  Ｐｏｓｔ−Ｑｕａｎｔｕｍ  Ｐｕｂｌｉｃ−Ｋｅｙ  Ｅｎｃｒｙｐｔｉｏｎ”に記載されている。ＸＥｆを使用する利点は、復号を一定時間で効率的に実行できるため、タイミング攻撃を回避できることである。
【０１２３】
この実施形態では、暗号文のサイズは１ＫＢより少し大きい。これは、そのような構造が、暗号文の断片化（ｆｒａｇｍｅｎｔａｔｉｏｎ）を必要としない非環構成を可能とし得ることを示唆する。暗号文のサイズを約１．５ｋｂ未満に減らすことが重要である。これにより、約２ｋｂのパケットが使用される、例えばインターネット上のパケットベースの通信における断片化が回避されるからである。
【０１２４】
なお、スケーリングによって導入されるノイズの量は比較的多いことに留意されたい。上記の例では、秘密行列要素の１６ビットが公開行列要素の８ビットに削減され、つまり、５０％の削減が行われる。前述したパリティビットのない例と比較すると、１４ビットが１２ビットに削減され、これは約１５％の削減である。同様に、秘密ビットと公開ビットとの間のビット長の差が２ビットから８ビットに増加した。ノイズが高いと、プロトコルの効率部分の効率が高くなるが、代わりに失敗率が高くなる。後者はパリティビットを使用して低減される。
【０１２５】
一実施形態では、
【数７８】
2022500911.tif 000082
および
【数７９】
2022500911.tif 000083
である。例えば、κ≧１２８である。例えば、パリティビットの数は、少なくとも３つのエラーを訂正できるように選択され得る。一実施形態では、
【数８０】
2022500911.tif 000084
、≦０．７２、≦０．７、≦０．６、または上記実施形態でのように０．５であってもよく、あるいはそれより小さくてもよい。なお、生の共有鍵内の全ての要素が使用されるため（例えば、
【数８１】
2022500911.tif 000085
）、いわゆる高信頼性ビットは利用されないことに留意されたい。このような高いノイズは低い
【数８２】
2022500911.tif 000086
と組み合わせられ、具体的には
【数８３】
2022500911.tif 000087
または
【数８４】
2022500911.tif 000088
等と組み合わせられ得る。
【０１２６】
図４は公開鍵暗号化および秘密鍵復号の例を概略的に示す。図４の実施形態は、安全ビット、調整データ、およびパリティビットの３つの異なる誤り訂正ソースを含む。
【０１２７】
図４において、
−  ｈは調整ビットを含むヘルパーデータを表す。
−  ｇｅｔ＿ｒｅｃｏｎｃｉｌｉａｔｉｏｎ（ｋ）は、ｒａｗ＿ｋｅｙ  ｋから調整ビットを返す関数である。
−  ｒｅｃｏｎｃｉｌｉａｔｅ（ｋ，ｈ）は、調整ビットｈに基づきｒａｗ＿ｋｅｙ  ｋを調整する関数である。
−  ｓａｆｅ＿ｂｉｔｓ（）は以下の２つの値を返す。（ｉ）実際の高信頼性値、および（ｉｉ）取得値が定量化境界から離れているため失敗の確率を低くすることができるキービットの位置。Ｓａｆｅ＿ｂｉｔｓ（）によって返される実際の値は、後にカプセル化などに使用される。位置は他方のパーティに交換され、それにより他方のパーティはどの位置が必要か知ることができる。
【０１２８】
興味深いことに、コードワード、およびコードワードからランダムに生成される鍵を交換する際の失敗の確率を下げるために３つの情報源が使用され得る。さらに、コードワードをランダムに生成できるため、アクティブなセキュリティが向上する。なお、アクティブなセキュリティをさらに向上させるために、第２の秘密鍵行列がコードワードから導出されてもよい。コードワードは送信鍵およびパリティビットを含み得る。前記情報源は、高信頼性ビットの使用、生の鍵の係数のために抽出される調整データ、およびコードワードの一部であるエラー訂正冗長情報（例えば、パリティビット）を含む。
【０１２９】
例えば、一実施形態では、デバイス１０および２０は生の鍵、例えば、Ｚ＿ｑ内のｎ個の係数を有する行列鍵ｋ＊について合意し得る。例えば、生の鍵行列のある要素は、送信鍵の一部に、例えば１つまたは複数のビットにマッピングされ得る。例えば、Ｚ＿ｑ内の値の半分が０にマッピングされ、半分が１にマッピングされてもよい（例えば、Ｂ＝１）。エラーの発生率を下げるための高信頼性ビットの選択は、例えば、デコード境界から最も遠いいくつかの（例えば、ｍｕ個の）係数を選択することによって行われ得る。
【０１３０】
鍵調整データは公開鍵暗号化デバイスによって抽出される情報であり、この情報は、例えば生の鍵（例えば、行列鍵）の選択された高信頼性係数（例えば、選択されたｍｕ個の係数）についての情報であり得る。調整情報は、生の鍵の特定の係数がコードワードのどの部分にマッピングされているかに関して、秘密鍵復号デバイスが同じ決定を下すのを補助する。なお、これは選択された高信頼性係数に対してのみ実行すればよく、よって必要な作業は少なくて済む。
【０１３１】
エラー訂正情報はパリティビットであり得る。第２のデバイスがカプセル化する情報にいくらかの冗長性を与えるよう、パリティビットは、ランダムに生成されたバイナリキーＫ、メッセージｍ、またはプレキーから抽出され得る。このようにすることで、先にエラーが発生した場合でも、デバイス１０がエラーを訂正することができる。したがって、ｋａｐｐａビット長の鍵Ｋを送信しようとしており、（ｍｕ−ｋａｐｐａ）個のパリティビットが存在する場合、これらのパリティビットは、デバイス１０が鍵Ｋのｋａｐｐａ個のビットが正しいことを確認するのに役立つ。
【０１３２】
多くの耐量子公開鍵暗号化の問題は、いくらかの失敗の可能性があることである。例えば、秘密鍵復号デバイスと公開鍵暗号化デバイスはノイジーな生の鍵をまず共有し、その後、例えば調整データを介して鍵が調整される。高信頼性ビット関数は、公開鍵暗号化デバイス（例えば、生の鍵を最初に導出するパーティ）が、生の鍵のうち秘密鍵復号デバイスによって同じように導出される可能性が高いビット、および生の鍵のうち同じになる可能性が低いビットを識別することを可能にする。
【０１３３】
高信頼性ビット関数の単純な実装形態では、キービットを取得するためにサンプリングされる係数の２つ以上の中心点が定められる。（例えば閾値に基づき）中心点から離れすぎている係数は破棄され、それ以外の係数は中心点に関連付けられた値にサンプリングされ得る。例えば、中心点の数は２の累乗であり得る。例えば、行列要素は様々な異なる環などから取得され得る。
【０１３４】
高信頼性ビットサンプリングでは、環の次元によって与えられる全てのビットが鍵のために必要なわけではないという仮定を利用する。通常、基礎の行列ｙのサイズは必要な鍵の長さよりもはるかに大きい。例えば、公開鍵暗号化デバイスは、ｙのうち合致する可能性が最も高いｍ個のインデックスを選択し得る。これらの安全な係数は、０ビットまたは１ビットにマップされる（ｋ＝０およびｋ＝１）係数範囲の中心点に最も近いものであり得る。例えば、ｑを法とする環では、係数が範囲
【数８５】
2022500911.tif 000089
に含まれる場合、当該係数は０にマップされ、係数が範囲
【数８６】
2022500911.tif 000090
に含まれる場合、当該係数は１にマップされ得る（またはその逆）。係数がどちらの範囲にも含まれない場合、係数は信頼できるビットではない。値ｂは部分的にビットの信頼性を決定する。例えば、この場合はｑ／８と選択され得る。ｂの値が小さいほど信頼性は高くなるが、キービットは少なくなる。この場合、中心点はｑ／４および３ｑ／４、またはこれらを丸めたものであり得る。
【０１３５】
上記の手順を適用する公開鍵暗号化デバイスは、信頼できるビットのインデックスとそれらに対応するキービットを取得する。信頼できるインデックスは秘密鍵復号デバイスに伝達され得るが、信頼できるキービットは伝達されない。秘密鍵復号デバイスは公開鍵暗号化デバイスによって示されたインデックスにおけるビットからキービットを取得することができる。これらのビットは信頼性が高いのでエラー率は低くなる。
【０１３６】
参照により本明細書に援用される論文Ｈｉｌａ５には高信頼性ビット関数のさらなる実装形態が示されている。例えば、セクション３のアルゴリズムが適用されてもよい。発明者らは、高信頼性ビット関数を多様な状況、例えば異なる基礎となる環またはオブジェクト、例えば具体的には行列について適用できることを見出した。
【０１３７】
実施形態では、両パーティは２つの生の鍵、例えばほぼ等しいが全く同一ではない行列を生成する。正確な合意に達するために、いくらかの調整データが送られる。そのためのスキームは、２０１６年１１月４日にＥＰＯに出願された同出願人による出願番号１６１９７２７７．３の特許出願、“ＲＥＡＣＨＩＮＧ  ＡＧＲＥＥＭＥＮＴ  ＯＮ  Ａ  ＳＥＣＲＥＴ  ＶＡＬＵＥ”で説明されている。例えば、頁７〜１０の方法が実施形態において調整のために使用され得る。この引用特許出願の他の箇所に開示されているバリエーションも採用可能である。
【０１３８】
本願では以下の３つの関数に次の表記法を使用する。
１．丸め関数
【数８７】
2022500911.tif 000091
：
【数８８】
2022500911.tif 000092
に対して、
【数８９】
2022500911.tif 000093
とする。すると、
【数９０】
2022500911.tif 000094
直感的には、
【数９１】
2022500911.tif 000095
は、
【数９２】
2022500911.tif 000096
のＢ個の最上位ビットを抽出する。ここで、２番目のコンポーネントは、バイアスのない丸め誤差を保証するための丸め係数である。Ｂは記号ｖから抽出されるビットの数を示し、ｂｈはヘルパーデータビットの数を示す。一実施形態ではｑは２の累乗であり得る。
２．クロス丸め（ｃｒｏｓｓ−ｒｏｕｎｄｉｎｇ）関数
【数９３】
2022500911.tif 000097
：
【数９４】
2022500911.tif 000098
に対して、
【数９５】
2022500911.tif 000099
とする。すると、
【数９６】
2022500911.tif 000100
直感的には、
【数９７】
2022500911.tif 000101
は、ｖの（Ｂ＋ｂｈ）個の最上位ビットのｂｈ個の最下位ビットを抽出する。
３．調整関数ｒｅｃ（ｗ，ｂ）：
【数９８】
2022500911.tif 000102
に対して、
【数９９】
2022500911.tif 000103
ここで、ｖは
【数１００】
2022500911.tif 000104
であるようなｗに最も近い要素である。最も近い要素ｗはリー距離に応じて取得され、例えばｍｉｎ（｜ｖ−ｗ｜，ｑ−｜ｖ−ｗ｜）である。
【０１３９】
これらの３つの関数は、行列に対して要素ごとに適用され得る。上記の調整関数は本明細書での例として使用されている。前述したように、上記の引用出願内の調整方法を使用することも可能である。クロス丸め関数は調整データを取得するために適用され、丸め関数は、調整されるデータ（例えば、高信頼性ビット）を取得するために適用され得る。調整データを後に調整関数において使用することで調整されたデータを復元することができる。言い換えれば、
【数１０１】
2022500911.tif 000105
であり、ここで、ｖおよびｗは互いの閾値距離内にあるものと仮定される。
【０１４０】
図５は、一実施形態に係る暗号システム３０１の例を概略的に示す。システム３０１は、秘密鍵復号デバイス３００および公開鍵暗号化デバイス３５０を備え、さらに任意選択的に公開鍵デポジトリ３０２を備える。例えば、第１のデバイス３００および第２のデバイス３５０は、第１のデバイス１０、１００および／または第２のデバイス２０、２００等のデバイス上に実装されてもよい。暗号システム３０１は、図４に示すように公開鍵暗号化システムを実装し得る。暗号システム３０１は、例えば上記実施形態で使用されていない要素を省くことによって、必要に応じて他の実施形態に適合させることができる。
【０１４１】
第１および第２のデバイス３００および３５０は暗号プロトコルを実行するように構成される。両デバイスは、一方のデバイスから他方のデバイスにデータを安全に渡す機能を備える。様々な暗号プロトコルがこの同一の機能を使用し得る。例として、この機能を使用する２つのプロトコルについて説明する。
【０１４２】
例えば、第１および第２のデバイスは、例えば、特定のデバイス（例えば、第１のデバイス３００）が復号できるように他のデバイス（例えば、第２のデバイス３５０）がメッセージ（ｍ）を暗号化できるように設計された公開鍵暗号化のために構成され得る。しかし、公開鍵で暗号化されたメッセージの内容は、暗号化デバイスおよび復号デバイス（例えば、第２のデバイス３５０および第１のデバイス３００）以外のデバイスが取得することはできない。公開鍵暗号化の場合、暗号化されたメッセージを第１の公開デバイスに送るために、複数の第２のデバイスが第１のデバイスの同一の公開鍵（例えば、同一の第１の公開鍵および公開オブジェクト）を使用することができる。２つの第２のデバイスが同じ公開鍵を使用してメッセージを暗号化したとしても互いの通信を復号することはできない。
【０１４３】
第１のデバイス３００および第２のデバイス３５０はそれぞれ通信インターフェース３０５および３５５を含む。両通信インターフェースは相互に通信するように構成される。（例えば有線または無線ネットワークを介する）通信インターフェースの例が本明細書に記載されている。
【０１４４】
第１のデバイス３００は、第１の秘密鍵（ｒ）および第１の秘密鍵から導出される第１の公開鍵（ｂ）を生成するように構成された公開／秘密鍵生成器３１５を備える。秘密鍵から公開鍵を導出するために公開オブジェクト（ａ）（例えば、公開行列）が使用され得る。例えば、公開鍵を生成することは、公開オブジェクトと乗算すること、および／または何らかのノイズを導入すること（例えば、乗算結果のスケールダウン、ノイズ項の追加など）を含み得る。秘密鍵および公開オブジェクトは（例えば、有限体または環上の）行列であり得る。
【０１４５】
第１の秘密鍵および公開鍵は一時的に生成されてもよい。例えば、後者は、特に第１および第２のデバイスが何らかの他の認証メカニズム（例えば帯域外メカニズム、例えば証明書ベースの認証など）を使用して互いを認証する場合、鍵共有プロトコルのために行われ得る。また、第１の秘密鍵および公開鍵は長期間使用するために生成されてもよい。例えば、第１の公開鍵は、外部の公開鍵デポジトリ３０２に格納され得る。公開鍵デポジトリ３０２はまた、公開オブジェクト（ａ）またはそのためのシードを格納してもよい。
【０１４６】
第１の公開鍵は、例えば通信インターフェース３０５および３５５を介して、第１のデバイス３００から第２のデバイス３５０に伝送される。これは直接通信によって行われもよいし、または間接的に（例えば、公開鍵デポジトリ３０２を介して）行われてもよい。必要に応じて、第１の公開鍵とともに公開オブジェクト（ａ）が伝送されてもよい。例えば、公開オブジェクトは、公開オブジェクト（ａ）を生成するための元となるシードを送ることによって伝送され得る。
【０１４７】
第２のデバイス３５０は、例えば公開鍵デポジトリ３０２から第１の公開鍵を取り出すように構成された公開鍵取得器３６０を備えることができる。例えば、このタイプの取得は公開鍵暗号化に適している。しかし、公開鍵は第１のデバイスから直接取得されてもよい（場合によっては帯域外で、例えば電子メールで）。公開鍵は、公開鍵暗号化交換に必要になるまで保存されてもよい。しかし、第１の公開鍵はまた、即時使用のために、例えば鍵共有動作のために受け取られてもよく、例えば、この場合は第１の公開鍵および／または公開オブジェクトが一時的に生成されてもよい。
【０１４８】
第２のデバイス３５０は、第２の秘密鍵（ｓ）を生成するように、かつ第２の秘密鍵（ｓ）から第２の公開鍵（ｕ）を生成するように構成された公開／秘密鍵生成器３６５を備え得る。第２の秘密鍵（ｓ）および第２の公開鍵（ｕ）は、第１の秘密鍵（ｒ）および第１の公開鍵（ｂ）よりも小さくてもよく、例えば、エントリーがより少なくてもよい。
【０１４９】
第２の公開鍵は、第１の公開鍵の生成と同じ公開オブジェクトを使用する。第１および第２の秘密鍵は、それぞれのデバイスのみが知る秘密である。必要に応じて、例えばバックアップやキーエスクローなどのために、これらが信頼できるパーティ間で共有されてもよい。公開鍵および公開オブジェクトはセキュリティのために秘密でなければならないとは限らない。しかし、必要に応じて、１つ以上が第１および第２のデバイスのみが知る秘密であってもよい。例えば、第１の公開鍵は第２のデバイスとしか共有されなくてもよく、その逆も可能である。
【０１５０】
第２のデバイス３５０はコードワード生成器３７０を備え得る。コードワード生成器３７０は、誤り訂正符号に従ってコードワードを生成するように構成される。誤り訂正符号は線形コードまたは非線形コードであり得る。例えば、誤り訂正符号はＢＣＨコード、リードソロモンコード、アダマールコードなどであり得る。複数のコードが連結されてもよい。連結コードは、妥当な複雑さで優れたパフォーマンスを実現するために２つ以上のより単純なコードから構築された誤り訂正符号である。例えば、アダマールコードがＢＣＨコードと連結されてもよい。
【０１５１】
コードワード内にはカプセル化のためのデータがエンコードされる。例えば、コードワードはデータ部分（例えば、データビット）とパリティ部分（例えば、パリティビット）とに分割され得る。例えば、カプセル化のためのデータはデータビットに含まれ得る。コードワードを生成する１つの方法は、データ部分を生成し、データ部分からパリティビットを計算することである。例えば、データビットを有するデータベクトルをパリティ行列と行列乗算することでパリティビッドが、または場合によっては完全なコードワードが取得され得る。コードワードは、カプセル化のためのデータとパリティビットを組み合わせることによって取得され得る。例えば、データ部分とパリティ部分が連結されてもよい。ただし、対応する誤り訂正符号に従って有効なコードワードを生成するために、データビットとパリティビットの任意の並べ替えが使用され得る。例えば、データビットとパリティビットが交互にされてもよい。なお、調整データは典型的には単一のｑ−ａｒｙ（ｑ元）シンボル上で計算されるが、パリティデータは典型的には複数のビットから計算される（なお、ｑは２よりはるかに大きい）。
【０１５２】
コードワードは様々な方法で使用され得る。公開鍵暗号化はまた、例えばそのためにランダムに生成された対称鍵によって、第２のデバイス３５０にてメッセージ（ｍ）を暗号化し、暗号化対称鍵をコードワード内に符号化することによって得られ得る。追加の鍵導出ステップが使用されてもよい。例えば、ランダムなプレキー（ｐｒｅ−ｋｅｙ）がコードワード内にエンコードされ、プレキーから暗号化鍵が導出されてもよい。例えば、導出は鍵導出関数（ＫＤＦ）、例えばハッシュ関数を使用することができる。例えば、後者の場合、暗号化されたメッセージは、データを復号するために必要なデータ（例えば、第２の公開鍵）および後述するような他のデータと共に、第２のデバイスから第１のデバイスに送信され得る。送信鍵はコードワード内に直接的に符号化されてもよいし、コードワードから導出されてもよい。
【０１５３】
興味深いことに、コードワードは第１の秘密鍵、第１の公開鍵、第２の秘密鍵、および第２の公開鍵から独立して生成される。このため、プロトコルはアクティブな攻撃に対して優れた耐性を有する。攻撃者は、第１の秘密鍵と第２の秘密鍵の選択を通じて鍵に影響を与えることができないため、共有鍵に影響を与えられる可能性が少なくなる。一実施形態では、第２の秘密鍵行列はコードワードから、または送信鍵から導出される。
【０１５４】
独立した生成は、（例えばメッセージの場合には）メッセージが、公開鍵暗号化から独立したアプリケーション（例えば、金融または通信アプリケーションなど）から生成される場合に得られ得る。独立した生成は、例えばランダム生成によって得られ得る。例えば、コードワード内の鍵またはプレキーは、例えば、真の乱数生成器を使用して、または第１および第２の秘密鍵から独立したシードを使用する疑似乱数生成器を使用することで独立して生成され得る。ここで、シードは例えばそれ自体がランダムに生成されるか、または事前に決定される等して得られる。例えば、コードワードは、第１の公開鍵が受け取られる前、および／または第２の秘密鍵が生成される前に、第２のデバイスにおいて生成されてもよい。これも独立性を保証する。
【０１５５】
第２のデバイス３５０はＤｉｆｆｉｅ−Ｈｅｌｌｍａｎユニット３７５を備える。Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎユニット３７５は、第１の公開鍵（ｂ）および第２の秘密鍵（ｓ）から第２の生の共有鍵（ｋ＊）を生成するように構成される。例えば、Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎユニット３７５は、第１の公開鍵および第２の秘密鍵にＤｉｆｆｉｅ−Ｈｅｌｌｍａｎ関数を適用するように構成され得る。例えば、Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ関数は乗算であってもよい。第２のデバイス３５０は自身の第２の公開鍵を第１のデバイス３００に伝送するように構成される。第１のデバイス３００はＤｉｆｆｉｅ−Ｈｅｌｌｍａｎユニット３２５を備える。Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎユニット３２５は、例えば同じＤｉｆｆｉｅ−Ｈｅｌｌｍａｎ関数を適用することによって、第２の公開鍵（ｕ）および第１の秘密鍵（ｒ）から第１の生の共有鍵（ｋ’）を生成するように構成される。残念ながら、一部のタイプのＤｉｆｆｉｅ−Ｈｅｌｌｍａｎ関数では、必ずしも同一ではないが、第１および第２の生の鍵が互いに近い可能性がある。これが生じる可能性は基礎となるＤｉｆｆｉｅ−Ｈｅｌｌｍａｎ関数によって異なる。ほとんどの用途では生の鍵が互いに異なる可能性がある程度受け入れられる可能性があるが、許容される可能性の高さは用途に依存する。ただし、通常はこの可能性が低いことが好ましい。生の鍵は、秘密鍵および公開鍵と同じ数学的タイプのもの、例えば行列であってもよい。
【０１５６】
第２のデバイス３５０は高信頼性ビット生成器３８０および調整データ生成器３８５を備える。高信頼性ビット生成器３８０は、高信頼性ビット関数を第２の生の共有鍵（ｋ＊）に適用することで、高信頼性インデックスを取得するように、および指し示された係数から導出される高信頼性ビットを取得するように構成される。高信頼性インデックスは生の共有鍵の係数を指し示す。例えば、高信頼性ビット生成器３８０は、生の鍵のどの係数がサンプリング境界に近く、どの係数が近くないかを決定し得る。例えば、サンプリング境界から閾値内にある生の鍵の係数は信頼できないものとして破棄され得る。残りの信頼できる係数は高信頼性インデックスによって指し示され得る。高信頼性ビットは高信頼性係数をサンプリングすることによって取得され得る。
【０１５７】
十分な数の係数が残っていない場合、いくつかの選択肢が考えられる。例えば、プロトコルを終了する、新しい第１および／または第２の秘密鍵、および／または新しい公開オブジェクトを用いてプロトコルをやり直す、より短い鍵を導出する、または破棄する係数を少なくする等の選択肢が考えられる。閾値内のすべての係数を選択する代わりに、所定の数の係数、例えばｍｕ個の係数が選択されてもよく、また、最も信頼性が高い係数、例えば最初のｍｕ個の最も信頼性が高い係数が選択されてもよい。
【０１５８】
高信頼性ビットを実装する１つの方法は、１つ以上の、例えばＢ個の係数の最上位ビットを取得することである。例えば、選択された係数ごとの高信頼性ビットの数は、例えば１または２であり得る。一部の実施形態では、例えば、大きな行列が使用される場合、係数の数が多い。これにより、高い信頼性、例えば低い値のＢが実現可能になる。他の実施形態の場合、例えばＩｏＴデバイスの場合、より高い値のＢが使用され得る。有限環での計算は、２の累乗を法とする整数の有限環で行われてもよい。後者が選択される場合、高信頼性ビットがより均一に分布されるという利点がある。
【０１５９】
調整データ生成器３８５は、生の共有鍵の指し示された係数のための調整データ（ｈ）を生成するように構成される。調整データは、第１および第２のデバイスにおいて導出された第１および第２の生の鍵の間の差異を低減することを可能にする情報を含む。例えば、調整データを適用すると、第１のデバイスと第２のデバイスの生の鍵の係数間の差（例えば、リー距離）が低減し、結果として、両鍵が同じ高信頼性ビットを生成する可能性が高くなる。コードワード内のパリティビット、および調整データは共にノイズを低減する役割を果たすが、パリティビットは複数のデータビット上で計算される一方、調整データは生の共有鍵内の係数上で計算される。調整データは高信頼性ビットの信頼性を一層高める。
【０１６０】
調整データを実装する１つの方法は、高信頼性ビットとして選択されたビットに続く１つ以上の、例えばｂｈ個の係数のビットを取得することである。例えば、これらは重要性においてＢ個のビットに続くｂｈ個のビットであり得る。例えば、選択された係数ごとの調整ビットの数は、例えば１または２であり得る。調整ビットの数が少ないと、通信のオーバーヘッドが削減されるという利点がある。ただし、大きな量の調整ビットも可能である。
【０１６１】
第２のデバイス３５０はカプセル化ユニット３９０を含み得る。カプセル化ユニット３９０はカプセル化関数、例えばＸＯＲを適用することによって、高信頼性ビットを用いてコードワードをカプセル化するように構成される。カプセル化はワンタイム・パッド・カプセル化であり得る。一実施形態では、高信頼性ビットを知らずにカプセル化されたコードワードから取得できるコードワードに関する情報はゼロであるという点で、カプセル化関数は完全なセキュリティを得る。例えば、ＸＯＲ関数は、本明細書に記載の他のカプセル化関数のうちの１つに対して使用され得る。
【０１６２】
なお、カプセル化は、パリティビットだけでなく、データビットおよびパリティビットを含むコードワード全体に適用されることに留意されたい。さらに、カプセル化は生成されたデータ、例えばメッセージ、鍵、プリキーなどに適用され、第１または第２の公開鍵または秘密鍵のうちの１つまたは複数から導出されたデータには適用されない。
【０１６３】
第２のデバイスは、第２の公開鍵（ｕ）、調整データ（ｈ）、カプセル化されたデータ（ｃ）、および高信頼性インデックスを第１のデバイスに伝送するように構成される。伝送は第１の公開鍵の受け取りに応答して行われてもよいし（例えば、鍵共有の場合）、そうでなくてもよい（例えば、公開鍵暗号化の場合）。
【０１６４】
第１のデバイス３００は、第２のデバイスから第２の公開鍵（ｕ）、調整データ（ｈ）、およびカプセル化されたデータ（ｃ）、ならびに高信頼性インデックスを受け取るように構成される。第１のデバイス３００は、高信頼性インデックス（ｓａｆｅ＿ｂｉｔｓ）によって指し示される第１の生の共有鍵（ｋ’）の係数に調整関数内の調整データ（ｈ）を適用することで高信頼性ビット（ｋ）を取得するように構成された調整ユニット３３５を備える。例えば、信頼できると指し示された係数は調整ビットを使用して調整され、その後、高信頼性ビットを得るためにサンプリングされ得る。
【０１６５】
第１のデバイス３００は、カプセル化されたデータ（ｃ）をカプセル化解除するように構成されたカプセル化解除ユニット３４０を備え、高信頼性ビットを使用することでニアコードワードを取得する。第２のデバイスのコードワードが直接取得されない理由は、高信頼性ビットおよび調整が利用されても、依然として解消されていない生の鍵間の差が存在する可能性があるからである。第１のデバイス３００は、ニアコードワードにエラー訂正関数を適用することでコードワードを取得するように構成されたエラー訂正器３２０を備える。
【０１６６】
最後に、コードワードがデコードされることで、例えばデータ部分が取得され、よってメッセージ（ｍ）、鍵（Ｋ）、またはプレキーが取得され得る。第１のケースでは、メッセージに基づいて何らかのアクションが取られ、例えばメッセージがコミュニケーションアプリ内で表示されてもよい。第２のケースでは、例えば、鍵はさらに保護された通信に使用され得る。第３のケースでは、プレキーに鍵導出関数を適用することで共有鍵が取得され得る。
【０１６７】
以下、信頼性および調整に関して、小規模ながら説明のための例を示す。＝２５＝３２、Ｂ＝ｂｈ＝１とする。係数を５ビットシーケンスとし、最上位ビットは左端である。例えば、一実施形態では、第２のデバイスは係数０００００、００００１、０１１１０、０１１１１、１００００、１０００１、１１１１０、および１１１１１を破棄し得る。なぜならそのような係数は、係数にわずかな加算または減算をするだけで最上位ビットが反転するからである。
【０１６８】
破棄されない係数は０００１０、０００１１、・・・、０１１０１、および１００１０、１００１１、・・・、１１１０１である。最初のリスト内の係数は０の高信頼性ビットを与え、最後のリスト内の係数は１の高信頼性ビットを与える。これらのシーケンスの２番目のビットが調整データとされてもよい。選択された係数の調整データは他のデバイスに伝送されるが、高信頼性ビットは伝送されない。
【０１６９】
自身の生の鍵を計算した後、第１のデバイスは、第１のデバイスによって指し示された係数に従って係数を選択する。例えば、第１のデバイスの生の鍵内の係数が０１１０１であり、その係数の調整データが０であるとする。第１のデバイスにおける当該係数の２番目のビットは０ではないので、これはエラーが発生したことを第１のデバイスに示す。２番目のビットが０で、かつ破棄されなかった、選択された係数０１１０１に最も近い値は１００１０である。なお、００１１１の２番目のビットも０であるが、選択された係数０１１０１からより離れている。したがって、第１のデバイスは、この選択された係数のための高信頼性ビットとして１を選択する。
【０１７０】
なお、ノイズが大きかった場合、この訂正は誤っている可能性があり、第２のデバイスは係数００１１１を有していたと考えられる。このような場合は誤った高信頼性ビットが選択される。興味深いことに、並程度の量の調整データであっても、これらの類のエラーはまれである。これは、調整データの量を増やすよりも、誤り訂正符号に依拠して残りのエラー数を訂正する方が効率的であることを意味する。リー距離の最小化は、マッチが見つかるまでリー距離を増やしつつ候補となる修正された係数（ｃａｎｄｉｄａｔｅ  ｍｏｄｉｆｉｅｄ  ｃｏｅｆｆｉｃｉｅｎｔｓ）を試すことで単純に実行され得る。より高度なアルゴリズム（例えば、当該技術分野で記載されているアルゴリズム）も可能である。
【０１７１】
信頼性と調整の間には興味深い相乗効果がある。正しい調整データを備えた最も近い修正された係数が公開鍵暗号化デバイスによって破棄される可能性がある。正しい調整データを備えた最も近い修正された係数と、公開鍵暗号化デバイスによって破棄されていないという追加の制約は異なる高信頼性ビットを有し得る。これを考慮に入れると、調整ビットの効率がさらに向上する。例えば、上記の例を続けて使用し、第２のデバイスが調整データ０で係数０１１００を取得するとする。最も近い修正された係数は１００００であるが、破棄されなかったであろう最も近い係数は００１１１である。したがって、第１のデバイスは、高信頼性ビットとして１ではなく０を取得する。
【０１７２】
一部の実施形態では、公開鍵暗号化デバイスのプロセッサは、少なくとも送信鍵に基づいて最終鍵を導出し、最終鍵でメッセージを暗号化し、暗号化されたメッセージを秘密鍵復号デバイスに送るように構成される。一部の実施形態では、秘密鍵復号デバイスのプロセッサは、秘密鍵復号デバイスから暗号化されたメッセージを受け取り、少なくとも送信鍵に基づいて最終鍵を導出し、最終鍵を用いて暗号化されたメッセージを復号するように構成される。
【０１７３】
例えば、一実施形態では、公開鍵暗号化デバイスおよび／または秘密鍵復号デバイスは、暗号ハッシュ関数を送信鍵に適用することに少なくとも部分的に基づいて、最終鍵を導出し得る。説明のための例として、最終鍵は、暗号ハッシュ関数を送信鍵に、および任意選択的に、公開鍵の一部または全体に適用することによって、送信鍵Ｋから導出され得る（例えば、
【数１０２】
2022500911.tif 000106
）。そのような暗号ハッシュＧが最終鍵として直接使用されてもよいし、あるいは任意選択的に、そのような暗号ハッシュの少なくとも一部（例えば、
【数１０３】
2022500911.tif 000107
）を、例えばマスクされた送信鍵ｃを用いてさらにハッシングすることで最終鍵（例えば、
【数１０４】
2022500911.tif 000108
）が取得されてもよい。
【０１７４】
以下の番号が付された実施形態がさらに考えられる。
【０１７５】
１．
−  秘密鍵復号デバイス（１０）と通信するように構成された通信インターフェースと、
−  プロセッサとを備える公開鍵暗号化デバイス（２０）であって、前記プロセッサは、
−  秘密鍵復号デバイスに関連付けられた第１の公開鍵行列（ｂ）を取得し、
−  送信鍵（Ｋ）を生成し、
−  第２の秘密鍵行列（ｓ）を生成し、第２の秘密鍵行列（ｓ）から第２の公開鍵行列（ｕ）を計算し、ここで、第２の公開鍵行列（ｕ）は第１の公開鍵行列（ｂ）よりも少ない行列要素を有し、
−  第２の秘密鍵行列（ｓ）および第１の公開鍵行列（ｂ）から第２の生の共有鍵（ｋ＊）を計算し、ここで、第２の生の共有鍵を計算することは、第２の秘密鍵行列（ｓ）と第１の公開鍵行列（ｂ）との間の行列乗算を含み、
−  カプセル化関数を適用することによって、第２の生の共有鍵の少なくとも一部を用いて送信鍵（Ｋ）をカプセル化してカプセル化されたデータ（ｃ）を取得し、
−  第２の公開鍵行列（ｕ）およびカプセル化されたデータ（ｃ）を秘密鍵復号デバイスに送るように構成される、公開鍵暗号化デバイス。
【０１７６】
２．
−  公開鍵暗号化デバイス（２０）と通信するように構成された通信インターフェースと、
−  プロセッサとを備える秘密鍵復号デバイス（１０）であって、前記プロセッサは、
−  第１の秘密鍵行列（ｒ）を生成して、第１の秘密鍵行列（ｒ）から第１の公開鍵行列（ｂ）を計算し、公開鍵暗号化デバイスに第１の公開鍵行列（ｂ）を送ることを許容し、
−  公開鍵暗号化デバイスから第２の公開鍵行列（ｕ）およびカプセル化されたデータ（ｃ）を受け取り、ここで、第２の公開鍵行列（ｕ）は第１の公開鍵行列（ｂ）よりも少ない行列要素を有し、
−  第２の公開鍵行列（ｕ）および第１の秘密鍵行列（ｒ）から第１の生の共有鍵（ｋ’）を計算し、ここで、第１の生の共有鍵を計算することは、第２の公開鍵行列（ｕ）と第１の秘密鍵行列（ｒ）との間の行列乗算を含み、
−  第１の生の共有鍵（ｋ’）の少なくとも一部を使用して、カプセル化されたデータ（ｃ）のカプセル化を解除することで送信鍵を取得するように構成される、秘密鍵復号デバイス。
【０１７７】
３．上記番号が付された実施形態のうちのいずれかの公開鍵暗号化デバイスまたは秘密鍵復号デバイスであって、
−  公開鍵暗号化デバイスのプロセッサは、
−  送信鍵（Ｋ）の鍵サイズを取得し、前記鍵サイズに従って送信鍵（Ｋ）を生成し、
−  前記鍵サイズの送信鍵のカプセル化に対応するよう、第２の秘密鍵行列（ｓ）の行列サイズを決定し、行列サイズに従って第２の秘密鍵行列（ｓ）を生成し、
−  鍵サイズおよび／または行列サイズの指標を秘密鍵復号デバイスに送るように構成され、および／または
−  秘密鍵復号デバイスのプロセッサは、
−  公開鍵暗号化デバイスから鍵サイズおよび／または行列サイズの指標を受け取り、
−  受け取られたサイズに応じて、カプセル化されたデータ（ｃ）のカプセル化を解除して送信鍵を取得するように構成される、上記番号が付された実施形態のうちのいずれかの公開鍵暗号化デバイスまたは秘密鍵復号デバイス。
【０１７８】
４．上記番号が付された実施形態のうちのいずれかの公開鍵暗号化デバイスまたは秘密鍵復号デバイスであって、
−  公開鍵暗号化デバイスのプロセッサは、送信鍵を用いてメッセージ（ｍ）を暗号化し、暗号化されたメッセージを秘密鍵復号デバイスに送るよう構成され、および／または
−  秘密鍵復号デバイスのプロセッサは、秘密鍵復号デバイスから暗号化されたメッセージを受け取り、送信鍵を用いて暗号化されたメッセージを復号するように構成される、上記番号が付された実施形態のうちのいずれかの公開鍵暗号化デバイスまたは秘密鍵復号デバイス。
【０１７９】
５．上記番号が付された実施形態のうちのいずれかの公開鍵暗号化デバイスまたは秘密鍵復号デバイスであって、
−  第２の生の鍵は行列であり、送信鍵（Ｋ）をカプセル化することは、送信鍵のビットを、第２の生の鍵行列の少なくとも一部の要素の最上位部分に加えること、および第２の生の鍵行列の前記少なくとも一部の要素のゼロ個以上の最下位ビットを破棄することを含み、
−  第１の生の鍵は行列であり、カプセル化されたデータのカプセル化を解除することは、第１の生の鍵行列の少なくとも一部の要素のゼロ個以上の最下位ビットを破棄すること、カプセル化されたデータから第１の生の鍵行列の前記少なくとも一部の要素を差し引くこと、および差し引かれた結果を丸めることを含む、上記番号が付された実施形態のうちのいずれかの公開鍵暗号化デバイスまたは秘密鍵復号デバイス。
【０１８０】
図６ａは、一実施形態に係る公開鍵暗号化方法（４００）の例を概略的に示す。方法４００は、
−  秘密鍵復号デバイスとの通信を確立するステップと（４１０）、
−  秘密鍵復号デバイスに関連付けられた第１の公開鍵行列（ｂ）を取得するステップと（４２０）、
−  送信鍵（Ｋ）を生成するステップと（４３０）、
−  第２の秘密鍵行列（ｓ）を生成し、第２の秘密鍵行列（ｓ）から第２の公開鍵行列（ｕ）を計算するステップであって、第２の公開鍵行列（ｕ）は第１の公開鍵行列（ｂ）よりも少ない行列要素を有する、ステップと（４４０）、
−  第２の秘密鍵行列（ｓ）および第１の公開鍵行列（ｂ）から第２の生の共有鍵（ｋ＊）を計算するステップであって、第２の生の共有鍵の計算は、第２の秘密鍵行列（ｓ）と第１の公開鍵行列（ｂ）との間の行列乗算を含む、ステップと（４５０）、
−  カプセル化関数を適用することによって、第２の生の共有鍵の少なくとも一部を用いて送信鍵（Ｋ）をカプセル化して、カプセル化されたデータ（ｃ）を取得するステップと（４６０）、
−  第２の公開鍵（ｕ）およびカプセル化されたデータ（ｃ）を秘密鍵復号デバイスに送るステップと（４７０）を含む。
【０１８１】
図６ｂは、一実施形態に係る秘密鍵復号方法５００の例を概略的に示す。方法５００は、
−  公開鍵暗号化デバイスとの通信を確立するステップと（５１０）、
−  第１の秘密鍵行列（ｒ）を生成し、第１の秘密鍵行列（ｒ）から第１の公開鍵行列（ｂ）を計算し、第１の公開鍵行列（ｂ）を公開鍵暗号化デバイスに送ることを許容するステップと（５２０）、
−  公開鍵暗号化デバイスから第２の公開鍵行列（ｕ）およびカプセル化されたデータ（ｃ）を受け取るステップであって、第２の公開鍵行列（ｕ）は第１の公開鍵行列（ｂ）よりも少ない行列要素を有する、ステップと（５３０）、
−  第２の公開鍵行列（ｕ）および第１の秘密鍵行列（ｒ）から第１の生の共有鍵（ｋ’）を計算するステップであって、第１の生の共有鍵の計算は、第２の公開鍵行列（ｕ）と第１の秘密鍵行列（ｒ）との間の行列乗算を含む、ステップと（５４０）、
−  第１の生の共有鍵（ｋ’）の少なくとも一部を使用してカプセル化されたデータ（ｃ）のカプセル化を解除することで送信鍵を取得するステップと（５５０）を含む。
【０１８２】
当業者には明らかであるように、この方法を実行する多くの異なる態様が存在する。例えば、ステップは記載または図示されている順序で実行されてもよいが、ステップの順序を変更したり、一部のステップを並行して実行したりすることも可能である。さらに、ステップ間に他の方法ステップを挿入することができる。挿入されるステップは、本明細書に記載されるような方法の改良を表し、または方法と無関係であってもよい。さらに、あるステップは、次のステップが開始される前に完全に終了していなくてもよい。
【０１８３】
方法の実施形態は、プロセッサシステムに方法４００および／または５００を実行させるための命令を含むソフトウェアを使用して実行され得る。ソフトウェアは、システムの特定のサブエンティティによって取られるステップのみを含んでもよい。ソフトウェアは、ハードディスク、フロッピー、メモリ、光ディスクなどの適切な記憶媒体に保存されてもよい。ソフトウェアは、有線または無線を介する信号として、またはインターネットなどのデータネットワークを使用して供給されてもよい。ソフトウェアは、サーバ上でダウンロードおよび／またはリモート使用可能にされてもよい。方法の実施形態は、方法を実行するためにプログラマブルロジック、例えばフィールドプログラマブルゲートアレイ（ＦＰＧＡ）を構成するように構成されたビットストリームを使用して実行されてもよい。
【０１８４】
本発明は、コンピュータプログラム、特に、本発明を実施するように適合された、キャリア上のまたはキャリア内のコンピュータプログラムにも及ぶことが理解されよう。プログラムは、ソースコード、オブジェクトコード、コード中間ソース、部分的にコンパイルされた形式のようなオブジェクトコード、または方法の実施形態の実装のための使用に適した任意の他の形式などの形式を取り得る。コンピュータプログラム製品に関する実施形態は、上記方法のうちの少なくとも１つの方法の処理ステップに対応するコンピュータ実行可能命令を含む。これらの命令は、サブルーチンに細分され、および／または静的に若しくは動的にリンクされ得る１つまたは複数のファイルに保存され得る。コンピュータプログラム製品に関する他の実施形態は、少なくとも１つの上記システムおよび／または製品の手段に対応するコンピュータ実行可能命令を含む。
【０１８５】
上記実施形態は本発明を限定するものではなく、当業者は多くの代替的実施形態を設計することができることに留意されたい。
【０１８６】
特許請求の範囲において、括弧間に置かれた参照符号は、請求項を限定するものとして解釈されるべきではない。「含む」という動詞およびその活用形の使用は、請求項に記載された要素またはステップ以外の要素またはステップの存在を排除するものではない。単数形の要素は、複数のかかる要素の存在を排除するものではない。要素のリストの前にある「少なくとも１つ」などの表現は、リスト内の全ての要素または任意の部分集合の選択を表す。例えば、「Ａ、Ｂ、およびＣのうちの少なくとも１つ」という表現は、Ａのみ、Ｂのみ、Ｃのみ、ＡおよびＢの両方、ＡおよびＣの両方、ＢおよびＣの両方、またはＡ、Ｂ、Ｃ全てを含むものと理解されたい。本発明は、複数の別個の要素を含むハードウェアによって、および適切にプログラムされたコンピュータによって実装され得る。いくつかの手段を列挙する装置クレームにおいて、これらの手段のうちのいくつかは、同一のハードウェアアイテムによって具現化されてもよい。複数の手段が互いに異なる従属請求項に記載されているからといって、これらの手段の組み合わせが好適に使用することができないとは限らない。
【０１８７】
特許請求の範囲において、括弧内の参照符号は、例示的実施形態の図面内の参照符号または実施形態の数式を指し、したがって、請求項の明瞭さを高める。これらの参照符号は、請求項を限定するものとして解釈されるべきではない。
【図１ａ】
2022500911.tif 000114
【図１ｂ】
2022500911.tif 000115
【図１ｃ】
2022500911.tif 000116
【図２ａ】
2022500911.tif 000117
【図２ｂ】
2022500911.tif 000118
【図２ｃ】
2022500911.tif 000119
【図３】
2022500911.tif 000120
【図４】
2022500911.tif 000121
【図５】
2022500911.tif 000122
【図６ａ】
2022500911.tif 000123
【図６ｂ】
2022500911.tif 000124
【図７ａ】
2022500911.tif 000125
【図７ｂ】
2022500911.tif 000126
【国際調査報告】
2022500911.tif 000127
2022500911.tif 000128
2022500911.tif 000129