信息安全工程师考试中,数字签名、消息认证、哈希函数这三个概念经常被命题人打包在一起考查。2020 年真题问 SM2 数字签名算法基于什么数学难题,2024 年真题问哪个算法用于报文认证和哪个用于数字签名,还有一道题专门考了 SM3 杂凑算法的输出长度——这些都不是孤立的考法,一旦把认证、签名、加密这三件事的功能边界搞混,很容易在考场上全盘失分。
更麻烦的是,国密算法 SM2、SM3、SM4、SM9 的用途各不相同,如果只记住了 SM 系列是国密标准而没有分清各自的功能分工,碰到问"国密杂凑算法是哪个"这种题就会和张冠李戴的干扰项正面遭遇。
本文从认证和加密的区别讲起,逐层推导哈希函数的技术特性、消息认证码的构造方式、数字签名的完整过程,最后梳理国产密码算法体系中每个算法的正确定位,帮你从根本上理清这组常考概念的脉络。
这三个概念在安全服务领域各司其职,但考生常常把它们的功能边界搞混。非对称加密解决的是保密性问题,目标是确保数据在传输和存储过程中不被未授权者读取。加密后的密文只有持有正确密钥的一方能够解密还原出明文。典型的加密算法包括 AES、DES、3DES、RC4 和国密 SM4。
认证解决的是完整性和真实性问题,目标是确保数据在传输过程中没有被篡改,并且发送方的身份是真实的。认证不关心数据是否被他人看到,只关心数据是否被改过以及是不是冒充者发来的。理解了这个功能边界,就能明白为什么 2020 年真题考的"认证和加密都可以阻止对手进行被动攻击"这个说法是错误的——认证阻止的是主动攻击即篡改和伪造,而不是被动攻击即窃听,被动攻击只能由加密来防御。
数字签名在认证的基础上更进一步,额外提供了不可否认性。认证可以证明"这个消息确实来自声称的发送方",但发送方事后可以抵赖说"我没发过"。数字签名则通过密码学机制锁定发送方身份,使得发送方无法事后否认自己的签名行为。这一点在法律和商业场景中至关重要。2024 年真题直接考了数字签名与报文认证的功能区分——报文认证用 SHA-1,数字签名用 RSA,命题人显然在测试考生对这两个概念在密码学体系中定位的理解。
可以用一个交通场景来帮助记忆三者的区别:加密相当于把信件装进了不透明的密封信封,防止路上被偷看;认证相当于在信封上盖了一个火漆印,对方收到后检查火漆印是否完好就知道有没有被拆过;数字签名相当于在信尾签上自己的名字,而且用的是别人无法模仿的特殊墨水,事后无法说"这不是我签的"。
无论是消息认证还是数字签名,都离不开哈希函数这个基础构件。哈希函数也叫密码杂凑或散列函数,它的核心特性是:输入任意长度的消息,输出固定长度的摘要值。一个好的密码学哈希函数必须同时满足三个安全特性。
第一个特性是单向性,也叫抗原像攻击性。给定一个哈希值,在计算上不可能反向推导出原始消息。这个特性的技术基础是哈希函数的压缩过程是一个信息丢失的过程——无论输入多长,输出都是固定长度,丢失的信息量决定了反向推导的不可行性。第二个特性是弱抗碰撞性,即给定一个消息和它的哈希值,在计算上不可能找到另一个不同的消息具有相同的哈希值。第三个特性是强抗碰撞性,即在计算上不可能找到任意两个不同的消息具有相同的哈希值。强抗碰撞性蕴含弱抗碰撞性,但反过来不成立。
这些安全特性直接支撑了哈希函数在安全领域的两个核心应用。第一个应用是完整性验证——发送方将消息和其哈希值一同发送,接收方重新计算哈希值并比对,如果一致则说明消息未被篡改。第二个应用是作为数字签名的预处理步骤——直接对长消息做非对称加密太慢了,所以数字签名实际上是对消息的哈希值进行签名而非对原始消息签名。签名长度固定且与原始消息长度无关,这就是哈希函数带来的效率优势。
雪崩效应是衡量哈希函数质量的一个重要指标,指的是输入发生微小变化时输出应该发生剧烈变化。理想的哈希函数中,输入改变一个比特,输出中大约有一半的比特会翻转。2020 年真题第 18 题考了一个很有价值的对比:AES、MD5、RC4 都具有雪崩效应,而 RSA 不具有雪崩效应。原因是 RSA 的加密过程是模幂运算即密文等于明文取某次方再取模,输入改变时输出不一定会发生大范围的比特翻转。这道题的陷阱在于考生容易把"公开密钥算法"和"哈希函数"的雪崩效应概念混淆——雪崩效应是分组密码和哈希函数的设计目标,而 RSA 属于公钥密码体系,其安全基础是大整数因子分解的数学困难问题,不依赖雪崩效应。
消息认证码是哈希函数在认证场景中的直接应用。MAC 的基本原理是把消息和一个共享的对称密钥一起输入到一个带密钥的哈希函数中,输出一个固定长度的认证标签。接收方用自己的密钥重新计算认证标签,与收到的标签比对,匹配则说明消息完整且来自持有同一密钥的对方。
MAC 的安全性建立在两个前提之上:一是哈希函数的单向性保证攻击者无法从标签反推消息;二是密钥的保密性保证攻击者无法自己生成合法的认证标签。但 MAC 有一个天生的局限——它依赖通信双方共享同一个对称密钥,这意味着它无法提供不可否认性。如果双方发生了争议,第三方无法判断消息究竟是哪一方生成的,因为双方持有完全相同的密钥。MAC 只能证明"持有密钥的一方发出了消息",而无法证明"具体是哪一方"。
HMAC 是 MAC 的一种工业标准实现,全称是基于哈希的消息认证码。它在标准哈希函数如 SHA-256 或 SM3 的基础上,通过两次哈希运算和密钥填充,消除了将密钥简单拼接在消息前后带来的长度扩展攻击风险。HMAC 的构造使用了内外两层密钥垫,内层密钥垫与消息拼接后进行第一次哈希,外层密钥垫与第一次哈希结果拼接后进行第二次哈希,这种双层结构是 HMAC 安全性的核心。
数字
本篇完!