参靠资料:私钥  百度百科

资料地址:https://baike.baidu.com/item/%E7%A7%81%E9%92%A5

私钥

私钥​​加密​​算法使用单个私钥来​​加密​​和​​解密​​数据。由于具有​​密钥​​的任意一方都可以使用该​​密钥​​​​解密​​数据,因此必须保护密钥不被未经​​授权​​的代理得到。私钥​​加密​​又称为对称​​加密​​,因为同一​​密钥​​既用于加密又用于​​解密​​。私钥​​加密​​算法非常快(与​​公钥算法​​相比),特别适用于对较大的数据流执行加密转换。通常,私钥算法(称为块密码)用于一次加密一个​​数据块​​。块密码(如 RC2、DES、TripleDES 和 Rijndael)通过​​加密​​将 n 字节的输 入块转换为加密字节的输出块。如果要加密或​​解密​​字节序列,必须逐块进行。由于 n 很小(对于 RC2、DES 和 TripleDES,n = 8 字 节;n = 16 [默认值];n = 24;对于 Rijndael,n = 32),因此必须对大于 n 的数据值一次​​加密​​一个块。

简介


与​​公钥算法​​一起使用的​​密钥​​对的秘密一半。


1、​​公钥​​和私钥成对出现;


2、公开的​​密钥​​叫​​公钥​​,只有自己知道的叫私钥;


3、用公钥​​加密​​的数据只有对应的私钥可以​​解密​​;


4、用私钥​​加密​​的数据只有对应的​​公钥​​可以​​解密​​;


5、如果可以用​​公钥​​​​解密​​,则必然是对应的私钥加的密;


6、如果可以用私钥​​解密​​,则必然是对应的​​公钥​​加的密 [1]  。


 


加密算法



基类库中提供的块密码类使用称作密码块链 (CBC) 的链模式,它使用一个​​密钥​​和一个初始化向量 (IV) 对数据执行​​加密​​转换。对于给定的私钥 k,一 个不使用初始化向量的简单块密码将把相同的明文输入块​​加密​​为同样的密文输出块。如果在明文流中有重复的块,那么在密文流中将存在重复的块。如果未经授权的 用户知道有关明文块的结构的任何信息,就可以使用这些信息​​解密​​已知的密文块并有可能发现您的​​密钥​​。若要克服这个问题,可将上一个块中的信息混合到​​加密​​下一 个块的过程中。这样,两个相同的明文块的输出就会不同。由于该技术使用上一个块​​加密​​下一个块,因此使用了一个 IV 来加密数据的第一个块。使用该系统, 未经授权的用户有可能知道的公共消息标头将无法用于对​​密钥​​进行反向工程。


可以危及用此类型密码​​加密​​的数据的一个方法是,对每个可能的​​密钥​​执行穷举搜索。根据用于执行​​加密​​的密钥大小,即使使用最快的计算机执行这种搜索,也极其耗 时,因此难以实施。使用较大的​​密钥​​大小将使​​解密​​更加困难。虽然从理论上说​​加密​​不会使对手无法检索加密的数据,但这确实极大增加了这样做的成本。如果执行彻 底搜索来检索只在几天内有意义的数据需要花费三个月的时间,那么穷举搜索的方法是不实用的。


私钥​​加密​​的缺点是它假定双方已就​​密钥​​和 IV 达成协议,并且互相传达了密钥和 IV 的值。并且,​​密钥​​必须对未经授权的用户保密。由于存在这些问题,私钥​​加密​​通常与​​公钥​​加密一起使用,来秘密地传达​​密钥​​和 IV 的值 [2]  。


公钥和私钥



公钥和私钥就是俗称的不对称加密方式,是从以前的对称加密(使用用户名与密码)方式的提高。用电子邮件的方式说明一下原理。 


使用公钥与私钥的目的就是实现安全的电子邮件,必须实现如下目的:       


1、我发送给你的内容必须加密,在邮件的传输过程中不能被别人看到。       


2、必须保证是我发送的邮件,不是别人冒充我的。 


要达到这样的目标必须发送邮件的两人都有公钥和私钥。 


公钥,就是给大家用的,你可以通过电子邮件发布,可以通过网站让别人下载,公钥其实是用来加密/验章用的。私钥,就是自己的,必须非常小心保存,最好加上 密码,私钥是用来解密/签章,首先就Key的所有权来说,私钥只有个人拥有。公钥与私钥的作用是:用公钥加密的内容只能用私钥解密,用私钥加密的内容只能 用公钥解密。 


比如说,我要给你发送一个加密的邮件。首先,我必须拥有你的公钥,你也必须拥有我的公钥。 


首先,我用你的公钥给这个邮件加密,这样就保证这个邮件不被别人看到,而且保证这个邮件在传送过程中没有被修改。你收到邮件后,用你的私钥就可以解密,就能看到内容。       


其次我用我的私钥给这个邮件加密,发送到你手里后,你可以用我的公钥解密。因为私钥只有我手里有,这样就保证了这个邮件是我发送的。 


当A->B资料时,A会使用B的公钥加密,这样才能确保只有B能解开,否则普罗大众都能解开加密的讯息,就是去了资料的保密性。验证方面则是使用签 验章的机制,A传资料给大家时,会以自己的私钥做签章,如此所有收到讯息的人都可以用A的公钥进行验章,便可确认讯息是由 A 发出来的了 [3]  。


 


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


数字签名


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


 


原理



数字签名的文件的完整性是很容易验证的(不需要​​骑缝章​​,骑缝签名,也不需要笔迹专家),而且数字签名具有​​不可抵赖性​​(不可否认性)。 [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函数​​对收到的​​原文​​产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。 [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.有哈希算法的数字签名与验证


哈希函数是一种“压缩函数”,利用哈希函数可以把任意长度的输入经由

​​​数字签名及其验证

散列函数算法变换成固定长度的输出,该输出的哈希值就是消息摘要,也称数字摘要。在正式的数字签名中,发送方首先对发送文件采用哈希算法,得到一个固定长度的​​消息摘要​​( Message Digest);再用自己的​​私钥​​( Secret key,SK)对​​消息摘要​​进行签名,形成发送方的数字签名。数字签名将作为队件和原文一起发送给接收方;接收方首先用发送方的​​公钥​​对数字签名进行解密得到发送方的​​数字摘要​​,然后用相同的​​哈希函数​​对原文进行哈希计算,得到一个新的消息摘要,最后将消息摘要与收到的​​消息摘要​​做比较。具体过程如图所示。 [7] 

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]: cn
  • CN=ij2ee, OU=mtk, O=mtk, L=suzhou, ST=jiangsu, C=cn 正确吗?
  • [否]: y
  • 输入<sfcs>的主密码
  • (如果和 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 3650


4、将证书导出到证书文件中 [7] 


在命令行中输入如下指令,peakCA和peakCALib任意起名字,******是输入的​​密码​​。 [7] 


keytool -export -alias peakCA -file peakCA.cer -keystore peakCALib -storepass ****** -rfc


5、授权jar文件,在命令行中输入如下指令 [7] 


jarsigner -keystore peakCALib myapplet.jar peakCA





office签名步骤


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: Unsigned


File date: 15:46 2008-5-23


Publisher: n/a


Description: n/a


Product: n/a


Version: n/a


File version: n/a





正常结果


数字签名正常的结果为: [7] 


C:\Documents and Settings\litiejun\??\che.exe:


Verified: Signed


Signing date: 16:28 2008-4-29


Publisher: n/a


Description: n/a


Product: n/a


Version: n/a


File version: n/a