站长工具站长之家官网,代加工手工活外发免费 来料加工,正规接单赚佣金的app,全网营销渠道一. 前言 前面在介绍消息认证码时#xff0c;我们知道消息认证码虽然可以确认消息的完整性#xff0c;但是无法防止否认问题。而数字签名可以解决否认的问题#xff0c;接下来介绍数字签名的原理。 二. 数字签名的原理 数字签名和公钥密码一样#xff0c;也有公钥和私钥我们知道消息认证码虽然可以确认消息的完整性但是无法防止否认问题。而数字签名可以解决否认的问题接下来介绍数字签名的原理。 二. 数字签名的原理 数字签名和公钥密码一样也有公钥和私钥私钥只有发送者自己知道公钥则可以公之于众。当发送消息时发送者用私钥对消息进行加密生成消息签名并将消息和签名一起发送出去当接收者收到消息时使用公钥对签名进行解密如果解密的内容和消息相同则确定消息是由正确的发送者发出的。数字签名的过程如下图所示 这个过程和公钥密码的过程是反过来的公钥密码的过程如下 如上如果使用RSA算法数字签名和公钥密码是完全的逆过程数字签名是把公钥密码中私钥公之于众大家都可以利用该秘钥进行验证发送者身份而用公钥密码的公钥自己保存用于给消息施加签名。所以RSA算法也可以应用在数字签名的场景。 三. 数字签名特点
1. 数字签名可以防止否认 数字签名之所以可以防止否认是因为只有拥有私钥的人才可以生成数字签名。发送者无法否认说这个消息不是我发出的。
2. 数字签名不能保证机密性 数字签名是一个认证符号它的作用是证明消息是由谁发出的因此数字签名不关注消息的机密性的问题
3. 数字签名很难被篡改 这一点和公钥密码是一样的由RSA算法的数学性质决定。 四. 数字签名算法
1. RSA 前面介绍的内容都是基于RSA的方式介绍的。公钥密码那篇对它做了简单的介绍了。
2. EIGamal 公钥密码那篇对它做了简单的介绍了
3. DSA DSADigital Signature Algorithm是由NIST与1991年制定的数字签名规范DSSDSA只能用于数字签名。
4. ECDSA ECDSA是一种利用椭圆曲线密码来实现的数字签名算法。
5. Rabin Rabin是由M.O.Rabin设计的公钥算法Rabin算法可以用于数字签名和公钥算法。 五. openssl实践 openssl可以使用genpkey选项生成私钥再使用rsa选项根据私钥生成公钥openssl dgst使用-sign选项对infile施加签名生成的签名保存在signature.txtopenssl dgst使用-verify选项校验infile的数据是否是由私钥加密的命令如下
1. 生成数字签名的私钥 # openssl genpkey -algorithm RSA -out private.key 2. 根据私钥生成公钥 # penssl rsa -pubout -in private.key -out public.key 3. 使用私钥对消息签名 infile内容 hello,signature 施加签名 # openssl dgst -sha256 -sign private.key -out signature.txt infile 校验签名 # openssl dgst -sha256 -verify public.key -signature signature.txt infile Verified OK 六. 总结 数字签名的出现实现了如下识别篡改和伪装还有防止否认消息认证码虽然可以识别篡改但是无法解决否认问题。数字签名和公钥密码使用的是相同的技术只是它们的公钥和私钥用于了不同的用途