1. はじめに
多くの暗号プロトコルは、パスワードなどの任意の入力を楕円曲線上の点にエンコードする手順を必要とします。この手順は楕円曲線へのハッシュとして知られており、ハッシュ手順は衝突耐性を提供し、出力点の離散対数を明らかにしません。楕円曲線にハッシュする暗号システムの著名な例には、パスワード認証鍵交換 [BM92] [J96] [BMP00] [p1363.2]、アイデンティティベース暗号 [BF01]、Boneh-Lynn-Shacham署名 [BLS01] [BLS-SIG]、検証可能ランダム関数 [MRV99] [VRF]、および忘却的疑似ランダム関数 [NR97] [OPRFs] があります。
残念ながら、実装者にとって、特定の楕円曲線を使用して実装された特定のプロトコルに適した正確なハッシュ関数は、プロトコルの説明から不明確であることがよくあります。一方、ハッシュ関数の誤った選択は、セキュリティに壊滅的な結果をもたらす可能性があります。
この文書は、さまざまな曲線タイプに対する包括的な推奨アルゴリズムのセットを提供することにより、このギャップを埋めることを目的としています。各アルゴリズムは共通のインターフェースに準拠しています。任意の長さのバイト文字列を入力として受け取り、楕円曲線上の点を出力として生成します。各アルゴリズムの実装詳細を提供し、各推奨事項の背後にあるセキュリティの根拠を説明し、明示的にカバーされていない楕円曲線に関するガイダンスを提供します。また、これらのアルゴリズムで使用される内部関数の最適化された実装も提示します。
準拠したハッシュ関数を迅速に指定または実装したい読者は、第8節を参照してください。これは、推奨される hash-to-curve スイートをリストし、既存のスイートの実装方法と新しいスイートの指定方法の両方について説明しています。
この文書は、確率的棄却サンプリング方法を指定していません。これは「try-and-increment」または「hunt-and-peck」と呼ばれることもありますが、その理由は、一定時間で計算できるアルゴリズムを指定することが目標だからです。これらの確率的棄却方法の使用は推奨されません。なぜなら、それらはサイドチャネル脆弱性の長年の原因となってきたからです。実際の問題の一例として Dragonblood [VR20] を参照し、棄却サンプリング方法とそれらが導入するタイミングサイドチャネルの非公式な説明については、付録Aを参照してください。
この文書は、暗号フォーラム研究グループ (CFRG) のコンセンサスを表しています。
1.1. 要件表記
この文書のキーワード「MUST」、「MUST NOT」、「REQUIRED」、「SHALL」、「SHALL NOT」、「SHOULD」、「SHOULD NOT」、「RECOMMENDED」、「NOT RECOMMENDED」、「MAY」、および「OPTIONAL」は、BCP 14 [RFC2119] [RFC8174] に記載されているように解釈されるものとします。ただし、ここに示すように、すべて大文字で表示される場合に限ります。