iT邦幫忙

2024 iThome 鐵人賽

DAY 21
1
Software Development

從零開始的後端學習之旅系列 第 21

DAY 21 編碼與加密:看似相似卻大相逕庭的兩種技術

  • 分享至 

  • xImage
  •  

前言

昨天的文章提到了編碼是什麼、會使用到編碼的原因以及常用的編碼方式。那麼,常常與編碼一起提到的加密又是什麼呢?它們之間有什麼差別嗎?那就讓我們看下去吧!
/images/emoticon/emoticon42.gif

加密是什麼?

先來看一段維基百科對於加密的敘述吧!

Until modern times, cryptography referred almost exclusively to "encryption", which is the process of converting ordinary information (called plaintext) into an unintelligible form (called ciphertext).Decryption is the reverse, in other words, moving from the unintelligible ciphertext back to plaintext. A cipher is a pair of algorithms that carry out the encryption and the reversing decryption. The detailed operation of a cipher is controlled both by the algorithm and, in each instance, by a "key". The key is a secret (ideally known only to the communicants), usually a string of characters (ideally short so it can be remembered by the user), which is needed to decrypt the ciphertext.

內容寫的很長,不過其實要表達的是,加密的過程就是將我們所看到的一般內容(也就是明文)透過密鑰轉換成另外一種形式(也就是密文),解密則是反向的過程,將密文透過密鑰轉換成明文,這段過程是可逆的。所謂的密碼(cipher)就是將明文加密或解密的演算法,密鑰(key)則是將用來加密或解密的鑰匙。加密又主要分成對稱式加密以及非對稱式加密。

加密跟編碼又有什麼差異?

乍看之下,昨天的文章跟上面的敘述,編碼跟加密都是將輸入的原文轉換成另外一種格式,而且都是可逆的。這一度讓我有點困惑,覺得兩個概念好像是一樣的,不過當成是同樣的東西感覺又不太對,直到我用以下的方式去理解才對於兩者的差別有比較清楚的認知:

   當我今天在交友軟體上遇到一位日本人時,我們互相按了愛心,這樣就可以開始聊天了。我想打個招呼,但他無法理解我打的中文。於是,我需要先查中日字典,看看「你好」的日文是什麼,然後將我的中文轉換成日文發送給他,這樣他才能理解我說了什麼。可是如果我把訊息傳給錯的人,只要他知道這是什麼語言,他也可以知道我傳了什麼內容。

這就像是編碼的過程,我們人類可讀的訊息,電腦無法理解,電腦只看得懂二進位制的東西(0、1),因此我們要傳送數據給電腦時,要先將數據轉換成電腦可讀的二進位制,這樣電腦才知道我們要表達的東西是什麼,同樣只要其他人或是電腦窺探到數據,只要知道是用什麼方式進行編碼,也可以解讀出內容,因為編碼方式都是公開可以查到的。

    我今天有一份機密文件需要交給客戶,但內容必須保密。因此,當我出門時,我會將這份文件鎖進一個提箱中攜帶,而打開提箱的鑰匙只有我和客戶擁有。這樣可以有效避免在路上遺失或被外人窺探內容。直到我與客戶見面後,他才會使用他的鑰匙打開提箱。

這就像是加密。當內容經過加密後,只有擁有密鑰(提箱鑰匙)的人才能解開並得知內容是什麼。密碼(cipher)就像是提箱鎖的結構,而密鑰則是根據提箱鎖的結構所決定的鑰匙。

加密的種類

加密主要又分為兩種類別,分別是對稱式加密與非對稱式加密,以下會個別介紹:

  1. 對稱式加密(Symmetric Encryption):就像是一般的門鎖與鑰匙一樣,打開門以及鎖門的鑰匙會是同一把,這就是對稱式加密,加密與解密使用的是同一個密鑰,如果要讓對方能夠解密的話,必須要先提供自己的密碼,而密碼在傳輸過程要如何不被外洩就是一個很大的問題。常見的對稱式加密有AES(進階加密標準)、DES(資料加密標準)等。

  2. 非對稱式加密(Asymmetric Encryption):每個人都會有一把公鑰與私鑰,公鑰是公開的,任何人透過查詢都可以知道,而私鑰必須保密,只有自己能夠知道。公鑰與私鑰就像是信箱與信箱的鑰匙,每個人都會知道你的信箱地址(公鑰)並且寄信給你,而只有你自己才有信箱的鑰匙(私鑰)可以打開信箱並且閱讀信件的內容。當發送方與接收方要交換訊息時,會先交換雙方的公鑰,發送方再用接收方的公鑰加密後傳送給接收方,因為只有接收方有私鑰可以進行解密,所以不用擔心發送過程中被第三人得知訊息內容,而接收方收到訊息後要回傳也是同理。常見的非對稱式加密有RSA、ECC等。

對於網路上的用戶們來說,如果使用對稱式加密進行傳輸明顯是很不安全的,傳送前發送方必須先告知接收方自己的密鑰是什麼,而密鑰在傳送過程中是否能保證其不被外洩是不太可能的,因此 HTTPS 協定在加密時是採用非對稱式加密進行傳輸。這樣聽起來透過非對稱式加密傳送訊息,就是很安全的了,不過會不會有可能發生以下狀況:

    今天 A 跟 B 正在互相傳送訊息中,此時出現一個惡意的第三人 C ,C 冒充成 B並使用 A 的公鑰加密一個病毒訊息並傳送給 A ,此時 A 就理所當然的將訊息解密,結果電腦就中毒了QQ

此時就需要進行 Double check 以確認訊息是來自正確的發送者,也就是在發送者傳送訊息前,需要先用自己的私鑰對該訊息進行簽章後,再使用接收方的公鑰進行訊息加密,此時接收方受到訊息後,就可以先使用發送方的公鑰進行檢查訊息是否來自於正確的發送方,再對訊息進行解密,以避免遭到惡意第三人攻擊。

小結

今天介紹了關於加密的定義以及種類,並整理了加密與昨天提到的編碼有什麼區別,明天就會介紹到另一個很常一起提到的名詞--雜湊啦~這也是很常會被跟加密搞混的東西,明天就一起來搞清楚吧!
/images/emoticon/emoticon07.gif

參考資料

維基百科-加密
維基百科-密碼學
MDN


上一篇
DAY20 揭開編碼的神秘面紗:為什麼它不是加密?
下一篇
DAY22 雜湊 vs. 加密:讓我們釐清這兩者的迷思
系列文
從零開始的後端學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言