白話數字簽名(1)——基本原理

 摘要

本系列通過通俗易懂的講解,讓您就像讀小說一般,輕輕鬆鬆就能理解數字簽名的基本原理和應用方法(即使您是一個並不精通計算機的企業老總,也能讀懂本篇文章)。然後我們再逐步深入技術細節,最後將給出一個在B/S信息系統中使用數字簽名的DEMO。

由於數字簽名基於非對稱加密技術,所以我們需要先囉嗦一下對稱加密和非對稱加密技術。

對稱加密

何謂加密?加密是一種“把數據搞亂掉”的技術。加密技術涉及到4種東東:
明文:可以被人或程序識別的數據。例如一個文本文件、一段歌詞、一個Word文檔、一首MP3、一個圖片文件、一段視頻等等。
加密算法:將數據搞亂掉的方法。
密鑰(密碼):一個你在進行加密操作時給出的字符串,讓加密算法不但把明文“搞亂掉”,而且要亂得“與衆不同”。這樣即使別人搞到了解密算法,如果沒有當初加密時所使用的密碼,一樣無法進行解密操作。
密文:明文被加密算法和密鑰加密後的結果。它看上去就是一堆亂碼,沒有人或程序能知道它到底表示什麼信息。

作爲加密的一個實例,我將使用由我杜撰的“景氏替換加密算法”演示一下加密過程。
明文:good good study, day day up.
密鑰:google
景氏替換加密算法:將明文中的所有的字母“d”替換成密鑰。
密文:將“good good study, day day up.”中的所有字母“d”替換成“google”,就得到密文“googoogle googoogle stugoogley,  googleay googleay up.”。這個密文亂得還可以吧?一般人看了肯定不知道它是什麼意思。

那麼什麼是解密呢?解密就是把密文再變回明文的過程。
例如“景氏替換解密算法”就是:將密文中所有與密鑰相同的字符串替換成“d”。
密文:googoogle googoogle stugoogley,  googleay googleay up.
密鑰:google
景氏替換解密算法:將密文中所有與密鑰相同的字符串替換成“d”。
明文:將“googoogle googoogle stugoogley,  googleay googleay up.”中的所有“google”替換成“d”,就得到了明文“good good study, day day up.”。

您肯定已經注意到了,我們在進行加密和解密時使用的密鑰必須是相同的,例如在上例中,加密和解密都必須使用相同的密鑰“google”。所以像“景氏替換加密算法”這種就被稱爲對稱加密算法。目前最爲流行的對稱加密算法是DES和AES,此外,對稱加密算法還有IDEA、FEAL、LOKI、Lucifer、RC2、RC4、RC5、Blow fish、GOST、CAST、SAFER、SEAL等。WinRAR的文件加密功能就是使用的AES加密算法。

非對稱加密

非對稱加密算法是一類與衆不同的加密算法,它的密鑰不是1個,而是2個(一對),我們先姑且稱它們爲密鑰K1和密鑰K2。非對稱加密算法的特點是,如果用密鑰K1進行加密,則有且僅有密鑰K2能進行解密;反之,如果使用密鑰K2進行了加密,則有且僅有密鑰K1能進行解密。注意“有且僅有”的意思——如果用密鑰K1進行了加密,是不能用密鑰K1進行解密的;同樣,如果用密鑰K2進行了加密,也無法用密鑰K2進行解密。這是一個非常重要的特性,至於如何在實際中運用這個特性,請看下文。

我想給Clark傳送一個AV小電影,又怕被他的老婆發現......

話說俺得了一個很不錯的AV小電影,想通過網絡傳送給Clark,可是又怕被他的老婆發現(因爲Clark的老婆是一個超級黑客,她可以使用sniffer技術截獲任何通過網線傳送給Clark的數據。別跟我說用VPN,它超出了本文討論的範圍),怎麼辦呢?對了,我們需要一個“將數據搞亂掉”的技術——加密技術。我先使用WinRAR對小電影進行壓縮,然後加上密碼“TswcbyyqjsjhfL”(還記得麼?WinRAR的文件加密功能使用的是叫作AES的對稱加密算法)。接着,將這個加密後的文件通過QQ傳送給Clark。然後,興沖沖地撥打Clark的手機:
“喂?Clark麼?好久不見,呵呵......我給你發了個好東東呦,在QQ上,收到沒?......密碼是TswcbyyqjsjhfL,對,就是天生我才必有用,千金散盡還復來的首字母,第一個和最後一個字母要大寫呦......”
可是,Clark,我是真的不知道你的老婆大人剛剛就在你的身邊呀!而且你也知道,我打電話從來都是喜歡很大聲的......嗚嗚嗚......
在Clark跪了一夜的搓衣板之後,我們都明白:如果是已經保存在自己硬盤上的文件,使用對稱加密技術進行加密是沒有問題的;如果是兩個人通過網絡傳輸文件,使用對稱加密就很危險——因爲在傳送密文的同時,還必須傳送解密密鑰。我們需要一個與衆不同的加密算法,一個不需要傳遞解密密鑰的加密算法。非對稱加密正好可以滿足我們的需要。基本思路是這樣的:首先,生成一對滿足非對稱加密要求的密鑰對(密鑰K1和密鑰K2)。然後,將密鑰K1公佈在網上,任何人都可以下載它,我們稱這個已經公開的密鑰K1爲公鑰;密鑰K2自己留着,不讓任何人知道,我們稱這個只有自己知道的密鑰K2爲私鑰。當我想給Clark傳送小電影時,我可以用Clark的公鑰對小電影進行加密,之後這個密文就連我也無法解密了。這個世界上只有一個人能將密文解密,這個人就是擁有私鑰的Clark。

後來......

後來,Clark痛定思痛,決定申請一個數字證書。流程是這樣的:首先,登錄當地的數字證書認證中心網站,填表->出示個人有效證件原件和複印件->繳費->等待數字證書認證中心製作數字證書->領取數字證書。如果您的公司需要申請大量的數字證書,還可以與認證中心的銷售人員商量,先領取免費的試用版的數字證書供技術人員試用。
後來的後來,我又得到了一本電子版的不良漫畫,當然,我又想到了Clark。我先在數字證書認證中心下載了Clark的公鑰證書(就是一個含有公鑰信息的文件),使用非對稱加密算法對不良漫畫進行加密,再將密文通過QQ傳送給Clark。然後,我興沖沖地撥打Clark的手機:
“喂?Clark麼?好久不見,呵呵......我給你發了個好東東呦,在QQ上,收到沒?......已經用你的公鑰加密了。用你的私鑰解密就行了^_^”
Clark興沖沖地插入他的私鑰(忘了說了,私鑰並不是一個文件,而是一個USB設備,外形就跟U盤一樣,至於爲什麼要這樣,下一篇再說),解密,然後開始看漫畫,完全沒察覺他的老婆大人就在身後......

Clark,俺這個月手頭有點緊......

唉,這個月買了太多的書,到月底揭不開鍋了。正巧在QQ上遇到了Clark:
1-2-3:“Clark,我需要200兩紋銀,能否借給我?”
Clark:“沒問題。我這就給你轉賬。請給我一張借條。”
1-2-3:“太謝謝了,我這就用Word寫一個借條給你。”
然後,我新建一個Word文檔,寫好借條,存盤。然後,然後怎麼辦呢?我不能直接把借條發送給Clark,原因有:
    1. 我無法保證Clark不會在收到借條後將“紋銀200兩”改爲“紋銀2000兩”。
    2. 如果我賴賬,Clark無法證明這個借條就是我寫的。
    3. 普通的Word文檔不能作爲打官司的證據。
好在我早就申請了數字證書。我先用我的私鑰對借條進行加密,然後將加密後的密文用QQ發送給Clark。Clark收到了借條的密文後,在數字證書認證中心的網站上下載我的公鑰,然後使用我的公鑰將密文解密,發現確實寫的是“借紋銀200兩”,Clark就可以把銀子放心的借給我了,我也不會擔心Clark會篡改我的借條,原因是:
    1. 由於我發給Clark的是密文,Clark無法進行修改。Clark倒是可以修改解密後的借條,但是Clark沒有我的私鑰,沒法模仿我對借條進行加密。這就叫防篡改
    2. 由於用我的私鑰進行加密的借條,有且只有我的公鑰可以解密。反過來講,能用我的公鑰解密的借條,一定是使用我的私鑰加密的,而只有我才擁有我的私鑰,這樣Clark就可以證明這個借條就是我寫的。這就叫防抵賴
    3. 如果我一直賴着不還錢,Clark把我告上了法庭,這個用我的私鑰加密過的Word文檔就可以當作程堂證供。因爲我國已經出臺了《中華人民共和國電子簽名法》,使數字簽名具有了法律效力。
您一定已經注意到了,這個使用我的私鑰進行了加密的借條,具有了防篡改、防抵賴的特性,並且可以作爲程堂證供,就跟我對這個借條進行了“簽名”的效果是一樣的。對了,“使用我的私鑰對借條進行加密”的過程就叫做數字簽名。(由於數字簽名算法的速度比較慢,所以在實際對文件簽名的過程比上面提到的方法稍稍複雜一些,這個在下一篇再講)。

我是1-2-3,我真的是1-2-3,我是真的1-2-3

正如您已經知道的,Clark的老婆是一名超級黑客——就是傳說中能用計算機作任何事的人。這不,不久前她就輕鬆入侵了QQ數據庫,下載了Clark的所有好友的ID和密碼以及聊天記錄。然後,時不時地僞裝成Clark的好友跟Clark聊天,搞得Clark最近總是神經兮兮、疑神疑鬼的。這不,昨天我在QQ上遇到了Clark:
1-2-3:“Clark,最近還好吧?我又搞到一個好東東呦,要不要?”
Clark:“48475bbt556”
Clark並不是瘋掉了,那個“48475bbt556”也不是我跟Clark之間的什麼通關暗語。這個“48475bbt556”就是Clark在鍵盤上胡亂敲上去的,不過,我卻知道Clark是什麼意思。我立刻把“48475bbt556”粘貼到Word裏,然後用我的私鑰對這個Word文檔加密,再將這個Word文檔發送給Clark。Clark在那邊用我的公鑰將Word文檔解密,打開,發現裏面寫的就是“48475bbt556”,就知道QQ這邊的確就是真正的我本人了。因爲擁有我的私鑰的人在這個世界上就只有我一人而已,Clark的老婆大人就是再神通廣大也模仿不了,這就是數字簽名的驗證功能。

順便提一句,不但人可以申請數字證書,設備(例如Web服務器)也可以申請數字證書(叫作設備證書)。利用數字簽名的驗證功能,就可以驗證服務器的身份了,這可是防釣魚的終極解決方案呦。

思考題

如果Clark每次都向我發送相同的字符串(例如“1234”),而不是每次在鍵盤上胡亂地(隨機地)敲一些字符,Clark的老婆就會利用Clark的懶惰模仿我跟Clark聊QQ,這是爲什麼?

本篇到此結束,下一篇將介紹電子簽名技術的產品&設備。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章