数字签名的原理是什么呢?不知道的小伙伴来看看小编今天的分享吧!
数字签名的原理:
数字签名就是附加在数据单元上的一些数据,或是对数据单元所作的密码变换。这种数据或变换允许数据单元的接收者用以确认数据单元的来源和数据单元的完整性并保护数据,防止被人(例如接收者)进行伪造。
它是对电子形式的消息进行签名的一种方法,一个签名消息能在一个通信网络中传输。基于公钥密码体制和私钥密码体制都可以获得数字签名,主要是基于公钥密码体制的数字签名。
每个人都有一对“钥匙”(数字身份),其中一个只有她/他本人知道(私钥),另一个公开的(公钥)。签名的时候用私钥,验证签名的时候用公钥。又因为任何人都可以落款声称她/他就是你,因此公钥必须向接受者信任的人(身份认证机构)来注册。注册后身份认证机构给你发一数字证书。对文件签名后,你把此数字证书连同文件及签名一起发给接受者,接受者向身份认证机构求证是否真地是用你的密钥签发的文件。
在通讯中使用数字签名一般具有以下特点:
鉴权
公钥加密系统允许任何人在发送信息时使用公钥进行加密,接收信息时使用私钥解密。当然,接收者不可能百分之百确信发送者的************,而只能在密码系统未被破译的情况下才有理由确信。
鉴权的重要性在财务数据上表现得尤为突出。举个例子,假设一家银行将指令由它的分行传输到它的中央管理系统,指令的格式是(a,b),其中a是账户的账号,而b是账户的现有金额。这时一位远程客户可以先存入100元,观察传输的结果,然后接二连三的发送格式为(a,b)的指令。这种方法被称作重放攻击。
完整性
传输数据的双方都总希望确认消息未在传输的过程中被修改。加密使得第三方想要读取数据十分困难,然而第三方仍然能采取可行的方法在传输的过程中修改数据。一个通俗的例子就是同形攻击:回想一下,还是上面的那家银行从它的分行向它的中央管理系统发送格式为(a,b)的指令,其中a是账号,而b是账户中的金额。一个远程客户可以先存100元,然后拦截传输结果,再传输(a,b),这样他就立刻变成百万富翁了。
不可抵赖
在密文背景下,抵赖这个词指的是不承认与消息有关的举动(即声称消息来自第三方)。消息的接收方可以通过数字签名来防止所有后续的抵赖行为,因为接收方可以出示签名给别人看来证明信息的来源。
以上就是小编今天的分享了,希望可以帮助到大家。
数字签名和数字证书基本原理,并利用Wireshark分析HTTPS通信过程
信息安全中,我们会使用数字证书和数字签名技术,这两者相辅相成,可以更好的保障我们的网络安全。数字证书是在互联网中用于识别身份的一种具有权威性的电子文档,它相当于现实中的“身份证”,使用数字证书来证明自己的身份以及验证对方的身份。而通过数字签名,则可以证明签署人的签署意愿,另外,它还能验证出文件的原文在传输过程中有无变动,确保电子文件的完整性、真实性和不可抵赖性,从而使电子文件内容具有法律效力。
数字签名和数字证书基本原理我们先来看网上转载的一篇好文章,它用图片通俗易懂地解释了,"数字签名"(digital signature)和"数字证书"(digital certificate)到底是什么?
1. 首先鲍勃弄了两把钥匙,一把是公钥,另一把是私钥。
2. 鲍勃自己保留下了私钥,把公钥复制成三份送给了他的三个好朋友----帕蒂、道格、苏珊----每人一把。
3. 此时,鲍勃总算可以安心地和他的好朋友愉快地通信了。比如苏珊要给鲍勃写一封保密的信,她写完后就可以用鲍勃送给她的公钥进行加密,就可以达到保密的效果。
4. 鲍勃收到信后,用自己的私钥进行解密,就看到了信件内容。这里要强调的是,只要鲍勃的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。
说明1:这其实是计算机安全学里加密的概念,加密的目的是为了不让别人看到传送的内容,加密的手段是通过一定的加密算法及约定的密钥进行的(比如上述用了非对称加密算法以及鲍勃的公钥),而解密则需要相关的解密算法及约定的秘钥(如上述用了非对称加密算法和鲍勃自己的私钥),可以看出加密是可逆的(可解密的)。
5. 鲍勃看完信后,给苏珊回信。为了防止信的内容被篡改,他决定采用“数字签名”,先对信的内容用Hash算法做一次处理,得到一个摘要(字符串哈希值),然后鲍勃又用自己的私钥对哈希值做了一次加密得到一个数字签名,最后将这个数字签名附在信件下面和信(明文的)一起发送给苏珊。
说明2:鲍勃的内容实质是明文传输的,所以这个过程是可以被人截获和窥探的,但是鲍勃不担心被人窥探,他担心的是内容被人篡改或者有人冒充自己跟苏珊通信。这里其实涉及到了计算机安全学中的认证概念,鲍勃要向苏珊证明通信的对方是鲍勃本人,另外也需要确保自己的内容是完整的。
6. 苏珊收到鲍勃的信后,取下数字签名,首先用鲍勃的公钥进行解密处理,得到了哈希值 A,然后苏珊用了同样的Hash算法对信的内容作了一次哈希处理,得到另外一个哈希值 B,对比A和B,如果这两个值是相同的,那么可以确认信就是鲍勃本人写的,并且内容没有被篡改过。
说明3:5 跟 6 其实构成了一次完整的通过数字签名进行认证的过程。数字签名的过程简述为:发送方通过不可逆算法对内容 text1 进行处理(哈希),得到的结果值 hash1,然后用私钥加密 hash1 得到结果值 encry1。对方接收 text1 和 encry1,用公钥解密 encry1 得到 hash1,然后用 text1 进行同等的不可逆处理得到 hash2,对 hash1 和 hash2 进行对比即可认证发送方。
7.此时,另外一种复杂的情况出现了。道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。此时,苏珊实际拥有的是道格的公钥,但是还以为这是鲍勃的公钥。因此,道格就可以冒充鲍勃,用自己的私钥做成“数字签名”,写信给苏珊,让苏珊用假的鲍勃公钥进行解密。
8.后来,苏珊感觉不对劲,发现自己无法确定公钥是否真的属于鲍勃。她想到了一个办法,要求鲍勃去找第三方权威机构“证书中心”(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成“数字证书”(Digital Certificate)。
9.鲍勃拿到数字证书以后,就可以放心了。以后再给苏珊写信,只要在签名的同时,再附上数字证书就行了。
10.苏珊收信后,先用CA的公钥解开数字证书,就可以安全地拿到鲍勃真实的公钥了,然后就能证明“数字签名”是否真的是鲍勃签的。
HTTPS 通信过程通过上面鲍勃与他的小伙伴的通信,我们已经可以大致了解一个安全通信的过程,也可以了解基本的加密、解密、认证等概念。HTTPS 就是基于这样一个逻辑设计的。在HTTPS之前我们知道网页传输是HTTP协议,由于HTTP是明文传送,所以存在三大风险:
HTTP 因为存在以上三大安全风险,所以才有了 HTTPS ,HTTPS协议也正是利用加密、数字签名、数字证书等技术解决上述问题。HTTPS协议是在HTTP和TCP层之间添加了一个安全传输层协议,一般是SSL或TLS,也就是把HTTP的数据包经过加密处理了。
目前比较知名的一些网站使用的都是HTTPS,以访问今日头条官网为例,然后使用Wireshark工具抓取的数据包并用追踪流功能过滤显示如下:
可以看到先是TCP的三次握手建立连接,使用的端口是443,接下来其实就是SSL握手过程中所产生的数据包,也就是使用HTTPS协议加密的信息。我们来分析一下HTTPS的实现原理过程。
1.首先客户端向服务端发送一个Client Hello数据包(第139号数据包),开始一个新的加密会话连接。可以看到Secure Sockers Layer即SSL层使用的版本是TLSv1.2,TLS(Transport Layer Security)其实是SSL的升级版,是为网络通信提供安全及数据完整性的一种安全协议。然后客户端生成了一个Random1随机数,这个在后面会使用到,用于生成会话密钥,所谓的会话密钥就是数据传输时,所使用的对称加密密钥。Cipher Suites是客户端支持的加密算法组件,这里的值是17,说明支持17种加密算法。客户端把这个加密算法组件发送给服务端,服务端就会从中选择一个最合适的组件来进行加密通信。服务端收到客户端发送的Client Hello数据包后,返回一个ACK确认包(第155号数据包)。
2. 服务器收到客户端发送的Client Hello数据包之后会发送一个Server Hello数据包(第185号数据包)给客户端,也生成了一个Random2随机字符串用于生成会话密钥返回给客户端。然后根据客户端发来的加密套件列表,选择一个加密套件,这里的加密套件表示使用RSA公钥算法来验证证书以及交换密钥,对称加密算法使用的是CHACHA20_POLY1305_GCM_SHA256。
3. 接下来服务端为了证明自己的身份,会把数字证书颁发给客户端(第186号数据包),在Certificates区段中,保存有证书的详细信息,其中包含了服务端非对称加密RSA的公钥。客户端收到这个数字证书数据包后向服务器返回一个ACK确认包(第195号数据包)。
那么客户端拿到了服务端的数字证书后,怎样检验该数字证书是真实有效的呢?这个过程就类似前面鲍勃与苏珊的通信。首先客户端收到证书后使用CA的公钥解密得到 hash1,然后客户端会使用同样的Hash算法得到hash2,对 hash1 和 hash2 进行对比,如果值相同,则为可信赖的证书,否则则认为证书不可信。
4. 客户端验证完证书后,然后再会生成一个随机数Random3,用服务端的RSA公钥对Random3随机数进行加密,生成PreMaster Key,Client Key Exchange 就是将这个 key 传给服务端(第198号数据包)。服务端再用自己RSA私钥解出这个 PreMaster Key 得到客户端生成的 Random3。至此,客户端和服务端都拥有 Random1 Random2 Random3,两边再根据同样的算法就可以生成一份密钥,SSL握手结束后的应用层数据都是使用这个密钥进行对称加密。
5.Change Cipher Spec是服务端告诉客户端,之后的通信都会使用前面协商出来的密钥加密了。(第203号数据包)。
经过以上几个阶段后,整个SSL握手过程也就结束了。接下来客户端与服务器进入加密通信的阶段,就完全是使用普通的HTTP协议,但是会使用会话密钥来加密内容。
客户端发送给服务端经过加密的数据:
服务端发送给客户端经过加密的数据:
以上就是关于数字签名和数字证书的一些内容了,并通过Wireshark工具抓包分析了HTTPS通信过程。