數(shù)字簽名的工作原理以及所面臨的挑戰(zhàn)介紹
數(shù)字簽名是用于驗(yàn)證數(shù)字和數(shù)據(jù)真實(shí)性和完整性的加密機(jī)制。我們可以將其視為傳統(tǒng)手寫簽名方式的數(shù)字化版本,并且相比于簽字具有更高的復(fù)雜性和安全性。
簡而言之,我們可以將數(shù)字簽名理解為附加到消息或文檔中的代碼。在生成數(shù)字簽名之后,其可以作為證明消息從發(fā)送方到接收方的傳輸過程中沒有被篡改的證據(jù)。
雖然使用密碼學(xué)保護(hù)通信機(jī)密性的概念可以追溯到古代,但隨著公鑰密碼學(xué)(PKC)的發(fā)展,數(shù)字簽名方案在20世紀(jì)70年代才成為現(xiàn)實(shí)。因此,要了解數(shù)字簽名的工作原理,我們首先需要了解散列函數(shù)和公鑰加密的基礎(chǔ)知識。
散列函數(shù)
哈希是數(shù)字簽名中的核心要素之一。哈希值的運(yùn)算過程是指將任意長度的數(shù)據(jù)轉(zhuǎn)換為固定長度。這是通過稱為散列函數(shù)的特殊運(yùn)算實(shí)現(xiàn)的。經(jīng)過散列函數(shù)運(yùn)算而生成的值稱為哈希值或消息摘要。
當(dāng)哈希值與加密算法相結(jié)合,即使用加密散列函數(shù)的方法來生成散列值(摘要),該值可作為唯一的數(shù)字指紋。這意味著對于輸入數(shù)據(jù)(消息)的任何更改都會導(dǎo)致有完全不同的輸出值(散列值)。這就是加密散列函數(shù)被廣泛用于驗(yàn)證數(shù)字和數(shù)據(jù)真實(shí)性的原因。
公鑰加密(PKC)
公鑰加密或PKC是指使用一對密鑰的加密系統(tǒng):公鑰和私鑰。這兩個密鑰在數(shù)學(xué)上是相關(guān)的,可用于數(shù)據(jù)加密和數(shù)字簽名。
作為一種加密工具,PKC相比于對稱加密具有更高的安全性。對稱加密系統(tǒng)依賴于相同的密鑰進(jìn)行加密和解密信息,但PKC則使用公鑰進(jìn)行數(shù)據(jù)加密,并使用相應(yīng)的私鑰進(jìn)行數(shù)據(jù)解密。
除此之外,PKC還可以應(yīng)用于生成數(shù)字簽名。本質(zhì)上,該過程發(fā)送方使用自己的私鑰對消息(數(shù)據(jù))的哈希值進(jìn)行加密。接下來,消息的接收者可以使用簽名者提供的公鑰來檢查該數(shù)字簽名是否有效。
在某些情況下,數(shù)字簽名本身可能包括了加密的過程,但并非總是這樣。例如,比特幣區(qū)塊鏈?zhǔn)褂肞KC和數(shù)字簽名,而并不像大多數(shù)人所認(rèn)為的,這個過程中并沒有進(jìn)行加密。從技術(shù)上講,比特幣又部署了所謂的橢圓曲線數(shù)字簽名算法(ECDSA)來驗(yàn)證交易。
數(shù)字簽名的工作原理
在加密貨幣的背景下,數(shù)字簽名系統(tǒng)通常包含三個基本流程:散列、簽名和驗(yàn)證。
對數(shù)據(jù)進(jìn)行散列
第一步是對消息或數(shù)據(jù)進(jìn)行散列。通過散列算法對數(shù)據(jù)進(jìn)行運(yùn)算,生成哈希值(即消息摘要)來完成的。如上所述,消息的長度可能會有很大差異,但是當(dāng)消息被散列后,它們的哈希值都具有相同的長度。這是散列函數(shù)的最基本屬性。
但是,僅僅將消息進(jìn)行散列并不是生成數(shù)字簽名的必要條件,因?yàn)橐部梢允褂盟借€對沒有進(jìn)行過散列的消息進(jìn)行加密。但對于加密貨幣,消息是需要經(jīng)過散列函數(shù)處理的,因?yàn)樘幚砉潭ㄩL度的哈希值有助于加密貨幣的程序運(yùn)行。
簽名
對信息進(jìn)行散列處理后,消息的發(fā)件人需要對其消息進(jìn)行簽名。這里就用到了公鑰密碼學(xué)。有幾種類型的數(shù)字簽名算法,每種算法都有自己獨(dú)特的運(yùn)行機(jī)制。本質(zhì)上,都是使用私鑰對經(jīng)過散列的消息(哈希值)進(jìn)行簽名,然后消息的接收者可以使用相應(yīng)的公鑰(由簽名者提供)來檢查其有效性。
換句話說,如果在生成簽名時不使用私鑰,則消息的接收者將不能使用相應(yīng)的公鑰來驗(yàn)證其有效性。公鑰和私鑰都是由消息的發(fā)送者生成的,但僅將公鑰共享給接收者。
需要注意的是,數(shù)字簽名與每條消息的內(nèi)容相關(guān)聯(lián)。因此,與手寫簽名所不同,每條消息的數(shù)字簽名都是不同的。
驗(yàn)證
讓我們舉一個例子說明下整個過程,包括從開始直到最后一步的驗(yàn)證。我們假設(shè)Alice向Bob發(fā)送一條消息、并將該消息進(jìn)行散列得到哈希值,然后將哈希值與她的私鑰結(jié)合起來生成數(shù)字簽名。數(shù)字簽名將作為該消息的唯一數(shù)字指紋。
當(dāng)Bob收到消息時,他可以使用Alice提供的公鑰來檢查數(shù)字簽名的有效性。這樣,Bob可以確定簽名是由Alice創(chuàng)建的,因?yàn)橹挥兴龘碛信c該公鑰所對應(yīng)的私鑰(至少這與我們所假設(shè)的一致)。
因此,Alice需要保管好私鑰至關(guān)重要。如果另一個人拿到了Alice的私鑰,他們就同樣可以創(chuàng)建數(shù)字簽名并偽裝成Alice。在比特幣的背景下,這意味著有人可以使用Alice的私鑰,并可在未經(jīng)她知曉的情況下轉(zhuǎn)移或使用她的比特幣。
為什么數(shù)字簽名很重要?
數(shù)字簽名通常用于實(shí)現(xiàn)以下三方面目標(biāo):數(shù)據(jù)完整性、身份驗(yàn)證和不可否認(rèn)性。
數(shù)據(jù)完整性。Bob可以驗(yàn)證Alice的消息是否發(fā)生了篡改。消息中的任何變動都會產(chǎn)生完全不同的數(shù)字簽名。
真實(shí)性。只要Alice將其私鑰保管好,Bob就可以使用她的公鑰來確認(rèn)數(shù)字簽名是由Alice本人所創(chuàng)建的,而非其他人所為。
不可否認(rèn)性。生成簽名后,Alice將來無法否認(rèn)簽名該簽名,除非她的私鑰以某種方式泄露出去。
案例
數(shù)字簽名可以應(yīng)用于各種數(shù)字文檔和證書。因此,他們有幾個應(yīng)用程序。一些最常見的案例包括:
信息技術(shù)。增強(qiáng)互聯(lián)網(wǎng)通信系統(tǒng)的安全性。
金融。數(shù)字簽名可以應(yīng)用于審計(jì)、財(cái)務(wù)報告、貸款協(xié)議等等。
法律。數(shù)字簽名可以應(yīng)用于各種商業(yè)合同和法律協(xié)議,包括政府文件。
衛(wèi)生保健。數(shù)字簽名可以防止處方和醫(yī)療記錄的欺詐。
Blockchain。數(shù)字簽名方案確保只有加密貨幣的合法所有者才能簽署交易,并移動資金(只要他們的私鑰不受侵害)。
局限性
數(shù)字簽名方案面臨的主要挑戰(zhàn)主要局限于以下三方面因素:
算法。數(shù)字簽名方案中使用的算法對質(zhì)量要求很高。其中包括可靠的散列函數(shù)和加密系統(tǒng)的選擇。
實(shí)施。如果算法很完備,但卻沒有一個良好的實(shí)施方案,數(shù)字簽名系統(tǒng)也可能會出現(xiàn)隱患。
私鑰。如果私鑰丟失或以某種方式泄露,則真實(shí)性和不可否認(rèn)性將得不到保證。對于加密貨幣用戶而言,丟失私鑰可能會導(dǎo)致重大的財(cái)產(chǎn)損失。
電子簽名與數(shù)字簽名
簡而言之,數(shù)字簽名可以理解為是一種特定類型的電子簽名,特指使用電子化的方式簽署文檔和消息。因此,所有數(shù)字簽名都可認(rèn)為是電子簽名,但反之并非如此。
它們之間的主要區(qū)別在于身份驗(yàn)證方式。數(shù)字簽名需要部署加密系統(tǒng),例如散列函數(shù)、公鑰加密和加密技術(shù)。
總結(jié)
散列函數(shù)和公鑰加密是數(shù)字簽名系統(tǒng)的核心,現(xiàn)已在各種案例中使用。如果實(shí)施得當(dāng),數(shù)字簽名可以提高安全性,確保完整性,便于對各類數(shù)據(jù)進(jìn)行身份驗(yàn)證。
在區(qū)塊鏈領(lǐng)域,數(shù)字簽名用于簽署和授權(quán)加密貨幣交易。它們對比特幣尤為重要,因?yàn)閿?shù)字簽名能夠確保代幣只能由擁有相應(yīng)私鑰的人使用。
雖然我們多年來一直使用電子和數(shù)字簽名,但仍有很大的發(fā)展空間。如今大部分的公文仍然還是基于紙質(zhì)材料,但隨著更多的系統(tǒng)遷移到數(shù)字化中,我們還會看到更多的數(shù)字簽名方案。