標籤:加密 解密 金融 支付 簽名
轉載請註明出處
http://blog.csdn.net/pony_maggie/article/details/35389657
作者:小馬
這幾個概念在金融電子支付領域用得比較多,我忽然覺得把它們串起來一起講,層層引入,可能更好理解一些。希望能以最簡單樸實的方式講明白他們之間的關係。
一非對稱演算法
關於非對稱演算法,你只要知道下面這些就行了,密鑰是一對,一個叫公開金鑰,一個叫私密金鑰,前者公開,後者保密。假設你有一對公私密金鑰,給你一串資料,你可以用私密金鑰加密,然後把密文和公開金鑰都放出去,別人可以用這個公開金鑰解密。同樣反過來,別人也可以用這個公開金鑰加密一串資料,你用對應的私密金鑰解密。可以用來表示:
二 散列
散列也叫雜湊,學過資料結構的人對這個概念都不陌生。簡單來講,給你一串資料A,這個資料可以很長,你通過一個演算法把它們轉變成一個很短的固定長度(不管源串有多長)的另一串資料B。這個過程就叫散列,資料B叫資料A的散列值(或者叫雜湊值,或者叫摘要)。
再深入一些。大部分情況下,A和B是一一對應的(這也是我們希望的),也就是說,如果我還有個A1,那麼它的散列值B1和B不會相等。但是理想豐滿,現實讓人反感,B1有可能和B相等。這種現象有個學名叫”碰撞”,增加散列值的位元是防碰撞的一個方法,因為很自然位元越長,完全相同的機率就越小。目前認為超過128位的散列值都能很好的防碰撞。後面我們講到簽名時,假定是沒有碰撞的。
最後再補充一點,散列具有無法復原性,也就是你沒法從B還原回A,即使散列演算法是公開的。
三數位簽章
生活中我們用簽名代表自己的身份,比如領導簽署一個檔案,大家看到這個簽名,就確認是這個領導簽的,就代表他本人。簽名只佔用很小的資訊(一般是兩個字或三個字,日本人的可能長一些),卻能表示你整個人的資訊,這種思想確實意義很大,我們把它用在電子化的簽名過程,也就是數位簽章。
數位簽章的過程是這樣的,比如小明有一串資料A要發給小紅,小明先用散列產生一個A的摘要B,然後把B用一個私密金鑰加密後附在A的後面發給小紅,小紅有公開金鑰(因為是公開的),她先用這個公開金鑰解密A後面的資料得到B,然後自己把A散列一些算出一個B1, 比較B1和B如果相等,首先能說明資料是小明發過來的,因為只有小明才有私密金鑰,其次能說明A在傳輸過程中沒有被改過,因為如果修改過,散列值肯定不相等。上述過程可以用說明:
可能有有會有問題,資料A似乎沒有加密?,確實是這樣,因為這個不是小紅所關心的,小紅只關心這個資料是不是小明發的,資料的內容沒那麼重要。其實也不難理解,就跟你去超市刷卡購物一樣,小票需要你簽字作為對賬的憑證,人們只關心這個簽名是不是你本人的,對於小票的內容沒這麼關心。
四認證
仔細想想上面的驗證簽名的過程,似乎天衣無縫。但其實有個問題,小紅的公開金鑰是哪來的?有人說這個不是公開的嗎,隨便哪都可以,可以是問別人要的,可以是網上找的。其實不然,驗簽的前提,是小紅已經假設她手上的公開金鑰和小明的私密金鑰是一對的。如果小王產生一對非法的公私密金鑰對,然後給小紅公開金鑰,給她說這是小明的,就會產生問題了。所以小紅要有明確的途徑確認她的公開金鑰是合法的。
打個比方,一個人站在你面前,你沒法判斷他是好人還是壞人,但是如果法院告訴你這個人是殺人犯,你肯定會選擇相信,因為法院是權威機構。同樣的,對於公開金鑰這樣的”公開的敏感資訊”,也需要一個權威機構來認定。這個機構叫CA(certification authority)。這樣小紅只要是從CA拿的公開金鑰,就可以認為它是合法的了。
CA一般不會直接下發公開金鑰,它通常把公開金鑰資訊和一些附加資訊(比如公開金鑰產生的日期,有效期間等)一起按照一定的格式組織起來下發,這種組織起來的資料就叫做認證。認證的作用就是它有一定的格式,這個格式還是個標準,全世界都用它,這樣就很方便傳播。目前用得比較多的認證就是著名的x.509。