密碼學演進

*密碼跟符號Semiotics不同

符號的象徵意義是固定且有直接關連的

像是爺爺用六芒星陣象徵出達文西

那達文西不想讓自己的符號被很多人發現 所以他隱藏了符號本身

然而密碼學中明文與暗文的轉換沒有特殊意義

著重在加解密 就一篇亂碼讓你看 所以也不會去隱藏暗文


*密碼跟編碼Coding不同

編碼不考慮內文是什麼

主要設計一些檢查碼來大幅降低硬體設備出錯的影響

舉個簡單的例子

用二進位表示八進位的一個數字要三個格子___

每個格子出錯的機會是1/100

假設今天把5傳出去 對方收到不是5的機會是2。97%

那麼如果我在末尾加一個檢查碼 奇個1則1 偶個1則0

5是101 有兩個1所以實際傳出的是1010

如果收到的是1000 檢查不同過 重傳

如果收到的是1011 檢查也不過 重傳

也就是說1010四個格子中 隨便錯一個或三個字都會被檢查出來

那麼要一次錯兩個數字 收到1111或1001這種才可以通關

實際收錯的情況是錯二個跟四個字全錯

不過機會已經被降低到0。000589%

喔對了 有洗帳號的應該知道身分證末碼也是檢查碼

回頭來說密碼學 密碼學則不管這轉傳輸過程

繼續專注在加解密的過程


*密碼跟輸入帳號密碼的密碼不同

輸入帳號密碼的密碼其實是驗證身分的口令

真正加密的過成發生在瀏覽器

所以當你把******傳送出去 不是任何攔截的人都看得懂


*什麼是加密與解密?

加密與解密的過程可以簡單想像成一個函數

f(明文)=暗文

f’(案文)=明文

簡單可以想像的有平移

例如把所有字母往後面移三個

f(gossiping)=jrvvlslqj

或者是複雜一點 直接把26個字母洗牌做成代換表

很直覺地 如果手中沒有這張代換表那真是猜一輩子也猜不透啊

這件事在十世紀左右被阿拉伯奴隸兵給解決了

一張代換表用數學的語言描述就是:

        f(x)是一對一的函數

以上面的例子來說s對應的就是v 沒有例外

那麼大家不要忘了語言的一些特性

例如英文中可以連在一起的字母中

abb acc add bee egg aff woo app arr att

這些要放在二三位 ette要放在字尾 可以排除一大堆選擇

另外e t a o i n s r都是極常出現字母

靠足夠的暗文與語感及可破譯這張代換表

        稱為頻率分析法


f一對一是非常重要的性質 如果一對多則反函數不存在

因為內文可能存在幾月幾日反清復明的精確數字資訊

解密結果不唯一是不能被允許的


*那怎麼辦?

一張代換表不夠 就造個三張代換表麻

我們用維度的技巧來隱藏先前的破綻

例如 第一個字平移1格 第二個字平移2格 第三個字平移3格 以此循環

g(gossiping)=hqvtksjpj

這個時候g還是一對一 只是光看暗文已經沒有頭緒了

g真正的樣子是(Z_3,Z_26)→(Z_3,Z_26)

增加序數的維度作為不同代換表的選取 就徹底破壞平率分析法了

往後數百年的密碼一直用這個做為基礎

改動的是運算方式 例如用矩陣來選代換表

運算當然是要多複雜就有多複雜 做個一萬張來輪流用有效嗎?

密碼使用方當然希望能快速溝通 於是就有人開始研究密碼機與解碼機的機械結構

也就是後來在獵殺U571中大家拼老命搶的那台打字機


*現代密碼學在幹嘛?

再往後到了電腦時代 各種計算都在眨眼間完成

什麼重新排列啦 按個鍵就列出所有可能

密碼學的計算只好擴大到連電腦都難以達成

也就是古典的質因數分解

這個稱為RSA的加密法因為實在太太太有名

到處都有詳細資訊 我想就不用我來介紹了

也有一些破譯的小撇步像是聽聲辨位法

還有量子電腦用的Shor法 有興趣可以自己看

本文不含困難成分 拜託別End


*什麼叫做好密碼?

最後我想用這個做這篇文章的結尾

有沒有不能破的密碼? 當然有 當場就可以定義一個

4這個數字代表我現在內心各種糾結 以下萬字ry

如何破譯? 不可能

如何使用? 也不可能

有沒有能破解任何密碼的方法? 當然有 一樣當場公布

窮舉法 宇宙萬物都放進去猜一下

有限生命內可以完成嗎? 好像不能


所以這理重點來了 好密碼有兩個主要條件

第一要方便使用 第二要有足夠時效

例如某事件需要密碼通訊 可能是戰爭 可能是商業機密

但這個事件不會永遠持續 可能30年內一定結束

那麼我們就選個預估300年內不可能算出解法的密碼

這種密碼就是一個好的密碼

不過各位放心 開始用RSA後預估的計算時間都是上萬年起跳的

這代表目前全人類文明都依賴RSA

反過來說也是一破就世界崩解的意思啦