【スポンサーリンク】

Diffie-Hellman鍵共有

この項目は、随時追記します。なにかのヒントになれば嬉しいです。

Diffie-Hellman鍵共有
  • Diffie-Hellman鍵共有」は、安全が確認できていない通信経路でも、送信者と受信者だけの暗号通信を開始するための方法です。
  • 送信者と受信者がお互いに公開してもよい情報を共有することで、それぞれ自分で秘密の鍵を計算します。
  • 秘密鍵の共有ができたら、それを使ってメッセージを暗号化(読めなくする)や復号(読めるように戻す)をします。
Diffie-Hellman鍵共有

どうでもいいけど、「ディフィー・ヘルマン」という響きがかっこいいよね。

\記事が役に立ったらシェアしてね/
【スポンサーリンク】

1. 「離散対数」によるDiffie-Hellman鍵共有の手順

「Diffie-Hellman鍵共有」の特徴は、秘密の鍵そのものはインターネットなどの通信経路で送らないことです。

「離散対数」によるDiffie-Hellman鍵共有の手順

えー、でも「暗号鍵を送っていないのに共有できている」なんて、そんな都合の良い話があるの?

「Diffie-Hellman方式」で利用するのは、
指数 xy を素数 p で割った余り z についての性質1

x y = z   m o d   p

この z は、残りの3つ (x, y, p) がわかれば すぐに計算できます。
しかし、y は、(x, z, p)がわかっても、かんたんには計算できません(特に p が大きくなると)。

「離散対数」によるDiffie-Hellman鍵共有の手順

つまり、この y が秘密の鍵に使えそうです。

Diffie-Hellman鍵交換

「Diffie-Hellman鍵共有」は、”Diffie-Hellman key exchange”の訳です。
「Diffie-Hellman鍵交換(DH法)」などとも呼ばれます。

ウィットフィールド・ディフィーとマーティン・ヘルマンの二人によって1976年に提案されました。

1-1. お互いに秘密の整数を決める

「Diffie-Hellman方式」は、

A・B 2人だけに共通の y を、
他人に知られずに作るための手順。

まず、A・B の2人は 整数x と 素数p を決めます。
これは他人に知られても大丈夫。

Aさんは、2〜pまでの間に秘密の整数 a を決めます。
一方、Bさんも同様に秘密の整数 b を決めます。
a, b は復号に使う情報なので秘密です。

1-2. 公開鍵を作ってやり取りする

2人は、それぞれ xy mod p の y に自分の数を入れて計算します。

  • E = xa mod p
  • F = xb mod p

計算した結果 E, F をそれぞれ相手に教えます。
これの情報からは a, b を求めるのは困難なので、他人に知られても大丈夫。

1-3. 公開鍵と秘密鍵から共通秘密鍵を計算する

さて、Aさんは、Bさんから受け取った F と a, p を使って、ある計算をします。

G = Fa mod p

Bさんも E と b, pを使って、同様の計算をします。

H = Eb mod p

さて、2人が別々に計算した G と H は、実は同じ数字になっています。
いずれも、(xab) mod p の結果だからです。

H = Eb mod p
= (xa)b mod p
= (xb)a mod p
= Fa mod p
= G

1-4. 第三者からは解読できない

一方、第三者から見えるのは、AさんとBさんがやり取りした x, p, E, F の4つの数字だけです。

x, p, E, Fから a, b または G のどれかを求めることができるか」というのが暗号の解読です。
しかし、この問題は p が大きくなると困難なことがわかっています。
結局、(E, x, p)からa、(F, x, p)からbを求めるのと同じだからです。

どれぐらい大きな素数?

たとえば、「diffie-hellman-group1-sha1」で使われている素数は、
16進数表記で256桁の

「FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF」

という非常に大きな数です。

1〜この素数までの間にある y を突き止めるには、膨大な検算を繰り返す必要があり、時間がかかりすぎるのです。

ということで、晴れてAさんとBさんだけが共通に知る数 G ができました。
この G を共通の秘密鍵にして暗号通信を行います。

第三者からは解読できない

すごい!
素数の性質って、面白いね。

2. 楕円曲線Diffie-Hellman鍵共有

これまでの説明では、イメージしやすい「離散対数」による方式を見ましたが、Diffie-Hellman方式には、離散対数と楕円曲線計算の2種類の数学的技術を使った実装方法があります。

楕円曲線上の演算関係を利用する方法でも、「こっちは計算しやすいが、逆は計算しにくい」という性質を利用する点は同じ理屈になっています2

楕円曲線Diffie-Hellman鍵共有

さすがに頭がパンクしました。
楕円曲線Diffie-Hellman鍵共有(ECDH)」については、また後日。

こちらもどうぞ。
[LINE] レターシーリングはどんなセキュリティなの?(共通鍵交換と暗号化)
[LINE] レターシーリングはどんなセキュリティなの?(共通鍵交換と暗号化)
LINEの「レターシーリング」では、送信者・受信者の2人だけが共有する秘密鍵を、Diffie-Hellman方式で生成し、メッセージの暗号化と復号を行います。 それ以前のメッセージはLINEサーバでいったん平文にしていた送り直す方式でした……。 ちなみに、LINEの「レターシーリング」では、楕円曲線Diffie-Hellman方式。 まぁ、従来が怖い話ではあるんだけどね。 (参考) メッセージの安全性新時代:Letter Sealing レターシーリングとは? 「レターシーリ...

SSLサーバ証明書はどこに保存されているの?(証明書ストア)
SSLサーバ証明書はどこに保存されているの?(証明書ストア)
SSLサーバ証明書は、(基本的に)ウェブサーバ内の「証明書ストア」に保存されている暗号化されたファイルです。 サイトにアクセスがあると相手に提示して、通信内容が正しいことを証明するのに使われます。 YouTube動画でも話しています。 サイトがSSLサーバ証明書を取得する流れ お店のホームページを作っています。サイトの「セキュリティ保護」ができていないようなのですが、そもそもセキュリティ証明書の仕組みがよくわかりません。 どんな情報をどこに記載されていると、「セキュリティ保護...

[iPhone] 自宅のWi-Fiで「暗号化されたDNSのトラフィックをブロック」という警告が出たらどうする?(プライバシーに関する警告)
[iPhone] 自宅のWi-Fiで「暗号化されたDNSのトラフィックをブロック」という警告が出たらどうする?(プライバシーに関する警告)
急に iPhoneのWi-Fi設定に「プライバシーに関する警告」が表示されました。 DNSトラフィックの暗号化に失敗したことを示していました。 もし、公衆Wi-Fiを使っている場合なら注意が必要ですが、自宅のWi-Fiでは大きな問題ではありません。 iPhoneの要求するセキュリティの基準が上がってきました。もしかすると、今後のルーターやプロバイダーは対応するのが「スタンダード」になるかもしれません。 YouTube動画でも話しています。 似た話で「プライベートWi-Fiアド...

(補足)

  1. Diffie-Hellman鍵交換入門 #SSH – Qiita
  2. 浮輪の表面をトーラスといい、その上で足し算を考えたものが「楕円曲線」です。 – 鍵が漏れることも想定せよ――クラウド時代における「楕円曲線暗号」の必然性:クラウド時代の暗号化技術論(3)(2/3 ページ) – @IT
QRコードを読み込むと、関連記事を確認できます。

Diffie-Hellman鍵共有
【スポンサーリンク】
タイトルとURLをコピーしました