Curve25519

暗号学において、Curve25519とは128ビットの暗号強度（英語版）を提供する楕円曲線であり、楕円曲線ディフィー・ヘルマン鍵共有 (ECDH) で使用するために設計されている。最も処理の速い楕円曲線暗号 (ECC) の楕円曲線での1つであり、これをカバーする特許は知られていない。リファレンス実装はパブリックドメインである。 オリジナルの論文では、Curve25519はディフィー・ヘルマン鍵共有 (DH) 関数の名前として定義していた。ダニエル・バーンスタインがCurve25519をその基本となる楕円曲線の名前で使用することを提案して以来、DH関数についてはX25519と呼ばれている。 この曲線は素数 2255 − 19におけるモンゴメリ曲線 y2 = x3 + 486662x2 + xを使用している。また、基点 x = 9も使用している。この基点は位数 ( 2 252 + 27742317777372353535851937790883648493 ) {\displaystyle (2^{252}+27742317777372353535851937790883648493)} を持つ。 このプロトコルは圧縮された楕円上の点 (X座標のみ) を使用しているので、XZ座標のみを使用して、ECDH用のモンゴメリラダー（英語版）を効率的に使用することができる。 Curve25519は実装時における潜在的な欠陥の可能性を回避するように構築されている。設計上、タイミング攻撃の影響を受けず、有効な公開鍵として32バイトの文字列を受け入れる。検証は不要である。 この曲線は、Ed25519で使用されているツイストエドワーズ曲線（英語版）と双有理同値である。 Curve25519はダニエル・バーンスタインによって2005年にリリースされたが、Dual_EC_DRBG（英語版）にアメリカ国家安全保障局 (NSA) が使用するバックドアが存在する可能性があることが判明した2013年以降にこの曲線への関心が高まった。直接関係はないが、アメリカ国立標準技術研究所 (NIST) のP楕円曲線のシード値に、NSAが公開鍵の因数分解をする上で有利となる値を選択したという疑惑が持たれた。 I no longer trust the constants. I believe the NSA has manipulated them through their relationships with industry. —Bruce Schneier、The NSA Is Breaking Most Encryption on the Internet (2013) それ以来、Curve25519はP-256の事実上の代替手段となり、幅広い用途で使用されている。2014年以降、OpenSSHのデフォルトはCurve25519ベースのECDHである。 2017年、NISTはCurve25519とCurve448がSP 800-186に追加されることを発表した。これによって合衆国政府によって使用される承認された楕円曲線として指定されることになる。どちらの楕円曲線もRFC 7748で説明されている。2019年、FIPS 186-5の2019年の草稿ではデジタル署名としてEd25519の利用が、SP 800-186の草稿ではCurve25519の利用がそれぞれ追加されている。 2018年、ドメインキー・アイデンティファイド・メール (DKIM) の使用はこのアルゴリズムによる署名ができるように修正された。 2018年に公開されたTransport Layer Security (TLS) 1.3では、X25519、Ed25519、X448、Ed448の利用が推奨されている。 Libgcrypt（英語版） libssh NaCl GnuTLS mbed TLS（英語版） (formerly PolarSSL) wolfSSL Botan SChannel libsodium OpenSSL since version 1.1.0 LibreSSL NaCl for Tcl — a port to the Tcl language. NSS since version 3.28 Crypto++（英語版） OMEMO（英語版） - XMPP (Jabber)のために提案された拡張 Secure Shell Signalプロトコル Tox Zcash Transport Layer Security Conversations（英語版） Cryptocat（英語版） DNSCrypt DNSCurve Dropbear Facebook Messenger プラグイン経由のGajim（英語版） GNUnet GnuPG Google Allo（英語版） I2P IPFS iOS Monero OpenBSD OpenSSH Peerio（英語版） PuTTY Signal Silent Phone SmartFTP SSHJ Threema（英語版） TinySSH TinyTERM Tor Viber WhatsApp Wire WireGuard ^ 鍵長（英語版）は256ビット。 ^ Starting with Windows 10 (1607), Windows Server 2016 ^ a b c Via the OMEMO protocol ^ Only in "secret conversations" ^ a b c d Via the Signal Protocol ^ Only in "incognito mode" ^ Used to sign releases and packages ^ Exclusive key exchange in OpenSSH 6.7 when compiled without OpenSSL. ^ Bernstein. “Irrelevant patents on elliptic-curve cryptography”. cr.yp.to. 2016年2月8日閲覧。 ^ A state-of-the-art Diffie-Hellman function by Daniel J. Bernstein"My curve25519 library computes the Curve25519 function at very high speed. The library is in the public domain. " ^ “[Cfrg 25519 naming]”. 2016年2月25日閲覧。 ^ a b Bernstein, Daniel J. (2006). Yung, Moti; Dodis, Yevgeniy; Kiayias, Aggelos; et al. (eds.). Curve25519: New Diffie-Hellman Speed Records (PDF). Public Key Cryptography. Lecture Notes in Computer Science. Vol. 3958. New York: Springer. pp. 207–228. doi:10.1007/11745853_14. ISBN 978-3-540-33851-2. MR 2423191。 ^ “EFD / Genus-1 large-characteristic / XZ coordinates for Montgomery curves”. EFD / Explicit-Formulas Database. 8 February 2016閲覧。 ^ “SafeCurves: Introduction”. safecurves.cr.yp.to. 2016年2月8日閲覧。 ^ Bernstein, Daniel J.; Lange, Tanja (2007). Kurosawa, Kaoru (ed.). Faster addition and doubling on elliptic curves. Advances in cryptology—ASIACRYPT. Lecture Notes in Computer Science. Vol. 4833. Berlin: Springer. pp. 29–50. doi:10.1007/978-3-540-76900-2_3. ISBN 978-3-540-76899-9. MR 2565722。 ^ Kelsey, John (May 2014). “Dual EC in X9.82 and SP 800-90”. National Institute of Standards in Technology. December 2, 2018閲覧。 ^ Green, Matthew (January 14, 2015). “A Few Thoughts on Cryptographic Engineering: The Many Flaws of Dual_EC_DRBG”. blog.cryptographyengineering.com. 2015年5月20日閲覧。 ^ https://safecurves.cr.yp.to/ ^ Maxwell, Gregory (2013年9月8日). “[tor-talk NIST approved crypto in Tor?]”. 2015年5月20日閲覧。 ^ “SafeCurves: Rigidity”. safecurves.cr.yp.to. 2015年5月20日閲覧。 ^ “The NSA Is Breaking Most Encryption on the Internet - Schneier on Security”. www.schneier.com. 2015年5月20日閲覧。 ^ “Things that use Curve25519”. 2015年12月23日閲覧。 ^ a b Adamantiadis, Aris (2013年11月3日). “OpenSSH introduces curve25519-sha256@libssh.org key exchange !”. libssh.org. 2014年12月27日閲覧。 ^ “Transition Plans for Key Establishment Schemes”. 2019年4月10日閲覧。 ^ Regenscheid, Andrew (31 October 2019). FIPS PUB 186-5 (Draft). doi:10.6028/NIST.FIPS.186-5-draft. https://csrc.nist.gov/publications/detail/fips/186/5/draft.  ^ “Recommendations for Discrete Logarithm-Based Cryptography”. 2022年8月3日閲覧。 ^ John Levine (September 2018). A New Cryptographic Signature Method for DomainKeys Identified Mail (DKIM) (英語). IETF. doi:10.17487/RFC8463. RFC 8463。 ^ E Rescorla (September 2018). The Transport Layer Security (TLS) Protocol Version 1.3 (英語). IETF. doi:10.17487/RFC8446. RFC 8446。 ^ Werner Koch (15 April 2016). “Libgcrypt 1.7.0 release announcement”. 22 April 2016閲覧。 ^ a b c d e f g SSH implementation comparison. “Comparison of key exchange methods”. 2016年2月25日閲覧。 ^ “Introduction”. yp.to. 11 December 2014閲覧。 ^ “nettle: curve25519.h File Reference - doxygen documentation | Fossies Dox”. fossies.org. 2015年5月20日時点のオリジナルよりアーカイブ。2015年5月19日閲覧。 ^ Limited, ARM. “PolarSSL 1.3.3 released - Tech Updates - mbed TLS (Previously PolarSSL)”. tls.mbed.org. 2015年5月19日閲覧。 ^ “wolfSSL Embedded SSL/TLS Library - wolfSSL Products”. 2019年4月10日閲覧。 ^ “Botan: src/lib/pubkey/curve25519/curve25519.cpp Source File”. botan.randombit.net. 2019年4月10日閲覧。 ^ Justinha. “TLS (Schannel SSP)” (英語). docs.microsoft.com. 2017年9月15日閲覧。 ^ Denis, Frank. “Introduction · libsodium”. libsodium.org. 2019年4月10日閲覧。 ^ Inc., OpenSSL Foundation,. “OpenSSL”. www.openssl.org. 2016年6月24日閲覧。 ^ “Add support for ECDHE with X25519. · openbsd/src@0ad90c3”. GitHub. 2019年4月10日閲覧。 ^ “Tclers Wiki - NaCl for Tcl”. 2019年4月10日閲覧。 ^ “NSS 3.28 release notes”. 25 July 2017閲覧。 ^ Straub, Andreas (25 October 2015). “OMEMO Encryption”. conversations.im. 2019年4月10日閲覧。 ^ “Cryptocat - Security”. crypto.cat. 2016年5月24日閲覧。 ^ Frank Denis. “DNSCrypt version 2 protocol specification”. 2016年3月3日閲覧。 ^ Matt Johnston. “Dropbear SSH - Changes”. 2016年2月25日閲覧。 ^ Bahtiar Gadimov. “Gajim plugin for OMEMO Multi-End Message and Object Encryption”. 2016年10月1日閲覧。 ^ “GNUnet 0.10.0”. gnunet.org. 11 December 2014閲覧。 ^ zzz (2014年9月20日). “0.9.15 Release - Blog”. 20 December 2014閲覧。 ^ https://github.com/ipfs/go-ipfs/blob/master/core/commands/keystore.go#L68 ^ “iOS Security Guide”. 2019年4月10日閲覧。 ^ “MRL-0003 - Monero is Not That Mysterious”. getmonero.com. 2019年4月10日閲覧。 ^ Murenin, Constantine A. (2014年1月19日). Soulskill: “OpenBSD Moving Towards Signed Packages — Based On D. J. Bernstein Crypto”. Slashdot. 2014年12月27日閲覧。 ^ Murenin, Constantine A. (2014年5月1日). timothy: “OpenBSD 5.5 Released”. Slashdot. 2014年12月27日閲覧。 ^ Friedl, Markus (2014年4月29日). “ssh/kex.c#kexalgs”. BSD Cross Reference, OpenBSD src/usr.bin/. 2014年12月27日閲覧。 ^ Murenin, Constantine A. (2014年4月30日). Soulskill: “OpenSSH No Longer Has To Depend On OpenSSL”. Slashdot. 2014年12月26日閲覧。 ^ “How does Peerio implement end-to-end encryption?”. Peerio. 2019年4月10日閲覧。 ^ “PuTTY Change Log”. www.chiark.greenend.org.uk. 2019年4月10日閲覧。 ^ “Threema Cryptography Whitepaper”. 2019年4月10日閲覧。 ^ Roger Dingledine & Nick Mathewson. “Tor's Protocol Specifications - Blog”. 20 December 2014閲覧。 ^ “Viber Encryption Overview”. Viber (3 May 2016). 24 September 2016閲覧。 Curve448 Ed25519 公式ウェブサイト