iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
Security

資訊安全之加密理論大雜燴系列 第 3

Day3 破解簡單替換密碼&安全性

  • 分享至 

  • xImage
  •  

昨天講到簡單替換密碼,其密鑰空間雖然超大,但意外地好破解

在這裡,有些密鑰會比一些普通密鑰還要更貼近真實密鑰
也就是說,不需要找遍整個密鑰空間,只需搜尋部分就好

以下我以一篇的CNN的新聞摘要來做示範,使用昨天範例中的簡單替換密碼進行加密

CC = '''Ivowdi Katqj fxhwqx kux lmabk lvaqxa TB jaxbmixok kv uwrx w qts buvk kwexo guxo ux gwb jdwhxi toixa waaxbk wk kux Ltdkvo Hvtokc zwmd vo Kutabiwc. Ux gwb fvvexi wb moqwkx Ov. J01135809 wlkxa btaaxoixamos vo qvax kuwo w ivnxo huwasxb bkxqqmos lavq umb wddxsxi xllvakb kv vrxaktao Sxvasmw'b 2020 xdxhkmvo axbtdkb. Bvtahxb kxdd HOO kuwk kux lvaqxa jaxbmixok gwokxi kv wjjxwa ixlmwok mo kux qts buvk, woi jtajvbxltddc huvbx ovk kv bqmdx. Wlkxa ux gwb axdxwbxi vo w $200,000 fvoi, Katqj bdwqqxi kux hwbx wb "w kawrxbkc vl ztbkmhx," woi kvdi axjvakxab, "M imi ovkumos gavos." Umb btaaxoixa mo Sxvasmw qwaexi kux lvtaku kmqx kumb cxwa kux lvaqxa jaxbmixok uwb ktaoxi umqbxdl mo kv dvhwd va lxixawd vllmhmwdb wlkxa hamqmowd huwasxb gxax favtsuk wswmobk umq — xjmbvixb kuwk uwi oxrxa fxxo bxxo mo TB umbkvac tokmd 2023.'''

我們可以利用字母在文章出現的頻率 作為解密關鍵

在英文中,母音使用的頻率要比子音高,透過這點便可大幅限縮密鑰空間的範圍

使用以下程式碼可計算頻率(某些變數接續昨天的範例)

from collections import Counter
import pandas as pd


counts=Counter(CC.lower()) 
counting_letters = dict()

for letter, count in counts.items():
    if letter in alphabet:
        counting_letters[letter] = count
 
 
counting_letters_series = pd.Series(counting_letters)

(counting_letters_series / counting_letters_series.sum()).sort_values(ascending=False)

可以得到頻率

x    0.133122
k    0.091918
a    0.087163
w    0.079239
b    0.072900
o    0.069731

不難猜x就是頻率最高的e

接著觀察到文章中的kux出現頻繁,很有可能是the
文章中w很常單獨出現,因此合理懷疑就是a

轉眼間x->e, k->t, u->h, w->a四個字母就被破解出來
從原本https://chart.googleapis.com/chart?cht=tx&chl=26!%5Capprox%202%5E%7B88%7D 種組合下降至https://chart.googleapis.com/chart?cht=tx&chl=22!%5Capprox%202%5E%7B70%7D 而已
用昨天的一秒https://chart.googleapis.com/chart?cht=tx&chl=2%5E%7B40%7D 的搜尋速率,原本要花九百萬年現在只需34年,相當有感的進步

我們甚至可以再仔細推敲,搭配拼音字母是否合理,相信不用一小時就可以找出此簡單替換密碼的密鑰

安全性

由以上的範例得知,密鑰空間大不能保證加密方法的安全性

簡單替換法存在一個尋找真正密鑰的捷徑
利用英文語言的特性
製造出密鑰之間可能性的不對等
讓我們能夠繞過搜索整個密鑰空間

因此嚴謹的定義下,一個安全的加密系統,必須要能被證明不存在捷徑
也就是說每個密鑰的是真實密鑰的可能性皆為均等
最佳的解法只能是窮舉整個密鑰空間

不過要能夠證明一個加密演算法不存在捷徑並不容易
要怎麼說明我們是真的找不到捷徑,還是人們只是不夠努力,目前找不到呢?
這回到昨天講的科克霍夫原則,我們希望一個加密演算法能夠盡可能地公開讓大眾檢視
在越多人眼睛注視的情況下,該捷徑越能被找到;
反之,如果那麼多人檢查過還找不到捷徑,即使無法用數學證明,我們仍有九成信心說這個加密方法是安全的

可以說接下來幾天要介紹的加密演算法,幾乎都沒能被證明是安全的
這麼聽起來好像有點不太令人滿意
不過畢竟他們都經過問世這麼多年,且在實際上都有很廣泛的應用
要是有捷徑存在,也應該早被人發現了

另一方面,完全安全的加密演算法在實務上也不見得好用
明天我們就會介紹一個被證明是安全的,但實際執行卻超難用的加密演算法

因此安全的概念可以當做個理想就好,實務上還是希望能夠找到足夠安全的(無明顯捷徑),又能夠好應用的加密方式,作為我們加密的工具


上一篇
Day2 密碼學介紹&簡單替換密碼
下一篇
Day 4 安全的一次性密碼本
系列文
資訊安全之加密理論大雜燴30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言