公钥密码算法又叫非对称密码算法,打破了对称密码算法加密与解密必须用相同密钥的限制,不错地处理了对称密码算法的密钥管理难题。公钥密码算法一般包括公钥加密算法、数字签名算法和密钥协商算法。密钥协商算法一般基于公钥加密算法,结合特定密码协议,来协商通信双方共同用的密钥。
(一)公钥加密算法
公钥加密算法加密与解密用不一样的密钥。其中加密的密钥被公开,叫做公钥;解密的密钥被保密,叫做私钥。公钥与私钥是密切关联的,从私钥可推导出公钥,反之不行。
在应用公钥加密算法时,每个用户均有自己的一对公钥与私钥,公钥公开,私钥保密。需向谁秘密通信,只需用谁的公钥对消息加密,有相应私钥的人可解密得到明文,而没有相应私钥的人都不能解密。如果说对称密码像带锁的箱子,加解密用同一个钥匙,那么公钥加密就如同换成带投递口的私人报箱,任何人可从投递口放入消息,但只有拥有钥匙的人才能打开报箱。
公钥加密的速度一般比对称加密慢,主要用于短数据的加密。例如,用公钥加密算法建立共享密钥,即把对称密码的密钥当作消息,用公钥加密后发给对方。对方解密后得到对称密码的密钥,再用它进行数据的对称加解密。
SM2算法是我国颁布的商用密码标准算法中的公钥密码算法。SM2算法基于椭圆曲线上离散对数计算困难问题,密钥长度是256bit,具有密钥长度短、安全性高等特点。SM2算法中的公钥加密算法可应用于数据加解密与密钥协商等。
(二)数字签名算法
数字签名算法也叫电子签名算法,可实现类似于手写签名的功能,但借助数学方法,比手写签名更安全、功能更强。
在应用数字签名算法时,每个签名者均有一对公钥与私钥,公钥公开,私钥保密。与公钥加密用公钥与私钥的顺序不同,数字签名用私钥对消息签名,这一过程称为签名过程;用公钥验证签名,这一过程叫做验证过程。
数字签名算法可用于确认数据的完整性、签名者身份的真实性与签名行为的不可否认性等。因为数字签名是用私钥产生的,没有私钥不能产生有效的签名,所以数字签名是不可伪造的。因为签名者和公钥有一一对应关系,可用公钥对数字签名公开验证,因此合法的签名是能公开验证的。因为只能用签名者的公钥验证签名,所以签名者不能否认自己签过的签名。由于一般需签名的消息或文件很长,实际中数字签名算法都要把消息用杂凑算法压缩,再签名。
SM2算法中的数字签名算法已在我国电子认证领域广泛应用。此外,SM9算法是我国颁布的商用密码算法中的另一种公钥密码算法,它是一组基于身份标识的公钥密码算法,也被叫作标识密码。SM9算法采用规模为256比特的椭圆曲线。