加密解密技术基础及PKI

简介:

为了保证网络通信安全,就对其数据进行加密和解密,涉及了密钥分发;


网警公司为http协议通信安全研发了一个库,放在应用层和传输层中间,这个库就叫ssl安全的套接字层,ssl是一个库,是公共功能,加密解密也是协议实现的;

只要应用层的程序在研发时加入了调用ssl这个库,在通信时就会自动完成加解密,实现后续网络通信;

SSL: Secure Sockets Layer

 http --> ssl --> https

spacer.gifwKiom1cH69uCUOdSAAH8XHkJCMU062.png

http协议调用ssl后,就变成了https协议,两者实现方式差别很大,但是加密解密也带来了cpu的开销;


安全的目标:

  保密性:confidentiality

  完整性:integrity(不产生信息丢失)

     分为数据完成性和系统完整性

  可用性:availability


攻击类型:(被动攻击、主动攻击)

  威胁保密性的攻击:窃听、通信量分析;

  威胁完整性的攻击:更改(modification)、伪装()、重放(replaying)、否认(denial)

  威胁可用性的攻击:拒绝服务(DoS)

    ddos分布式拒绝服务攻击

    

解决方案:

  技术(加密和解密)、服务(用于抵御攻击的服务,也即是为了上述安全目标而特地设计的安全服务)


加密和解密:

  传统加密方法:替代加密方法(例如奇数字符后移3位,偶数字符前移3位)、置换加密方法

  现代加密方法:现代块加密方法

    (把数据切割正固定大小的块,对每一块进行加密,且块之间有关联)由置换单元、替换单元、异或运算单元、位移要素、对换要素等等一系列组成;例如把第一块加密后发给对方,再把第二块与第一块的一行运算发给对方,截取不到完整数据包也不可能查看数据,过程非常复杂;

wKioL1cH7SmD2MSKAAB65kKoCdc496.png

wKiom1cH7HrQ3HXgAADGKvoaUtc092.png


任何未加密的数据就是明文,加密就是使用某种算法转换成另一种形式的数据就称为密文;解密就是把密文使用解密算法,就得到了明文;所以加密安全性不能依赖于算法本身,而要依赖于参与者;算法是可能被人分析出来的;

wKiom1cH7LPwfu2DAAD7891WMpc336.png

通信对端通过何种方式拿到对端的密钥,就显得非常重要;


服务:

  认证机制

  访问控制机制


密钥算法和协议:

  就是为了解决密钥交换的服务;是在加密和解密、服务中用到的密钥算法和协议;

(1)对称加密算法:

(2)公钥加密(非对称加密)算法:

(3)单向加密算法:

(4)认证协议:


Linux系统:可通过OpenSSL(ssl协议), GPG(pgp协议)两种工具完成上述解决方案;

OpenSSL由三部分组成:

  libencrypto(加密解密)库:专门实现加密解密功能;

  libssl库:用于实现ssl安全通信机制的库;

  openssl多用途命令行工具


加密算法和协议:四种

(1)对称加密:加密和解密使用同一个密钥;加密算法和解密算法可能不同;

常见对称加密算法: DES、 3DES、 Blowfish加密算法、 Twofish加密算法、  IDEA、RC6、 CAST5

特性:

1、加密、解密使用同一个密钥;

2、将原始数据分割成为固定大小的块,逐个进行加密;

缺陷:

1、密钥过多;

2、密钥分发困难;


 (2)公钥加密:密钥分为公钥与私钥,成对儿出现;

 公钥:是从私钥中提取出来的;可公开给所有人;pubkey

 私钥:是通过工具创建的,使用者自己留存,必须保证其私密性;secret key;

特点:用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然;


公钥加密的工作原理:

每个密钥都成对儿出现,公钥加密有两重作用是数字签名和密钥交换,公钥的公开的,私钥自己留存,但是公钥和私钥都能用于加密和解密,就有了2种发送方式;第一种是通信双方即A和B,A发送数据给B,A使用B的公钥加密后发送给B,只能用B的私钥才能解密,当有C从中截取数据时,C也不能看的数据内容;

wKiom1cH7yGTiB3-AADC-1wRl7k522.png

如果B用私钥加密后发送给A,当有C从中截取数据时,C也能看的数据内容,因为公钥是公共的,能解密,这样加密的意义,在于验证发送者的身份验证;

wKiom1cH76aQc_2kAADZBRJE4MA267.png


公钥加密有两重功能,数字签名和密钥交换;


数字签名的实现原理:

就是验证发送者身份,公钥加密比对称加密的速度要慢很多,当文件很大时,会很浪费资源,只是为了进行身份验证,不会对整个文件进行加密,而是使用md5或sha1等单向加密算法对文件(加密)提取特征码,(单向加密特性是无论文件大小,加密后定长输出一般md5是128位输出,sha1是160位,还有sha256,sha384,sha256,sha512等),因此,B用自己的私钥加密这个特征码后,把文件和文件的特征码一并发送给A;

wKioL1cH896B9zwCAAD6ZmII8Ag756.png

,A收到后第一步先用B的公钥解密这个特征码,进行身份验证确认是A发过来的,第二步还能验证完整性,能解密出来得出特征码,A使用相同的单向加密算法计算文件的特征码,与解密出来的特征码进行比较,相同则认为数据没有被修改过,从而验证的了数据完整性;因此,这种方式能保证两个层面的验证即第一身份验证,第二完整性验证;

wKiom1cH80nQro_VAAEDup8pn2g630.png

但是数据的保密性没能保证,数据在传输过程中任何人都能看到,当然C也能看到甚至还能验证文件是B发送的,就是保密性没有得到保证;


为了增加保密性又多了一个机制:(见下图)

B要发送数据给A,B用单向加密算法先计算出数据的特征码,并使用自己的私钥加密这个特征码生成数字签名这就叫数字签名,即加密特征码的过程就是数字签名的过程;主要用于保证接收方能验证发送方的身份和数据完整性,但不能保证数据保密性;

下一步,B用对称加密算法(这个对称密钥是B自己生成的一次性对称密钥),结合密钥来加密整个数据(数据+特征码)成为密文,为了保证让A能解密,B用A的公钥加密这个对称加密的密码并附加在文件数据后面,发送给A;(用A的公钥加密的信息只能用A的私钥解密)

wKiom1cH9BnhqcaDAAIUtnxEtpE109.png

解密过程:

A收到密文后,先用自己与公钥配对儿的私钥解密这个文件,解密后得到密码,这个过程就叫密钥交换(用对方的公钥加密一个密码发送给对方,只有对方能解密这个密码);这个密码是用来实现对称加密和解密的密码,所以A就得到了密钥,继续解密这个数据(数据+特征码);

当在传输过程中C得到B发送给A的文件后,首先C没有A的私钥解密不了里面的密码,其次也没有对称加密密钥,就解密不了加密的数据;

wKioL1cH9cLDJ-UMAAHFz49iUzY970.png

从而A拿到文件数据后用自己的私钥解密密钥,用密钥解密数据,得到数据,然后用B的公钥来解密这个签名即特征码,验证身份,再用单向加密算法计算文件特征码与解密的特征码进行比较,进行完整性验证;

以上仅是点到点的通信机制;这样就保证了身份验证,完整性验证和保密性,三种加密算法全用到了:单向加密、对称加密、公钥加密;这个过程公钥加密算法的两种作用:身份验证,密钥交换;


梳理:

身份认证的实现:

发送方用自己的私钥加密数据特征码,接收方用对方的公钥解密,如果加密成功即可实现身份认证,因为公钥的成对出现的,私钥只有自己有,公钥所有人都有;


数字签名的实现:

在身份验证中就依赖到了数字签名,发送方用自己的私钥加密数据特征码这个结果就叫数字签名;

因此,数据签名就为了完成身份验证的;


密钥交换的实现:

自己先生成一个密码,要用对方的公钥加密这个自己生成的密码,然后发送给对方,只有对方能解密,对方解密出来的就得到密码了;所以就能使用这个密码来解密使用对称加密方式加密的数据了;

如AB双方要进行通信,不可能使用公钥加密数据来通信,因为公钥加密性能太差,安全性很高,双方要使用对称加密,双方拿到对方的公钥(密钥),取决于谁是客户端,谁是服务端;请求者拿到对方的公钥,自己生成一个密码用对方的公钥加密后,再发给对方,对方使用自己私钥解密即可,所以密钥就知道了,接下来整个通信过程就使用这个密钥来加密解密了;


总结描述整个过程:

B与A通信:

B加密数据,发送给A:

第一步:B先用单向加密算法计算出数据的特征码;

第二步:B用自己的私钥加密这个特征码,并将结果附加在数据后面;

第三步:B生成一个临时对称密钥,并使用对称密钥加密整个数据;

第四步:B获取A的公钥,并使用A的公钥加密这个临时的对称密钥,将结果附加在整个数据后发送给A;


A收到数据,解密:

第五步:A先用自己是私钥解密这个加密的对称密钥;

第六步:A用对称密钥解密整个加密的数据;

第七步:A用B的公钥解密数据的特征码;验证了B的身份;

第八步:A再用同样的对称加密算法计算数据的特征码,并与解密出来的特征码进行比较;验证了B发送的数据的完整性;从而使用这种手段保证了保密性和完整性还同时完成了身份验证;


以上过程存在一个巨大风险,如果C把自己的公钥提供给了AB双方,C伪装成B,让A认为C就B,这样A就把自己的公钥发送给C,C再伪装成A,让B认为C就A,B就把自己的公钥也发送给了C;这样AB双方的每次通信,都是经过中间的C看过一遍了,这叫做中间人攻击;因为AB双方无法相互确认对方的身份;


如何避免中间的环节;问题在于如何可靠获取对方的公钥环节上,就有了认证CA;

CA就是双方都认可的第三方可信机构;

A把自己的公钥提请给CA,由CA对这个公钥做一些特殊防伪技术处理后即称为证书,再发给A;以后任何人与A通信,A就把着这个经过CA加工过的公钥发给对方;

如B向A要公钥时,A就把证书(公钥)发给B,B会第一验证这个证书的内容是正常合法的,第二且是自己所信任的CA颁发的;以上两步得到验证即证书(公钥)得到验证;

证书里包括了拥有者的公钥,还包括拥有者各种信息;此时C要想冒充伪装成A或B,则不能成功;

找到信任的CA是重要的,那么如何验证CA;

证书中包括:拥有者名称、公钥、证书有效期,最重要的是CA会用自己的私钥加密这个证书的特征码,即数字签名;放在证书最后;

假如B收到A的公钥时,先用CA的公钥解密这个A的公钥特征码,还要用同样的加密算法计算特征码与之加密出来的特征码进行比较;一样则证明证书的内容没问题是可信的;

wKiom1cH9iKhgiJvAAJO0QFdh6k654.png


B如何可靠获得CA的证书;CA为了让别人能验证它所发的证书是CA所发的,所以CA把自己的公钥提请给每一个信任它的人;为了使得整个法则是完整的,所以CA就先给自己发了一个证书(包括CA的信息和CA的公钥);因此,只有拿到CA的证书才能获得CA的公钥,才能解密CA的签名,才能验证CA发给它人的证书;

所以,只有当面交易CA的证书才可靠;申请证书时CA要审查各种信息;CA在全球有很多从属关系,是有信任关系可传递的;有根CA,下面有很多派出CA信任关系可传递;

CA是让通信双方能够可靠的获取到对方公钥的一种基础保证机制;如果有人私钥丢失,向CA申请吊销证书作废;还有别人如何知道证书作废等一系列过程;


公钥加密用途:

  数字签名:主要在于让接收方确认发送方的身份;

  密钥交换:发送方用对方公钥加密一个对称密钥,并发送给对方,以实现密钥交换;

  数据加密:功能同数字签名;

                

公钥加密算法:RSA(是公司名、创建者首字母、算法名), DSA, ELGamal(商业算法)

  DSS: Digital Signature Standard:仅能实现签名;

  DSA:Digital Signature Algorithm:即能签名又能加解密;

            

(3)单向加密:即提出数据指纹(特征码);只能加密,不能解密;

特性:定长输出、雪崩效应;

功能:实现完整性验证;

常见算法:

md5:Message Digest 5, 128bits

sha1:Secure Hash Algorithm 1, 160bits

sha224, sha256, sha384, sha512

密钥算法:

密钥交换: IKE(Internet Key Exchange)

1、公钥加密:实现密钥交换;

  密钥是在网上发送的;

2、DH(Deffie-Hellman)算法

  不发送密钥就能使双方完成密钥交换;


(4)认证PKI:Public Key Infrastructure

公钥基础设施:包括四部分

  签证机构:CA

  注册机构:RA

  证书吊销列表:CRL

  证书存取库:

            

X.509v3:国际标准化组织定义了证书的结构以及认证协议标准,x.509有三版本;

  版本号:x.509的版本号;

  序列号

  签名算法ID:签名的使用算法;

  发行者名称:CA的名称

  有效期限

  主体名称:证书拥有者名称;

  主体公钥:

  发行者的惟一标识

  主体的惟一标识:证书拥有者

  扩展

  发行者的签名:CA的签名;


加入CA的通信过程描述:

A和B通信,检查证书:

通信之前双方都要获得彼此的公钥,因此事先要获得对方的公钥,协商使用加密算法;

双方要验证对方的公钥,第一,用CA的公钥解密CA的签名,能解密说明证书的来源可靠;第二,用同样的加密算法加密证书,计算出的特征码与解密出的特征码比较,相同说明证书的完整性可靠;第三,检查证书有效期;第四,验证主体名称是否为对方的名称;第五,检查证书是否被吊销;

注意:CA的证书是自己发的叫自签名证书;任何CA要想给别人发证书第一步先要给自己发证书,才能给别人发证书;

在不同主机间进程通信时,通过ssl加密,自动完成通信加密的,无需人工手动操作;


ssl的认证过程:

第一阶段:安全握手

1.客户端生成一个随机数RNc,并同client_hello信息发送给服务器端;

2.服务器收到后,会生成一个随机数RNs,并同server_hello信息发送给客户端;

此时双方都得到了对方的随机数;协商双方各自共同使用的算法,如;公钥加密算法、单向加密算法、对称加密算法、密钥交换的方法;

第二阶段:

3.服务器把自己的证书发给客户端;

4.并且请求客户端的证书;

5.客户端检查服务器的证书(检查证书的签发者CA、证书内容没问题、证书有效期、证书的主体名称是否一致、证书没有吊销、服务器端的公钥);

第三阶段:

6.客户端把自己的证书发给服务器端;服务器端还要检查客户端的证书(方式同上);

(一般客户端都没有证书,除非使用网银,要使用电子密码当证书来验证客户端)

7.都没问题,客户端把前面信息进行hash方式做计算,使用自己的私钥签名后发给服务器端;服务器端检查hash算法和签名;

8.都没问题,客户端生成随机的对称加密密钥(pre-master-secret)PMS,于是用服务器端的公钥(从证书中得到的服务器端的公钥)加密这个对称加密密钥后,发送给服务器端;服务器端用自己的私钥解密,得出密钥,服务器端就用这个密码加密客户端请求的网页内容,发送给客户端了;

第四阶段:

9.客户端请求通信结束,会话断开;

10.服务器端会话断开;

双方通信结束;











本文转自 crystaleone 51CTO博客,原文链接:http://blog.51cto.com/linsj/1761973,如需转载请自行联系原作者
目录
相关文章
|
29天前
|
存储 安全 算法
显微镜下的安全战!Python加密解密技术,透视数字世界的每一个安全细节
【8月更文挑战第3天】在数字世界中,数据安全至关重要。以一家处理大量敏感医疗信息的医疗机构为例,采用Python实现的AES和RSA加密技术成为了守护数据安全的强大工具。AES因其高效性和安全性被用于加密大量数据,而RSA则保证了AES密钥的安全传输。通过使用Python的`pycryptodome`库,可以轻松实现这一加密流程。此案例不仅展示了如何有效保护敏感信息,还强调了在数据加密和密钥管理过程中需要注意的关键点,为构建更安全的数字环境提供了参考。
36 10
|
1天前
|
安全 物联网 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享未来技术浪潮中的领航者:区块链、物联网与虚拟现实
【8月更文挑战第30天】在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的知识,帮助读者更好地了解网络安全的重要性,并提供一些实用的技巧和建议来保护个人信息和数据安全。
|
2天前
|
机器学习/深度学习 人工智能 安全
AI技术在医疗领域的应用及未来展望网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【8月更文挑战第29天】本文主要介绍了AI技术在医疗领域的应用以及未来的发展趋势。文章首先介绍了AI技术的基本概念和发展历程,然后详细介绍了AI技术在医疗领域的具体应用,包括疾病诊断、治疗建议、药物研发等方面。最后,文章对未来AI技术在医疗领域的发展趋势进行了预测和展望。
|
4天前
|
机器学习/深度学习 SQL 安全
网络防线的构建者与破坏者:网络安全漏洞、加密技术与安全意识的探索之旅深度学习中的图像识别技术:从理论到实践
【8月更文挑战第27天】在数字时代的海洋中,我们都是航行者。网络安全是保护我们免受风暴侵袭的坚固船体,而信息安全则是指引我们航向正确方向的灯塔。本文将带领读者深入理解网络安全漏洞的形成机制,探索加密技术如何成为我们的盾牌,以及为何提升个人和组织的安全意识至关重要。通过深入浅出的方式,我们将一起学习如何加固这艘船,确保它能在风浪中稳健前行。
|
30天前
|
安全 算法 数据安全/隐私保护
数据保护新纪元!Python加密解密技术,让信息安全飞入寻常百姓家
【8月更文挑战第1天】随着数字化发展,数据安全成为关键议题。Python以其易用性和强大的库支持,使得加密技术平民化。通过`hashlib`库实现的哈希加密确保数据完整性;利用`pycryptodome`实现的AES对称加密提供高效保护;而RSA等非对称加密则解决了密钥安全分发问题。Python让加密技术变得触手可及,助力守护每个人的数字世界。
42 2
|
16天前
|
安全 Nacos 数据安全/隐私保护
【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
49 0
|
2月前
|
算法 安全 搜索推荐
AES(Advanced Encryption Standard)是一种广泛使用的对称密钥加密算法,由美国国家标准技术研究所(NIST)制定。
AES(Advanced Encryption Standard)是一种广泛使用的对称密钥加密算法,由美国国家标准技术研究所(NIST)制定。
|
2月前
|
安全 网络安全 量子技术
云计算与网络安全:探索云服务中的信息安全技术网络安全的盾牌与剑:漏洞防护与加密技术的较量
【7月更文挑战第31天】在数字化时代,云计算的广泛应用带来了便利性与效率的同时,也对网络安全提出了新的挑战。本文深入探讨了云计算环境下的网络安全问题,包括数据保护、访问控制和身份认证等关键技术领域。通过分析当前云计算平台面临的安全威胁,本文提出了一系列针对性的安全策略和技术解决方案,旨在增强云服务的安全性。同时,文章还提供了一个代码示例,展示了如何在云环境中实施有效的安全措施。 【7月更文挑战第31天】在数字世界的无垠战场上,网络安全是守护数据边疆的盾牌与剑。本文深入探讨网络安全的两个核心领域——网络漏洞的识别与防御,以及加密技术的应用与挑战。通过分析近年来的重大安全事件、展示代码实例,并讨
20 0
|
2月前
|
存储 算法 安全
实现Java应用的数据加密与解密技术
实现Java应用的数据加密与解密技术
下一篇
云函数