im国际钱包下载|数字签名的原理

作者: im国际钱包下载
2024-03-08 03:27:43

数字签名原理及作用 - 知乎

数字签名原理及作用 - 知乎切换模式写文章登录/注册数字签名原理及作用长陵夜语喜爱刀刀狗的西席先生---易维信evtrust.com数字签名是什么?数字签名就是附加在数据单元上的一些数据,或是对数据单元所作的密码变换。这种数据或变换允许数据单元的接收者用以确认数据单元的来源和数据单元的完整性并保护数据,防止被人(例如接收者)进行伪造。它是对电子形式的消息进行签名的一种方法,一个签名消息能在一个通信网络中传输。基于公钥密码体制和私钥密码体制都可以获得数字签名,主要是基于公钥密码体制的数字签名。数字签名是个加密的过程,数字签名验证是个解密的过程。数字签名的原理是?数字签名技术是将原文通过特定HASH函数得到的摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文提炼出一个摘要信息,与解密得到的摘要进行对比。哪怕只是一个字符不相同,用HASH函数生成的摘要就一定不同。如果比对结果一致,则说明收到的信息是完整的,在传输过程中没有被修改,否则信息一定被修改过,因此数字签名能够验证信息的完整性。数字签名的作用是?一是能确定消息的不可抵赖性,因为他人假冒不了发送方的私钥签名。发送方是用自己的私钥对信息进行加密的,只有使用发送方的公钥才能解密。二是数字签名能保障消息的完整性。一次数字签名采用一个特定的哈希函数,它对不同文件产生的数字摘要的值也是不相同的。编辑于 2017-02-09 16:32数字签名​赞同 112​​4 条评论​分享​喜欢​收藏​申请

数字签名和数字证书的原理解读(图文,一看就懂) - 知乎

数字签名和数字证书的原理解读(图文,一看就懂) - 知乎首发于算法加密切换模式写文章登录/注册数字签名和数字证书的原理解读(图文,一看就懂)不良人海阔凭鱼跃,天高任鸟飞 数字签名和数字证书的区别是什么?数字证书是由权威机构CA证书授权中心发行的,能提供在Internet上进行身份验证的一种权威性电子文档。而数字签名是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。对于数字签名和数字证书的运用原理,相信有不少朋友还不清楚,下文将为大家解疑答惑。数字签名和数字证书原理1. 鲍勃有两把钥匙,一把是公钥,另一把是私钥。2. 鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。3. 苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效果。4. 鲍勃收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要鲍勃的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。5. 鲍勃给苏珊回信,决定采用“数字签名”。他写完后先用Hash函数,生成信件的摘要(digest)。6. 然后,鲍勃使用私钥,对这个摘要加密,生成“数字签名”(signature)。7. 鲍勃将这个签名,附在信件下面,一起发给苏珊。8. 苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。9. 苏珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。10. 复杂的情况出现了。道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。此时,苏珊实际拥有的是道格的公钥,但是还以为这是鲍勃的公钥。因此,道格就可以冒充鲍勃,用自己的私钥做成“数字签名”,写信给苏珊,让苏珊用假的鲍勃公钥进行解密。11. 后来,苏珊感觉不对劲,发现自己无法确定公钥是否真的属于鲍勃。她想到了一个办法,要求鲍勃去找“证书中心”(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成“数字证书”(Digital Certificate)。12. 鲍勃拿到数字证书以后,就可以放心了。以后再给苏珊写信,只要在签名的同时,再附上数字证书就行了。13. 苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明“数字签名”是否真的是鲍勃签的。应用下面,我们看一个应用"数字证书"的实例:https协议。这个协议主要用于网页加密。 1. 首先,客户端向服务器发出加密请求。2. 服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。3. 客户端(浏览器)的“证书管理器”,有“受信任的根证书颁发机构”列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。4. 如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告。5. 如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告。6. 如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。以上,是为大家分享的“数字签名和数字证书使用原理”的全部内容,如果用户遇到的问题不能解决,可通过wosign官网客服寻求帮助,凡是选择wosign ssl证书的网站用户,wosign可提供免费一对一的ssl证书技术部署支持,免除后顾之忧。转自: 数字签名和数字证书的原理解读(图文) - 沃通SSL证书! (wosign.com)编辑于 2021-10-20 16:40CA认证证书​赞同 63​​17 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录算法加密算法加

数字签名_百度百科

_百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心数字签名播报讨论上传视频科技名词收藏查看我的收藏0有用+10本词条由“科普中国”科学百科词条编写与应用工作项目 审核 。数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。它是一种类似写在纸上的普通的物理签名,但是在使用了公钥加密领域的技术来实现的,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。数字签名是非对称密钥加密技术与数字摘要技术的应用。 [1]中文名数字签名外文名 digital signature;digitally signed别    名公钥数字签名用    途鉴别数字信息包含运算两种互补的运算,一个用于签名,另一个用于验证技    术非对称密钥加密技术与数字摘要技术目录1原理2特点▪鉴权▪完整性▪不可抵赖3主要功能4签名过程5使用方法6邮件证书7实现方法8签名步骤▪Java签名步骤▪office签名步骤9应用例子10区分攻击▪异常结果▪正常结果11网络安全原理播报编辑数字签名的文件的完整性是很容易验证的(不需要骑缝章,骑缝签名,也不需要笔迹专家),而且数字签名具有不可抵赖性(不可否认性)。 [1]简单地说,所谓数字签名就是附加在数据单元上的一些数据,或是对数据单元所作的密码变换。这种数据或变换允许数据单元的接收者用以确认数据单元的来源和数据单元的完整性并保护数据,防止被人(例如接收者)进行伪造。它是对电子形式的消息进行签名的一种方法,一个签名消息能在一个通信网络中传输。基于公钥密码体制和私钥密码体制都可以获得数字签名,主要是基于公钥密码体制的数字签名。包括普通数字签名和特殊数字签名。普通数字签名算法有RSA、ElGamal、Fiat-Shamir、Guillou- Quisquarter、Schnorr、Ong-Schnorr-Shamir数字签名算法、Des/DSA,椭圆曲线数字签名算法和有限自动机数字签名算法等。特殊数字签名有盲签名、代理签名、群签名、不可否认签名、公平盲签名、门限签名、具有消息恢复功能的签名等,它与具体应用环境密切相关。显然,数字签名的应用涉及到法律问题,美国联邦政府基于有限域上的离散对数问题制定了自己的数字签名标准(DSS)。 [1]特点播报编辑每个人都有一对“钥匙”(数字身份),其中一个只有她/他本人知道(私钥),另一个公开的(公钥)。签名的时候用私钥,验证签名的时候用公钥。又因为任何人都可以落款声称她/他就是你,因此公钥必须向接受者信任的人(身份认证机构)来注册。注册后身份认证机构给你发一数字证书。对文件签名后,你把此数字证书连同文件及签名一起发给接受者,接受者向身份认证机构求证是否真地是用你的密钥签发的文件。 [2]在通讯中使用数字签名一般具有以下特点: [2]鉴权公钥加密系统允许任何人在发送信息时使用公钥进行加密,接收信息时使用私钥解密。当然,接收者不可能百分之百确信发送者的真实身份,而只能在密码系统未被破译的情况下才有理由确信。 [2]鉴权的重要性在财务数据上表现得尤为突出。举个例子,假设一家银行将指令由它的分行传输到它的中央管理系统,指令的格式是(a,b),其中a是账户的账号,而b是账户的现有金额。这时一位远程客户可以先存入100元,观察传输的结果,然后接二连三的发送格式为(a,b)的指令。这种方法被称作重放攻击。 [2]完整性传输数据的双方都总希望确认消息未在传输的过程中被修改。加密使得第三方想要读取数据十分困难,然而第三方仍然能采取可行的方法在传输的过程中修改数据。一个通俗的例子就是同形攻击:回想一下,还是上面的那家银行从它的分行向它的中央管理系统发送格式为(a,b)的指令,其中a是账号,而b是账户中的金额。一个远程客户可以先存100元,然后拦截传输结果,再传输(a,b),这样他就立刻变成百万富翁了。 [2]不可抵赖在密文背景下,抵赖这个词指的是不承认与消息有关的举动(即声称消息来自第三方)。消息的接收方可以通过数字签名来防止所有后续的抵赖行为,因为接收方可以出示签名给别人看来证明信息的来源。 [2]主要功能播报编辑网络的安全,主要是网络信息安全,需要取相应的安全技术措施,提供适合的安全服务。数字签名机制作为保障网络信息安全的手段之一,可以解决伪造、抵赖、冒充和篡改问题。数字签名的目的之一就是在网络环境中代替传统的手工签字与印章,有着重要作用: [3](1)防冒充(伪造)。私有密钥只有签名者自己知道,所以其他人不可能构造出正确的。 [3](2)可鉴别身份。由于传统的手工签名一般是双方直接见面的,身份自可一清二楚。在网络环境中,接收方必须能够鉴别发送方所宣称的身份。 [3](3)防篡改(防破坏信息的完整性)。对于传统的手工签字,假如要签署一份200页的合同,是仅仅在合同末尾签名呢?还是对每一页都签名?如果仅在合同末尾签名,对方会不会偷换其中的几页? 而对于数字签名,签名与原有文件已经形成了一个混合的整体数据,不可能被篡改,从而保证了数据的完整性。 [3](4)防重放。如在日常生活中,A向B借了钱,同时写了一张借条给B,当A还钱的候,肯定要向B索回他写的借条撕毁,不然,恐怕他会再次用借条要求A还钱。在数字签名中,如果采用了对签名报文添加流水号、时间戳等技术,可以防止重放攻击。 [3](5)防抵赖。如前所述,数字签名可以鉴别身份,不可能冒充伪造,那么,只要保好签名的报文,就好似保存好了手工签署的合同文本,也就是保留了证据,签名者就无法抵赖。那如果接收者确已收到对方的签名报文,却抵赖没有收到呢? 要预防接收者的抵赖。在数字签名体制中,要求接收者返回一个自己的签名表示收到的报文,给对方或者第三方或者引入第三方机制。如此操作,双方均不可抵赖。 [3](6)机密性(保密性)。手工签字的文件(如同文本)是不具备保密性的,文件一旦丢失,其中的信息就极可能泄露。数字签名可以加密要签名消息的杂凑值,不具备对消息本身进行加密,当然,如果签名的报名不要求机密性,也可以不用加密。 [3]保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖发生。 [4]数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者用发送者的公钥解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息 [8],与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。 [4]数字签名是个加密的过程,数字签名验证是个解密的过程。 [4]签名过程播报编辑发送报文时,发送方用一个哈希函数从报文文本中生成报文摘要,然后用发送方的私钥对这个摘要进行加密,这个加密后的摘要将作为报文的数字签名和报文一起发送给接收方,接收方首先用与发送方一样的哈希函数从接收到的原始报文中计算出报文摘要,接着再公钥来对报文附加的数字签名进行解密,如果这两个摘要相同、那么接收方就能确认该报文是发送方的。 [5]数字签名有两种功效:一是能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。二是数字签名能确定消息的完整性。因为数字签名的特点是它代表了文件的特征,文件如果发生改变,数字摘要的值也将发生变化。不同的文件将得到不同的数字摘要。 一次数字签名涉及到一个哈希函数、接收者的公钥、发送方的私钥。 [5]使用方法播报编辑你可以对你发出的每一封电子邮件进行数字签名。这不是指落款,普遍把落款讹误成签名。在我国大陆,数字签名是具法律效力的,正在被普遍使用。2000年,中华人民共和国的新《合同法》首次确认了电子合同、电子签名的法律效力。2005年4月1日起,中华人民共和国首部《电子签名法》正式实施。邮件证书播报编辑具有数字签名功能的个人安全邮件证书是用户证书的一种,是指单位用户收发电子邮件时采用证书机制保证安全所必须具备的证书。个人安全电子邮件证书是符合x.509标准的数字安全证书,结合数字证书和S/MIME技术对普通电子邮件做加密和数字签名处理,确保电子邮件内容的安全性、机密性、发件人身份确认性和不可抵赖性。 具有数字签名功能的 个人安全邮件证书中包含证书持有人的电子邮件地址、证书持有人的公钥、颁发者(CA)以及颁发者对该证书的签名。个人安全邮件证书功能的实现决定于用户使用的邮件系统是否支持相应功能。 MS Outlook 、Outlook Express、Foxmail及CA安全电子邮件系统均支持相应功能。使用个人安全邮件证书可以收发加密和数字签名邮件,保证电子邮件传输中的机密性、完整性和不可否认性,确保电子邮件通信各方身份的真实性。 [6]实现方法播报编辑数字签名算法依靠公钥加密技术来实现的。在公钥加密技术里,每一个使用者有一对密钥:一把公钥和一把私钥。公钥可以自由发布,但私钥则秘密保存;还有一个要求就是要让通过公钥推算出私钥的做法不可能实现。 [7]普通的数字签名算法包括三种算法: [7]1.密码生成算法;2.标记算法;3.验证算法。数字签名技术大多基于哈希摘要和非对称密钥加密体制来实现。如果签名者想要对某个文件进行数字签名,他必须首先从可信的第三方机构(数字证书认证中心CA)取得私钥和公钥,这需要用到PKI技术。 [7]1.有哈希算法的数字签名与验证图1 数字签名及其验证哈希函数是一种“压缩函数”,利用哈希函数可以把任意长度的输入经由散列函数算法变换成固定长度的输出,该输出的哈希值就是消息摘要,也称数字摘要。在正式的数字签名中,发送方首先对发送文件采用哈希算法,得到一个固定长度的消息摘要( Message Digest);再用自己的私钥( Secret key,SK)对消息摘要进行签名,形成发送方的数字签名。数字签名将作为队件和原文一起发送给接收方;接收方首先用发送方的公钥对数字签名进行解密得到发送方的数字摘要,然后用相同的哈希函数对原文进行哈希计算,得到一个新的消息摘要,最后将消息摘要与收到的消息摘要做比较。具体过程如图1所示。 [7]2.基于非对称密钥加密体制的数字签名与验证图2 基于非对称密钥的数字签名与验证发送方首先将原文用自己的私钥加密得到数字签名,然后将原文和数字签名一起发送给接收方。接收方用发送方的公钥对数字签名进行解密,最后与原文进行比较,如图2所示数字签名是电子商务、电子政务中应用普遍、技术成熟、可操作性强的一种电子签名方法。它采用了规范化的程序和科学化的方法,用于鉴定签名人的身份以及对一项电子数据内容的认可。使用数字签名技术能够验证文件的原文在传输过程中有无变动,确保传输电子文件的完整性、真实性和不可抵赖性。 [7]签名步骤播报编辑Java签名步骤1、将applet的class文件打包成*.jar(可以在命令行中输入jar查看帮助) [7]2、首先我们要生成一个keystore 否则在签名的时候报如下错误 [7]jarsigner 错误: java.lang.RuntimeException: 密钥库装入: C:\Documents and Settings\ij2ee\.keystore (系统找不到指定的文件。). (这边的ij2ee 是当前系统用户名) [7]生成keystore的语句:keytool -genkey -alias 别名你可以自己写 -keyalg RSA -keystore .keystore [7]下面是会出现的数字签名的一些步骤操作: [7]输入keystore密码:再次输入新密码:您的名字与姓氏是什么?[Unknown]: ij2ee您的组织单位名称是什么?[Unknown]: mtk您的组织名称是什么?[Unknown]: mtk您所在的城市或区域名称是什么?[Unknown]: suzhou您所在的州或省份名称是什么?[Unknown]: jiangsu该单位的两字母国家代码是什么[Unknown]: cnCN=ij2ee, OU=mtk, O=mtk, L=suzhou, ST=jiangsu, C=cn 正确吗?[否]: y输入的主密码(如果和 keystore密码相同,按回车):这时候会在jdk的bin目录下生成 .keystore 。把这个.keystore文件移动到 C:\Documents and Settings\当前系统用户的目录下面。3、创建一个数字证书 [7]在命令行中输入如下指令,peakCA和peakCALib自己起名字好了,3650是有效天数,就是10年左右,在创建证书的的时候,需要填写证书的一些信息和证书对应的私钥密码。 [7]keytool -genkey -alias peakCA -keyalg RSA -keysize 1024 -keystore peakCALib -validity 36504、将证书导出到证书文件中 [7]在命令行中输入如下指令,peakCA和peakCALib任意起名字,******是输入的密码。 [7]keytool -export -alias peakCA -file peakCA.cer -keystore peakCALib -storepass ****** -rfc5、授权jar文件,在命令行中输入如下指令 [7]jarsigner -keystore peakCALib myapplet.jar peakCAoffice签名步骤1、要保护文档内容的真实性,可以添加不可见的数字签名。 已签名文档的底部有“签名”按钮。 [7]2、单击“文件”选项卡。 [7]3、单击“信息”。 [7]4、在“权限”下,单击“保护文档”、“保护工作簿”或“保护演示文稿”。 [7]5、单击“添加数字签名”。 [7]6、阅读 Word、Excel 或 PowerPoint中显示的消息,然后单击“确定”。 [7]7、在“签名”对话框中的“签署此文档的目的”框中,键入目的。 [7]8、单击“签名”。 [7]9、在对文件进行数字签名后,将出现“签名”按钮,并且文件会变为只读以防止修改。 [7]应用例子播报编辑假如 Alice 向 Bob 传送数字信息,为了保证信息传送的保密性、真实性、完整性和不可否认性,需要对传送的信息进行数字加密和签名,其传送过程为: [3]1.Alice 准备好要传送的数字信息(明文); [3]2.Alice 对数字信息进行哈希运算,得到一个信息摘要; [3]3.Alice 用自己的私钥对信息摘要进行加密得到 Alice 的数字签名,并将其附在数字信息上; [3]4.Alice 随机产生一个加密密钥,并用此密码对要发送的信息进行加密,形成密文; [3]5.Alice 用 Bob 的公钥对刚才随机产生的加密密钥进行加密,将加密后的 DES密钥连同密文一起传送给Bob; [3]6.Bob 收到 Alice 传送来的密文和加密过的 DES 密钥,先用自己的私钥对加密的 DES 密钥进行解密,得到 Alice随机产生的加密密钥; [3]7.Bob 然后用随机密钥对收到的密文进行解密,得到明文的数字信息,然后将随机密钥抛弃; [3]8.Bob 用 Alice 的公钥对 Alice 的数字签名进行解密,得到信息摘要; [3]9.Bob 用相同的哈希算法对收到的明文再进行一次哈希运算,得到一个新的信息摘要; [3]10.Bob 将收到的信息摘要和新产生的信息摘要进行比较,如果一致,说明收到的信息没有被修改过。 [3]区分攻击播报编辑如何区分数字签名攻击呢?有两个方法: [7]1. 查看数字签名的详细信息,我们应该查看该数字签名的详细信息,点击“详细信息”按钮即可。 [7]我们会发现正常EXE和感染(或捆绑木马)后的EXE数字签名的区别。正常EXE的数字签名详细信息。被篡改后的EXE数字签名信息无效。 [7]2.使用数字签名验证程序sigcheck.exe (可以百度一下找这个工具,著名系统工具包Sysinternals Suite的组件之一。) [7]异常结果数字签名异常的结果为: [7]C:\Documents and Settings\litiejun\??\modify.exe:Verified: UnsignedFile date: 15:46 2008-5-23Publisher: n/aDescription: n/aProduct: n/aVersion: n/aFile version: n/a正常结果数字签名正常的结果为: [7]C:\Documents and Settings\litiejun\??\che.exe:Verified: SignedSigning date: 16:28 2008-4-29Publisher: n/aDescription: n/aProduct: n/aVersion: n/aFile version: n/a网络安全播报编辑2023年11月27日报道,国家安全部表示网络空间看似无形隐匿,实则谍影重重,充满硝烟暗战,数字签名等网络资产及服务,都有可能被境外间谍情报机关利用实施网络攻击窃密活动。 [9]2024年1月2日,印度“News9Live”新闻网报道称,相机制造巨头尼康、索尼和佳能计划推出新技术,对抗深度伪造。 [10]新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000

数字签名工作原理_简述数字签名的原理图-CSDN博客

>

数字签名工作原理_简述数字签名的原理图-CSDN博客

数字签名工作原理

最新推荐文章于 2024-01-06 21:44:12 发布

茶乡浪子

最新推荐文章于 2024-01-06 21:44:12 发布

阅读量2.6w

收藏

77

点赞数

20

分类专栏:

图书精彩内容试读

文章标签:

数字签名

华为VPN

华为VPN学习指南

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/lycb_gz/article/details/78081536

版权

图书精彩内容试读

专栏收录该内容

130 篇文章

13 订阅

订阅专栏

       数字签名是指发送方用自己的私钥对数字指纹进行加密后所得的数据,其中包括非对称密钥加密和数字签名两个过程,在可以给数据加密的同时,也可用于接收方验证发送方身份的合法性。采用数字签名时,接收方需要使用发送方的公钥才能解开数字签名得到数字指纹。

       数字指纹又称为信息摘要,是指发送方通过HASH算法对明文信息计算后得出的数据。采用数字指纹时,发送方会将本端对明文进哈希运算后生成的数字指纹(还要经过数字签名),以及采用对端公钥对明文进行加密后生成的密文一起发送给接收方,接收方用同样的HASH算法对明文计算生成的数据指纹,与收到的数字指纹进行匹配,如果一致,便可确定明文信息没有被篡改。

      数字签名的加解密过程如图1-20所示。甲也要事先获得乙的公钥,具体说明如下(对应图中的数字序号):

                               图1-20  数字签名的加解密过程示意图

(1)甲使用乙的公钥对明文进行加密,生成密文信息。

(2)甲使用HASH算法对明文进行HASH运算,生成数字指纹。

(3)甲使用自己的私钥对数字指纹进行加密,生成数字签名。

(4)甲将密文信息和数字签名一起发送给乙。

(5)乙使用甲的公钥对数字签名进行解密,得到数字指纹。

(6)乙接收到甲的加密信息后,使用自己的私钥对密文信息进行解密,得到最初的明文。

(7)乙使用HASH算法对还原出的明文用与甲所使用的相同HASH算法进行HASH运算,生成数字指纹。然后乙将生成的数字指纹与从甲得到的数字指纹进行比较,如果一致,乙接受明文;如果不一致,乙丢弃明文。

       从以上数字签名的加/解密过程中可以看出,数字签名技术不但证明了信息未被篡改,还证明了发送方的身份。数字签名和数字信封技术也可以组合使用。但是,数字签名技术也还有一个问题,获取到对方的公钥可能被篡改,并且无法发现。

       试想一下,如果攻击者一开始就截获了乙发给甲公钥的文件,然后就可用狸猫换太子的方法更改乙的公钥,最终可能导致甲获得的是攻击者的公钥,而非乙的。

具体过程是这样的:攻击者拦截了乙发给甲的公钥信息,用自己的私钥对伪造的公钥信息进行数字签名,然后与使用甲的公钥(攻击者也已获知了甲对外公开的公钥)进行加密的、伪造的乙的公钥信息一起发给甲。甲收到加密信息后,利用自己的私钥可以成功解密出得到的明文(伪造的乙的公钥信息),因为这个信息的加密就是用甲的公钥进行的,并且也可以通过再次进行HASH运算验证该明文没有被篡改。此时,甲则始终认为这个信息是乙发送的,即认为该伪造的公钥信息就是乙的,结果甲再利用这个假的乙的公钥进行加密的数据发给乙时,乙肯定是总解密不了的。此时,需要一种方法确保一个特定的公钥属于一个特定的拥有者,那就是数字证书技术了。因为用户接收到其他用户的公钥数字证书时可以在证书颁发机构查询、验证的。

      【经验之谈】许多人分不清非对称密钥加密和数字签名的区别,其实很好理解。非对称加密用的是接收方的公钥进行数据加密的,密文到达对方后也是通过接收方自己的私钥进行解密,还原成明文,整个数据加密和解密过程用的都是接收方的密钥;而数字签名则完全相反,是通过发送方的私钥进行数据签名的,经签名的数据到达接收方后也是通过事先告知接收方的发送方的公钥进行解密,整个数据签名和解密的过程用的都是发送方的密钥。

      以上内容摘自笔者刚刚上市的华为设备著作——《华为VPN学习指南》,是国家十三五重点规划图书,是华为官方指定的ICT培训教材!当当网、京东网等书店均可正式购买了!本书配套实战视频课程即将发布,敬请关注本人课程中心:http://edu.csdn.net/lecturer/74

优惠劵

茶乡浪子

关注

关注

20

点赞

77

收藏

觉得还不错?

一键收藏

打赏

知道了

0

评论

数字签名工作原理

数字签名是指发送方用自己的私钥对数字指纹进行加密后所得的数据,其中包括非对称密钥加密和数字签名两个过程,在可以给数据加密的同时,也可用于接收方验证发送方身份的合法性。采用数字签名时,接收方需要使用发送方的公钥才能解开数字签名得到数字指纹。       数字指纹又称为信息摘要,是指发送方通过HASH算法对明文信息计算后得出的数据。采用数字指纹时,发送方会将本端对明文进哈希运算后生成的数字指纹(还

复制链接

扫一扫

专栏目录

软件代码数字签名基本原理

08-01

在通过精美的包装盒销售软件的时代,大家使用什么防伪标志等来让用户识别什么是正版软件。但在当今的网络时代,有利的一面是软件开发商可以通过网络不受时间、地域的限制而快速发行软件,但不利的一面,则是用户无法辨认软件的真伪,根本无法确认软件代码的真实身份。

图解数字签名-数字证书-公钥加密-私钥签名原理

kobe_okok的博客

08-05

786

参与评论

您还未登录,请先

登录

后发表或查看评论

13.1 数字签名概述

tang7mj的博客

01-06

825

在数字时代,确保信息的完整性和验证身份变得尤为重要。数字签名正是为满足这一需求而生的技术。它不仅保证了信息在传输过程中未被篡改,还能确认信息来源的真实性。本文将概述数字签名的原理、应用和重要性。数字签名技术是确保数字世界中信息安全和身份验证的重要工具。随着数字化转型的不断深入,数字签名的作用愈发显著,从个人的电子邮件到企业的合同签署,再到国家级的信息安全,数字签名都扮演着不可或缺的角色。了解和掌握数字签名的原理和应用,对于每个数字时代的参与者来说,都是一项必要的技能。概述数字签名过程。

公钥,私钥和数字签名这样最好理解

热门推荐

无界编程

02-10

13万+

一、公钥加密 假设一下,我找了两个数字,一个是1,一个是2。我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥。我有一个文件,不能让别人看,我就用1加密了。别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以用数字2,就是我的私钥,来解密。这样我就可以保护数据了。我的好朋友x用我的公钥1加密了字符a,加密后成了b,放在网上。别人偷到了这个文件,但

图解 | 数字签名和数字证书的前世今生

墨鱼菜鸡

09-09

97

点击上方“五分钟学算法”,选择“星标”公众号

重磅干货,第一时间送达

前言

这是 2020 年一个平平无奇的周末,小北在家里刷着 B 站,看着喜欢的 up 主视频。

在一旁玩手机的女朋友突然问”你知道数字证书是来干啥的不,为啥浏览器提示证书不可信?”

你要问这个,那我可来劲了,于是乎从加密、数字签名一直讲到了数字证书。。。终于...

通过RSA实现数字签名

实践求真知

09-24

3万+

一 用RSA生成签名

在RSA中,被签名的消息、密钥以及最终生成的签名都是以数字形式表示的。在对文本进行签名时,需要事先对文本编码成数字。用RSA生成签名的过程可用下列公式来表述:

这里所使用的D和N就是签名者的私钥。签名就是对消息的D次方求mod N的结果,也就是说将消息和自己相乘D次,然后再除以N求余数,最后求得的余数就是签名。

生成签名后,发送者就可以将消息和签名发送给接收者了。

...

数字签名-原理

学无止境

11-14

8992

数字签名1. 从消息认证到数字签名1.1. 消息认证码的局限性1.2. 通过数字签名解决问题2. 签名的生成和验证3. 数字签名的方法3.1 签名步骤3.2 过程图解4. 数字签名无法解决的问题

“数字签名 — 消息到底是谁写的”

数字签名是一种将相当于现实世界中的盖章、签字的功能在计算机世界中进行实现的技术。使用数字签名可以识别篡改和伪装,还可以防止否认。

1. 从消息认证到数字签名

1.1....

公钥密码与数字签名

实践求真知

09-24

9918

要实现数字签名,可以使用公钥密码机制。

公钥密码包括一个由公钥和私钥组成的密钥对,其中公钥用于加密,私钥用于解密。

整个过程如下图:

数字签名也同样会使用公钥和私钥组成的密钥对,不过这两个密钥的用法和公钥密码是相反的,即用私钥加密相对于生成签名,而用公钥解密则相对于验证签名。

整个过程如下图:

用公钥加密后所得到的密文,只能用与该公钥配对的私钥才能解密;同样地 ,用私钥加密所得到...

数字签名与签名验证过程

Horace Ho的博客

01-05

6090

非对称加密、数字签名、签名验签

数字签名的原理

起跑线的专栏

02-06

1791

数字签名采用了双重加密的方法来实现防伪、防赖。其原理为: (1) 被发送文件用SHA编码加密产生128bit的数字摘要(见上节)。 (2) 发送方用自己的私用密钥对摘要再加密,这就形成了数字签名。 (3) 将原文和加密的摘要同时传给对方。 (4) 对方用发送方的公共密钥对摘要解密,同时对收到的文件用SHA编码加密产生又一摘要。 (5) 将解密后的摘要和收到的文件在接收方重新加密产生的摘要相互对比。

数字签名原理简述

smilejiasmile的博客

04-07

2676

本文结合下面两个问题来讲解数字签名的基本原理。结合图片希望能给大家一个清晰简单明了的分析和讲解。

1. 问题描述:

(1)用户A向远方的用户B发送一个消息,用户B如何确认所收到的消息在传输的过程中没被篡改过?

(2)用户B收到了消息之后,如何防止A随之否认这个消息是他发送的呢?

---------阅读本文的知识储备:了解非对称加密的基本原理。--------

2. 使用方法:数字签名

类比于现实生活,我可以在一个支票上面签名,表示这张支票确实是我本人签署的。收到这张支票的人到银行去兑现的时候,工

数字签名技术原理,看这篇技术文档足矣

06-23

数字摘要(Digital Digest)又称消息摘要(Message Digest),将任意长度的输入信息经过hash函数运算得到固定长度的输出值,这个值称之为摘要值或者信息指纹。hash函数必须具备两个基本特征:单向性 和 抗碰撞性,单向性:指只能从输入推导出输出,而不能从输出反推输入值;抗碰撞性:指不能同时找到两个不同的输入值使其输出结果完全一致。hash函数的应用主要包括:数据校验(检测数据修改)、口令存储(加salt)、数字签名。

数字签名代码

02-08

iText数字签名官方文档参考代码 iText数字签名官方文档参考代码

信息安全原理与技术-第五章Hash函数和数字签名.ppt

06-06

Hash函数和数字签名

Hash函数和数字签名

Hash函数和数字签名

数字签名原理及技术 电子书

04-22

数字签名原理及技术 数字签名原理及技术 数字签名原理及技术 数字签名原理及技术 数字签名原理及技术

windows内核反附加

最新发布

03-05

Windows内核反附加技术是一种深度防御安全机制,针对恶意代码通过驱动层对系统进行非法操控的防护手段。它通过强化内核模块的安全检测与加载机制,有效防止了未知恶意驱动的偷偷附加和执行,从而有力地保障了系统的稳定性和安全性。这一关键技术对于构建坚如磐石的操作系统内核防线,提升整体系统防护能力具有重大价值,尤其在对抗高级持续性威胁(APT)方面表现出色,是现代操作系统安全架构不可或缺的重要组成部分。

基于springboot+vue的的毕业设计系统的开发(Java毕业设计,附源码,数据库).zip

03-05

Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。

包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。

该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。

项目都经过严格调试,确保可以运行!

1. 技术组成

前端:html、javascript、Vue

后台框架:SpringBoot

开发环境:idea

数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑)

数据库工具:navicat

部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven

2. 部署

如果部署有疑问的话,可以找我咨询

后台路径地址:localhost:8080/项目名称/admin/dist/index.html

前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)

基于springboot+vue的秒杀系统设计与实现(Java毕业设计,附源码,数据库).zip

03-05

Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。

包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。

该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。

项目都经过严格调试,确保可以运行!

1. 技术组成

前端:html、javascript、Vue

后台框架:SpringBoot

开发环境:idea

数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑)

数据库工具:navicat

部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven

2. 部署

如果部署有疑问的话,可以找我咨询

后台路径地址:localhost:8080/项目名称/admin/dist/index.html

前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)

毕业设计,微信小程序+SSM后端+MySql开发的个人日程安排小程序,内含完整源代码,数据库脚本,任务书,论文视频,视频教程

03-05

毕业设计,微信小程序+SSM后端+MySql开发的个人日程安排小程序,内含完整源代码,数据库脚本,任务书,论文视频,视频教程

随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了个人日程安排微信小程序的开发全过程。通过分析个人日程安排微信小程序管理的不足,创建了一个计算机管理个人日程安排微信小程序的方案。文章介绍了个人日程安排微信小程序的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。

本个人日程安排微信小程序管理员功能有个人中心,用户管理,重要日管理,工作日程管理,会面管理,用餐管理,日程管理,系统管理等。用户可以写自己的相关信息。因而具有一定的实用性。

本站后台采用Java的SSM框架进行后台管理开发,可以在浏览器上登录进行后台数据方面的管理,MySQL作为本地数据库,微信小程序用到了微信开发者工具,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得个人日程安排微信小程序管理工作系统化、规范化。

关键词:个人日程安排微信小程序;SSM框架;MYSQL数据库

OpenSSL数字签名实验原理

05-29

OpenSSL数字签名实验基于公钥加密算法和哈希算法。具体步骤如下:

1. 生成密钥对:使用OpenSSL工具生成一个密钥对,包括公钥和私钥。

2. 选择哈希算法:选择一个哈希算法,如SHA-1,SHA-256等。

3. 对消息进行哈希:将要签名的消息使用选择的哈希算法进行哈希计算,得到一个固定长度的哈希值。

4. 对哈希值进行加密:使用私钥对哈希值进行加密,得到数字签名。

5. 验证数字签名:接收方收到消息和数字签名后,使用发送方的公钥对数字签名进行解密,得到哈希值。然后使用相同的哈希算法对消息进行哈希,得到一个新的哈希值。如果这两个哈希值相等,说明数字签名是有效的。

这个过程中,数字签名起到了证明发送者身份和数据完整性的作用。只有持有私钥的发送者才能生成数字签名,而接收方只能使用公钥来验证数字签名的有效性。

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

茶乡浪子

CSDN认证博客专家

CSDN认证企业博客

码龄18年

暂无认证

353

原创

3万+

周排名

4万+

总排名

327万+

访问

等级

2万+

积分

2926

粉丝

855

获赞

738

评论

2346

收藏

私信

关注

热门文章

你看得懂的海明码校验和纠错原理(一)

113542

RIP路由协议及工作原理

101956

史上最通俗的海明码编码计算、检错和纠错原理解析

83049

看懂浪潮服务器产品系列分类(上)

73442

看懂浪潮服务器产品系列分类(下)

70035

分类专栏

达哥讲网络

4篇

图书精彩内容试读

130篇

图书资讯

73篇

网友交流

88篇

网络技术和应用

33篇

H3C

16篇

Super VLAN

2篇

cisco

12篇

PVST+

1篇

Rapid-PVST+

1篇

王达

11篇

Cisco/H3C交换机配置与管理完全手册(第二版)

3篇

堆叠

1篇

stp

1篇

负载均衡

1篇

vrrp

1篇

hsrp

1篇

qos

1篇

令牌桶

1篇

端口安全

2篇

AAA

1篇

802.1x

1篇

深入理解计算机网络

3篇

三层交换

碎片化

1篇

RBAC Comware V7

Cisco/H3C交换机配置与管理完全手册(第三版)

视频教程

40篇

VTP

1篇

最新评论

CRC码计算及校验原理的最通俗诠释

老王WHH:

非常详细,认真阅读,比看课本清晰,最后答案的FCS=11010

CRC码计算及校验原理的最通俗诠释

Hello-Time:

讲了这么多,crc能纠错吗?还是只能检错?

绝大多数人没搞懂的思科VTP修剪原理

LordVaderH:

感谢分享,浏览器上看了好久,才找到你这个深入浅出的文章

划分子网的意义

茶乡浪子:

分配四个的话,可能主要是为了方便连接多个不同网段

划分子网的意义

sckskysot:

文中开篇就说了,典型的不看的。

先纠正一下,你的问题应该是,为什么不直接分配一个IP网段。

一个IP网段下的所有主机(25*4=100),若有一个主机发起广播请求,其余99个主机就会接受到,而只有一个主机接收是有用的。这样很浪费资源。

四个IP网段是隔离的,其中一个主机发起广播请求,也只会有24个主机接受到(其中一个主机有效接收),相比上面减少了网络资源浪费(比如带宽,流量这些资源)。

但这样做却也浪费了IP地址。

所以还是回到一个IP网段,对这一个IP网段进行子网划分,使得这一个IP网段下有四个子网(子网也是隔离的),这样就能达到四个IP网段效果,也能防止IP地址浪费

最新文章

【达哥讲网络】第4集:80%网络人不懂的VLAN通信原则和规则

【达哥讲网络】第3集:数据交换的垫基石——二层交换原理

【达哥讲网络】第2集:不一样的报文封装和解封装原理剖析

2023年4篇

2019年1篇

2018年8篇

2017年10篇

2016年12篇

2015年21篇

2014年15篇

2013年55篇

2012年38篇

2011年34篇

2010年19篇

2009年20篇

2008年32篇

2007年42篇

2006年59篇

2005年54篇

目录

目录

分类专栏

达哥讲网络

4篇

图书精彩内容试读

130篇

图书资讯

73篇

网友交流

88篇

网络技术和应用

33篇

H3C

16篇

Super VLAN

2篇

cisco

12篇

PVST+

1篇

Rapid-PVST+

1篇

王达

11篇

Cisco/H3C交换机配置与管理完全手册(第二版)

3篇

堆叠

1篇

stp

1篇

负载均衡

1篇

vrrp

1篇

hsrp

1篇

qos

1篇

令牌桶

1篇

端口安全

2篇

AAA

1篇

802.1x

1篇

深入理解计算机网络

3篇

三层交换

碎片化

1篇

RBAC Comware V7

Cisco/H3C交换机配置与管理完全手册(第三版)

视频教程

40篇

VTP

1篇

目录

评论

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

打赏作者

茶乡浪子

你的鼓励将是我创作的最大动力

¥1

¥2

¥4

¥6

¥10

¥20

扫码支付:¥1

获取中

扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

数字签名的工作原理 - 知乎

数字签名的工作原理 - 知乎切换模式写文章登录/注册数字签名的工作原理沃通WoTrus​已认证账号数字签名是公钥基础结构的基础部分。当我们说PKI时,一般想到的是数字证书,证书颁发机构(CA),银行使用的Key,以及SSL通信等等。数字证书,一般都是成对存在的,包含证书的公钥,和证书对应的私钥,公钥本身有一定的身份标识功能(如ssl证书中的域名信息,邮件客户端证书的邮箱地址等),对于数字证书的应用比较广泛,但其基本原理简单来说就是公钥用来加密,私钥用来解密。私钥用来签名,公钥用来验证签名。那么,在我们了解数字签名的技术原理之前,我们先要明白一个和数字签名密切相关的算法:Hash算法。hash算法是一种散列(密码杂凑)算法。简单来说这个算法有几个很显著的特性:1.易压缩性,可以很容易的将任何长度的数据映射到固定长度的输出。2.单向性,它是一种单向密码体制,根据源数据计算一个哈希值很容易,但是要根据计算出的结果得出源数据是不可能的。3.高灵敏性,就是对于输入数据的变化非常灵敏,即使很小的变化都会输出差异性很大的结果。4.抗碰撞性,对于不同的数据块,其hash值相同的可能性极小;对于一个指定的数据块,找到和它hash值相同的数据块极为困难。由于具有这些特性,所以它非常适合用来做数据完整性和文件完整性的校验。目前应用较为广泛的哈希算法主要有sha1,sha256,sha384等,而我们国密与之相对应的是SM3算法,其安全性也是递增的。几年前Google就对SHA-1碰撞实验,就是为了验证其安全性。现在随着科技的飞速的发展和计算能力的提升,sha1也即将要退出历史舞台。一、工作原理:创建数字签名现在,让我们逐步了解一下数字签名的过程:1、将要签名的文件进行hash计算。2、用私钥将文件的hash值进行签名。3、除了签名外,还可以添加时间戳以指示签名时间。这个就是数字签名的主要过程,总的来说就是先对文档进行哈希处理,然后签名者用自己的私钥对文件生成的哈希值进行签名,使用时将原文件和签名数据一起发送。值得注意的是,数字签名并没有对整个文件进行签名,而是对文件的hash值进行了签名。这样的不仅节约了资源而且提高了效率。好的,接下来我们讨论一下如何读取和认证签名。二、工作原理:阅读数字签名我们已经知道了创建数字签名的过程,随着要来进行数字签名验证。主要过程有以下步骤:1、将原文件进行hash计算得到hash值。2、将签名的公钥从签名数据中计算出签名数据中的hash值。3、将步骤1中得到的hash值和步骤2得到的hash值进行对比,如果对比结果一致则验证通过,反之验证失败。三、为什么我们要对所有内容进行数字签名?(数字签名的优势)防伪造:数字签名中的私钥具有唯一性,除签名者之外都不能伪造签名,并防止被假冒。完整性:由于数字签名中包含hash算法,对签名文档的任何未经授权的修改将立即被显见。身份标识:证书颁发机构可以对证书的持有者的身份进行识别和验证,可信的CA机构签发的证书可以用于做身份标识。时间戳:知道文档签署的时间是非常重要的,数字签名可以盖上指示创建签名时间的时间戳。防抵赖:数字签名不仅可以成为身份识别的依据,同时它也是签名者进行签名操作的有效证据,防止签名方对其产生的行为进行抵赖。除了要点之外,数字签名的应用会越来越广泛,如今连电子发票和电子合同都加入了数字签名的应用行列,所以它的重要性可以预见。发布于 2020-09-24 15:51数字证书数字签名SSL​赞同 13​​1 条评论​分享​喜欢​收藏​申请

数字签名-原理_数字签名原理-CSDN博客

>

数字签名-原理_数字签名原理-CSDN博客

数字签名-原理

最新推荐文章于 2023-09-18 11:14:33 发布

空无多有

最新推荐文章于 2023-09-18 11:14:33 发布

阅读量8.9k

收藏

146

点赞数

36

分类专栏:

密码技术

文章标签:

数字签名

原文链接:https://blog.csdn.net/fanbaodan

版权

密码技术

专栏收录该内容

8 篇文章

27 订阅

订阅专栏

数字签名

1. 从消息认证到数字签名1.1. 消息认证码的局限性1.2. 通过数字签名解决问题

2. 签名的生成和验证3. 数字签名的方法3.1 签名步骤3.2 过程图解

4. 数字签名无法解决的问题

“数字签名 — 消息到底是谁写的”

    数字签名是一种将相当于现实世界中的盖章、签字的功能在计算机世界中进行实现的技术。使用数字签名可以识别篡改和伪装,还可以防止否认。

1. 从消息认证到数字签名

1.1. 消息认证码的局限性

    通过上篇中介绍的消息认证码,可以识别消息是否被篡改或者发送者身份是否被伪装,也就是可以校验消息的完整性,还可以对消息进行认证。然而,比如在出具借条的场景中却无法使用消息认证码,因为消息认证码无法防止否认。     消息认证码之所以无法防止否认,是因为消息认证码需要在发送者Alice和接收者Bob两者之间共享同一个密钥。正是因为密钥是共享的,所以能够使用消息认证码计算出正确MAC值的并不只有发送者Alice,接收者Bob也可以计算出正确的MAC值。由于Alice和Bob双方都能够计算出正确的MAC值,因此对于第三方来说,我们无法证明这条消息的确是由Alice生成的。

1.2. 通过数字签名解决问题

    假设Alice使用的密钥是一个只有Alice自己才知道的私钥。当Alice发送消息时,她用私钥生成一个“签名"。相对地,接收者Bob则使用一个和Alice不同的密钥对签名进行验证。使用Bob的密钥无法根据消息生成签名,但是用Bob的密钥却可以对Alice所计算的签名进行验证,也就是说可以知道这个签名是否是通过Alice的密钥计算出来的。如果真有这么一种方法的话,那么不管是识别篡改、伪装还是防止否认就都可以实现了吧 ?     实际上,这种看似很神奇的技术早就已经问世了,这就是数字签名(digital signat.ure)。

2. 签名的生成和验证

来稍微整理一下。 在数字签名技术中,出现了下面两种行为:

生成消息签名的行为验证消息签名的行为

    生成消息签名这一行为是由消息的发送者Alice来完成的,也称为“对消息签名”。生成签名就是根据消息内容计算数字签名的值,这个行为意味着 “我认可该消息的内容"。

    验证数字签名这一行为一般是由消息的接收者Bob来完成的,但也可以由需要验证消息的第三方来完成,这里的第三方我们暂且将其命名为验证者Victor。验证签名就是检查该消息的签名是否真的属于Alice,验证的结果可以是成功或者失败,成功就意味着这个签名是属于Alice的,失败则意味着这个签名不是属于Alice的。

    在数字签名中,生成签名和验证签名这两个行为需要使用各自专用的密钥来完成。

    Alice使用“签名密钥"来生成消息的签名,而Bob和Victor则使用“验证密钥"来验证消息的签名。数字签名对签名密钥和验证密钥进行了区分,使用验证密钥是无法生成签名的。这一点非常重要。此外,签名密钥只能由签名的人持有,而验证密钥则是任何需要验证签名的人都可以持有。

    上述的这部分内容,是不是觉得似曾相识呢?

    没错,这就是我们讲过的非对称加密。公钥密码和上面讲的数字签名的结构非常相似。在非对称加密中,密钥分为加密密钥和解密密钥,用加密密钥无法进行解密。此外,解密密钥只能由需要解密的人持有,而加密密钥则是任何需要加密的人都可以持有。你看,数字签名和非对称加密是不是很像呢?

    实际上,数字签名和非对称加密有着非常紧密的联系,简而言之,数字签名就是通过将非对称加密 “反过来用” 而实现的。下面我们来将密钥的使用方式总结成一张表:

私钥公钥非对称加密接收者解密时使用发送者加密时使用数字签名签名者生成签名时使用验证者验证签名时使用谁持有秘钥?个人持有只要需要,任何人都可以持有

3. 数字签名的方法

    如何签名?

直接对消息签名的方法对消息的散列值签名的方法

    直接对消息签名的方法比较容易理解,但实际上并不会使用;对消息的散列值签名的方法稍微复杂一点,但实际中一般都使用这种方法。     使用直接对消息签名的方法,需要对整个消息进行加密,非常耗时,这是因为非对称加密算法本来就非常慢。那么,我们能不能生成一条很短的数据来代替消息本身呢?这就是单向散列函数。     于是我们不必再对整个消息进行加密(即对消息签名),而是只要先用单向散列函数求出消息的散列值,然后再将散列值进行加密(对散列值签名)就可以了。无论消息有多长,散列值永远都是这么短,因此对其进行加密(签名)是非常轻松的。

3.1 签名步骤

Alice用单向散列函数计算消息的散列值。 Alice用自己的私钥对散列值进行加密。     用私钥加密散列值所得到的密文就是Alice对这条散列值的签名,由于只有Alice才持有自己的私钥因此除了Alice以外,其他人是无法生成相同的签名(密文)的。 Alice将消息和签名发送给Bob。 Bob用Alice的公钥对收到的签名进行解密     如果收到的签名确实是用Alice的私钥进行加密而得到的密文(签名),那么用Alice的公钥应该能够正确解密,解密的结果应该等于消息的散列值。如果收到的签名不是用Alice的私钥进行加密而得到的密文,那么就无法用Alice的公钥正确解密(解密后得到的数据看起来是随机的)。 Bob将签名解密后得到的散列值与Alice直接发送的消息的散列值进行对比。     如果两者一致,则签名验证成功;如果两者不一致,则签名验证失败。 我们将数字签名中生成签名和验证签名的过程整理成一张时间流程图 。

3.2 过程图解

Alice对消息的在这里插入图片描述散列值签名, Bob验证签名 Alice对消息的散列值签名, Bob验证签名(按时间顺序)

4. 数字签名无法解决的问题

    用数字签名既可以识别出篡改和伪装,还可以防止否认。也就是说,我们同时实现了确认消息的完整性、进行认证以及否认防止。现代社会中的计算机通信从这一技术中获益匪浅。

    然而,要正确使用数字签名,有一个大前提,那是用于验证签名的公钥必须属于真正的发送者。即便数字签名算法再强大,如果你得到的公钥是伪造的,那么数字签名也会完全失效。

    现在我们发现自己陷人了一个死循环一一一数字签名是用来识别消息篡改、伪装以及否认的,但是为此我们又必须从没有被伪装的发送者得到没有被篡改的公钥才行。

    为了能够确认自己得到的公钥是否合法,我们需要使用证书。所谓证书,就是将公钥当作一条消息,由一个可信的第三方对其签名后所得到的公钥。

    当然,这样的方法只是把问题转移了而已。为了对证书上施加的数字签名进行验证,我们必定需要另一个公钥,那么如何才能构筑一个可信的数字签名链条呢?又由谁来颁发可信的证书呢?到这一步,我们就已经踏人了社会学的领域。我们需要让公钥以及数字签名技术成为一种社会性的基础设施,即公钥基础设施(Public Key Intrastructure),简称PKIO关于证书和PKI下篇继续。

优惠劵

空无多有

关注

关注

36

点赞

146

收藏

觉得还不错?

一键收藏

知道了

10

评论

数字签名-原理

数字签名1. 从消息认证到数字签名1.1. 消息认证码的局限性1.2. 通过数字签名解决问题2. 签名的生成和验证3. 数字签名的方法3.1 签名步骤3.2 过程图解4. 数字签名无法解决的问题“数字签名 — 消息到底是谁写的”数字签名是一种将相当于现实世界中的盖章、签字的功能在计算机世界中进行实现的技术。使用数字签名可以识别篡改和伪装,还可以防止否认。1. 从消息认证到数字签名1.1....

复制链接

扫一扫

专栏目录

软件代码数字签名基本原理

08-01

在通过精美的包装盒销售软件的时代,大家使用什么防伪标志等来让用户识别什么是正版软件。但在当今的网络时代,有利的一面是软件开发商可以通过网络不受时间、地域的限制而快速发行软件,但不利的一面,则是用户无法...

什么是数字签名?其安全性从何而来?

Caption C

04-03

2万+

一、数字签名简介

数字签名是基于公钥密码体制(非对称密钥密码体制)的。

1.1.基本特征

数字签名必须保证以下三点:

报文鉴别——接收者能够核实发送者对报文的签名;

报文的完整性——接收者不能伪造对报文的签名或更改报文内容。

不可否认——发送者事后不能抵赖对报文的签名;

1.2.数字签名的验证过程

上图位用户A使用数字签名向用户B传输一份文件的过程:

首先,文件经过单向散列函数的处理得到一份占128位的摘要(无论文件多大,经过单向散列函数的处理,生成的摘要都是128位),这份摘要相当

10 条评论

您还未登录,请先

登录

后发表或查看评论

数字签名工作原理

热门推荐

王达专栏

09-25

2万+

数字签名是指发送方用自己的私钥对数字指纹进行加密后所得的数据,其中包括非对称密钥加密和数字签名两个过程,在可以给数据加密的同时,也可用于接收方验证发送方身份的合法性。采用数字签名时,接收方需要使用发送方的公钥才能解开数字签名得到数字指纹。

       数字指纹又称为信息摘要,是指发送方通过HASH算法对明文信息计算后得出的数据。采用数字指纹时,发送方会将本端对明文进哈希运算后生成的数字指纹(还

数字签名、数字证书的原理以及证书的获得java版

长春小佛爷的博客

04-04

921

首先要了解什么叫对称加密和非对称加密,消息摘要这些知识。

1. 非对称加密

在通信双方,如果使用非对称加密,一般遵从这样的原则:公钥加密,私钥解密。同时,一般一个密钥加密,另一个密钥就可以解密。

因为公钥是公开的,如果用来解密,那么就很容易被不必要的人解密消息。因此,私钥也可以认为是个人身份的证明。

如果通信双方需要互发消息,那么应该建立两套非对称加密的机制(即两对公私钥密钥对),发消息的一方使用对方的公钥进行加密,接收消息的一方使用自己的私钥解密。

2.消息摘要

消息摘要可以将消息哈希转换成一

数字签名技术

七天

03-14

1万+

目录

一、数字签名

二、数字签名技术

2.1、基于哈希算法的数字签名与验证

2.2、基于非对称密钥加密体制的数字签名与验证

三、数字签名的作用

一、数字签名

数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。它是一种类似写在纸上的普通的物理签名,但是在使用了公钥加密领域的技术来实现的,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。数字签名是非对称

数字签名与签名验证过程

Horace Ho的博客

01-05

6090

非对称加密、数字签名、签名验签

数字签名原理简述

smilejiasmile的博客

04-07

2676

本文结合下面两个问题来讲解数字签名的基本原理。结合图片希望能给大家一个清晰简单明了的分析和讲解。

1. 问题描述:

(1)用户A向远方的用户B发送一个消息,用户B如何确认所收到的消息在传输的过程中没被篡改过?

(2)用户B收到了消息之后,如何防止A随之否认这个消息是他发送的呢?

---------阅读本文的知识储备:了解非对称加密的基本原理。--------

2. 使用方法:数字签名

类比于现实生活,我可以在一个支票上面签名,表示这张支票确实是我本人签署的。收到这张支票的人到银行去兑现的时候,工

数字签名的原理

起跑线的专栏

02-06

1791

数字签名采用了双重加密的方法来实现防伪、防赖。其原理为: (1) 被发送文件用SHA编码加密产生128bit的数字摘要(见上节)。 (2) 发送方用自己的私用密钥对摘要再加密,这就形成了数字签名。 (3) 将原文和加密的摘要同时传给对方。 (4) 对方用发送方的公共密钥对摘要解密,同时对收到的文件用SHA编码加密产生又一摘要。 (5) 将解密后的摘要和收到的文件在接收方重新加密产生的摘要相互对比。

数字签名的原理、主要技术和应用

Programming Talk

09-18

1793

数字签名基于公钥密码学的原理,使用了非对称密钥加密算法。它使用了两个密钥:私钥(私有密钥)和公钥(公共密钥)。私钥只有文档的签名者拥有,并且必须保密保存。公钥可以被任何人访问。数字签名通过使用公钥密码学和哈希函数的组合,实现了对数字文档的完整性、真实性和身份的验证。它在身份验证、电子合同、软件分发、电子邮件安全和数据完整性等方面具有广泛的应用。数字签名是一种加密技术,用于验证数字文档的完整性、真实性和身份。它使用了公钥密码学的原理和技术,以及哈希函数来实现。

数字签名的工作原理

SSL加密技术

09-24

2478

数字签名是公钥基础结构的基础部分。当我们说PKI时,一般想到的是数字证书,证书颁发机构(CA),银行使用的Key,以及SSL通信等等。

数字证书,一般都是成对存在的,包含证书的公钥,和证书对应的私钥,公钥本身有一定的身份标识功能(如ssl证书中的域名信息,邮件客户端证书的邮箱地址等),对于数字证书的应用比较广泛,但其基本原理简单来说就是公钥用来加密,私钥用来解密。私钥用来签名,公钥用来验证签名。

那么,在我们了解数字签名的技术原理之前,我们先要明白一个和数字签名密切相关的算法:Hash算法。

hash

数字签名的原理和应用

qq_44109982的博客

12-15

5304

1.数字签名的原理

在日常生活中,签名的意义就是签完你的名后,别人可以知道这件事是你做的,而由于每个人笔迹不同,你也无法否认这个名字是你签的。同真实的签名一样,数字签名也是用来证明某条信息是本人发的,而且本人无法否认,他人无法伪造。

通常是用非对称加密(RSA)实现数字签名,分为以下几个步骤:

1.计算消息的摘要M

2.发送方用自己的私钥d对M进行加密,得到S(这里叫作签名,因为M不是一个需要加密的信息,加密的目的是签名),随消息一起发出

3.消息发送之后,接收方对消息计算摘要M,再用发送方的公钥对S解密d

信息安全原理与技术-第五章Hash函数和数字签名.ppt

06-06

Hash函数和数字签名 Hash函数和数字签名 Hash函数和数字签名

数字签名原理及技术 电子书

04-22

数字签名原理及技术 数字签名原理及技术 数字签名原理及技术 数字签名原理及技术 数字签名原理及技术

springboot-时间管理系统答辩PPT.pptx

03-05

springboot-时间管理系统答辩PPT

Tensroflow练习

最新发布

03-05

Tensroflow练习

java5大反编译软件.zip

03-05

内涵5种java的jar包反编译软件,总有适合你的

毕业设计-基于SpringBoot的英语知识应用网站-设计与实现(源码+LW+演示视频).zip

03-05

【项目技术】

开发语言:Java

框架:springboot

架构:B/S

数据库:mysql

本英语知识应用网站有管理员和用户。管理员功能有个人中心,用户管理,在线学习管理,学习技巧管理,培训信息管理,培训报名管理,英语角,我的收藏管理,试卷管理,试题管理,考试管理,系统管理。用户可以在线学习,查看学习技巧,查看培训信息,进行培训报名,留言,考试等操作。因而具有一定的实用性。

本站是一个B/S模式系统,采用Spring Boot框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得英语知识应用网站管理工作系统化、规范化。本系统的使用使管理人员从繁重的工作中解脱出来,实现无纸化办公,能够有效的提高英语知识应用网站管理效率。

关键词:英语知识应用网站;Spring Boot框架;MYSQL数据库

SM2数字签名算法原理

07-10

SM2数字签名算法的原理如下:

1.钥生成:生成SM2法所需的公钥对。私钥是一个随机数,公钥由私钥通过椭圆曲线点乘运生成。

2. 签名:对待签名的消息进行哈希运算,生成消息摘要。然后使用私钥对摘要进行数字签名操作。具体步骤如下:

- 随机选择一个整数k,计算椭圆曲线上的点R = [k]G,其中G为基点。

- 计算e = Hash(M),将消息M进行哈希运算得到消息摘要e。

- 计算s = (e + dA * r) / (1 + k)^-1 mod n,其中dA为私钥,r为R的x坐标。

- 签名结果为(R, s),即为消息的数字签名。

3. 签名验证:接收到签名消息后,首先对待验证的消息进行哈希运算得到摘要e。然后使用公钥对签名进行验证操作。具体步骤如下:

- 计算t = (r' + s') mod n,其中r'为签名中的R的x坐标,s'为签名中的s值。

- 计算点S = [s']G + [t]PA,其中PA为公钥。

- 验证成功的条件是R的x坐标与计算得到的S的x坐标相等。

通过以上步骤,SM2数字签名算法可以实现对消息的签名和验证,确保消息的完整性和认证性。同时,SM2算法还具有抗量子计算攻击的特性,适用于各种安全通信和身份认证场景。

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

空无多有

CSDN认证博客专家

CSDN认证企业博客

码龄7年

暂无认证

143

原创

2万+

周排名

149万+

总排名

165万+

访问

等级

1万+

积分

226

粉丝

747

获赞

192

评论

2103

收藏

私信

关注

热门文章

Http响应Response详解

122788

linux中vim: command not found

112465

java如何判断list集合为空

54843

因为没有使用有效的安全证书进行签名,该内容已被屏蔽.

52398

ORACLE中dbms_output.put_line输出问题

50729

分类专栏

SpringBoot

7篇

ngnix

7篇

kafka

8篇

消息队列

6篇

设计模式

8篇

测试题-查漏补缺

3篇

密码技术

8篇

微服务

3篇

♛ UI

10篇

springCloud

♛ docker

2篇

♛ 工作中的问题

33篇

♛ 数据库

9篇

mysql

9篇

oracle

28篇

nosql

4篇

♛ druid

3篇

♛ java

36篇

多线程

1篇

io相关整理

1篇

xml简介以及解析

2篇

My Library

4篇

♛ Linux

29篇

♛ 开发工具

3篇

gradle

1篇

git

8篇

svn

9篇

IDEA

16篇

eclipse

19篇

navicat12

1篇

maven

2篇

tomcat

6篇

weblogic

9篇

♛ 框架技术

2篇

mybatis

6篇

SSH框架

9篇

spring

14篇

springMVC

16篇

CXF

2篇

Quartz

3篇

♛ 计算机

19篇

windows批处理

2篇

网络相关

12篇

小技能

2篇

♛ 架构

3篇

--------- webService

6篇

♛ 各种网络安全证书

5篇

♛ javaWeb

13篇

♛ 小知识

8篇

♛ 感悟

2篇

♛ 测试

2篇

最新评论

springboot + Gradle test时报错:No tests found for given includes:xxxx

人心难测冷暖自知:

是啊?到底是为什么换成IDEA就正确了呢

数字签名-原理

m0_67730750:

摘要的哈希函数有哪些要求捏

where条件里为什么不能有聚合函数

小李小李晴空万里:

就不一定 select 在 having 后面执行;比如 select emp_no ,count(emp_no) as t from salaries group by emp_no having t >15;

linux中vim: command not found

神说.:

我跟你一样...安装sudo:Err:1 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libsystemd0 amd64 245.4-4ubuntu3.22

Temporary failure resolving 'archive.ubuntu.com'

解决:Information:java: javacTask: 源发行版 8 需要目标发行版 1.8

笨中求真的程序之路:

有用,谢谢大佬儿

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

mybatis-plus使用总结01

springboot自动化配置的核心@EnableAutoConfiguration注解

SpringMvc常用注解整理

2022年4篇

2021年24篇

2020年7篇

2019年191篇

2018年108篇

目录

目录

分类专栏

SpringBoot

7篇

ngnix

7篇

kafka

8篇

消息队列

6篇

设计模式

8篇

测试题-查漏补缺

3篇

密码技术

8篇

微服务

3篇

♛ UI

10篇

springCloud

♛ docker

2篇

♛ 工作中的问题

33篇

♛ 数据库

9篇

mysql

9篇

oracle

28篇

nosql

4篇

♛ druid

3篇

♛ java

36篇

多线程

1篇

io相关整理

1篇

xml简介以及解析

2篇

My Library

4篇

♛ Linux

29篇

♛ 开发工具

3篇

gradle

1篇

git

8篇

svn

9篇

IDEA

16篇

eclipse

19篇

navicat12

1篇

maven

2篇

tomcat

6篇

weblogic

9篇

♛ 框架技术

2篇

mybatis

6篇

SSH框架

9篇

spring

14篇

springMVC

16篇

CXF

2篇

Quartz

3篇

♛ 计算机

19篇

windows批处理

2篇

网络相关

12篇

小技能

2篇

♛ 架构

3篇

--------- webService

6篇

♛ 各种网络安全证书

5篇

♛ javaWeb

13篇

♛ 小知识

8篇

♛ 感悟

2篇

♛ 测试

2篇

目录

评论 10

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

什么是数字签名_数字签名简介_数字签名的优势以及应用场景-腾讯云开发者社区

字签名_数字签名简介_数字签名的优势以及应用场景-腾讯云开发者社区腾讯云开发者社区文档建议反馈控制台首页学习活动专区工具TVP最新优惠活动技术百科搜索技术百科搜索技术百科搜索关闭发布登录/注册首页学习活动专区工具TVP最新优惠活动返回腾讯云官网技术百科首页 >数字签名数字签名修改于 2023-07-24 17:37:321062概述数字签名是一种用于保证数字信息的完整性、真实性和不可抵赖性的技术。数字签名通常是由发送方使用私钥对消息进行加密,生成一个特定的签名值,并将签名值与消息一起发送给接收方。接收方可以使用发送方的公钥对签名值进行解密和验证,从而确定消息的真实性和完整性。数字签名的作用是什么? 数据完整性保护数字签名可以保证数据在传输过程中不被篡改,接收方可以通过验证数字签名来确定数据的完整性和真实性。 数据来源鉴别数字签名可以保证数据的来源不被伪造,接收方可以通过验证数字签名来确定数据的来源。 不可抵赖性数字签名可以防止发送方否认曾经发送过数据,因为数字签名是基于发送方的私钥进行加密的,只有发送方才能够生成正确的数字签名。 安全性数字签名可以保证数据传输过程中的安全性,因为只有发送方的私钥能够生成正确的数字签名,其他人无法篡改数据或伪造数字签名。 证书认证数字签名可以用于数字证书的认证,保证数字证书的真实性和有效性。数字签名的原理是什么?数字签名的原理基于公钥加密技术和哈希函数技术: 公钥加密技术公钥加密技术是一种基于不同的加密密钥和解密密钥的加密方式,公钥可以公开,而私钥只有发送方拥有。在数字签名中,发送方使用私钥对消息摘要进行加密,生成数字签名,接收方使用公钥对数字签名进行解密,从而确定消息的真实性和完整性。 哈希函数技术哈希函数是一种将任意长度的输入数据映射为固定长度输出数据的函数,它具有单向性和不可逆性的特点。在数字签名中,发送方使用哈希函数对消息进行摘要处理,生成消息摘要,接收方使用哈希函数对收到的消息进行摘要处理,从而确定消息的完整性和真实性。数字签名的流程是什么? 发送方使用哈希函数对消息进行摘要处理,生成消息摘要。 发送方使用私钥对消息摘要进行加密,生成数字签名。 发送方将消息和数字签名一起发送给接收方。 接收方使用发送方的公钥对数字签名进行解密,得到消息摘要。 接收方使用哈希函数对收到的消息进行摘要处理,得到消息摘要。 接收方比对解密得到的消息摘要和计算得到的消息摘要,如果一致,则证明消息的完整性和真实性得到了保证。数字签名的安全性如何保证? 私钥保护私钥是数字签名的关键,只有发送方拥有私钥才能够生成数字签名。因此,私钥需要进行严格的保护,防止被攻击者窃取或泄露。 公钥验证接收方必须要验证发送方的公钥的真实性,以确保数字签名的可信度。可以通过数字证书、公钥基础设施(PKI)等机制来验证公钥的真实性。 哈希函数安全哈希函数是数字签名的基础,安全的哈希函数可以有效地保护数字签名的安全性。为了保证哈希函数的安全性,需要选择安全性较高的哈希函数,如SHA-2、SHA-3等。 抵御攻击数字签名可能会受到多种攻击,如中间人攻击、重放攻击等。为了保证数字签名的安全性,需要采取相应的安全措施,如使用数字证书、使用时间戳等。 不可篡改性数字签名是一种不可篡改的技术,因此需要确保数字签名本身不会被篡改。可以使用数字证书、数字时间戳等机制来保证数字签名的不可篡改性。数字签名的算法有哪些? RSARSA是一种基于因数分解的公钥加密算法,也可以用于数字签名。RSA数字签名是一种常用的数字签名算法,它通过私钥对消息进行签名,通过公钥对签名进行验证。 DSADSA是一种基于离散对数问题的数字签名算法,它是美国国家标准局(NIST)推荐的数字签名算法之一。DSA数字签名是一种轻量级的数字签名算法,适用于一些资源受限的环境。 ECDSAECDSA是一种基于椭圆曲线加密的数字签名算法,它与DSA类似,但使用的是椭圆曲线加密算法。ECDSA数字签名算法具有高效性和安全性的特点,适用于移动设备等资源受限的环境。 EdDSAEdDSA是一种基于椭圆曲线加密的数字签名算法,它是ECDSA的改进版,具有更好的性能和安全性。EdDSA数字签名算法适用于移动设备等资源受限的环境。 GOSTGOST是一种由俄罗斯开发的数字签名算法,它是一种基于哈希函数的数字签名算法,具有高效性和安全性的特点。数字签名的应用场景有哪些? 电子商务数字签名可以用于电子商务中的订单、付款、物流等环节的认证和验证,保证交易的真实性和完整性。 数字证书数字签名可以用于数字证书的认证和验证,保证数字证书的真实性和有效性。 文件传输数字签名可以用于文件传输中的身份认证和文件完整性保护,保证文件在传输过程中不被篡改或伪造。 网络通信数字签名可以用于网络通信中的数据完整性保护和身份认证,保证通信的安全性和可信度。 版权保护数字签名可以用于保护数字版权,防止数字内容被盗用或篡改。 法律证据数字签名可以作为法律证据,保证签署方的身份真实性和签署时间的真实性。

词条知识树 (6个知识点)数字签名的作用是什么?数字签名的原理是什么?数字签名的流程是什么?数字签名的安全性如何保证?数字签名的算法有哪些?数字签名的应用场景有哪些?相关文章什么是数字签名?-- 【图解数字签名】978数字签名702【计算机网络】网络安全 : 数字签名 ( 数字签名简介 | 数字签名实现 | 数字签名功能 | 保密数字签名 )1.1K数字签名843聊聊数字签名(下)816社区专栏文章阅读清单互动问答技术沙龙技术视频团队主页腾讯云TI平台活动自媒体分享计划邀请作者入驻自荐上首页技术竞赛资源技术周刊社区标签开发者手册开发者实验室关于社区规范免责声明联系我们友情链接腾讯云开发者扫码关注腾讯云开发者领取腾讯云代金券热门产品域名注册云服务器区块链服务消息队列网络加速云数据库域名解析云存储视频直播热门推荐人脸识别腾讯会议企业云CDN加速视频通话图像分析MySQL 数据库SSL 证书语音识别更多推荐数据安全负载均衡短信文字识别云点播商标注册小程序开发网站监控数据迁移Copyright © 2013 - 2024 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有 深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569腾讯云计算(北京)有限责任公司 京ICP证150476号 |  京ICP备11018762号 | 京公网安备号11010802020287问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归

什么是数字签名?数字签名的原理是什么?请结合自身工作论述数字签名的安全应用过程 - 知乎

什么是数字签名?数字签名的原理是什么?请结合自身工作论述数字签名的安全应用过程 - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册数字签名什么是数字签名?数字签名的原理是什么?请结合自身工作论述数字签名的安全应用过程求答案什么是数字签名?数字签名的原理是什么?请结合自身工作论述数字签名的安全应用过程,谢谢,希望能全面点显示全部 ​关注者12被浏览13,859关注问题​写回答​邀请回答​好问题​添加评论​分享​5 个回答默认排序e签宝​已认证账号​ 关注作为中国互联网电子签名行业领跑者,小e要告诉题主,数字签名在电子合同中有两个重要作用:一是,确定消息是由发送方签名并发出来的;二是,确定数据电文内容是否被篡改,验证消息的完整性。【点击下方】免费试用电子合同先让我们来看看数字签名是什么?数字签名(又称公钥数字签名、电子签章)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。我们可以简单的理解为,数字签名跟日常生活中的手写签名其实是一样的。我们都知道一个人的手写签名是无法伪造的,因为每个人的笔迹都是独一无二的,即便别人模仿也很难做到完全的一模一样。所以,数字签名就是为了验证在互联网中传输的内容数据是对方签名后发出,并且信息没有被掉包和篡改。至于数字签名为什么能够实现这两个功能,我们得从数字签名的原理说起。数字签名的原理数字签名是基于非对称密钥加密技术与数字摘要技术的应用,是一个包含电子文件信息以及发送者身份,并能够鉴别发送者身份以及发送信息是否被篡改的一段数字串。一段数字签名数字串包含了电子文件经过Hash编码后产生的数字摘要,即一个Hash函数值以及发送者的公钥和私钥三部分内容,发送方通过私钥加密后发送接收方,接收方使用公钥解密,通过对比解密后的Hash函数值确定数据电文是否被篡改。是不是有些没看懂?没关系,题主只要知道,数字签名能够验证信息发送者的身份及信息的完整性,就可以啦。以上,希望可以帮到题主。编辑于 2023-06-21 15:35​赞同 1​​添加评论​分享​收藏​喜欢收起​微凉晨光怀疑一切和全盘信任是同样轻松的事情,因为两件事都不需要反思·​ 关注介绍:数字签名:是用公开密钥体制解决信息认证和签名问题。1976年,棣弗和赫尔曼提出全新的公开密钥体制(public key),特点是保密性强,加密程序和密钥公开,且在同一体制可以供多客户使用。而RSA方案和离散对数方案是到目前为止比较安全的公开密钥体制。也就是其他公开密钥方案都有了快捷算法书上的介绍,注意,这是不同于rsa算法的公开密钥体制,原理是:图片里说了这么多,意思就是有部分单向函数的逆函数比较难求(但这并不是说不是onto或到上函数,因为函数有反函数只能是onto或到上函数),每个“用户”都有自己的单向函数,作为密钥公之于众,并变成密码薄供给大家查用,但是将..........(书上都有)RSA算法:数字签名:教材是柯召孙琦书上的朴素讲解:有位小姐姐和你说再见编辑于 2021-03-03 21:20​赞同 4​​1 条评论​分享​收藏​喜欢

数字签名是什么? - 阮一峰的网络日志

数字签名是什么? - 阮一峰的网络日志

阮一峰的网络日志 » 首页 » 档案

上一篇:我的诗歌       

下一篇:Java开源建站工具 

分类:

理解计算机

⇐ 

 ⇒

数字签名是什么?

作者: 阮一峰

日期: 2011年8月 9日

今天,我读到一篇好文章。

它用图片通俗易懂地解释了,"数字签名"(digital signature)和"数字证书"(digital certificate)到底是什么。

我对这些问题的理解,一直是模模糊糊的,很多细节搞不清楚。读完这篇文章后,发现思路一下子就理清了。为了加深记忆,我把文字和图片都翻译出来了。

文中涉及的密码学基本知识,可以参见我以前的笔记。

====================================================

数字签名是什么?

作者:David Youd

翻译:阮一峰

原文网址:http://www.youdzone.com/signature.html

1.

鲍勃有两把钥匙,一把是公钥,另一把是私钥。

2.

鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。

3.

苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效果。

4.

鲍勃收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要鲍勃的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。

5.

鲍勃给苏珊回信,决定采用"数字签名"。他写完后先用Hash函数,生成信件的摘要(digest)。

6.

然后,鲍勃使用私钥,对这个摘要加密,生成"数字签名"(signature)。

7.

鲍勃将这个签名,附在信件下面,一起发给苏珊。

8.

苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。

9.

苏珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。

10.

复杂的情况出现了。道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。此时,苏珊实际拥有的是道格的公钥,但是还以为这是鲍勃的公钥。因此,道格就可以冒充鲍勃,用自己的私钥做成"数字签名",写信给苏珊,让苏珊用假的鲍勃公钥进行解密。

11.

后来,苏珊感觉不对劲,发现自己无法确定公钥是否真的属于鲍勃。她想到了一个办法,要求鲍勃去找"证书中心"(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。

12.

鲍勃拿到数字证书以后,就可以放心了。以后再给苏珊写信,只要在签名的同时,再附上数字证书就行了。

13.

苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明"数字签名"是否真的是鲍勃签的。

14.

下面,我们看一个应用"数字证书"的实例:https协议。这个协议主要用于网页加密。

15.

首先,客户端向服务器发出加密请求。

16.

服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。

17.

客户端(浏览器)的"证书管理器",有"受信任的根证书颁发机构"列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。

18.

如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告。

19.

如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告。

20.

如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。

(完)

文档信息

版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)

发表日期: 2011年8月 9日

相关文章

2022.08.02: DNS 查询原理详解

通过 DNS 查询,得到域名的 IP 地址,才能访问网站。

2022.06.03: 字节序探析:大端与小端的比较

今天谈谈一个重要的计算机概念,大家可能都听说过它,但是很少深究,那就是字节序(Endianness)。

2022.02.04: 万兆家庭网络的时代

最近,我想将家里的网络设备,都升级到千兆。

2021.12.07: 为什么 Web3 与区块链有关

互联网迄今有两个阶段:Web 1.0 和 Web 2.0。

留言(335条)

towry

说:

太棒了,真的,非常有帮助,谢谢!!!

2011年8月 9日 20:51

| #

| 引用

落水狗

说:

加上图片以后确实清晰了很多,这个真的很好。

2011年8月 9日 22:14

| #

| 引用

33ad3

说:

说实话,还是有点迷糊

2011年8月 9日 22:16

| #

| 引用

fenghanzhao

说:

还是有点模糊!没太明白!

2011年8月 9日 22:29

| #

| 引用

Xtrats

说:

道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。因此,他就可以冒充鲍勃,写信给苏珊。

-----------

有鲍勃的公钥就可以冒充鲍勃?

道格自己不也有鲍勃的公钥么?“每人一把”。

2011年8月 9日 23:01

| #

| 引用

阮一峰

说:

引用Xtrats的发言:

有鲍勃的公钥就可以冒充鲍勃?

道格自己不也有鲍勃的公钥么?“每人一把”。

只有有了鲍勃的私钥,才能冒充鲍勃。

道格没有鲍勃的私钥,只好伪造鲍勃的公钥。

2011年8月 9日 23:22

| #

| 引用

Michael.Z

说:

还是有些模糊,需要慢慢理解。

有一个问题,公钥和私钥的算法是一样的吗?为什么私钥加密可以用公钥解密?

2011年8月10日 01:36

| #

| 引用

febird

说:

11.

"证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。"

13.

"苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明"数字签名"是否真的是鲍勃签的。"

有个疑问,鲍勃的证书中鲍勃的公钥有没有被加密?

1. 如果加密了,则苏珊必须能从某个地方获取CA的公钥方能和鲍勃通信,这CA公钥要么随证书附送,要么预先存放在苏珊的电脑中。

2. 如果鲍勃的公钥被加密,同时CA的公钥也在证书中附送,那加密鲍勃公钥有什么意义?

3. 如果鲍勃的公钥被加密,且CA的公钥只是预先存放在苏珊的电脑中,那么经过其他未授权CA颁发的无效证书不能被解开,从而无法得到鲍勃的公钥,但这似乎不合理,举个例子,浏览器能够在HTTPS证书不在证书列表的情况下继续通信。

2011年8月10日 02:37

| #

| 引用

史诗在线

说:

  CNNIC也有根证书了,不过我把它屏蔽了。

2011年8月10日 02:40

| #

| 引用

blue gene

说:

引用Xtrats的发言:

有鲍勃的公钥就可以冒充鲍勃?

道格自己不也有鲍勃的公钥么?“每人一把”。

道格用自己的私钥加密发给苏珊的信件,苏珊收到信件后用道格的公钥自然能正常解密该信件,但是苏珊以为她收到的是鲍勃的信件,并且认为是用鲍勃的公钥来解密的,自然认为发信的就是鲍勃,所以道格就达到了伪造鲍勃与苏珊通讯的目的。

2011年8月10日 08:36

| #

| 引用

ncsglz

说:

其实我觉得把三个人名换成中文名,会更容易理解一点,不然容易记不住,哈哈

大学的时候学过这玩意,当时也是一知半解,现在全明白了,太有用了

2011年8月10日 08:43

| #

| 引用

ls zhao

说:

绝对的好文章,通俗易懂。分享了...谢谢

2011年8月10日 09:33

| #

| 引用

xiongbo027

说:

既然道格可以替换鲍勃的公钥,为什么不能故技重施,伪造CA的公钥,然后用自己的私钥伪造成CA的数字证书,从而达到欺骗苏珊的目的呢?

2011年8月10日 09:50

| #

| 引用

newuser

说:

1(前提是有权威的CA认证苏珊,保证确实是苏珊为鲍勃创造了数字证书)得先用苏珊自己的公钥检查鲍勃的数字证书,目的是为了证明苏珊创造了鲍勃的数字证书。

2在解密这个数字证书后,再检查是否鲍勃的数字证书由创造它的CA认证以及在创造鲍勃的数字证书时提供的关于鲍勃的相关信息是否发生了改变。

3帕特用通过解密数字证书得到的公匙(这个公匙苏珊为鲍勃创造数字证书所用的鲍勃的公匙)来检查鲍勃的签名,如果这个公匙确实能成功解密签名,证明确实这个签名是由鲍勃的私匙所创造,当然也证明了道格没有修改文档,因为MD没有变化。

道格确实有鲍勃的公匙,不过他用的是鲍勃的电脑和邮件,而且发给苏珊的是自己用鲍勃的姓名生成的key pair。

2011年8月10日 10:01

| #

| 引用

CK

说:

xiongbo027 说:

既然道格可以替换鲍勃的公钥,为什么不能故技重施,伪造CA的公钥,然后用自己的私钥伪造成CA的数字证书,从而达到欺骗苏珊的目的呢?

==============================

其实我也有同上的问题,既然CA的公钥是公开的,那么有什么办法能保证别人无法替换掉CA的公钥呢

2011年8月10日 10:10

| #

| 引用

Ciger

说:

公钥不需加密。

CA公钥无法伪造,因为CA公钥是可查的,比如在MSDN里可以查到微软用于签名driver的公钥(Base64码)。

2011年8月10日 10:17

| #

| 引用

阮一峰

说:

引用CK的发言:

既然CA的公钥是公开的,那么有什么办法能保证别人无法替换掉CA的公钥呢

CA都是一些可靠的大机构,它们的公钥在自己网站上提供下载,所以无法伪造。

2011年8月10日 10:27

| #

| 引用

阮一峰

说:

引用febird的发言:

有个疑问,鲍勃的证书中鲍勃的公钥有没有被加密?

1. 如果加密了,则苏珊必须能从某个地方获取CA的公钥方能和鲍勃通信,这CA公钥要么随证书附送,要么预先存放在苏珊的电脑中。

2. 如果鲍勃的公钥被加密,同时CA的公钥也在证书中附送,那加密鲍勃公钥有什么意义?

3. 如果鲍勃的公钥被加密,且CA的公钥只是预先存放在苏珊的电脑中,那么经过其他未授权CA颁发的无效证书不能被解开,从而无法得到鲍勃的公钥,但这似乎不合理,举个例子,浏览器能够在HTTPS证书不在证书列表的情况下继续通信。

我看到有的资料说,公钥被加密打包后,做成证书。

1. CA的公钥网上可以取得,浏览器中也有预存。

2. 证书必须用CA的私钥加密,如果能用CA的公钥打开,就证明确实是CA颁发的。

3. 我对HTTPS的一些实现细节不熟悉,但是我的理解是,如果HTTPS公钥不在浏览器列表内,浏览器可以从网上取得。

2011年8月10日 10:40

| #

| 引用

玉沭林沣

说:

引用阮一峰的发言:

CA都是一些可靠的大机构,它们的公钥在自己网站上提供下载,所以无法伪造。

那么在下载到本地后,如何避免被替换的问题呢?感觉跟道格用自己的公钥替换鲍勃的公钥一样啊,假若苏珊每次也是重新下载鲍勃的公钥岂不是同样可以避免公钥被替换的问题,那么还要数字证书干什么?

2011年8月10日 10:46

| #

| 引用

Yonny

说:

引用玉沭林沣的发言:

那么在下载到本地后,如何避免被替换的问题呢?感觉跟道格用自己的公钥替换鲍勃的公钥一样啊,假若苏珊每次也是重新下载鲍勃的公钥岂不是同样可以避免公钥被替换的问题,那么还要数字证书干什么?

无法避免。

苏珊必须自己保证自己计算机的物理安全。如果别人已经可以直接控制你的计算机,修改根证书列表,那什么证书安全也救不了你。

2011年8月10日 11:13

| #

| 引用

Yonny

说:

楼主把数据完整性和数据加密放在一起讲,会让人糊涂。

实际上,数字签名是保证数据完整性的,但它不保证数据加密,不保证数据传输途中无人嗅探窃听。

好比一辆敞篷大货车从A开到B,中途没有洒落任何东西,完整性得到了保证。但是车上有什么东西也被路人看光光。

数据加密是从A到B建了一条虚拟隧道,货车在里面开,路人谁也不知道是什么东西。

车子到了B后,送货的人给出自己的身份证,证明自己的确是从A来的。收货的人可以选择相信这个身份证。也可以把身份证放到自己的身份证校验仪查询,看看是不是公安部发的真的身份证。

如果你的身份证校验仪(CA)已经是假的了,那就啥都别说了,重装系统吧。

2011年8月10日 11:26

| #

| 引用

Ciger

说:

“如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。”

这里似乎有点问题。通常公开钥算法用于相互验证,之后会建立session key(比如128位AES key)。后续交互的信息都是用session key和对称加密算法(比如AES)来加解密的,已经与证书本身和公钥密钥无关。因为公开密钥算法比对称密钥算法开销大很多。不过HTTPS不了解,不敢定论。

2011年8月10日 11:33

| #

| 引用

goool

说:

8.苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。

9.苏珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。

--------------

8 的说法有问题,只此一步,是无法确定信由鲍勃发出的。

必须 8 9 两步都完成了,才能确定:信由鲍勃发出,信未修改。

20.如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。

-------------

Ciger 的说法是正确的。

为了速度起见,https 连接只在建立连接时,使用服务器的公钥加密,这个阶段是为了交换一个共享密钥。接下来的过程使用的是对称算法。

2011年8月10日 13:18

| #

| 引用

mazhechao

说:

引用Ciger的发言:

通常公开钥算法用于相互验证,之后会建立session key(比如128位AES key)。后续交互的信息都是用session key和对称加密算法(比如AES)来加解密的,已经与证书本身和公钥密钥无关。因为公开密钥算法比对称密钥算法开销大很多。不过HTTPS不了解,不敢定论。

你说的对,就是这样的。

2011年8月10日 13:55

| #

| 引用

mazhechao

说:

引用goool的发言:

8 的说法有问题,只此一步,是无法确定信由鲍勃发出的。

必须 8 9 两步都完成了,才能确定:信由鲍勃发出,信未修改。

20.如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。

8的说法没有问题,就这一步就可以保证信由Bob发出的。因为消息是由Bob的私钥签名的,只有Bob本人才有他的私钥,所以能用Bob的公钥解密的,一定是Bob发出的。

8实现了抗否认性,9实现的是完整性。这是两个不同的概念。

2011年8月10日 14:03

| #

| 引用

mazhechao

说:

引用Michael.Z的发言:

公钥和私钥的算法是一样的吗?为什么私钥加密可以用公钥解密?

私钥和公钥在算法上是等价的,只不过一个是private,一个是public。这个应该是由密钥生成算法保证的。

2011年8月10日 14:08

| #

| 引用

mazhechao

说:

引用febird的发言:

有个疑问,鲍勃的证书中鲍勃的公钥有没有被加密?

2. 如果鲍勃的公钥被加密,同时CA的公钥也在证书中附送,那加密鲍勃公钥有什么意义?

确实是被加密的(被CA的私钥加密),但这里的意义不在加密(数据的保密性),而是保证证书是由CA签发的。

2. Bob的公钥被用于后续的会话密钥(session key)交换时的加密传输。

2011年8月10日 14:14

| #

| 引用

jlake

说:

用RSA加密解密的数学原理说明这一过程,可能更容易理解。

2011年8月10日 14:22

| #

| 引用

玉沭林沣

说:

引用Yonny的发言:

苏珊必须自己保证自己计算机的物理安全。如果别人已经可以直接控制你的计算机,修改根证书列表,那什么证书安全也救不了你。

您说的有道理,我是想确认一下数字证书和数字签名它们各自的作用是什么,因为从阮一峰这篇文章里看到的信息貌似是数字证书是为了确保数字签名的真实性而产生的,但实际情况可能不是这样。

2011年8月10日 14:30

| #

| 引用

jlake

说:

http://zh.wikipedia.org/wiki/%E5%85%AC%E5%BC%80%E5%AF%86%E9%92%A5%E5%8A%A0%E5%AF%86

维基百科上的说明,比较容易理解。

假设两个用户A,B进行通信,公钥为c,私钥为d,明文为x.

A用公钥对明文进行加密形成密文c(x),然后传输密文;

B收到密文,用私钥对密文进行解密d(c(x)),得到要通信的明文x。

补充:

如果是 A 同时和 B, C 通信,如果C的私钥为e

C收到密文,用私钥对密文进行解密e(c(x)),得到要通信的明文x。

c 是公钥, d、e 是私钥。用不同的私钥解密,能得到同样的结果。

这个过程通过很巧妙的数学来实现。

2011年8月10日 14:30

| #

| 引用

goool

说:

@mazhechao 原文的 5 6 7 8 9 是一个完整的签名场景,请在这个场景下重新考虑一遍。然后重新看一下 8 的表述:

8.苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。

实际上 Bob 的 “数字签名” 可以用任何人的公钥解密,得到一个 hash 值。如果不加上第 9 步(比对原文的 hash值)。这个第 8 步得不到任何有价值的信息。

2011年8月10日 14:46

| #

| 引用

dindog

说:

我也觉的这篇文章翻译失准了。

2011年8月10日 15:12

| #

| 引用

ssdt

说:

有ca也没用,cnnic现在在ca里了

cnnic可以伪造别人的ca然后利用窃取的公钥对信解密

公钥也可以被窃取,窃取了不就可以解开信了

把身份授权给ca也没用,只有法治国家才行

2011年8月10日 16:01

| #

| 引用

ssdt

说:

只要操作系统有后门,什么签名也没用

操作系统的后门可以作为进入一个国家市场的筹码

你以为微软是可以相信的吗

2011年8月10日 16:06

| #

| 引用

eggcalm

说:

13.

苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明"数字签名"是否真的是鲍勃签的。

----------------------------

在这里,CA的公钥会不会被道格用假的CA公钥替换掉?如果可以,那么道格就可以像[10]中那样向苏珊发送假的数字证书,达到冒充鲍勃的目的。

2011年8月10日 16:51

| #

| 引用

mazhechao

说:

引用goool的发言:

实际上 Bob 的 “数字签名” 可以用任何人的公钥解密,得到一个 hash 值。如果不加上第 9 步(比对原文的 hash值)。这个第 8 步得不到任何有价值的信息。

Bob的签名怎么会可以用任何人的公钥解密?Bob是用他的私钥签的啊,当然只有用Bob的公钥才能解密。再次强调,对比Hash值是为了验证数据的完整性。

Yonny兄弟说的有道理。

2011年8月10日 17:11

| #

| 引用

eggcalm

说:

引用goool的发言:

实际上 Bob 的 “数字签名” 可以用任何人的公钥解密,得到一个 hash 值。如果不加上第 9 步(比对原文的 hash值)。这个第 8 步得不到任何有价值的信息。

我不这么认为,我认为第8步的价值就在于,苏珊能确定这封信是鲍勃发出的(虽然不确定信的内容是否被窜改过),因为如果不是使用鲍勃的私钥加密,苏珊使用鲍勃的公钥不可能解密成功。

2011年8月10日 17:17

| #

| 引用

wqfeng

说:

真不错。后面那个HTTPS的例子是译者加的吧?原文中没有。

2011年8月10日 17:45

| #

| 引用

goool

说:

引用mazhechao的发言:

Bob的签名怎么会可以用任何人的公钥解密?Bob是用他的私钥签的啊,当然只有用Bob的公钥才能解密。

在原文第 8 步的场景里,所谓的“解密”只是一次数学运算(典型算法RSA)。输入是 signature 和 某个人的公钥,输出是一个 hash 值。重申一次,得到的这个 hash 没有任何价值。因为可以用任何人的公钥参与这次运算。

以上可以简单归结为:没有原文的数字签名是没有价值的。

2011年8月10日 17:50

| #

| 引用

mazhechao

说:

@goool:

价值就在于我能解开这个签名,能够解开这个签名本身就是有意义的——消息是Bob发出的,Bob不能否认消息是他发的,不是Bob的人也不能说是他自己发的,即实现了数据的抗否认性。至于hash值不hash值的,其意义体现在第9步,实现的是数据的完整性。这是两个完全不同的概念。原文分两步阐述,没有任何问题。

2011年8月10日 18:52

| #

| 引用

goool

说:

@mazhechao

我不知道你所说的“解开签名”是什么意义,它只是一步数学计算而已。

让我们更细致地看一下“验签”的过程:

1: 输入签名和公钥,算出 hash 值 h1;

2: 输入原文,算出 hash 值 h2;

3: 比较 h1 和 h2,发现 h1 和 h2 相等。在这一步上,我们开始推理,得出原文是 bob 发出且没有修改过。也就是你说的抗抵赖和数据完整。

请注意,这两个有价值的结论都是第三步得出的。

原文第 8 步和你都认为:经过第 8 步的计算,即可以得出原文由 bob 发出的结论。这是错误的,实际上1 2 两步只是可以交换顺序的两个计算步骤,它们不是任何有价值结论的充分条件,连必要条件也不是。

2011年8月10日 21:07

| #

| 引用

lewis

说:

http: the definitive guide 有一章是专门讲 https 原理的,比较透彻。

2011年8月10日 22:41

| #

| 引用

雨下路人

说:

总的来说这篇文章是很有价值的,但是翻译的还不让人满意,首先化名用的那几个中文名字不容易区分,容易混淆,鲍勃和道格还是谐音! 读着费劲! 两外最后相关背景没有交代清楚,以及某些语句没有把逻辑关系表达得足够清晰(“道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。”起初理解为道格把鲍勃手上的公钥换走了,乱乱的,仔细琢磨语句,才明白意思是:道格用自己的公钥换走了鲍勃送给苏珊的公钥……) 总之我觉得这篇文章如果要让更多的人收益,传播的更“远”,还需要好好“返修”一下! 完。

2011年8月11日 00:56

| #

| 引用

xy

说:

引用ncsglz的发言:

其实我觉得把三个人名换成中文名,会更容易理解一点,不然容易记不住,哈哈

大学的时候学过这玩意,当时也是一知半解,现在全明白了,太有用了

同意同意如果用张三李四的名字会更容易绕得清。

2011年8月11日 04:50

| #

| 引用

sfumato

说:

最后一段HTTPS的讲解和http://blog.leezhong.com/tech/2011/02/19/https-workflow.html 上的讲解有出入,无网不剩的讲解HTTPS是用非对称来加密对称密钥,然后拿对称密钥对网页加密(这样解密速度快),我相信他的解释是正确的,博主能解释一下吗?

2011年8月11日 10:16

| #

| 引用

涎弟

说:

鲍勃会给苏珊的信?不加密?明文?第七步只是把signature附上了 原文呢?不做任何操作????

2011年8月11日 10:59

| #

| 引用

Ivan

说:

好文章,需要一点时间来理解

2011年8月11日 17:29

| #

| 引用

abc

说:

@goool:

看了你的1,2步和前几个回复(实际上 Bob 的 “数字签名” 可以用任何人的公钥解密,得到一个 hash 值。如果不加上第 9 步(比对原文的 hash值)。这个第 8 步得不到任何有价值的信息。 特别是这个),好象你不懂公钥和私钥的原理吧,公钥和私钥是一对的,某个私钥加密的内容只有这个私钥所对应的公钥才能解开,其他的公钥是解不开的,反之亦然

不然怎么叫密码学呢

2011年8月11日 17:30

| #

| 引用

路灯时代

说:

去年有幸上过台湾的信息安全老师讲的数字签名这块的课,是学校搞的什么和台湾学校联合课程。用的是志明和春娇的做为例子。

内容讲的更为详尽,课件应该还在。不过是专门面向密码学研究的内容。

2011年8月11日 17:47

| #

| 引用

goool

说:

看来不止一个人误会了“解得开”“解不开”的问题。

设想一个签名场景,我们叫“理想中的签名”:Bob 直接用自己的私钥对原文加密,把结果发送给 Alice,Alice 用 Bob 的公钥去解密,得出原文。在这种情况下,的确存在一个“解开”或“解不开”的问题。如果 Alice 用别的什么人的公钥去解密,这次计算仍然能得出一串符号,但是结果没什么意义,这就是你说的“解不开”。

但实际中为了效率起见,被广泛应用的签名是这样的:Bob 对原文做一次 hash,然后用私钥对 hash 值加密,加密得到的结果我们称之为“签名”,然后把原文与“签名”发给 Alice。

Alice 首先作的计算(也就是原文的第 8 步)是用 Bob 的公钥对“签名”作一次解密,从而得出一个有待于与第 9 步得出的结果相比较的一串符号。

这串符号有什么意义么?

没有。

与原文有什么关系么?

看不出来。

通过这次计算,Alice 能不能断定“签名”是 Bob 发出的呢?

不能。因为**如果用别的什么人的公钥参与这次计算,同样能得到一个符号串,也同样看不出什么意义**。

所以,这一步计算没有所谓的“解得开”“解不开”的问题。

这就是为什么原文第 8 步是错误的,原文说:

收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。

Alice 的确得到了一个被暂时当作是原文 hash 值的符号串,但这个符号串还有待接下来的比对。这句话里的因果关系是不成立的。

2011年8月11日 18:33

| #

| 引用

啊啊呵

说:

@goool:

汗,第八步如果用别人的密钥解密的话会报错,一报错就知道你用的密钥不对了。。。。你真的先看看密码学原理吧。。。。别人已经说的很详细了,8,9有着分别不同的意义

2011年8月12日 11:10

| #

| 引用

abc

说:

@goool:

贴个wiki百科上的说明,这就是文章说的第九步,你自己好好理解一下。。。一个是解密得到的值(也就是第八步的值),一个是自己计算得到的值,再说一边,第八步如果用别人的密钥解密的话是会报错的,也就是得不到结果,而不是你所说的能得到一个hash值,至于加密解密的原理,wiki百科上也有,你可以看一下

签名消息

RSA也可以用来为一个消息署名。假如甲想给乙传递一个署名的消息的话,那么她可以为她的消息计算一个散列值(Message digest),然后用她的密钥(private key)加密这个散列值并将这个“署名”加在消息的后面。这个消息只有用她的公钥才能被解密。乙获得这个消息后可以用甲的公钥解密这个散列值,然后将这个数据与他自己为这个消息计算的散列值相比较。假如两者相符的话,那么他就可以知道发信人持有甲的密钥,以及这个消息在传播路径上没有被篡改过。

2011年8月12日 11:26

| #

| 引用

goool

说:

第八步如果用别人的密钥解密的话是会报错的,也就是得不到结果

以 RSA 算法为例。

拿其它人的公钥去解 Bob 的签名会发生什么,与 RSA 的原理无关,与具体的算法实现有关。从 RSA 的原理来说,所谓“公钥”“私钥”在数学上没有区别,所谓的“加密”、“解密”、“签名”、“验签”本质上是一回事,只是一个乘方和一个取模运算。

报错,报什么错,为什么报错?因为标准实现下,Bob 要对他的信息进行编码和填充。用别的人的公钥解密,会因为填充的字节不对而无法继续计算,或无法从计算结果提取出字符,或与 hash 串规则不符,大多数实现会在此处返回错误或抛出异常。

但是,RSA 从原理上并没有保证这一点,因为它只是三个数字参与的计算而已:把一个数与另一个数作乘方运算,然后除以第三个数,得到余数。

我们完全可以采用另一套字符编码规则、字节补齐规则、以及另外的 hash 算法,让其他人的公钥参与这次计算,也能得到一个符合规则的 hash 值。

所以从逻辑上,Alice 不能作出这样的推理:用 Bob 的公钥对签名作了一次计算,就断定签名是 Bob 发过来的。

2011年8月12日 16:16

| #

| 引用

风逐蓝天

说:

不错的科普文,只是感觉还不够通俗易懂。。。。

2011年8月12日 17:35

| #

| 引用

abc

说:

引用goool的发言:

……

你试一下就知道了啊,用别人的密钥试试看啊,看看会不会报错,你说说的那些什么取模比较数值都在解密也就是第八步里面包含了。。。

2011年8月12日 17:53

| #

| 引用

Jak

说:

不错不错,很形象~ 菜鸟们稍微了解下就好了。

对于 CA 证书的伪造问题……无可避免,谁知道会不会有木马把证书改掉呢。

2011年8月12日 18:37

| #

| 引用

mazhechao

说:

我怎么觉得我开始有点理解goool的意思了。。。

2011年8月12日 22:46

| #

| 引用

阿迪

说:

引用mazhechao的发言:

我怎么觉得我开始有点理解goool的意思了。。。

什么意思啊?

2011年8月12日 22:57

| #

| 引用

abc

说:

引用阿迪的发言:

什么意思啊?

他的意思就是把8,9步误解成解密的过程,其实第八步解密已经包含取模比较等步骤了

2011年8月15日 09:27

| #

| 引用

peeekkk

说:

引用阿迪的发言:

什么意思啊?

应该是说,用Alice用随便什么公钥解密,也会有一点点几率解密成功。所以不能认为解密成功,就100%确定签名的正确,有可能中彩票

2011年8月15日 17:43

| #

| 引用

abc

说:

引用peeekkk的发言:

应该是说,用Alice用随便什么公钥解密,也会有一点点几率解密成功。所以不能认为解密成功,就100%确定签名的正确,有可能中彩票

那到是,只要那个质数被猜到就行了,虽然希望很渺茫。。。

2011年8月16日 10:37

| #

| 引用

fan0219

说:

第八那里,我提一点异议。。苏珊收到信后,用公钥检验数字签名,用鲍勃的公钥解密摘要。不是由此可以验证这封信是由鲍勃发出的。。而是可以由此验证这封信的数字签名是有效的。。这封信,可能是由鲍勃发给A。然后A冒充鲍勃发给B。

第十一文字部分大概也有错误。。鲍勃提交自己的公钥和个人信息给CA(数字证书认证中心),并不需要提供苏珊的私钥。

然后我想问问,网页要是使用https加密浏览是不是,速度会比http慢很多。

要是文章后面能够总结一下公钥和私钥、数字签名、CA、数字证书的作用那就好了、、、、

2011年8月16日 17:39

| #

| 引用

Maple

说:

我也写了篇理解密码学的公钥和私钥的文章,以ssh免密码登陆作为载体 http://www.lovemaple.info/blog/2011/08/ssh-remote-sever-without-password/

2011年8月18日 18:10

| #

| 引用

Mr Wind

说:

如果鲍勃是亲手通过U盘把他的公钥交给苏珊的,那上面的讨论就不需要了;但如果是通过网络介质来传输,就存在着两个问题:1该公钥是鲍勃自己发的,还是有人冒充鲍勃发的,这是身份确认的问题,2该公钥是不是被人掉包或修改,这是公钥完整性的问题。(PGP软件中公钥的生物属性就很好地解决了上面的问题,通过电话用一些单词来与鲍勃核对公钥的完整性,其实是核对该公钥的指纹。)基于上面的原因要引入根证书。如果苏珊的电脑是盗版(她电脑中受信任的根证书已被恶意调换),或者她的电脑中受信任的根证书的已被黑客修改,也不排除CNNIC使坏的可能,再加上网页劫持,那苏珊个人电脑的https://……就有很大的风险。

2011年8月20日 10:07

| #

| 引用

finian

说:

引用Xtrats的发言:

有鲍勃的公钥就可以冒充鲍勃?

道格自己不也有鲍勃的公钥么?“每人一把”。

注意这里所说的“用自己的公钥”,不是鲍勃给道格的那支,而是道格自己伪造的另一支

2011年8月20日 14:19

| #

| 引用

Qujer

说:

我竟然看懂了!!!

2011年8月21日 21:12

| #

| 引用

fan0219

说:

引用Mr Wind的发言:

如果鲍勃是亲手通过U盘把他的公钥交给苏珊的,那上面的讨论就不需要了;……

Mr Wind的评论好精彩啊。。我学过几个星期网络安全,对公钥密钥这块看的很有趣味。Mr Wind 盗版系统根证书被修改的例子很意思!!

继续关注文章的评论。。

2011年8月23日 00:35

| #

| 引用

太道

说:

solidot有个类似的劫持证书的案例 http://internet.solidot.org/article.pl?sid=11/08/31/078252

2011年9月 8日 04:04

| #

| 引用

卢达

说:

引用Michael.Z的发言:

公钥和私钥的算法是一样的吗?为什么私钥加密可以用公钥解密?

这叫“非对称加密”

2011年9月16日 10:33

| #

| 引用

卢达

说:

只是,常见的在线邮箱缺少对 s/mime 的支持啊

2011年9月16日 10:41

| #

| 引用

riefuy

说:

读了这篇文章,获益匪浅。

也非常同意gool的观点,如果数据完整性得不到保证,怎么保证不可否认性?也就是数据被修改了,还能说是本人发出的吗?

2011年10月13日 22:44

| #

| 引用

ly

说:

bob给他们每人一把的公钥是不是是一样的?如果是,那么信件被道格截取到,是不是就同样被解密了!

2011年10月17日 16:01

| #

| 引用

精英一客

说:

呵呵,这个我之前也不是很懂。但是,如果你从证书的用途上去理解,比如私钥的目的是什么,公钥的目的是什么,这样的话会理解的很快

2011年10月24日 16:06

| #

| 引用

阿萨德

说:

银行的u盾属于私钥还是公钥,要是公钥每个u盾的内容是不是一样的呢

2011年11月 3日 09:35

| #

| 引用

HahA

说:

引用Xtrats的发言:

道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。因此,他就可以冒充鲍勃,写信给苏珊。

-----------

有鲍勃的公钥就可以冒充鲍勃?

道格自己不也有鲍勃的公钥么?“每人一把”。

其实是道格用自己的公钥(不是鲍勃给他的,是他自己的公钥)替换了苏珊的鲍勃公钥(注意是替换,原文翻译成换走可能对你理解产生了误导)。之后道格用自己的密钥加密信件发给苏珊,苏珊用假的鲍勃公钥(实际上是道格公钥)解密信件,发现信息正确,便以为是鲍勃发来的信件,于是道格实现了伪装成鲍勃欺骗苏珊的目的

2011年11月 4日 20:43

| #

| 引用

lich

说:

想这个过程的时候,如果略掉生成摘要的Hash函数貌似会更清晰些。

1 alice使用私钥对一份合同生成签名,同时把合同和签名发给bob。

2 bob收到后,使用公钥对签名解密生成一段文本。对应步骤8。

3 bob对比收到的合同和解码生成的文本。如果相同,则确定是来自alice。对应步骤9。

这里不能完全通过是否能解码成功来判断数据是否来自alice。

假设我使用自己的密钥对一段数据生成签名,发送给bob。bob使用alice的公钥解码,结果碰巧能解开,解开的数据有可能是乱码,无法阅读,但如果再碰巧看起来像一份合同。所以必须同时和收到的数据进行比较。

2011年11月17日 18:16

| #

| 引用

jieson79

说:

如果道格在网络上截取了BOB给苏珊的信,是不是就可以得到其中的内容?

2011年12月 1日 20:49

| #

| 引用

晴天娃娃

说:

如果第三方冒充发送方发出了一个文件,因为接收方在对数字签名进行验证时使用的事发送方的公开密钥,只要第三方不知道发送方的私有密钥,解密出来的数字签名和经过计算的数字签名必然是不相同的,这酒提供了一个确认发送方身份的方法。

2011年12月 2日 23:13

| #

| 引用

hui

说:

作者对公钥,私钥谁加密谁解密的解释似乎是有点问题的:

“Public-key cryptography refers to a cryptographic system requiring two separate keys, one to lock or encrypt the plaintext, and one to unlock or decrypt the cyphertext. Neither key will do both functions.”

参考链接在这里:

http://en.wikipedia.org/wiki/Asymmetric_encryption

2011年12月21日 21:28

| #

| 引用

shanshan

说:

有个地方不明白,既然苏珊可以用鲍勃的公钥进行解密,看到鲍勃的信件内容,那道格他也有鲍勃的公钥呀,那他也可以看到鲍勃写给苏珊的信件内容罗。

2011年12月22日 13:15

| #

| 引用

张永

说:

图形并茂,讲的真是太好了,o(∩_∩)o 哈哈

2012年3月25日 15:26

| #

| 引用

辛盈

说:

看了这么多评论,我发现很多人没有搞清楚加密和认证的区别:

加密:公钥加密、私钥解密

认证:私钥加密、公钥解密

首先要搞清楚一个操作的目的是什么,目的是加密数据还是认证作者。

2012年3月26日 13:23

| #

| 引用

Vaporz

说:

引用Xtrats的发言:

道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。因此,他就可以冒充鲍勃,写信给苏珊。

-----------

有鲍勃的公钥就可以冒充鲍勃?

道格自己不也有鲍勃的公钥么?“每人一把”。

我的理解,道格给苏珊的是自己私钥生成的公钥,但因为苏珊不知道这是道格的公钥,就以为是在跟鲍勃通信。而且因为是道格私钥生成的公钥,所以道格可以正常的加密解密消息

2012年5月 8日 11:29

| #

| 引用

lzm

说:

文章很好,很容易理解。但我对图11有一些看法。

就你所说

"后来,苏珊感觉不对劲,发现自己无法确定公钥是否真的属于鲍勃。她想到了一个办法,要求鲍勃去找"证书中心"(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。"

认证中心对所有的信息进行了加密,那我所理解的数字证书将是一个密文串,那当得到这个密文串证书,我根本就不能知道是哪个ca对用户信息进行的加密,认证时也不知道用谁的公钥对证书进行解密。

我理解的证书是可以公布开的,所以用户的所有信息是不必要加密的。ca所需要做的工作只是对整个用户明文信息进行认证,也就是取摘要,再对摘要就行私钥加密。

没有找到相关的资料,不知道对不对,还请作答,谢谢。

2012年5月14日 11:38

| #

| 引用

乜都5识

说:

是篇好文章,但是,觉得文章并没有作者一开头说的那样好啊。

2012年8月19日 00:59

| #

| 引用

爱国者

说:

引用goool的发言:

Alice 不能作出这样的推理:用 Bob 的公钥对签名作了一次计算,就断定签名是 Bob 发过来的。

但Alice已经知道采用哪种公钥密钥算法了,因此如果使用Bob的公钥无法解密,那么可以推定消息不是Bob所发

2012年10月 1日 23:08

| #

| 引用

Jeremy

说:

引用lich的发言:

假设我使用自己的密钥对一段数据生成签名,发送给bob。bob使用alice的公钥解码,结果碰巧能解开,解开的数据有可能是乱码,无法阅读,但如果再碰巧看起来像一份合同。所以必须同时和收到的数据进行比较。

当"我"给Bob发信的时候,我的信是公开的,未被加密的,因为加密也没有意思啊,原因就是很多人有我的公钥.

但关键是,怎么才能让Bob看见我的信是原版,未经删减的.所以需要对原文Hash一下得到Y.

当Bob收到信后,用"我"的公钥解开签名,得到Y.然后Bob需要对原文Hash一下,得到M,

这个时候,对比Y与M.才能确保数据是安全的.

这里的安全包括:是由"我"发出去的,并且中途未被修改.

2012年10月14日 01:48

| #

| 引用

Jeremy

说:

引用shanshan的发言:

有个地方不明白,既然苏珊可以用鲍勃的公钥进行解密,看到鲍勃的信件内容,那道格他也有鲍勃的公钥呀,那他也可以看到鲍勃写给苏珊的信件内容罗。

这样的啊.本来就这个样子的.全是道格看不见苏珊给鲍勃的信.

对应到计算机上就是:Server 发给 Client 的数据是可以被截获的.

2012年10月14日 01:51

| #

| 引用

Jeremy

说:

引用爱国者的发言:

但Alice已经知道采用哪种公钥密钥算法了,因此如果使用Bob的公钥无法解密,那么可以推定消息不是Bob所发

在第8步上,goool 说法是正确的.

譬如说,我们可以想像一下这个情况:Bob写了封信(包括原文和签名)给Lily,然后Lily对原文做了些修改,再把这封信转发给了Alice. Alice当然是可以对这个签名解密的.因为他有Bob的公钥啊.但是我们不能说,这封信是由Bob发给Alice的,因为这封信的直接受体应该是Lily.

2012年10月14日 01:56

| #

| 引用

亭子

说:

非常赞,学到了好多东西,您的博客我非常喜欢看,请问是否可以做一个Android版的应用呢?这样,我们随时随地都可以看了。

如果有需要,我可以做这个android应用。

2012年10月16日 13:13

| #

| 引用

暗影吉他手

说:

我非常统一goool的看法。对于解密来说不存在“解密失败”这种说法。一般来讲的“解密失败”是指解密后的明文(不管是用对称密码还是非对称密码)仍然是无意义的文章,但是对于数字签名来说,不管解密后的hash是否正确,它都是一串无意义的hash值,单就这步来说根本看不出来是不是“解密失败”了。

再强调一遍,根本不存在“解密失败”这种说法。

2012年11月 4日 01:05

| #

| 引用

spraith

说:

我觉得之所以第8步有些问题,是因为Bob在制作数字签名那一步没加上一些更详细的说明,比如,第6、7步制作签名时,同时把Bob的个人信息和信件摘要并到一起再用私钥加密的话,在第8步苏珊用公钥解密后,就确实能知道此信件是由Bob发出的了,然后第9步通过hash函数也可以验证信件是否被修改过。而且根据第8和第9步所做的事情来看,我觉得作者的原意非常可能就是这样的,他只不过在第6 7步时漏掉了把Bob的个人信息也一起加入数字签名中。

2012年11月10日 16:07

| #

| 引用

小乖

说:

银行专业版 usb key里面存储的是什么信息,是客户端私钥,和客户端证书,还是服务器端证书.怎么和银行的服务端通讯的,我怎么都没想清楚?

2012年12月21日 17:36

| #

| 引用

小乖

说:

引用雨下路人的发言:

某些语句没有把逻辑关系表达得足够清晰(“道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。”起初理解为道格把鲍勃手上的公钥换走了,乱乱的,仔细琢磨语句,才明白意思是:道格用自己的公钥换走了鲍勃送给苏珊的公钥……)

道格的公钥和苏珊的公钥不都是 鲍勃送的吗,不是一样的吗

2012年12月21日 17:40

| #

| 引用

arlen

说:

之所以会觉得第8步有问题,是因为翻译的时候有一句重要的话没有翻译出来,原文是这样的:

Pat's software decrypts the signature (using Bob's public key) changing it back into a message digest. If this worked, then it proves that Bob signed the document, because only Bob has his private key.

2013年3月 8日 10:35

| #

| 引用

teddywu

说:

引用小乖的发言:

道格的公钥和苏珊的公钥不都是 鲍勃送的吗,不是一样的吗

“道格用自己的公钥换走了鲍勃送给苏珊的公钥” 是指 道格用道格的公钥(不是鲍勃给道格的公钥) 替换掉了鲍勃送给苏珊的公钥。

2013年3月16日 21:41

| #

| 引用

刀尖红叶

说:

好文章~

2013年3月20日 19:08

| #

| 引用

shfqbluestone

说:

峰哥的文章写的非常好,通俗易懂!

2013年3月27日 13:26

| #

| 引用

JohnK

说:

第8步确实有问题,仅由签名解密得到的结果是没法判断签名者身份的。

举个例子:(假设不考虑对明文的加密)

Alice 发送一串附带签名的明文给 Bob,格式如下:

TEXT SIG1

明文 签名

现在 Eve 截获了这段信息,并伪造为:

TEXT SIG2

明文 签名

Bob 收到信息,抛弃明文不看,对 SIG2 使用 Alice 的公钥解密,得到了 DIG2。

但他并不知道正确的 HASH(TEXT) 是什么,也就不知道得到的 DIG2 到底对不对,那么怎么判断发送者的身份呢。

不可抵赖性的实现是 依赖 TEXT 和 SIG 共同实现的。

假设 Eve 想篡改 Alice 的信息为:

TEXT2 SIG2

明文 签名

SIG2 应= RSA (Alice的私钥, HASH(TEXT2))

这样才能骗过 Bob 以为这封信息来自 Alice。

但 Alice 的私钥 Eve 并没有,因此他伪造不出签名。

因此当 Bob 验证过签名(相对明文)正确后,就认为这封信是 Alice 发送的。而不与明文相对是不成立的。

至于使用 Alice 的公钥去解密 Eve 伪造的签名会不会报错,则一定意义上依赖于加密算法。起码 RSA 这种幂乘和取模运算是不会有任何报错的。

2013年5月 8日 21:33

| #

| 引用

大神

说:

引用阮一峰的发言:

只有有了鲍勃的私钥,才能冒充鲍勃。

道格没有鲍勃的私钥,只好伪造鲍勃的公钥。

鲍勃给没人的公钥难道不是他们几个共有的?给的这个和鲍勃的公钥不一样?不共有?

2013年7月 7日 10:46

| #

| 引用

George Chen

说:

第5点,Bod决定采用 数字签名。

为什么Bod要用数字签名,应该说明下,这里Bod是为了证明自己是Bod,即这是认证过程 而非 加密过程

2013年11月11日 22:04

| #

| 引用

Chil

说:

引用blue gene的发言:

道格用自己的私钥加密发给苏珊的信件,苏珊收到信件后用道格的公钥自然能正常解密该信件,但是苏珊以为她收到的是鲍勃的信件,并且认为是用鲍勃的公钥来解密的,自然认为发信的就是鲍勃,所以道格就达到了伪造鲍勃与苏珊通讯的目的。

我也正好有这个疑问,如果苏珊收到信件后能用道格的公钥解密,这岂不是每个拥有道格公钥的人都能对信件解密?都能看到信件的内容?这样的话通信就不安全了.

2013年11月16日 07:42

| #

| 引用

Chil

说:

引用mazhechao的发言:

私钥和公钥在算法上是等价的,只不过一个是private,一个是public。这个应该是由密钥生成算法保证的。

如果是这样的话那通信就不安全了.就比如Bob将信息用自己的私钥加密发给suzan,但是很多人都有Bob的公钥,那岂不是有Bob公钥的人都可以解密看到信息?

2013年11月16日 07:55

| #

| 引用

SelfMedicated

说:

引用goool的发言:

@mazhechao

我不知道你所说的“解开签名”是什么意义,它只是一步数学计算而已。

让我们更细致地看一下“验签”的过程:

1: 输入签名和公钥,算出 hash 值 h1;

2: 输入原文,算出 hash 值 h2;

3: 比较 h1 和 h2,发现 h1 和 h2 相等。在这一步上,我们开始推理,得出原文是 bob 发出且没有修改过。也就是你说的抗抵赖和数据完整。

请注意,这两个有价值的结论都是第三步得出的。

原文第 8 步和你都认为:经过第 8 步的计算,即可以得出原文由 bob 发出的结论。这是错误的,实际上1 2 两步只是可以交换顺序的两个计算步骤,它们不是任何有价值结论的充分条件,连必要条件也不是。

转牛角了。同意m

2014年1月14日 15:58

| #

| 引用

SelfMedicated

说:

引用SelfMedicated的发言:

转牛角了。同意m

好吧,我忽然又懂goool的意思了,但我觉得这其实是具体实现的问题(当用不匹配的公钥去解密的时候会不会有“明显信息提示”的问题),可是这完全不是这篇文章的关键点啊,大不了是楼主翻译表述不严谨,可是不严谨又不是只有这一个地方,所以还是觉得钻牛角了...

2014年1月14日 16:17

| #

| 引用

御宅暴君

说:

引用goool的发言:

以 RSA 算法为例。

拿其它人的公钥去解 Bob 的签名会发生什么,与 RSA 的原理无关,与具体的算法实现有关。从 RSA 的原理来说,所谓“公钥”“私钥”在数学上没有区别,所谓的“加密”、“解密”、“签名”、“验签”本质上是一回事,只是一个乘方和一个取模运算。

报错,报什么错,为什么报错?因为标准实现下,Bob 要对他的信息进行编码和填充。用别的人的公钥解密,会因为填充的字节不对而无法继续计算,或无法从计算结果提取出字符,或与 hash 串规则不符,大多数实现会在此处返回错误或抛出异常。

但是,RSA 从原理上并没有保证这一点,因为它只是三个数字参与的计算而已:把一个数与另一个数作乘方运算,然后除以第三个数,得到余数。

我们完全可以采用另一套字符编码规则、字节补齐规则、以及另外的 hash 算法,让其他人的公钥参与这次计算,也能得到一个符合规则的 hash 值。

所以从逻辑上,Alice 不能作出这样的推理:用 Bob 的公钥对签名作了一次计算,就断定签名是 Bob 发过来的。

大哥,假设私钥为 (d, n), 公钥为 (e, n), 那么通过前者加密后,若要解密,所用到的 e 就必须满足 ed ≡ 1 (mod φ(n)) 公式了 。当然就几乎只有原来那个公钥 (e, n) 的 e 满足其条件,所以不是任何公钥都可以解的。毕竟如同其它前辈指出的,你拿别的公钥去计算,就因为会满足不了该条件而出错。你可以再好好地通过阮一峰的《RSA 算法原理》补习下。

如果要找出同样满足该公式其它的 e 也不是不可以,但其算法复杂度就和用公钥加密私钥解密的情况一样了。归根结底,公私钥的确可互换,且无法通过其中一个钥匙能在可接受的成本下计算出另一个钥匙,也难怪 RSA 深得『非对称』的真谛了。

2014年2月 5日 21:35

| #

| 引用

御宅暴君

说:

发现评论中有不少人被 goool 误导了... 汗。

且不说这个,有人质疑既然也可以用私钥加密用公钥解密,那么因为公钥是公开的,岂不是人人都可以解开被私钥加密的数据了?

但是!谁告诉你用私钥加密是为了不让他人窥探明文数据了?这做法不是为了保密,而是在于『认证』!即验证『我所使用的公钥』与『对方加密时所使用的私钥』是否构成一对符合 RSA 算法原理的公私钥。如同我上一条评论指出的,试图使用其它公钥来解密就几乎会出错。

但是私钥就只有对方一人知道了,就拿正文中例子来说。只要对方确确实实是鲍勃,从而私钥的确也是鲍勃所使用的。于是只要『苏珊所手上的公钥能对对方发过来的数据进行有效解密』,那么就证明了这公钥的确是与对方,即鲍勃使用的私钥构成一对公私钥。这就所谓的『认证』了。

但是,万一对方偏偏不是鲍勃而是道格,且已经偷偷把苏珊手上的公钥换成道格的公钥了呢?这个公钥当然就与道格所有用的私钥构成有效的一对公私钥,于是道格的确就可以在苏珊完全不知情的情况下,假装成鲍勃并与她通讯。其实这问题就要通过 CA 来解决了,正文的后续当然也是围绕此而展开的。

这地方阮一峰先生的确讲的不够好,没明确好『加密』和『认证』的区别,仍未尚未彻底掌握 RSA 算法的同学的确很容易被弄糊涂甚至陷入误区。

2014年2月 5日 21:56

| #

| 引用

liuruoze

说:

讨论好激烈啊,其实这篇科普文非常不错,非常明晰。但是想要真正理解还需要读更专业的文章。有些同学连加密与认证这两个基本过程都不懂,看了自然云里雾里。我觉得这篇文章主要说明的是签名和数字证书的区别与关系。

另外,https传输内容是确实是对称加密算法。还有,看这篇文章时务必先了解对称加密算法与非对称加密算法的基础知识。

2014年2月26日 10:48

| #

| 引用

zhanlang

说:

引用御宅暴君的发言:

发现评论中有不少人被 goool 误导了... 汗。

且不说这个,有人质疑既然也可以用私钥加密用公钥解密,那么因为公钥是公开的,岂不是人人都可以解开被私钥加密的数据了?

但是!谁告诉你用私钥加密是为了不让他人窥探明文数据了?这做法不是为了保密,而是在于『认证』!即验证『我所使用的公钥』与『对方加密时所使用的私钥』是否构成一对符合 RSA 算法原理的公私钥。如同我上一条评论指出的,试图使用其它公钥来解密就几乎会出错。

但是私钥就只有对方一人知道了,就拿正文中例子来说。只要对方确确实实是鲍勃,从而私钥的确也是鲍勃所使用的。于是只要『苏珊所手上的公钥能对对方发过来的数据进行有效解密』,那么就证明了这公钥的确是与对方,即鲍勃使用的私钥构成一对公私钥。这就所谓的『认证』了。

但是,万一对方偏偏不是鲍勃而是道格,且已经偷偷把苏珊手上的公钥换成道格的公钥了呢?这个公钥当然就与道格所有用的私钥构成有效的一对公私钥,于是道格的确就可以在苏珊完全不知情的情况下,假装成鲍勃并与她通讯。其实这问题就要通过 CA 来解决了,正文的后续当然也是围绕此而展开的。

这地方阮一峰先生的确讲的不够好,没明确好『加密』和『认证』的区别,仍未尚未彻底掌握 RSA 算法的同学的确很容易被弄糊涂甚至陷入误区。

如果道格也去认证了自己的证书,并且用自己的公钥换了bob的公钥,每次通信的时候发自己的证书过去,结果就是一切验证都没有问题,但是苏珊却以为自己在跟bob通信,实际确实跟道格通信, 我的意思是如何辨别证书所有者跟你要通信的目标是同一个人呢?

2014年3月12日 14:40

| #

| 引用

Colin356

说:

英文与中文在表达的逻辑上还是不同的,喜欢谨慎的接受概念和原理的人还是改天再看看原文吧~

2014年3月17日 02:19

| #

| 引用

xinxinyu

说:

引用zhanlang的发言:

如果道格也去认证了自己的证书,并且用自己的公钥换了bob的公钥,每次通信的时候发自己的证书过去,结果就是一切验证都没有问题,但是苏珊却以为自己在跟bob通信,实际确实跟道格通信, 我的意思是如何辨别证书所有者跟你要通信的目标是同一个人呢?

门外汉猜测。CA认证是收费的,可能会保证不会被恶意替换。网站和证书是一一对应的。a.com - public1 b.com - public2 可能像hosts那样的列表。

2014年3月30日 17:24

| #

| 引用

heramerom

说:

引用zhanlang的发言:

如果道格也去认证了自己的证书,并且用自己的公钥换了bob的公钥,每次通信的时候发自己的证书过去,结果就是一切验证都没有问题,但是苏珊却以为自己在跟bob通信,实际确实跟道格通信, 我的意思是如何辨别证书所有者跟你要通信的目标是同一个人呢?

你说的 ‘并且用自己的公钥换了bob的公钥' 是指道格偷偷用了苏的电脑,把里面的公钥换成自己么。可是文中说CA认证后,是把公钥放在传送的信息中的,而不是保存在苏的电脑上得。

2014年5月13日 17:55

| #

| 引用

richard

说:

引用阮一峰的发言:

只有有了鲍勃的私钥,才能冒充鲍勃。

道格没有鲍勃的私钥,只好伪造鲍勃的公钥。

怎么又变成了Bob的私钥了哈?Susan不是用Bob的公钥来解密的么?

另外还有点疑问就是为啥被替换为假的Bob公钥后,不能鉴别出来哈?不是可以将假Bob公钥解密的digest与原文hash之后比较,来判断内容是否一致么?如果是假的,digest会匹配不上哈,不是就不需要数字证书了哈?

还请您指教:)

2014年5月14日 14:45

| #

| 引用

richard

说:

引用mazhechao的发言:

8的说法没有问题,就这一步就可以保证信由Bob发出的。因为消息是由Bob的私钥签名的,只有Bob本人才有他的私钥,所以能用Bob的公钥解密的,一定是Bob发出的。

8实现了抗否认性,9实现的是完整性。这是两个不同的概念。

是不是说,如果解密的公钥不对了,是不能执行解密过程的,如果能执行解密就一定是bob的公钥了?

2014年5月14日 14:53

| #

| 引用

liuinsect

说:

那,“证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)”

证书中心怎么保证这个是 鲍勃的公钥 而不是其他人的?

2014年5月22日 16:55

| #

| 引用

呆瓜路

说:

谢谢院一峰先生的讲解,一目了然,通俗易懂。。

2014年7月15日 10:03

| #

| 引用

etnlona

说:

help a lot,thanks~!!!

2014年7月17日 16:58

| #

| 引用

zyj

说:

对收到的信件进行hash,得到的怎么可能跟对签名进行的hash的结果相等呢?????

2014年8月25日 09:57

| #

| 引用

Leon

说:

引用zyj的发言:

对收到的信件进行hash,得到的怎么可能跟对签名进行的hash的结果相等呢?????

解密得到的明文再hash得到的摘要与解密签名得到摘要进行验证,如果内容没被修改即相同。

2014年9月23日 10:25

| #

| 引用

刘哈哈

说:

引用CK的发言:

xiongbo027 说:

既然道格可以替换鲍勃的公钥,为什么不能故技重施,伪造CA的公钥,然后用自己的私钥伪造成CA的数字证书,从而达到欺骗苏珊的目的呢?

==============================

其实我也有同上的问题,既然CA的公钥是公开的,那么有什么办法能保证别人无法替换掉CA的公钥呢

=================================

说下我个人理解:CA的公钥是放在网站上的,当需要使用的时候在网站上进行下载,这样就能保证每次使用的CA公钥是不可能被替换的正确的公钥

2014年9月29日 15:40

| #

| 引用

阿凡提

说:

文中第三步,苏珊给鲍勃写信,

鲍勃 怎么确定这封信就是来自苏珊的??

2014年10月24日 15:12

| #

| 引用

yuntauy

说:

加密和完整性确实稍作区分更好。

Bob持有私钥,Susan有公钥。

Susan ----> Bob, 数据是加密的,因而也是没被修改的。

Bob ---> Susan, 数据是公开的,但是能保证是没被修改的。这时Susan实际上可以是公众中任何一个人。因为Signature是不能被修改的(修改了解不出来),进一步保证了Digest没被修改,再进一步保证信件没被修改。实际上在原理上Bob可以直接对给Susan的回信加密,这也能保证信件没被修改。但当信件的体量太大时,直接加密就不可取了。

2014年11月 7日 15:42

| #

| 引用

纳信

说:

其实wikipedia上的这幅图就能完全说明清楚了

http://en.wikipedia.org/wiki/Digital_signature#mediaviewer/File:Digital_Signature_diagram.svg

2014年11月12日 15:32

| #

| 引用

门外汉

说:

对这个不了解哟。我个人理解是:

首先任何人(好人和坏人)的公钥和私钥都可以用来加密解密数据,如果你访问https网站的时候用的是坏人的公钥,那么你就被坏人“中间人攻击”了,你在和坏人通信,你输入的密码等信息都被坏人用私钥解密而截获了。

那么这里就要保证、不要使用坏人的公钥加密,那么怎么知道将要访问的网站的真正公钥,而不是被坏人替换了假的公钥呢?这里用到的是事先存储方法,就是事先将这个网站的公钥放在一个地方,并且信任这个地方的所有公钥。 浏览器程序有一个证书选项,里面有“受信任的根证书颁发机构”,还有你的系统里的证书管理工具里也有信任的机构,也就是他们颁发的证书(公钥在证书里)在你装上系统或者下载浏览器之后是默认就信任了的!!!然后你将要访问的网站也是从那些证书颁发机构买的,所以也就默认信任了

你现在把你的系统时间往前调整十几年,然后清除缓存,打开一个https网站,你会发现提示证书未生效,因为浏览器根据已经信任的证书来判断的,在已经信任的证书(公钥在证书里)里,有个有效期,不在这个区间内浏览器就认为证书有问题。

至此,已经知道浏览器或者操作系统是靠“受信任的根证书颁发机构”这个玩意来确定是好人还是坏人的,所以如果你的系统或浏览器能够被黑客控制,那么黑客就有可能把你默认信任的证书替换成黑客自己的“坏证书”,来进行中间人攻击。所以保证自己系统安全很重要。

那么有没有不需要入侵系统就能对https进行中间人攻击呢?答案是有!那就是CNNIC,https追溯到上级,就是信任由颁发证书的机构颁发的证书,然而,CNNIC从2009年已经被火狐微软等公司默认信任了,也就是说CNNIC制作的ca证书你都默认的信任了,哈哈!

CNNIC当初还被CCAV报道过,搞的cn域名被晃色网站随便换域名。GFW和CNNIC是孪生兄弟,GFW负责DNS域名污染,CNNIC复杂伪造“合法”的ca证书,GFW就可以轻松的搞的任何网站的https加密传输!

最好将CNNIC从浏览器和操作系统的信任列表里删除(IE和谷歌用的系统的信任列表,火狐用的自己的信任列表)

大家可以搜索下。。。

不对请指教

2014年12月 6日 21:55

| #

| 引用

pony

说:

总体写得不错,不过看完后还是有几个疑问:

1. 也是争论得最多的,第8步中如果数字签名被道格修改,那苏珊用鲍勃的公钥解密时会不会报错?报什么错?希望有人能提供可靠的证据。

2. 如果问题1的答案是会报错,那么是否可以完全不使用数字签名,鲍勃直接用私钥对信件内容加密,苏珊用公钥解密,这样是否也能保证信件的完整性?因为如果内容被篡改,则解密时会报错。按照yuntauy的意思,似乎这样是可行的。

3. 第13步中,苏珊怎么知道用哪个CA的公钥去解密数字证书?

2015年2月28日 18:40

| #

| 引用

woodie

说:

有个疑问确实下

Bob发给三个人的公钥都是一样的吗?

2015年3月 3日 10:32

| #

| 引用

MemoMou

说:

如果还是觉得迷糊的同学,我觉得可以看看《离散数学及其应用》(Kenneth H. Rosen著)的4.6章,有实例分析,看完就懂了

2015年5月 5日 10:56

| #

| 引用

Daily1993

说:

引用啊啊呵的发言:

@goool:

汗,第八步如果用别人的密钥解密的话会报错,一报错就知道你用的密钥不对了。。。。你真的先看看密码学原理吧。。。。别人已经说的很详细了,8,9有着分别不同的意义

这个还会报错的啊?如果是敌军截取一段密文,用“与加密用的私钥不配对”的公钥解出一串字符,解密错了还会报错的啊,不会吧。。

2015年6月24日 11:14

| #

| 引用

老钱

说:

文章很不错,前后看了两遍终于搞清楚数字签名和数字证书的概念了。但对https的实现原理等还需要自己在琢磨琢磨。

2015年7月10日 14:04

| #

| 引用

yao

说:

第五步:鲍勃给苏珊回信,决定采用"数字签名"。

我想知道为什么要用数字签名?用数字签名的作用是什么?鲍勃直接用私钥加密传给苏珊不行吗?

2015年7月13日 21:30

| #

| 引用

sgqm

说:

受益匪浅!

评论和文章同样精彩!尤其是@goool的那一段讨论。

我也一直被公钥成功解密私钥的密文中的这个“成功”的定义所困惑,成功的定义是什么?

有人说会报错,或许在UserAgent实现https这块会有一定的异常处理,但在请求和响应被劫持的情况下,黑客通过自己的程序用任意的公钥取解密的时候,何来报错一说?

还是没搞明白!

2015年7月29日 18:03

| #

| 引用

houkai

说:

引用雨下路人的发言:

总之我觉得这篇文章如果要让更多的人收益,传播的更“远”,还需要好好“返修”一下!完。

同感!

2015年7月30日 19:49

| #

| 引用

AutumnLight

说:

你好,我想问下,原文中有这样一句

“Either one of Bob's two keys can encrypt data, and the other key can decrypt that data.“

其中任何一个密钥都可以用来加密,而另外的一个则可以用来解密;

可不可以这样理解:使用私钥加密的信息可以使用公钥解密,而不能使用私钥解密;使用公钥加密的信息可以使用私钥解密,但是不能使用公钥解密?

2015年8月11日 21:47

| #

| 引用

AutumnLight

说:

还有一个问题:

第8条说,苏珊拿到数字签名后,使用鲍勃的公钥进行解密,得到文档摘要,那么是不是鲍勃用私钥加密的数字签名只能使用鲍勃的公钥进行解密,而解密工具会给出是否可以使用此公钥进行解密?如果使用的公钥不能对数字签名进行解密就会出错,而不是使用任意的公钥都能进行解密,只不过是否正确了?

2015年8月11日 22:19

| #

| 引用

jqk6

说:

太清楚了!非常感谢阮老师!

2015年8月26日 17:32

| #

| 引用

pjm

说:

引用yao的发言:

第五步:鲍勃给苏珊回信,决定采用"数字签名"。

我想知道为什么要用数字签名?用数字签名的作用是什么?鲍勃直接用私钥加密传给苏珊不行吗?

前面的前辈已经讲得很清楚了,使用数字签名就是为了认证和验证完整性(也就是信息是否被修改),认证什么?为了认证这封信的最初发出者是不是BOB!不管中途信的明文内容有没有被黑客修改,只要有这个签名,就能证明bob是信的最初发出者(因为签名带有bob的个人信息,所以能证明)。然后再利用解密出来的数字签名中的摘要,用这个摘要去和你用hash函数加密获得的信的内容的摘要进行对比,就可以判断信的内容是否被黑客修改,这是验证完整性。

鲍勃直接用私钥加密传给苏珊不行吗?这个不是不行,只是没有意义,因为你鲍勃直接用私钥加密传给苏珊,但是!!!另外俩人也同样拥有鲍勃的公钥,他们也同样可以解开这个密文,所以这个加密是没有意义的。

2015年9月 2日 11:47

| #

| 引用

Jason

说:

阮大师:

我在美国工作,但也是你的粉丝之一,最近看了你很多文章,当然包括这篇,英文原文我也看了,但是似乎都忽略了一个问题:为什么要用hash呢?

整个hash步骤似乎是完全没有必要的,签名直接用私钥加密原信息,然后连同certificate和原信息一同发给对方。对方收到后先验证certificate,如果通过再用公钥解码签名,如果和原信息一样就说明没问题。我觉得如果按这个流程操作本质也是一样的,作用也一样。

请大师解答一下,谢谢

2015年10月17日 22:06

| #

| 引用

guest

说:

数字签名,简单来说就是

利用公钥机制,对消息的hash值加密,

完成数据的 不可否认性(公钥通信双方的唯一匹对)、数据完整性(消息的hash是唯一的)

2015年10月30日 10:13

| #

| 引用

徐朋

说:

引用Jason的发言:

阮大师:

我在美国工作,但也是你的粉丝之一,最近看了你很多文章,当然包括这篇,英文原文我也看了,但是似乎都忽略了一个问题:为什么要用hash呢?

整个hash步骤似乎是完全没有必要的,签名直接用私钥加密原信息,然后连同certificate和原信息一同发给对方。对方收到后先验证certificate,如果通过再用公钥解码签名,如果和原信息一样就说明没问题。我觉得如果按这个流程操作本质也是一样的,作用也一样。

请大师解答一下,谢谢

亲啊,你发送给别人的信息,如果用私钥加密,那么任何拥有你公钥的人都能够看到信的内容。所以,使用私钥来加密 信件内容是错误的。

所以,这个地方阮大师讲解的时候,漏掉了一点内容。就是,你给别人发私信必须要对这封信(信的内容+你的签名)使用 信件接收人的公钥进行加密。

2015年11月 2日 22:41

| #

| 引用

lorne

说:

引用Jason的发言:

阮大师:

我在美国工作,但也是你的粉丝之一,最近看了你很多文章,当然包括这篇,英文原文我也看了,但是似乎都忽略了一个问题:为什么要用hash呢?

整个hash步骤似乎是完全没有必要的,签名直接用私钥加密原信息,然后连同certificate和原信息一同发给对方。对方收到后先验证certificate,如果通过再用公钥解码签名,如果和原信息一样就说明没问题。我觉得如果按这个流程操作本质也是一样的,作用也一样。

请大师解答一下,谢谢

我的理解:与加密整个原文相比,只加密hash值所花费的时间会小的多,加密所需时间与加密内容的关系是线性的,你可以测试一下。

2015年11月 3日 09:09

| #

| 引用

Godlike

说:

有没有软件实现

2015年11月 3日 11:03

| #

| 引用

gongfei

说:

很厉害,很容易弄懂,谢楼主

2015年11月 3日 15:24

| #

| 引用

随智阔

说:

CA的钥匙要是丢了呢?被替换??

2015年11月24日 10:14

| #

| 引用

kai

说:

http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html

这篇文章的最后详细说明了,CA如何签发证书的,以及浏览器如何对证书进行校验的。里面提到证书里面对public key是不加密的。

2015年11月26日 11:52

| #

| 引用

Yongming

说:

HTTPS是否也有漏洞,过程如下:

A:server

B:client

C:hacker

1)B向A发送请求

2)A收到请求后,发送包含pub-key的证书给B

3)对于2)中的由A发送给B的证书,碰巧的是,C刚好接截获这段证书,并由root证书验证是真实的,那么root证书解析出pub-key。C就拿着这把pub-key等着。

4)B收到2)中的证书,也跟C一样验证并解析出pub-key,并生成一对AES-key,用pub-key加密AES-key并发送给A

5)又不巧的的是,C截获了4)中的秘闻AES-key。

......

OK,此时C成功侵入A-B之间的通信,请问上诉过程是否有bug,或者怎么破解?谢谢。

2015年12月 2日 17:22

| #

| 引用

Zhe Zhang

说:

引用Yongming的发言:

HTTPS是否也有漏洞,过程如下:

A:server

B:client

C:hacker

1)B向A发送请求

2)A收到请求后,发送包含pub-key的证书给B

3)对于2)中的由A发送给B的证书,碰巧的是,C刚好接截获这段证书,并由root证书验证是真实的,那么root证书解析出pub-key。C就拿着这把pub-key等着。

4)B收到2)中的证书,也跟C一样验证并解析出pub-key,并生成一对AES-key,用pub-key加密AES-key并发送给A

5)又不巧的的是,C截获了4)中的秘闻AES-key。

......

OK,此时C成功侵入A-B之间的通信,请问上诉过程是否有bug,或者怎么破解?谢谢。

第(5)步似乎不行吧。Hacker并没有拿到server的密钥,仅知道公钥pub-key是无法解密client发出的AES-key的。

2015年12月 4日 16:56

| #

| 引用

Martin

说:

这么晚才看到,希望能回复一瞎

最后https举例中

16:server用自己的“private key加密网页”,这里的加密网页,是加密自己网页的网址吧?

client收到后,检查本地证书列表,找到如果可以找到public key,解密 得到web网址,然后进行对比看是否一致

是这样的过程么?

2015年12月 5日 09:41

| #

| 引用

Martin

说:

引用Yongming的发言:

HTTPS是否也有漏洞,过程如下:

A:server

B:client

C:hacker

1)B向A发送请求

2)A收到请求后,发送包含pub-key的证书给B

3)对于2)中的由A发送给B的证书,碰巧的是,C刚好接截获这段证书,并由root证书验证是真实的,那么root证书解析出pub-key。C就拿着这把pub-key等着。

4)B收到2)中的证书,也跟C一样验证并解析出pub-key,并生成一对AES-key,用pub-key加密AES-key并发送给A

5)又不巧的的是,C截获了4)中的秘闻AES-key。

......

OK,此时C成功侵入A-B之间的通信,请问上诉过程是否有bug,或者怎么破解?谢谢。

看了以后,有点自己的想法,希望讨论一下

如你上面所说,C有了pub-key,等着,然后又有 step 5),截获了4)中的AES-key

因为AES-key用 pub-key加密,解密的话,可以再用pub-key进行解密?我以为的是pub-key加密,private-key解密。对加密解密不太了解,如果问题小白,见谅

2015年12月 5日 09:59

| #

| 引用

Martin

说:

引用lorne的发言:

我的理解:与加密整个原文相比,只加密hash值所花费的时间会小的多,加密所需时间与加密内容的关系是线性的,你可以测试一下。

我也是这样理解的,虽然没有测试。

认为传输原文成本,要比传输hash大得多

如果只是为了保证传输内容没有被修改过,使用md5之类的方式也可以做到这一点吧?

hash是可逆的么?

2015年12月 5日 10:03

| #

| 引用

coooder

说:

同意goool的观点。

假设对下面两段文本进行签名:

text1 (hash)=>100 (加密)=> 100-1

text2 (hash)=>200 (加密)=> 200-2

公钥为pub-key

那么pub-key应该是可以同时解密 100-1 和 200-2 的

那么如果接收到的数据为: text1 + 200-2

单纯进行第8步,200-2 解密得到 200 ,通过200这个数据无法得知信是由谁发的

只有通过第9步,对比 200 和 100 ,才能得到“信是不是由鲍勃发的以及信的内容是否被修改”

2015年12月16日 02:11

| #

| 引用

浪迹

说:

你们说的牛逼,我弱弱的问一句,公钥是对的,有哪些情况解不开私钥发过来的消息呢??

2015年12月17日 16:22

| #

| 引用

iMusicDog

说:

写的很好,虽然我不是100%懂了,但是觉得了解了很多!!!感谢阮老师!

另外,我觉得gools说得是对的!可能实现上会更直接一点给用户提示错误,比如说,如果用一个错误的(不对应的)公钥去解签名的话,直接报错。

最后,我有一个问题,为什么在 5 的时候,鲍勃要突然使用签名呢?

2015年12月21日 15:06

| #

| 引用

饭别稀

说:

苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明"数字签名"是否真的是鲍勃签的。

如何确定鲍勃证书中的公钥是真的?上面的解释是有问题的,苏珊做的不只是简单的解密成功就完了,而是用CA的公钥对证书中的签名做了一次完整的验签,可解密表示是CA发来的,hash一致表示正文未篡改,所以证书的正文包含的鲍勃的公钥,鲍勃的基本信息都是可信的。

2016年1月14日 10:38

| #

| 引用

王松

说:

引用徐朋的发言:

亲啊,你发送给别人的信息,如果用私钥加密,那么任何拥有你公钥的人都能够看到信的内容。所以,使用私钥来加密 信件内容是错误的。

所以,这个地方阮大师讲解的时候,漏掉了一点内容。就是,你给别人发私信必须要对这封信(信的内容+你的签名)使用 信件接收人的公钥进行加密。

其实英文原文中也并没有提到,对信的内容加密。

2016年1月16日 15:44

| #

| 引用

echo爱你

说:

在下是门外汉。阮兄的几张图配上说明一下子就看懂了,到看到评论我就傻了。。。

2016年2月 1日 04:47

| #

| 引用

小法

说:

如果道格用自己的公钥和伪造的鲍勃的个人信息去证书中心认证,然后伪装成鲍勃给苏珊发信息怎么办?还是说证书中心有义务验证个人信息的正确性,确保加密的个人信息是正确的?希望大家能给解释一下

2016年2月27日 13:38

| #

| 引用

小法

说:

弱弱的问下,用公钥解密,用正确的可以解开,用错的公钥解不开,到底什么叫解得开,什么叫解不开,解不开有什么提示吗?是会报错,还是得到一串没有意义的字符?新手求指导!!

2016年2月27日 13:39

| #

| 引用

binzeng

说:

本来以为看懂了,胸有成竹,看了下面评论,我又迷糊了。。。。

2016年3月10日 23:30

| #

| 引用

fspore

说:

我的理解是:

1)要达到保密的目的,则message必须由公钥加密,因为私钥只有一个人有,所以保证只有一个人能解得开。

所以要达到双方的message都是保密的,则须存在两对公私钥,双方互持有自己的私钥和对方的公钥。

但是由于message是用你的公钥加密的,所以虽然message是密文,但不能保证这个密文就是Bob加密后给你的,任何持有你的公钥的人都可以给你发密文。

2)因此还需要实现认证这个功能。

这回,Bob使用只有他自己才持有的私钥对message的摘要hash进行加密,然后将之附在原message上发给你。这个时候,你尝试用你手上所有的公钥来对hash密文进行解密,如果某个公钥A解开了hash密文,则证明对该hash进行加密的就一定该公钥所对应的私钥-A。而私钥只有一个人持有,所以能惟一确认这个message是被这个人经手过的。

也就是说,如果我手上的Bob的公钥确实就是属于Bob的话,那么当这个公钥能解开hash密文时,我就能说这个message确实是由Bob发出的。

3)而如何保证"我手上的Bob的公钥确实就是属于Bob"呢?只有引入第三方权威认证。也就是CA了。

上面goool 说的第8条,我也有同样的疑问。我对密码学不甚了解。

但按文中的说法,能够知道:

a)如果公钥与私钥对应, 那么私钥加密hash后的密文 被该公钥解密后能够还原出那hash。

问题是: 其他不与私钥对应的公钥在尝试对密文解密后, 其结果是完全无法解密呢?还是得出一个无意义的hash值呢?

有人能解答一下吗?

2016年4月 6日 18:57

| #

| 引用

godshit

说:

太精彩了,通俗易懂,看过n篇文章,就这篇最好了。 谢谢博主~

2016年4月 7日 08:17

| #

| 引用

我的滑板鞋

说:

是否可以这么理解:‘数字签名’跟‘数字证书’不是为了加密信息,而是为了确认来源可靠?

2016年4月 7日 20:58

| #

| 引用

刘大敏

说:

引用我的滑板鞋的发言:

是否可以这么理解:‘数字签名’跟‘数字证书’不是为了加密信息,而是为了确认来源可靠?

是的,我也是这么理解的,文章中引出CA,主要目的也是确保鲍勃的公钥确实是鲍勃的,而非来自其它人的伪造。

2016年4月12日 08:59

| #

| 引用

留大名

说:

顺便感慨一句,看到11年写成的文章依旧不断的被评论和回复着,有价值的东西生命力天然的会长久。

2016年4月12日 09:06

| #

| 引用

chicoge

说:

您好,请问您的文章可以转载嘛?如果可以我希望能够转载并签署您的大名, 感谢!

2016年4月15日 11:04

| #

| 引用

xiadeng

说:

引用阮一峰的发言:

CA都是一些可靠的大机构,它们的公钥在自己网站上提供下载,所以无法伪造。

大机构的网站被黑了,就可以了

2016年5月20日 19:35

| #

| 引用

Jiguang

说:

阮大,上面貌似有错误的地方。如果加密方式是非对称加密,那么是不可以用私钥加密,公钥解密的。应该是双方各自产生一个密钥对,然后交换公钥。

2016年5月27日 14:15

| #

| 引用

rabbitws

说:

引用Jiguang的发言:

阮大,上面貌似有错误的地方。如果加密方式是非对称加密,那么是不可以用私钥加密,公钥解密的。应该是双方各自产生一个密钥对,然后交换公钥。

https中,第二阶段的服务端与客户端沟通是:客户端拿到服务端的公钥后,产生一个随机的key作为,然后用服务端的公钥加密传递给服务端,服务端拿到加密后的key,利用服务端原有的私钥解密,得到key的原文。然后后面跟客户端通讯就使用key作为对称加密的私钥,进行通讯了。其实https真正的数据传递过程,走的是对称加密。

2016年6月12日 14:49

| #

| 引用

芊度

说:

确实不错,很好。每当我忘记的时候就再来看看/touxiao

2016年6月24日 17:11

| #

| 引用

薛子嘉

说:

第八步原文本来就含糊不清,作为一个初学者,那么就有一个疑问,假设有一个函数,getOutput(signature, publicKey),那么使用一个非bob的publicKey在调用这个函数时会发生下面哪一种结果?

1.traceback(抛异常,只是打个比方别扯远了),证明非bob的publicKey在解密时就能够判断出来。

2.返回字符串(只是打个比方别扯远了)。

很明显,看上面的评论,我感觉大多数人对于判断这个解密是否成功的概念有差异。

2016年7月 8日 11:57

| #

| 引用

薛子嘉

说:

补充一下

1.有些人可能认为,哦,traceback了,或者返回错误码了,就知道这里解密就是失败了。

2.有些人可能认为,哦,这里返回了某一个字符串,或者hash,在这里,明显判断不了是否失败。

3.有些人在这里没有概念,你说成功了就是成功了。

2016年7月 8日 12:05

| #

| 引用

bmcciscoding

说:

@Jeremy:

修改了之后hash值不一样了

2016年8月 8日 23:33

| #

| 引用

bwangel

说:

有个问题想请教一下,比如像 Tornado 中有个设置

cookie_secret

文档中说这个值是对cookie进行签名的?

这个值就是签名的私钥吗,那么公钥是如何生成的啊?

2016年10月17日 11:27

| #

| 引用

water

说:

很清晰,通俗易懂

2016年11月 2日 09:23

| #

| 引用

Chris

说:

引用Xtrats的发言:

道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。因此,他就可以冒充鲍勃,写信给苏珊。

-----------

有鲍勃的公钥就可以冒充鲍勃?

道格自己不也有鲍勃的公钥么?“每人一把”。

这里是您的理解有误, 道格用自己生成的公钥替换了苏珊电脑上鲍勃原先的公钥, 但苏珊潜意识里面还以为是鲍勃的公钥, 以后道格用自己的私钥加密信件, 冒充是鲍勃, 苏珊用电脑上的公钥解密,就真的以为是道格.

2016年11月 3日 13:22

| #

| 引用

QuinnChen

说:

首先感谢博主一如既往地为大家带来这么多优质博客。

这个例子不错

唯一的不足是,讲到私钥解密还可以私钥加密

按我理解,像RSA这种非对称加密算法中,私钥只能解密从公钥加密来的密文,而不能进行加密

2016年11月28日 02:43

| #

| 引用

QuinnChen

说:

引用QuinnChen的发言:

首先感谢博主一如既往地为大家带来这么多优质博客。

这个例子不错

唯一的不足是,讲到私钥解密还可以私钥加密

按我理解,像RSA这种非对称加密算法中,私钥只能解密从公钥加密来的密文,而不能进行加密

抱歉,我个人理解有误,公钥私钥其实是可以相互加解密的。

对于数据加密时,公钥加密,私钥解密

对于数据认证时,私钥签名,公钥验证(这时就是私钥加密,公钥解密)

2016年11月28日 14:08

| #

| 引用

yehot

说:

根本就没有帕蒂什么事啊,这就尴尬了

2016年12月 1日 17:04

| #

| 引用

yehot

说:

鲍勃的信,签名是用私钥加密了。但是新建内容本身不用加密么?

2016年12月 1日 17:09

| #

| 引用

shiyang

说:

引用mazhechao的发言:

8的说法没有问题,就这一步就可以保证信由Bob发出的。因为消息是由Bob的私钥签名的,只有Bob本人才有他的私钥,所以能用Bob的公钥解密的,一定是Bob发出的。

8实现了抗否认性,9实现的是完整性。这是两个不同的概念。

我有一个疑问就是8里面苏珊对签名解密后得到摘要,就能知道这是鲍勃的签名,那这个摘要里面有什么信息可以让苏珊知道是鲍勃的摘要?是不是摘要也是公开信息?

2016年12月 6日 15:08

| #

| 引用

Harvey

说:

感谢,感谢,太好了,一篇文章就说清楚了签名、证书。

2016年12月20日 10:38

| #

| 引用

代码喵

说:

醍醐灌顶,感谢阮老师

2016年12月22日 21:50

| #

| 引用

成雨霖

说:

老师这内容太多了,眼睛都看花了。谢谢老师

2017年1月 2日 23:02

| #

| 引用

大盛

说:

好文,通俗易懂,受教了。

正如前辈们所说,再修补一下,澄清混淆之处,就完美了!

1.加密和认证的区别,公钥和私钥的使用;

2.只凭第8步,是否能确定是Bob发出的?为什么 ?

2017年1月 6日 11:32

| #

| 引用

魏海通

说:

引用大盛的发言:

好文,通俗易懂,受教了。

正如前辈们所说,再修补一下,澄清混淆之处,就完美了!

1.加密和认证的区别,公钥和私钥的使用;

2.只凭第8步,是否能确定是Bob发出的?为什么 ?

第二个问题,Bob用私钥加密,只要他的私钥没有泄漏就能证明是Bob发出来的。 不对称加密算法,公钥私钥成对出现决定的

2017年1月12日 16:29

| #

| 引用

魏海通

说:

引用xiongbo027的发言:

既然道格可以替换鲍勃的公钥,为什么不能故技重施,伪造CA的公钥,然后用自己的私钥伪造成CA的数字证书,从而达到欺骗苏珊的目的呢?

所以苏珊幸亏没碰到你啊,

2017年1月12日 16:44

| #

| 引用

魏海通

说:

引用阿凡提的发言:

文中第三步,苏珊给鲍勃写信,

鲍勃 怎么确定这封信就是来自苏珊的??

那就需要相互认证了。每个人都有CA证书且公布自己的公钥。

2017年1月13日 10:28

| #

| 引用

very_well2

说:

谈谈我的理解,其实上面的例子从3个方面保证了信息的安全,信息内容,发信人,收信人。

还是以信件为例,上面的信件来往案例把事情复杂化了,就以Susan给Bob单向发信为例,可以采取这样的方式,分别解决了如下3个问题:

(1)信息内容安全:保证Susan发的信只有Bob能看(发信:Bob公钥加密=》收信:Bob私钥解密,除了Bob其他人看不了)

(2)发信人安全:保证Bob收到的信确实是Susan发的(发信:信件本身使用Bob公钥加密=》收信:Bob私钥解密=》HASH函数得到摘要;数字签名:使用Susan私钥加密=》收到后使用Susan公钥解密=》得到摘要=》两个摘要对比)。核对一致后,Bob保证信一定是Susan发的,因为只有Susan的公钥才能解密数字签名。但Susan发信的时候不一定保证发给了Bob,她不知道用的Bob的公钥是不是正确的。

(3)收信人安全:保证Susan发信一定是给Bob发的,所以通过引入权威的证书机构来发布数字证书,相当于一个公证机构,把大家的公钥搜集到一起进行公证和公示,然后大家去获取这样的数字证书,他们说这个是Bob,那大家都信任这个就是Bob。

总结来说,数字签名就是保证发信人安全的(我签的我认账),数字证书是保证收信人安全的(权威机构说的,他是谁,大家都信)。

2017年1月17日 19:37

| #

| 引用

Curiosity

说:

引用御宅暴君的发言:

若要解密,所用到的 e 就必须满足 ed ≡ 1 (mod φ(n)) 公式了 。当然就几乎只有原来那个公钥 (e, n) 的 e 满足其条件,所以不是任何公钥都可以解的。

大哥,你才是理解错了吧。作为解密方,你只有d和n,你怎么可能有e来给你验证这个 ed ≡ 1 (mod φ(n)) 公式呢?

解密方做的只不过是求解公式:c^d ≡ m (mod φ(n)) 中的m罢了,(c为密文)。

解密方完全可以根据任意一个d`得出一个m`,但是这个m`是否与原来的m相同,只能通过第9步才能验证,进而验证这个d`确实是真正的加密方的公钥。

2017年1月20日 03:28

| #

| 引用

key

说:

CA的公钥是附在数字证书上面的吗

2017年1月22日 17:41

| #

| 引用

张文

说:

CA公钥是附在数字证书上面的吗?

2017年1月25日 21:31

| #

| 引用

何时, 枫叶红

说:

鲍勃给苏珊回信,那所有人, 不都可以看到信的内容了吗?

2017年2月 9日 10:30

| #

| 引用

王昊明

说:

最好不要用鲍勃、苏珊之类。就用A、B、C就好了

2017年2月13日 11:03

| #

| 引用

依力哈木·多来提

说:

努力创业

2017年2月15日 03:21

| #

| 引用

滕均

说:

开启支付功能

2017年2月22日 07:50

| #

| 引用

薛来桓

说:

1063672谢谢大哥

2017年2月26日 03:48

| #

| 引用

弗丁老爹

说:

引用玉沭林沣的发言:

那么在下载到本地后,如何避免被替换的问题呢?感觉跟道格用自己的公钥替换鲍勃的公钥一样啊,假若苏珊每次也是重新下载鲍勃的公钥岂不是同样可以避免公钥被替换的问题,那么还要数字证书干什么?

1、只是CA证书被替换不要紧,操作系统or浏览器会在一张表里去查这个证书是否存在,是不是CA的。如果不是就揭穿了骗局;

2、如果CA证书列表也被篡改了,说明你的操作系统or浏览器已经被攻破了,那神仙也救不了,没办法,只能等系统升级或者打补丁了。

2017年3月 7日 17:17

| #

| 引用

弗丁老爹

说:

引用何时, 枫叶红的发言:

鲍勃给苏珊回信,那所有人, 不都可以看到信的内容了吗?

对于HTTPS而言,鲍勃对每个人的加密算法都不一样,所以不存在这个问题,本文没有涉及到。

2017年3月 7日 17:19

| #

| 引用

落叶_为谁

说:

第9步中,既然是“苏珊再对信件本身使用Hash函数”,那么为什么图片上的“信件”下方还有一个“Digest”?是不是图画错了?

2017年3月 8日 10:32

| #

| 引用

落叶_为谁

说:

引用落叶_为谁的发言:

第9步中,既然是“苏珊再对信件本身使用Hash函数”,那么为什么图片上的“信件”下方还有一个“Digest”?是不是图画错了?

第9步中,既然是“苏珊再对信件本身使用Hash函数”,那么为什么图片上的“信件”下方还有一个“Signature”?是不是图画错了?【修正】

2017年3月 8日 10:33

| #

| 引用

阿萨的

说:

那不是每个拥有CA公钥的人都可以拿到鲍勃的公钥,都可以对数据进行解密?

2017年3月15日 15:17

| #

| 引用

钟品安

说:

好用,真好!直的点赞。

2017年3月16日 18:13

| #

| 引用

mokuten

说:

引用阿萨的的发言:

那不是每个拥有CA公钥的人都可以拿到鲍勃的公钥,都可以对数据进行解密?

都可以拿到鲍勃的公钥没错,但此公钥只是用来加密数据后发给鲍勃而已。每个人都可以发信息给鲍勃,这没问题。

2017年3月31日 23:57

| #

| 引用

胡成超

说:

看了这么多评论,一个最核心的问题还是没有解决。。。。。。。。

就是 用私钥对明文签名后,用不是对应的公钥去解密,到底是无法解密,还是会得到一段字符??????

2017年5月15日 19:50

| #

| 引用

张灿

说:

@御宅暴君:

goool其实有点钻牛角尖了,加密和解密的RSA实现应该是一样的。

2017年5月23日 13:13

| #

| 引用

王楠

说:

写得太好了,受教了...

2017年7月 5日 14:31

| #

| 引用

ly

说:

还有根证书没有讲到。

2017年7月20日 18:55

| #

| 引用

feibenren

说:

鲍勃分发的给三个人的公钥是一模一样的吗?

2017年7月29日 22:34

| #

| 引用

561

说:

简单,清晰,明了,这篇文章简直不能再棒!

2017年8月14日 16:05

| #

| 引用

WCD

说:

引用Xtrats的发言:

道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。因此,他就可以冒充鲍勃,写信给苏珊。

-----------

有鲍勃的公钥就可以冒充鲍勃?

道格自己不也有鲍勃的公钥么?“每人一把”。

可能是道格自己也有一套公钥-私钥,然后把自己的公钥和苏珊手里的鲍勃的公钥对换,然后再通过自己的私钥 和现在苏珊手里自己的公钥通信。所以才有了后来找认证中心对鲍勃的公钥认证,已确定自己手里的公钥是鲍勃的公钥

2017年8月14日 18:07

| #

| 引用

zhangliang

说:

通俗易懂,赞一个

2017年8月22日 11:19

| #

| 引用

hayabusa_l

说:

@Yonny:

确实是看加密和完整性的时候糊涂了,感谢看到你的评论,,,,,现在明白了

2017年8月30日 11:42

| #

| 引用

好的

说:

终于明白了,谢谢大神!大道至简!

2017年9月 6日 15:32

| #

| 引用

TommyWhite

说:

想问第5步,在Bob写完信息后应该会先用私钥加密信息再Hash运算得到摘要的吧???

2017年9月26日 13:56

| #

| 引用

TommyWhite

说:

引用TommyWhite的发言:

想问第5步,在Bob写完信息后应该会先用私钥加密信息再Hash运算得到摘要的吧???

还有第9步骤应该Susan首先要拿公钥对信件本身解密再使用Hash运算才将得到的结果与上一步得要的再要进行对比以确认这封信件是否有被修改?

2017年9月26日 13:59

| #

| 引用

CA

说:

那CA中心想耍流氓,用自己的(ca私钥——ca公钥)ca公钥通过侵入到苏珊的电脑 换掉道格的公钥(但他说还是道格的公钥,其实已经是ca公钥),然后冒充道格 去和苏珊通信,苏珊岂不把信息都发给了CA?

2017年10月19日 17:40

| #

| 引用

CA

说:

引用CA的发言:

那CA中心想耍流氓,用自己的(ca私钥——ca公钥)ca公钥通过侵入到苏珊的电脑 换掉道格的公钥(但他说还是道格的公钥,其实已经是ca公钥),然后冒充道格 去和苏珊通信,苏珊岂不把信息都发给了CA?

不是道格是鲍勃,名字记错了

2017年10月20日 09:39

| #

| 引用

张奇

说:

苏珊是需要公钥加密给鲍勃法信息的,鲍勃用私钥进行解密,但是鲍勃回信的时候采用数字签名的形式验证信是自己发的,但是鲍勃回信的内容需要加密么?这里只讲了对摘要进行加密,苏珊也是对摘要解密,可是信件本身需不需要加密解密并没有解释

2017年10月26日 11:30

| #

| 引用

峰中劲草

说:

引用张奇的发言:

苏珊是需要公钥加密给鲍勃法信息的,鲍勃用私钥进行解密,但是鲍勃回信的时候采用数字签名的形式验证信是自己发的,但是鲍勃回信的内容需要加密么?这里只讲了对摘要进行加密,苏珊也是对摘要解密,可是信件本身需不需要加密解密并没有解释

至于信件本身加密可以使用对称加密方法,信息发送之前,使用某种密钥交换算法共享密钥。(防止信件内容泄露)

2017年11月20日 14:30

| #

| 引用

lllqqq

说:

太棒了,清晰很多

2017年11月20日 14:50

| #

| 引用

xiami

说:

对goool的看法保留意见,用在线rsa加密工具做了测试,用私钥加密md5摘要,目前只有对应的公钥能解出原文,用其它公钥解密后并没有任何输出结果,可能是解密过程中遇到报错或其它不确定因素。

好奇的宝宝也可以去亲自试试,网址:http://web.chacuo.net/netrsakeypair

2017年11月21日 15:20

| #

| 引用

wenfei123505

说:

引用Michael.Z的发言:

还是有些模糊,需要慢慢理解。

有一个问题,公钥和私钥的算法是一样的吗?为什么私钥加密可以用公钥解密?

私钥和公钥是一对加密密钥和解密密钥 吧

2017年12月 8日 11:38

| #

| 引用

FutaoSmile丶

说:

证书中心的给出的公钥不是也可以被道格修改成自己在证书中心拿到的公钥吗

2017年12月12日 13:42

| #

| 引用

mimi

说:

引用Xtrats的发言:

道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。因此,他就可以冒充鲍勃,写信给苏珊。

-----------

有鲍勃的公钥就可以冒充鲍勃?

道格自己不也有鲍勃的公钥么?“每人一把”。

道格把鲍勃的公钥换成他自己的公钥了,是道格自己生成的公钥,而不是鲍勃给他的。

2017年12月22日 10:30

| #

| 引用

曲双如

说:

看完文章我觉得数字签名感觉没什么用啊。

修改信件内容的同时可以新生成数字签名呀,只要对的上就没问题。

2017年12月23日 14:21

| #

| 引用

生吃汉堡包

说:

我来说说第八步:

鲍勃给苏珊回信,如何回?总不能就直接在信道里传吧?他肯定要用苏珊的公钥加密,然后苏珊用她的私钥解密,得到明文本及数字签名。此时她只是收到明文本,然后她根据发来人信息判定是谁发来的,然后用相对应的公钥来验证,是否属实。

公钥解密数字签名,肯定会得到东西,Hash值只是摘要的一部分(这个博主好像没说),hash值是用来验证完整性的,摘要中还有认知部分(可辩别的部分)。如果相应公钥解密可认知,那么就可确定是谁发出来的。如果是伪造,解密出来几乎肯定(万恶的量子物理)是奇奇怪怪的东西。

PS:前提你的设备是安全的,不然说个毛。

2017年12月30日 19:23

| #

| 引用

盛世游侠

说:

@goool:

私钥公钥是成对使用的,一个私钥只对应一个公钥【已经由评论里的xiami验证】,所以您说使用任何人的公钥都可以解密鲍勃使用私钥加密的数字签名,这是不可能的;

2018年1月 3日 00:30

| #

| 引用

盛世游侠

说:

@徐朋:

不对,照你这个搞法,如果你想发私信给别人,你还得要求别人先有个非对称密钥对?想想现实中的情况,你这个假设就不成立。

典型的例如访问https://www.baidu.com/

你使用https协议访问百度的时候,百度没有要求你给它公钥,它用你的公钥加密网页发给你吧?

2018年1月 3日 00:47

| #

| 引用

lyn

说:

你没有发送方的私钥,你用自己的私钥重新签过的名,是无法通过发送方的公钥来验证的

引用曲双如的发言:

看完文章我觉得数字签名感觉没什么用啊。

修改信件内容的同时可以新生成数字签名呀,只要对的上就没问题。

2018年1月 7日 11:58

| #

| 引用

xiaoxionga

说:

引用Xtrats的发言:

道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。因此,他就可以冒充鲍勃,写信给苏珊。

-----------

有鲍勃的公钥就可以冒充鲍勃?

道格自己不也有鲍勃的公钥么?“每人一把”。

我认为是这样理解的:道格将自己的公钥换走了鲍勃的公钥后,苏珊写给鲍勃的信,其实是写给了道格.反过来,道格写给苏珊的信,苏珊也可以拿这个公钥解密,只不是她不知道这个信已经不是鲍勃写的了.

2018年1月 9日 14:12

| #

| 引用

Holla

说:

某个网站的CA公钥和它的证书我可以拿到,同时也就解密出这个网站的公钥了。如果这个网站正在给一个用户发一封邮件,我截取到这个邮件,再通过网站公钥解密不就得到传输的内容了??虽然客户端给服务器发送的没法解密。这怎么解释??

2018年1月10日 16:32

| #

| 引用

Holla

说:

引用曲双如的发言:

看完文章我觉得数字签名感觉没什么用啊。

修改信件内容的同时可以新生成数字签名呀,只要对的上就没问题。

修改完邮件生成签名时的服务器私钥你是没有的,只要不是一对秘钥,即便拿到修改后的信件内容也是没法用数字证书解密后的服务器公钥去解密信件内容的。

2018年1月10日 16:45

| #

| 引用

杨亚达

说:

“服务器用自己的私钥加密网页”

这里似乎不对,难道不是服务器用客户机的公匙加密网页,客户机再用私匙解密?

准确的说,是

①服务器发送证书;

②客户机解密并验证证书得到服务器公匙;

③客户机生成对称密匙,用服务器公匙加密,发送给服务器;

④服务器用私匙解密,得到对称密匙;

⑤(还有一些具体的过程省略...)

⑥服务器用对称密匙加密网页发送给客户机;

⑦客户机用对称密匙解密网页。

2018年1月12日 09:53

| #

| 引用

姚伟

说:

有一个问题,鲍勃给苏珊发信时,苏珊怎么证明收到的信中的数字证书是鲍勃的?

如果道格有能力去把苏珊电脑中保存的鲍勃的公钥替换成自己的公钥,

那么他也有能力把苏珊电脑种保存的鲍勃的数字证书替换成自己的数字证书。

然后道格用自己的私钥生成签名,在信件中附加自己的数字证书,发信给苏珊,苏珊还是会以为是鲍勃在给她发信。

2018年1月14日 00:26

| #

| 引用

张春星

说:

鲍勃在信件内容后面附加上数字签名后发给苏珊。

苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。

-------------------------------------

问题:这个地方不懂,信件内容不加密了?明文传输?

2018年1月18日 10:41

| #

| 引用

Lion

说:

前四步我是明白了,公钥加密,只能用私钥解密;

第五步说的:鲍勃给苏珊回信,决定采用"数字签名"。他写完后先用Hash函数,生成信件的摘要(digest)。

这里使用数字签名的意思是不是:内容没有加密,只是和内容一起发送了一个数字签名。苏珊通过公钥也可以生成一个鲍勃用私钥生成的一样的数字签名。这样就可以确认是不是鲍勃发出的信件了是吗?

2018年1月19日 14:54

| #

| 引用

Lion

说:

CA是不是就相当于一个公钥托管中心,这样苏珊电脑里存的鲍勃公钥就不会被人修改了。然后从CA请求下来公钥,从而解密数字证书得到鲍勃公钥,再用这个公钥进行解密,但是这个过程鲍勃发的信的内容还是没有加密的,只是确保数字签名解密正确是吗?

2018年1月19日 15:04

| #

| 引用

开发小菜鸟

说:

引用Lion的发言:

CA是不是就相当于一个公钥托管中心,这样苏珊电脑里存的鲍勃公钥就不会被人修改了。然后从CA请求下来公钥,从而解密数字证书得到鲍勃公钥,再用这个公钥进行解密,但是这个过程鲍勃发的信的内容还是没有加密的,只是确保数字签名解密正确是吗?

CA就是几个权威机构,是用来验证Bob的公钥就是Bob的,然后拿数字证书中解密出来的Bob公钥来解密Bob的数字签名验证信件的完整性,如果完整就可以解密信件,但是HTTPS应该楼主说的这些是握手过程,如果成功了着两个点的通信往来就用session Key来进行对称加解密,开销更小。

2018年1月21日 01:27

| #

| 引用

老路人甲

说:

@杨亚达: 正解,这里确实有问题.

2018年1月22日 13:51

| #

| 引用

uu

说:

感觉说的不明白啊

2018年1月22日 22:02

| #

| 引用

kingfire

说:

引用盛世游侠的发言:

@goool:

私钥公钥是成对使用的,一个私钥只对应一个公钥【已经由评论里的xiami验证】,所以您说使用任何人的公钥都可以解密鲍勃使用私钥加密的数字签名,这是不可能的;

为什么不可能?

用A的公钥去解密用B的私钥加密的密文的话,就是得到乱码而已呗。

只有一个私钥只对应一个公钥才能保证业务正确呗。

2018年1月27日 00:18

| #

| 引用

Chris投票好人

说:

感谢,也是目前为止我对数字签名理解的最清楚的一次

2018年1月27日 22:17

| #

| 引用

慢速快门_

说:

谢谢分享!不过我有个疑问:“用鲍勃的公钥解密 signature 得到 digest,从而证明信息是来自于鲍勃”这里还没有对比自己 hash 过得到的 digest,怎么知道是来自于鲍勃呢?我理解是解密任何一段 signature 都会得到所谓的 "digest",在对比之前是无法验证对方身份吧?

2018年2月14日 14:55

| #

| 引用

zhouzixi

说:

前面数字签名和数字证书的解释很清晰,但后面的使用过程貌似不是很正确

比如第17条,”受信认的根证书颁发机构“应该就是指CA吧,如果得到证书里的颁发机构写的不是列表里的,才是不受信任吧,而不是check要通信的server的公钥是不是在列表里

双方加密通信实际使用的,应该是用这个公私钥协商出来的对称密钥,这个过程怎么就没有了,客户端上来就给B发加密请求这里解释的比较模糊,实际还在握手阶段吧

如果如文中所述使用公私钥作为加密通信,只能实现单向加密,无法交换加密信息

2018年2月22日 16:33

| #

| 引用

昼伏君

说:

引用Yonny的发言:

如果你的身份证校验仪(CA)已经是假的了,那就啥都别说了,重装系统吧。

对哦!CA的作用是校验,即保证鲍勃的公钥的确是鲍勃的,这样杜绝了道格通过伪造鲍勃公钥,欺骗苏珊的可能。道格还想继续欺骗,就得连证书也伪造了,即此时“校验仪”也是假的。

2018年2月25日 07:54

| #

| 引用

兆一弟弟

说:

引用yehot的发言:

根本就没有帕蒂什么事啊,这就尴尬了

哈哈哈 对呀 我也发现了

2018年2月27日 11:01

| #

| 引用

赵文明

说:

@QuinnChen:

同意你的理解。

1、信息安全传输(A->B,A使用B的公钥加密,B使用B的私钥解密);

2、数字签名(A->B,A使用A的私钥加密,B使用A的公钥解密)。

2018年3月 1日 13:54

| #

| 引用

张健

说:

请问:苏三给鲍勃写信用的是公钥,鲍勃如何确认信就是苏三写的,既然3个人有公钥,苏三可以冒充其他任何一个人吧?不对称加密是:只要用我的公钥加密的文件,只有我自己的私钥能解。既然这么多人用我的公钥发文件给我,怎么核实发件人的真实性呢?

2018年3月 2日 11:14

| #

| 引用

hoho

说:

我不明白服务端不加数字签名为什么就会被人冒冲的可能,没有私钥怎样冒充或撰改得了呢

2018年3月18日 23:04

| #

| 引用

JackLin

说:

引用zhanlang的发言:

如果道格也去认证了自己的证书,并且用自己的公钥换了bob的公钥,每次通信的时候发自己的证书过去,结果就是一切验证都没有问题,但是苏珊却以为自己在跟bob通信,实际确实跟道格通信, 我的意思是如何辨别证书所有者跟你要通信的目标是同一个人呢?

因为证书上面又bob或者doge的信息,如果Susan认为bob的证书是doge的,那susan就没救了。就好像A拿了自己身份证给你看,你还把他当作是B。

2018年3月20日 01:31

| #

| 引用

JackLin

说:

同意goool的观点,原理应该是那样的。可能实现上面会又一些差别,可能用其他人的公钥来解用bob私钥加密的信息会无返回值甚至出错,但是这已经无关要紧。

2018年3月20日 01:46

| #

| 引用

得之吾幸

说:

请问 第9张图 在发送同样一个哈希算法后明文 对比,那如果这个被截获了,不就看到内容了么???

2018年3月21日 15:34

| #

| 引用

JackLin

说:

引用得之吾幸的发言:

请问 第9张图 在发送同样一个哈希算法后明文 对比,那如果这个被截获了,不就看到内容了么???

bob给susan发送的消息是用susan的公钥加密的,只有susan用她的私钥才能解开消息,然后用hash计算出摘要。

2018年4月16日 14:21

| #

| 引用

chen.amy2017

说:

引用QuinnChen的发言:

抱歉,我个人理解有误,公钥私钥其实是可以相互加解密的。

对于数据加密时,公钥加密,私钥解密

对于数据认证时,私钥签名,公钥验证(这时就是私钥加密,公钥解密)

这么理解就简单了:

既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密,所以可得出公钥负责加密,私钥负责解密;同理,既然是签名,那肯定是不希望有人冒充我发消息,只有我才能发布这个签名,所以可得出私钥负责签名,公钥负责验证。

2018年4月20日 11:33

| #

| 引用

diletrich

说:

1.鲍勃->苏珊的消息可能不安全,只要第三方偷偷换调苏珊的公钥,再用自己的私钥给苏珊发消息,那么苏珊将只收到假消息,而真鲍勃永远无法给她传递消息。

2.既然苏珊本地的公钥会不安全,那就再来一层,加上CA颁发的证书包裹着这个公钥,每次交流前再把公钥给你,但第三方就不会再假扮一个CA再弄个假证书里面放着假公钥?

3.关键就在这里,第三方这次真做不了假了,因为有 Online Certificate Status Protocol和 HTTP Public Key Pinnin这两个东西存在,浏览器会去检查CA的证书是否已被吊销,完毕。

相关链接: https://www.quora.com/How-does-a-web-browser-know-whether-a-certificate-is-authorized-and-safe?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa

2018年4月23日 17:29

| #

| 引用

111

说:

这个网页存在很大的漏洞,十分钟后我将攻破这个网页,植入病毒,做好准备。

2018年5月 4日 11:02

| #

| 引用

本分

说:

浏览器对证书及时的更新,即发给权威机构CA,CA用自己的私钥发现解不开假的证书,或者解得的是乱码,则反馈给浏览器,浏览器再警告给用户,证书被人通过隐蔽的方式偷换掉了,此证书是假的,请删除!

至此即可完成更新,当然如果你所坏人还会继续偷换证书,那我也没话说。

2018年5月 8日 20:25

| #

| 引用

xiao星

说:

感觉软件就是个循环,万一证书中心的私钥也被人篡改了咋办。。。。。是不是就是得有个机构去对这个证书中心去监督了。。。但是不就是循环了?或者去中心化?当下流行的区块链技术是不是可以解决这个问题?

2018年5月29日 16:35

| #

| 引用

伯格

说:

冒充鲍勃公钥是指http吗?ca是指https?

2018年6月 1日 15:15

| #

| 引用

QuietHeart

说:

直观的描述:

#+BEGIN_EXAMPLE

1. a发送信件给b。

b:这信件是不是a发的?

2. a告诉b指纹(公钥),再写信并且每个字都按下指纹(用私钥加密信件)发给b。

b:每个地方都验证指纹(加密解密),得到内容--太慢了(非对称加密效率低下)。

3. a告诉b指纹,直接写信,并且在整个信上按下一个大大的指纹(签名)发给b。

b:嗯,是a的指纹(由签名获取到摘要与自己计算的匹配),不错挺快--可是告诉我指纹的那人真的是a吗(第三方劫持篡改消息)?

4. a去大家都信任的国家机构注册(认证机构私钥加密)了自己的指纹,并且在信上按下大大的指纹(签名)后,连同身份证(证书)一起发给b。

b:先检查身份证,对,这个是国家机构发布的;再查看身份证内容(解密证书得到公钥和签名),恩,对信上按的是a的指纹(由签名获取到匹配摘要);恩,对,这封信是a发的(证书上其它信息描述具有这个公钥的人是a)。好了,这回我相信了(将信任基础建立在绝对安全的常识上,而非个人)。

#+END_EXAMPLE

2018年6月 1日 15:49

| #

| 引用

zijian

说:

@diletrich:

感谢,很有意义的答案,大多数人加密和认证弄混了,Bob只想证明内容是自己发出的,而加密过程由client对随机AES-Key用Server的Public Key加密后,Server端解出AES-Key来完成

2018年6月10日 16:34

| #

| 引用

mmz

说:

引用xiao星的发言:

感觉软件就是个循环,万一证书中心的私钥也被人篡改了咋办。。。。。是不是就是得有个机构去对这个证书中心去监督了。。。但是不就是循环了?或者去中心化?当下流行的区块链技术是不是可以解决这个问题?

2018年7月 5日 20:51

| #

| 引用

zhangyx

说:

对18步骤有一些疑问,因为SSL协议在握手阶段需要客户端和服务端协商出一个对话密钥用于后面的通讯,才算是握手成功,生成对话密钥的需要证书当中的公钥。如果证书不可信,把证书添加到可信列表中,那么浏览器是怎么怎么从证书当中获取公钥的,因为浏览器没有该证书的CA的公钥,按道理浏览器应该和服务端是连接不成功的,可现实是浏览器能正常和服务端通讯。

2018年7月26日 09:53

| #

| 引用

Jerry

说:

@Jason:

公钥能解私钥,私钥也能解公钥,所以用私钥直接加密原文是危险操作,因为只要有对方的公钥就能直接破解。之所以多了一层hash加密是因为hash一般是不可逆的,所以无法由摘要还原成原文

2018年8月12日 17:14

| #

| 引用

llj

说:

厉害!很容易懂

2018年8月15日 14:36

| #

| 引用

善用佳软

说:

你应该翻译成 宋江/李逵/李鬼…… :-)

2018年9月13日 16:56

| #

| 引用

Jack

说:

能用公钥解密就能证明对方身份

这里能详细说说公私钥加密解密原理吗,具体什么是"能解密",在不知道原文是否正确(是否被篡改)的情况下,怎么知道有没有成功解密。

2018年10月 1日 00:28

| #

| 引用

arong

说:

我们平时忽略证书验证也可以获取一个网站的内容,证明信的内容没有被加密,签名只是验证信的来源。

2018年10月30日 10:22

| #

| 引用

马克思

说:

6 -> 7 的过程鲍勃只是用自己的私钥加密 摘要 生成 数字签名 然后发送给苏珊

这个时候信件是透明的,别人有鲍勃的公钥也可以解开信件。

我觉得是不是应该将生成的 明文+数字签名 用苏珊的公钥加密在发送给苏珊,保证只有苏珊的私钥可以解开信件。

然后在验证其是否被篡改。

2018年10月30日 19:06

| #

| 引用

findmoon

说:

整个过程,如果客户端使用信任了不受信任的证书机构,则将导致所有的安全措施和加密行为没有任何效用

2018年11月13日 09:21

| #

| 引用

litbear

说:

第8步博主理解错了,应该是Bob把数字签名和原文一起使用Pat的公钥进行加密,Pat得到信息后使用Pat的私钥进行解密,得到原文和签名两部分,然后再对原文应用同样的hash函数得到摘要,首先确定原文完整性,其次使用Bob的公钥对摘要进行加密,然后与随原文来的数字签名进行比较,如果一致,则确定了保密性。

2018年11月21日 15:52

| #

| 引用

litbear

说:

引用litbear的发言:

第8步博主理解错了,应该是Bob把数字签名和原文一起使用Pat的公钥进行加密,Pat得到信息后使用Pat的私钥进行解密,得到原文和签名两部分,然后再对原文应用同样的hash函数得到摘要,首先确定原文完整性,其次使用Bob的公钥对摘要进行加密,然后与随原文来的数字签名进行比较,如果一致,则确定了保密性。

很抱歉,是我理解有误,发送者应使用私钥签名,同时接收者在得到发送者的签名后应用发送者的公钥进行验证,以保证信息是该公钥对应的发送者发送来的。

“公钥与私钥都能用来加密与解密,使用私钥加密往往与保证签名者真实性有关”

2018年11月21日 18:11

| #

| 引用

pingia

说:

我感觉各位还不如看英文文档来的靠谱。英文看不明白,自己用谷歌翻译好了。楼主中间可能漏掉一些没有翻译,导致有些地方模糊。

最后一段的谷歌翻译如下:

现在Bob的同事可以检查Bob的可信证书,以确保他的公钥真正属于他。事实上,Bob公司的任何人都不会接受Susan生成的证书不存在的签名。如果私钥被泄露或不再需要,这使Susan有权撤销签名。还有更广泛接受的证书颁发机构认证苏珊。

假设Bob向Pat发送签名文档。为了验证文档上的签名,Pat的软件首先使用Susan(证书颁发机构)的公钥来检查Bob证书上的签名。证书的成功解密证明了Susan创建了它。证书解密后,Pat的软件可以检查Bob是否与证书颁发机构保持良好的信誉,并且所有关于Bob身份的证书信息都没有被更改。

然后,Pat的软件从证书中获取Bob的公钥,并使用它来检查Bob的签名。如果Bob的公钥成功解密签名,那么Pat确保签名是使用Bob的私钥创建的,因为Susan已经认证了匹配的公钥。当然,如果签名有效,那么我们就知道Doug没有尝试更改签名内容。

2018年12月14日 17:05

| #

| 引用

您的大名

说:

无意中看到这个 感觉没什么问题 但看评论的时候发现了居然有这么多 所以也说一下

1 有人说第8 9 步有问题 不知道是怎么理解的 首先鲍勃回信的时候对信进行hash()然后在用私钥加密 也就是签名 只要苏珊使用公钥解密签名了就说明确实来自鲍勃 然后自己哈希后对比解密内容无误后就说明中途没有被修改 这里没有问题 当有可能是被别人看过的

所以1-10没有任何问题

问题就在于道格中途如果用自己的公钥替换了鲍勃的公钥 确认就有问题了 因为道格和苏珊有相同的鲍勃的公钥

所以问题应该从确保苏珊拿到的公钥就是不是鲍勃的公钥开始 也就是鲍勃发送给苏珊的从ca获取的证书

2 有人说可以用同样(替换苏珊公钥的方式)的方式替换证书中的鲍勃的公钥 确实可以替换 因为道格也可以拿到ca的公钥 然后查看证书内容 但是你只能查看 不能修改 因为证书是ca的私钥加密的 你自己修改然后用自己的私钥加密后 苏珊用ca的公钥是无法解密的 所以道格只有在修改了证书中鲍勃的公钥的同时 再把苏珊手中的ca的公钥也给改了 然后苏珊获取公钥的方式是浏览器中的证书列表和直接重新请求(比如根据证书中信息去请求)同时浏览器会

1>如果证书记载的网址和你浏览的不一样 浏览器会警告

2>如果证书颁发机构不是信任的也会警告

所以道格想修改ca公钥

1>让苏珊使用拥有假的证书列表(假的ca公钥)的浏览器 或者 通过其他方式修改掉浏览器列表中的ca证书公钥 但这属于木马病毒一类的 没办法解决

2>自己去ca获取一个证书 然后冒充是鲍勃的发给苏珊 这样苏珊确实拿到的是道格的公钥 然后认为是鲍勃的(也有人这么说)但证书对应的网址和当前访问的肯定不一样 浏览肯定会警告 所以除非道格自己就是一个浏览器信任ca结构 再没有别的办法去修改鲍勃的公钥

https大致流程

1 客户端 sayHello

2 服务器返回证书 请求ca

3-1 客户端验证证书内容有效性(过期时间 域名是否相同等)

3-2 验证证书的有效性 (是否被串改)通过本地根证书的CA公钥解密数字摘要 看是否匹配

3-3 如果数字签名验证通过 就可以使用服务器证书里面提供的公钥进行下一步通信

同时没有使用ca时 道格修改了苏珊保存鲍勃的公钥 完蛋

使用ca后 道格修改了鲍勃返回给苏珊的证书中的鲍勃的公钥 同时 修改了苏珊使用的比如浏览中内置的ca公钥后 也是完蛋

2018年12月20日 19:37

| #

| 引用

杨洋

说:

“鲍勃拿到数字证书以后,就可以放心了。以后再给苏珊写信,只要在签名的同时,再附上数字证书就行了”

道格偷了鲍勃的数字证书怎么办?

2018年12月27日 15:34

| #

| 引用

LXX

说:

有个疑问?使用数字签名的意义是什么?

为什么不直接使用私钥加密数据然后返给别人?

为什么要使用私钥加密摘要发送给别人?

别人解密了摘要就判断是本人了,那解密了使用私钥加密的数据不也能判断是本人吗?

还有防篡改,

如果我使用私钥加密数据然后返回,别人没拿到私钥怎么篡改?如果能篡改,我觉得数字摘要那个签名也能篡改。

2019年2月14日 18:55

| #

| 引用

LXX

说:

有个疑问?使用数字签名的意义是什么?

为什么不直接使用私钥加密数据然后返给别人?

为什么要使用私钥加密摘要发送给别人?

别人解密了摘要就判断是本人了,那解密了使用私钥加密的数据不也能判断是本人吗?

还有防篡改,

如果我使用私钥加密数据然后返回,别人没拿到私钥怎么篡改?如果能篡改,我觉得数字摘要那个签名也能篡改。

2019年2月15日 10:08

| #

| 引用

来了来了

说:

引用杨洋的发言:

“鲍勃拿到数字证书以后,就可以放心了。以后再给苏珊写信,只要在签名的同时,再附上数字证书就行了”

道格偷了鲍勃的数字证书怎么办?

不怕的,通过数字证书获得的是真实的公钥,真实的公钥只能解密真实的数字签名,别人无法获得私钥,只能生成假的数字签名

2019年3月 5日 17:12

| #

| 引用

xiaoheiyohehe

说:

引用LXX的发言:

有个疑问?使用数字签名的意义是什么?

为什么不直接使用私钥加密数据然后返给别人?

为什么要使用私钥加密摘要发送给别人?

别人解密了摘要就判断是本人了,那解密了使用私钥加密的数据不也能判断是本人吗?

还有防篡改,

如果我使用私钥加密数据然后返回,别人没拿到私钥怎么篡改?如果能篡改,我觉得数字摘要那个签名也能篡改。

* 数字签名中的信息摘要是用来证明你看到的确实是我想发给你看的. (没有人为篡改或传输过程中造成的位信息错误, 假如有人故意在加密文本上给你篡改数据, 你解密后是一堆乱码, 那你又怎么知道对方是不是一开始就打算发一堆乱码给你).

* 数字签名中的公钥私钥是为了验证你的身份.

* 关系总结: 数字签名=公钥私钥加密算法+信息摘要验证算法, 信息摘要--(私钥加密)--->数字签名. 数字签名验证正确就可以判断, 这个消息确实是我写的, 并且文本正确; 如果验证错误, 要么是拿错了钥匙, 要么是文本内容出错.

2019年3月19日 11:24

| #

| 引用

Veeupup

说:

那阮大大为什么自己不使用https呢?(坏笑)

2019年3月29日 15:43

| #

| 引用

alibaba

说:

文章关于 HTTPS的解释是错误的:

如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息

2019年4月25日 11:49

| #

| 引用

alibaba

说:

文章关于 HTTPS的解释是错误的:

如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息

2019年4月25日 12:22

| #

| 引用

xwine

说:

@LXX:

数字签名是为了保证数据完整性。通过它可以判断数据是否被篡改

私钥加密完的数据所有知道公钥的都可以解密,这样不安全。

私钥加密的作用是为了确认身份,用对应的公钥解密概要,则证明概要来自谁,起到签名的作用

解密摘要和你说的==‘解密了使用私钥加密的数据’ 这个数据一般就是摘要

使用私钥加密的数据是没法被篡改的,但是可以被其他所有人用公钥解密

2019年5月31日 09:44

| #

| 引用

zm

说:

苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明"数字签名"是否真的是鲍勃签的。这个CA的公钥苏珊是从哪里获得的呢,是在数字证书里吗

2019年7月 3日 18:03

| #

| 引用

苏珊

说:

觉得第8步没有问题的, 考虑一下这个场景:

假如阿猫拦截了通讯过程, 将信件内容修改之后也Hash了摘要并用阿猫的私钥签名, 然后发给苏珊.

此时苏珊用鲍勃的公钥解密, 但是也得到一串已解密字符串即便是错误的,

如何证明这串字符串就是真正的解密文本呢?

还是非对称加解密算法本身提供了校验机制?如果是就可以证明发送者是鲍勃, 否则还需要第9步的帮助才能证明是不是鲍勃.

2019年7月 5日 10:55

| #

| 引用

陈南

说:

引用Xtrats的发言:

道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。因此,他就可以冒充鲍勃,写信给苏珊。

-----------

有鲍勃的公钥就可以冒充鲍勃?

道格自己不也有鲍勃的公钥么?“每人一把”。

我觉得这个意思是说 道格到苏珊得电脑上把保存得鲍勃得公钥换成了自己得公钥吧。 既用自己得公钥伪装成鲍勃得公钥

2019年8月31日 05:05

| #

| 引用

Slayer

说:

"苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明"数字签名"是否真的是鲍勃签的。"

这里的CA的公钥应该只是来解密“签名值”,然后计算数字证书的hash值比对,鲍勃的公钥和其他信息没有用CA的私钥解密吧。

2019年9月19日 16:12

| #

| 引用

wcc

说:

引用苏珊的发言:

觉得第8步没有问题的, 考虑一下这个场景:

假如阿猫拦截了通讯过程, 将信件内容修改之后也Hash了摘要并用阿猫的私钥签名, 然后发给苏珊.

此时苏珊用鲍勃的公钥解密, 但是也得到一串已解密字符串即便是错误的,

如何证明这串字符串就是真正的解密文本呢?

还是非对称加解密算法本身提供了校验机制?如果是就可以证明发送者是鲍勃, 否则还需要第9步的帮助才能证明是不是鲍勃.

公钥是鲍勃的,解阿猫的签名出来的摘要跟发送信息中的摘要对不上的。

2019年12月31日 10:21

| #

| 引用

deping chen

说:

引用zm的发言:

苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明"数字签名"是否真的是鲍勃签的。这个CA的公钥苏珊是从哪里获得的呢,是在数字证书里吗

CA的公钥假设是操作系统安装的时候自带的。

2020年1月13日 17:01

| #

| 引用

lxr

说:

苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。

请问为什么这里能确认写信者是鲍勃?

2020年1月16日 11:43

| #

| 引用

test

说:

引用lxr的发言:

苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。

请问为什么这里能确认写信者是鲍勃?

摘要是用鲍勃的私钥加密的,只有鲍勃的公钥才能解开。而鲍勃的私钥只有鲍勃才有。

2020年1月17日 17:29

| #

| 引用

路人甲

说:

请问在生成证书摘要是怎么确定用的是哪种hash算法??@阮大神

2020年1月19日 00:07

| #

| 引用

大厨海森堡

说:

@Yonny:

是的,其实沿用RSA的论文的说法比较合适,用公钥加密明文的过程才是通常意义的加密,用私钥进行“加密”实际上是签名,这样所有人都可以通过公钥进行签名验证。

2020年3月 4日 20:05

| #

| 引用

SmallMuscle

说:

你好,如果是自签名的证书,如何安全的给客户端公钥呢?!

2020年3月21日 12:59

| #

| 引用

说:

关于第八步,没看到结果。。

什么是所谓的解不开?

解得开和解得对不是一回事吧。

是不是很多人误当成了现实中的锁,以为错误的钥匙一下子就能被试出来。还是这里的加密算法真是这样的,除非正确的密钥,否则算出来肯定是异常数据。

2020年4月 8日 02:14

| #

| 引用

飘扬

说:

11年的文章,讲解的很清楚。比知乎、简书上面写一大堆的文章解释得清楚的多。

感觉谷歌搜出来的东西,无论是中文还是英文,内容都简洁明了、言简意赅。

而百度... ...

好吧,从11年到20年,一直都有源源不断的评论,这就是传说中网红的力量嘛,太强了。

2020年4月11日 21:29

| #

| 引用

964

说:

很棒,受益匪浅

2020年4月21日 23:26

| #

| 引用

2924196224

说:

阮一峰老师您好,关于数字证书的整个过程,之前一直感觉仍然有一个小小的安全隐患,但仔细想想又没有,下面是这个过程,不知道理解的对不对:

1、苏珊在与鲍勃监理通信时,道格"截获了"鲍勃发送给苏珊的包含证书的回复,并用自己的证书替换鲍勃的证书

2、苏珊获取到"替换了证书"的鲍勃回复,但是此时没有可信任机构的公钥,于是去获取公钥,此时道格有两种方式试图欺骗苏珊:

(1) 道格"伪装"成可信任机构。无法伪装,因为可信任机构是在证书写明并且可信任机构是共知的。

(2) 道格"截获"并"伪造"苏珊和可信任机构的整个获取公钥通信。自己替换的证书也是该机构的,无法通过替换公钥的方式伪装,只能自己代替"苏珊"与可信任机构通信,同时自己"伪装"成可信任机构与真实的"苏珊"通信,中间篡改信息,但是由于自己替换的证书是该机构的,篡改信息就无法验证证书。

(3) 最终只剩一种可能,苏珊"信任了"不可信任机构的情况下,才有可能导致安全问题。

不知道这个理解对不对

2020年5月14日 11:26

| #

| 引用

2924196224

说:

关于私钥加密生成数字签名的疑问

如文中介绍,私钥加密的签名可以用公钥解密吗?也就是公钥可以解密私钥,私钥也可以解密公钥,但是公钥加密只能用私钥解密,这样理解对吗?

2020年5月14日 11:48

| #

| 引用

雷小伊

说:

私钥解密相比公共密钥的安全性哪个更高啊;/

2020年6月 6日 11:10

| #

| 引用

沁宁

说:

这个写的确实很清晰

2020年6月 8日 17:02

| #

| 引用

养乐多

说:

@febird:

你在浏览器上登录过邮箱吗?你没发现在你未登录之前你是可以访问到网站的?那么这些不需要登录的地址其实就网站就给你返回了数字证书,然后你的浏览器就把它存放到列表中了,只有等你登录了之后某些需要做校验的地址才会使用你的数字证书。

2020年8月14日 10:18

| #

| 引用

xjz

说:

中间有些疑惑不太懂,望懂的人解答。我中间拦截把数字证书拿到,既然公钥是公开的说明我也可以解开这个数字证书,我发送的信息用自己的私钥加密得到摘要,把证书替换成自己的证书,证书中的公钥是我的公钥,消息是自己的私钥加密的,发送给对方,对方得到摘要事我私钥加密得,证书中是我得公钥。这不也做到了偷天换日吗?那个细节我理解错误了望解答

2020年9月 3日 12:09

| #

| 引用

sukidayo

说:

第8条,应该不能说是公钥解密了私钥,而应该是公钥可以验证私钥签名,从而保证内容的真实性和完整性.而且对原文进行摘要计算之后,是对摘要进行私钥签名.

2020年9月 4日 18:24

| #

| 引用

leeorz

说:

引用xjz的发言:

中间有些疑惑不太懂,望懂的人解答。我中间拦截把数字证书拿到,既然公钥是公开的说明我也可以解开这个数字证书,我发送的信息用自己的私钥加密得到摘要,把证书替换成自己的证书,证书中的公钥是我的公钥,消息是自己的私钥加密的,发送给对方,对方得到摘要事我私钥加密得,证书中是我得公钥。这不也做到了偷天换日吗?那个细节我理解错误了望解答

这里的关键点是:证书是CA用私钥签发的,只能用CA的公钥解开。

你篡改了证书,用自己的私钥签发证书,信息接收方用CA的公钥没办法解开。

除非你想办法让对方用你的公钥去解密证书。

这一步一般都是浏览器完成的。阮老师文中也说明了,浏览器会内置一份"受信任的根证书颁发机构"列表,从这份列表去判断证书的签发机构。显然你不是这份列表里面的机构,除非你攻破了浏览器。

2020年9月 4日 21:58

| #

| 引用

今晚吃啥

说:

1.理解第8,9两步的关键"用公钥可以解开私钥加密的信息,反之亦成立。"。

2.如果使用公钥解密后拿到的报文摘要有误,有两种情况,

·确实是bob的私钥加密的摘要,但是报文在传输图中遭到了篡改。

·摘要不是bob的私钥加密的,用公钥解密出来的是错误的摘要。

所以通过公钥解开数字签名能得到正确的摘要,就能证明这个报文是bob发送的。

2020年9月17日 17:44

| #

| 引用

liziyang

说:

第九步骤有个问题没说清楚:所有拥有公钥的人都可以窃取并还原回bob给苏珊的回信。

所以鲍勃需要和苏珊商议一个只有他们彼此知道的基于本次会话的对称密钥来对信息进行加密。

2020年9月28日 17:26

| #

| 引用

king4e

说:

苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的

-------------------------------

数字签名只能证明是鲍勃发出的,而无法加密给苏珊的信吗?

也就是说任何人都可以用鲍勃的公钥(每人一把)看给苏珊的信吗?

2020年9月28日 22:19

| #

| 引用

Champion Fu

说:

我的理解是:中间人攻击分为两种类型:拦截和伪装,也就是'偷'和'骗'。

如果没有证书公证机构(CA)的话,RSA只能解决'偷'的问题(其实感觉如果能偷鲍勃的公钥,为什么不把苏珊的私钥一起偷了????)。数字签名是为了防止被'骗'。于是私人间使用的公钥也要加密。唯一公开的其实就是CA的公钥。其实这也不怎么安全,道格使用'偷'的办法拦截到'回信',把'回信'上面的证书换成自己的,这样还是把苏珊给'骗'了

2020年12月 3日 18:55

| #

| 引用

jiang

说:

引用玉沭林沣的发言:

那么在下载到本地后,如何避免被替换的问题呢?感觉跟道格用自己的公钥替换鲍勃的公钥一样啊,假若苏珊每次也是重新下载鲍勃的公钥岂不是同样可以避免公钥被替换的问题,那么还要数字证书干什么?

这里其实是可以保证安全的,CA的公钥放在本地后如果被替换则无法成功解密CA发的证书,因为CA发的证书是使用了CA的私钥进行加密了的,只有CA的公钥可以解密这个证书。如果使用被替换的公钥试图来解密CA发的证书则在解密阶段就会报错,此时你就已经知道你本地存的CA公钥不对了。而“道格用自己的公钥替换鲍勃的公钥”这种情况与替换CA证书完全不同,道格用自己的公钥替换鲍勃的公钥后,他其实不是用鲍勃给他的那把属于鲍勃的公钥来替换的(如果做这个替换等于没做,这里作者没有说明容易误导人以为道格是用鲍勃发给他的那把属于鲍勃的公钥来替换,其实不是),而是他自己生成了一对属于自己的公私钥,用新的这个属于他的公钥替换了存在苏珊电脑上原本属于鲍勃的公钥。此后,道格就用他自己新生成的私钥加密信息发送给苏珊,而苏珊用被替换了的公钥来解密,这个完全是行得通的,只是苏珊以为这个消息是鲍勃发给她的,他其实是道格发来的,她被骗了。所以就必需要有CA存在,因为存在本地的CA公钥被替换很容易,但是CA的私钥一定是安全的。别人无法获得CA的私钥对假证书进行加密得到伪证书来发行。不通过CA私钥加密的假证书使用真实的CA公钥解密会报错,同理CA私钥加密的真实证书使用被替换的假公钥解密时也会报错,所以只要CA的私钥安全,那么证书就可信。

2020年12月16日 16:54

| #

| 引用

mlshenhua

说:

最关键 还是 CA公钥的安全性 来源自 本地浏览器。

2021年1月10日 17:06

| #

| 引用

kingofswing

说:

引用blue gene的发言:

道格用自己的私钥加密发给苏珊的信件,苏珊收到信件后用道格的公钥自然能正常解密该信件,但是苏珊以为她收到的是鲍勃的信件,并且认为是用鲍勃的公钥来解密的,自然认为发信的就是鲍勃,所以道格就达到了伪造鲍勃与苏珊通讯的目的。

这个才是正确的理解,也就是道格他自己私下里生成了一对RSA秘钥,把这对秘钥里的公钥偷偷地替换了 susan电脑里 原来bob的公钥。如果翻译的时候把这层意思说明了,看客就理解清楚了。

2021年1月31日 22:39

| #

| 引用

你好,李焕英

说:

既然dog能替换susan的bob公钥,也可以替换susan的ca公钥吧?

dog也能拿自己的公钥到ca生成证书,然后偷偷把susan的bob ca公钥替换成dog的ca公钥,然后dog写信签名+证书,然后susan使用被替换的ca公钥解密,也可以达到伪造bob与Susan通讯的目的?

谁来解答一下,谢谢

2021年3月17日 16:39

| #

| 引用

amy

说:

引用你好,李焕英的发言:

既然dog能替换susan的bob公钥,也可以替换susan的ca公钥吧?

dog也能拿自己的公钥到ca生成证书,然后偷偷把susan的bob ca公钥替换成dog的ca公钥,然后dog写信签名+证书,然后susan使用被替换的ca公钥解密,也可以达到伪造bob与Susan通讯的目的?

谁来解答一下,谢谢

1. “dog也能拿自己的公钥到ca生成证书” 首先CA颁发证书是一个非常严谨的过程,可以参考这个回答:https://www.zhihu.com/question/22260090/answer/648910720

2. “然后偷偷把susan的bob ca公钥替换成dog的ca公钥” 不存在“bob ca公钥”、“dog的ca公钥”一说。一方面,CA是一种专门的第三方机构,并且国际的根CA机构数目非常有限,bob dog这样的个体是不会有“ca公钥”的;另一方面,CA都是一些可靠的大机构,它们的公钥在自己网站上提供下载,所以无法伪造;并且CA的公钥网上可以取得,浏览器中也有预存。

3. 如果dog把susan电脑里存的CA公钥换掉了怎么办:可以在当前网页中搜索网友“Yonny”对相似问题的回答

以上是我的理解

2021年3月22日 22:02

| #

| 引用

维努斯

说:

我有一个疑问,第八步苏珊解密之后也只是拿到了摘要,第九步的时候 苏珊又是怎么一下子拿到信息的本身呢?是不是可以这样理解,鲍勃在发送信息的时候明文,密文都发给了苏珊呢?

2021年4月26日 16:21

| #

| 引用

弹钢琴的杜甫

说:

从头到尾也没说数字签名的作用啊,按我来看,数据只要通过秘钥加密就可以,如果能解密成功就说明是可靠的,为啥要签名。

2021年4月26日 17:27

| #

| 引用

fish

说:

引用弹钢琴的杜甫的发言:

从头到尾也没说数字签名的作用啊,按我来看,数据只要通过秘钥加密就可以,如果能解密成功就说明是可靠的,为啥要签名。

对不起,没有数字签名你上的可能是钓鱼网站。钓鱼网站也可以随便给你一个公钥。 数字签名保证的是你得到的这个公钥是可信的

2021年5月17日 19:14

| #

| 引用

Bol

说:

服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。-- “使用自己的私钥加密”是不是错了

2021年6月20日 00:10

| #

| 引用

弹钢琴的杜甫

说:

引用fish的发言:

对不起,没有数字签名你上的可能是钓鱼网站。钓鱼网站也可以随便给你一个公钥。 数字签名保证的是你得到的这个公钥是可信的

有两点问题:

1:不使用https的时候,如果钓鱼网站能随便给一个公钥,那它也能伪造数字签名,这样签名也失去了意义

2:使用https的时候,公钥在数字证书里面,所以我认为只要证书能成功解析出来,那么这个网站是可信任的,此时再校验签名也没啥意义

2021年6月29日 16:49

| #

| 引用

hehe123450

说:

有一个很好的讲述,希望对大家有帮助:

中间人有可能把证书掉包吗?

假设有另一个网站B也拿到了CA机构认证的证书,它想劫持网站A的信息。于是它成为中间人拦截到了A传给浏览器的证书,然后替换成自己的证书,传给浏览器,之后浏览器就会错误地拿到B的证书里的公钥了,这确实会导致上文“中间人攻击”那里提到的漏洞?

其实这并不会发生,因为证书里包含了网站A的信息,包括域名,浏览器把证书里的域名与自己请求的域名比对一下就知道有没有被掉包了。

2021年7月14日 14:16

| #

| 引用

我是Bob

说:

引用goool的发言:

@mazhechao 原文的 5 6 7 8 9 是一个完整的签名场景,请在这个场景下重新考虑一遍。然后重新看一下 8 的表述:

实际上 Bob 的 “数字签名” 可以用任何人的公钥解密,得到一个 hash 值。如果不加上第 9 步(比对原文的 hash值)。这个第 8 步得不到任何有价值的信息。

我的数字签名是用我的私钥加密的,只有我的公钥能解密,如果你能解密,就说明你用的是我的公钥,就证明该信件一定是我发的,这就是签名的含义。

2021年8月28日 22:06

| #

| 引用

pengb

说:

想问一下,为什么bob的信不直接用私钥加密呢,为什么要生成摘要,这样不已经可以直接证明这封信是bob发出的,不需要生成签名去认证呢?

2021年9月 3日 10:22

| #

| 引用

接化发

说:

引用pengb的发言:

想问一下,为什么bob的信不直接用私钥加密呢,为什么要生成摘要,这样不已经可以直接证明这封信是bob发出的,不需要生成签名去认证呢?

数字签名有验证发信者身份和验证信是否被修改的作用。如果只用私钥加密,然后用公钥解密,只能验证信的来历,无法判断信是否被修改,需要对比两个摘要,当两个完全相同时,可以确定没有被修改。刚在知乎上看明白了https://zhuanlan.zhihu.com/p/29007210

2021年9月 8日 22:06

| #

| 引用

vincent

说:

看来争论比较大。我一直认为是这样:

用户连接过程也是用户权限认证过程,是采用非对称加密解密来认证,也确认接下来双方数据交换时的对称加密的方法A,双方都是用A加密,当然也能解密。数字签名应该是非对称加密认证过程发生的,你们说呢? 是非对称的,而且是握手时,后面就不用

2021年10月 3日 15:17

| #

| 引用

waley

说:

引用FutaoSmile丶的发言:

证书中心的给出的公钥不是也可以被道格修改成自己在证书中心拿到的公钥吗

CA机构你可以理解为派出所(有权威性),你去办理证书的时候 除了提供自己的公钥还要提供身份证原件。办理完成后,最终生成的证书里面包含:你的公钥+你的身份证号码。 这样一来,道格是不可能伪造bob的证书的:首先他拿不到bob的身份证,其次就算他拿到了bob的身份证,然后去自己的公钥去办理 也会失败。因为bob之前已经办理过了,不能重复再办理。 或者你说bob就直接用他自己的身份证去办理。但是这样得到的证书里面绑定的是bob的身份证号码。 我们的一切讨论的前提是苏珊是知道bob的身份证号码的。这样苏珊只要一看这个身份证号码就知道这个证书是不是bob的。

2022年4月20日 13:36

| #

| 引用

dd115942

说:

感谢作者的文章,每每有不清楚的内容,搜下关键字+阮一峰就能找到相关文章了。:)

2022年6月13日 14:32

| #

| 引用

山先生

说:

感谢博主和大家的评论,受益匪浅

2022年7月15日 11:15

| #

| 引用

LiuMeng

说:

CA 机构的公钥是全世界公开的,浏览器本身可以验证其真伪。

数字证书是服务器向 CA 发送自己的公钥和省份信息,让 CA 机构拿它的私钥对这些信息进行加密。

2022年8月17日 15:49

| #

| 引用

jc

说:

感谢博主和大家的评论,受益匪浅

有本《图解密码学》挺好的

2022年11月 8日 14:46

| #

| 引用

lwh

说:

原文是:

8 苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。

这样说得更合适:

8 苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。这可以证明,这个签名确实是鲍勃签发的。

2024年1月11日 07:45

| #

| 引用

Rhodi

说:

引用xiongbo027的发言:

既然道格可以替换鲍勃的公钥,为什么不能故技重施,伪造CA的公钥,然后用自己的私钥伪造成CA的数字证书,从而达到欺骗苏珊的目的呢?

CA并不能伪造。CA颁发机构就是系统开发商和其认证的次级颁发机构。微软苹果会在自己的浏览器/系统中保存自己的CA认证公钥,其他次级颁发机构的公钥也归根结底也是由上一级签名认证的,因此任何一个可信的CA证书都有一个认证链条,只要链条上任何一个出现问题,浏览器/系统就会提示错误。

比如华为从微软获取了CA颁发权,那么他的公钥就首先是被微软CA认证的。那么其他人找华为认证的证书,就会形成 微软-华为-自己 的证书链条。如果有人冒充华为公钥,那么这个冒充证书就无法通过微软CA认证,因为微软的公钥是保存在系统中的,是一定会被发现的。

这也是为什么不要使用盗版系统的原因。

2024年2月27日 11:42

| #

| 引用

Rhodi

说:

当然根证书可以手动添加,但是如果网页/软件要求你添加根证书,这个行为本身就很可疑,如果是组织内部,那这个根证书也是可以的,比如我们软件公司给企业内部部署WebApp,可以生成一个只用于内网的CA根证书,并且windows Server还提供批量添加根证书的功能,为的就是解决内网认证的问题。

如果是互联网上的服务,那么通过添加根证书来达成恶意目标,效率太低,而且本身这个行为就可疑。因此只有网银这种需要更严格的安全保证的网络服务,才会让你添加根证书来执行他们自己的安全方案。

2024年2月27日 11:47

| #

| 引用

Rhodi

说:

引用lwh的发言:

这样说得更合适:

8 苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。这可以证明,这个签名确实是鲍勃签发的。

其实你的表述也不准确。文中关于私钥加密的描述,其实是“签名”。签名保证的是“内容不被篡改”。而且原文的例子里,鲍勃的回信并不是加密的,而是明文传递的。只是说,即便明文传递,“签名”这个行为可以保证在传输过程中,信息不被篡改。

其实真实的传输是“加密和签名”结合。也就是鲍勃在签名摘要之后,将签名和信息一起用苏珊的公钥加密,在进行传输。这样整个信息包括签名都是密文。

2024年2月27日 11:51

| #

| 引用

Rhodi

说:

引用Lion的发言:

CA是不是就相当于一个公钥托管中心,这样苏珊电脑里存的鲍勃公钥就不会被人修改了。然后从CA请求下来公钥,从而解密数字证书得到鲍勃公钥,再用这个公钥进行解密,但是这个过程鲍勃发的信的内容还是没有加密的,只是确保数字签名解密正确是吗?

是的,原文的例子里,只是说明了签名的作用。签名可保证信息不被篡改。而加密则是保证信息不泄漏。

所以总结来说就是,公钥加密,私钥签名,加密不泄漏,签名不篡改。

2024年2月27日 11:55

| #

| 引用

Rhodi

说:

引用弹钢琴的杜甫的发言:

从头到尾也没说数字签名的作用啊,按我来看,数据只要通过秘钥加密就可以,如果能解密成功就说明是可靠的,为啥要签名。

签名的作用是信息不被篡改。原文中鲍勃甚至是明文传递了信息+签名。如果有人在送信过程中拆改信件内容,最后苏珊用公钥将签名解密,得到真实的摘要,在将收到的内容生成摘要,两个摘要对比就会发现内容已被篡改。

2024年2月27日 11:58

| #

| 引用

Rhodi

说:

引用lxr的发言:

苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。

请问为什么这里能确认写信者是鲍勃?

不是确定写信者是bob,而是确认信件内容不被篡改。

因为篡改者并不知道bob的私钥,因此它无法篡改签名。如果篡改者将签名去掉,那信件本身就不可信了。如果保留签名,那么苏珊会从签名中获得原始信息的摘要,进而与收到的信息摘要对比,就能得知信件的真伪。

2024年2月27日 12:00

| #

| 引用

我要发表看法

您的留言

(HTML标签部分可用)

您的大名:

«-必填

电子邮件:

«-必填,不公开

个人网址:

«-我信任你,不会填写广告链接

记住个人信息?

正在发表您的评论,请稍候

«- 点击按钮

Weibo |

Twitter |

GitHub

Email: [email protected]

10.什么是数字签名? - 知乎

10.什么是数字签名? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册签名数字签名《电子签名法》10.什么是数字签名?关注者9被浏览11,682关注问题​写回答​邀请回答​好问题​添加评论​分享​7 个回答默认排序放心签电子合同您放心的电子合同专家​ 关注数字签名是什么?数字签名是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。它是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术来实现的,用于鉴别数字信息的方法。这种电子式的签名还可进行技术验证,其验证的准确度是一般手工签名和图章的验证无法比拟的。数字签名是目前应用最普遍、技术最成熟、可操作性最强的一种电子签名技术。目前电子签名法中提到的签名,一般指的就是数字签名。数字签名的原理数字签名技术是利用算法(一般是非对称算法)通过hash函数对原文进行hash值私钥(仅个人所有)加密,生成数字签名,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的信息,然后对内容执行hash运算得到hash值,与解密得到的数字签名hash值比对。如果比对结果一致,则说明收到的信息是完整的,在传输过程中没有被篡修改的,否则信息一定被修改过。因此数字签名能够验证数据来源以及信息的保密性、完整性、真实性和不可否认性。数字签名的作用数字签名机制作为保障网络信息安全的手段之一,可以解决伪造、抵赖、冒充和篡改问题。数字签名的目的之一就是在网络环境中代替传统的手工签字与印章,有着重要作用。1、防冒充(伪造)。私有密钥只有签名者自己知道,其他人不能伪造签名。2、可鉴别身份。在数字签名中,客户的公钥是其身份的标志,当使用私钥签名时,如果接收方或验证方用其公钥进行验证并获通过,那么可以肯定,签名人就是拥有私钥的那个人,因为私钥只有签名人知道。3、防重放。数字签名过程中,对签名报文添加时间戳、流水号等技术,可以防止重放攻击。4、防篡改 (防破坏信息的完整性)。数字签名与原始文件和摘要形成一个混合的整体数据一起发送给接收者,一旦信息被篡改,接收者可通过计算摘要和验证签名来判断该文件无效,从而保证了文件的完整性。5、防抵赖。如前所述,数字签名可以鉴别身份,不可能冒充伪造。数字签名即可以作为身份认证的依据,也可以作为签名者签名操作的证据。在数字签名体制中,要求接收者返回一个自己签名的表示收到的报文,给对方或者第三方或者引入第三方机制。如此操作,双方均不可抵赖。6、机密性。手写签字的纸质文件是不具备保密性的,文件一旦丢失,内容信息极可能泄露。但数字签名可以加密要签名的消息,在网络传输中,可以将报文用接收方的公钥加密,以保证信息机密性。发布于 2019-11-09 10:18​赞同 1​​添加评论​分享​收藏​喜欢收起​微签-审批电子签章和电子合同管理​已认证账号​ 关注什么是数字签名呢?楼上对于数字签名的概念已经进行了科普,那么今天我们就来实际操作一下数字签名是如何实现的 。so easy !!!而且我们无需下载软件,通过微信小程序就能够体验数字签名啦首先第一步:打开微信 我们都有微信的对吧,首先拿出手机微信小程序搜索“微签”,点进“微签云”第二步:登录“微签”进入小程序后,使用手机验证码登录就可以立即体验。如果是第一次使用的小伙伴,要点击注册账号哦~第三步:上传文件或一张白纸完成登录后,就来到我们的工作台啦,此时会看到工作台会有很多功能,我们呢只需要点击“我要签章”然后导入文件,小程序端的导入接口可以通过文件、直接拍照和相册导入的形式,我们借助文件传输助手,选中需要签字的文件点击“确定”。文件或白纸导入后,再点击下方绿色框“签字/签章”第四步:电子签点击之后页面下方就会出现一系列操作样式,我们呢只需要需点击“签名”就可以啦点击之后呢,我们手机页面就会出现电子版签名面板,灵活的移动端面板任您随意挥洒~签好后点击“保存”,这样电子版签名就会自动跳转到文件上了,此时我们可以随意拖拽文本框调整签名的位置和大小,调整好之后点击“完成”电子版电子签名就完成啦!发布于 2021-08-12 10:28​赞同​​添加评论​分享​收藏​喜欢