《安全套接字》PPT课件.ppt_第1页
《安全套接字》PPT课件.ppt_第2页
《安全套接字》PPT课件.ppt_第3页
《安全套接字》PPT课件.ppt_第4页
《安全套接字》PPT课件.ppt_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

网络编程的安全性,欧阳宏基,2,主要内容,1. 数字签名 公有密钥体制、私有密钥体制、 数字签名过程与算法、数字证书 与数字签名相关的Java API 2. SSL(安全套接字)与JSSE基本应用,数字签名,数字签名(Digital Signature):通过在数据单元上附加数据或者对数据进行秘密转换,防止他人对传送的数据进行破坏,从而使接收者可以确认数据的来源和完整性。 基于公钥密钥体制和私钥密钥体制都可以获得数字签名,绝大多数的数字签名是基于公钥密码体制的数字签名。 采用数字签名能够确保以下两点: (1)信息是由签名者发送的。 (2) 信息自签发后到接收者收到为止未曾做过任何修改。 一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。,3,私有密钥体制,私有密钥加密系统使用唯一的密钥(即私有密钥)进行加密和解密。该密钥必须为发送者和接收者所共享。即,若甲要向乙发一个加密邮件,甲需用一密钥将信息加密;乙收到邮件后,须用同样的密钥将信息解密。 私有密钥体制的缺点: (1) 一定要有一种安全的协议来保证密钥传送的可靠; (2) 有紧急的加密消息需要发送时,可能因接收方没有密钥而不能完成传送; (3) 若要将消息发给许多不同的团体,就需要与各个团体对应,维护许多不同的密钥。 为克服私有密钥加密系统的这些弱点,人们引进了公共密钥加密系统。,4,公有密钥体制,(1) 鲍勃有两把钥匙,一把公钥,一把私钥,5,(2) 鲍勃把公钥送给他的小伙伴,每人一把。,公开密钥密码体制是现代密码学的最重要的发明和进展。在公有密钥体制中有两种密钥:一种公钥,一种私钥,两者都可以用于加密和解密。 用公共密钥加密的信息只能用与之对应的私有密钥解开;而用私有密钥加密的信息,任何拥有与之对应的公共密钥的人均可解开(这一点也是数字签名的实现原理)。因此,私有密钥总为个人保管而无须外传,公共密钥则可授权给他人使用而不会破坏安全性,公共密钥和私有密钥之间永远存在着一对一的关系。,公钥密码体制,6,(3) 苏珊给鲍勃写信,写完后用鲍勃的公钥加密,达到保密的效果。,(4)鲍勃收信后,用私钥解密,看到信件内容。,数字签名实现过程,7,(1)鲍勃给苏珊回信,写完后用Hash函数,生成信件的摘要(digest)。,(2)鲍勃使用私钥,对这个摘要加密,生成“数字签名”(signature)。,数字签名实现过程,8,(3)鲍勃将这个签名,附在信件下面,一起发给苏珊。,(4)苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。,(5)苏珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。,数字证书,公钥是可以冒充的,那么如何该保证公钥的可靠性呢?公钥加密体系采取了一个办法,将公钥和公钥的主人信息联系在一起,再请一个大家都信得过有信誉的公正、权威机构确认,并加上这个权威机构的签名。这就形成了证书。,9,(1)证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成“数字证书“(Digital Certificate)。,数字证书,10,(2)鲍勃拿到数字证书以后,就可以放心了。以后再给苏珊写信,只要在签名的同时,再附上数字证书就行了。,(3)苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明“数字签名“是否真的是鲍勃签的。,数字证书的应用,“数字证书”的一个典型实例就是利用https协议来进行网页加密。,11,(1) 客户端向服务器发起加密请求。,(2)服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。,数字证书的应用,12,(3)客户端(浏览器)的“证书管理器“,有“受信任的根证书颁发机构“列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。,数字证书的应用,13,(4)如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告。,数字证书的应用,14,(5)如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告。,数字证书的应用,15,(6)如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。,数字签名算法,在数字签名方面,应用比较广泛的是利用RSA计算签名。该方法的过程如下: (1)要签名的报文作为一个散列函数的输入,产生一个定长的安全散列码(消息摘要)。 (2) 使用发方的私有密钥对这个消息摘要进行加密就形成签名。将报文和签名传送出去。 (3) 收方接受报文并根据报文产生一个消息摘要,同时使用发方的公开密钥对签名进行解密。 (4)如果计算得出的消息摘要和解密后的签名互相匹配,那么签名就是有效的。,16,数字签名算法,数字签名算法一般分为两个步骤:产生消息摘要和生成数字签名。 (1) 首先,系统根据一定的单向加密算法计算出消息的消息摘要。 使用单向散列函数的目的是将任意长度的消息压缩成为某一固定长度的消息摘要。单向散列函数又称为单向Hash函数,它不是加密算法,却在密码学中有着广泛的应用,与各种加密算法有着密切的关系。 它的模型为: h=H(M) 其中,M是待加工的消息,可以为任意长度;H为单向散列算法,h作为生成的消息摘要,具有固定的长度,并且和M的长度无关。 一个好的单向散列算法需要H具有以下的单向性质: 给定H和M,很容易计算h; 给定h和H,很难计算M,甚至得不到M的任何消息; 给定H,要找两个不同的M1和M2,使得H(M1)= H(M2)在计算上是不可行的。,17,数字签名算法,目前在密码学上已经设计出了大量的单向散列函数, 如:RabinHash方案、MerkleHash方案、NHash算法、MD2算法、MD4算法、MD5算法和SHA等。 通过考察发现,实际系统中用得最多的单向散列函数是消息摘要算法MD5(Message Digest5)和安全散列算法SHA(Security Hash Algorithm)。它们具有相似的原理和实现方法。,18,数字签名算法,(2) 在产生签名阶段,发送方将产生的消息摘要H(M)用发方的私有密钥进行加密。 在验证签名阶段,接收方也要进行以下的计算: (1) 由消息M利用单向散列函数产生消息摘要H(M); (2) 将收到的消息摘要H(M)用发送方公开密钥进行解密; (3) 两者进行比较,不一致则发出否决消息,否则接受信息。,19,相关的Java API-KeyPairGenerator,KeyPairGenerator 类用于生成公钥和私钥对。密钥对生成器是使用 getInstance 工厂方法(返回一个给定类的实例的静态方法)构造的。 特定算法的密钥对生成器可以创建能够与此算法一起使用的公钥/私钥对。它还可以将特定于算法的参数与每个生成的密钥关联。 有两种生成密钥对的方式:与算法无关的方式和特定于算法的方式。 与算法无关的初始化 :所有的密钥对生成器遵循密钥大小和随机源的概念。对于不同的算法,密钥大小的解释也不相同(例如,对于 DSA 算法,密钥大小对应于模的长度)。此 KeyPairGenerator 类有一个 initialize 方法,该方法带有两个通用的共享类型的参数。还有一个只带有 keysize 参数的方法,它使用以最高优先级安装的提供者的 SecureRandom 实现作为随机源。如果算法为 DSA 算法,密钥大小(模大小)为 512、768 或 1024。 特定于算法的初始化 :对于特定于算法的参数集合已存在的情况(例如,DSA 中所谓的公用参数),有两个 initialize 方法具有 AlgorithmParameterSpec 参数。其中一个方法还有一个 SecureRandom 参数,而另一个方法使用以最高优先级安装的提供者的 SecureRandom 实现作为随机源。,20,相关的Java API-KeyPair,类KeyPair是简单的密钥对(公钥和私钥)持有者。它没有增强任何安全性,另外初始化时应该将它当作 PrivateKey 对待。 只有两个方法: (1) public PublicKey getPublic() 返回对此密钥对的公钥组件的引用。 (2) public PrivateKey getPrivate() 返回对此密钥对的私钥组件的引用。,21,相关的Java API-Signature,Signature 类用来为应用程序提供数字签名算法功能。数字签名用于确保数字数据的验证和完整性。 使用 Signature 对象签名数据或验证签名包括以下三个阶段: (1) 初始化:使用 初始化验证签名的公钥(initVerify方法),或使用 初始化签署签名的私钥( initSign(PrivateKey) 和 initSign(PrivateKey, SecureRandom)。 (2) 更新 :根据初始化类型,更新要签名或验证的字节。 update 方法。 (3) 签署或验证所有更新字节的签名。sign 方法和 verify 方法。,22,SSL,SSL(Secure Socket Layer,安全套接层),为Netscape所研发,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。 SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。,23,SSL的基本功能,安全套接字是位于服务器上的一个加密系统,服务器与客户端进行安全通信,服务器端必须具备两样东西: 密钥对 :包括一个公钥和一个私钥,用来对通信数据进行加密和解密。 证书:用来进行身份确认。可以是自签证书或者颁发证书,自签证书用于私有的Web网络;颁发证书由认证中心(CA)认证,用于公有Web系统。 SSL提供三个功能: SSL服务器鉴别:允许客户端证实服务器的身份。具有SSL功能的浏览器具有一个由CA认证的证书列表,当浏览器与服务器进行商务活动时,浏览器就从服务器得到含有服务器公钥的证书。 加密SSL会话:所有通信数据都在发送发加密,接收方解密,并且能够鉴别数据是否在通信过程中被篡改。 SSL客户鉴别:允许服务器对客户身份进行鉴别。 这个信息对服务器来说非常重要,例如银行要把财务数据发给客户时,就必须检验接收者的身份。,24,SSL的认证过程,服务器端认证过程: (1) 客户端向服务器端发送一个开始信息,以便开始一个新的会话连接。 (2) 服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器会在响应开始信息时包含生成主密钥所需的信息。 (3) 客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器。 (4)服务器恢复该主密钥,并返回给客户一个用主密钥认证的消息,以此让客户认证服务器。 客户端认证过程: 经过认证的服务器发送一个提供给客户,客户则返回经过数字签名的回答信息和其公开密钥,从而向服务器提供认证。,25,生成CA证书,要从SSL证书中生成一个CA证书,在JDK命令行执行如下命令: keytool genkey keystore SSLKey(证书名称) keyalg rsa alias SSL,26,JSSE,JSSE(Java安全套接字扩展,Java Secure Soc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论