Curve25519
暗号学において、Curve25519とは128ビットのテンプレート:仮リンクテンプレート:Efnを提供する楕円曲線であり、楕円曲線ディフィー・ヘルマン鍵共有 (ECDH) で使用するために設計されている。最も処理の速い楕円曲線暗号 (ECC) の楕円曲線での1つであり、これをカバーする特許は知られていない[1]。リファレンス実装はパブリックドメインである[2]。
オリジナルの論文では、Curve25519はディフィー・ヘルマン鍵共有 (DH) 関数の名前として定義していた。ダニエル・バーンスタインがCurve25519をその基本となる楕円曲線の名前で使用することを提案して以来、DH関数についてはX25519と呼ばれている[3]。
数学的性質
この曲線は素数 テンプレート:Mathにおけるモンゴメリ曲線 テンプレート:Mathを使用している。また、基点 テンプレート:Mathも使用している。この基点は位数 を持つ[4]。
このプロトコルは圧縮された楕円上の点 (X座標のみ) を使用しているので、XZ座標のみを使用して、ECDH用のテンプレート:仮リンクを効率的に使用することができる[5]。
Curve25519は実装時における潜在的な欠陥の可能性を回避するように構築されている[6]。設計上、タイミング攻撃の影響を受けず、有効な公開鍵として32バイトの文字列を受け入れる。検証は不要である。
この曲線は、Ed25519で使用されているテンプレート:仮リンクと双有理同値である[7]。
歴史
Curve25519はダニエル・バーンスタインによって2005年にリリースされたが[4]、テンプレート:仮リンクにアメリカ国家安全保障局 (NSA) が使用するバックドアが存在する可能性があることが判明した2013年以降にこの曲線への関心が高まった[8]。直接関係はないが[9]、アメリカ国立標準技術研究所 (NIST) のP楕円曲線[10]のシード値に[11]、NSAが公開鍵の因数分解をする上で有利となる値を選択したという疑惑が持たれた[12][13]。
それ以来、Curve25519はP-256の事実上の代替手段となり、幅広い用途で使用されている[14]。2014年以降、OpenSSHのデフォルトはCurve25519ベースのECDHである[15]。
2017年、NISTはCurve25519とCurve448がSP 800-186に追加されることを発表した。これによって合衆国政府によって使用される承認された楕円曲線として指定されることになる[16]。どちらの楕円曲線もRFC 7748で説明されている。2019年、FIPS 186-5の2019年の草稿ではデジタル署名としてEd25519の利用が[17]、SP 800-186の草稿ではCurve25519の利用が[18]それぞれ追加されている。
2018年、ドメインキー・アイデンティファイド・メール (DKIM) の使用はこのアルゴリズムによる署名ができるように修正された[19]。
2018年に公開されたTransport Layer Security (TLS) 1.3では、X25519、Ed25519、X448、Ed448の利用が推奨されている[20]。
ライブラリ
- テンプレート:仮リンク[21]
- libssh[15][22]
- NaCl[23]
- GnuTLS[24]
- テンプレート:仮リンク (formerly PolarSSL)[25]
- wolfSSL[26]
- Botan[27]
- SChannelテンプレート:Efn[28]
- libsodium[29]
- OpenSSL since version 1.1.0[30]
- LibreSSL[31]
- NaCl for Tcl — a port to the Tcl language.[32]
- NSS since version 3.28[33]
- テンプレート:仮リンク
プロトコル
- テンプレート:仮リンク - XMPP (Jabber)のために提案された拡張[34]
- Secure Shell
- Signalプロトコル
- Tox
- Zcash
- Transport Layer Security
アプリケーション
- テンプレート:仮リンクテンプレート:Efn
- テンプレート:仮リンク[35]テンプレート:Efn
- DNSCrypt[36]
- DNSCurve
- Dropbear[22][37]
- Facebook Messenger テンプレート:Efnテンプレート:Efn
- プラグイン経由のテンプレート:仮リンク[38]テンプレート:Efn
- GNUnet[39]
- GnuPG
- テンプレート:仮リンクテンプレート:Efnテンプレート:Efn
- I2P[40]
- IPFS[41]
- iOS[42]
- Monero[43]
- OpenBSDテンプレート:Efn
- OpenSSH[22]テンプレート:Efn
- テンプレート:仮リンク[44]
- PuTTY[45]
- Signalテンプレート:Efn
- Silent Phone
- SmartFTP[22]
- SSHJ[22]
- テンプレート:仮リンク[46]
- TinySSH[22]
- TinyTERM[22]
- Tor[47]
- Viber[48]
- WhatsAppテンプレート:Efn
- Wire
- WireGuard
脚注
注釈
出典
関連項目
外部リンク
- ↑ テンプレート:Cite web
- ↑ 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. "
- ↑ テンプレート:Cite web
- ↑ 4.0 4.1 テンプレート:Cite conference
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite conference
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ https://safecurves.cr.yp.to/
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ 15.0 15.1 テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite journal
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite IETF
- ↑ テンプレート:Cite IETF
- ↑ テンプレート:Cite web
- ↑ 22.0 22.1 22.2 22.3 22.4 22.5 22.6 テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ https://github.com/ipfs/go-ipfs/blob/master/core/commands/keystore.go#L68
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web