前言
昨日恰逢
“小雪”
节气,今日寒风如约而至。清晨的马路上,除了洋洋洒洒的落叶,就是熙熙攘攘的上班族。眼看着,暖冬愈明显了,叶子来不及泛黄就告别了树。变化总是在不经意中发生,容不得半刻糊涂。
上集博主对微服务中常用的加密算法RSA做了基本的介绍,相信各位盆友已经具备了如何使用的能力或者经验。也正因为“数据安全”
已贯穿于微服务的全生命周期,所以容不得我们有片刻大意。
那除了加密措施以外,还有什么法宝呢?博主带着大家继续揭秘。
此刻,“微服务实战系列”
中,博主已完成了以下组件的介绍:
- 微服务实战系列之Sentinel
- 微服务实战系列之Token
- 微服务实战系列之Nacos
- 微服务实战系列之Gateway
- 微服务实战系列之加密RSA
今天,我们接着谈谈数字签名
。
Q:什么是数字签名
看到签名
两字,是不是眼熟? 明星艺人大腕小生,爱之捧之,被视为一种验真的手段。在互联网世界,如何保障验真呢?
首先看看什么是数字签名:
数字签名
是利用密码学原理,将数字文件原文信息利用私钥进行加密,以确保信息的真实性、完整性和不可抵赖性。
数字签名
是一种数字化的身份认证手段,是为我们提供安全的电子交易服务的重要工具。
说白了,就是防伪标识。那它有哪些特点?
- 报文鉴别:通过签名,可以对发送者
“验真”
; - 防止抵赖:通过签名,可以对发送者
防抵赖
; - 防止伪造:通过签名,可以对接收者
防伪造
;
剧情到这一步,各位盆友应该想了解如何实现数字签名了吧。接下来,我们一一道来。
工作原理
首先我们看看数字签名是如何完成的。
简单地说,所谓数字签名就是附加在数据单元上的一些数据,或是对数据单元所作的密码变换。这种数据或变换允许数据单元的接收者用以确认数据单元的来源和数据单元的完整性并保护数据,防止被人(例如接收者)进行伪造。它是对电子形式的消息进行签名的一种方法,一个签名消息能在一个通信网络中传输。基于公钥密码体制和私钥密码体制都可以获得数字签名,主要是基于公钥密码体制的数字签名。包括普通数字签名和特殊数字签名。普通数字签名算法有RSA、ElGamal、Fiat-Shamir、Guillou- Quisquarter、Schnorr、Ong-Schnorr-Shamir数字签名算法、Des/DSA,椭圆曲线数字签名算法和有限自动机数字签名算法等。特殊数字签名有盲签名、代理签名、群签名、不可否认签名、公平盲签名、门限签名、具有消息恢复功能的签名等,它与具体应用环境密切相关。显然,数字签名的应用涉及到法律问题,美国联邦政府基于有限域上的离散对数问题制定了自己的数字签名标准(DSS)。
通过上图,我们可以用一句话表达:
“私钥加签,公钥验签”
,即发送者通过私钥生成消息摘要(数字签名),接收者通过公钥验证签名,通过比较得知是否是“合法”
的发送者,反之亦然。
实践应用
在实际业务场景中,我们又该如何实现呢?通常有两类方式:
- 公钥密码体制,通俗讲基于类似RSA算法的数字签名;
- 普通数字签名,只通过一般加密算法完成签名认证,比如AES等;
那么,博主今天主要介绍第一类签名方式。其他方式可以自学,相对简单。
1. 密钥管理
既然提到公钥密码体制,首先需要一组密钥,即公钥和私钥。
密钥对怎么产生的?通常是由CA机构管理,以证书的形式颁发,有付费有免费,各取所需,当然付费更佳。
我们来看看,实际证书怎么看?
首先找一个带“锁”
的网址,轻轻点一下锁,即可看到此网址相应的证书,大致长这样:
通过查看,我们可以看到,此证书包含了证书的颁发机构、有效期、证书公钥等。
如果对密钥对不甚理解,可以参考博主上一篇文章- 微服务实战系列之加密RSA。
2. 加签验签
有了密钥,我们就可以完成对传输的数据签名了。通常需要经过3个核心步骤:
- 排序:对要签名的数据,进行按规律排序,可以选择
升序
或降序
。 - 签名:使用
私钥
完成签名。 - 验签:使用
公钥
完成验签。
3. 增强措施
通过以上两步,一般我们能够满足基本的数字签名了。但是如果要保障数据传输的“万无一失”
,还为时尚早。
其中,还需加入其他手段,比如使用http协议、加入时间戳、签名标识等等,博主在此不再详细展开。
结语
通过本文,是否对数字签名以及如何完成签名有了初步的认识?当然“码上百遍,其益自现”
。有了基本的思路后,可以尝试自我实践了。
好了,今天到此为止,我们后会有期!