Internet Engineering Task Force (IETF) A. Adamantiadis Request for Comments: 8731 libssh Category: Standards Track S. Josefsson ISSN: 2070-1721 SJD AB M. Baushke Juniper Networks, Inc. February 2020 Curve25519 と Curve448 を用いる セキュアシェル (SSH) 鍵交換法 概要 この文書は, セキュアシェル (SSH) プロトコルで Curve25519 と Curve448 鍵交換法を利用するための仕様を記述する. このメモの位置づけ これは, インターネット標準化課程文書だ. この文書は, Internet Engineering Task Force (IETF) の成果物だ. IETF コミュニティの合意を表わしている. 公開のレビューを受けており, Internet Engineering Steering Group (IESG) によって発行が認められた. インターネット標準についてさらなる情報は RFC 7841 の 2節にある. この文書の現在の状態についての情報, 訂正情報, フィードバックを提供する方法は, http://www.rfc-editor.org/info/rfc8731 で得られる. 著作権情報 Copyright (c) 2020 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. 目次 1イントロダクション 2. 要件に関する用語 3. 鍵交換法 3.1. 共有の秘密のエンコーディング 4. セキュリティの考察 5. IANA の考察 6. References 6.1. Normative References 6.2. Informative References Acknowledgements Authors' Addresses 1イントロダクション セキュア シェル(SSH) [RFC4251] は 安全なリモートログインプロトコルだ. [RFC4253] で記述された鍵交換プロトコルは, 鍵交換法の集合を拡張することをサポートとしている. [RFC5656] は拡張可能な SSH のフレームワークに楕円曲線をどのように統合するかを定義する. そしてこの文書は, [RFC5656] の 7.1 節 (ECDH メッセージ番号)で定義された楕円曲線 Diffie-Hellman (ECDH) 鍵交換プロトコルメッセージを再利用する. 楕円曲線 Menezes-Qu-Vanstone (ECMQV) 鍵同意や 楕円曲線 Digital Signature Algorithm (ECDSA) といった [RFC5656] の他の部分は, この文書では考慮されない. この文書は,Curve25519 と Curve448 [RFC7748] に基づく鍵交換法を SSH でどのように実装するかを記述する. SHA-256 [RFC6234][SHS] を利用する Curve25519 について, 記述されるアルゴリズムは, 私的に定義されたアルゴリズム "curve25519-sha256@libssh.org" と同等だ. この文書の発行の時点で, libssh [libssh] と OpenSSH [OpenSSH] によって実装され広く配置されているCurve448 鍵交換法も同様だが, SHA-512 [RFC6234][SHS] を利用する. 2. 要件に関する用語 この文書でのキーワード "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", "OPTIONAL" は, ここで示しているようにすべて大文字で出現した場合のみ, BCP 16 [RFC2119] [RFC8174] で記述されているように解釈される. 3. 鍵交換法 この鍵交換手順は, [RFC5656] の 4節で記述された ECDH 法と似ている. ただし, 公開の値と最後の共有秘密では異なる wire encoding が利用される. 公開の一時鍵は, 標準の SSH 文字列として転送時にエンコードされる. プロトコルフロー, SSH_MSG_KEX_ECDH_INIT と SSH_MSG_KEX_ECDH_REPLY メッセージ, 交換ハッシュの構造は, [RFC5656] の 4節と同じだ. この文書によって登録される方法の名前は, "curve25519-sha256" と "curve448-sha512" だ. [RFC7748] に記述されている, Curve25519 と Curve448 スカラ乗算をベースにしている. 秘密/公開鍵は, そこに記述されているように生成される. 公開鍵は, Curve25519 では 32バイト, Curve448 では 56 バイトの文字列として定義される. 鍵同意スキーム "curve25519-sha256" と "curve448-sha512" は, それぞれ関数 X25519 と X448 を用いた Diffie-Hellman プロトコルを実行する. 実装は, [RFC7748] に記述されているアルゴリズムを用いてこれらの関数を計算する必要がある. そのように計算する際, [RFC7748] の 6節に記述されているように 実装は計算された Diffie-Hellman 共有秘密がすべて 0 値でないか検査しなればならない. また, もしそうならば中止しなければならない. これらの関数の代替の実装は, クライアントかサーバの入力が共有の秘密に値の小さな集合の1つを強制するならば, [RFC7748] に記述されているように, 中止する必要がある. クライアントとサーバは, 受信した公開鍵の長さが期待した長さでない場合も中止しなければならない. これらの目的での中止は, セッションの切断 (SSH_MSG_DISCONNECT) で定義され, メッセージに対して理由 SSH_DISCONNECT_KEY_EXCHANGE_FAILED を用いる必要がある. [RFC7748] で記述されている範囲を越えた検証は必要ない. 道術された共有の秘密は, "curve25519-sha256" が利用される場合 32 バイト, "curve448-sha512" の場合 56 バイトだ. すべての値のエンコーディングは, [RFC7748] に定義されている. ハッシュとして "curve25519-sha256" には SHA-256, "curve448-sha512" には SHA-512 が利用される.. 3.1. 共有の秘密のエンコーディング 次の手順は, 異なる変換を用いていて [RFC5656] と異なっている. これは一般的にテキストを変更する意図があるものではなく, この文書で記述されるメカニズムのスコープにのみ適用される. [RFC4253] と [RFC5656] で定義されている共有の秘密 K は, 多精度整数(mpint) でエンコードされた整数だ. Curve25519/448 は, バイナリ文字列 X を出力する. もう一方の側の公開鍵とローカルの秘密鍵スカラのスカラ乗算によって得られた 32 ないし 56 バイトの点だ. X の 32 ないし 56 バイトは, そのオクテットをネットワークバイトオーダーでエンコードされた符号なし固定長整数として解釈することで K に変換される. そして mpint K は [RFC4251] の 5 節で記述された手順を用いてエンコードされる. そして, [RFC4253] で記述されているように, 暗号化鍵を生成するための鍵交換法のハッシュ関数に結果のバイトが供給される. X25519 ないし X448 の操作の実行の際, [RFC7748] に従って, 整数値は, 固定長符号なしリトルエンディアン変換を用いてバイト文字列にエンコードされる. これらのバイト文字列が後で SSH の ECDH 関数に渡される時にのみ, それらのバイトは固定長符号なしビッグエンディアン整数値 K として解釈される. そしてその後で, K の値は, 鍵導出に用いられるハッシュアルゴリズムに供給される前に, 可変長符号あり "mpint" としてエンコードされる. そして mpint K は, 暗号化鍵生成のために 他のデータと一緒に 鍵交換法のハッシュ関数に供給される. 4. セキュリティの考察 [RFC4251] と [RFC5656] , [RFC7748] のセキュリティの考察は継承される. SHA-256 を利用する Curve25519 は, 強い (~128 ビット) のセキュリティを提供する. 広い範囲のアーキテクチャで効率的で, 伝統的な楕円曲線と比較してよりよい実装の性質を可能にする性質を持っている. SHA-512 を 利用する Curve448 は, 同様の実装の性質を持ちより強い (~224 ビット) セキュリティを提供する. しかし, Curve25519 ど同様の暗号学レビューを受けていない. また, (より大きい鍵素材とより大きいハッシュアルゴリズムのため) より低速だ. しかし, より大きなセキュリティビットのため, Curve25519 と SHA-256 に対する予測できない分析の進歩に対する防止さくとして提供される. ハッシュ化される前に導出したバイナリ秘密文字列をエンコードする方法 (つまり, エンコーディングのために 0 バイトを追加したり削除したりする) は, ハッシュされたものの長さを決定できるので, サイドチャンネル攻撃の可能性がある. これは, 導出された秘密の最上位ビットを漏らしたり, かつ/もしくは 最上位ビットが0かどうかの検出を許すかもしれない. 後方互換性のため, この潜在的な問題には対処しないことが決定された. この文書は, "curve25519-sha256" をより好ましい選択として提供する. しかし 128 ビットを越えるセキュリティを提供する必要が生じた場合に "curve448-sha512" を実装することを提案する. 5. IANA の考慮 IANA は "curve25519-sha256" と "curve448-sha512" を [RFC4250] の 4.10 節で作成された SSH のための "Key Exchange Method Names" レジストリ [IANA-KEX] に追加した. 6. References 6.1. Normative References [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, . [RFC4250] Lehtinen, S. and C. Lonvick, Ed., "The Secure Shell (SSH) Protocol Assigned Numbers", RFC 4250, DOI 10.17487/RFC4250, January 2006, . [RFC4251] Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH) Protocol Architecture", RFC 4251, DOI 10.17487/RFC4251, January 2006, . [RFC4253] Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH) Transport Layer Protocol", RFC 4253, DOI 10.17487/RFC4253, January 2006, . [RFC5656] Stebila, D. and J. Green, "Elliptic Curve Algorithm Integration in the Secure Shell Transport Layer", RFC 5656, DOI 10.17487/RFC5656, December 2009, . [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, . [SHS] National Institute of Standards and Technology, "Secure Hash Standard (SHS)", FIPS PUB 180-4, DOI 10.6028/NIST.FIPS.180-4, August 2015, . 6.2. Informative References [IANA-KEX] IANA, "Secure Shell (SSH) Protocol Parameters: Key Exchange Method Names", . [IANA-REASON] IANA, "Secure Shell (SSH) Protocol Parameters: Disconnection Messages Reason Codes and Descriptions", . [libssh] libssh, "The SSH Library", . [OpenSSH] OpenSSH group of OpenBSD, "The OpenSSH Project", . [RFC6234] Eastlake 3rd, D. and T. Hansen, "US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)", RFC 6234, DOI 10.17487/RFC6234, May 2011, . [RFC7748] Langley, A., Hamburg, M., and S. Turner, "Elliptic Curves for Security", RFC 7748, DOI 10.17487/RFC7748, January 2016, . 謝辞 The "curve25519-sha256" key exchange method is identical to the "curve25519-sha256@libssh.org" key exchange method created by Aris Adamantiadis and implemented in libssh and OpenSSH. Thanks to the following people for review and comments: Denis Bider, Damien Miller, Niels Moeller, Matt Johnston, Eric Rescorla, Ron Frederick, and Stefan Buehler. Authors' Addresses Aris Adamantiadis libssh Email: aris@badcode.be Simon Josefsson SJD AB Email: simon@josefsson.org Mark D. Baushke Juniper Networks, Inc. Email: mdb@juniper.net