简介
数字签名技术结合Hash算法和加密算法,来防止消息被篡改和进行身份认证。
消息认证码
消息认证码(Hash-based Message Authentication Code,HMAC),利用对称加密,对消息的完整性进行保护和身份认证。
基本过程如下:
- 通讯的双方事先约定好Hash算法、对称加密算法以及共享秘钥;
- 发送方在发送消息前对消息先应用Hash算法计算其指纹摘要,然后使用对称加密技术对数字摘要进行加密,生成的密文就是消息认证码;
- 接收方在收到消息后,对消息认证码进行解密并与计算出的消息摘要进行比对,来确认消息未被篡改并且来自共享秘钥的发送方。
消息认证码可以实现简单的身份认证,其安全问题主要在于需要事先共享秘钥(可能发生秘钥泄露),并且当多方共享秘钥时,无法追踪消息的真实来源。
数字签名
数字签名使用非对称加密,保护数据的完整性和追踪消息的来源。
基本过程如下:
- 发送方生成非对称加密算法的公钥和私钥对,并公布其公钥和签名算法(例如sha256WithRSAEncryption);
- 发送方对发送的消息先计算其数字摘要,然后使用私钥对摘要进行加密,生成数字签名;
- 接收方在接收到声称来自XXX的消息时,先去查询XXX的公布的公钥和签名算法;
- 接收方使用公钥对数字签名解密并与计算出的数字摘要进行比对,如果比对一致,那么消息来自于XXX并且未被篡改。
上述过程的安全前提基于以下两点:
- 发送方的签名算法无法被破解,且私钥未发生泄露
- 接收方查询的公钥以及签名算法属实
上述的第二个安全前提就是数字证书与PKI体系的由来,如何管理和分发公钥。
多重签名
多重签名(Multiple Signature),即 n 个签名者中,收集到至少 m 个(n >= m >= 1)的签名,即认为合法。
其中,n 是提供的公钥个数,m 是需要匹配公钥的最少的签名个数。
多重签名可以有效地被应用在多人投票共同决策的场景中。例如比特币系统中,利用多重签名来实现多个人共同管理某个账户的比特币交易;在Fabric中使用多重签名来对某个事务进行背书。
安全性
目前常见的数字签名算法需要选取合适的随机数作为配置参数,配置参数不合理的使用或泄露都会造成安全漏洞和风险。
切记一定不要使用自己写的代码或使用编程语言内建的简易随机数生成器来获得一个随机数。建议使用密码学安全的伪随机数生成器(CSPRNG),并且需要有一个来自具有足够熵值的源的种子。使用随机数发生器的程序库时,需仔细研读其文档,以确保它是加密安全的。对CSPRNG的正确实现是密钥安全性的关键所在。
网友评论