Curve25519
수학적 성질
사용된 곡선은 y 2 = x 3 + 486662 x 2 + x 이며, 이는 유사 메르센 소수 (pseudo-Mersenne prime number)로 정의된 소체 (prime field) 위의 몽고메리 곡선 이다. 이 소수는 2 255 − 19 (따라서 이름에 " 25519 "이라는 숫자가 들어감)이며, x = 9 인 기준점을 사용한다. 이 점은 차수 (군론) 가 소수 2 252 + 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 지원을 추가했다.
내용주
↑ Windows 10 (1607), Windows Server 2016부터 지원
1 2 3 OMEMO 프로토콜을 통해
↑ 비밀 대화에서만
1 2 3 4 시그널 프로토콜 을 통해
↑ 시크릿 모드에서만
↑ 릴리스 및 패키지 서명에 사용
↑ OpenSSL 없이 컴파일된 경우 오픈SSH 6.7에서 독점 키 교환 방식.
각주
↑ Bernstein. “ Irrelevant patents on elliptic-curve cryptography” . 《 cr.yp.to》 . 2016년 2월 8일에 확인함 .
↑ 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."
↑ “ X25519” . 《 Crypto++》 . 2019년 3월 5일. 2023년 2월 3일에 확인함 .
↑ “ [ Cfrg] 25519 naming” . 2016년 2월 25일에 확인함 .
↑ Nath, Kaushik; Sarkar, Palash (2018), 《 Efficient Arithmetic In (Pseudo-)Mersenne Prime Order Fields》 , 2018/985, 2025년 5월 10일에 확인함
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 .
↑ Lange, Tanja . “ EFD / Genus-1 large-characteristic / XZ coordinates for Montgomery curves” . 《 EFD / Explicit-Formulas Database》 . 2016년 2월 8일에 확인함 .
↑ Bernstein, Daniel J.; Lange, Tanja (2017년 1월 22일). “ SafeCurves: Introduction” . 《 SafeCurves: choosing safe curves for elliptic-curve cryptography》 . 2016년 2월 8일에 확인함 .
↑ Bernstein, Daniel J.; Duif, Niels; Lange, Tanja; Schwabe, Peter; Yang, Bo-Yin (2017년 1월 22일). “ Ed25519: high-speed high-security signatures” . 2019년 11월 9일에 확인함 .
↑ Bernstein, Daniel J.; Duif, Niels; Lange, Tanja; Schwabe, Peter; Yang, Bo-Yin (2011년 9월 26일). “ High-speed high-security signatures” (PDF) . 2019년 11월 9일에 확인함 .
↑ 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 .
↑ Kelsey, John (May 2014). “ Dual EC in X9.82 and SP 800-90” (PDF) . 《 National Institute of Standards in Technology》 . 2018년 12월 2일에 확인함 .
↑ Green, Matthew (2015년 1월 14일). “ A Few Thoughts on Cryptographic Engineering: The Many Flaws of Dual_EC_DRBG” . 《 blog.cryptographyengineering.com》 . 2015년 5월 20일에 확인함 .
↑ “ SafeCurves: Introduction” .
↑ 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》 . 2013년 9월 5일. 2015년 5월 20일에 확인함 .
↑ “ Things that use Curve25519” . 2015년 12월 23일에 확인함 .
1 2 Adamantiadis, Aris (2013년 11월 3일). “ OpenSSH introduces curve25519-sha256@libssh.org key exchange !” . 《 libssh.org》 . 2014년 12월 27일에 확인함 .
↑ “ GnuPG - What's new in 2.1” . August 2021.
↑ 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 .
↑ 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 .
↑ “ Transition Plans for Key Establishment Schemes” (미국 영어). 《 National Institute of Standards and Technology》 . 2017년 10월 31일. 2018년 3월 11일에 원본 문서 에서 보존된 문서. 2019년 9월 4일에 확인함 .
↑ RFC 7748 . Retrieved from rfc:7748.
↑ 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 .
↑ “ Recommendations for Discrete Logarithm-Based Cryptography” (PDF) .
↑ “ Domain Name System Security (DNSSEC) Algorithm Numbers” . Internet Assigned Numbers Authority. 2024년 12월 5일. 2024년 12월 27일에 확인함 .
↑ John Levine (September 2018). A New Cryptographic Signature Method for DomainKeys Identified Mail (DKIM) . IETF . RFC 8463. https://tools.ietf.org/html/rfc8463 .
↑ E Rescorla (September 2018). The Transport Layer Security (TLS) Protocol Version 1.3 . IETF . RFC 8446. https://tools.ietf.org/html/rfc8446 .
↑ https://www.netmeister.org/blog/tls-hybrid-kex.html
↑ Werner Koch (2016년 4월 15일). “ Libgcrypt 1.7.0 release announcement” . 2016년 4월 22일에 확인함 .
1 2 3 4 5 6 7 SSH implementation comparison. “ Comparison of key exchange methods” . 2016년 2월 25일에 확인함 .
↑ “ Introduction” . 《 yp.to》 . 2014년 12월 11일에 확인함 .
↑ “ nettle: curve25519.h File Reference” (doxygen documentation). 《 Fossies》 . 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 | Products – wolfSSL” . 2017년 8월 4일.
↑ “ Botan: src/lib/pubkey/curve25519/curve25519.cpp Source File” . 《 botan.randombit.net》 . 2017년 12월 10일에 원본 문서 에서 보존된 문서. 2026년 7월 25일에 확인함 .
↑ Justinha. “ TLS (Schannel SSP)” (미국 영어). 《 docs.microsoft.com》 . 2017년 9월 15일에 확인함 .
↑ Denis, Frank. “ Introduction · libsodium” . 《 libsodium.org》 .
↑ “ OpenSSL 1.1.0 Series Release Notes” . 《 OpenSSL Foundation》 . 2018년 3월 17일에 원본 문서 에서 보존된 문서. 2016년 6월 24일에 확인함 .
↑ “ Add support for ECDHE with X25519. · openbsd/src@0ad90c3” . 《 GitHub》 .
↑ “ NSS 3.28 release notes” . 2017년 12월 9일에 원본 문서 에서 보존된 문서. 2017년 7월 25일에 확인함 .
↑ “ A pure-Rust implementation of group operations on ristretto255 and Curve25519” . 《 깃허브 》 . 2021년 4월 14일에 확인함 .
↑ “ Ed25519.java” . 《 GitHub》 . 2021년 10월 13일.
↑ Straub, Andreas (2015년 10월 25일). “ OMEMO Encryption” . 《 conversations.im》 .
↑ “ bitchat/BRING_THE_NOISE.md at 079f36664caf1d1deb0af56e596e3bffbc7dde1b · permissionlesstech/bitchat” (영어). 《 GitHub》 . 2025년 7월 19일에 확인함 .
↑ “ Cryptocat - Security” . 《 crypto.cat》 . 2016년 4월 7일에 원본 문서 에서 보존된 문서. 2016년 5월 24일에 확인함 .
↑ Frank Denis. “ DNSCrypt version 2 protocol specification” . 《 깃허브 》 . 2015년 8월 13일에 원본 문서 에서 보존된 문서. 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》 . 2017년 12월 9일에 원본 문서 에서 보존된 문서. 2014년 12월 11일에 확인함 .
↑ zzz (2014년 9월 20일). “ 0.9.15 Release - Blog” . 2014년 12월 20일에 확인함 .
↑ “ go-ipfs_keystore.go at master” . Github.com. 2022년 3월 30일.
↑ “ Apple Platform Security” . 《 Apple Support》 .
↑ “ MRL-0003 - Monero is Not That Mysterious” (PDF) . 《 getmonero.com》 . 2019년 5월 1일에 원본 문서 (PDF) 에서 보존된 문서. 2018년 6월 5일에 확인함 .
↑ Murenin, Constantine A. (2014년 1월 19일). Soulskill (편집). “ OpenBSD Moving Towards Signed Packages — Based On D. J. Bernstein Crypto” . 슬래시닷 . 2014년 12월 27일에 확인함 .
↑ Murenin, Constantine A. (2014년 5월 1일). timothy (편집). “ OpenBSD 5.5 Released” . 슬래시닷 . 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” . 슬래시닷 . 2014년 12월 26일에 확인함 .
↑ “ How does Peerio implement end-to-end encryption?” . 《 Peerio》 . 2017년 12월 9일에 원본 문서 에서 보존된 문서. 2015년 11월 4일에 확인함 .
↑ “ Proton Mail now offers elliptic curve cryptography for advanced security and faster speeds” . 2019년 4월 25일.
↑ “ PuTTY Change Log” . 《 www.chiark.greenend.org.uk》 .
↑ Steve Gibson (December 2019). “ SQRL Cryptography whitepaper” (PDF) .
↑ “ Threema Cryptography Whitepaper” (PDF) .
↑ “ Viber Encryption Overview” . Viber. 2016년 5월 3일. 2016년 9월 24일에 확인함 .
↑ Nidhi Rastogi; James Hendler (2017년 1월 24일). “ WhatsApp security and role of metadata in preserving privacy” . arXiv :1701.06817 [cs.CR ].