TLS (Transport Layer Security)是一種加密的安全協定,被用在加密的網路傳輸,本篇會介紹TLS的handshake(握手機制),以及其中的使用的演算法Diffie Hellman Algorithm。
本篇第一段以擬人的描述說明鑰匙交換的概念,第二段展示演算法的數學。
案例中以Alice 、Bob作為主角,進行加密的溝通。
第一步Alice會先跟Bob約定用某一個鑰匙加解密,這個公鑰(public key)稱為鑰匙p,此時Alice以及Bob會各自產出一把私鑰,安全的保存在各自的電腦,分別為鑰匙a、鑰匙b。
再來Alice要對Bob進行加密溝通前,會把私鑰a跟鑰匙p合成的鑰匙ap,傳遞給Bob,Bob將收到的鑰匙ap加上自己的私鑰b再合成鑰匙abp ,而Bob也回傳給Alice一把由私鑰b跟鑰匙p合成的鑰匙bp,同樣Alice將鑰匙bp加上自己的私鑰a合成鑰匙abp,最終得到Alice及Bob都同時擁有鑰匙abp,他們就可以開始進行加密傳遞訊息了。
數學上公鑰會用質數p,元根g來作為數字
假定Alice & Bob決定用p=23 g=5約定,Alice選擇一個數字a=6,
計算A=g^a mod p=8後傳給Bob,Bob挑選數字b=15
計算B=g^b mod p=19 送給Alice
此時Bob和Alice可以利用已經約定好的p, g以及對方傳來的A,B算出一個只有對方知道的密鑰K
算式:
K=A^b mod p=(g^a mod p)^b mod p =g^ab mod p
= B^a mod p =(g^b mod p)^a mod p
Alice用 B^a mod p = 19⁶ mod 23 算出K=2
Bob用A^b mod p=8¹⁵ mod 23 算出K=2
實務上a, b, p的數字都會非常大,在a,b 是100位數,p 是300位的質數情況下,破解這段方程變得幾乎不可能。
Reference: https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange