Curve25519

암호학에서 Curve25519는 128비트 보안성(256비트 키 크기)을 제공하며 타원곡선 디피-헬먼(ECDH) 키 합의 방식을 위해 설계된 타원곡선 암호(ECC)용 타원곡선이다. 이 곡선은 대니얼 J. 번스타인이 처음 기술하고 구현하였다. 이는 ECC에서 가장 빠른 곡선 중 하나이며, 알려진 특허가 존재하지 않는다. 참조 구현은 퍼블릭 도메인 소프트웨어이다.

원래 Curve25519 논문은 이를 디피-헬먼(DH) 함수로 정의했다. 번스타인은 이후 Curve25519라는 이름을 기반 곡선에 사용하고, X25519라는 이름을 DH 함수에 사용할 것을 제안했다.

수학적 성질

사용된 곡선은 y2=x3+486662x2+x이며, 이는 유사 메르센 소수(pseudo-Mersenne prime number)로 정의된 소체(prime field) 위의 몽고메리 곡선이다. 이 소수는 2255−19 (따라서 이름에 "25519"이라는 숫자가 들어감)이며, x=9인 기준점을 사용한다. 이 점은 차수 (군론)가 소수 2252+27742317777372353535851937790883648493인 순환 부분군을 생성한다. 이 부분군은 8의 보조 인자(co-factor)를 가지며, 이는 부분군의 원소 개수가 타원곡선 군 원소 개수의 ⁠1/8⁠임을 의미한다. 소수 차수 부분군을 사용하면 폴리그-헬먼 알고리즘 공격을 방지할 수 있다.

이 프로토콜은 압축된 타원곡선 점(X 좌표만 사용)을 사용하므로, XZ 좌표만을 사용하여 ECDH를 위한 몽고메리 사다리를 효율적으로 사용할 수 있다.

Curve25519는 잠재적인 구현상의 함정을 피하도록 구성되었다.

이 곡선은 Ed25519 서명 체계에 사용되는 트위스티드 에드워즈 곡선과 쌍유리적 동치이다.

역사

2005년, Curve25519는 대니얼 J. 번스타인에 의해 처음 발표되었다.

2013년, NSA가 P-256 곡선 기반의 Dual_EC_DRBG 알고리즘에 백도어를 구현했을 가능성이 있다는 사실이 밝혀지면서 관심이 상당히 증가했다. 직접적인 관련은 없지만, NIST P-곡선 상수의 의심스러운 측면들은 NSA가 암호를 해독하는 데 유리한 값을 선택했을 것이라는 우려를 낳았다.

"나는 더 이상 상수들을 신뢰하지 않는다. 나는 NSA가 업계와의 관계를 통해 그것들을 조작했다고 믿는다."

— 브루스 슈나이어, The NSA Is Breaking Most Encryption on the Internet (2013)

2013년 이후 Curve25519는 P-256의 데 팍토 대안이 되었으며 다양한 응용 분야에서 사용되고 있다. 2014년부터 오픈SSH는 Curve25519 기반 ECDH를 기본값으로 설정했고, GnuPG는 서명 및 암호화를 위한 Ed25519 키 지원을 추가했다. 이 곡선의 사용은 결국 2020년에 키 교환 및 서명 모두에 대해 표준화되었다.

2017년, NIST는 Curve25519와 Curve448이 미국 연방 정부가 사용할 수 있는 승인된 타원곡선을 명시하는 Special Publication 800-186에 추가될 것이라고 발표했다. 두 곡선 모두 RFC 7748에 기술되어 있다. "FIPS 186-5"의 2019년 초안은 디지털 서명을 위해 Ed25519 사용을 허용하겠다는 의도를 명시했다. Special Publication 800-186의 2023년 업데이트는 Curve25519의 사용을 허용한다.

2017년 2월, Ed25519 및 Ed448을 사용하기 위한 DNSSEC 사양이 RFC 8080으로 발행되어 알고리즘 번호 15번과 16번이 할당되었다.

2018년, DKIM 사양은 이 알고리즘을 사용한 서명을 허용하도록 개정되었다. 또한 2018년에는 새로운 전송 계층 보안 v1.3 표준인 RFC 8446이 발행되었다. 이 표준은 X25519, Ed25519, X448, Ed448 알고리즘에 대한 지원을 권장한다.

2024년, Curve25519는 ML-KEM 지원을 추가했다.

라이브러리

프로토콜

응용 프로그램

내용주

  1. ↑ Windows 10 (1607), Windows Server 2016부터 지원
  2. 1 2 3 OMEMO 프로토콜을 통해
  3. ↑ 비밀 대화에서만
  4. 1 2 3 4 시그널 프로토콜을 통해
  5. ↑ 시크릿 모드에서만
  6. ↑ 릴리스 및 패키지 서명에 사용
  7. ↑ OpenSSL 없이 컴파일된 경우 오픈SSH 6.7에서 독점 키 교환 방식.

각주

  1. ↑ Bernstein. “Irrelevant patents on elliptic-curve cryptography”. 《cr.yp.to》. 2016년 2월 8일에 확인함.
  2. ↑ A state-of-the-art Diffie-Hellman function by 대니얼 J. 번스타인"My curve25519 library computes the Curve25519 function at very high speed. The library is in the public domain."
  3. ↑ “X25519”. 《Crypto++》. 2019년 3월 5일. 2023년 2월 3일에 확인함.
  4. ↑ “[Cfrg] 25519 naming”. 2016년 2월 25일에 확인함.
  5. ↑ Nath, Kaushik; Sarkar, Palash (2018), 《Efficient Arithmetic In (Pseudo-)Mersenne Prime Order Fields》, 2018/985, 2025년 5월 10일에 확인함
  6. 1 2 Bernstein, Daniel J. (2006). 〈Curve25519: New Diffie-Hellman Speed Records〉 (PDF). Yung, Moti; Dodis, Yevgeniy; Kiayias, Aggelos 외 (편집). 《Public Key Cryptography - PKC 2006》. Public Key Cryptography. Lecture Notes in Computer Science. New York: Springer. 207–228쪽. doi:10.1007/11745853_14. ISBN 978-3-540-33851-2. MR 2423191.
  7. ↑ Lange, Tanja. “EFD / Genus-1 large-characteristic / XZ coordinates for Montgomery curves”. 《EFD / Explicit-Formulas Database》. 2016년 2월 8일에 확인함.
  8. ↑ Bernstein, Daniel J.; Lange, Tanja (2017년 1월 22일). “SafeCurves: Introduction”. 《SafeCurves: choosing safe curves for elliptic-curve cryptography》. 2016년 2월 8일에 확인함.
  9. ↑ Bernstein, Daniel J.; Duif, Niels; Lange, Tanja; Schwabe, Peter; Yang, Bo-Yin (2017년 1월 22일). “Ed25519: high-speed high-security signatures”. 2019년 11월 9일에 확인함.
  10. ↑ Bernstein, Daniel J.; Duif, Niels; Lange, Tanja; Schwabe, Peter; Yang, Bo-Yin (2011년 9월 26일). “High-speed high-security signatures” (PDF). 2019년 11월 9일에 확인함.
  11. ↑ Bernstein, Daniel J.; Lange, Tanja (2007). 〈Faster addition and doubling on elliptic curves〉. Kurosawa, Kaoru (편집). 《Advances in Cryptology – ASIACRYPT 2007》. Advances in cryptology—ASIACRYPT. Lecture Notes in Computer Science. Berlin: Springer. 29–50쪽. doi:10.1007/978-3-540-76900-2_3. ISBN 978-3-540-76899-9. MR 2565722.
  12. ↑ Kelsey, John (May 2014). “Dual EC in X9.82 and SP 800-90” (PDF). 《National Institute of Standards in Technology》. 2018년 12월 2일에 확인함.
  13. ↑ Green, Matthew (2015년 1월 14일). “A Few Thoughts on Cryptographic Engineering: The Many Flaws of Dual_EC_DRBG”. 《blog.cryptographyengineering.com》. 2015년 5월 20일에 확인함.
  14. ↑ “SafeCurves: Introduction”.
  15. ↑ Maxwell, Gregory (2013년 9월 8일). “[tor-talk] NIST approved crypto in Tor?”. 2015년 5월 20일에 확인함.
  16. ↑ “SafeCurves: Rigidity”. 《safecurves.cr.yp.to》. 2015년 5월 20일에 확인함.
  17. ↑ “The NSA Is Breaking Most Encryption on the Internet - Schneier on Security”. 《www.schneier.com》. 2013년 9월 5일. 2015년 5월 20일에 확인함.
  18. ↑ “Things that use Curve25519”. 2015년 12월 23일에 확인함.
  19. 1 2 Adamantiadis, Aris (2013년 11월 3일). “OpenSSH introduces curve25519-sha256@libssh.org key exchange !”. 《libssh.org》. 2014년 12월 27일에 확인함.
  20. ↑ “GnuPG - What's new in 2.1”. August 2021.
  21. ↑ A. Adamantiadis; libssh; S. Josefsson; SJD AB; M. Baushke; Juniper Networks, Inc. (February 2020). Secure Shell (SSH) Key Exchange Method Using Curve25519 and Curve448. RFC 8731. https://tools.ietf.org/html/rfc8731.
  22. ↑ B. Harris; L. Velvindron (February 2020). Ed25519 and Ed448 Public Key Algorithms for the Secure Shell (SSH) Protocol. RFC 8709. https://tools.ietf.org/html/rfc8709.
  23. ↑ “Transition Plans for Key Establishment Schemes” (미국 영어). 《National Institute of Standards and Technology》. 2017년 10월 31일. 2018년 3월 11일에 원본 문서에서 보존된 문서. 2019년 9월 4일에 확인함.
  24. ↑ RFC 7748. Retrieved from rfc:7748.
  25. ↑ Regenscheid, Andrew (2019년 10월 31일). “FIPS PUB 186-5” (Withdrawn Draft). 《National Institute of Standards and Technology》. doi:10.6028/NIST.FIPS.186-5-draft. S2CID 241055751.
  26. ↑ “Recommendations for Discrete Logarithm-Based Cryptography” (PDF).
  27. ↑ “Domain Name System Security (DNSSEC) Algorithm Numbers”. Internet Assigned Numbers Authority. 2024년 12월 5일. 2024년 12월 27일에 확인함.
  28. ↑ John Levine (September 2018). A New Cryptographic Signature Method for DomainKeys Identified Mail (DKIM). IETF. RFC 8463. https://tools.ietf.org/html/rfc8463.
  29. ↑ E Rescorla (September 2018). The Transport Layer Security (TLS) Protocol Version 1.3. IETF. RFC 8446. https://tools.ietf.org/html/rfc8446.
  30. ↑ https://www.netmeister.org/blog/tls-hybrid-kex.html
  31. ↑ Werner Koch (2016년 4월 15일). “Libgcrypt 1.7.0 release announcement”. 2016년 4월 22일에 확인함.
  32. 1 2 3 4 5 6 7 SSH implementation comparison. “Comparison of key exchange methods”. 2016년 2월 25일에 확인함.
  33. ↑ “Introduction”. 《yp.to》. 2014년 12월 11일에 확인함.
  34. ↑ “nettle: curve25519.h File Reference” (doxygen documentation). 《Fossies》. 2015년 5월 20일에 원본 문서에서 보존된 문서. 2015년 5월 19일에 확인함.
  35. ↑ Limited, ARM. “PolarSSL 1.3.3 released - Tech Updates - mbed TLS (Previously PolarSSL)”. 《tls.mbed.org》. 2015년 5월 19일에 확인함.
  36. ↑ “wolfSSL Embedded SSL/TLS Library | Products – wolfSSL”. 2017년 8월 4일.
  37. ↑ “Botan: src/lib/pubkey/curve25519/curve25519.cpp Source File”. 《botan.randombit.net》. 2017년 12월 10일에 원본 문서에서 보존된 문서. 2026년 7월 25일에 확인함.
  38. ↑ Justinha. “TLS (Schannel SSP)” (미국 영어). 《docs.microsoft.com》. 2017년 9월 15일에 확인함.
  39. ↑ Denis, Frank. “Introduction · libsodium”. 《libsodium.org》.
  40. ↑ “OpenSSL 1.1.0 Series Release Notes”. 《OpenSSL Foundation》. 2018년 3월 17일에 원본 문서에서 보존된 문서. 2016년 6월 24일에 확인함.
  41. ↑ “Add support for ECDHE with X25519. · openbsd/src@0ad90c3”. 《GitHub》.
  42. ↑ “NSS 3.28 release notes”. 2017년 12월 9일에 원본 문서에서 보존된 문서. 2017년 7월 25일에 확인함.
  43. ↑ “A pure-Rust implementation of group operations on ristretto255 and Curve25519”. 《깃허브》. 2021년 4월 14일에 확인함.
  44. ↑ “Ed25519.java”. 《GitHub》. 2021년 10월 13일.
  45. ↑ Straub, Andreas (2015년 10월 25일). “OMEMO Encryption”. 《conversations.im》.
  46. ↑ “bitchat/BRING_THE_NOISE.md at 079f36664caf1d1deb0af56e596e3bffbc7dde1b · permissionlesstech/bitchat” (영어). 《GitHub》. 2025년 7월 19일에 확인함.
  47. ↑ “Cryptocat - Security”. 《crypto.cat》. 2016년 4월 7일에 원본 문서에서 보존된 문서. 2016년 5월 24일에 확인함.
  48. ↑ Frank Denis. “DNSCrypt version 2 protocol specification”. 《깃허브》. 2015년 8월 13일에 원본 문서에서 보존된 문서. 2016년 3월 3일에 확인함.
  49. ↑ Matt Johnston. “Dropbear SSH - Changes”. 2016년 2월 25일에 확인함.
  50. ↑ Bahtiar Gadimov 외. “Gajim plugin for OMEMO Multi-End Message and Object Encryption”. 《깃허브》. 2016년 10월 1일에 확인함.
  51. ↑ “GNUnet 0.10.0”. 《gnunet.org》. 2017년 12월 9일에 원본 문서에서 보존된 문서. 2014년 12월 11일에 확인함.
  52. ↑ zzz (2014년 9월 20일). “0.9.15 Release - Blog”. 2014년 12월 20일에 확인함.
  53. ↑ “go-ipfs_keystore.go at master”. Github.com. 2022년 3월 30일.
  54. ↑ “Apple Platform Security”. 《Apple Support》.
  55. ↑ “MRL-0003 - Monero is Not That Mysterious” (PDF). 《getmonero.com》. 2019년 5월 1일에 원본 문서 (PDF)에서 보존된 문서. 2018년 6월 5일에 확인함.
  56. ↑ Murenin, Constantine A. (2014년 1월 19일). Soulskill (편집). “OpenBSD Moving Towards Signed Packages — Based On D. J. Bernstein Crypto”. 슬래시닷. 2014년 12월 27일에 확인함.
  57. ↑ Murenin, Constantine A. (2014년 5월 1일). timothy (편집). “OpenBSD 5.5 Released”. 슬래시닷. 2014년 12월 27일에 확인함.
  58. ↑ Friedl, Markus (2014년 4월 29일). “ssh/kex.c#kexalgs”. 《BSD Cross Reference, OpenBSD src/usr.bin/》. 2014년 12월 27일에 확인함.
  59. ↑ Murenin, Constantine A. (2014년 4월 30일). Soulskill (편집). “OpenSSH No Longer Has To Depend On OpenSSL”. 슬래시닷. 2014년 12월 26일에 확인함.
  60. ↑ “How does Peerio implement end-to-end encryption?”. 《Peerio》. 2017년 12월 9일에 원본 문서에서 보존된 문서. 2015년 11월 4일에 확인함.
  61. ↑ “Proton Mail now offers elliptic curve cryptography for advanced security and faster speeds”. 2019년 4월 25일.
  62. ↑ “PuTTY Change Log”. 《www.chiark.greenend.org.uk》.
  63. ↑ Steve Gibson (December 2019). “SQRL Cryptography whitepaper” (PDF).
  64. ↑ “Threema Cryptography Whitepaper” (PDF).
  65. ↑ “Viber Encryption Overview”. Viber. 2016년 5월 3일. 2016년 9월 24일에 확인함.
  66. ↑ Nidhi Rastogi; James Hendler (2017년 1월 24일). “WhatsApp security and role of metadata in preserving privacy”. arXiv:1701.06817 [cs.CR].

외부 링크