一次性密碼本:窮舉也破解不了的密碼

前幾天看密碼學的書介紹了一次性密碼本,覺得很有意思

世界上絕大部份的密碼,只要使用暴力破解法去嘗試所有的排列組合

一定會有被猜中的一天(假如今天存在一台運算速度極快的電腦)

可是一次性密碼本特別之處就在於就算嘗試所有的排列組合

也無法確認哪組是正確的解密結果

 
一次性密碼本的特性:

  • 顧名思義是一次性使用,使用後必須銷毀
  • 密碼必須是真隨機數組成的(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

而且如果小明與小華沒有事先約定好一次性密碼,那小明加密後要怎麼把密碼安全地讓小華知道呢

如果小明有辦法安全地傳送與明文等長的密碼,那為什麼就不用此方法傳送明文呢


發佈留言