大家對於「密碼」並不陌生,生活中總是遇到許多場合需要用到密碼,然而「加密」的原理似乎相對的卻不是那麼的備受關注。
Encrypt (加密)
從古至今,人們總是在通訊、隱私上想盡各種方法來提供擁有一定安全性的保護,例如戰國時期傳送密報,為了防止可能含有機密的信件被敵軍攔截,因此需要將內容給加密,這麼一來即使信件落入敵軍手中,也不能被解讀。
在隱私上,相信大家也不陌生,現在網上許多服務都需要註冊會員,帳戶就需要設定密碼來驗證使用者的身份。
- 加密 (Encrypt)
以加密訊息為例,尚未加密的訊息,也就是一般可以被大家讀懂的訊息,我們稱作「明文 (Plaintext)」,而在經過演算法加密 (鑰匙)後所產出的結果,也就是不可被其他人解讀的加密訊息,則稱作「密文 (Ciphertext)」,並且上述這整個過程稱為「加密 (Encrypt)」。
- 解密 (Decrypt)
正常來說,明文使用「鑰匙」加密成密文,而密文也必須是擁有相對應鑰匙的人才能解讀內容,這邊所說的「鑰匙」並非是指現實中常見的那種開鎖的鑰匙,此指的鑰匙通常是一個數學算式或是一段文字,而這個鑰匙則是解開密文的關鍵,且該鑰匙我們稱作「密鑰 (Key)」,利用該密鑰來將密文還原成明文的過程則稱作「解密 (Decrypt)」。
Symmetric-key Algorithm (對稱加密)
「Symmetric-key Algorithm (對稱加密)」為一種常見且原理簡單的加密思維,注意,它並不是加密法,它只是一個思維,在對稱加密中,上述的「密鑰」有個特點,就是加密跟解密的密鑰為同一把鑰匙,這邊使用情境來說明下什麼叫做「同一把鑰匙」:
- 假設情境
A先生因為某些原因,經常需要請B先生代傳訊息給C小姐,但同時A先生又不希望B先生知道該訊息的內容,因此A先生決定使用對稱加密來傳送訊息。
- 定義密鑰 並 共享
首先,A先生需要設計至少一個密鑰,他將密鑰設定成數字「2」,並且在一開始的時候A先生需要想辦法將該密鑰親手交給C小姐,並且自己也保留一把一樣的密鑰。
- 加密 並 傳送
前置作業完成後,接著A先生想傳送一則訊息,其內容為「Hello, 123」,他將該明文使用密鑰加密,加密方法為將文字往後推移密鑰數,例如該情境中,密鑰為「2」,則英文「A」往後推2次變成「C」,數字「3」往後推2次則是「5」,以此類推,因此明文「Hello, 123」加密後會變成「Jgnnq, 345」,他將該密文請B先生代傳給C小姐,由於B先生沒有密鑰「2」因而不懂該密文的含意。
- 接收 並 解密
C小姐在收到密文後,使用同一把密鑰「2」解密,加密為往後推移,解密則為往前推移,因此密文「Jgnnq, 345」在被C小姐往前推移2次後,解密回明文的「Hello, 123」。
這其中包含一個問題,為什麼A先生與C小姐知道怎麼使用該密鑰加密與解密,是誰規定「加密為往後推移密鑰數」及「解密為往前推移密鑰數」?
其實這些密鑰的「使用規則」被稱作「加密演算法 (Encryption)」或稱「加密法」,加密演算法也正是決定該加密安全性的關鍵之一。因此其實在A先生將密鑰交給C小姐時,有偷偷說了要使用哪種加密法,這樣雙方才能正確的運用密鑰進行運算來達到加密及解密的效果。
總結
當然,上面的情境只是舉例,僅僅是為了讓大家方便理解而虛構的場景,一般常見的加密演算法不會設計的這麼弱,也更不應該出現密鑰只有一個數字這種誇張的狀況,而密文通常也並不會與明文有著如此明顯的結構關係,通常只是亂碼,例如「Hello, 123」加密後的結果可能會長這樣「1d5F68ghY8Xa59U6」而不是「Jgnnq, 345」。
有興趣的朋友也可以看看下一篇延伸對稱加密更進階的文章「Public-key Cryptography (非對稱加密)」。
P.S. 對稱加密中常見的加密演算法有:
DES、3DES、AES、Blowfish、IDEA、RC5、RC6。
有興趣的朋友可以點擊連結或自行上網研究。