发送方签名由三个步骤组成。第一步,对原始数据(如合同文件、API 请求参数、交易信息)使用约定的哈希算法(如 SHA-256、SM3)计算摘要,得到固定长度的哈希值。第二步,使用发送方自己的私钥对该哈希值进行签名运算,生成数字签名串。第三步,将原始数据与数字签名一同发送给接收方,在某些场景下还会附上包含公钥的数字证书,以便接收方验证公钥的合法性。
接收方验签同样是三个核心步骤。第一步,接收原始数据和数字签名,若附带数字证书则先验证证书链的有效性。第二步,使用发送方公开的公钥对数字签名进行验证运算,得到发送方声称的原始哈希值。第三步,使用与发送方完全相同的哈希算法,对收到的原始数据重新计算哈希值,将两次得到的哈希值进行比对,若完全一致则验签成功。
签名与验签必须使用相同的哈希算法,否则验签必然失败。发送方使用 SHA-256 计算摘要,接收方也必须使用 SHA-256 重新计算,若误用 SHA-1 或 SM3,计算结果将完全不同。在实践中,哈希算法标识通常随签名数据一同传输,接收方据此选择对应的哈希算法,部分签名标准(如 RSA-PSS)还将哈希算法标识嵌入签名结构中,进一步降低算法不匹配的风险。
在实际应用中,接收方需要确认用于验签的公钥确实属于声称的发送方,这一确认过程由数字证书完成。数字证书是由权威证书颁发机构(CA)签发的电子身份凭证,将发送方身份信息与公钥绑定。接收方通过验证证书的数字签名(由 CA 私钥签署)来确认公钥的合法性,再沿证书链向上追溯至受信任的根证书,建立完整的信任链。