首页 > 其他 > 详细

加密和解密基础知识、学习总结

时间:2016-01-07 18:32:21      阅读:358      评论:0      收藏:0      [点我收藏+]

加密和解密基础知识

 简介:

早期互联网,因为那时的电脑比较贵,用的人很少,当时的生产出的许多东西(如tcpftphttp等等)都没有考虑过安全的问题,直到出了安全问题时,人们才意识到安全的重要性,当时的”网景“公司专门为http研发了一种可被调用的安全模块,它位于应用层和传输层之间,只是占了半层,任何研发过程中调用它可以实现对数据加密和解密传输的安全性,用或不用都可以,这就叫做sslhttp调用ssl就变成了https,完成数据安全通信。

 

为了数据的保密性,我们不能被任何人截取你的数据、随意修改你的数据,设置数据的可用性:当你加密数据你必须能保证你要发送的人能解密能看。


ssl的工作流程

1.服务器认证阶段

1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;

2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;

3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;

4)服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。

2.用户认证阶段:

在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。




为了实现安全目标,需先了解以下攻击方式,安全技术等等:

 

一、互联网上有许多的不安全因素:

 1、攻击类型

    1)、威胁保密性攻击:

许多不怀好意的人攻击你公司数据库,反而威胁你要拿钱,不拿钱它就发到互联网上,破坏你公司的信誉,数据窃听:当今有不少的通讯软件,不怀好意的他们会专门窃听你通讯过程中出现的数据,就会知道你发送了什么。


    2)、威胁完整性的攻击:更改、伪装

比如你在淘宝上买了一件东西,那些不怀好意的人伪装成你,把你购买的数量改了下,那就惨了。


    3)、威胁可用性的攻击:拒绝服务

拒绝服务攻击(dos)在网络上很无解,它只要把你的宽带占了,网站就无法别人访问了。

 

  2、解决方案

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

加密和解密:加密之前是明文,之后是密文,是基于一种算法转化成另外一种形式,这就是加密,解密就是把密文转化成明文


    1)、加密和解密可分为

    传统加密方法:基于某种特定的规律,排列起来(比如用密码本解密等等)。

    现代加密方法:现代块加密方法:我们不是把数据一个一个加密的,而是把 整个数据切割成一片一片,单独进行加密,前块与后块之间加密有一定的关系。

 

    2)、用到的密钥算法和协议:

    对称加密

    公钥加密

    单向加密

    认证协议

 

linux系统来说为了实现上述功能及服务,我们通常需要一些上述功能的解决方案,通常有两种,第一种是opensslssl),第二种是GPGpgp),我们只说第一种,

 

  

  3、加密算法和协议:

1、对称加密:加密和解密使用同一个密钥,用户把数据加密发给别人,别人在用同样的密钥解密这就是对称加密

    常见的对称加密算法有:

    DES:date encryption standard

    3DES:triple DES

    AES:Advanced Encryption standard;(128bits,192bits,256bits,384bits)

    blowflsh

    twofile

    IDEA

    RC6

    CAST5

 

    特性:

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

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

    缺陷:

    1)、密钥过多 :于同一个人传输数据都有可能会发生密钥一样的情况,安全将不复存在

    2)、密钥分发困难 :如果访问网站的话,网站要给你发送密钥,传输过程中很难保证不被人窃取。


    单向加密:对数据生成数据特征码,放在数据的后面 

  三、实现方法


      1、公钥(非对称)加密:密钥分为公钥与私钥

公钥:公钥从私钥中提取产生,公开给所有人,pubkey

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

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

 

用途:

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

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

        公钥(非对称)加密技术是现代通信安全当中最为重要的加密技术之一,使早期互联网出现的问题得以解决


   2、公钥(非对称)加密有两重作用:

       1)、 私钥是留给自己,公钥所有人都可以得到,但是公钥和私钥都可以加密数据,因此有两种加密技术,第一种 例:比如有两个人相互通信ABAB的公钥加密数据发送给BB用自己的私钥解密,但是B不确认是不是A发给自己的,

       2)、A用自己的私钥加密数据发送给BBA的公钥解密,能确认是A发来的,但中间如果有人窃取的话,任何人都能对其解密。

    公钥(非对称)加密数据,速度太慢,一般把单向加密出来的特征码在进行公钥加密

总结:

例子

    如果两个人AB进行通信

    第一步:A先用单向加密,加密数据生成特征码

    第二步:之后A用自己的私钥加密特征码生成数字签名

    第三步:A在用一次性对称加密,加密整个数据

    第四步:AB的公钥加密刚才的对称加密密码,并把全部发过去

    第五步:接受到数据后B先用自己的私钥解密自己公钥加密的数据完成后得到对称加密密码

    第六步:B用对称加密密码解密数据,之后用A的公钥解密A的私钥进行身份认证

    第七步:B用单向加密,加密数据得出的特征码和接受过来的特征码进行比较数据的完整性,一样说明数据没被更改,反之亦然。

 

注意:这其中有个缺点:如果AB索要公钥,此刻有中间人接受这个请求的话,中间人把自己的公钥发给A,在伪装成AB索取公钥,如果BA索要公钥;中间人把自己的公钥发给B,中间人会转发AB相互通信的数据,也就是说AB的通信过程中所有数据都被中间人看了一遍,这就需要第三方的认证证书CA

公钥加密常用算法:RSA(能实现加密也能实现解密)、DSA(只能实现加密不能实现解密)、ELGAMAL

单向加密:即提出数据指纹;只能加密,不能解密

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

功能:完整性

常见的算法:

md5message digest 5,128bits

sha1secure hash Algorithm 1,160bits

 

    3、密钥交换:IKEinternet key exchange)

  1)、公钥加密

    DHdeffie-hellman)

公钥加密算法在网上传输容易被劫持了,一般我们都使用DH算法,

  注意:我们说的是上面我们用的是公钥加密

pki:公钥基础设施一共有4个组件组成

签证机构:CA

注册机构:RA

证书吊销列表:CRL

证书存取库


pki基础信息


2)、x509v3:定义了证书的结构以及认证协议标准

版本号

序列号

签名算法ID

发行者名称

有效期限

主体名称

主体公钥

发行者的唯一标识

主体的唯一标识

扩展

    CA会把前面的内容使用单向加密生成发行者的签名,并用私钥把数字签名加密,附加在证书后面。

    3)、总结:

    假如AB要相互通信,A收到B的证书,之后要验证证书的合法性:

    第一步:要用CA的公钥去解密CA证书的数字签名,  

    第二步:使用单向加密加密数据出来的签名和原来的比较,看下是否一样,一样就表示证书的完整性可靠

    第三步:检查证书的有效期限在不当前时间的范围之内,验证对方通信名称和CA上的主体名称是否相同,

    第四步:检查证书是否被吊销了

    第五步:检查通过之后A要把自己的证书发给BB就开始检查验证A的证书的合法性

    完成之后开下以下步骤:

    第六步:A先用单向加密,加密数据生成特征码

    第七步:之后A用自己的私钥加密特征码生成数字签名

    第八步:A在用一次性对称加密,加密整个数据

    第九步:AB的公钥加密刚才的对称加密密码,并把全部发过去

    第十步:接受到数据后B先用自己的私钥解密自己公钥加密的数据完成后得到对称加密密码

    第十一步:B用对称加密密码解密数据,之后用A的公钥解密A的私钥进行身份认证

    第十二步:B用单向加密,加密数据得出的特征码和接受过来的特征码进行比较数据的完整性,一样说明数据没被更改,反之亦然。


    四、SSL会话主要三步:

        客户端向服务器端索要并验正证书;

        双方协商生成“会话密钥”;

        双方采用“会话密钥”进行加密通信;

        SSL Handshake Protocol:

      第一阶段:ClientHello:

        支持的协议版本,比如tls 1.2;

        客户端生成一个随机数,稍后用户生成“会话密钥”

        发送支持的加密算法,比如AES、3DES、RSA;

        支持的压缩算法;

      第二阶段:ServerHello

        确认使用的加密通信协议版本,比如tls 1.2;

        服务器端生成一个随机数,稍后用于生成“会话密钥”

        确认使用的加密方法;

        服务器证书;

     第三阶段

    验正服务器证书,在确认无误后取出其公钥;(发证机构、证书完整性、证书持有者、证书有效期、吊销列表)

    发送以下信息给服务器端

        一个随机数;

        编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;

        客户端握手结束通知;

     第四阶段:

       收到客户端发来的第三个随机数pre-master-key后,计算生成本次会话所有到的“会话密钥”;

    向客户端发送如下信息:


      编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;

      服务端握手结束通知;




网景公司在1994年创造了ssl(secure sockets layer)

因为ssl是商业版的,国际标准委员会仿照ssl研发tls(transport layer security),与ssl基本兼容

 

因为sslv3版出现漏洞,谷歌浏览器禁止使用ssl,现在基本上ssl处于废弃状态,现在使用最多的是tls

tls协议简介

tls:安全传输层协议

安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面,与具体的应用无关,所以,一般把TLS协议归为传输层安全协议。

 

tls的分层设计

1、最底层:基础算法原语的实现,aesrsamd5

2、向上一层:各种算法的实现

3、在向上一层:组合算法实现的半成品

4、用各种组件拼装而成的各种成品密码学协议软件

上面这种好处是可以分别调用半成品,成品算法

 




linux私有CA的实现方法 

    一、openssl是开源的多用途工具:

          1)、openssl由三部分组成

                libencrpt库:用于实现加密解密的库

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

                openssl:多用途的命令行工具

 

         2)、使用openssl实现对称加密:

           对称加密:

    工具:openssl enc gpg

    支持的算法:3desaes,blowfish,towfish


 

单向加密:

工具:openssl dgstmd5sum,sha1sum...

 

dgst命令:

技术分享 

生成用户密码:

工具:passwdopenssl passwd

技术分享 

技术分享 

生成随机数:

工具:openssl rand

技术分享 

openssl rand -hex NUM

opensslrand -base64

公钥加密:

加密解密

算法:RSAELGAMAL

工具:openssl rsautl,gpg

数字签名

算法:RSA,DSA,ELGAMAL

工具:openssl rsautl,gpg

密钥交换

算法:DH

 

技术分享 

生成密钥:

技术分享 

提取公钥:

技术分享 

 

linux系统上的随机数生成器:

/dev/random:仅从熵池返回随机数;随机数用尽,阻塞

/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生产伪随机数,非阻塞

伪随机数不安全:

 

熵池中随机数的来源:

硬盘IO中断时间间隔;

键盘IO中断时间中断;

 

CA:

公共信任的CA,私有CA

建立私有CA

openssl

openCA:用于企业

 

openssl命令:

配置文件:/etc/pki/tls/openssl.cnf

 

构建私有CA

在确定配置为CA的服务器上生成一个自签证书,并为CA提供所需要的目录及文件即可

步骤:

(1)生成私钥: /etc/pki/CA/private/cakey.pem

技术分享 

(2)生成自签证书

技术分享 

-new:生成新证书签署请求

-x509:生成自签格式证书,专用与创建私有CA

-key:生成请求时用到的私有文件路径

-out:生成的请求文件路径;如果自签操作将直接生产签署过的证书

-days:证书 的有效时长,单位是day

(3)为CA提供所需的目录及文件

mkdir  /etc/pki/CA/{certs,crl,newcerts}

touch /etc/pki/CA/{serial,index.txt}

echo 01 > /etc/pki/CA/serial

 

要用到证书进行安全通信的服务器,需要向CA请求签署证书

步骤:

(1)用到证书的主机,生成私钥

mkdir  /etc/pki/CA/{certs,crl,newcerts}

touch /etc/pki/CA/{serial,index.txt}

echo 01 > /etc/pki/CA/serial

 

技术分享 

(2)生成证书签属请求

技术分享 

(3)将请求通过可靠方式发送给CA主机

(4)在CA主机上签署证书

技术分享 

查看证书中的信息:

openssl x509-in/etc/pki/CA/certs/httpd.crt -noout 0serial -subject

 

吊销证书:

步骤:

(1)客户端获取吊销的证书serial(在使用证书的主机执行)

openssl x509-in/etc/pki/CA/certs/httpd.crt -noout 0serial -subject

(2)CA主机吊销证书

先根据客户提交的serialsubject信息,对比其与本机数据库index.txt中存储的是否一致

 

吊销:

openssl ca -revoke/etc/pki/CA/newcerts/SERIAL.pem

其中的SERIAL要换成证书真正的序列号

(3)生成吊销证书的吊销编号(第一次吊销证书时执行)

echo 01 > /etc/pki/CA/crlnumber

(4)更新证书吊销列表

opensslca-gencrl-outthisca.crl

查看crl文件:

openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text



加密和解密基础知识、学习总结

原文:http://kening.blog.51cto.com/10985929/1732534

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!