摘要:飄過(guò)了幾家附近的餐館之后,大寶決定在啃的雞點(diǎn)一份宮爆雞丁蓋飯?zhí)撞?。傳說(shuō)中的宮爆雞丁。再看這位攤主,正拿著宮爆雞丁的單子,對(duì)著大寶得意地笑。
你有沒(méi)有在網(wǎng)上買過(guò)東西?沒(méi)?什么?哦,怕不安全。
現(xiàn)在信息科技日新月異,貌似一轉(zhuǎn)眼的功夫,交電話費(fèi)、考試報(bào)名、逛圖書館、訂購(gòu)午飯都搬上了互聯(lián)網(wǎng)。方不方便且不說(shuō),單說(shuō)足不出戶能叫到午飯,這要在以前那可都是科幻小說(shuō)啊。只不過(guò)科幻小說(shuō)里,主人公可能只須對(duì)機(jī)器人吩咐說(shuō),“來(lái)份宮爆雞丁蓋飯,外加一碗紫菜雞蛋湯”,一切就搞定了——哪像現(xiàn)在這樣,裝五花八門的殺毒軟件,還得隨時(shí)小心釣魚網(wǎng)站的陷阱。那現(xiàn)在的互聯(lián)網(wǎng)真的如此危險(xiǎn)么?先看看大寶的這次訂餐經(jīng)歷,您再下結(jié)論也不遲。
話說(shuō)大寶一日宅在家中,百無(wú)聊賴地度過(guò)了陰雨連綿的上午,忽然感覺(jué)腹中空虛,四肢無(wú)力——他明白了,原來(lái)自己是餓了。閑話少說(shuō),大寶奔到電腦前,準(zhǔn)備給自己淘一頓午飯。
飄過(guò)了幾家附近的餐館之后,大寶決定在“啃的雞”點(diǎn)一份宮爆雞丁蓋飯?zhí)撞汀|c(diǎn)完菜,服務(wù)員小姐禮貌地將大寶帶到了收銀臺(tái)——這“啃的雞”是先付帳、再上菜的。
如果互聯(lián)網(wǎng)上也可以用現(xiàn)金買單就好了,那么“啃的雞”也不用再多花冤枉錢,聘用專業(yè)的銀行交易專家來(lái)收銀了??上КF(xiàn)實(shí)往往跟理想相反,坐在收銀臺(tái)里的,正是傳說(shuō)中的銀行交易專家:致富寶。“致富寶”作為專業(yè)的支付中介,能非常熟練地處理各種銀行業(yè)務(wù)——不管是招行信用卡,還是農(nóng)行借記卡,他都能應(yīng)對(duì)自如。
就在這個(gè)時(shí)候,大寶忽然發(fā)現(xiàn),帶他來(lái)的服務(wù)員小姐溜回“啃的雞”鋪?zhàn)永锩ζ渌聝喝チ?,這“致富寶”原來(lái)是街邊的一個(gè)小攤。再看這位攤主,正拿著宮爆雞丁的單子,對(duì)著大寶得意地笑。大寶頓時(shí)驚出一身冷汗。
“糟糕!上當(dāng)了!”
“大哥,這宮爆雞丁兒不是你點(diǎn)哩?”攤主口音挺重。
“是倒是——你就是那個(gè)什么什么……銀行交易專家?”大寶半信半疑。
“那能假了?。∧憧纯?,工行農(nóng)行中行建行……”攤主不高興了。
“得得得,你要是個(gè)釣魚的,也照樣這么說(shuō)?!贝髮殧[事實(shí)、講道理,“營(yíng)業(yè)執(zhí)照給我看看,是真的就行。”
釣魚 是指一些小商小販,冒充自己是某支付平臺(tái)或銀行,騙取大眾錢財(cái)?shù)氖侄巍?/p>
“俺哪敢掉你的魚??!”攤主邊說(shuō),邊從口袋里掏出一份證書,“你驗(yàn)驗(yàn),這能假了不,這會(huì)兒打(假)的正嚴(yán)哩?!?/p>
這份證書可不是一般的營(yíng)業(yè)執(zhí)照。在數(shù)字世界里,光一個(gè)紅紅的公章印,說(shuō)明不了什么問(wèn)題。互聯(lián)網(wǎng)上的電子證書,不僅包含一些基本信息如“攤主姓名”、“工作單位”、“郵政編碼”等,還包含一把很重要的鑰匙,和一個(gè)很重要的簽名。
先說(shuō)這把鑰匙吧。其實(shí)這種鑰匙是成對(duì)兒的,證書里面嵌的這把,叫做公鑰;另一把由攤主保管,叫做——母鑰?其實(shí)挺合理的,配對(duì)嘛——正確的叫法是私鑰。從名字也可以看得出來(lái),公鑰是公開的,大家都可以拿來(lái)用;而私鑰是個(gè)人保管的,比如攤主的這把私鑰就由他個(gè)人保密持有,別人誰(shuí)也拿不著。
這里,配對(duì)的兩把鑰匙之間是有數(shù)學(xué)相關(guān)性的,那這是怎樣一種相關(guān)性的?用傳說(shuō)中的 RSA 算法舉個(gè)例子吧,兩把鑰匙看上去是三個(gè)非常大(至少應(yīng)該是,大的難破解嘛)的數(shù)字——私鑰是 (7, 10),公鑰是 (3, 10)。
那這鑰匙是怎么算出來(lái)的呢?
先選種子,隨機(jī)選兩個(gè)非常大的 素?cái)?shù) 。在這個(gè)例子中,我選的是 2 和 5,但實(shí)際應(yīng)用中應(yīng)該越大、越?jīng)]有規(guī)律越安全。這個(gè)時(shí)候,鑰匙對(duì)中的公共部分 10 就算出來(lái)了:2 x 5 嘛。接著,3 也不難找——隨便挑一個(gè)跟 (2 - 1) x (5 - 1) = 1 x 4 = 4 互質(zhì) 的、且比 4 小的數(shù)就可以了—— 3 和 4 沒(méi)法被同一個(gè)比 1 大的數(shù)除開,這樣一來(lái),我們的公鑰 (3, 10) 就定下來(lái)了。接下來(lái)算私鑰,這個(gè)稍微麻煩一點(diǎn)點(diǎn),就是要找一個(gè)乘以 3 的積除以 4 的余數(shù)剛好等于 1 的數(shù)字——我選了 7,因?yàn)椋?b>7 x 3 mod 4 = 21 mod 4 = 1(這里的 4 還是前面 (2 - 1) x (5 - 1) 算出來(lái)的那個(gè) 4)。用數(shù)學(xué)點(diǎn)兒的話寫下來(lái),就是:
隨機(jī)地選擇兩個(gè)非常大的素?cái)?shù) p 和 q,比如 2 和 5;
密鑰對(duì)的公共部分就是 N = pq,就是例子中 N = 2 x 5 = 10;
算出一個(gè)中間數(shù) M = (p - 1)(q - 1),比如 M = (2 - 1) x (5 - 1) = 1 x 4 = 4;
選擇一個(gè)小于 M,且與 M 互質(zhì)的數(shù) e,比如 e = 3;
根據(jù) d x e mod M = 1 算出 d,比如 d = 7 因?yàn)?7 x 3 mod 4 = 1;
燒掉所有寫著 p 和 q 的打草紙——因?yàn)椤安粺粚I(yè)”嘛。
然后呢,公鑰就是 (e, M),或者簡(jiǎn)單說(shuō) 3 也成,對(duì)應(yīng)的私鑰就是 7,而 10 是公共部分。
那這兩把鑰匙有什么用呢?我們還是先來(lái)做兩道簡(jiǎn)單的數(shù)學(xué)題。
第一題,8 的 3 次方整除 10 的余數(shù)是多少?八八六十四,64 乘以 8,這個(gè) 64 乘以 8 ……不好算是吧,沒(méi)事,這個(gè)例子可以偷點(diǎn)懶——只算個(gè)位數(shù),反正不是要整除 10 么。8 x 8 = 64,4 x 8 = 32,結(jié)果就是 2 唄。
第二題,(用第一題的結(jié)果)2 的 7 次方整除 10 的余數(shù)是多少?2 x 2 = 4,4 x 2 = 8,8 x 2 = 16,6 x 2 = 12,2 x 2 = 4,4 x 2 = 8 ——數(shù)清楚了沒(méi),是 7 個(gè)不?結(jié)果正是 8。
沒(méi)錯(cuò),第二題的結(jié)果剛好是第一題里面的 8。這是一個(gè)巧合,還是一個(gè)愚人節(jié)玩笑?都不是,這是用數(shù)學(xué)方法證明過(guò)的(請(qǐng)見下面的分割線中間的部分),如果算出來(lái)不是 8 才是開玩笑呢。第一題中,我們其實(shí)用公鑰 (3, 10) 把 8(我的銀行卡密碼,請(qǐng)勿模仿)給加密了——加密成了 2;第二題,我們又用私鑰 (7, 10),把加了密的密碼給解出來(lái)了。
有那么點(diǎn)意思了,是吧。這樣一來(lái),我就可以用密文的 2 來(lái)代替明文的 8,放心地將密碼告訴擁有私鑰的人。即使密碼中途被別人截獲了,沒(méi)有私鑰的駭客依然無(wú)法取得我的密碼。
有興趣的話,您可以把公私鑰匙調(diào)個(gè)個(gè)兒,再用相同的辦法算一遍——也就是用 7 加密、用 3 解密,結(jié)果是一樣可以還原的。但是反過(guò)來(lái)之后,如果我還是加密銀行卡密碼的話,我的智商就值得研究了——作為公鑰的 3 是所有人都知道的,也就是說(shuō)所有人都能解密得到原文,我根本用不著費(fèi)事算來(lái)算去,直接把密碼告訴大家就得了唄。這么做真的沒(méi)有意義么?非也,這其實(shí)正是簽名和驗(yàn)證。比如說(shuō),用 (3, 10) 是無(wú)法正確解密(驗(yàn)證)一段用 (5, 17) 加密(簽名)的數(shù)據(jù)的,也就是說(shuō),“解鈴仍須系鈴人”,要想驗(yàn)證一個(gè)簽名,只能用跟“簽名用的私鑰”對(duì)應(yīng)的那一把公鑰。而從理論上來(lái)說(shuō),私鑰是個(gè)人保密持有的,所以我們可以通過(guò)解密的測(cè)試,來(lái)驗(yàn)證一段信息確實(shí)是原原本本地來(lái)自擁有私鑰的人,而這個(gè)人也無(wú)法抵賴說(shuō)“根本沒(méi)這么回事兒”。
除非他把私鑰弄丟了,別人撿了去。這一般情況下是有補(bǔ)救措施的——掛失嘛,鑰匙丟了換鎖唄。但是如果你根本不知道鑰匙丟了,那就沒(méi)轍兒了。比如說(shuō),既然 3 和 10 大家都知道了,如果什么人背地里偷偷算出了這個(gè) 7,那豈不是千里之堤,潰于蟻穴?
不必?fù)?dān)心。
問(wèn)題就在于,這個(gè)梁上君子打算怎么把 7 算出來(lái)。最直接也是最容易想到的辦法,就是先將 10 分解成兩個(gè)質(zhì)因數(shù) 2 和 5,然后照前面的算法來(lái)算 7。這是唯一的辦法嗎?很遺憾,目前還沒(méi)有人從數(shù)學(xué)上證明這是唯一的辦法。為什么有人會(huì)去試圖證明,這是唯一的辦法?因?yàn)?,他們還沒(méi)找到其它更好的辦法。恰巧,這個(gè)分解質(zhì)因數(shù)的辦法非常難。
因?yàn)榇虿菁垷袅耍岳碚撋险f(shuō),暫時(shí)沒(méi)有別人知道 10 是由哪兩個(gè)素?cái)?shù)相乘得到的,一般情況下,算這個(gè)題的人(或是機(jī)器)也會(huì)很快忘掉這兩個(gè)素?cái)?shù)。雖然要破解前面的例子簡(jiǎn)單了點(diǎn),但是有種你口算個(gè)一百來(lái)位的試試,呵呵。這也被相信是 RSA 算法的安全保障——對(duì)于非常大的數(shù)字,分解出兩個(gè)質(zhì)因數(shù)是非常困難的。這個(gè)結(jié)論目前還沒(méi)有人證明,但也沒(méi)有人證明它不困難。盡管大家說(shuō)法不一,但是有一點(diǎn)是肯定的——數(shù)字越大越難算。有多難呢?1999 年計(jì)算機(jī)花了五個(gè)月的時(shí)間,解出了一個(gè)并不算很大的(512 bit)N 的兩個(gè)質(zhì)因數(shù);而當(dāng) N 成倍增長(zhǎng)時(shí),破解的時(shí)間能到成百上千年——等到破解出來(lái)的時(shí)候,加密保護(hù)的信息可能早就不是秘密了。據(jù)說(shuō)有人證明用量子計(jì)算機(jī),可以在可觀的時(shí)間里,破解更大的數(shù)字??磥?lái)一旦量子計(jì)算機(jī)成為現(xiàn)實(shí),RSA 就要下課了——可惜眼下量子計(jì)算機(jī)不通(更新:質(zhì)疑聲中的 D-Wave 量子計(jì)算機(jī)已經(jīng)誕生了),再加上我們選用的數(shù)字非常大,所以想簡(jiǎn)單地“把 10 分解成 2 x 5”,那是不可能的。
于是,要根據(jù)公鑰 3 算出私鑰 7 來(lái),就幾乎是不可能的了。所以,攤主可以安心地將公鑰嵌在證書里,公之于眾。例子中的 RSA 看似牢不可破,但現(xiàn)實(shí)中還需要許多的輔助手段,來(lái)進(jìn)一步保證它的安全性。況且世界上也不是就 RSA 一家呀,所以嘛,這種公鑰加密算法還是挺讓人放心的。
總結(jié)一下了:“解鈴仍須系鈴人,系鈴定是解鈴人”(下半句我瞎掰的)。公鑰、私鑰都是一對(duì)兒一對(duì)兒的;要解密由公鑰加密的數(shù)據(jù),僅可以用對(duì)應(yīng)的私鑰;要驗(yàn)證由私鑰簽名的數(shù)據(jù),僅可以用對(duì)應(yīng)的公鑰。這種“一個(gè)加密另一個(gè)解”的算法,一般就被形象地叫做“非對(duì)稱加密算法”,這倆把密鑰也被叫做“非對(duì)稱密鑰”。
如果這還沒(méi)有滿足您濃厚的數(shù)學(xué)興趣的話,您可以繼續(xù)閱讀下面這段。(摘自維基百科,RSA加密算法的操作——不過(guò)貌似英文版更詳細(xì)一點(diǎn)點(diǎn))
假設(shè) Alice 想要通過(guò)一個(gè)不可靠的媒體接收 Bob 的一條私人訊息。她可以用以下的方式來(lái)產(chǎn)生一個(gè)公鑰和一個(gè)密鑰:
隨意選擇兩個(gè)大的素?cái)?shù) p 和 q,p 不等于 q,計(jì)算 N=pq。
根據(jù)歐拉函數(shù),不大于 N 且與 N 互質(zhì)的整數(shù)個(gè)數(shù)為 (p-1)(q-1)
選擇一個(gè)整數(shù) e 與 (p-1)(q-1) 互質(zhì),并且 e 小于 (p-1)(q-1)
用以下這個(gè)公式計(jì)算 d:d × e ≡ 1 (mod (p-1)(q-1))
將 p 和 q 的記錄銷毀。
e 是公鑰,d 是私鑰。d 是秘密的,而 N 是公眾都知道的。Alice 將她的公鑰傳給 Bob,而將她的私鑰藏起來(lái)。
加密消息假設(shè) Bob 想給 Alice 送一個(gè)消息 m,他知道 Alice 產(chǎn)生的 N 和 e。他使用起先與 Alice 約好的格式將 m 轉(zhuǎn)換為一個(gè)小于 N 的整數(shù) n,比如他可以將每一個(gè)字轉(zhuǎn)換為這個(gè)字的 Unicode 碼,然后將這些數(shù)字連在一起組成一個(gè)數(shù)字。假如他的信息非常長(zhǎng)的話,他可以將這個(gè)信息分為幾段,然后將每一段轉(zhuǎn)換為 n。用下面這個(gè)公式他可以將 n 加密為 c:
計(jì)算 c 并不復(fù)雜。Bob 算出 c 后就可以將它傳遞給 Alice。
解密消息Alice 得到 Bob 的消息 c 后就可以利用她的密鑰 d 來(lái)解碼。她可以用以下這個(gè)公式來(lái)將 c 轉(zhuǎn)換為 n:
得到 n 后,她可以將原來(lái)的信息 m 重新復(fù)原。
解碼的原理是:
以及 ed ≡ 1 (mod p-1) 和 ed ≡ 1 (mod q-1)。費(fèi)馬小定理證明
這說(shuō)明(因?yàn)?p 和 q 是不同的素?cái)?shù))
好了,回到我們饑腸轆轆的大寶的故事來(lái)吧。
“我現(xiàn)在驗(yàn)證一段話,如果你能解出來(lái),就算這營(yíng)業(yè)執(zhí)照是你的吧?!贝髮氄f(shuō)著掏出一張白紙,背著攤主在紙上胡亂寫下幾個(gè)字——“戈壁灘上打醬油”。
大寶從證書中取出鑰匙——也就是公鑰了,再在紙上這么一比劃,“戈壁灘上打醬油”幾個(gè)字兒頓時(shí)被加密成 0101110...(篇幅所限,此處略去上千個(gè) 0、1)...1010101。
“給你,試試吧?!?/p>
“我說(shuō)是我的就是我的,”攤主從懷里摸出一把舊鑰匙(私鑰,當(dāng)然要藏好了),又在紙上一比劃,“那還能錯(cuò)的了了!”
0 和 1 漸漸隱去,“戈壁灘上打醬油”幾個(gè)字兒又冒了出來(lái)——解密驗(yàn)證成功,大寶無(wú)言以對(duì),只得承認(rèn)證書里的公鑰的確是攤主本人的,除非攤主從真所有者那里搶的私鑰。
“好吧,就算這證書是你的吧。那你憑什么說(shuō),你就是證書上寫的,”大寶撇了一眼營(yíng)業(yè)執(zhí)照,“什么致富寶什么的?”
大寶說(shuō)的沒(méi)錯(cuò),每個(gè)人都可以偽造證書,就算這公鑰確實(shí)屬于他又能何如。
“這買賣真難做!我不干了!”攤主這回真的急了。
“你不干了,我還要吃飯呢!”大寶也急了,二話不說(shuō)把攤主拉到了工商局——頒發(fā)營(yíng)業(yè)執(zhí)照的公信機(jī)構(gòu)。(可見,吃飯對(duì)大寶來(lái)說(shuō)是多么重要)
到了工商局,辦事員業(yè)務(wù)非常熟悉。
“證書真?zhèn)伪鎰e是么,請(qǐng)出示證書?!?/p>
辦事員拿著手持式掃描儀一掃,證書復(fù)印件就叮叮當(dāng)當(dāng)?shù)爻霈F(xiàn)在一旁的打印機(jī)中。只見他操起一把大剪刀,對(duì)著復(fù)印件“咔嚓”就是一刀,將證書拷貝一份為二。要不說(shuō)他業(yè)務(wù)熟悉么,這一刀不偏不倚,剛剛好把前面提到過(guò)的電子簽名部分剪了下來(lái)。
要說(shuō)這電子簽名是啥,還得先說(shuō)這證書是怎么簽發(fā)的。
當(dāng)初“致富寶”開道創(chuàng)業(yè)的時(shí)候,寫過(guò)一份營(yíng)業(yè)執(zhí)照申請(qǐng)函,內(nèi)容就是現(xiàn)在這剪下的兩半中,比較大的那一半——電子簽名是小半。工商局在評(píng)審了申請(qǐng)函之后,準(zhǔn)予營(yíng)業(yè),于是簽署了這一份證書,而證書中的電子簽名正是官方簽署的證據(jù)。
這到底還是公鑰和私鑰的討論。話說(shuō)工商局自己也有一對(duì)兒密鑰,專門用來(lái)簽署營(yíng)業(yè)執(zhí)照。當(dāng)申請(qǐng)函得到批準(zhǔn)的時(shí)候,辦事員用工商局專用私鑰在申請(qǐng)函上一比劃,這申請(qǐng)函就被“加密”成了一段電子簽名,也可以說(shuō),工商局在申請(qǐng)函上簽名批準(zhǔn)了。請(qǐng)注意,這申請(qǐng)函里到底包含什么呢?正如前面提到過(guò),基本信息是必須有的,另外一個(gè)很重要的部分就是申請(qǐng)者——或者叫攤主——的公鑰。畢竟公鑰也是一種數(shù)據(jù)嘛,當(dāng)作申請(qǐng)函數(shù)據(jù)的一部分來(lái)加密了。別弄渾了哦,辦事員用工商局的私鑰,加密了包含有攤主公鑰的申請(qǐng)函,制作成了攤主證書的電子簽名部分。這工商局的私鑰可是公信機(jī)構(gòu)獨(dú)有的,平常要鎖在很大的保險(xiǎn)柜里的,所以簽署出來(lái)的證書才是真的。
那我們就看看下一步,辦事員怎么來(lái)辨別真?zhèn)伟伞?/p>
“這是我們工商局的公鑰,大家可以免費(fèi)索取的。”辦事員從柜臺(tái)里搬出一箱子鑰匙,說(shuō)。
“那照這么說(shuō),有了這個(gè),”大寶撿起一枚鑰匙說(shuō),“我自己也能辨別真?zhèn)慰??!?/p>
“沒(méi)錯(cuò)?!鞭k事員也拿起一枚鑰匙,在電子簽名那一半上一比劃,龍飛鳳舞的電子簽名乎的一下,變成了一份申請(qǐng)函的模樣。
“哎喲,好像不對(duì)哦?!鞭k事員拿過(guò)剪下的大半,跟剛解密出來(lái)的申請(qǐng)函一比,“這哪是致富寶啊,明明寫的是致富堡嘛?!?/p>
大寶四下一看,那山寨攤主早溜之大吉了。真是虛驚一場(chǎng),好歹大寶沒(méi)有把錢給了那釣魚的山寨攤主。
理論上,假的電子簽名是不可能解密成跟原文僅一字之差的——實(shí)際上是什么都解不出來(lái)的,只有真的簽名才能解出原文來(lái)。另外為了減小數(shù)據(jù)量和其它考慮,原文在簽名之前,做過(guò)摘要處理。故事中做了一些簡(jiǎn)化,特此聲明。另外,雖然說(shuō)兩種密鑰都可以加解密,但專業(yè)地來(lái)說(shuō),公鑰是用來(lái)做加密和驗(yàn)證的,私鑰是用來(lái)做解密和簽名的。
如果您擁有一份“個(gè)人電子證書”,那么您也可以用您的私鑰簽署數(shù)據(jù)——比如發(fā)電子郵件,那么收到信的人都可以用您證書中的公鑰進(jìn)行驗(yàn)證,以確認(rèn)信件肯定是您親筆簽署的;反之,如果您的朋友有一份電子證書,那么您就可以很放心地用公鑰加密一些只有您朋友可以閱讀的數(shù)據(jù),然后安全地通過(guò)您不信任的傳播媒體——比如互聯(lián)網(wǎng)——傳遞到您朋友的手中。電子簽名在一定程度上,還保證了數(shù)據(jù)的完整性和不可抵賴性。
后面發(fā)生的事情,就是大寶跟他驗(yàn)過(guò)真身的“致富寶”隔著一條河交易的過(guò)程了。沒(méi)錯(cuò),我是說(shuō)隔著一條河——這個(gè)城市似乎忘記修橋了,大寶只能扯著嗓子喊,把他的銀行卡密碼告訴“致富寶”才行?,F(xiàn)在互聯(lián)網(wǎng)啊,真是危機(jī)四伏,你說(shuō)那個(gè)路由節(jié)點(diǎn)上沒(méi)趴著三五成群的嗅探器的(夸張手法,請(qǐng)保留意見)。要是大寶真?zhèn)€把密碼喊出來(lái),那沒(méi)等他吃完飯,卡里的錢就全沒(méi)了。所以咧,大寶就跟“致富寶”商量了一個(gè)辦法。
這個(gè)辦法當(dāng)然就是加密咯。大寶想用對(duì)方的公鑰加密自己的密碼,然后“喊”過(guò)去,對(duì)方解密出來(lái)就搞定了。但問(wèn)題是,大寶的數(shù)學(xué)實(shí)在是太差了,要算乘方的話,手指頭根本不夠他掰的。況且,要加密的也不僅僅只是 6 位密碼,還有像“中國(guó)農(nóng)業(yè)銀行青島市分行麥島支行”這樣的銀行名,還有很長(zhǎng)的銀行卡號(hào),更是還有大寶的大名——大衛(wèi)/阿基米德/寶蘭德/羅納爾迪尼柯夫斯基。要讓他把這些都加密算出來(lái),非把他餓死不可,非對(duì)稱加密算法并不適合于大批量的數(shù)據(jù)加密。所以,大寶想出了另一個(gè)辦法——對(duì)稱加密算法。
說(shuō)白了,就是用同一個(gè),也是唯一一個(gè)密鑰做加密解密的算法。原因么,簡(jiǎn)單唄。比如說(shuō),銀行卡密碼還是 8,那么加密就是 8 x 9 = 72,解密就是 72 / 9 = 8,這里的 9 就是對(duì)稱密鑰。
這種辦法的缺點(diǎn)很明顯,在雙方進(jìn)行加密通信之前,必須得先商量好一個(gè)對(duì)稱密鑰。并且一旦這個(gè)對(duì)稱密鑰丟了,那么所有數(shù)據(jù)都不安全了。像大寶這樣隔著一條河,大聲地告訴對(duì)方“喂~密鑰是 9!你除以 9 就行了!”,無(wú)異于直接把密碼告訴守在一旁的駭客。
大寶也不笨。9 作為對(duì)稱密鑰,不也是串兒數(shù)據(jù)么,反正也不長(zhǎng),用剛才想用的“非對(duì)稱加密算法”,加密了再喊過(guò)去就是了唄,問(wèn)題解決。
但是,這單單一個(gè) 9 實(shí)在是太好猜了,駭客只須認(rèn)得九九表,就能一個(gè)一個(gè)地試出來(lái)。相比于用成百上千年才能破解的“非對(duì)稱密鑰”,數(shù)到九九八十一簡(jiǎn)直就是一眨眼的功夫。
不過(guò)要么怎么說(shuō)“魔高一尺,道高一丈”呢,大寶有的是錦囊妙計(jì)。他把密碼、銀行名、卡號(hào)、持卡人姓名拼在一起,再隨機(jī)分成一小份兒一小份兒的,然后用不同的對(duì)稱密鑰,分別加密。這樣就增加了破解的難度,即使駭客破解出其中的一部分,也無(wú)法得到足夠的信息去盜取錢財(cái)。而實(shí)際中,還有更多的錦囊來(lái)保證信息的安全。
于是,我們就看到大寶為了買到他的宮爆雞丁,開始了 0 和 1 的傳輸。他先隨便定下了一個(gè)對(duì)稱密鑰,然后用“致富寶”證書的公鑰對(duì)其加密并傳給對(duì)方;等對(duì)方解密出同一個(gè)對(duì)稱密鑰之后,大寶開始用對(duì)稱算法加密傳輸數(shù)據(jù);過(guò)了 1 分鐘,暫停傳輸,重新定一個(gè)新的對(duì)稱密鑰,重復(fù)上述過(guò)程,直至數(shù)據(jù)全部傳輸完成。順便說(shuō)一句,這種為了安全和效率的綜合考慮,混合使用對(duì)稱算法和非對(duì)稱算法的方法,叫做“數(shù)字信封”機(jī)制,像 HTTPS、SSH/SFTP,以及選擇使用 SSL/TLS 的 IRC、IMAP 等協(xié)議,都是采用類似的這種機(jī)制實(shí)現(xiàn)的。
密碼正確,確認(rèn)付款,大寶終于吃到了他的宮爆雞丁,故事也到此告一段落了。但是現(xiàn)實(shí)生活中,如果您在網(wǎng)上交易的時(shí)候,應(yīng)該怎么做,才能保證數(shù)據(jù)的安全呢?
首先,您可以仔細(xì)觀察瀏覽器的地址欄,如果是像“https://fantix.org”(更新:域名已失效)這樣以 https 打頭的地址,那么您可以相信,至少這個(gè)地址采用了上述公鑰辦法做驗(yàn)證,并且所有數(shù)據(jù)都是加密傳輸?shù)?;否則如果是像“http://fantix.org”這樣的 http(沒(méi)有 s)打頭的,就完全沒(méi)有公鑰私鑰這一說(shuō),更沒(méi)有身份驗(yàn)證的機(jī)制(只是說(shuō)傳輸協(xié)議上沒(méi)有保證,不代表不通過(guò)其他方法進(jìn)行加密或驗(yàn)證),并且,發(fā)送未加密的數(shù)據(jù)就如同在互聯(lián)網(wǎng)上“喊”一樣,相當(dāng)危險(xiǎn)。
其次,一般瀏覽器像 FireFox,都會(huì)自動(dòng)驗(yàn)證服務(wù)器證書的真?zhèn)?,比如域名是否相符,是否在有效期?nèi)等。并且一般瀏覽器內(nèi)嵌了很多公信機(jī)構(gòu) CA 的證書(公鑰),您不需要自己跑到工商局去,瀏覽器會(huì)搞定的。一旦發(fā)現(xiàn)有冒名頂替者,必然會(huì)彈出大字兒,提醒您不要上了釣魚網(wǎng)站的當(dāng)。(廣告!FireFox 還可以辨識(shí)釣魚網(wǎng)站,如您不慎勿入其中,則 FireFox 將用醒目的紅字兒來(lái)警示您。)
在 FireFox 3(更新:現(xiàn)在已經(jīng)出到了 Firefox 27) 中,如果您瀏覽的頁(yè)面被公信機(jī)構(gòu)驗(yàn)證是貨真價(jià)實(shí)的,證書合法有效,那么地址欄中“https”前面應(yīng)該是綠色的,點(diǎn)擊它可以看到經(jīng)營(yíng)者信息;如果數(shù)據(jù)僅僅是加密過(guò),不會(huì)被第三方竊聽到的話,“https”前面的圖標(biāo)背景是藍(lán)色的(如上圖);而對(duì)于普通的“http”協(xié)議,背景是沒(méi)有特殊警示顏色的,比如在我的 Ubuntu 中,它是灰撲撲的。
補(bǔ)充說(shuō)明,我們只談了公鑰安全機(jī)制,但并不是說(shuō)綠色的標(biāo)志就一定安全——比如說(shuō)一些木馬就是最大的威脅。所以,如果您使用木馬和病毒比較多的操作系統(tǒng)——比如說(shuō) Microsoft Windows 的話(尤其是怕黑屏,沒(méi)有及時(shí)更新的盜版系統(tǒng)),我還是建議您,不要因?yàn)?FireFox 3 的綠色標(biāo)志,就把殺毒軟件、殺木馬軟件卸載掉。
這就是公鑰安全機(jī)制與宮爆雞丁的故事了,更流行的叫法是 PKI(Public-key Infrastructure, 公鑰基礎(chǔ)設(shè)施),包括一沓子算法、協(xié)議,還有一整套公信機(jī)構(gòu) CA(Certificate Authority,身份認(rèn)證機(jī)構(gòu))的官僚體系。沒(méi)準(zhǔn)過(guò)不了多久,我們就會(huì)人手一份個(gè)人電子證書,連身份證都免了。
版本歷史:
2014.2.18 - Markdown 版,增加了更新注釋。
2009.4.19 - 發(fā)布在 http://songshuhui.net/archives/12755。
2009.4.14 - 修改了靠后面,前后不一致的一點(diǎn)點(diǎn)。添加圖片、鏈接。排版。
2009.4.13 - 整理細(xì)節(jié)。
2009.4.7 - 替換了說(shuō)理的那段,整理了一下邏輯,完善了論據(jù)。
2009.4.3 - 用真正的例子,替換掉了原來(lái)一個(gè)很白癡的例子。其他有微小改動(dòng)。
2009.4.2 - 初稿完成。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/11109.html
摘要:首先,和擁有一對(duì)密鑰,接著,和互換公鑰,與互換公鑰互換公鑰后便可使用一種稱為橢圓曲線密鑰交換體制見維基百科的常見技術(shù)創(chuàng)建雙方的共享密鑰。上文僅是的基本介紹,下文將講解怎樣使用為區(qū)塊鏈上的信息加密。 你或許已經(jīng)知道,區(qū)塊鏈上的交易大多都是透明公開的,用戶既可以直接通過(guò)RPC查詢NEO節(jié)點(diǎn),也可以使用NEOTracker或NEOScan等方便好用的區(qū)塊鏈瀏覽器瀏覽交易記錄、余額、智能合約或...
摘要:列表嵌套列表,相當(dāng)于其他語(yǔ)言中的二維數(shù)組列表的基本操作宮保雞丁宮保雞丁糖醋里脊粉絲蒸蝦魚香肉絲魚香肉絲宮保雞丁糖醋里脊粉絲蒸蝦魚香肉絲宮保雞丁糖醋里脊宮保雞丁糖醋里脊粉絲蒸蝦魚香肉絲魚香肉絲宮保雞丁糖醋里脊粉絲蒸蝦魚香肉絲魚香肉絲宮保雞 列表(list) >>> type([1,2,3,4,5,6]) >>> type([hello,worls,1,9]) >>> type([he...
摘要:非對(duì)稱加密算法的安全性往往需要基于數(shù)學(xué)問(wèn)題來(lái)保障,目前主要有基于大數(shù)質(zhì)因子分解離散對(duì)數(shù)橢圓曲線等經(jīng)典數(shù)學(xué)難題進(jìn)行保護(hù)。消息認(rèn)證碼基于對(duì)稱加密,可以用于對(duì)消息完整性進(jìn)行保護(hù)。 Hash 算法與數(shù)字摘要 Hash (哈?;蛏⒘校┧惴ㄋ軐⑷我忾L(zhǎng)度的二進(jìn)制明文串映射為較短的(通常是固定長(zhǎng)度的)二進(jìn)制串(Hash值),并且不同的明文很難映射為相同的Hash值。 Hash 定義 Hash (哈希...
閱讀 3396·2023-04-25 14:07
閱讀 3466·2021-09-28 09:35
閱讀 2097·2019-08-30 15:55
閱讀 1412·2019-08-30 13:48
閱讀 2505·2019-08-30 13:16
閱讀 3206·2019-08-30 12:54
閱讀 3241·2019-08-30 11:19
閱讀 1881·2019-08-29 17:17