imtoken钱包下载安卓官网|什么是数字签名

作者: imtoken钱包下载安卓官网
2024-03-08 03:17:43

数字签名_百度百科

_百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科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

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

字签名_数字签名简介_数字签名的优势以及应用场景-腾讯云开发者社区腾讯云开发者社区文档建议反馈控制台首页学习活动专区工具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 归

什么是数字签名 - 知乎

什么是数字签名 - 知乎切换模式写文章登录/注册什么是数字签名Brilliant 数字签名采用非对称密码体制(公钥密码体制),即发送者 使用 私钥加密数据 ,接收者 使用 对应的公钥 解密数据,它具有以下功能: ① 报文鉴别 : 用于 证明来源 , 接收者 可以 通过签名 确定 是哪个发送者 进行的签名 ; ② 防止抵赖 : 防止 发送者 否认签名 , 发送者 一旦签名 , 标记就打上了 , 无法抵赖 ; ③ 防止伪造 : 防止 接收者 伪造 发送者 的签名 。 数字签名验证过程:用户A使用数字签名向用户B传输文件图中用户A使用数字签名向用户B传输文件的过程:1、首先,文件经过单向散列函数的处理得到一份占128位的摘要。其中,文件和文件的摘要具有很强的对应关系,只要文件发生改动,经过单向散列函数处理后得到地摘要都会不一样。2、用户A使用自己的私钥对摘要进行加密,得到加密的摘要。3、用户A把文件、加密的摘要和公钥一起发给用户B。4、用户B收到A传过来的信息后,首先将其中的文件也采用单向散列函数处理得出一份128位摘要,然后使用A的公钥对收到的加密的摘要进行解密得到另一份128位摘要。5、把上一步得到的两份摘要进行比较,如果两份摘要相等,说明文件经过用户A签名之后,在传输的过程中没有被更改;若不相等,说明文件在传输过程中被更改了,或者说已经不是原来的文件了,此时用户A的签名失效。上面过程中,用户A使用私钥对由文件生成的128位摘要进行加密的过程称为数字签名的过程,得到的"加密的摘要",称为该文件的数据签名。上面例子传输过程中,用户A使用数字签名时给用户B发送了一个数据包,数据包中包含了A的公钥、文件和加密的摘要。那么问题来了:用户B如何确定收到的公钥是用户A发送的,而不是他人冒充用户A发送的呢?这时就需要有一个双方都信任的第三方证书颁发机构来协调。证书颁发机构,即认证中心CA (Certification Authority),将公钥与其对应的实体(人或机器)进行绑定(binding);即给公司或个人颁发证书。认证中心一般由政府出资建立。每个实体都有CA 发来的证书(certificate),里面有公钥及其拥有者的标识信息。此证书被 CA 进行了数字签名。任何用户都可从可信的地方获得认证中心 CA 的公钥,此公钥用来验证某个公钥是否为某个实体所拥有。经过CA认证后用户A使用数字签名向用户B传输文件用户A向证书颁发机构提交个人信息,申请证书。通过CA审核后,CA生成用户A的证书,证书中包括了A的公钥和私钥还有CA的数字签名。证书颁发机构CA本身拥有一对密钥,这是对CA所颁发的证书进行数字签名和保密的基础,绝不能泄露。用户A收到的证书中包括了带有CA数字签名的,专属A的公钥和私钥,CA的数字签名确保了别人不能伪造用户A的公钥和私钥。同时,用户B也必须信任给用户A颁发证书的第三方认证机构CA,即用户B拥有CA颁发的"CA公钥"。通信时,用户A向用户B发送的数据包中的"加密的摘要"上有用户A的数字签名,“A公钥” 上有认证机构CA的数字签名。用户B收到数据包之后,先要验证收到的 “A公钥” 是否来源合法:是认证机构颁发的带有CA签名的公钥吗?用户B并不信任用户A,但是用户B信任第三方认证机构CA。所以,用户B先使用证书颁发机构颁发的 "CA公钥" 验证收到的 "A公钥" 是否由同一认证机构颁发,是否在颁发之后更改过。上一步验证通过后,用户B便相信收到的 "A公钥" 确实来自真实的用户A。随后再使用 "A公钥" 对 "加密的摘要" 进行解密得到另一份128位摘要,再将收到信息中的文件也采用单向散列函数处理得出一份128位摘要,然后将得到的两份摘要进行对比操作,以判断文件是否更改。编辑于 2022-02-19 22:52数字签名数字证书数据加密​赞同 79​​15 条评论​分享​喜欢​收藏​申请

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​赞同​​添加评论​分享​收藏​喜欢

什么是数字签名? | DigiCert常见问题与解答

什么是数字签名? | DigiCert常见问题与解答

')

//check if OneTrust is allowing "Personalized Experience Cookies" (i.e., Adobe Target) to load

var adobeTargetOneTrustGroup = "PE";

function isAdobeTargetAllowed(adobeTargetOneTrustGroup) {

var OptanonConsentCookie = document.cookie.match(/OptanonConsent=.*;/);

return (OptanonConsentCookie && decodeURIComponent(OptanonConsentCookie[0]).includes(adobeTargetOneTrustGroup + ":1"));

}

if (isAdobeTargetAllowed(adobeTargetOneTrustGroup)) {

//Adobe Target prehiding snippet

;(function(win, doc, style, timeout) {

var STYLE_ID = 'at-body-style';

function getParent() {

return doc.getElementsByTagName('head')[0];

}

function addStyle(parent, id, def) {

if (!parent) {

return;

}

var style = doc.createElement('style');

style.id = id;

style.innerHTML = def;

parent.appendChild(style);

}

function removeStyle(parent, id) {

if (!parent) {

return;

}

var style = doc.getElementById(id);

if (!style) {

return;

}

parent.removeChild(style);

}

addStyle(getParent(), STYLE_ID, style);

setTimeout(function() {

removeStyle(getParent(), STYLE_ID);

}, timeout);

}(window, document, "body {opacity: 0 !important}", 3000));

}

数字信任解决方案

购买

洞见

合作伙伴

支持

Contact Us

Language

Contact us

返回

choose your language

英语

西班牙语

荷兰语

德语

法语

意大利语

中文(简体)

中文(繁体)

日语

韩语

葡萄牙语

返回

与支持代表线上交谈

与技术支持人员线上交谈 >

与验证人员线上交谈 >

与销售人员线上交谈 >

中国

+86 400 842 8401

向销售人员发送电子邮件 向支持人员发送电子邮件

RECOMMENDED LINKS

证书对比

DigiCert® Trust Lifecycle Manager

DigiCert® IoT Trust Manager

DigiCert® Document Trust Manager

DigiCert® Software Trust Manager

DigiCert® DNS Trust Manager

返回

大规模保护、更新、监测并控制互联设备

立即下载

数字信任:

企业IT、PKI与身份

DigiCert® Trust Lifecycle Manager

网站与服务器

DigiCert® CertCentral TLS/SSL Manager

DigiCert® DNS Trust Manager

代码与软件

DigiCert® Software Trust Manager

文档与签名

DigiCert® Document Trust Manager

IoT与互联设备

DigiCert® IoT Trust Manager

Matter计划IoT设备认证

适用于开发人员的DigiCert+Mocana

立即在一个平台中管理PKI与证书风险

预防停机

证书生命周期管理

私有PKI服务

集成与优势

立即在一个平台中管理PKI与证书风险

预防停机

证书生命周期管理

私有PKI服务

集成与优势

管理证书生命周期的更智能的方法

颁发与安装

检查与修复

续订与自动化

分配与委托

适用于CI/CD& DevOps的持续签名

确保代码完整性

实现软件签名工作流程的自动化

集中管理密钥与权限

简化并强制执行合规性

安全、灵活的全球签名

建立加密唯一身份

受信任的远程身份验证(RIV)

直观的Adobe和DocuSign集成

灵活的工作流程选项

从芯片注入到现场全过程受信任

医疗IoT

家居与消费者IoT

工业IoT

智慧城市IoT

运输IoT

不妥协的设备安全性

嵌入式信任

自动化的设备管理

集中控制

加快安全应用程序开发

不限定操作系统和处理器的开发

灵活的足迹

任何语言

发布活动

PKI领域30年来最重大的事项

 

观看网络研讨会

2022版TLS/SSL最佳实践指南

立即下载

2022版TLS/SSL最佳实践指南

立即下载

网络研讨会

管控设备、身份和证书扩散

立即观看

如何建立DevOps将实际采用的签名策略

获取指南

从全球角度管理文档签名与规则

立即下载

大规模保护、更新、监测并控制互联设备 

立即下载

大规模保护、更新、监测并控制互联设备

立即下载

大规模保护、更新、监测并控制互联设备

立即下载

返回

管理行业最佳证书的2022年最佳实践指南

了解更多信息

DigiCert TLS/SSL证书

Secure Site Pro TLS/SSL

购买

Secure Site TLS/SSL

购买

基本款TLS/SSL

购买

通配符TLS/SSL

购买

多域名TLS/SSL

购买

证书对比

对比

DigiCert Smart Seal

购买

Verified Mark Certificates

购买

欧盟合格证书(QTSP)

申请

PSD2证书

学习

代码签名证书

购买

客户端(S/MIME)证书

购买

文档签名证书

购买

比较最受信任的证书:

Secure Site Pro TLS/SSL证书

Secure Site TLS/SSL证书

基本款TLS/SSL证书

通配符TLS/SSL证书

多域名(UCC/SAN)TLS/SSL证书

强大的一体式网站安全

优先验证与支持

恶意软件扫描服务

漏洞与PCI扫描

持续的CT日志监测

DigiCert Smart Seal

行业领先的安全赔付金额

数字优先企业的选择

优先验证与支持

恶意软件扫描

DigiCert Smart Seal

领先的安全赔付金额

安全、灵活、必要的证书

屡获殊荣的支持服务

99%的浏览器兼容性

可在OA、EV中提供

DigiCert Basic Seal

灵活、功能强大且易于添加

适用于所有DigiCert OV证书

保护主域名

保护无限子域名

多域名。灵活的选项。

适用于所有DigiCert OV和EV证书

保护多达250个子域名

统一通信证书(UCC)

SAN(使用者可选名称)证书

当今最先进的信任签章

赢得客户信任

提高转化率

83%的消费者喜欢的功能

被消费者评为“最现代”

开始发送客户可信任的电子邮件

通过DMARC降低网络钓鱼风险

在客户的收件箱中实现可视化验证

提高电子邮件的开启率

符合欧盟标准、合格且受到信任

QWAC(合格Web身份验证证书)

eIDAS合格电子签名证书

eIDAS合格电子印章证书

瑞士ZertES证书

荷兰PKIoverheid证书

Netherlands PKIoverheid Certificates

前量子时期是做准备的时期

仅由Secure Site Pro证书提供

预览您的量子准备情况

有效期前和有效期后的混合证书

提供完整的文档

实现PSD2合规性

DigiCert是欧盟合格信任服务提供商(QTSP)

合格TLS/SSL证书

e-Seal和QSealC证书

进行代码签名并保护软件

保护您的IP

可用的OV或EV证书

可选时间戳和密钥库

支持HSM

确保业务安全的客户端证书

使用S/MIME加密电子邮件

启用双因素身份验证

管理对网络资产的访问

用于领先工作流程的受信任的文档签名

建立具有法律约束力的身份

在全球受信任

提供个人或组织证书

管理行业最佳证书的2022年最佳实践指南

立即下载

用于行业最佳证书的最新最佳实践

立即下载

获取已帮助数千家企业改进证书管理的清单

立即下载

获取已帮助数千家企业改进证书管理的清单

立即下载

获取2022版TLS/SSL最佳实践指南

立即下载

获取2022版TLS/SSL最佳实践指南

立即下载

了解DigiCert Smart Seal如何在整个客户之旅中获胜

查看数据

了解VMC可如何同时助力于IT、风险管理与市场营销

获取指南

唯一拥有全球影响力和本地专业知识的合格信任服务提供商

观看视频

请查看PQC工具包文档

查看文档

实现PSD2合规性所需的所有内容

立即下载

大规模管理代码签名、密钥和策略以提升信任

获取指南

网络研讨会

管控设备、身份和证书扩散

立即观看

从全球角度管理文档签名规则

立即下载

返回

网络研讨会

管控设备、身份和证书扩散

立即观看

洞察力

 

DigiCert 实验室

数字信任的 4 个要素

合规案例

零信任: 数字信任的关键

真实世界的数字信任

浏览这些页面,了解 DigiCert 如何帮助组织建立、管理和扩展数字信任,以解决实际问题。

博客

公关与新闻

活动

Ponemon 研究所报告

看看我们的全球后量子研究揭示了世界在为量子计算做准备的竞赛中的现状。

了解更多 >

返回

建立于信任的合作关系

立即观看

DigiCert合作伙伴网络

DigiCert 合作伙伴计划

DigiCert 合作伙伴门户网站

DigiCert技术合作伙伴计划

集成合作伙伴目录

行业和联盟领导

CI+ 伙伴关系

强大的合作伙伴关系在全球提供数字信任:

企业

中小企业

政府

技术联盟

联合体

Cloud Service Providers

建立于信任的合作关系

数字信任解决方案为Acmetek创造了新机会

立即观看

返回

联系我们的支持团队

 

美洲

1.877.438.8776(美国和加拿大免费)

1.520.477.3102

1.801.701.9601(西班牙语)

1.800.579.2848(仅限企业)

1.801.769.0749(仅限企业)

欧洲、中东、非洲

+44.203.788.7741

亚太、日本

+61.3.9674.5500

向销售人员发送电子邮件> 向支持人员发送电子邮件>

支持

支持

PKI支持

联系我们

资源

博客

文档

API文档

知识库

常见问答与解答

什么是SSL证书?

什么是SSL、TLS和HTTPS?

DV、OV和EV SSL证书之间有什么区别?

TLS/SSL如何发挥作用

工具

工具:SSL Install Diagnostic

工具:Certificate Utility for Windows

工具:CSR创建程序

工具:检查CSR

工具:SSL证书安装说明

联系我们的支持团队

技术支持聊天 >

验证聊天 >

销售聊天 >

中国

+86 400 842 8401

向销售人员发送电子邮件 向支持人员发送电子邮件

向销售人员发送电子邮件

向支持人员发送电子邮件

常见问题与解答

安全签名

什么是数字签名?

安全签名

什么是

数字签名?

证书管理

什么是证书生命周期管理?

如何管理数字证书?

证书生命周期中的五个阶段是什么?

什么是证书管理器?

谁管理组织中的TLS/SSL证书?

何时需要证书管理?

需要管理哪些类型的公用证书?

如何识别或定位为您的域名所颁发的公用TLS/SSL证书?

如何实现证书管理自动化?

证书透明度

什么是证书透明度?

证书透明度如何发挥作用?

CA如何提供CT日志证明?

日志、浏览器和CA对证书透明度(CT)的支持情况如何?

代码签名信任

什么是代码签名?

什么是代码签名证书?

有哪些不同类型的代码签名证书?

PKI在代码签名中发挥什么作用?

我们是否能实现代码签名的自动化?

什么是代码签名最佳实践?

什么是用于CI/CD的持续代码签名?

什么是用于DevSecOps的持续代码签名?

如何创建并实施有效的代码签名策略?

如何购买代码签名证书?

合规

什么是合规?

什么是证书颁发机构(CA)?

什么是公认标准委员会X9(ASC X9)和国际标准化组织(ISO)?

什么是证书颁发机构/浏览器论坛(CA/B论坛)?

什么是互联网工程任务组(IETF)?

什么是美国国家标准与技术研究所(NIST)?

什么是美国国家网络安全卓越中心(NCCoE)?

加密

什么是加密或加密算法?

什么是公钥加密?

什么是SSL加密?

什么是公钥加密算法?

什么是RSA加密?

什么是椭圆曲线加密?

什么是预共享密钥加密算法?

公钥/私钥对如何发挥作用?

什么是后量子加密?

域名系统

什么是DNS?

DNS查找如何发挥作用?

什么是DNS记录?

我的IP地址是什么?

递归DNS和权威DNS之间有什么区别?

什么是主DNS?

什么是动态DNS?

什么是DNS传播?

什么是TLD?

什么是TTL?

什么是TXT记录?

什么是MX记录?

如何刷新DNS缓存?

电子邮件信任

什么是Verified Mark Certificate(VMC)?

获取Verified Mark Certificate(VMC)需要哪些步骤?

什么是DMARC?

什么是BIMI,为什么它很重要?

什么是S/MIME或加密电子邮件?

什么是客户端证书?

身份与访问信任

什么是身份信任?

企业每天如何使用PKI?

什么是私有PKI与公共PKI?

有关安全性和信任的行业标准

什么是Open Connectivity Foundation(OCF)?

什么是PCI SSC?

AeroMAC和WiMax如何使用PKI来确保信任?

CableLabs如何使用PKI来确保信任?

公共接口Plus如何使用PKI来确保信任?

什么是SAE?

什么是美国国家紧急号码协会?

什么是USB Implementers Forum?

什么是WInnForum?

什么是ZigBee Alliance?

什么是Project CHIP?

IoT/设备信任

什么是物联网(IoT)?

什么是IoT设备身份生命周期管理?

什么是DigiCert IoT Trust Manager?

为什么IoT设备管理很重要?

与信任相关的市场趋势

公共信任与证书

什么是SSL?

什么是数字证书?

什么是扩展验证(EV)SSL证书?

什么是通配符证书?

什么是合格证书?

什么是Verified Mark Certificate(VMC)?

TLS/SSL证书的验证方法是什么?

TLS/SSL证书的有效期有多长?

什么是网站签章或信任标记?

什么是CT日志?

如何订购TLS/SSL证书?

如何安装TLS/SSL证书?

如何续订TLS/SSL证书?

什么是TLS/SSL握手?

客户端证书与服务器证书之间有什么区别?

DigiCert TLS/SSL证书是否与我的浏览器兼容?

什么是多域名(SAN)证书?

什么是DigiCert 30天退款保证?

教育机构使用哪种类型的SSL证书?

安全签名

什么是电子签名?

什么是数字签名?

电子签名和数字签名有什么区别?

数字签名的保障级别是什么?

我需要哪种类型的数字签名?

什么是电子印章或eSeal?

什么是电子时间戳?

如何验证我的身份以签署文档?

什么是eIDAS?

什么是合格电子签名?

哪些行业受益于安全签名?

什么是欧洲技术标准协会(ETSI)?

什么是信任服务提供商?

什么是云签名联盟?

什么是身份验证?

DigiCert是否能与Adobe配合使用?

SHA-2

为什么要迁移至SHA-2 TLS/SSL证书?

将SHA-1证书迁移至SHA-2哈希算法

SHA-2是否存在兼容性问题?

SHA-2常见问题与解答

信任与PKI

什么是数字信任?

什么是公共信任?

什么是托管PKI?

PKI证书有哪些类型?

PKI证书验证流程是什么?

为什么PKI很重要,它如何增强信任?

什么是数字证书,为什么数字证书很重要?

DigiCert数字证书是否适用于我的服务器?

什么是PKI即服务?

漏洞管理

什么是加密灵活性?

什么是Always on SSL(AOSSL)?

什么是漏洞评估扫描?

什么是PCI扫描服务?

什么是阻止列表检查?

什么是证书自动化?

什么是证书发现服务?

病毒、蠕虫和特洛伊木马程序之间的区别是什么?

什么是恶意软件、病毒、间谍软件和Cookie?

什么是HTTPS无处不在?

什么是数字签名?

数字签名使用公钥基础设施(PKI)技术将信任服务提供商(TSP)颁发的数字签名证书加密绑定到文档。数字签名验证签名者身份和文档完整性,提供更高级别的保障,即签名者的身份是真实的而且文档未被更改。对于需要更高安全级别的交易,数字签名是理想选择,而且数字签名在某些国家和地区是必不可少的,企业必须在这些国家和地区遵守相关法规,例如欧盟的eIDAS和瑞士的ZertES。在一些国家,某些形式的数字签名具有等同于手写签名的法律效力。

DigiCert® Document Trust Manager提供符合欧盟eIDAS和瑞士ZertES签名法以及世界各地其他签名法的安全、受信任的数字签名。了解有关国家/地区法规的更多信息

数字签名如何发挥作用?

数字签名建立在多个安全和治理层之上。签名通过在整个文档或消息中应用数学算法或哈希函数及时间戳而生成,之后使用公钥加密方法进行加密。此方法使用一对加密密钥,即公钥和私钥来进行加密和解密。签名者使用其私钥加密哈希,而阅读者使用签名者的公钥解密哈希。密钥的安全性与分发、对签名者身份的证明或验证、提供身份验证的第三方(证书颁发机构)以及签名的信任级别由公钥基础设施(PKI)所管理,公钥基础设施是一种广泛用于保护互联网上的交易和通信的方法。

为什么我需要用于数字签名的证书?

证书由受信任的服务提供商(TSP)和/或DigiCert等证书颁发机构颁发。此证书用于促进身份保障与加密,并提供两个实体之间的安全通信。证书由电子文档组成,此文档将签名者的数据及签名的验证链接到自然人或组织的明确身份。

用于数字签名的证书主要有两种类型:Adobe Approved Trust List (AATL)证书与合格证书。这两类证书之间的主要区别在于谁获得了颁发证书的认证。Adobe批准的受信任的服务提供商(TSP)颁发AATL证书,而只有合格信任服务提供商(QTSP)才能颁发合格证书。TSP不需要独立审计,也未被列入欧盟信任清单,而QTSP由国家确定的提供认证的监督机构所控制。QTSP还可以提供以下信任服务:

电子签名

电子印章

电子时间戳

电子注册递送服务

网站身份验证证书

最受信任的高保障度TLS/SSL、PKI、IoT 与签名解决方案的全球提供商。 

相关资源

公共关系/新闻

博客

媒体库

什么是PKI?

什么是SSL, TLS和HTTPS?

公司

简介

人才招聘

活动

领导团队

历史

联系我们

我的账户

知识库

文档

支持

开发人员

常见问题与解答

所有产品

更改日志

网站签章

解决方案

自动化解决方案

ServiceNow解决方案

加密解决方案

CI/CD解决方案

安全电子邮件解决方案

代码解决方案

设备解决方案

文档解决方案

CI-Plus解决方案

版权所有©2023 DigiCert,Inc.。保留所有权利。

法律知识库

WebTrust审核

使用条款

隐私政策

辅助功能

Cookie设置

[系统安全] 二十.PE数字签名之(上)什么是数字签名及Signtool签名工具详解_signtool签名作用 知乎-CSDN博客

>

[系统安全] 二十.PE数字签名之(上)什么是数字签名及Signtool签名工具详解_signtool签名作用 知乎-CSDN博客

[系统安全] 二十.PE数字签名之(上)什么是数字签名及Signtool签名工具详解

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

Eastmount

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

阅读量7k

收藏

19

点赞数

5

分类专栏:

系统安全与恶意代码分析

文章标签:

数字签名

PE文件

恶意代码分析

Signtool

签名分析

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

本文链接:https://blog.csdn.net/Eastmount/article/details/113744316

版权

系统安全与恶意代码分析

专栏收录该内容

57 篇文章

435 订阅

¥19.90

¥99.00

订阅专栏

您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。换专业确实挺难的,逆向分析也是块硬骨头,但我也试试,看看自己未来四年究竟能将它学到什么程度,漫漫长征路,偏向虎山行。享受过程,一起加油~

作者前文介绍了宏病毒相关知识,它仍然活跃于各个APT攻击样本中,具体内容包括宏病毒基础原理、防御措施、自发邮件及APT28样本分析。本文将详细介绍什么是数字签名,并采用Signtool工具对EXE文件进行签名,后续深入分析数字签名的格式及PE病毒内容。 这些基础性知识不仅和系统安全相关,同样与我们身边常用的软件、文档、操作系统紧密联系,希望这些知识对您有所帮助,更希望大家提高安全意识,安全保障任重道远。本文参考了参考文献中的文章,并结合自己的经验和实践进行撰写,也推荐大家阅读参考文献。

文章目录

一.PE文件的数字签名

1.概念普及

2.Github网站证书验证过程

二.阮一峰老师告诉大

了解本专栏

订阅专栏 解锁全文

优惠劵

Eastmount

关注

关注

5

点赞

19

收藏

觉得还不错?

一键收藏

打赏

知道了

4

评论

[系统安全] 二十.PE数字签名之(上)什么是数字签名及Signtool签名工具详解

作者前文介绍了宏病毒相关知识,它仍然活跃于各个APT攻击样本中,具体内容包括宏病毒基础原理、防御措施、自发邮件及APT28样本分析。本文将详细介绍什么是数字签名,并采用Signtool工具对EXE文件进行签名,后续深入分析数字签名的格式及PE病毒内容。这些基础性知识不仅和系统安全相关,同样与我们身边常用的软件、文档、操作系统紧密联系,希望这些知识对您有所帮助,更希望大家提高安全意识,安全保障任重道远。本文参考了参考文献中的文章,并结合自己的经验和实践进行撰写,也推荐大家阅读参考文献。

复制链接

扫一扫

专栏目录

订阅专栏

[网络安全自学篇] 五十七.PE文件逆向之什么是数字签名及Signtool签名工具详解(一)

杨秀璋的专栏

03-10

1万+

本系列虽然叫“网络安全自学篇”,但由于系统安全、软件安全与网络安全息息相关,作者同样会分享一些系统安全案例及基础工具用法,也是记录自己的成长史,希望大家喜欢,一起进步。前文讲解了i春秋YOU老师的小白渗透之路,并结合作者系列文章总结Web渗透技术点。本文将开启PE文件逆向解析相关内容,预计会连续分享六篇文章,第一篇告诉大家什么是数字签名,并采用Signtool工具对EXE文件进行签名,后续深入分析数字签名的格式及PE病毒内容。本文章适合初学者学习,希望对您有所帮助~

微软代码签名证书使用指南(SignTool)

sunfei123的博客

11-29

9720

Windows内核代码签名证书:https://www.wosign.com/Products/WoSign_Kernel_CodeSigning.htm

代码签名工具:https://www.wosign.com/marketing/2015_WoSign_sign_tools/

本使用指南演示如何使用 WoSign微软代码签名证书 来给Windows平台代码签名,签名工具为WDK自带的...

4 条评论

您还未登录,请先

登录

后发表或查看评论

57.PE文件逆向之什么是数字签名及Signtool签名工具详解(一)1

08-04

声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。前文学习:[网络

创建自签名证书, 对exe文件进行数字签名

Think88666的博客

07-23

5054

创建自签名证书,对exe文件进行数字签名

13.1 数字签名概述

最新发布

tang7mj的博客

01-06

825

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

windows驱动开发环境搭建以及helloworld

大草的博客

11-19

1582

windows驱动开发环境搭建以及helloworld

VS 签名时出错: 未在路径 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\signtool.exe 找到 SignTool.exe

热门推荐

我的分享,希望可以帮到你!

04-28

4万+

今天,在发布程序的时候,出现下面这错误

签名时出错: 未在路径 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\signtool.exe 找到 SignTool.exe(图1)。

想想,自己的程序勾选了签名(图2).,而且还重新安装了vs2015,应该就是重装的时候,没装上这个签名工具,那就重新装下呗。

安装步骤:

1.

2.

signtool.exe 对exe程序进行数字签名

证券指标的专栏

05-31

2万+

signtool.exe是微软的数字签名制作工具,只能制作windows平台的签名,

本使用指南演示如何使用

WoSign微软代码签名证书 来给Windows平台代码签名,签名工具为WDK自带的签名工具软件 SignTool.exe,此签名工具软件仅支持DOS命令符方式签名。如果您希望使用图形化界面签名您的代码,则建议使用老版本的签名工具

SignCode.exe,并请参考

Windows SDK SignTool.exe 微软文件签名工具的使用

NULL BLOG

12-12

1万+

签名工具 SignTool.exe

.NET Framework 4.5

其他版本

 

.NET Framework 4.NET Framework 3.5.NET Framework 2.0

0(共 1)对本文的评价是有帮助-评价此主题

签名工具是一个命令行工具,用于对文件进行数字签名,验证文件和时间戳文件中的签名。

通过signtool进行数字签名和验证签名

最快的脚步不是跨越,而是继续;最慢的步伐不是缓慢,而是徘徊!

08-10

1206

通过signtool进行数字签名和验证签名

使用signTool为文件进行签名

S无影者的博客

01-18

1498

签名步骤(均需要在cmd下执行)

1. 创建证书

makecert -sv my.pvk -r -n “CN=我的公司” my.cer

在弹出的界面设置密码,我设置为123456

2. 创建发行者证书

cert2spc my.cer my.spc

3. 导出pfx证书文件

pvk2pfx -pvk my.pvk -pi 123456 -spc my.spc -pfx my.pfx -f

123456为第一步设置的密码

4. 签名exe文件

signtool sign /f my.pfx /p

SignTool进行数字签名

03-12

介绍使用SignTool对安装包进行数字签名的步骤,配有截图及说明文字。

signtool 数字签名

08-07

signtool 数字签名;signtool 数字签名;signtool 数字签名;

SignTool(签名工具包)

12-14

签名工具 (SignTool.exe)

签名工具是一个命令行工具,用于对文件进行数字签名,验证文件或时间戳文件中的签名。

注意

Microsoft Windows NT、Windows Me、Windows 98 或 Windows 95 中不支持签名工具。

signtool [command] [options] [file_name | ...]

参数

参数 说明

command

命令标志之一,用于指定要对文件执行的操作。

options

用于修改命令标志的选项标志之一。

file_name

要进行签名的文件的路径。

签名工具支持下列命令。

命令 说明

catdb

在目录数据库中添加或移除目录文件。

sign

对文件进行数字签名。

signwizard

启动签名向导。只能为文件名命令行参数指定一个文件。

timestamp

时间戳文件。

verify

验证文件的数字签名。

下列选项应用于 catdb命令。

Catdb 选项 说明

/d

指定更新默认目录数据库。如果 /d和 /g 选项都未使用,则签名工具更新系统组件和驱动程序数据库。

/g GUID

指定更新由全局唯一标识符 (GUID) 标识的目录数据库。

/r

从目录数据库中移除指定的目录。如果未指定该选项,签名工具将向目录数据库添加指定的目录。

/u

指定为添加的目录文件自动生成唯一的名称。如有必要,将重命名目录文件,以避免与现有的目录文件发生冲突。如果未指定该选项,签名工具将重写与所添加的目录同名的任何现有目录。

注意

目录数据库用于自动查找目录文件。

下列选项适用于sign命令。

Sign 选项 说明

/a

自动选择最佳的签名证书。如果未指定该选项,签名工具仅查找一个有效的签名证书。

/c CertTemplateName

指定用于对证书进行签名的证书模板名(一个 Microsoft 扩展)。

/csp CSPName

指定包含私钥容器的加密服务提供程序 (CSP)。

/d Desc

指定已签名内容的说明。

/du URL

指定已签名内容的更详细说明的统一资源定位器 (URL)。

/f SignCertFile

指定文件中的签名证书。如果文件是个人信息交换 (PFX) 格式且受密码保护,则使用 /p 选项来指定密码。如果文件不包含私钥,则使用 /csp 和 /k 选项来分别指定 CSP 和私钥容器名。

/i IssuerName

指定签名证书的颁发者的名称。该值可以是整个颁发者名称的子字符串。

/k PrivKeyContainerName

指定私钥容器名。

/n SubjectName

指定签名证书的主体的名称。该值可以是整个主体名称的子字符串。

/p 密码

指定打开 PFX 文件时使用的密码。可以通过使用 /f 选项来指定 PFX 文件。

/r RootSubjectName

指定签名证书必须链接到的根证书的主体名称。该值可以是根证书的整个主题名称的子字符串。

/s StoreName

指定要在搜索证书时打开的存储区。如果未指定该选项,则打开“我的存储区”。

/sha1 哈希

指定签名证书的 SHA1 哈希。

/sm

指定使用一个计算机存储区,而不是使用用户存储区。

/t URL

指定时间戳服务器的 URL。如果该选项不存在,将不会对签名文件执行时间戳操作。如果时间戳操作失败,将生成一个警告。

/u 用法

指定签名证书中必须存在的增强型密钥用法 (EKU)。可以通过 OID 或字符串指定该用法的值。默认用法为“代码签名”(1.3.6.1.5.5.7.3.3)。

下列选项适用于 timestamp 命令。

Timestamp 选项 说明

/t URL

必选。指定时间戳服务器的 URL。要执行时间戳操作的文件必须在以前已经进行了签名。

下列选项适用于 verify 命令。

Sign 选项 说明

/a

指定可以使用所有方法来验证文件。首先,搜索目录数据库以确定是否在目录中对文件进行了签名。如果未在任何目录中对文件进行签名,签名工具将尝试验证文件的嵌入签名。验证可以或不能在目录中进行签名的文件时,建议使用该选项。可以或不能签名的文件示例包括 Windows 文件或驱动程序。

/ad

使用默认的目录数据库查找目录。

/as

使用系统组件(驱动程序)目录数据库查找目录。

/ag CatDBGUID

在由 GUID 标识的目录数据库中查找目录。

/c CatFile

通过名称指定目录文件。

/o Version

通过操作系统版本验证文件。version 参数的格式为 PlatformID:VerMajor.VerMinor.BuildNumber

/pa

指定使用默认的身份验证策略。如果未指定 /pa 选项,签名工具将使用 Windows 驱动程序验证策略。此选项不能与 catdb 选项一起使用。

/pg PolicyGUID

通过 GUID 指定验证策略。GUID 对应于验证策略的 ActionID。此选项不能与 catdb 选项一起使用。

/r RootSubjectName

指定签名证书必须链接到的根证书的主体名称。该值可以是根证书的整个主题名称的子字符串。

/tw

指定如果签名没有时间戳,则生成一个警告。

下列选项适用于所有签名工具命令。

全局选项 说明

/q

执行成功时不生成输出,执行失败时生成最少的输出。

/v

执行成功、执行失败或产生警告消息时生成详细输出。

备注

签名工具要求本地计算机上安装了 CAPICOM 2.0 可再发行程序。可以从 http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdkredist.htm 获得 CAPICOM 2.0 可再发行程序。

签名工具的 verify 命令确定签名证书是否由受信任的颁发机构颁发、是否已撤消了签名证书,以及签名证书对于特定策略是否有效(此项可选)。

执行成功时,签名工具返回退出代码 0;执行失败时,签名工具返回退出代码 1;执行完毕并给出警告时,签名证书返回退出代码 2。

signtool签名工具

08-18

用于VC、Delphi等开发的OCX控件、CAB压缩包等签名工具包

[网络安全自学篇] 六十一.PE文件逆向之数字签名详细解析及Signcode、PEView、010Editor、Asn1View等工具用法(二)

01-03

前文 “[网络安全自学篇] 五十七.PE文件逆向之什么是数字签名及Signtool签名工具详解(一)” 分享了数字签名的原理知识,这篇文章将详细解析数字签名,采用Signtool工具对EXE文件进行签名,接着利用Asn1View、PEVie...

windows 数字签名生成工具 SignTool

03-07

windows 数字签名生成工具 SignTool

windows应用数字签名工具.zip

07-22

windows应用数字签名工具:makecert.exe、cert2spc.exe、pvk2pfx.exe、signtool.exe。

64位驱动证书签名工具signtool.exe

09-27

SignTool.exe 驱动证书签名工具,64位windows操作系统下的驱动需要使用该工具进行签名。 MSCV-VSClass3.cer 交叉签名证书。11

signtool .cer交叉签名证书签名

10-21

signtool命令是一个用于在Windows操作系统上执行数字签名操作的工具。它可以用来签署文件、驱动程序和其他代码,以证明文件的来源和完整性。 cer交叉签名证书是一种由多个可信的证书颁发机构(CA)共同签名的证书。...

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

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

Eastmount

CSDN认证博客专家

CSDN认证企业博客

码龄12年

Python领域优质创作者

763

原创

1694

周排名

22

总排名

1241万+

访问

等级

9万+

积分

25万+

粉丝

2万+

获赞

1万+

评论

7万+

收藏

私信

关注

热门文章

word2vec词向量训练及中文文本相似度计算

125642

[python] 常用正则表达式爬取网页信息及分析HTML标签总结

119473

[GO语言基础] 一.为什么我要学习Golang以及GO语言入门普及

113410

[python爬虫] Selenium常见元素定位方法和操作的学习介绍

104662

[网络安全自学篇] 一.入门笔记之看雪Web安全学习及异或解密示例

103852

分类专栏

网络安全自学篇

付费

116篇

Python从零到壹

付费

64篇

Python图像处理及图像识别

付费

52篇

Python人工智能(TF+Keras)

付费

41篇

系统安全与恶意代码分析

付费

57篇

知识图谱、web数据挖掘及NLP

付费

70篇

娜璋带你读论文

37篇

编程生活

27篇

Python学习系列

105篇

Python人工智能

18篇

C# 系统应用知识

32篇

JAVA网站开发及实战

14篇

Python网络爬虫

41篇

当人工智能遇上安全

12篇

C# 网络编程知识

12篇

MFC应用及图像处理

19篇

Python疫情大数据分析

5篇

PHP基础知识及网站开发

12篇

公众号文章备份(未公开)

Android实例开发与学习

20篇

Python黑帽

3篇

GO语言

6篇

LLM+AIGC实战

1篇

文本挖掘和知识发现

3篇

安全攻防进阶篇

24篇

安全报告翻译

12篇

娜璋故事系列

4篇

HTML网站前端设计

17篇

数据库实战开发设计与优化

11篇

CentOS云服务端操作

7篇

Android

21篇

Windows黑客编程

1篇

数字图像处理

13篇

C#基础知识

5篇

Python数据挖掘课程

7篇

C#数据库知识

4篇

汇编知识

4篇

设计模式

4篇

机器学习

10篇

算法知识

7篇

论文翻译

1篇

C/C++基础知识

6篇

Python基础知识

9篇

Git基础

3篇

编程杂谈

16篇

软件项目管理

2篇

百度地图开发

5篇

学习排序

3篇

读书笔记

5篇

Java网站开发

14篇

面试工作

11篇

Python爬虫

31篇

LeetCode

15篇

数据库

23篇

HTML网页知识

9篇

个人网站搭建

12篇

黑科技

4篇

数字媒体

3篇

Echarts可视化

4篇

Office

5篇

渗透&攻防

14篇

SQL Server+Python

3篇

数据结构

9篇

课程复习

3篇

Web安全

4篇

最新评论

C# 系统应用之ListView实现简单图片浏览器

xq30397022:

写的特别详细,内容非常全面,感谢分享

[系统安全] 五十五.恶意软件分析 (7)IDA Python基础用法及CFG控制流图提取详解[上]

Eastmount:

最近忙着自己工作,比较忙哈,不好意思。同时也还在学习中,目前代码有些问题。

[系统安全] 五十五.恶意软件分析 (7)IDA Python基础用法及CFG控制流图提取详解[上]

m0_62733314:

博主,什么时间更新?写的太棒了

[Python人工智能] 二十二.基于大连理工情感词典的情感分析和情绪计算

Eastmount:

用这篇论文吧,这篇也是相关方法《融合情感词典的改进BiLSTM-CNN+Attention情感分类算法》出自《科学技术与工程》,谢谢引用,祝好~

[Python人工智能] 二十二.基于大连理工情感词典的情感分析和情绪计算

m0_56609603:

老师您好,想引用您第四部分自定义词典进行情感总分计算的方法,请问可以引用哪个论文呢

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

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

[网络安全提高篇] 一二五.恶意软件分析之PE文件解析和利用Python获取样本时间戳及溯源

[Python从零到壹] 七十六.图像识别及经典案例篇之OpenCV快速实现人脸检测及视频人脸动态识别

[Python人工智能] 四十二.命名实体识别 (3)基于Bert+BiLSTM-CRF的中文实体识别万字详解(异常解决中)

2024年15篇

2023年51篇

2022年61篇

2021年106篇

2020年132篇

2019年88篇

2018年53篇

2017年35篇

2016年48篇

2015年92篇

2014年57篇

2013年34篇

目录

目录

分类专栏

网络安全自学篇

付费

116篇

Python从零到壹

付费

64篇

Python图像处理及图像识别

付费

52篇

Python人工智能(TF+Keras)

付费

41篇

系统安全与恶意代码分析

付费

57篇

知识图谱、web数据挖掘及NLP

付费

70篇

娜璋带你读论文

37篇

编程生活

27篇

Python学习系列

105篇

Python人工智能

18篇

C# 系统应用知识

32篇

JAVA网站开发及实战

14篇

Python网络爬虫

41篇

当人工智能遇上安全

12篇

C# 网络编程知识

12篇

MFC应用及图像处理

19篇

Python疫情大数据分析

5篇

PHP基础知识及网站开发

12篇

公众号文章备份(未公开)

Android实例开发与学习

20篇

Python黑帽

3篇

GO语言

6篇

LLM+AIGC实战

1篇

文本挖掘和知识发现

3篇

安全攻防进阶篇

24篇

安全报告翻译

12篇

娜璋故事系列

4篇

HTML网站前端设计

17篇

数据库实战开发设计与优化

11篇

CentOS云服务端操作

7篇

Android

21篇

Windows黑客编程

1篇

数字图像处理

13篇

C#基础知识

5篇

Python数据挖掘课程

7篇

C#数据库知识

4篇

汇编知识

4篇

设计模式

4篇

机器学习

10篇

算法知识

7篇

论文翻译

1篇

C/C++基础知识

6篇

Python基础知识

9篇

Git基础

3篇

编程杂谈

16篇

软件项目管理

2篇

百度地图开发

5篇

学习排序

3篇

读书笔记

5篇

Java网站开发

14篇

面试工作

11篇

Python爬虫

31篇

LeetCode

15篇

数据库

23篇

HTML网页知识

9篇

个人网站搭建

12篇

黑科技

4篇

数字媒体

3篇

Echarts可视化

4篇

Office

5篇

渗透&攻防

14篇

SQL Server+Python

3篇

数据结构

9篇

课程复习

3篇

Web安全

4篇

目录

评论 4

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

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

规则

hope_wisdom 发出的红包

打赏作者

Eastmount

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

¥1

¥2

¥4

¥6

¥10

¥20

扫码支付:¥1

获取中

扫码支付

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

打赏作者

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

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

余额充值

windows数字签名与详解信息替换_sigthief.py-CSDN博客

>

windows数字签名与详解信息替换_sigthief.py-CSDN博客

windows数字签名与详解信息替换

最新推荐文章于 2023-07-10 09:23:04 发布

Shanfenglan7

最新推荐文章于 2023-07-10 09:23:04 发布

阅读量2.3k

收藏

7

点赞数

分类专栏:

其他

文章标签:

安全

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

本文链接:https://blog.csdn.net/qq_41874930/article/details/114401976

版权

其他

专栏收录该内容

30 篇文章

3 订阅

订阅专栏

文章目录

1.前言2. 数字签名修改方式2.1 自己给程序加签名2.2 盗取他程序的签名给自己的程序使用

3.修改详细信息与编译时候修改程序图标参考文章

1.前言

数字签名: 详解信息:

2. 数字签名修改方式

2.1 自己给程序加签名

工具:https://github.com/shanfenglan/test/tree/master/signtools 命令: 执行的时候请关闭杀毒软件

makecert -n "CN=Microsoft Windows" -r -sv Root.pvk Root.cer

cert2spc Root.cer Root.spc

pvk2pfx -pvk Root.pvk -pi 123 -spc Root.spc -pfx Root.pfx -f

certmgr.exe -add -c Root.cer -s root

certmgr.exe -add -c Root.cer -r localmachine -s root

signtool sign /f Root.pfx /p 123 1.exe

2.2 盗取他程序的签名给自己的程序使用

#证书克隆 python3 sigthief.py -i chrome.exe -t 1.exe -o 2.exe

#将文件的数字签名文件导出方便下次使用 python3 sigthief.py -i chrome.exe -r

#删除程序签名 将后缀名变成exe即可使用 python3 sigthief.py -i 2.exe -T

#使用导出的签名文件给exe签名 python3 sigthief.py -s chrome.exe_sig -t 2.exe

3.修改详细信息与编译时候修改程序图标

1.任意创建一个C#项目,并选择项目设置: 2.给小尾巴呆加数字签名 3.验收成果

参考文章

如何给软件加数字签名 Windows 证书签名的伪造 ioc图标在线转换 Visual Studio更改程序图标傻瓜式教程

优惠劵

Shanfenglan7

关注

关注

0

点赞

7

收藏

觉得还不错?

一键收藏

打赏

知道了

0

评论

windows数字签名与详解信息替换

文章目录1.前言2. 数字签名修改方式2.1 自己给程序加签名2.2 盗取他程序的签名给自己的程序使用3.修改详细信息与编译时候修改程序图标参考文章1.前言数字签名:详解信息:2. 数字签名修改方式2.1 自己给程序加签名工具:https://github.com/shanfenglan/test/tree/master/signtools命令:执行的时候请关闭杀毒软件makecert -n "CN=Microsoft Windows" -r -sv Root.pvk Root.cer

复制链接

扫一扫

专栏目录

实用cs、mimikatz免杀virscan

课嗨教育的专栏

04-03

1064

免杀准备工具:

Restorator

SigThief

VMProtect壳

一、免杀mimikatz

准备工具:mimikatz

第一步:替换资源,此步骤可以直接免杀360及电脑管家,但是无法过火绒。使用Restorator加载mimikatz后在拖入其他程序资源(此处需要注意,资源需要无毒,资源越好效果越佳。)

将原有的图标及版本资源删除后拖入附带资源的图标及版本。保存mimikatz。

简单过360,但是资源未过火绒,在此基础上我们给他添加一个壳即可,任意壳,我们添加vm壳。

dll数字签名克隆工具

04-02

可以将一个dll文件的数字签名证书克隆到自己的dll文件上面,做到免杀

参与评论

您还未登录,请先

登录

后发表或查看评论

伪造数字签名的工具,可以过卡巴

11-25

伪造一个数字签名,可以过卡巴主动防御。使用简单,就不介绍太多了

文件数字签名添加工具,数字签名复制工具

08-29

给文件添加数字签名,给一个文件添加数字签名,右键-属性 查看数字签名,

(把一个文件的数字签名,复制到另一个文件中)

数字签名更改程序

07-17

更改签名数字签名(又称公钥数字签名、电子签章)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。

数字签名,就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。

数字签名详解

06-29

数字签名的详解,ssl,rsa,公钥私钥等知识解读,清晰易懂,不懂来打我

数字签名克隆工具

12-06

数字签名克隆工具,具体怎么用打开软件自然就知道了,其他也没什么多说的,请勿用于非法用途,仅供研究

Python 使用sigthief 签发证书

CSDN

06-16

2622

Windows 系统中的一些非常重要文件通常会被添加数字签名,其目的是用来防止被篡改,能确保用户通过互联网下载时能确信此代码没有被非法篡改和来源可信,从而保护了代码的完整性、保护了用户不会被病毒、恶意代码和间谍软件所侵害,而一些杀毒软件也是通过检测程序中的证书来实现查杀判定的,本章将演示证书的签发与伪造。

后门构建工具Backdoor Factory

weixin_33896069的博客

05-17

274

2019独角兽企业重金招聘Python工程师标准>>>

...

工具推荐——Sign-Sacker

浪飒sec

07-10

774

Sign-Sacker(签名掠夺者)是一款强大的工具,旨在将其他官方exe文件中的数字签名复制到没有签名的软件中。通过将官方签名引入,您的软件将获得官方认证,提升用户信任度和软件安全性。为您的软件注入新生命!写入后的exe已将飞书的证书复制过来了,同理我们可以复制杀软和其他聊天软件的数字签名,对免杀有一定帮助,但不多。Sign-Sacker(签名掠夺者):一款数字签名复制器,可将其他官方exe中数字签名复制到没有签名的exe中。让您的软件在竞争激烈的市场中脱颖而出,赢得用户的信赖和好评。

数字签名克隆

12-06

数字签名克隆工具,可克隆DLL EXE文件的数字签名, 简单易懂!!

数字签名复制工具V1.0绿色版

07-27

数字签名复制工具是一款功能强大、便捷实用的数字签名克隆工具,此款软件能够将一个有数字签名的文件中的数字签名克隆到另一个没有数字签名的文字上。软件方便简单,可复制多重签名,快来下载体验吧。

功能介绍 软件可以把一个有数字签名的文件中的数字签名,克隆到另一个没有数字签名的文字上,而且速度非常的快。

数字签名是什么 数字签名(又称公钥数字签名、电子签章)是一种类似写在纸上的普通的物理签名,但是使用

公钥私钥加密解密数字证书数字签名详解.docx

05-26

详细介绍了区块链使用的不对称加密在数字证书数字签名的应用

Java数字签名算法DSA实例详解

08-27

主要介绍了Java数字签名算法DSA,结合实例形式分析了Java数字签名算法DSA具体定义与使用技巧,需要的朋友可以参考下

Android 安全加密:数字签名和数字证书详解

09-01

本文主要介绍Android 安全加密数字签名和数字证书的资料,这里整理详细的资料及数字签名和数字证书应用详解,有需要的小伙伴可以参考下

公钥私钥数字签名数字证书详解

01-20

公钥私钥数字签名数字证书详解

安全技术与相关安全工具

热门推荐

Shanfenglan's blog

08-19

29万+

漏洞练习平台

WebGoat漏洞练习平台:

https://github.com/WebGoat/WebGoat

webgoat-legacy漏洞练习平台:

https://github.com/WebGoat/WebGoat-Legacy

zvuldirll漏洞练习平台:

https://github.com/710leo/ZVulDrill

vulapps漏洞练习平台:

https://github.com/Medicean/VulApps

dvwa漏洞练习平台:

https://github.com/

frp的使用与配置

Shanfenglan's blog

10-10

28万+

ssh端口转发

一些命令参数

-C 压缩数据传输-f 后台登录用户名密码-N 不执行shell[与-g 合用] -g 允许打开的端口让远程主机访问

在一台公网 VPS 上编辑 sshd 配置,开启 ssh 转发功能,重启 ssh 服务,这是所有使用 ssh 隧道转发前的必备操作:

vim /etc/ssh/sshd_config

AllowTcpForwarding yes

GatewayPorts yes

TCPKeepAlive yes

PasswordAuthentication yes

#sy

linux shell常用命令简述与linux拒绝root登陆的解决方案

Shanfenglan's blog

08-24

27万+

附录

linux命令大全https://man.linuxde.net/

pwd

pwd #查看当前工作文件夹路径

nodejs

node.js安装后要执行的操作:ln -s /usr/local/myapp/nodejs/bin/npm /usr/local/bin/

gedit

gedit #打开一个文本框来编辑文本

setsid

setsid nohup python3 test.py & #代表这个脚本不会随着命令行等关闭而关闭,会一直在后台运行

ls

ls -lht #查看当前目录下.

数字签名和数字证书详解

最新发布

07-27

数字签名是一种用于验证和确保数字数据完整性、认证身份和防止篡改的技术。它基于公钥密码学的原理。数字签名使用私钥对数据进行加密生成签名,然后使用对应的公钥进行验证签名的有效性。

数字签名的过程包括以下步骤:

1. 生成密钥对:首先,需要生成一对密钥,包括一个私钥和一个公钥。私钥由签名者保留,公钥可以公开发布。

2. 数据签名:签名者使用私钥对要签名的数据进行加密生成签名。这个签名是唯一的,任何对数据进行篡改都会导致签名验证失败。

3. 签名验证:接收者使用签名者的公钥对接收到的数据和签名进行解密和验证。如果解密后的签名与解密后的数据匹配,说明数据完整且未被篡改。

数字证书是用于证明公钥的真实性和拥有者身份的电子文档。数字证书由权威机构(如数字证书颁发机构)颁发,其中包含公钥、证书持有者信息和颁发机构的数字签名。

数字证书的作用是确保公钥的合法性和信任,以及提供验证身份的方式。它可以用于安全通信、身份认证、数据完整性保护等多个领域。

在使用数字证书进行数字签名时,签名者的公钥会包含在数字证书中,接收者可以使用数字证书中的公钥对签名进行验证。数字证书的数字签名可以保证证书的真实性和可靠性。

总结来说,数字签名是一种通过加密和解密技术,用于验证数据完整性和身份认证的方法。而数字证书则是一种包含公钥、身份信息和数字签名的电子文档,用于证明公钥的真实性和拥有者身份。

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

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

Shanfenglan7

CSDN认证博客专家

CSDN认证企业博客

码龄6年

暂无认证

235

原创

12万+

周排名

128万+

总排名

2210万+

访问

等级

1万+

积分

620

粉丝

725

获赞

783

评论

2590

收藏

私信

关注

热门文章

cobalt strike中的一些小知识点的理解

355170

域前置技术的原理与CS上的实现

353166

cobalt strike各种beacon的详解(http/https/tcp)

351051

malleable_profile文件配置概述

350808

dig命令的常见用法详解

350271

分类专栏

其他

30篇

渗透测试基础知识

78篇

linux相关

14篇

权限维持

19篇

sql

9篇

web安全

23篇

密码破解

5篇

内网渗透

55篇

股票

1篇

java

18篇

安全建设

12篇

反序列化

3篇

应急响应

3篇

代码审计

1篇

云安全

3篇

文件上传

1篇

信息收集

5篇

cobalt strike相关

19篇

beacon

3篇

应用漏洞

18篇

XXE

1篇

php

5篇

提权

11篇

exchange

2篇

横向移动

9篇

红蓝对抗

6篇

免杀相关

11篇

编程相关

4篇

C2伪装

5篇

塔罗牌

命令执行

1篇

文件包含

1篇

xss

1篇

msf

4篇

邮件伪造

2篇

最新评论

使用powershell免杀上线CS的新方式---利用图片

Tofu707:

你这个问题是./image.jpg不存在, 放一个进去就行

sam文件获取与解密

月色白花:

最后那个哈希转明文的程序叫啥

/etc/shadow与/etc/passwd格式与shadow密码爆破

qq_44168575:

刑!很刑!

sam文件获取与解密

javelin266桑桑:

powershell没用过?

基于windows中委派的攻击思路(下)-基于资源的约束性委派

komomon‘s blog:

我测试是可以的

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

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

linux后门记录

centos搭建dns服务器

网络基础知识回顾

2022年25篇

2021年104篇

2020年108篇

目录

目录

分类专栏

其他

30篇

渗透测试基础知识

78篇

linux相关

14篇

权限维持

19篇

sql

9篇

web安全

23篇

密码破解

5篇

内网渗透

55篇

股票

1篇

java

18篇

安全建设

12篇

反序列化

3篇

应急响应

3篇

代码审计

1篇

云安全

3篇

文件上传

1篇

信息收集

5篇

cobalt strike相关

19篇

beacon

3篇

应用漏洞

18篇

XXE

1篇

php

5篇

提权

11篇

exchange

2篇

横向移动

9篇

红蓝对抗

6篇

免杀相关

11篇

编程相关

4篇

C2伪装

5篇

塔罗牌

命令执行

1篇

文件包含

1篇

xss

1篇

msf

4篇

邮件伪造

2篇

目录

评论

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

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

规则

hope_wisdom 发出的红包

打赏作者

Shanfenglan7

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

¥1

¥2

¥4

¥6

¥10

¥20

扫码支付:¥1

获取中

扫码支付

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

打赏作者

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

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

余额充值

数字签名 - Windows drivers | Microsoft Learn

数字签名 - Windows drivers | Microsoft Learn

跳转至主内容

此浏览器不再受支持。

请升级到 Microsoft Edge 以使用最新的功能、安全更新和技术支持。

下载 Microsoft Edge

有关 Internet Explorer 和 Microsoft Edge 的详细信息

目录

退出焦点模式

使用英语阅读

保存

目录

使用英语阅读

保存

打印

Twitter

LinkedIn

Facebook

电子邮件

目录

数字签名

项目

06/15/2023

1 个参与者

反馈

本文内容

数字签名基于 Microsoft 公钥基础结构技术,该技术基于 Microsoft Authenticode ,并结合受信任的证书颁发机构的基础结构 (CA) 。 Authenticode 基于行业标准,允许供应商或软件发布者使用 CA 颁发的代码签名数字证书对文件或文件集合 ((例如驱动程序包) )进行签名。

Windows 使用有效的数字签名来验证以下内容:

文件或文件集合已签名。

签名者受信任。

对签名者进行身份验证的证书颁发机构是受信任的。

文件集合在发布后未更改。

例如, 驱动程序包 的此签名过程涉及以下内容:

发布者从 CA 获取 X.509 数字证书 。 Authenticode 证书也称为 签名证书。 签名证书是一组标识发布者的数据,仅在 CA 验证发布者身份后,CA 才会颁发。 CA 可以是 Microsoft CA、第三方商业 CA 或企业 CA。

签名证书用于对驱动程序包的 目录文件 进行签名或在驱动程序文件中 嵌入签名 。 标识受信任发布者和受信任 CA 的证书安装在由 Windows 维护的 证书存储 中。

签名证书包括私钥和公钥,称为 密钥对。 私钥用于对 驱动程序包 的目录文件进行签名或在驱动程序文件中嵌入签名。 公钥用于验证驱动程序包的目录文件的签名或嵌入在驱动程序文件中的签名。

若要对目录文件进行签名或在文件中嵌入签名,签名过程首先会生成文件的加密哈希或 指纹。 然后,签名过程使用私钥加密文件指纹,并将指纹添加到文件。

签名过程还会添加有关发布者和颁发签名证书的 CA 的信息。 数字签名将添加到文件中的一部分,在生成文件指纹时不会处理该文件。

为了验证文件的数字签名,Windows 提取有关发布者和 CA 的信息,并使用公钥解密加密的文件指纹。

仅当满足以下条件时,Windows 才接受文件的完整性和发布者的真实性:

解密的指纹与文件的指纹匹配。

发布者的证书安装在 受信任的发布者证书存储中。

颁发发布者证书的 CA 的根证书安装在 受信任的根证书颁发机构证书存储中。

有关 即插即用 (PnP) 设备安装如何使用驱动程序包目录文件的数字签名的详细信息,请参阅数字签名和 PnP 设备安装。

有关 Microsoft 公钥基础结构技术、代码签名和数字签名的详细信息,请参阅 代码签名 和 代码签名最佳做法简介。

其他资源

加州消费者隐私法案 (CCPA) 禁用图标

你的隐私选择

主题

高对比度

早期版本

博客

参与

隐私

使用条款

商标

© Microsoft 2024

其他资源

本文内容

加州消费者隐私法案 (CCPA) 禁用图标

你的隐私选择

主题

高对比度

早期版本

博客

参与

隐私

使用条款

商标

© Microsoft 2024

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

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

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

上一篇:我的诗歌       

下一篇: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]

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

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