数字签名算法分为两种一种是对称签名算法,一种是非对称签名算法
- 非对称签名算法
DSA,RSA,ECDSA这些都是非对称签名算法,先用SHA算法对明文做hash运算获取摘要信息,然后用私钥对摘要信息进行加密,接收方用公钥对加密后的摘要信息解密并与明文的摘要信息进行对比。非对称签名算法可以在不安全通道中进行。
非对称签名算法通常用于身份认证和数字证书。
签名算法要与Hash算法一起使用,一般写作RSA-SHA256,ECDSA-SHA512。 -
对称签名算法
HMAC,CMAC,GMAC这些都是对称签名算法,使用一个对称的共享密钥和消息(可以加密前hash也可以加密后hash,CCM是加密前验证,GCM是加密后验证)作为输入(类似加盐,其实就是标准化的加盐算法)生成摘要信息,然后把摘要信息发送给对方,对方也使用共享的密钥和消息(通常是加密后的)作为输入生成摘要信息。
HMAC是基于Hash的MAC算法,CMAC和GMAC是基于对移加密的MAC算法(在加密的同时生成MAC),HMAC速度更快。
AES-GMAC(CTR模式)是一个仅生成MAC然后把加密后的密文给丢掉的算法,是AES-GCM去掉了加密功能。但在有的资料中指去掉了AE功能的GCM(可能是误用)。
AES-CMAC(CBC模式)是通过对前一段密文进行异或然后做AES加密来生成MAC,过程与CBC模式一致,仅支持签名,不支持加密。
对称签名算法通常与其它加密算法一起使用,如用密钥交换算法生成共享密钥,使用AES算法加密消息。
对称签名算法运算速度快,通常用于数据完整性验证。
签名算法要与Hash算法一起使用,一般写作HMAC-SHA256,HMAC-SHA512。
HMAC的定义可以查看RFC2104