Ccmmutty logo
Commutty IT
2 min read

ディフィーヘルマン鍵共有をコーヒーで

https://cdn.magicode.io/media/notebox/dragonfly-ave-pTZJTasRzY0-unsplash.jpg
暗号化を描いても鍵をどうやって渡せばいいの?となります。
TCPを覗かれたらPPAPだからです。
そこで編み出されたのが共通鍵の交換方法です。
p = helper.gen_prime 32
g = 2n
seca = helper.gen_prime 16
secb = helper.gen_prime 16
a = g ** seca % p
b = g ** secb % p
ka = b ** seca % p
kb = a ** secb % p

console.log "ka", ka.toString(16)
console.log "kb", kb.toString(16)
ka 5df54a61
kb 5df54a61
計算方法は難しいものではなくこれだけです。 詳しく解説します。
まず公開する素数pと数値gをきめます。
p = helper.gen_prime 32
g = 2n
p 2827174543
g 2
次に、Xはsec_aを決め、Aを作成します
seca = helper.gen_prime 16
a = g ** seca % p
seca 33757
a 866fb924
Yも同様にsec_bを決め、Bを作成します
secb = helper.gen_prime 16
b = g ** secb % p
secb 54361
b 41fd543f
これで一見関係なさそうなAとBが作成できました。
このAとBを交換します。
その後、受け取ったものとsec_*から共通鍵を作成します
ka = b ** seca % p
ka 29ad564a
kb = a ** secb % p
kb 29ad564a
このようにお互いに鍵となる情報を渡さずに
同一の鍵を得ることができました。

Discussion

コメントにはログインが必要です。