改變世界的九大演算法之一:公鑰加密演算法

幾年前,只要提到「經濟」、「數學」,或類似層級的字,讀者散場的嚴重,一個個跳出來指責我沒有盡到娛樂群眾的本分。因此,雖滿腹經綸,卻只能在台上跳艷舞。

然而,時代變了,知識型網紅從小型齧齒生物,逐漸攀上食物鏈頂端。本專頁長期以一窩蜂為主要經營方針,市場敏銳度還是有的。因此,我們無論如何,要來蹭個知識型的文章。

知識的來源,自這本書:《改變世界的九大演算法》。

我明白,眼前的讀者們無論在科學、文化、生活各領域的造詣皆低於平均,「演算法」三字恐引發原地石化等負面狀態。不過,各位不用擔心,將你的背部交給知識型網紅,他來解決。他將用行動告訴你,你不懂的東西,他懂。這是知識型網紅的天職,用知識輾壓你,他做得到!

21-1P315160004.jpg

什麼是演算法

首先無法迴避的,就是「演算法」的定義。什麼是演算法?

簡單說,就是一套流程。碰上問題,從開始的狀態,考慮一些節點,最後走到結束,解決問題。我們來舉個例子,一個燈泡在你面前,你希望他是亮的,於是我們產生這套流程:

初始狀態:燈泡亮了嗎?

          Yes -> 結束。

          No -> 節點1

節點1:停電了嗎?

Yes -> 罵台電。

No -> 節點2

節點2:電源開了嗎?

Yes -> 節點3

No -> 打開開關。

節點3:搖一搖燈泡,亮了嗎?

Yes -> 結束。

No -> 換燈泡。

這便是演算法,我們給他一個,看起來好像影響了世界的名稱:「光之演算法」。他機械化的定義每個步驟,裡面沒有智慧判斷,即使不具備電器知識的人,同樣可照此流程解決燈泡問題。

這樣的演算法,偉大嗎?一般。影響世界嗎?當然不。你可以預見,擺上檯面的演算法,跟水電五金關係不大。但,他們跟數學肯定很有關係。

數學

我們順便提一下,數學是怎樣的角色。大眾對數學家的指控是:你們活在自己的世界。某程度而言,這句話沒說錯,以前在數學系時,確實有些同學看起來像是生存在異次元。

當時,我最大困擾是山謬傑克森還不夠紅,導致課堂上滿肚的媽德發科缺乏字彙表達。比如說,定義一個東西叫做Ball。挺有意思的,球啊。繼續看內容,我的球在哪裡?接下來寫的是什麼?B(r)=x﹜是他媽的什麼?最後我提著一個真正的球,前往籃球場。

這便是數學系課堂上的基本光景。那時候,我們無法意識到黑板上那些壁畫有何意義。我們只是彼此踩踏,踏過同學的屍體,拿到一科一科的六十分。如果時間重來一次,我大概還是聽不懂,但我會非常尊敬這門學科。

數學家的工作是什麼?首先,他們彼此約定了一些假設。比如說,平行線的定義:「如果能找到一條線,同時垂直於這兩條線,那這兩條線就叫做平行線。」

根據這些假設,經歷嚴謹的證明,得到各式各樣的結論。例如:「平行線永遠不會有交點。」這不是定義,這是結論,是推導出來的。這些假設跟結論,與真實世界未必有關係,數學家也不在乎。他們只承諾你,如果假設發生了,那結論就一定會發生。

然而,如果有一天,真實世界的現象突然與他們的假設重疊了,這時候數學的作用就產生了。數學家會告訴你,接下來會這麼發展,因為我們已經證明過了。就像,網路上很多人突然發現:「原來我們是兩條平行線」,那數學證明了:「你們永遠不會在一起」。

數學家或許生存在異次元,在那個心無旁鶩的環境下,他們拋棄了愛、人性、善惡(或許沒那麼誇張),推導出無限多定理。他們為真實世界做好準備,等待雙方的結合。

回到九大演算法

演算法遍地叢生,誰才是優秀的?誰才是改變世界的?這本書叫《改變世界的九大演算法》,為什麼是九個?

當然,標出「九個」,肯定是因為書比較好賣。大體上書名裡只要有數字,銷量可以提升百分之二十。

至於如何挑選?作者有一套標準,必須是每天使用到的、必須是解決真實世界問題的、必須是電腦科學等等,沒關係,不用管。因為我們實在太外行,人家說什麼都認。

我想來討論其中一個很有意思的:「公鑰加密演算法」。

公鑰加密演算法

問題是這樣。某天,你在pchome上看到一件衣服,上面印著美國隊長的裸露胸肌,身為一名無腦粉絲,天啊我要定這件衣服了!你拿起滑鼠,決定尺寸、決定顏色、決定買十件、輸入信用卡號...等下!這邊停一下。你為什麼敢在網路上輸入信用卡號呢?

「沒事的,我這卡號只給詹宏志一個人看。」

但你有沒有想過,這件事如何辦到呢?

網路上一條訊息,從這邊到那邊,經過光纖網路、路由器、別人的電腦,即使完全不懂信息傳輸原則,我們也能理解,途中有多少次被竊取的機會。可以這麼形容,在網路上傳遞信息,就像寄明信片給朋友。所有經手的人,都能看到明信片上的字。

信用卡號碼寫在明信片,網路上傳來傳去,感覺不妥吧?這件事不解決,整個網路體系恐怕都要垮了。於是,接下來我們就要介紹,如何用公鑰加密(public key cryptography)來克服這個問題。

如果你們有個共同秘密

看一下這個場景。有個房間,裡面有你、強尼、保羅三個人。這房間有個規則,所有溝通都必須公開進行,所有人講的話,所有人都聽的到,不能講悄悄話。現在,你很想告訴強尼一個數字,比如說66好了,但不想讓保羅知道。這就是網路上交換訊息面臨的問題。

怎麼辦呢?突然你想起來,強尼和你是國小同學,班級是620班。於是你說:「嘿,強尼,記得我們的小學班級嗎?把我們的班級加上46,就是我要給你的數字。」

不錯,如果強尼沒有記錯小學班級的話,他可以得到答案。保羅雖然在旁邊聽到每一個字,但他不知道你們的小學班級,所以他湊不出66這個數字。

這就叫做共同秘密(shared secret)。你們的溝通內容,透過共同祕密的轉換才有意義,其他人聽到也無妨。事實上,我們經常不自覺用這種方式溝通。比如說我們會在飯局上,講出這樣的話:「最後他死的時候我哭了」、「大集結那裏太震撼」、「這是我看過最棒的演員名單」。OK,這就是基於共同秘密下的溝通,擁有共同秘密的人可以參與討論,其他人只能吃飯。

這樣看來,只要擁有共同秘密,問題就解決了。但,你很快就會面臨下一個場景。如果你和強尼不是朋友,這方法不就行不通了嗎?這就是真實世界,網路上你的交易對象不是小學同學,怎麼辦呢?

你們沒有共同秘密,於是問題變成:如何設定共同秘密

一屋子陌生人,你和強尼生命中沒有任何交集,你們在眾目睽睽下溝通,卻想要瞞過所有人,設定一組共同秘密。可能嗎?

這方法叫做:混漆法(paint-mixing trick)

首先,我們稍微更改一下場景。同樣房間,同樣三個人,我們假設每個人手邊都有無數罐不同顏色的油漆。你和強尼的目標是,調出同一種顏色的油漆,而保羅球品差表情又欠扁,你們不想讓他調出來。

在這裡,調出同一種顏色,相當於設定了共同秘密。

還是那條規則:任何溝通都是公開的。比如,你可以告訴強尼一些事。既然牽扯到油漆調色,你可以把調好的油漆給強尼。不過,你說的話保羅也會聽到,調好的油漆不能單獨給強尼,也必須給保羅一份。

現在開始了。混漆法有四個步驟:

1.選擇個人色

你公布,現在遊戲開始,大家各自選一個自己的代表色吧。於是,你選了紅色,強尼選了綠色。如果保羅有興趣的話,他也可以選一種顏色。

選擇完全是私人的,你們無法告訴對方自己的選擇。因為根據公開溝通原則,只要一開口,保羅就會聽到。為了避免保羅介入,顏色選完後你們沒有任何對話,所以,你們彼此不知道對方的顏色。

2.公布公共色

你公布一種公共色:藍色。大家都聽到了,包含保羅。

3.製作公共個人混色

用自己選擇的顏色加上剛剛宣布的公共色,調出另一種顏色。

你是藍色加紅色,強尼是藍色加綠色。於是,你調出了紫色;強尼是,不知道,可能是青色?這不重要,總之,你們各自調出一種顏色,由於是公共色加個人色調出來的,所以叫做公共個人混色。

接著,大家拿著剛調好的漆,走到房間中間。來來,這是我的漆,你也拿一份吧。你拿走一份強尼的漆,強尼也拿了你的漆。根據公開溝通原則,保羅也可以拿一些你們的漆。

4.共同秘密混漆

最關鍵的動作在這,如果你跟得很緊,或許已經猜出來了。

你把強尼的漆加上自己的個人色,強尼把你的漆加上他的個人色,結果怎樣?你們兩個調出一模一樣的漆:「紅++藍」。於是,你和強尼擁有了相同的顏色,共同秘密就這麼設定完成了!

補充說明的是,你們並不清楚這罐漆的真實成分。到頭來你都不知道強尼的個人色,只要機械化操作這些步驟,卻能調出一樣的東西。這就是整件事情神奇的地方。

不過,我們還必須關切一下保羅的狀況。你們在大庭廣眾下,你儂我儂,兩人一家親,保羅呢?他在旁邊一清二楚,該拿的都拿了,該聽的都聽了,他有沒有辦法破解你們的秘密呢?

我們看一下保羅有什麼。他有一份你的漆(+),有一份強尼的漆(+),但他怎麼搞就是搞不出「紅++藍」,當他看著你的「紅+藍」時,他不知道接下來應該加入綠色,因為那是強尼的個人色,個人色是沒有公布的。所以,他無計可施,眼睜睜被排除在外。

故事結束了

介紹到此戛然而止,因為本人程度有限,只能講到這裡。接下來就是把混漆的概念應用在實務上,你可以想像到,是大量的數學,大家都無力負荷。

即使因為現實問題,我們無法深入下去,但我們還是不得不感嘆,公鑰加密演算法運用了相當聰明的概念。所謂聰明,不是那種能解出行星運行軌道的聰明。而是整件事情的思考過程,讓你覺得:「搞不好我也能想出來,但我就是沒想出來。」那種聰明。

這個世界,就是被這些聰明人撐住的。未來,當你輸入信用卡號,按下確定鍵的那一霎那,請放心,先人已為你鋪好安全網。這是一筆安全的交易,多買幾件也是沒問題的。The End

arrow
arrow
    全站熱搜

    mmadcity 發表在 痞客邦 留言(6) 人氣()