眾所周知,密碼學是數字加密貨幣的基礎,它保證了我們資產的安全,也是挖礦的底層規則。但是,大部分對密碼學知之甚少,也就很難看懂區塊鏈項目的加密方式,看不懂,就談不上對項目有什麼的信仰,只能隨波逐流的炒幣。
為了解決大家的困惑,獵豹區塊鏈將會出品一系列的密碼學文章,從最古老加密方式開始,層層深入,幫助大家理解密碼學裡的很多概念,判斷區塊鏈項目的安全性。
凱撒加密
第一種眾所周知的密碼,是公元前58年左右由凱撒大帝使用的凱撒密碼,凱撒在他的軍事命令中,將每一個字母都進行了位移,以防止他的敵人在截獲凱撒的軍事命令之後,直接獲取到他的真實情報。
凱撒加密是最簡單的加密方式,加密的雙方首先要對字母的位移數字達成共識,比如,我們約定好的加密位移的數字是3,那麼,我發送的每一個字母都要經過3個位移, (A變成D,B變成E,C變成F... ...)
假設我的明文是“attack” ,經過位移為3的凱撒加密之後,就會變成“dwwtfn”。
然後把加密過的文字通過送信人發給對方,這樣,即使敵人抓到了這個送信人,拿到的也是一堆看不懂的文字,而成功拿到密文的將軍們,再通過把密文的每個字母減3的方式,就能得到真實的明文信息,而這個過程,就稱之為解密。
凱撒密碼是最早的加密方法,被西方的軍事將領們沿用了數百年。終於在800年後,被一位名為為AI-Kindi的阿拉伯數學家破解凱撒密碼:
如果你掃描任何一部英文書的文字,然後計算出每個字母所使用的頻率,你會發現驚人的秘密,那就是在英語文字中,使用頻率最高的字母永遠是e,這是英文的文字性質決定的,而寫密文的人並不會意識到。在密碼學中,這被稱為指紋。
所以,只要我們找到密文中使用頻度最高的字母,再與字母e比較,就能找到凱撒密碼的加密位移,比如在密文中,使用頻率最高的是h,那麼,我們可以推斷,加密的位移是3,拿到加密位移,就能推斷出所有明文。
這種方式被稱為頻度分析,它的出現對凱撒密碼的安全性是非常大的打擊。
但是,一個強大的密碼是可以掩蓋這種指紋的,而掩蓋指紋的方式,就是使字母使用的頻率分佈變得均勻。
多表密碼
在15世紀左右,有人提出了多表密碼來實現這一目的,多表密碼與凱撒密碼不同的是,不在是使用單一的數字進行位移加密,而是引用一個位移單詞。
這種加密的方式的第一步,是確定這個位移單詞,假設是“world”,然後,將這個單詞根據在字母表的位置,把這個單詞轉換為數字,“world”→“21、15、 18、12、4”,接下來,把這一列數在信息編碼的過程中一直重複,把明文的信息根據這個數列進行位移。
假設明文是“abcde fghij”,經過加密之後的密文就是“vrvqj bwavo”
這樣,把密文發給同伴的時候,同伴可以根據事先約定好的秘密單詞,減去相應的位移來對信息進行解密。
假如密文被截獲,竊聽者計算出字母使用的頻率,他將會發現更平坦的分佈。
那麼他將會怎麼破解呢?
其實很簡單,大家記住,破密者尋找信息洩露,也就是尋找局部指紋,只要在字母的頻率上存在差別,就會發現信息的洩露,這個差別是由密文裡的重複引起的。
這個例子中,發布者的密碼利用了一個重複的單詞,為了破解加密,竊密者首先需要確定所使用的位移單詞的長度,而不是單詞本身,他需要對全部信息進行統計,檢查不同間隔的頻率分佈,當他檢查以5個字母為週期的頻率分佈時,指紋就自己出現了。
所以,這種使用多重位移的加密方法,與凱撒使用的單一位移加密法比較,強度在於,確定位移單詞的長度所用的時間,所以,位移單詞越長,信息就越安全。
一次一密
一次一密
那有沒有保證信息絕對安全的加密方法呢?答案是隨機性加密。
想像一下,如果加密者投擲一個26面的骰子,來生成一長列隨機位移的數字,然後與解密者共享,來取代位移單詞,用這個隨機數列進行字母的移位,數列的長度與信息的長度是一致的,這是很重要的,已避免任何的重複,然後他把密文發送給接收者,接收者使用她給的一列隨機位移數字來解密信息。
如果採取這種方式,第三方竊聽者就很難解開了,首先,位移永遠不會陷入重複的模式裡,第二,密文將會有一個均勻的頻率分佈,因為沒有頻率差別,也就沒有信息洩露,所以,破解加密基本上是不可能了。
這就是最強的加密方法,它出現在19世紀末期,現在,它被稱為一次一密。
關於一次一密的是如何實現的,我將會在下一篇文章中給大家揭曉,敬請期待。