RSA的加密法。
Zed 和 Abigail 兩兄妹共享一個銀行戶頭。他們分別住在兩個地方,Zed 最近剛把密碼改成1482,他想把這個數字加密後用email送給妹妹Abigail。Zed 和 Abigail 之前並未共享過密鑰,無法用需要事先共享密碼的AES加解密。
Zed 和 Abigail 就用了RSA的方法。
首先是由Abigail 產生公錀和私錀,公錀寄給哥哥Zed,私鑰自己保留著。
步驟1
Abigail 選擇2個質數,假設是97和113。
步驟2
Abigail 取得質數乘積=97*113=10961
步驟3
Abigail 算出質數乘積 10961的totient。
Totient 的定義:對一個數字N,它的totient 就是比數字N小,而且與N互質之數字的數量。
因為Abigail 知道10961 是質數97和113的乘積,所以10961的totient 就是質數各減1的乘積,(97-1)•(113-1)=10752。
如果不知道10961 是質數97和113的乘積,那麼就得費很大的功夫,如果那個質數乘積很大,那麼要算出totient 在實務上基本是不可能的。
步驟4
Abigail 選擇一個數字,滿足以下條件:
1. 大於1
2. 小於totient
3. 與totient 互質
假設Abigail 選擇了5。
Abigail 可以用email 把5分享給Zed,所以我們稱之為公鑰。
步驟5
Abigail 必須選擇一個私鑰。
把totient 的整數倍加1,如果可以被公鑰整除,那麼得到的商數就是私鑰了。
譬如,(10752*2+1)/5=4301….0
所以4301就是私鑰了。
哥哥Zed 接到 妹妹Abigail 用email 送來的質數乘積 10961 和公錀5之後,對要與妹妹分享的密碼1482進行加密程序。
步驟1
Zed 將密碼1482自我連續乘,次數依照公錀的數字。
1482^5=7148929565430432
步驟 2
將步驟1得出的數字,除以質數乘積,得出餘數:
7148929565430432 mod 10962 = 2122。
2122 就是1482加密的結果,Zed 把2122寄給 Abigail。
步驟 3
Abigail 用私鑰解密:用密文2122為底,私鑰4301為指數,算出一個天文數字。
天文數字=2122^4301
步驟 4
天文數字除以質數乘積的餘數,就是1482。
(2122^4301) mod 10962=1482
1482 就是Zed要跟Abigail 分享的密碼了。解密完成!
RSA的加減密的方式,只要透過電腦就很容易完成,最主要是收受密文的一方,已經知道那個質數乘積是由哪兩個質數相乘而得。如果質數乘積很大,一般是很大,要找出它的Totient在實務上基本是不可行的。況且駭客也無從知道私鑰是什麼呢!
Zed 和Abigail 之間的傳輸,基本上是由收受方先產生公錀和私錀,把公鑰和質數乘積透過網路明文與發送方分享。發送方用公錀和質數乘積把電文加密為密文透過網路送給收受方。收受收到密文再用私鑰和指數乘積解密。兩方不必共用一個事先知道的密碼加解密。
很神奇吧!
HTTPS。
另外,您輸入敏感資料的網站的安全是HTTP(HyperText Transfer Protocol)還是 HTTPS (HyperText Transfer Protocol Secure) 呢?HTTPS 就代表那個網站的資料在傳輸時有加密。
網路上的資訊會經很多不同的ISP(Information service provider),資料經過有加密功能的網站才安全,那麼透過ISP的中間人攻擊,駭客面對的是加密的資料,也就是說無法得逞了。
差一個S差很大喔!
*:摘錄自《讓世界方便的科技魔法》,V Anton Spraul 著,藍子軒 譯
2020/1/16 加密 Damakey

