イメージでざっくり理解するECDHE(楕円曲線暗号による鍵交換)

はじめに

NTTビジネスソリューションズの平田です。

インターネットで安全に情報をやり取りするために欠かせない技術のひとつがTLS(Transport Layer Security)です。TLSでは、通信を暗号化するための共通鍵を安全に共有する仕組みとしてECDHE(Elliptic Curve Diffie-Hellman Ephemeral、楕円曲線暗号による鍵交換)が利用されています。本記事ではECDHEの仕組みをざっくりとしたイメージで解説します。 なお、この解説は直感的な理解を意図したものです。わかりやすさを優先したため、厳密さは不十分である点にご留意ください。

本記事は2025年11月時点の情報に基づきます。

対象読者

本記事が想定する対象読者は以下の通りです。

  • 情報処理安全確保支援士の学習をされている方
  • ECDHEによる鍵交換の仕組みを知りたい方

背景

NTTグループでは専門性を重視する人事制度が導入され、NTT西日本グループにおいても社員個々人の専門性がこれまで以上に重視されるようになりました。社員の専門性向上のために、会社側から各種の研修、通信教育、オンライン学習プラットフォームのアカウント提供などのサポートがあります(所属会社により多少の差異があります)。そのほかにも社内講師による勉強会やハンズオンなどが活発に開催されています。その一つとして情報処理安全確保支援士の対策講座を筆者が講師として開催し、約50名に参加いただきました。

講座の中で2025年春試験(午後問2)に関連し、楕円曲線暗号(Elliptic Curve Cryptography, ECC)を利用した鍵交換(ECDHE)の説明がわかりやすかったと好評だったので、Engineers' Blogの記事として再編集して掲載します。

TLSによる暗号化

TLS(Transport Layer Security)では、通信データの暗号化に共通鍵暗号方式が用いられ、共通鍵(本記事ではトラフィック鍵と呼びます)は公開鍵暗号方式を用いて事前に安全に共有されます。

送信者から受信者に送られるデータは、送信者側で暗号化され、受信者側で復号されます。この暗号化と復号には、送信者と受信者が共有する同一のトラフィック鍵が使用されます。

トラフィック鍵による暗号化と復号
トラフィック鍵による暗号化と復号

通信経路を流れるデータは暗号化されているため、第三者が通信を盗聴したとしても、データの内容を解読できません。しかし、第三者がトラフィック鍵を入手し通信を盗聴した場合にはデータを解読できてしまい、その結果情報漏えい(機密性の侵害)が発生する可能性があります。

そのため、トラフィック鍵は送信者と受信者以外には知られないよう、暗号化通信の開始前に安全な方法で共有する必要があります。その際に利用するのが鍵交換です。鍵交換の際には送信者と受信者の間で通信が行われますが、仮にこの通信が盗聴されたとしても、トラフィック鍵が漏えいすることはありません。この安全性は、楕円曲線暗号が基盤とする「楕円曲線上の離散対数問題の計算困難性」によって保証されます。

楕円曲線暗号の仕組み

楕円軌道上に既知の基準点Gがあります。この楕円軌道上でGをn回加算する(n倍)すると、2G、3G、…と楕円軌道上を進みます。図の2G~6Gがそれにあたり、2周目以降も楕円軌道上のどこかに位置します(7G以降も存在)。

楕円軌道
秘密鍵a(自然数)を決めGをa回加算した位置をAとすると、Aは楕円軌道上に存在します。このとき A = aG と表すことができ、Aが公開鍵になります。 a(秘密鍵)からA(公開鍵)は簡単に求めることができますが、A(公開鍵)からa(秘密鍵)を求める逆算( a = A/G )は非常に難しく、総当たり以外に効率的にaを見つける方法が知られていません。 この「逆算の難しさ」が楕円曲線暗号の安全性の根拠です。

楕円曲線暗号を利用した鍵交換

送信者αさんと、受信者βさんが鍵交換を行う手順を説明します。ここで交換する「鍵」とは、トラフィック鍵のもとになる値です。

①基準点Gの決定

αさんとβさんは基準点Gを共有します。(実際にはプロトコルとしてGがあらかじめ決まっており、お互いGを知っています)

①基準点Gの決定
①基準点Gの決定

②秘密鍵と公開鍵のペアを生成

楕円曲線暗号を使ってそれぞれ一時的な秘密鍵と公開鍵のペアを生成します。具体的には次の手順です。

αさんは秘密鍵aを決定します。aとGから公開鍵Aを生成します( A = aG )。

βさんは秘密鍵bを決定します。bとGから公開鍵Bを生成します( B = bG )。

②秘密鍵と公開鍵のペアを生成
②秘密鍵と公開鍵のペアを生成

③公開鍵の送信

αさんは自身の公開鍵Aをβさんに送信します。同様に、βさんは自身の公開鍵Bをαさんに送信します。

③公開鍵の送信
③公開鍵の送信

④共通の値Kを算出

αさんは受信したBと自身の秘密鍵aを掛け算し、Kを求めます。K = aB = a(bG) = abGです。

同様にβさんは受信したAと自身の秘密鍵を掛け算し、Kを求めます。K = Ab = (aG)b = abGです。

④共通の値Kを算出
④共通の値Kを算出
この計算によって双方が同じ値Kを算出でき、結果としてKを共有できます。このKをもとに、トラフィック鍵を生成します。

仮に第三者がこの鍵交換の通信(③)を盗聴しAまたはBを入手したとしても、Kを計算することはできません。前述の通り、公開鍵(AやB)から秘密鍵(aやb)を逆算することが難しいからです。

まとめ

ECDHEの仕組みをざっくりとしたイメージとして解説しました。厳密な解説ではない点はご容赦ください。 通信相手と同じ値を算出できる仕組みを初めて理解した際は、そのシンプルさに驚いたものです。ブラウザでリンク先を気軽にクリックする度に、このような鍵交換が行われていることを思い出していただければ幸いです。

補足

  • 直感的に理解いただけるよう楕円を利用して解説しましたが、楕円曲線と楕円は本質的に異なるものです。実際に利用される楕円曲線( y2 = x3 + ax + b )は閉じない曲線です(「Ω」に似た形状でhttps://ja.wikipedia.org/wiki/%E6%A5%95%E5%86%86%E6%9B%B2%E7%B7%9A#/media/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:ECClines-3.svgの右側の図です)。
  • 曲線を用いた解説のため実数をイメージされるかもしれませんが、実際には自然数による離散的な値を利用するのでマス目上の点の集合です。具体的なイメージはhttps://graui.de/code/elliptic2/で確認できます。G、nG、A、Bがこのマス目上の点にあたります。

  • G、2G、3G、…、と等間隔で楕円軌道上の位置が変化するような解説を行いましたが、実際の楕円曲線上では等間隔ではありません。

執筆者 

平田賀一(NTTビジネスソリューションズ(株)バリューデザイン部 システム開発部門)
PaaS/SaaSの開発・運用、社内案件のコンサル、エンジニア育成、NTT WEST Engineers' Blog運営などに携わっています。
技術士(情報工学部門)/CISSP/情報処理安全確保支援士

参考資料・出典

本記事を執筆するにあたり、以下のサイトを参考にしました。

ja.wikipedia.org

gaiax-blockchain.com

qiita.com

graui.de

© NTT WEST, Inc.