【加密与解密】数字签名
背景
主要总结和介绍数字签名的相关技术点
作用
数字签名算法要求能够
1.验证数据完整性
2.认证数据来源
3.抗否认的作用
这3点与OSI参考模型中的数据完整性服务、认证(鉴别)服务和抗否认性服务相对应。
实践
数字签名算法是公钥基础设施(Public Key Infrastructure,PKI)以及许多网络安全机制(SSL/TLS、VPN等)的基础。
数字签名算法简介
核心:数字签名算法可以看做是一种带有密钥的消息摘要算法,并且这种密钥包含了公钥和私钥。也就是说,数字签名算法是非对称加密算法和消息摘要算法的结合体。
特点:
1.签名操作只能由甲方(发送方)来完成,验证签名操作则由乙方(接收方)来完成
2.用于签名的相关信息私有,用于验证的相关信息公有,且这两种信息必须成对出现
3.数字签名算法包含签名和验证两项操作,遵循“私钥签名,公钥验证”的签名/验证方式(备注:这是数字签名特有的吗?RSA算法实现的非对称加密,私钥和公钥都可以进行加解密)
4.与摘要值的表示方式相同,签名值也常以十六进制字符串的形式来表示。
数字签名算法家谱
主要包含RSA,DSA和ECDSA3中算法
其中RSA算法是经典,也是数字签名算法中的经典,
基于RSA算法密钥,结合消息摘要算法可形成对应的签名算法。如结合消息摘要算法MD5算法,可形成MD5withRSA算法,例如SHA1withRSA等等
注意:
这三种数字签名算法在Java中不一定能全部支持,部分算法需要引用第三方的包
DSA:JAVA6已完全实现
RSA:部分RSA算法需要Bouncy Castle支持
ECDSA:完全需要Bouncy Castle支持
参考资料
JAVA加密与解密的艺术-第9章

浙公网安备 33010602011771号