《安全簡史》劇透之「資訊理論大白話」
註:國際頂級大會,「中國互聯網安全大會,ISC2017」,將於後天(9月11日)華麗開幕,估計將有超過3萬餘位,來自世界各地的安全專家赴會。由於此會現場的自動銷售機上,將自動銷售《安全簡史》,所以我們特發此劇透,以感謝社會各方對本書的厚愛。希望從噹噹網或京東網上購買此書的朋友,可掃描此文後面的二維碼。欲關注公號「亦仙亦凡」的朋友,也可掃描後面的二維碼。我也將在此會的密碼論壇上亮相,有需要作者簽名的讀者,可攜書前往。謝謝大家捧場!
《安全簡史》劇透之「資訊理論大白話」
《資訊理論》之名,家喻戶曉;但《資訊理論》之實,卻和寡曲高!
雖然香農早在半世紀前,就創立了《資訊理論》;雖然《資訊理論》也已進入大學課堂,成為通信專業的必修課;但是,該課程至今仍然是「學渣談之色變,學霸叫苦連天」;甚至許多博士和教授,也只不過一知半解而已。
若想真正洞穿《資訊理論》,那你得練好如下基本功:第一,語文要好,要能讀懂「天書」,否則,像什麼熵呀,條件熵呀,互信息呀,幾個概念下來,你就基本暈菜了。第二,數學要好,不能有「公式恐懼症」,否則,待到鋪天蓋地的、大如磨盤的公式,隕石般砸下來時,你就慘了。第三,脾氣要特別好,一次讀不懂,就讀兩次;白天讀不懂,晚上接著讀;今天沒讀懂,明天繼續讀;反正,無論它怎麼「虐你千百遍」,你都得「待它如初戀」;否則,「哧溜~」一聲,它早已化作一股清煙,無影無蹤了!第四,想像力要好,當香農無中生有地,用一句差點憋死人的話說「看,這就是由輸入隨機變數X和輸出隨機變數Y的轉移概率矩陣構成的信息傳輸信道……」時,雖然你已憋得兩眼發黑,但你的腦海中,卻要立即浮現一條高速公路,而且,各種車輛正在來回穿梭,多拉快跑。請注意,別將該公路想像成什麼光纖呀、電纜呀等具體信道,因為,香農的信道是「馬」,而你所能見的各種信道,都僅僅是「白馬」、「黑馬」、「大馬」、「小馬」等,否則,過於具體的想像,將會引你入歧途,讓你以偏概全。第五,……,算了,不說了,再說下去,香農該告我「傳播負能量」了。
其實,整個香農《資訊理論》的核心,只是兩個定理而已;用行話說,分別叫做:「信道編碼定理」和「信源編碼定理」。前者,告訴你,高速路上最多能跑多少輛車;後者,告訴你,每輛車上怎樣才能「不多拉哪怕是1比特的無用之物」。
那位聰明哥們兒說啦:既然《資訊理論》這麼難,那為啥一定要自找苦頭,何不繞過去就是了?!嘿嘿~,夥計,抱歉,實話告訴你吧:能繞過《資訊理論》的人,現在還沒誕生呢;而且,今後也永遠不可能誕生!因為,在信息大海中,能指引航程的、唯一的「燈塔」和「指南針」,均被《資訊理論》獨攬囊中。明白了吧,哥們兒,這就叫「大海航行靠舵手」!
所以,若想在信息江湖中充老大,勸你還是先回家,老老實實學懂《資訊理論》後,再考慮出山吧,因為「得《資訊理論》者,得天下」嘛。
那麼,在《安全簡史》中,為啥要選入《資訊理論》呢?當然不是為了趕時髦,主要原因有四:
其一,信息安全的核心,現代密碼理論,其實也是《資訊理論》的一個分支,它也是由香農於1948年,在另一篇著名論文《安全的數學理論》中創立的;
其二,《安全通論》的成果已經顯示,黑客與紅客之間的攻防對抗,其實可以等價為某種特殊信道(攻擊信道、防衛信道)的信息傳輸問題;而各方勝負次數的極限,也剛好就是這些信道的「信道容量」;
其三,《資訊理論》是《安全通論》的榜樣;前者統一了通信江湖,後者也想為各安全分支,建立統一的基礎理論;
其四,《安全通論》已作為「膠水」,將「通信聖經」《資訊理論》和「經濟聖經」《博弈論》,粘在一起,形成了一部全新的「聖經」:三論融合。
好了,下面歡迎大家與我們一起,跑馬觀花,看看啥叫大白話版的《資訊理論》。當然,你別指望僅用簡單的白話,在不運用任何公式和符號的前提下,就能把《資訊理論》講深、講透;其實,即使香農在世,他也無能為力。不過,用《資訊理論》來重新解讀一些經典故事,還是很有啟發意義的。
首先來看看烽火狼煙中的《資訊理論》:
你肯定知道,「烽火」是我國古代,用以傳遞邊疆軍情的一種通信方法。始於商周,延至明清,沿襲幾千年,其中尤以漢代烽火規模最大。在邊防軍事要塞或交通要衝的高處,每隔一定距離就建築一高台,俗稱烽火台,亦稱烽燧、煙墩等。高台上有駐軍守候,發現敵人入侵,白天就燃燒柴草以「燔煙」報警,夜間燃燒薪柴以「舉烽」(火光)報警。一台燃起烽煙,鄰台見之也相繼舉火,逐台傳遞,須臾千里,以達到報告敵情、調兵遣將、求得援兵、克敵制勝的目的。
若用《資訊理論》來重新解讀該「簡略版烽火通信系統」,那麼,你將發現:
1)該系統在「信源壓縮」方面已達最優,因為,「有敵情」是小概率事件,一年四季趕不上幾回,此時,用成本較高的動作(點火,相當於「長碼」)來「編碼」;而「平安無事」是大概率事件,此時用成本較低的動作(實際上是不動作,相當於「短碼」)來「編碼」。於是,總體成本就最低。如果將這兩個動作顛倒,既,無事點火,有事反而火滅,那麼,「通信成本」將大幅度提高,而且,所傳遞的「信息量」也並無半點增加。幾千年後,香農博士在創立《資訊理論》時,在其兩個核心定理之一,信源編碼定理中,也仍然採用了這種「烽火編碼壓縮」思路,使得最終演算法達到最優。
2)作為一種軍事通信系統,「烽火傳情」的「信道容量」非常有限,其實只能傳送一條消息,即,某件事情是否發生。那麼,該烽火系統的核心是什麼呢?一般人都會誤以為是烽火台、狼煙、火把等看得見,摸得著的東西;但是,抱歉,必須告訴您,那是不對的!其實,該系統的最重要部分是「碼書」,即,事先相關各方的約定:一旦出現烽火,到底意味著什麼,應該採取什麼應對措施等。
一般情況下,「碼書」的約定,雖然應該是:一旦出現烽火,那就表示敵人來襲,應該馬上增援。但是,歷史上還真的出現過「碼書」被篡改的情況。
那已是三千多年前的事了。據說,周幽王性情殘暴,喜怒無常;自從絕代佳人褒姒入宮後,便終日沉溺於美色。可是,這位美人入宮後,卻從來不笑,整日愁眉苦臉;這可急壞了幽王,他絞盡腦汁,要想逗褒姒一笑,但卻都失敗了。於是,幽王下旨:凡能使褒姒一笑者,賞黃金千兩。得知此聖旨後,奸臣虢石父告訴幽王:「先王在世時,因南戎強盛,惟恐侵犯,因此在驪山設了二十多處烽火台,又設置了數十架大鼓。一旦發現戎兵進犯便放狼煙,煙火直上雲霄,附近諸侯見了,就發兵來救。您要使王后一笑,不妨帶她去游驪山,夜點烽火,眾諸侯一定領兵趕來,上個大當;王后見狀必定發笑。」幽王聽了,依計而行,立即備了車仗,同王后來驪山遊玩。
當時有個諸侯聽了這消息後,大吃一驚,急忙趕到驪宮奏道:「先王在世設烽火台是為緊急之用,今天無故點燃烽火,戲弄諸侯,一旦戎兵侵犯,再點烽火,有誰信之?那時何以救急呢?」幽王不聽勸阻,並下令點燃烽火。附近諸侯看到烽火點燃,以為京都有敵進犯,都領兵點將前往驪宮,待趕到驪山下,卻不見敵兵,只聽宮內彈琴唱歌。這時幽王正和褒姒飲酒作樂,聽得諸侯到來,便派人去向諸侯道謝說:「今夜無敵有勞各位。」諸侯聽了面面相覷,只好帶兵卒恨恨離去。這時褒姒在樓上看見眾諸侯白忙一陣,不覺撫掌大笑。幽王一見大喜,當即賞給虢石父黃金千兩。
幽王的所作所為觸怒了申國侯,於是,他聯結南戎包圍了京都。虢石父得知後,面奏幽王:「目前事情緊急,我王快派人去驪山點放烽火,召來諸侯以禦敵兵。」烽火雖被點著,但由於上次失信於諸侯,大家認為天子又在開玩笑,都按兵不動。幽王等不到救兵,終於被殺,丟掉了江山。
設想一下,如果在那次戲弄諸侯前,幽王同步修改了「碼書」,比如,讓各諸侯知道:明天的「烽火」僅限娛樂,希望大家積極配合,假裝趕來救援,並且,僅此一次,今後「烽火」仍為真敵情。那麼,幽王的命運可能就會重寫。
通過這個故事,我們可知:烽火通信的「碼書」,雖可以修改,但是,必須同步修改;絕不可單方面修改,否則,必定誤解,傳錯信息,引起嚴重後果。
其實,真正的烽火通信並非上面那麼簡單。一方面,所傳遞的信號,不只兩種,而是六種,分別是蓬(蓬草)、表(樹梢)、鼓、煙、火炬、積薪(高架木柴草垛)等;而且,白天舉蓬、表、煙;夜間舉火,積薪和鼓則晝夜兼用。另一方面,燒烽火的「堆數」也是有講究的:凡來敵不滿一千人,則只燒一堆積薪;超過一千來敵,則燒二堆積薪;若來敵超過一千,並且已經開始攻擊時,則燒三堆積薪。除了燒積薪之外,還附有舉蓬、舉表、舉火炬等不同規定;並因來敵方位不同和時間不同,又有各自不同的規定。
由此可見,完整的「烽火通信系統」的信道容量,其實不止1比特;相應的「碼書」也可能很複雜;並且「信源壓縮」還大有餘地。
再來看看莫爾斯電碼中的《資訊理論》:
摩爾斯電碼,是一種時通時斷的信號代碼;它通過不同的排列順序,來表達不同的字母、數字和標點符號。該種代碼發明於1837年,是一種早期的數字化通信形式。不同於現代二進位代碼(0,1),摩爾斯代碼包括五種:點(.)、劃(-)、點和劃之間的停頓、每個字元間短的停頓(在點和劃之間)、每個詞之間中等的停頓以及句子之間長的停頓等。以英文為例,26個英文字母和相關數字等的摩爾斯代碼分別是:
A=(.-),B=(-...),C=(-.-.),D=(-..),E=(.),F=(..-.),G=(--.),H=(....),I=(..),J=(.---),K=(-.-),L=(.-..),M=(--),N=(-.),O=(---),P=(.--.),Q=(--.-),R=(.-.),S=(...),T=(-),U=(..-),V=(...-),W=(.--),X=(-..-),Y=(-.--),Z=(--..),1=(.----),2=(..---),3=(...--),4=(....-),5=(.....),6=(-....),7=(--...),8=(---..),9=(----.),0=(-----),?=(..--..),/=(-..-.),()=(-.--.-),-=(-....-),.=(.-.-.-)等。
如果仔細分析上述摩爾斯電碼,你會發現,設計者在「信源壓縮」方面已經做了許多工作,比如,經常出現的字母E和T(即,大概率事件)等,就用低成本的「短碼」(1點或1劃)來代表;而不常出現的字母或符號(即,小概率事件),則用高成本的「長碼」(6個點或劃)來代表;此思路也是《資訊理論》中,香農「信源編碼定理」的最優壓縮思路。
當然,為了更進一步地壓縮信源,摩爾斯碼的設計者,還約定了許多縮寫,比如,AB=All before,ARRL=AmericanRadio Relay League,ABT=About,ADS=Address,CUL=See you later,GA=Goodafternoon or Go ahead,73=Best regards,88=Love and kisses,99=go away等。這些縮寫雖有實際效果,但比較零碎,在理論上,對《資訊理論》的「信源編碼定理」幾乎沒有任何幫助或啟發。
摩爾斯電碼中還有一些很特別的編碼,其中,最為著名的就是:求救信號SOS。該電碼符號,早在1906年就已約定,並於1909年8月,首次被美國「阿拉普豪伊號」輪船使用,當時該船的尾軸破裂,無法航行,就向鄰近海岸和過往船隻拍發了「SOS」信號。
在「SOS」之前,人們卻習慣於用「CQD」來表示船舶遇難信號。所以,在1912年,當泰坦尼克號游輪首航遇險時,船上的無線電首席官員菲利普,卻一直在發送「CQD」遇難信號,而其中的「D」又很容易與其他字母混淆,所以,周圍船隻並未意識到是緊急求救信號,也就沒有快速救援。當泰坦尼克即將沉沒時,下級無線電操作員布萊德才懇求道:「發送SOS吧,這是新的求救信號,這也可能是你最後的機會了!」然後,菲利普在傳統的CQD求救信號中,夾進了SOS信號,該信號直到第二天早上,才被另一艘船「加州人號」收到,因為當時無線電信號並未被全天監聽。
泰坦尼克號沉沒後,「SOS」才終於被廣泛接受和使用。
自摩爾斯電碼在1835年發明後,一直只能用來傳送英語或以拉丁字母拼寫的文字。由於中文沒有字母,所以,在1880年,清政府才僱用丹麥人,設計了中文漢字電報。
中文電碼表,採用四位阿拉伯數字作代號,簡稱「四碼電報」;從0001到9999按四位數順序排列,它最多可表示一萬漢字、字母和符號。漢字先按部首,後按筆畫排列;字母和符號放到電碼表的最尾。但因中文電碼是「無理碼」,記憶困難,一般人幾乎無法熟練地掌握使用,它更沒有刻意考慮過「信源壓縮」問題。
總之,在《資訊理論》誕生前,包括烽火通信、電報碼等在內的多種編碼中,「信源壓縮」都已被或多或少考慮過了,而且,許多思想也在《資訊理論》中得以體現。但是,直到寬頻數據通信之前,由於信道中傳遞的信息量都很少,信道容量問題幾乎未出現;所以,《資訊理論》中有關信道容量極限的「信道編碼定理」及其思想,卻找不到蛛絲馬跡,真的好似橫空出世一樣。由此,不得不讚歎香農的偉大!
香農《資訊理論》的目的就是:在安全可靠的前提下,如何提高信道傳輸信息的效率(簡稱「傳信率」)。為了便於理解,先來看看,如何提高一條公路的運輸能力。其實,關鍵只有兩點:
1)多拉:路上跑的每輛汽車,都要裝滿,以不超過最大載重量為限;而且,務必不能裝載無用的貨物,避免消耗有效的載貨空間和載重量;
2)快跑:路上的汽車要足夠多,但又不能太多,要以既不堵車,又能以不超速的最快速度奔跑為限。
與上述物質傳輸相似,在信息傳輸的情況下,提高傳信率的關鍵,也只有類似的兩點:
1)信源編碼(類似於「多拉」):無用的信息,絕不多傳輸1比特。這就是信息壓縮問題,即,能被壓縮的信息,都要扔掉。為此,香農給出了信息源能被壓縮的極限。
2)信道編碼(類似於「快跑」):絕不浪費信道的傳輸能力,哪怕是1比特。為此,香農給出了信道傳輸能力的極限,用行話說,就是信道容量的極限。
在通信系統中,如何才能「多拉」呢?辦法很簡單,主要有兩條:其一,每個信號所攜帶的信息量要儘可能多;當然,這個「多」是有極限的,即,無法超過信息源的平均信息量,或稱為信源的熵。其二,無用的「貨物」別「拉」,用行話說,就是所謂的「壓縮信源編碼」,即,盡量減少碼數,盡量降低編碼的多餘度。這就增加了每個信號所攜帶的信息量。正如,講話時要盡量精練,廢話都要壓縮掉,只要把意思說清楚就行;說話啰唆,編碼的多餘度就太大,就降低了傳信率。在言簡意賅,壓縮信源編碼方面,古文和古詩就是榜樣。
在通信系統中,「快跑」就意味著傳遞信號的速率要快。而傳遞每個信號,都需要一定的間隔,就像公路上需要足夠的車距一樣。信號傳得太快,就分不清彼此了,就「堵車」了;而且,信道在單位時間內,所允許通過的信號,也有一定的限度。例如,若數人同時對你狂吼,那你無論如何,也聽不清他們到底在說什麼了。
由此可見,只有當每個信號所攜帶的信息量達到最大平均信息量(多拉),同時,傳輸信號的速率也達到信道允許的最大值時(快跑),傳遞信息的效率才是最高,傳信率才達到最大值。
信道容量還有另一層含義,即,信道的傳信率極限。一旦達到了這個極限,就達到最大值。信息傳輸的速率,一旦超過了信道容量這個極限,就一定會出現差錯。可見,信道容量限制著傳信率,限制著傳遞信息的效率。就像面對一個容量1升的杯子,你無論如何也不可能將2升水注入其中一樣。
在信道容量的限制下,為提高傳信率,還可分別考慮是否有雜訊的情況:
如果一個信道無雜訊干擾,那就意味著信源發出的每個信號,經過信道傳輸,都能準確無誤地被接收。此時,只要傳信率等於或小於信道容量,那麼,就一定可以找到某種編碼方法,使信息能夠準確無誤地傳遞。如果傳信率大於信道容量,那就必然會出現差錯。
但是,雜訊干擾總是存在的,此時,信號在傳遞過程中,會發生某些失真,要損失一些信息量。於是,有的信號在傳到接收端後,就變得含糊不清了,傳信率也就降低了。此時,信道容量就是「有效傳信率」的最大值,即,發送的「最大傳信率」減去「傳輸時產生的疑義度」。這裡,疑義度意指:平均每個信號增加的含糊程度,它也是每個信號損失的信息量。由此可見,在有雜訊干擾的情況下,信道容量同樣限制著傳信率。傳信率也必須等於或小於信道容量,才能使信號準確無誤地在信道中傳輸;否則,就會產生差錯。
總之,無論是否有雜訊,要想使信息傳輸不出差錯,一個最起碼的要求是:傳信率不能大於信道容量,這就是提高傳信率所必須遵從的基本原則。
哥們兒,關於《資訊理論》,我只能幫你到此了,你好自為之吧!
雖然古人已多次在詩文中談及「信息」二字(比如,南唐李中《暮春懷故人》詩:「夢斷美人沉信息,目穿長路倚樓台。」宋朝陳亮《梅花》詩:「欲傳春信息,不怕雪埋藏。」等),但是,我們還是想套用六世達賴,倉央嘉措,的情詩《十誡詩》,針對信息及其各種變身的安全,將本章概括如下:
第一最好不相戀,信息根本看不見。
第二最好不相思,比特與熵很難知。
第三最好不相欠,系統首要保安全。
第四最好不相憶,對付失控需妙計。
第五最好不相棄,蟻穴雖小能潰堤。
第六最好不相虧,內外兼顧顯神威。
第七最好不相誤,泄密信息價值負。
第八最好不相堵,暢通反饋有幫助。
第九最好不相依,一勞哪能得永逸。
第十最好不相攻,和諧相處好輕鬆。
但曾相見便相知,安全保障最及時;
信息若能充分用,免教得失作相思。
推薦閱讀:
※信息與香農...
※資訊理論基礎 第一章小結
※《物質資訊理論》第四章 性質與關係 6
※資訊理論抄書筆記 - 從零開始的理想信源編碼與數據壓縮之旅
※學堂在線《應用資訊理論基礎》學習筆記01