前幾天看密碼學的書介紹了一次性密碼本
,覺得很有意思
世界上絕大部份的密碼,只要使用暴力破解法去嘗試所有的排列組合
一定會有被猜中的一天(假如今天存在一台運算速度極快的電腦)
可是一次性密碼本
特別之處就在於就算嘗試所有的排列組合
也無法確認哪組是正確的解密結果
一次性密碼本
的特性:
- 顧名思義是一次性使用,使用後必須銷毀
- 密碼必須是真隨機數組成的(True Random Number)
- 密碼與明文必須等長
範例
小明今天想使用一次性密碼本
加密明文「21:30」給小華告訴他會面的時間
「21:30」以ASCII code顯示的二進位為:
00110010 00110001 00111010 00110011 00110000
加密採用小明與小華約定好的一次性密碼:
00101010 00111011 01100100 01011110 00100001
經過一個位元對一個位元進行XOR
運算出來的密文為:
XOR)
00110010 00110001 00111010 00110011 00110000 「21:30」明文
00101010 00111011 01100100 01011110 00100001 約定好的一次性密碼
_________________________________________
00011000 00001010 01011110 01101101 00010001 加密後的密文
今天就算傳輸過程中,密文被竊聽了
竊聽者擁有世界上速度最快的電腦可以在1分鐘內把所有排列組合跑過一遍
竊聽者還是沒辦法得知到底哪個才是正確解密的明文
因為嘗試過程中,各種ASCII code編碼的字元都有可能出現
竊聽者無法得知哪組才是正確的解密結果
例如:
XOR)
00011000 00001010 01011110 01101101 00010001 竊聽到的密文
00101000 00111011 01100100 01011101 00100001 嘗試的密碼
_________________________________________
00110000 00110001 00111010 00110000 00110000 解密結果
上面解密結果的二進位碼換成ASCII code編碼是「01:00」
又或者
XOR)
00011000 00001010 01011110 01101101 00010001 竊聽到的密文
00101000 00111000 01100100 01011101 00100001 嘗試的密碼
_________________________________________
00110000 00110010 00111010 00110000 00110000 解密結果
這樣解密結果的二進位碼換成ASCII code編碼就變成「02:00」…
依此類推,甚至連「apple」、「lemon」等等各種單字都會出現
所以一次性密碼本
絕對無法破解
缺點
雖然一次性密碼本
無法被破解,但因為太難用了,所以沒有成為主流加解密演算法
就剛剛提到它的特點之一:密碼與明文必須等長
假設明文50MB,那密碼也會是50MB
而且如果小明與小華沒有事先約定好一次性密碼,那小明加密後要怎麼把密碼安全地讓小華知道呢
如果小明有辦法安全地傳送與明文等長的密碼,那為什麼就不用此方法傳送明文呢