摘要
本系列通過通俗易懂的講解,讓您就像讀小說一般,輕輕鬆鬆就能理解數位簽章的基本原理和應用方法(即使您是一個並不精通電腦的企業老總,也能讀懂本篇文章)。然後我們再逐步深入技術細節,最後將給出一個在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裝置,外形就跟隨身碟一樣,至於為什麼要這樣,下一篇再說),解密,然後開始看漫畫,完全沒察覺他的老婆大人就在身後......
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,這是為什嗎?
本篇到此結束,下一篇將介紹電子簽名技術的產品&裝置。