簡介
數(shù)字簽名技術(shù)結(jié)合Hash算法和加密算法酸茴,來防止消息被篡改和進行身份認證平项。
消息認證碼
消息認證碼(Hash-based Message Authentication Code巍举,HMAC),利用對稱加密蚂蕴,對消息的完整性進行保護和身份認證纫塌。
基本過程如下:
- 通訊的雙方事先約定好Hash算法苛萎、對稱加密算法以及共享秘鑰桨昙;
- 發(fā)送方在發(fā)送消息前對消息先應(yīng)用Hash算法計算其指紋摘要,然后使用對稱加密技術(shù)對數(shù)字摘要進行加密腌歉,生成的密文就是消息認證碼蛙酪;
- 接收方在收到消息后,對消息認證碼進行解密并與計算出的消息摘要進行比對翘盖,來確認消息未被篡改并且來自共享秘鑰的發(fā)送方桂塞。
消息認證碼可以實現(xiàn)簡單的身份認證,其安全問題主要在于需要事先共享秘鑰(可能發(fā)生秘鑰泄露)馍驯,并且當多方共享秘鑰時阁危,無法追蹤消息的真實來源。
數(shù)字簽名
數(shù)字簽名使用非對稱加密汰瘫,保護數(shù)據(jù)的完整性和追蹤消息的來源狂打。
基本過程如下:
- 發(fā)送方生成非對稱加密算法的公鑰和私鑰對,并公布其公鑰和簽名算法(例如sha256WithRSAEncryption)混弥;
- 發(fā)送方對發(fā)送的消息先計算其數(shù)字摘要趴乡,然后使用私鑰對摘要進行加密,生成數(shù)字簽名蝗拿;
- 接收方在接收到聲稱來自XXX的消息時晾捏,先去查詢XXX的公布的公鑰和簽名算法;
- 接收方使用公鑰對數(shù)字簽名解密并與計算出的數(shù)字摘要進行比對哀托,如果比對一致惦辛,那么消息來自于XXX并且未被篡改。
上述過程的安全前提基于以下兩點:
- 發(fā)送方的簽名算法無法被破解仓手,且私鑰未發(fā)生泄露
- 接收方查詢的公鑰以及簽名算法屬實
上述的第二個安全前提就是數(shù)字證書與PKI體系的由來胖齐,如何管理和分發(fā)公鑰玻淑。
多重簽名
多重簽名(Multiple Signature),即 n 個簽名者中市怎,收集到至少 m 個(n >= m >= 1)的簽名岁忘,即認為合法辛慰。
其中区匠,n 是提供的公鑰個數(shù),m 是需要匹配公鑰的最少的簽名個數(shù)帅腌。
多重簽名可以有效地被應(yīng)用在多人投票共同決策的場景中驰弄。例如比特幣系統(tǒng)中,利用多重簽名來實現(xiàn)多個人共同管理某個賬戶的比特幣交易速客;在Fabric中使用多重簽名來對某個事務(wù)進行背書戚篙。
安全性
目前常見的數(shù)字簽名算法需要選取合適的隨機數(shù)作為配置參數(shù),配置參數(shù)不合理的使用或泄露都會造成安全漏洞和風險溺职。
切記一定不要使用自己寫的代碼或使用編程語言內(nèi)建的簡易隨機數(shù)生成器來獲得一個隨機數(shù)岔擂。建議使用密碼學安全的偽隨機數(shù)生成器(CSPRNG),并且需要有一個來自具有足夠熵值的源的種子浪耘。使用隨機數(shù)發(fā)生器的程序庫時乱灵,需仔細研讀其文檔,以確保它是加密安全的七冲。對CSPRNG的正確實現(xiàn)是密鑰安全性的關(guān)鍵所在痛倚。