Linux之加密解密基础技术

    

    下文主要介绍了什么是加密解密;为何要用到加密解密技术;加密解密技术能够为我们带来什么样的好处;常见的几种加密解密技术介绍以及Linux中的openssl。



一、什么是加密,解密

    加密技术是一种常用的安全保密手段,利用各种技术手段把重要的数据进行加密传送;再用对应的技术手段进行解封,该过程的逆过程就称为解密。这里用一个不太恰当的例子说一下:也就好比你去办一张银行卡,需要你设置一个密码,就可以理解成在为这张银行卡做一个加密的操作;用银行卡到提款机取钱需要你输入密码,这就是一个解密的操作。



二、为什么我们需要用到加密,解密技术?

    因为在互联网日益普及的今时今日,产生出大量的个人数据或者企业数据;又或者主机之间进行的通信,数据的传输等等操作都面临着如窃听、通信流量分析,DOS***等等;所以我们需要一些手段来面临这些威胁。


三、加密技术的目的:

    机密性:也就是数据保密

    身份认证:鉴定消息的来源进行身份确认

    完整性:接收者能够验证在消息传送过程中是否被更改


四、加密,解密技术介绍:

    1.类别:

        传统加密方法:使用密码算法,一般是一些数学函数

            缺陷:受限制,大家都必须知道加解密算法

        

        现代加密方法:使用密钥来进行数据加密,加密和解密都使用一个密钥,运算都依赖于密钥;数据传输过程中为密文。算法强大:仅知道密文很难破译出明文



    

     2.密钥算法:

    

        (1) 单向加密:计算一段数据的特征值,加密过程不可逆

            特点:输入数据有一点点不同,结果会有变化

                输入的数据无论多长,输出的结果都是一样长度

            目的:数据完整性的校验

            算法:

               MD5:message digest,128bits

               SHA(1)家族:secure hash algorithm 安全的哈希算法,输出结果固定长度160bits;sha224,sha256,sha384,sha512



          (2) 对称加密:加密方和解密方都使用同一个密钥,又称单钥加密

            优点:安全性高

               加密解密速度快

            缺点:

                随着网络规模的扩大,密钥过多导致管理困难

                密钥分发困难,无可靠手段发送至对象

            算法:

                   DES:数据加密标准,使用56bits的密钥长度

                   AES:高级加密标准,使用128bits、192bits、256bits、384bits密钥

                3DES:DES的加强版,对原有数据加密三次,3*56bits密钥长度

                Blowfish

                Twofish

                RC6

                IDEA

                CAST5

        


         (3) 非对称加密:加密密钥与解密密钥不同    

                公钥:根据私钥生成,可公开

                私钥:工具创建,自己留存

            优点:不需要通过安全通道传输密钥

            缺点:算法复杂,加密速度慢 

               用法:

                1. 数字签名:发送方以自己用工具生成的密钥进行加密,接收方用发送方密钥对应的公钥进行解密;可以确认发送方的身份。


                2. 密钥交换:发送方用接收方公钥加密一个对称密钥,并发送给对方,保证数据保密性、完整性。下面是加密、解密的步骤:

                    加密(发送方):

                        第一步:单向加密算出特征码

                        第二步:用自己的私钥加密特征码

                        第三步:用双方协定好的算法计算出对称密钥并加密整个数据            

                        第四步:用接收方的公钥进行加密



                    解密(接收方):

                        第一步:用自己的私钥解密

                        第二步:用双方协定好的算法计算出对称密钥并解密

                        第三步:用发送方的公钥获得特征码

                        第四步:计算特征码进行比较


            

以上是对加密解密的一个简单的介绍,在下面的内容中我会继续提到 PKI, SSL, TSL以及OpenSSL


    PKI: Public Key Infrastructure公钥基础设施;PKI为电子商务交易提供一套安全基础平台的技术和规范。PKI基础设施采用证书管理公钥,通过CA认证中心把用户的公钥和用户的其它标识信息集合在一起,保证公钥的可靠性传输。PKI把公钥密码和对称密码结合起来,实现密钥的自动管理。

        PKI的组成:

            证书机构CA:颁发管理证书

            注册机构RA:接受用户申请并提交给CA,是CA和用户之间的桥梁

            证书吊销机构CRL:提供被吊销的证书列表

            数字证书库:存储已签发的证书及公钥,用户可由此获得所需的其他用户的证书及其公钥

        PKI的基础协议:X.509,用于定义一个规范的证书格式

            用户公钥

            版本号

            证书序列号

            CA标识符

            证书有效期

            签名算法标识   

            签发者名称

            用户标识

            ...


    SSL:Secure Sockets Layer安全套接层;使用公钥和私钥为网络通信提供安全性及数据完整性的一种安全协议。广泛适用于Internet上的身份认证与Web服务器和客户端浏览器之间的数据安全通信;如:http+ssl=https

        

        版本:v3.0

        特性:

            1.机密性:在握手协议中定义了绘画密钥后,所有的消息都被加密

            2.可靠性:服务器和客户端都会被认证

            3.完整性:SSL协议会对传送的数据进行完整性检查

        位置:介于应用层和TCP层之间;也就是说应用层数据不再直接传递给传输层,而是传递给SSL层,SSL层对从应用层收到的数据进行加密,并加上自己的SSL头。

            

            4.SSL会话流程

            wKiom1aQszDS7lO9AABWLtkPRJU543.png


    TLS:Transport Layer Security安全传输层协议;用于在两个通信应用程序之间提供保密性和数据完整性。TLS的主要目标是使SSL更安全,并使协议的规范更精确和完善。

        版本:1.3

        实现于:OpenSSL

            





    OpenSSL:OpenSSL是一个强大的安全套接字层密码库,包括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议。

    

    OpenSSL工具使用:

        1.对称加密算法、命令:

            算法:AES、DES3、Blowfish、CAST、TDEA、RC2

            命令:openssl enc

                示例:用DES3算法加密文件Mageedu.txt并将结果输出到log.txt

                   wKioL1aQ8Dfgu9ngAAAg_9lrc70482.png 

            






         加密后的结果:

         wKioL1aQ8G-hc0LJAAAJVdkgH7k463.png


        2.非对称加密算法、命令:

                加密解密:

                算法:RSA

                命令:openssl rsautl

            数字签名:

                算法:RSA,DSA

                命令:openssl genrsa | gendsa

            密钥交换:

                算法:DH

                命令:openssl dhparam     

            示例:

                一、DSA应用例子

                  1. 生成1024位DSA参数集,输出到文件dsatest.pem

                 wKioL1aQ9jzBjVBvAAAeW54rGZk040.png

                      

                

       





                  2. 使用参数文件dsatest.pem生成DSA私钥并用des3加密后输出到dsakey.pem

                wKiom1aQ-vaCQGTAAAAcOmlVCEg624.png

                

       





                  3. 使用私钥dsakey.pem生成公钥,输出到dsapulic.pem

            wKiom1aQ-4rzdfolAAAn3__6FuA063.png

        









                  4. 读取dsakey.pem公钥

            wKioL1aQ_B6Ba5gpAACHe09any0962.png

    

        












        


                二、RSA应用例子:

                    1. 创建1024位的RSA私钥

                wKioL1aQ_UCQ2GfiAAAatWH2-1Q998.png


        






                    2. 提出公钥输出到rsapulic.pem

            wKioL1aQ_dGD2AHxAABHFpGVZAo478.png 










                    3. 用公钥加密test.txt文件并输出到rsatest.txt

            wKiom1aQ_nexgoLFAAARei84MI4556.png

            




        


                    4. 使用私钥对rsatest.txt文件解密并输出到文test1.txt

         wKiom1aQ_xaQSdFuAAAWSZ3VqNo460.png






        3.信息摘要算法、命令:

                算法:MD5、SHA系列

             命令:openssl dgst

                示例:

                    1. 用MD5计算test.txt文件的值并输出(默认为输出至标准输出)

                   wKioL1aRAGWiVCWQAAATLugXK5E654.png

                    


    

        



                    2. 用SHA1计算test1.txt文件的值并输出至log.txt文件

                 wKiom1aRAOPSp7GvAAAX1os7HtE486.png


            





        4.密钥和证书管理命令:

            提供产生公开密钥对和对称密钥的方法,以及建立私有CA,管理CA的功能

           

          下面我用一个建立私有CA的示例来简单介绍下相关的命令:

        

             第一步:生成私钥放在/etc/pki/CA/private/xxx 目录下

            wKioL1aRFFCjeDMlAAAgwNNVHKo781.png

                    

            

            第二步:生成自签证书         

         wKiom1aRBmHTMMWUAABmnPUW9O8303.png














                        


                 选项:

                    -new:生成新的自签证书请求

                    -x509:生成新的自签证书格式

                    -key:生成自签证书需要的私钥路径

                    -out:输出路径

                    -days:证书有效期指定


            第三步:为CA创建相关目录和文件

         wKiom1aRB-uwI7sDAAAxzCxrJCM315.png








                            wKiom1aRCFqTaQtGAAAJcC9vQxM002.png

                




        客户端申请证书步骤:

            第一步:创建目录,生成私钥

            wKiom1aRCX-gXLXZAAAxtZWBzN0829.png     










            第二步:生成自签署证书请求

         wKioL1aRC1uSrNjVAABjWaC7ImY822.png

















            与CA服务端配置格式一样


            第三步:将证书请求发送给CA服务端

                在这里我用scp命令从服务端直接复制过来:

            wKioL1aRDJmQceA9AABxm2SyLzQ788.png















            第四步:在CA服务端签署证书

         wKioL1aRFbuStstSAABu2QuZ3k0575.png

            

            查看生成的证书:

        wKiom1aRFbngd6VyAAAy3A-7Tjw041.png











以上就是创建私有CA的全过程