非对称加密算法的描述
计算机网络安全——非对称加密算法RSA和数字签名(二)
计算机⽹络安全——⾮对称加密算法RSA和数字签名(⼆)⼀、⾮对称加密算法基本概念在对称密钥系统中,两个参与者要共享同⼀个秘密密钥。
但怎样才能做到这⼀点呢?⼀种是事先约定,另⼀种是⽤信使来传送。
在⾼度⾃动化的⼤型计算机⽹络中,⽤信使来传送密钥显然是不合适的。
如果事先约定密钥,就会给密钥的管理和更换都带来了极⼤的不便。
当然我们可以使⽤复杂的密钥分发中⼼(KeyDistributionCenter,KDC)来解决该问题,但采⽤公钥密码体制可以⽐较容易地解决这个问题。
公钥密码体制的概念是由Stanford⼤学的研究⼈员Diffie与Hellman于1976年提出的。
公钥密码体制使⽤不同的加密密钥与解密密钥。
由于加密密钥不能⽤来解密,并且从加密密钥不能推导出解密密钥,因此加密密钥可以公开。
例如,参与者A可以在报纸上公布⾃⼰的加密密钥(即公钥),⽽解密密钥(即私钥)⾃⼰秘密保存。
任何参与都可以获得该公钥,并⽤来加密发送给参与者A的信息,⽽该信息只能由A解密。
可见采⽤公钥密码体制更易解决密钥分发的问题。
公钥密码体制有许多很好的特性,使得它不仅可以⽤于加密,还可以很⽅便地⽤于鉴别和数字签名。
但不幸的是,⽬前的公钥密码算法⽐对称密码算法要慢好⼏个数量级。
因此,对称密码被⽤于绝⼤部分加密,⽽公钥密码则通常⽤于会话密钥的建⽴。
例如,参与者A要发送⼤量秘密信息给B。
A⾸先选择⼀个⽤于加密数据本⾝(如采⽤DES算法)的密钥,由于该密钥仅⽤于该次会话,被称为会话密钥。
因为对称密钥由双⽅共享,A必须将该会话密钥通过秘密渠道告知B。
为此,A⽤B的RSA公钥加密该会话密钥后发送给B。
B收到加密的会话密钥后⽤⾃⼰的私钥解密后得到会话密钥。
此后,A和B之间就可以⽤该会话密钥加密通信的数据。
具体流程如下图:⼆、数字签名的基本概念在⽇常⽣活中,可以根据亲笔签名或印章来证明书信或⽂件的真实来源。
但在计算机⽹络中传送的⽂电⼜如何盖章呢?这就是数字签名(digitalsignature)所要解决的问题。
非对称密码算法
非对称密码算法实验1-3 非对称密码算法 RSA一.实验目的通过实际编程了解非对称密码算法RSA的加密和解密过程,加深对非对称密码算法的认识。
二.实验原理前面讲的对称密码算法要求通信双方通过交换密钥实现使用同一个密钥,这在密钥管理、发布和安全性方面存在很多问题,而非对称密码算法解决了这个问题。
非对称密码算法是指一个加密系统的加密密钥和解密密钥是不相同,或者说不能从其中一个推导出另一个。
在非对称密码算法的两个密钥中,一个是用于加密的密钥,它是可以公开的称为公钥;另一个是用于解密的密钥,是保密的,称为私钥。
非对称密码算法解决了对称密码体制中密钥管理的难题,并提供了对信息发送人的身份进行验证的手段,是现代密码学的最重要的发明和进展。
RSA密码体制是目前为止最为成功的非对称密码算法,是在1977年由Rivest、Shamir 和Adleman提出的第一个比较完善的非对称密码算法。
它的安全性是建立在“大数分解和素性检测”这个数论难题的基础上,即将两个大素数相乘在计算上容易实现,而将该乘积分解为两个大素数因子的计算量相当大。
虽然的安全性还未能得到理论证明,但经过20多年的密码分析和攻击,迄今仍然被实践证明是安全的。
RSA算法描述如下:1. 公钥选择两个互异的大素数p和q,n是二者的乘积,即n = pq,使Φ(n)=(p-1)(q-1),Φ(n)为欧拉函数。
随机选取正整数e,使其满足gcd(e, Φ(n))=1,即e和Φ(n)互质,则将(n,e)作为公钥。
2. 私钥求出正数d,使其满足e×d=1 modΦ(n),则将(n,d)作为私钥。
3. 加密算法对于明文M,由C=M e mod n ,得到密文C。
4.解密算法对于密文C,由M=C d mod n,得到明文M。
如果窃密者获得了n,e和密文C,为了破解密文他必须计算出私钥d,为此需要先分解n为p和q。
为了提高破解难度,达到更高的安全性,一般商业应用要求n的长度不小于1024bit,更重要的场合不小于2048bit。
说明对称密码算法和非对称密码算法的原理和优缺点
说明对称密码算法和非对称密码算法的原理和优缺点
对称密码算法:
原理:对称密码算法是一种加密算法,发送方和接收方使用相同的密钥进行加密和解密。
加密过程中,将明文按照一定的规则和算法进行混淆和置换,以产生密文。
解密过程中,使用相同的密钥和算法对密文进行逆向操作,还原出明文。
优点:
1. 加密和解密速度快,适用于大量数据的加密和解密操作。
2. 密钥长度相对较短,不占用过多的存储空间。
3. 实现简单,操作容易。
缺点:
1. 密钥的分发和管理较为困难,存在安全性问题。
2. 无法有效解决密钥传递问题,即如何确保密钥在发送和接收之间的安全传递。
非对称密码算法:
原理:非对称密码算法是一种加密算法,发送方和接收方使用不同的密钥进行加密和解密。
加密过程中,发送方使用接收方的公钥进行加密,接收方使用自己的私钥进行解密。
优点:
1. 安全性高,公钥可以随意公开,只有私钥持有者才能解密密文。
2. 解决了对称密码的密钥分发和管理问题。
缺点:
1. 加密和解密速度较慢,适用于少量数据的加密和解密操作。
2. 密钥长度相对较长,占用较多的存储空间。
3. 实现较为复杂,操作稍微复杂。
总结:
对称密码算法的优点在于速度快、实现简单,但安全性相对较低;非对称密码算法的优点在于安全性高,但加密和解密速度较慢、实现较为复杂。
因此,实际应用中常常采用对称密码算法和非对称密码算法的结合,即非对称密码算法用于密钥分发和管理,对称密码算法用于实际的数据加密和解密。
非对称加密算法
不对称加密算法不对称加密算法使用两把完全不同但又是完全匹配的一对钥匙—公钥和私钥。
在使用不对称加密算法加密文件时,只有使用匹配的一对公钥和私钥,才能完成对明文的加密和解密过程。
加密明文时采用公钥加密,解密密文时使用私钥才能完成,而且发信方(加密者)知道收信方的公钥,只有收信方(解密者)才是唯一知道自己私钥的人。
不对称加密算法的基本原理是,如果发信方想发送只有收信方才能解读的加密信息,发信方必须首先知道收信方的公钥,然后利用收信方的公钥来加密原文;收信方收到加密密文后,使用自己的私钥才能解密密文。
显然,采用不对称加密算法,收发信双方在通信之前,收信方必须将自己早已随机生成的公钥送给发信方,而自己保留私钥。
由于不对称算法拥有两个密钥,因而特别适用于分布式系统中的数据加密。
广泛应用的不对称加密算法有RSA算法和美国国家标准局提出的DSA。
以不对称加密算法为基础的加密技术应用非常广泛。
RSA算法简介这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法。
它易于理解和操作,也很流行。
算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman。
但RSA的安全性一直未能得到理论上的证明。
RSA的安全性依赖于大数分解。
公钥和私钥都是两个大素数(大于 100个十进制位)的函数。
据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。
密钥对的产生。
选择两个大素数,p 和q 。
计算:n = p * q然后随机选择加密密钥e,要求 e 和 ( p - 1 ) * ( q - 1 ) 互质。
最后,利用Euclid欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。
(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等算法计算解密密钥d, 满足e * d = 1 ( mod ( p - 1 ) * ( q - 1 ) )其中n和d也要互质。
非对称密钥算法
非对称密钥算法非对称密钥算法是一种特殊的密钥加密算法,也被称为公开密钥加密和单向加密。
它利用一对秘密密钥(公钥和私钥)来实现加密和解密。
一般来说,公钥由发送方事先发布给接收方,而私钥由发送方保留,不会被发布给任何人,包括接收方。
这样,发送方可以使用自己的私钥加密消息,并使用接收方公钥将其解密,而接收方却无法使用自己的私钥加密任何消息,因为它本身就不拥有任何私钥。
公钥加密算法是目前被广泛应用的一种安全通信技术,它包括RSA,ElGamal,D-H密钥交换,Elliptic Curve Cryptography(ECC)等算法,这些算法的重点是实现高级的隐私保护和数据安全。
RSA算法是目前在网络安全方面被广泛应用的公钥加密算法,它是由美国科学家Ron Rivest,Adi Shamir和Len Adleman发明的。
RSA的主要思想是用一对公开的密钥来完成加密和解密,这对密钥分别是一个公钥和一个私钥,这两个密钥是互不相通的,不能够从另一个密钥计算出来,也不能够从明文计算出来。
只有拥有私钥的收件人能够解密加密的消息,而拥有公钥的任何人都可以把消息加密给收件人。
ElGamal算法是由Taher Elgamal发明的公开密钥系统,它是一种椭圆曲线密码(ECC)。
与RSA不同,ElGamal可以同时用来加密和签名。
此外,ElGamal的安全性更高,因为它的密码长度可以更小,在相同的安全级别下比RSA更加有效。
DH密钥交换是一种没有中心机构的方式,可以在双方之间进行安全的通信,也被称为Diffie-Hellman密钥交换算法。
它利用两个实体之间的共同协商,可以产生一组密钥,用来加密和解密数据,并在双方之间交换信息。
它和RSA有许多相似之处,但又有所不同,它不需要生成共享私钥,而是向另一方发送其共享公钥,然后根据该公钥生成一组密钥,其中包含一个共享的私钥,这样,双方就各自拥有一份共享的私钥,而无需中央机关担任中介者。
非对称加密(2)非对称加密算法
⾮对称加密(2)⾮对称加密算法2基本流程很简单,那么公钥加密,私钥解密的算法原理到底是什么呢?本节简要阐述RSA算法、DSA算法、ECC算法、Diffie-Hellman算法的基本原理,其中涉及很多数论、离散数学以及解析⼏何⽅⾯的数学知识,感兴趣的读者可以借此加强相关理论基础。
RSA算法RSA算法是当前最著名、应⽤最⼴泛的公钥系统,1978年由美国⿇省理⼯学院的Ron Rivest、 Adi Shamir 和LeonardAdleman在论⽂《获得数字签名和公开钥密码系统的⽅法》中提出的。
这是⼀个基于数论的⾮对称(公开钥)密码体制,采⽤分组加密⽅式。
其名称来⾃于三个发明者的姓名⾸字母。
它的安全性是基于⼤整数素因⼦分解的困难性,⽽⼤整数因⼦分解问题是数学上的著名难题,⾄今没有有效的⽅法予以解决,因此可以确保RSA算法的安全性。
RSA系统是公钥系统的最具有典型意义的⽅法,⼤多数使⽤公钥密码进⾏加密和数字签名的产品和标准使⽤的都是RSA算法。
RSA算法是第⼀个既能⽤于数据加密也能⽤于数字签名的算法,因此它为公⽤⽹络上信息的加密和鉴别提供了⼀种基本的⽅法。
它通常是先⽣成⼀对RSA 密钥,⼀个是保密密钥,由⽤户保存;另⼀个为公开密钥,可对外公开,甚⾄可在⽹络服务器中注册,⼈们⽤公钥加密⽂件发送给个⼈,个⼈就可以⽤私钥解密接收。
为提⾼保密强度,RSA密钥⼀般为1024或者2048位。
RSA算法的⼯作原理如下:步骤 1任意选取两个不同的⼤质数p和q,计算乘积r=p*q。
步骤 2任意选取⼀个⼤整数e,e与(p-1)*(q-1)互质,整数e⽤做加密密钥。
注意:e的选取是很容易的,所有⼤于p和q的质数都可⽤。
步骤 3确定解密密钥d: d * e = 1 mod(p - 1)*(q - 1)根据e、p和q可以容易地计算出d。
步骤 4公开整数r和e,但是不公开d。
步骤 5将明⽂P(P是⼀个⼩于r的整数)加密为密⽂C,计算⽅法为C = P^e mod r 。
非对称加密工作原理
非对称加密工作原理非对称加密是一种常用的加密算法,其工作原理是基于数学上的难解问题。
与对称加密算法不同,非对称加密算法使用一对密钥,分别是公钥和私钥。
公钥可以自由传播,而私钥只有密钥的持有者才能知道。
通过使用这对密钥,可以实现加密、解密和数字签名等功能。
非对称加密的工作原理可以简单地描述为以下几个步骤:1. 密钥生成:首先,密钥的持有者需要生成一对密钥,即公钥和私钥。
生成密钥的过程是基于复杂的数学运算,保证了密钥的安全性和唯一性。
2. 加密过程:发送方使用接收方的公钥对消息进行加密。
这个过程是不可逆的,即使用公钥加密后的消息只能使用对应的私钥进行解密。
因此,即使在传输过程中被窃听,攻击者也无法获取消息的明文。
3. 解密过程:接收方使用自己的私钥对加密后的消息进行解密,恢复成原始的明文消息。
由于私钥只有接收方知道,因此只有接收方能够解密消息。
4. 数字签名:非对称加密还可以用于数字签名,用于验证消息的完整性和身份的真实性。
发送方使用自己的私钥对消息进行签名,接收方使用发送方的公钥对签名进行验证。
如果验证成功,可以确认消息的来源和完整性。
非对称加密算法的工作原理基于数学上的难解问题,如大素数分解、离散对数等。
这些问题在计算上是非常复杂和耗时的,因此攻击者很难通过穷举法或其他方法破解密钥。
这就保证了非对称加密算法的安全性。
与非对称加密相对应的是对称加密算法,对称加密算法使用同一个密钥进行加密和解密。
由于密钥的传输和管理是一个重要的问题,非对称加密算法可以解决这个问题。
在实际应用中,常常使用非对称加密算法来传输对称加密算法的密钥,以保证密钥的安全性。
总结起来,非对称加密是一种基于数学难解问题的加密算法,使用一对密钥进行加密、解密和数字签名等操作。
其工作原理保证了密钥的安全性和唯一性,使得非对称加密算法在信息安全领域得到了广泛应用。
通过使用非对称加密算法,可以保护用户的隐私和数据的安全,防止敏感信息被窃听、篡改或伪造。
非对称密码算法RSA原理
非对称密钥加密算法-RSA一.非对称密钥加密概述前面讲述了对称密钥加密体制。
使用对称密钥加密体制进行保密通信时,任意不同的两个用户之间都应该使用互不相同的密钥。
这样,如果一个网络中有n个用户,他们之间彼此可能需要进行秘密通信,这时网络中将共需要n(n-1)/2个密钥(其中,每个用户都需要保存n-1个密钥),这样巨大的密钥量给密钥分配和管理带来了极大的困难。
另外,随着计算机网络,特别是因特网的发展,网络上互不相识的用户可能需要进行保密的会话(例如,如果用户在进行电子商务活动时,需要保密的连接,这时的客户对象可能根本不是固定的对象)。
最后,对称密钥加密机制难以解决签名验证问题。
非对称密钥加密也称为公开密钥加密,或者叫做公钥加密算法。
使用公开密钥密码的每一个用户都分别拥有两个密钥:加密密钥和解密密钥,它们两者并不相同,并且由加密密钥得到解密密钥在计算机上是不可行的。
每一个用户的加密密钥都是公开的(因此,加密密钥也称为公开密钥)。
所有用户的公开密钥都将记录在作用类似于电话号码薄的密钥本上,而它可以被所有用户访问,这样每一个用户都可以得到其他所有用户的公开密钥。
同时,每一个用户的解密密钥将由用户保存并严格保密(因此,解密密钥也称为私有密钥)。
非对称密码算法解决了对称密码体制中密钥管理的难题,并提供了对信息发送人的身份进行验证的手段,是现代密码学最重要的发明。
公钥加密算法一般是将对密钥的求解转化为对数学上的困难问题的求解,例如RSA算法的安全性是建立在“大数分解和素性检测”这个数论难题的基础上,已知两个大素数a、b,求出a*b是容易计算的,而已知a*b,想知道其是哪两个大素数的乘积目前还没有好的计算方法,另外也有一些非对称加密算法(如ELGamal算法)的安全性是基于求“离散对数”这个数学难题上的。
在公钥密码系统中每个实体都有自己的公钥和相应的私钥。
公钥密码系统的加密变换和解密变换分别用E和D表示。
任何实体B要向实体A发送信息m的步骤如下:实体B首先获得实体A的真实公钥的拷贝(eA),实体B使用eA计算密文 c=E(m)并发送给实体A ,实体A使用自己的私钥dA,计算m=D(c)解密密文,恢复出明文m。
非对称加密算法--DH
⾮对称加密算法--DH注意:本节内容主要参考⾃《Java加密与解密的艺术(第2版)》第8章“⾼等加密算法--⾮对称加密算法”11.1、⾮对称加密算法特点:发送⽅和接收⽅均有⼀个密钥对(公钥+私钥),其中公钥传播,私钥⾃⼰保存,不需要传播私钥不需要传播的特性解决了对称加密算法中密钥传播的困难(这个困难⼀般通过线下传递可以解决)加密安全性极⾼,只⽤于⼀些电⼦商务⽹站,加解密速度远低于对称加密⼀般情况下,为了解决⾮对称加密算法加解密速度低的问题,采⽤⾮对称加密(使⽤公钥+私钥对对称加密的密钥进⾏加解密)+对称加密(加解密数据)相结合的⽅式。
常见算法:DH(⾮对称加密的基⽯)RSA(⾮对称加密的经典,除了可⽤于⾮对称加密,也可⽤于数字签名,RSA--155(512位密钥)已被破解)ElGamal11.2、DH(仅能⽤于密钥分配,不能加解密数据)实现⽅式:JDK(密钥长度:512~1024中的64的整数倍)⼏个概念:密钥对:公钥+私钥本地密钥:对称加密的密钥整个流程:1)甲⼄双⽅初始化各⾃的密钥对甲⽅构建出密钥对keyPair1-->⼄⽅使⽤甲⽅的密钥对中的公钥publicKey1构建出⾃⼰的密钥对keyPair22)甲⼄双⽅构建各⾃的本地密钥甲⽅使⽤⾃⼰的私钥privateKey1+⼄⽅的公钥publicKey2构建出⾃⼰的本地密钥key1⼄⽅使⽤⾃⼰的私钥privateKey2+甲⽅的公钥publicKey1构建出⾃⼰的本地密钥key2最后会发现key1==key2,这两个本地密钥将会是接下来对对称加密所使⽤的密钥3)发送⽅(甲⽅或⼄⽅均可)使⽤本地密钥+对称加密算法对待加密数据进⾏加密,传递给接收⽅4)接收⽅使⽤本地密钥+对称加密算法对待解密数据进⾏解密1 package com.util.dh;23 import java.io.UnsupportedEncodingException;4 import java.security.InvalidAlgorithmParameterException;5 import java.security.InvalidKeyException;6 import java.security.Key;7 import java.security.KeyFactory;8 import java.security.KeyPair;9 import java.security.KeyPairGenerator;10 import java.security.NoSuchAlgorithmException;11 import java.security.PrivateKey;12 import java.security.PublicKey;13 import java.security.spec.InvalidKeySpecException;14 import java.security.spec.PKCS8EncodedKeySpec;15 import java.security.spec.X509EncodedKeySpec;1617 import javax.crypto.BadPaddingException;18 import javax.crypto.Cipher;19 import javax.crypto.IllegalBlockSizeException;20 import javax.crypto.KeyAgreement;21 import javax.crypto.NoSuchPaddingException;22 import javax.crypto.interfaces.DHPublicKey;23 import javax.crypto.spec.DHParameterSpec;24 import javax.crypto.spec.SecretKeySpec;2526 import mons.codec.binary.Base64;2728 /**29 * 基于JDK的DH算法,⼯作模式采⽤ECB30 */31 public class DHJDK {32 private static final String ENCODING = "UTF-8";33 private static final String FDC_KEY_ALGORITHM = "DH";//⾮对称加密密钥算法34 private static final String DC_KEY_ALGORITHM = "AES";//产⽣本地密钥的算法(对称加密密钥算法)35 private static final String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";//加解密算法格式:算法/⼯作模式/填充模式注意:ECB不使⽤IV参数36 private static final int FDC_KEY_SIZE = 512;//⾮对称密钥长度(512~1024之间的64的整数倍)3738 /**39 * ⽣成甲⽅密钥对40 */41 public static KeyPair initKey() throws NoSuchAlgorithmException{42 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(FDC_KEY_ALGORITHM);//密钥对⽣成器43 keyPairGenerator.initialize(FDC_KEY_SIZE);//指定密钥长度44 KeyPair keyPair = keyPairGenerator.generateKeyPair();//⽣成密钥对45 return keyPair;46 }4748 /**49 * ⽣成⼄⽅密钥对50 * @param key 甲⽅公钥51 */52 public static KeyPair initKey(byte[] key) throws NoSuchAlgorithmException,53 InvalidKeySpecException,54 InvalidAlgorithmParameterException{55 KeyFactory keyFactory = KeyFactory.getInstance(FDC_KEY_ALGORITHM);//密钥⼯⼚56 PublicKey publicKey = keyFactory.generatePublic(new X509EncodedKeySpec(key));//还原甲⽅公钥57 DHParameterSpec dHParameterSpec = ((DHPublicKey)publicKey).getParams();5859 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(keyFactory.getAlgorithm());//⼄⽅密钥对⽣成器60 keyPairGenerator.initialize(dHParameterSpec);//使⽤甲⽅公钥参数初始化⼄⽅密钥对⽣成器61 KeyPair keyPair = keyPairGenerator.generateKeyPair();//⽣成密钥对62 return keyPair;63 }6465 /**66 * DH加密67 * @param data 带加密数据68 * @param keyByte 本地密钥,由getSecretKey(byte[] publicKey, byte[] privateKey)产⽣69 */70 public static byte[] encrypt(String data, byte[] keyByte) throws NoSuchAlgorithmException,71 NoSuchPaddingException,72 InvalidKeyException,73 IllegalBlockSizeException,74 BadPaddingException,75 UnsupportedEncodingException {76 Key key = new SecretKeySpec(keyByte, DC_KEY_ALGORITHM);//⽣成本地密钥7778 Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);79 cipher.init(Cipher.ENCRYPT_MODE, key);//设置加密模式并且初始化key80 return cipher.doFinal(data.getBytes(ENCODING));81 }8283 /**84 * DH解密85 * @param data 待解密数据为字节数组86 * @param keyByte 本地密钥,由getSecretKey(byte[] publicKey, byte[] privateKey)产⽣87 */88 public static byte[] decrypt(byte[] data, byte[] keyByte) throws NoSuchAlgorithmException,89 NoSuchPaddingException,90 InvalidKeyException,91 IllegalBlockSizeException,92 BadPaddingException {93 Key key = new SecretKeySpec(keyByte, DC_KEY_ALGORITHM);//⽣成本地密钥94 Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);95 cipher.init(Cipher.DECRYPT_MODE, key);96 return cipher.doFinal(data);97 }9899 /**100 * 根据本⽅私钥与对⽅公钥构建本地密钥(即对称加密的密钥)101 * @param publicKey 对⽅公钥102 * @param privateKey 本⽅私钥103 */104 public static byte[] getSecretKey(byte[] publicKey, byte[] privateKey) throws NoSuchAlgorithmException,105 InvalidKeySpecException,106 InvalidKeyException{107 KeyFactory keyFactory = KeyFactory.getInstance(FDC_KEY_ALGORITHM);//密钥⼯⼚108 PublicKey pubkey = keyFactory.generatePublic(new X509EncodedKeySpec(publicKey));//还原公钥109 PrivateKey prikey = keyFactory.generatePrivate(new PKCS8EncodedKeySpec(privateKey));//还原私钥110111 KeyAgreement keyAgreement = KeyAgreement.getInstance(keyFactory.getAlgorithm());112 keyAgreement.init(prikey);113 keyAgreement.doPhase(pubkey, true);114 return keyAgreement.generateSecret(DC_KEY_ALGORITHM).getEncoded();//⽣成本地密钥(对称加密的密钥)115 }116117 /**118 * 获取公钥119 */120 public static byte[] getPublicKey(KeyPair keyPair){121 return keyPair.getPublic().getEncoded();122 }123124 /**125 * 获取私钥126 */127 public static byte[] getPrivateKey(KeyPair keyPair){128 return keyPair.getPrivate().getEncoded();129 }130131 /**132 * 测试133 */134 public static void main(String[] args) throws NoSuchAlgorithmException,135 InvalidKeySpecException,136 InvalidAlgorithmParameterException,137 InvalidKeyException,138 NoSuchPaddingException,139 IllegalBlockSizeException,140 BadPaddingException,141 UnsupportedEncodingException {142 byte[] pubKey1;//甲⽅公钥143 byte[] priKey1;//甲⽅私钥144 byte[] key1;//甲⽅本地密钥145 byte[] pubKey2;//⼄⽅公钥146 byte[] priKey2;//⼄⽅私钥147 byte[] key2;//⼄⽅本地密钥148149 /*********************测试是否可以正确⽣成以上6个key,以及key1与key2是否相等*********************/150 KeyPair keyPair1 = DHJDK.initKey();//⽣成甲⽅密钥对151 pubKey1 = DHJDK.getPublicKey(keyPair1);152 priKey1 = DHJDK.getPrivateKey(keyPair1);153154 KeyPair keyPair2 = DHJDK.initKey(pubKey1);//根据甲⽅公钥⽣成⼄⽅密钥对155 pubKey2 = DHJDK.getPublicKey(keyPair2);156 priKey2 = DHJDK.getPrivateKey(keyPair2);157158 key1 = DHJDK.getSecretKey(pubKey2, priKey1);//使⽤对⽅公钥和⾃⼰私钥构建本地密钥159 key2 = DHJDK.getSecretKey(pubKey1, priKey2);//使⽤对⽅公钥和⾃⼰私钥构建本地密钥160161 System.out.println("甲⽅公钥pubKey1-->"+Base64.encodeBase64String(pubKey1)+"@@pubKey1.length-->"+pubKey1.length); 162 System.out.println("甲⽅私钥priKey1-->"+Base64.encodeBase64String(priKey1)+"@@priKey1.length-->"+priKey1.length); 163 System.out.println("⼄⽅公钥pubKey2-->"+Base64.encodeBase64String(pubKey2)+"@@pubKey2.length-->"+pubKey2.length); 164 System.out.println("⼄⽅私钥priKey2-->"+Base64.encodeBase64String(priKey2)+"@@priKey2.length-->"+priKey2.length); 165 System.out.println("甲⽅密钥key1-->"+Base64.encodeBase64String(key1));166 System.out.println("⼄⽅密钥key2-->"+Base64.encodeBase64String(key2));167168 /*********************测试甲⽅使⽤本地密钥加密数据向⼄⽅发送,⼄⽅使⽤本地密钥解密数据*********************/169 System.out.println("甲⽅-->⼄⽅");170 String data = "找⼀个好姑娘啊!";171 byte[] encodeStr = DHJDK.encrypt(data, key1);172 System.out.println("甲⽅加密后的数据-->"+Base64.encodeBase64String(encodeStr));173 byte[] decodeStr = DHJDK.decrypt(encodeStr, key2);174 System.out.println("⼄⽅解密后的数据-->"+new String(decodeStr,"UTF-8"));175176 /*********************测试⼄⽅使⽤本地密钥加密数据向甲⽅发送,甲⽅使⽤本地密钥解密数据*********************/177 System.out.println("⼄⽅-->甲⽅");178 String data2 = "找⼀个好姑娘啊!";179 byte[] encodeStr2 = DHJDK.encrypt(data2, key2);180 System.out.println("⼄⽅加密后的数据-->"+Base64.encodeBase64String(encodeStr2));181 byte[] decodeStr2 = DHJDK.decrypt(encodeStr, key1);182 System.out.println("甲⽅解密后的数据-->"+new String(decodeStr2,"UTF-8"));183 }184 }。
非对称密码算法概述
18
基于公钥密码的加密过程
Alice
Bob
19
基于公钥密码的鉴别过程
Alice
Bob
20
公钥密码体制的优缺点
❖ 优点:
▪ 解决密钥传递的问题 ▪ 大大减少密钥持有量 ▪ 提供了对称密码技术无法或很难提供的服务(数字
签名)
❖ 缺点:
▪ 计算复杂、耗用资源大 ▪ 非对称会导致得到的密文变长
21
取 k=4,则d= 77 公开(e,n)=(5,119),将d 保密,丢弃p, q。明文:
m=19
加密:
19 5≡ 66 mod 119 , c= 66
解密:
6677 mod 119 =?
11
RSA 算法的安全性和性能
攻击方法 ▪ 蛮力攻击:对所有密钥都进行尝试。 ▪ 数学攻击:等效于对两个素数乘积(n)的因子分解。
大数的因子分解是数论中的一个难题。
运算速度 ❖ 软件实现比DES 慢100倍 ❖ 硬件实现比DES慢1000倍
12
椭圆曲线密码体制
❖ 椭圆曲线上的离散对数问题
▪ 点Q和点P是有限域上的椭圆曲线的两个点,在等 式mP=P+P+…+P=Q中,已知m和点P求点Q比 较容易,反之已知点Q和点P求m却是相当困难的, 这个问题称为椭圆曲线上点群的离散对数问题。
ECC(Elliptic Cure Crytosystem),1985
▪ 基于有限域上椭圆曲线有理点群的密码系统 ▪ 更快的具有更小密钥长度的公开密码系统 ▪ 功能同RSA:数字签名,密钥管理,加密
6
RSA公钥密码体制
❖1977年由Ron Rivest、Adi Shamir和Len Adleman发明,1978年正式公布。 ❖RSA是一种分组加密算法。明文和密文在0~n-1 之间,n是一个正整数。 ❖该算法的数学基础是初等数论中的Euler(欧拉) 定理,并建立在大整数因子分解的困难性之上。 ❖目前应用最广泛的公钥密码算法。
非对称加密(算法)
非对称加密(算法)首页>生活常识 >正文非对称加密(算法)发布日期:2023-09-08 16:59:33 手机收发短信已经成为了人们日常通信交流的重要渠道,短信业务也从移动端逐渐步入民众生活,随着证券交易等重要手机短信应用业务领域的深入,更多的传统短信形式开始采用文本加信息的方式进行传播,传统的利用短信信息进行传播的业务渠道已经无法满足人们的需求,这对短信的安全性应用提出了更多要求。
为了保证手机短信传输信息的安全性,可以采用多种途径对手机短信的安全性进行加密,例如可以采用rsa算法对密码进行加密,利用现代技术对密码信息进行加密可以提升短信的安全性。
在运用rsa技术的时候,可以先生成一对秘钥,然后在手机的接收端和信息的接收端对秘钥的安全性进行处理,如果手机的发送端接收了密文,而发送信息的手机发出的则应当是明文。
在手机端发送信号之前,用户需要对短信文本进行编辑,为了实现信息的安全传输,需要对短信信息进行加密,同时将公共秘钥和私有秘钥一同发布,之后在用户的手机当中就会利用rsa算法进行计算,密文因此很容易就能还原成明文。
一、非对称算法在手机短信传输中的使用手机收发短信已经成为了人们日常通信交流的重要渠道,短信业务也从移动端逐渐步入民众生活,随着证券交易等重要手机短信应用业务领域的深入,更多的传统短信形式开始采用文本加信息的方式进行传播,传统的利用短信信息进行传播的业务渠道已经无法满足人们的需求,这对短信的安全性应用提出了更多要求。
为了保证手机短信传输信息的安全性,可以采用多种途径对手机短信的安全性进行加密,例如可以采用rsa算法对密码进行加密,利用现代技术对密码信息进行加密可以提升短信的安全性。
在运用rsa技术的时候,可以先生成一对秘钥,然后在手机的接收端和信息的接收端对秘钥的安全性进行处理,如果手机的发送端接收了密文,而发送信息的手机发出的则应当是明文。
如果接受信息的接收端接收到的是发送出去的加密信息,那么接受信息的手机上收到的就是发送端发出的明文信息。
非对称加密算法
非对称加密算法非对称加密算法是一种加密技术,使用不同的密钥进行加密和解密操作。
与对称加密算法不同,非对称加密算法使用了一对密钥,通常称为公钥和私钥。
一、非对称加密算法的概述非对称加密算法是一种重要的加密技术,它采用了不同的密钥进行加密和解密操作。
这些密钥成对出现,其中一个密钥可以公开给任何人,称为公钥;另一个密钥则需要保密,只能由密钥的持有者使用,称为私钥。
公钥用于加密数据,而私钥用于解密数据。
非对称加密算法具有以下几个特点:1. 安全性高:由于加密和解密使用不同的密钥,即使攻击者获取了公钥,也不能推导出私钥。
2. 适用广泛:非对称加密算法可以用于各种场景,如身份验证、数字签名、数据加密等。
3. 密钥管理复杂:非对称加密算法需要管理密钥对,包括生成、分发、存储等。
二、非对称加密算法的应用非对称加密算法具有广泛的应用场景,下面介绍其中几个常见的应用领域:1. 身份验证:非对称加密算法可以用于身份验证,例如数字证书中的公钥可以验证签名者的身份,确保数据的完整性和可靠性。
2. 数据加密:非对称加密算法可以用于对数据进行加密,只有拥有私钥的人才能解密数据。
这在保护敏感信息和隐私数据方面非常重要。
3. 数字签名:非对称加密算法还可以用于生成和验证数字签名。
签名者使用私钥对数据进行签名,接收者使用公钥来验证签名的有效性,确保数据的真实性和完整性。
4. 密钥协商:非对称加密算法可以用于密钥的协商,例如Diffie-Hellman密钥交换算法。
该算法允许通信双方通过公开的信息交换来协商出共享密钥,用于后续的对称加密算法。
三、非对称加密算法的分类常见的非对称加密算法有RSA、DSA、ECC等,它们具有不同的特点和适用场景。
1. RSA算法:RSA算法是一种基于大数因子分解的非对称加密算法,它具有安全性高、可靠性强的特点。
RSA算法广泛应用于数字证书、电子支付等场景。
2. DSA算法:DSA算法是一种基于离散对数问题的非对称加密算法,主要用于数字签名和身份验证。
非对称加密算法
⾮对称加密算法个⼈博客⽹: (你想要这⾥多有)⼀、概述因为加密和解密使⽤的是两个不同的密钥,所以这种算法叫作⾮对称加密算法.⾮对称加密算法需要两个密钥:公开密钥和私有密钥. 公开密钥与私有密钥是⼀对的,这两个共同组成⼀个解钥,才能实现解密。
特点:⾼级、双保险种类:1. DH(Diffie-Hellman)密钥交换算法2. RSA——基于因⼦分解,RSA是可以双向加密的:私钥加密,公钥解密;公钥加密,私钥解密。
3. EIGamal——基于离散对数4. ECC(Elliptical Curve Cryptography)——椭圆曲线加密说明:如果⽤公开密钥对数据进⾏加密,只有⽤对应的私有密钥才能解密. 如果⽤私有密钥对数据进⾏加密,那么只有⽤对应的公开密钥才能解密(某些算法有提供). ⾮对称加密算法实现机密信息交换的基本过程是: 甲⽅⽣成⼀对密钥并将其中的⼀把作为公⽤密钥向其它⽅公开,得到该公⽤密钥的⼄⽅使⽤该密钥对信息进⾏加密后再发送给甲⽅. 甲⽅再⽤⾃⼰保存的另⼀把专⽤密钥对加密后的信息进⾏解密. 另⼀⽅⾯,甲⽅可以使⽤⼄⽅提供的公钥对信息进⾏加密后再发送给⼄⽅,⼄⽅再⽤⾃⼰的私匙对数据进⾏解密.⼆、密钥交换算法DH1、DH算法概述DH 对称加密算法:数据安全、密钥管理复杂、密钥传递过程复杂(存在密钥泄露问题)⾮对称加密算法的特点:算法强度复杂、安全性依赖于算法与密钥.但是由于算法复杂,使得⾮对称算法加解密速度没有对称算法加解密的速度快.对称密钥体制中只有⼀种密钥,并且是⾮公开的,如果要解密就得让对⽅知道密钥.所以保证其安全性就是保证密钥的安全.⾮对称密钥体制有两种密钥,其中⼀个是公开的,这样就可以不需要像对称密码那样向对⽅传输密钥了.因此安全性就⼤了很多.对称密钥与⾮对称密钥⽐较:算法复杂度:对称密钥<⾮对称密钥加解密速度:对称密钥>⾮对称密钥安全性:对称密钥<⾮对称密钥2、DH算法实现过程及相关类详解【1】DH加密算法密钥交换:初始化发送⽅密钥,如:KeyPairGeneratorKeyPairPublicKey//创建KeyPairGenerator对象通过KeyPairGenerator来得到KeyPair类的对象,KeyPairGenerator senderKeyPairGenerator = KeyPairGenerator.getInstance("DH");初始化接收⽅密钥,如:KeyFactoryX509EncodedKeySpecDHPublicKeyDHParameterSpecKeyPairGeneratorPrivateKey【2】密钥构建KeyAgreementSecreKeyKeyactoryX509EncodedKeySpecPublicKeystatic KeyAgreement getInstance(String algorithm)⽣成实现指定密钥⼀致算法的KeyAgreement对象【3】加密、解密CipherCipher cipher = Cipher.getInstance( " DES " );3、DH算法实现package .des;import java.security.KeyFactory;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.PrivateKey;import java.security.PublicKey;import java.security.spec.X509EncodedKeySpec;import java.util.HashMap;import java.util.Map;import java.util.Objects;import javax.crypto.Cipher;import javax.crypto.KeyAgreement;import javax.crypto.SecretKey;import javax.crypto.interfaces.DHPrivateKey;import javax.crypto.interfaces.DHPublicKey;import javax.crypto.spec.DHParameterSpec;import javax.sound.midi.Soundbank;import mons.codec.binary.Base64;import org.bouncycastle.crypto.agreement.srp.SRP6Client;import org.bouncycastle.jcajce.provider.asymmetric.X509;import org.omg.CORBA.PUBLIC_MEMBER;public class DH {static String string = "wen-min";public static void main(String[] args) {DH.jdkDH();}public static void jdkDH() {try {//1.初始化发送⽅密钥KeyPairGenerator senderKeyPairGenerator = KeyPairGenerator.getInstance("DH");senderKeyPairGenerator.initialize(512);KeyPair senderKeyPair = senderKeyPairGenerator.generateKeyPair();byte[] senderPublicKeyEnc = senderKeyPair.getPublic().getEncoded();//发送⽅公钥,发送给接收⽅ //2.初始化接收⽅密钥KeyFactory receiverKeyFactory = KeyFactory.getInstance("DH");X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(senderPublicKeyEnc); PublicKey receiverPublicKey = receiverKeyFactory.generatePublic(x509EncodedKeySpec);DHParameterSpec dhParameterSpec = ((DHPublicKey)receiverPublicKey).getParams();KeyPairGenerator receiverKeyPairGenerator = KeyPairGenerator.getInstance("DH");receiverKeyPairGenerator.initialize(dhParameterSpec);KeyPair receiverKeypair = receiverKeyPairGenerator.generateKeyPair();PrivateKey receiverPrivateKey = receiverKeypair.getPrivate();byte[] receiverPublicKeyEnc = receiverKeypair.getPublic().getEncoded();//3.密钥构建KeyAgreement receiverKeyAgreement = KeyAgreement.getInstance("DH");receiverKeyAgreement.init(receiverPrivateKey);receiverKeyAgreement.doPhase(receiverPublicKey,true);SecretKey receiverDesKey = receiverKeyAgreement.generateSecret("DES");KeyFactory senderKeyFactory = KeyFactory.getInstance("DH");x509EncodedKeySpec = new X509EncodedKeySpec(receiverPublicKeyEnc);PublicKey senderPublicKey = senderKeyFactory.generatePublic(x509EncodedKeySpec);KeyAgreement senderKeyAgreement = KeyAgreement.getInstance("DH");senderKeyAgreement.init(senderKeyPair.getPrivate());senderKeyAgreement.doPhase(senderPublicKey, true);SecretKey senderDesKey = senderKeyAgreement.generateSecret("DES");if(Objects.equals(receiverDesKey, senderDesKey)) {System.out.println("双⽅密钥相同");}//4.加密Cipher cipher = Cipher.getInstance("DES");cipher.init(Cipher.ENCRYPT_MODE, senderDesKey);byte[] result = cipher.doFinal(string.getBytes());System.out.println("jdk dh eccrypt :" + Base64.encodeBase64String(result));//5.解密cipher.init(Cipher.DECRYPT_MODE, senderDesKey);result = cipher.doFinal(result);System.out.println("jdk dh decrypt : " + new String(result));} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}}执⾏结果:双⽅密钥相同jdk dh eccrypt :Ra+RRytG7xw=jdk dh decrypt : wen-min4、DH加密算法的消息传递机制:1.甲⽅构建密钥对⼉,将公钥公布给⼄⽅,将私钥保留;双⽅约定数据加密算法;⼄⽅通过甲⽅公钥构建密钥对⼉,将公钥公布给甲⽅,将私钥保留。
解密加密算法:对称加密和非对称加密的区别与应用
解密加密算法:对称加密和非对称加密的区别与应用对称加密和非对称加密是两种常见的加密算法,它们在加密解密的方式以及应用场景上有一些区别。
1.对称加密算法:对称加密算法也被称为共享密钥加密算法,其中使用相同的密钥进行加密和解密。
对称加密算法的特点是加密解密过程简单、速度快,适合大量数据的加密和解密。
常见的对称加密算法有DES、3DES、AES 等。
对称加密算法的过程如下:-发送方使用密钥对明文进行加密,生成密文。
-密文通过公共渠道发送给接收方。
-接收方使用相同的密钥对密文进行解密,还原成明文。
对称加密算法的应用场景:由于对称加密算法的加密解密速度快,适合大规模数据的加密解密,因此其应用场景较为广泛。
常见的应用场景包括:-文件和磁盘加密:对文件和磁盘进行加密,保护数据的机密性,防止未经授权的访问。
-网络传输加密:对通过网络传输的数据进行加密,确保数据在传输过程中不被窃听和篡改。
-数据库加密:对数据库中的敏感数据进行加密,以增加数据的安全性。
2.非对称加密算法:非对称加密算法又被称为公钥加密算法,其中使用一对密钥进行加密和解密,分别是公钥和私钥。
非对称加密算法的特点是安全性高,但加密解密速度相对较慢。
常见的非对称加密算法有RSA、DSA、ECC 等。
非对称加密算法的过程如下:-发送方使用接收方的公钥对明文进行加密,生成密文。
-密文通过公共渠道发送给接收方。
-接收方使用自己的私钥对密文进行解密,还原成明文。
非对称加密算法的应用场景:非对称加密算法由于其安全性高的特点,常用于以下应用场景:-安全通信:通过非对称加密算法进行加密通信,确保通信双方的安全性,防止信息被窃听和篡改。
-数字签名:通过非对称加密算法生成数字签名,用于验证数据的完整性和真实性。
-密钥交换:通过非对称加密算法进行密钥的交换和协商,用于对称加密算法的加密解密过程。
对称加密算法和非对称加密算法的对比:-密钥数量:对称加密算法只有一个密钥,而非对称加密算法有一对密钥,分别是公钥和私钥。
非对称密码体制工作原理
非对称密码体制工作原理
非对称密码体制,也称为公钥密码体制,是一种密码算法,在其中使用了两个密钥:公钥和私钥。
公钥用于加密数据,私钥用于解密数据。
非对称密码体制的工作原理如下:
1.密钥生成:首先,使用非对称密码算法生成一对密钥,即公钥
和私钥。
公钥会被公开,并可与其他人共享,而私钥必须仅由
密钥的所有者保留。
2.加密数据:当某个用户要向另一个用户发送加密的信息时,该
用户使用接收者的公钥对待发送的数据进行加密。
这样,只有
拥有私钥的接收者才能解密数据。
3.解密数据:接收者使用自己的私钥对接收到的加密数据进行解
密。
因为私钥是唯一的,所以只有接收者能够解密和读取数据。
非对称密码体制的工作原理依赖于数学上的难解问题,例如大素数分解或离散对数问题。
这些问题公认为很难在合理的时间内破解,因此通过使用合适的密钥长度,非对称密码体制可以提供较高的安全性。
非对称密码体制的优势在于其安全性。
由于私钥不会被公开,只有拥有私钥的用户才能解密数据,从而保证了数据的机密性。
此外,非对称密码体制还被用于实现数字签名和密钥交换等安全功能。
然而,非对称密码体制的计算开销较大,比对称密码体制慢得多。
因此,在实际应用中,通常结合对称密码体制和非对称密码体制,以充分利用两种密码体制的优势,同时满足性能和安全性的要求。
非对称加密运算
非对称加密运算全文共四篇示例,供读者参考第一篇示例:非对称加密算法(Asymmetric encryption)是一种运用公私密钥对进行加密和解密的加密技术。
与对称加密算法不同的是,非对称加密算法需要一对密钥,即公钥和私钥。
公钥用于加密数据,私钥用于解密数据。
公钥可以公开,私钥则保密,这就是为何称其为“非对称”加密。
非对称加密算法的最大优势在于其安全性。
由于加密和解密使用的是不同的密钥,攻击者无法通过截获公钥来获取私钥。
即使公钥被泄露,私钥仍然是安全的。
这种双密钥的组合使得非对称加密算法成为网络安全领域的重要技术之一。
常见的非对称加密算法有RSA、DSA、ECC等。
RSA是第一个广泛应用的非对称加密算法之一,它利用了大素数分解的数学难题。
DSA是一种数字签名算法,常用于身份验证和消息完整性校验。
ECC是椭圆曲线加密算法,相对于RSA来说,它在相同的安全级别下,密钥长度更短,计算速度更快,适合在资源受限的环境中应用。
非对称加密算法在信息安全领域有着广泛的应用。
非对称加密算法可以用于数据传输的加密保护。
在网络通信中,数据需要经过公网传输,如果使用对称加密算法来加密数据,需要将加密密钥传输给对方,存在被窃取的风险。
而非对称加密算法则可以避免这个问题,加密过程中只需要公钥,私钥不需要传输,因此更加安全。
非对称加密算法还常用于数字签名和身份认证。
数字签名是将消息用发送者的私钥进行签名,接收者用发送者的公钥进行验证,确保消息的完整性和真实性。
身份认证则是通过验证数字签名来确认发送者的身份是否有效,防止假冒等安全问题。
非对称加密算法还可以应用于安全证书认证、密钥协商、安全通信通讯、加密存储等场景。
在各种通信和交互场合中,非对称加密算法都发挥着重要作用,保障了信息安全和数据保密性。
但非对称加密算法也存在一些不足之处。
由于非对称加密算法的算法复杂度相对较高,计算速度较慢,数据加密解密的效率不如对称加密算法高。
密钥管理也是一个挑战,需要保证私钥的安全性,避免泄露。
对称加密算法与非对称加密算法
对称加密算法与非对称加密算法
对称加密算法的优点是速度快、加解密效率高,适合大量数据的加密
和解密。
缺点是密钥管理问题,即如何安全地将密钥传递给接收方。
同时,对称加密算法不提供身份验证和非可否认性,即发送方不能证明自己的身份,并且发送方不能否认发送的信息。
非对称加密算法是指加密与解密使用不同密钥的加密算法。
发送方使
用公钥进行加密,而接收方使用私钥进行解密。
常见的非对称加密算法有RSA、DSA、ECC等。
非对称加密算法的优点是密钥管理方便,不需要将私钥传递给接收方。
同时,非对称加密算法提供了身份验证和非可否认性,即发送方可以证明
自己的身份,并且发送方不能否认发送的信息。
缺点是速度慢、效率低,
适合少量数据的加密和解密。
总的来说,对称加密算法适合加密大量数据,速度快,但需要解决密
钥管理问题;非对称加密算法适合加密少量数据,提供身份验证和非可否
认性的功能,但速度慢。
通过结合使用对称和非对称加密算法,可以充分
利用它们的优点,达到更高的安全性和效率。
HTTPS原理中的非对称加密
HTTPS原理中的非对称加密在互联网时代,信息安全成为了人们非常关注的议题。
为了保护用户在网络传输过程中的隐私和数据安全,HTTPS协议应运而生。
HTTPS使用了非对称加密技术,本文将深入探讨HTTPS原理中的非对称加密。
一、非对称加密简介非对称加密又被称为公钥加密,与传统的对称加密方式不同。
对称加密使用相同的密钥进行加密和解密,而非对称加密则使用一对密钥,一个是公钥,一个是私钥。
公钥可以自由分发给任何人,而私钥则只由密钥的持有者保留。
二、HTTPS原理及工作流程1. HTTPS是什么?HTTPS(Hypertext Transfer Protocol Secure)即安全的超文本传输协议,是在HTTP的基础上加入了SSL/TLS协议的安全传输协议。
HTTPS使用非对称加密保护数据传输的隐私性和完整性,防止数据在传输过程中被窃听、篡改和伪造。
2. HTTPS的工作流程(1)客户端发送请求客户端发送一个HTTPS请求给服务器,请求建立一个安全的连接。
(2)服务器返回证书服务器收到请求后,将自己的证书发给客户端。
证书中包含了服务器的公钥、证书的颁发机构等信息。
(3)客户端验证证书客户端接收到服务器返回的证书后,会对证书的真实性进行验证。
验证包括检查证书的有效性、颁发机构的可信度等。
(4)客户端生成并发送随机密钥客户端验证通过后,会生成一个随机的对称密钥,并使用服务器的公钥加密后发送给服务器。
这个随机密钥将用于后续的数据传输加密解密过程。
(5)服务器解密随机密钥服务器收到客户端发送的加密后的随机密钥后,使用自己的私钥进行解密,得到对称密钥。
(6)建立安全连接客户端和服务器双方都拥有了相同的对称密钥,可以使用该密钥进行数据传输的加密和解密操作,建立安全连接。
三、非对称加密在HTTPS中的应用1. 加密和解密HTTPS使用非对称加密算法来加密和解密对称密钥。
客户端使用服务器的公钥来加密生成的随机密钥,这样只有服务器的私钥才能解密。
非对称密码学
非对称密码学
非对称密码学是一种加密技术,也被称为公钥密码学。
它使用一对密钥,一把是公钥,另一把是私钥。
公钥是公开的,可以分发给任何人,而私钥则只有持有者能够使用。
这两把密钥是通过数学算法生成的,相互关联,但是私钥不能从公钥推导出来。
在非对称密码学中,发送方使用接收方的公钥来加密信息,而接收方使用自己的私钥来解密信息。
这样的机制确保了数据的安全性,因为即使公钥被盗,攻击者也无法破解信息,因为他们没有私钥进行解密。
非对称密码学在安全通信中广泛使用,包括在线交易、电子邮件、VPN、数字证书等领域。
它是一种安全可靠的加密方式,可以有效地保护数据的机密性和完整性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一.非对称加密算法的描述
非对称加密算法:
非对称加密算法(asymmetric cryptographic algorithm)又名“公开密钥加密算法”,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。
算法介绍:
asymmetric encoding algorithm
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。
公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。
因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。
[非对称加密算法]
非对称加密算法:
另一方面,甲方可以使用自己的私密钥对机密信息进行加密后再发送给乙方;乙方再用甲方的公钥对加密后的信息进行解密。
[1]
甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。
非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要。
非对称密码体制的特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。
对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。
所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了。
这样安全性就大了很多。
算法起源:
W.Diffie和M.Hellman 1976年在IEEE Trans.on Information刊物上发表了“ New Direction in Cryptography”文章,提出了“非对称密码体制即公开密钥密码体制”的概念,开创了密码学研究的新方向。
工作原理:
1.A要向B发送信息,A和B都要产生一对用于加密和解密的公钥和私钥。
2.A的私钥保密,A的公钥告诉B;B的私钥保密,B的公钥告诉A。
3.A要给B发送信息时,A用B的公钥加密信息,因为A知道B的公钥。
4.A将这个消息发给B(已经用B的公钥加密消息)。
5.B收到这个消息后,B用自己的私钥解密A的消息。
其他所有收到这个报文的人都无法解密,因为只有B才有B的私钥。
非对称加密算法与对称加密算法的区别:
首先,用于消息解密的密钥值与用于消息加密的密钥值不同;
其次,非对称加密算法比对称加密算法慢数千倍,但在保护通信安全方面,非对称加密算法却具有对称密码难以企及的优势。
为说明这种优势,使用对称加密算法的例子来强调:
Alice使用密钥K加密消息并将其发送给Bob,Bob收到加密的消息后,使用密钥K对其解密以恢复原始消息。
这里存在一个问题,即Alice如何将用于加密消息的密钥值发送给Bob?答案是,Alice发送密钥值给Bob时必须通过独立的安全通信信道(即没人能监听到该信道中的通信)。
这种使用独立安全信道来交换对称加密算法密钥的需求会带来更多问题:
首先,有独立的安全信道,但是安全信道的带宽有限,不能直接用它发送原始消息。
其次,Alice和Bob不能确定他们的密钥值可以保持多久而不泄露(即不被其他人知道)以及何时交换新的密钥值
当然,这些问题不只Alice会遇到,Bob和其他每个人都会遇到,他们都需要交换密钥并处理这些密钥管理问题(事实上,X9.17是一项DES密钥管理ANSI标准[ANSIX9.17])。
如果Alice要给数百人发送消息,那么事情将更麻烦,她必须使用不同的密钥值来加密每条消息。
例如,要给200个人发送通知,Alice需要加密消息200次,对每个接收方加密一次消息。
显然,在这种情况下,使用对称加密算法来进行安全通信的开销相当大。
非对称加密算法的主要优势就是使用两个而不是一个密钥值:一个密钥值用来加密消息,另一个密钥值用来解密消息。
这两个密钥值在同一个过程中生成,称为密钥对。
用来加密消息的密钥称为公钥,用来解密消息的密钥称为私钥。
用公钥加密的消息只能用与之对应的私钥来解密,私钥除了持有者外无人知道,而公钥却可通过非安全管道来发送或在目录中发布。
Alice需要通过电子邮件给Bob发送一个机密文档。
首先,Bob使用电子邮件将自己的公钥发送给Alice。
然后Alice用Bob的公钥对文档加密并通过电子邮件将加密消息发送给Bob。
由于任何用Bob 的公钥加密的消息只能用Bob的私钥解密,因此即使窥探者知道Bob的公钥,消息也仍是安全的。
Bob在收到加密消息后,用自己的私钥进行解密从而恢复原始文档。
二.如何在PKI认证中心申请数字签名
RKI:(Public Key Infrastructure)是一个提供安全服务的公钥基础设施。
PKI技术采用证书管理公钥,通过第三方的可信任机构即认证中心CA,把用户的公钥和用户的其他标识信息(如名称、e-mail、身份证号等)捆绑在一起,在Internet网上验证用户的身份。
数字证书是公开密钥体系(PKI)的一种密钥管理媒介,是一种权威的电子文档,形同网络环境中的一种身份证,用于证明某一主体(如组织机构、人、服务器等)的身份及其公开密钥的合法性,又称为数字ID。
数字证书是由权威公正的第三方机构即CA中心签发的,以数字证书为核心的加密技术可以对网络上传输的信息进行加密和解密、数字签名和签名验
证,确保网上传递信息的机密性、完整性,以及交易实体身份的真实性。
流程:
4、如何申请证书?
从首页选择“用表格申请证书”。
如果证书“证书用途”选择“电子邮件保护证书”,“Email”必须填写实际使用的电子邮件地址,不能随便写,点击“保存”。