linux下加密解密初探

加密明文-------密文————————》密文 解密

encryptiondecryption

加密是让数据从明文变成密文,传输过程中是密文,传送过去之后对方接收到的也是密文。

可以理解为密文就是乱码,看不出内在的任何意义,通常也都是逐位对应的。

在接收方接收到密文之后只有把它还原为原来的样子才可以理解对方说的具体是什么,此过程就叫做解密。

加密解密的特性,加密解密方使用的加密解密机制是不是相对应的?

双方使用的是同一种机制,只不过把将输入输出调换下位置,如下图

整体的机制是完全对应起来的!

此种加密就是加密和解密都使用相同的密钥加密解密称之为对称加密。

思考:对称加密的缺陷:有什么实现不了的功能?

要网络安全有三个关键目标:

1、机密性:一定要确保数据是保密的,传输过程中不会被那些非授权的用户获取到数据,而且还要确保数据的隐私性;

所以机密性主要包含两个概念;一个是数据的保密性、一个是数据的隐私性。

2、完整性:数据发送过去之后,要确保在接收方接收到的数据一定是没非法被篡改过的,一定是原原本本原来是的数据,是百分之百完完整整的。

3、可用性:确保系统能够工作迅速,对授权用户不能拒绝服务,知道密码的一方可以快速的还原为明文。

对称加密可以保证以上指标中的哪几项:

对称加密无法保证完整性。被截获了,随破解不出来里面的密文是什么,但是,截获者插入一些字符篡改内容,再发送给接收者;接收者在接收到被篡改的密文以后,解密出来,发现内容似乎没有什么意义,此时,怎样确定此密文就是自己信任的对方发送过来的呢?所以完整性是无法得到保证的。

现代计算机密码学中对称加密是通过分组加密来实现的,将要加密的明文数据按固定长度切分成N个组,最后一组数据量不够的时候,可能会补零,一定是大小相同的N个数据块,然后对每个数据块再单独加密;块与块之间异或以后发送结果,做异或计算,(两个操作数如果相同则为假,不同则为真),再做一次同样的异或即可还原为原来的数据了。

目前常用的加密技术:

早前NAST研究,美国官方发布的 DES(Data Encryption Standard)数据加密标准,使用56位长度的密钥,进行8轮置换,在最早被认为是最安全的。

2000年左右,被破解

            3DES

后来又发布了AES(Advanced  Encryption Standard)可根据需要分别采用128位,192位,256位等不同长度的加密方式;一般来讲AES本身指的是128位,每一位都可能会出现不同的写法,有可能是2n次方倍;

BobAlice互相通信,bob(使用对称加密的凡是将要发送的每一个数据先加密以后再发给Alice)发一封邮件给AliceAlice在收到邮件后必须使用同样的机制,使用同一个密钥来解密。

由此,我们通常所指的对称加密是使用加密算法来实现的,仍然在内部通过置换或者移位来完成的,只不过这个算法可能会非常复杂,但很多情况下,算法是公开的;所以无论你的算法有多复杂还是会被有心的研究者给破解的;万一一个算法被破解了怎么办呢?此前加密的数据就都宣布失效了!

由此,在加密的相关逻辑理论当中,加密与否,加密的可靠性不能依赖于算法,而要依赖于密钥。

我某一次的加密被破解了,只需要更换密钥,而不需要更换算法。

由此,事实上,安全性不依赖于算法,依赖于密钥。

DES来说,DES算法都是公开的,任何人都可以得到,但是,只是在同一个算法上,我多加了一串密钥,你想通过算法,哪怕对算法研究的非常的透彻,你只要不知道密钥,那么你就不可能把它还原回来,或者很难把它还原回来!除非通过暴力的***,比如穷举等,以及字典***等等

所以,bobAlice为了实现通信。

Bob可能会选择一种算法,这种算法可能会大家都知道,因为算法是公开的吗,对吧?但是bob还选择了一个密钥,此密钥一定是只有bobAlice两个人才知道,于是bob加密完之后发给AliceAlice使用同一个密钥解密就可以了。

那么,这个爱窥探别人隐私的家伙eve由于不知道密钥,也只能干瞪眼了哦!哈哈!但eve可以破坏,因为双反发的信都要经过eve这里,这里假设eve是网络管理员,负责管理所有的核心交换路由、以及各个服务器,也就意味着eve可以捕获所有他所管辖的这些设备上的任何报文;eve这个家伙捕获到报文以后虽然看不到里面的内容,但是可以修改,于是eve随便修改了几个字符串,那里面的内容是不是已经改变了。

此外,eve还可以把加密后的数据复制一份,复制一份没事就给Alice发一份,一天发个百八十次,而且还可以冒充bob去发

此乃是第一个缺陷;

假如bobAlice是商业合作伙伴,经常发送一些机密合同之类的,某一天Alice拿着一个百万美金的合同订单,找到bob要求支付现金,bob说此合同订单不是他发的;Alice说这不是你的订单吗?还是用此密码加密的,那么 ,bob如何证明此订单不是bob发送的?

加密算法双反都有,密钥又都是同一个

Alice拿着密钥加密非得说是bob发的,那么,bob如何证明此合同订单不是他发的呢?无从证明啊!!!!!!

在网上购物也是一个道理啊,过几天京东或者淘宝给寄来了一个电视,然后告诉你这是你网上订购的,请你付款;然后你说你没有订购,怎样证明自己没订购呢?

所以,简单的对称加密,这些问题都解决不了

这是两个本身的问题,再考虑两个外在的问题

假如说bob这个家伙,交友比较广泛,他希望每次和别人发邮件时都是加密的,于是有了alice1Alice2Alice3

那么,bobAlice1通信的时候使用一个密钥,对吧?

Alice2通信的时候使用同一个密钥吗?如果使用同一个密钥的话,那么,是不是意味着Alice1Alice2可以彼此知道发信的内容????

想象一下,如果bob要和50个人通信,是不是意味着bob自己要维护50个密码?

如果Alice1也要和50个人通信呢?是不是又是50个密码啊?

那么,如果每个人都是如此,该怎么办呢?

在一个小圈子内大家都需要维护自己的密钥,那么整体上要维护多少个密钥呢?

慢慢的会发现,是不是单单记住这些密码,都已经焦头烂额了啊?呵呵

怎么办?记在记事本上,如果记事本被拿走了呢?

只有一个办法,把记事本加密只记住记事本的密钥!前提是记事本要靠谱才行啊!

第二个外在问题,

两个素不相识的人,是在某个网络上认识的,怎样确保两个人之间的第一次通信是加密的,而且加密的密码双方都能知道?但是没有其他第三方的人知道?

第一次发送内容是不能加密的!一般邮件也是明文的哦!

最传统意义上的加密方式,通过置换或者移位,虽然在很长一段时间内虽然占据了主流的数据安全通信,但是对称加密本身具有很多潜在的问题没有得到解决,直到非对称加密的诞生。

非对称加密:数学函数

首先要知道的是非对称加密和对称加密是两个完全不同的概念。

对称加密是通过置换或者移位来实现的,而非对称加密完全是通过数学函数计算得来的结果。

飞马小定理,欧拉定理:

略。。。。。。

非对称加密机制:

非对称加密:通信双方每一个人都选择一对密钥,一组密钥,称之为私钥和公钥。

这两个密钥里面一定是有一个是私有的,不能让任何人知道的。

一个是公开的,可以让任何人知道的。

那么,哪一个是公开的?哪一个是私有的呢?

完全可以自己决定的!

一般来说最先生成的那个都叫做私钥,假设私钥只能是自己才能知道的。私钥称之为 security key 简称为S

与之配对的叫做公钥,称之为public  key简称为 P

对于非对称加密来讲,由于是基于数学函数来设计实现的,公钥是从私钥中提取出来的,也就意味着只要有私钥即可,拿着私钥就能得到你的公钥,所以说一般来讲私钥是私有的,让公钥保密意义不大。

一般常用的场景是:要么是私钥私有,公钥公开;

要么是私钥也私有,公钥也私有。

在非对称加密算法里面有一种特定的机制:使用私钥加密的数据,私钥不能解密,只能使用与之配对的公钥解密;反之,如果是用公钥加密的数据,只能用与之配对的私钥解密。

思考:公钥是公开的,用公钥加密有什么用呢?

Bob alice

Bob使用自己的私钥加密数据,发到互联网上谁都能解密,因为谁都能得到bob的公钥,那么,这样还有意义没有?相当有,使用自己的私钥加密,虽然人人都能解密是没错,但是,解密的前提是只有拿到只bob的公钥才能解密;就说明:只要能用bob的公钥来解密那就一定是bob加密的,对吗?验证了这个数据一定是来自于bob的,实现了身份验证,至少能确保加密方一定是bob.

BobAlice的公钥加密, 用Alice的公钥加密,加密之后放到互联网去谁都能得到一份,但是只有Alice能解密,数据机密性得到保证,确保了数据的机密性。

性能对比:三个数量级,103次方,所以非对称加密很少用来加密大段数据,只是用来加密很小一部分数据的。

比方说加密密码

非对称加密的功能:身份验证、机密性、密钥交换

非对称加密一般只用来加密口令之类的

单项加密:只能加密不能解密,仅支持从明文到密文。

单项加密的意义,单项加密的主要功能在于数据完整性,提取数据的特征码也叫做指纹信息的,是一种hash计算,也成为散列计算,无论你的数据有多大,单项加密的输出是定长的。

特性:

1、定长输出 MD5 128位,用128除以4看到的就是字符串的长度;128位表示它能表示2128次方种变化; sha1 160位; sha 256位 ;sha 512位。

2、雪崩效应,输入数据的微小改变,会引起结果的巨大改变,因此避免了根据输出来推断输入的破解的可能性。也就意味着只要输入相同,在同一种算法下,输出一定是相同的。只要输入相同输出就相同;所以单项加密主要用来保证数据完整性。

怎么保证呢?

单项加密保证数据完整性: 发送方,使用单项加密算法,加密一段数据后,提取出来特征码,填补在要加密的发送数据的尾部,然后发送过去。

那接收方呢?如何验证数据有没有被改动过呢?

接收方在收到数据以后重新使用与发送方同样的算法计算出特征码并比较计算出来的特征码和对方发过来的特征码是否一致,问题是,特征码放在后面别人也可以随意改变啊,呵呵呵?????

不管怎么说,单项算法还是能够保证数据的完整性的。

前提是必须要有可靠的手段将特征码发给对方。

对方再重新计算,只要两个特征码一样,就认为数据就没被别人篡改过。

问题是如何保证特征码能够安全送达呢?

如何保证?

特征码就特别小了啊,就简单了啊!加密!需要注意的是特征码加密的目的不是让对方解密不了,而是让别人改不了!

身份验证:发送方,使用自己的私钥加密,保证对方能够验证我的身份,只要用bob的身份能解密就说明一定是bob加密的。

身份验证:发送方使用自己的私钥加密特征码再发送,一方面既保证了特征码不会被篡改,一篡改对方就一定知道;另一方面保证了接收方能够验证发送方的身份。

数字签名发送方使用单项加密取得特征值并使用自己的私钥加密整段数据特征码的操作就叫数字签名。

dh

总结:加密方式通常有三种

1、对称加密是一种:常用算法:DES3DESAES

2、加密解密使用同一个密钥

功能:通常只用来保证机密性

非对称加密(公钥加密)数学函数,加密解密采用同一组的密钥和私钥。

非对称加密常用算法:RASDSSECC椭圆曲线算法(目前还没得到广泛的应用)

非对称加密为了保证安全性,通常密钥都非常长,非对称加密的长度从512位、768位、1024位、2048位、4096位、8192位不等;

RSA为了提升安全性,不断提升支持的密钥长度这种方式来提高安全性;由此也对系统的性能提出了更高的要求,RSA此种加密技术的发展似乎遇到了瓶颈。

随之而来的出现了ECC,也就是所谓的椭圆曲线算法;理论上比RSA的安全性要高,但目前还未在实际的生产环境中占领一席之地。有待时间的验证。

各个算法功能和特性又有所不同:

单项加密:(提取数据特征码,只能由明文计算出密文)

功能:保证数据完整性

常见的算法:MD5SHA1(安全hash算法)SHA2SHA256SHA512SHA3(目前最新的)

非对称加密的主要功能:身份验证、密钥交换、机密性

数字证书、CAPKI

IKEDH(算法)不能防中间人***

素数、原根

数字证书:

1、发送方使用选定的单项加密算法计算原始数据的特征码

2、发送方使用自己的私钥加密特征码附加于原始数据后

3、发送方生成一次性对称密钥,并使用密钥加密数据(原始数据+加密后的特征码)

4、发送方使用接收方的公钥加密一次性对称密钥,附加于加密数据后面

5、发送

1、接收方使用自己的私钥解密加密的一次性对称密钥

2、使用对称密钥解密数据,得到加密的特征码和原始数据

3、使用发送方的公钥解密加密的特征码;

4、使用与发送方相同的单项加密算法重新计算数据的特征码,并与解密出的特征做比较

         公钥分发:如何完成公钥的分发呢?

数字证书:X.509V3通常包含:

1、证书版本号version

2、序列号(证书本身在CA中的唯一标识)

3、签名算法标志(CA要对证书签名)

4、发行者名称(CA自己的名称)

5、有效期(关键内容,起始日期和终止日期)私钥丢失了怎么办?

6、证书主体名称:此证书公钥的所有者,两类:(组织(主机)个人)服务器证书和个人证书

7、证书主体公钥信息(最关键信息)

8、发行商唯一标志(签证机构)

9、证书主体的唯一标志(ID)

10、扩展信息

11、签名(证书颁发机构的签名)

思考:作为用户、作为组织来讲,如何去获得一个证书,去哪里获得证书呢?

发证是CACA要接受用户申请、并验证用户身份、

要想完成证书颁发,首先要有证书注册机构、其次要有证书吊销机构、还要有证书签名机构。

证书颁发:签证、注册、吊销三个核心

组合起来是一个强大的机构,证书是一个体系

证书是链式结构。

  PKI的组成:public Key Infrastructure管理实体

0、端实体(证书使用者)

1、注册机构(RC)

2、签证机构(CA)---->签证机构(CA)完成交叉信任

3、证书撤销列表(CRL)发布机构

4、证书存取库

PKI是一种规范。

证书的应用场景:

网上银行:web、专用C/S组件,http明文

远程登录:telnet,明文

Smtppop3imap4明文

ssl/tls:工作在OSI模型第四层和第五层之间的,对于底层的报文是不能提供加密的。

加密方法的使用:

***:二层***、三层***

远程登陆SSH协议:

先说SSL

SSL Secure socket layer  是一种协议,网景公司开发。

http:80/tcp https: 443/tcp

ftp:21/tcp ftps:  

Smtp:25/tcp  smtps:465/tcp

Pop3:110/tcp pops:995/tcp

Starttls:在同一个端口上根据用户的请求和用户的特性来决定是否需要加密通信。

关于版本:V1V2版本已经被废弃,现在常用的是V3

Tls V1

SSL会话的建立:

https:会话的建立

http协议是基于tcp的,也就意味着双方要想建立通信,必须要先三次握手;握手结束之后由于http使用了ssl,所以真正进行http报文发送之前,双方必须先建立SSl会话;

首先客户端发送一个“hello”、服务器端也发送一个类似“hello”信息以确认对方的存在,确认是否能够通信;确认双方的公共的通用的加密算法是否一致等等一系列满足通信的条件。

服务器端发送自己的证书给客户端(为了后续的加密通信和密钥交换)

客户端验证服务器端的身份、验证通过客户端生成一次性对话密钥,使用对方的公钥加密之后发送给服务器;

所以服务器端就有密码了;

服务器端就可以拿着密码加密网页文件并发送给客户端了。

客户端拿到网页文件以后一定是加密过的,是密文的,然后使用之前生成的对称密钥去解密网页文件;只不过对用户来说这一切都是透明的而已!

那么,服务器端需要客户端的证书吗?

一般是不需要的!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章