DLMS/COSEM中的信息安全:加密算法(下)2
4.4数字签名
数字签名是电子模拟手写的签名,可以用来给收件人或第三方证实消息已由发起人签名(不可抵赖性)。也可能产生数字签名用于存储数据和程序,在以后的时间,可以进行验证这样的数据和程序的完整性。
数字签名验证签名数据的完整性和签名人身份。数字签名在计算机上表示为一串比特,用数字签名算法计算数据签名,数字签名算法提供产生和验证签名的能力。签名生成使用私钥生成数字签名。签名验证使用相对应的公钥,但是和私钥不一样,来验证该签名。每个签字人拥有私钥和公钥对。仅由签字人的私钥的拥有者执行签名生成。然而,任何人都可以采用签字人的公钥验证签名。数字签名系统的安全性依赖于签字人私钥的保密性的保持。因此,用户应防止未经授权获取其私钥。
图19描绘了数字签名过程。在签名生成过程中使用哈希函数来获得要签名的数据的压缩版本,称为消息摘要或散列值。然后将消息摘要输入到数字签名算法以生成数字签名。数字签名与签名数据(通常称为消息)一起发送到预期的验证者。消息和签名的验证者使用签字人的公钥验证签名。在验证过程中也应使用相同的哈希函数和数字签名算法。可以使用类似的过程来生成和验证用于存储和发送的数据的签名。
4.5椭圆曲线数字签名(ECDSA)
椭圆曲线数字签名算法(ECDSA)是使用椭圆曲线密码(ECC)对数字签名算法(DSA)的模拟。它基于椭圆曲线离散对数问题(ECDLP)的难解性,具有密钥短、速度快和安全性高的优点。与传统的离散对数问题(DLP)和大数分解问题(IFP)不同,椭圆曲线离散对数问题没有亚指数时间的解决方法,因此椭圆曲线密码的安全性更高。
对于DLMS/COSEM,已经选择了FIPS PUB 186-4:2013中规定的椭圆曲线数字签名(ECDSA)算法。NSA1提供实施指南。
在DLMS/COSEM中,使用的椭圆曲线和算法应是:
——在安全组件1的情况下,椭圆曲线P-256和SHA-256哈希算法;
——在安全组件2的情况下,椭圆曲线--384和SHA-384哈希算法。
ECDSA数字签名生成的输入如下:
——要签名的消息M;【注:在DLMS/COSEM语境中,“消息”可以是xDLMS APDU或COSEM数据。】
——签名人的私钥,d。
输出是M上的ECDSA签名(r,s)。
在DLMS/COSEM中,应使用明文格式:签名(r,s)被编码为八位位组串RIIS,即作为八位位组串R=12OS(r,l)和S=I2OS(s,l)的串联,其中l=[n]。因此,签名具有2l八位位组的固定长度。
ESDSA数字签名生成的验证的输入如下:
——签名的消息M’;
——接收的ECDSA签名(r',s');
——签名人的认证公钥,Q。
生成和验证签名的过程应符合NSA1,3.4中的规定。