大家好,今天要來和大家聊聊現代密碼學中的「對稱式加密」和「非對稱式加密」是什麼東西,他的原理、過程、標準等又是什麼
那麼,我們就先來講對稱式加密!
「對稱」一詞,指的是上下、左右對折後會重疊,那如果用在密碼學,就是指 「加密」和「解密」都使用「同一把」金鑰
舉個例子,假設海綿寶寶今天用對稱式加密傳了一封明文給章魚哥,加密的金鑰為 key A
那章魚哥也要有一把 key A,這樣才能把「密文」解密成「明文」
Wiki裡有寫,對稱式加密常見的演算法有AES、ChaCha20、3DES、Salsa20、DES、Blowfish、IDEA、RC5、RC6、Camellia
等
這邊挑兩個較具代表性的來聊聊,分別是DES
和AES
DES(Data Encryption Standard)
在早期(1970年)是對稱式加密的標準,但因為它金鑰 key 的長度不夠長(只有56位元),對現在的電腦運算速度來說,很快就能被破解,所以目前已經不是安全的加密方法
DES
成功被破解後,取而代之的就是AES(Advanced Encryption Standard)
,它金鑰 key 的位元長度一定要是128/192/256(最短就是128)
,128位元以目前的電腦運算速度來說還沒辦法破解(但不代表未來不會,因為電腦的效能一直在變強)
不過以目前來說是不需要太擔心的,因為有專家指出,AES 取代 DES 成為加密標準後(2001年),至少能撐個30年左右
,而透過 AES 進行加密的資料,在這100年內是不會被破解成功的
當然是真的,我們要相信專家說的話!
但對稱式加密有個很大的問題在,就是:「和每個人進行加密的金鑰key都不一樣,不能使用同一把key,不然加密的內容會被其他人知道,因此一個人需要管理很多把key」
所以海綿寶寶如果想和派大星進行加密,就要一把,如果想跟珊迪加密,就要再一把
這樣在金鑰管理上非常的麻煩,因此大家就開始想:「能不能讓管理的金鑰數變少,但依然能有效的進行加密?」
於是,「非對稱式加密」誕生了!
「非對稱」就是「對稱」的反義詞,所以用在密碼學就是 「加密」和「解密」使用的是「不同把」金鑰
這時一個人只需要管理兩把鑰匙就好,分別是「公開金鑰(Public-key)」和「私密金鑰(Private-key)」
把剛剛對稱式加密的例子改成非對稱式加密,就會長成這樣
相反的,如果章魚哥想加密明文給海綿寶寶,就要使用海綿寶寶的公開金鑰key A
,而海綿寶寶如果想將密文解密,就要使用他的私密金鑰key B
:所以使用非對稱式進行加密時,應該要使用哪一把金鑰進行加密呢?
答案是公開金鑰(Public-key)
,而且是使用「對方」的
而對方如果要進行解密,就要使用他「自己」的私密金鑰(Private-key)
非對稱式加密有一個很著名的方法,叫RSA加密
,是由羅納德·李維斯特(Ron Rivest)
、阿迪·薩莫爾(Adi Shamir)
和倫納德·阿德曼(Leonard Adleman)
共同發明的,因此取他們姓氏的開頭來命名,就叫RSA
這是他們的臉,供大家參考參考
RSA
主要是對一個極大的整數做因數分解,越難找到這個數的值,就代表它越安全可靠,而那個整數通常會選擇「兩個大質數的乘積」
為什麼呢?因為兩個大質數要做相乘很容易,但給它們的乘積,並做因式分解就不那麼容易了,而且因式分解目前只能透過暴力法
一個一個去試,因此執行速度相當的慢
但如果今天因式分解有辦法找到一個「快速的方法」執行,那也就代表破解了RSA加密法
整體來說,「非對稱式加密」在金鑰管理上比較方便,且安全性也高於「對稱式加密」
但因為「對稱式加密」的金鑰長度較短,所以執行速度較「非對稱式加密」快
目前實務上是「兩者交替使用」,也就是「HTTPS的SSL協定
」(這部分我們後面會再獨立一篇講)
因為全部使用對稱式加密安全性太低,而全部使用非對稱式加密又執行太久,所以要各取所好,才能在運算「速度」和「安全性」上取得平衡,因為他們都「同等重要」
以上就是今天的介紹
希望大家看完能對「對稱式加密」和「非對稱式加密」更加了解