加密解密技术基础及PKI

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:

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


网警公司为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,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
存储 安全 数据安全/隐私保护
Codota的数据加密技术包括静态数据加密和传输中的数据加密
Codota的数据加密技术包括静态数据加密和传输中的数据加密
49 4
|
2月前
|
存储 安全 算法
C#一分钟浅谈:数据加密与解密技术
【10月更文挑战第3天】在数字化时代,信息安全至关重要。数据加密作为保障信息不被未授权访问的有效手段,通过特定算法将明文转换为密文,确保即使数据被截获也难以解读。本文从基础概念入手,介绍C#中实现数据加密的方法,涵盖对称加密(如AES、DES)与非对称加密(如RSA),并通过具体示例代码演示如何使用`System.Security.Cryptography.Aes`类完成AES加密和解密过程。此外,还强调了密钥管理及安全策略的重要性。
87 4
|
2月前
|
安全 测试技术 Go
Python 和 Go 实现 AES 加密算法的技术详解
Python 和 Go 实现 AES 加密算法的技术详解
145 0
|
3月前
|
存储 安全 算法
RSA在手,安全我有!Python加密解密技术,让你的数据密码坚不可摧
【9月更文挑战第11天】在数字化时代,信息安全至关重要。传统的加密方法已难以应对日益复杂的网络攻击。RSA加密算法凭借其强大的安全性和广泛的应用场景,成为保护敏感数据的首选。本文介绍RSA的基本原理及在Python中的实现方法,并探讨其优势与挑战。通过使用PyCryptodome库,我们展示了RSA加密解密的完整流程,帮助读者理解如何利用RSA为数据提供安全保障。
150 5
|
3月前
|
存储 安全 算法
显微镜下的安全战!Python加密解密技术,透视数字世界的每一个安全细节
【9月更文挑战第7天】在数字世界中,数据安全至关重要。Python加密解密技术如同显微镜下的精密工具,确保信息的私密性和完整性。以大型医疗机构为例,通过AES和RSA算法的结合,既能高效加密大量医疗数据,又能安全传输密钥,防止数据泄露。以下是使用Python的`pycryptodome`库实现AES加密和RSA密钥交换的简化示例。此方案不仅提高了数据安全性,还为数字世界的每个细节提供了坚实保障,引领我们迈向更安全的未来。
45 1
|
4月前
|
存储 安全 算法
显微镜下的安全战!Python加密解密技术,透视数字世界的每一个安全细节
【8月更文挑战第3天】在数字世界中,数据安全至关重要。以一家处理大量敏感医疗信息的医疗机构为例,采用Python实现的AES和RSA加密技术成为了守护数据安全的强大工具。AES因其高效性和安全性被用于加密大量数据,而RSA则保证了AES密钥的安全传输。通过使用Python的`pycryptodome`库,可以轻松实现这一加密流程。此案例不仅展示了如何有效保护敏感信息,还强调了在数据加密和密钥管理过程中需要注意的关键点,为构建更安全的数字环境提供了参考。
47 10
|
4月前
|
存储 安全 算法
|
4月前
|
安全 开发者 数据安全/隐私保护
Xamarin 的安全性考虑与最佳实践:从数据加密到网络防护,全面解析构建安全移动应用的六大核心技术要点与实战代码示例
【8月更文挑战第31天】Xamarin 的安全性考虑与最佳实践对于构建安全可靠的跨平台移动应用至关重要。本文探讨了 Xamarin 开发中的关键安全因素,如数据加密、网络通信安全、权限管理等,并提供了 AES 加密算法的代码示例。
72 0
|
4月前
|
安全 物联网 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享未来技术浪潮中的领航者:区块链、物联网与虚拟现实
【8月更文挑战第30天】在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的知识,帮助读者更好地了解网络安全的重要性,并提供一些实用的技巧和建议来保护个人信息和数据安全。
|
4月前
|
安全 算法 数据安全/隐私保护
数据保护新纪元!Python加密解密技术,让信息安全飞入寻常百姓家
【8月更文挑战第1天】随着数字化发展,数据安全成为关键议题。Python以其易用性和强大的库支持,使得加密技术平民化。通过`hashlib`库实现的哈希加密确保数据完整性;利用`pycryptodome`实现的AES对称加密提供高效保护;而RSA等非对称加密则解决了密钥安全分发问题。Python让加密技术变得触手可及,助力守护每个人的数字世界。
68 2

热门文章

最新文章