随着互联网络的快速发展,已经把现代社会和互联网完全融合在一起了,随之而来的各种消息途径都要经过互联网传播,各种商业机密以及个人保密信息都要在互联网传播,那么怎样保证信息的保密性成了IT界比较头疼的一件事,所以为了社会的需要就产生了对数据进行加密的一些算法,久而久之各种机密方式也随之诞生,所谓的加密方式分为三种:对称加密、公钥加密和单向加密,下面就来说一说各种加密方式。

(一)、对称加密

    加密和解密方使用同一个密钥,用来解决数据机密性,但是密钥通过何种方式传递给对方不容易实现;        

对称加密常见算法:

DES:Data Encryption Standard(数据加密标准),是56bit的,2000年前后被攻破了;

3DES:是DES的3倍;

AES:Advanced data Encryption Standard(高级数据加密标准),定长输出128bit;

AES256:定长输出256bit;

AES192:定长输出192bit;

AES512:定长输出512bit;

CAST;

BLOWFISH

TWOFISH

(二)、公钥加密

密钥是成对出现的,分别为Secret key(密钥)和Public key(公钥),公钥加密必须使用与其相对应的私钥进行解密,并且公钥是从私钥中提取出来的,有私钥可以知道公钥是什么,但是知道公钥是不能知道私钥的,公钥是公开的,而私钥是不公开的,但是公钥加密比对称加密慢3个数量级(1000倍),加密速度相当的慢,所以单独用此加密方式也比较困难;

公钥加密功能: 

1、密钥交换,也称为IKEInternet Key Exchange 互联网密钥交换;

2、数字签名,用于身份验证,防抵赖;

公钥加密常见算法:

RSA:既能加密也能签名;

DSA:数据加密算法,只能用于签名;

(三)、单向加密:

    不是真正来实现加密,而是用来提取数据特征码,验证数据完整性,他有雪崩效应((蝴蝶效应)即源数据有一点点不同,结果大不相同)和定长输出(通过单相加密后的结果长度一样)的特征;

单向加密常见算法:

     MD5:Message Degist由麻省理工学院人工智能实验室研发,固定定长输出128bit,md5sum是用来计算文件md5格式特征值的工具程序,也即是用来计算和校验文件报文摘要的工具程序

     SHA1:Secure Hash Algorithm 1,固定定长输出160bit;

     SHA256:长度越长变化越大;

     SHA512: 长度越长变化越大;

    上述三种加密方式中使用任何一种加密方式都不能完全达到高效率的加密功能,所以就要使用上述三种加密方式同时对数据进行加密,实现加密和解密的过程如下:

(四)、加密过程

1、发送方用单向加密算法计算数据的特征码;

2、发送方用自己的私钥加密这段特征码,并加在数据尾部;

3、发送方生成一个对称密钥;

4、发送方用此对称密钥加密数据和加密后特征码;

5、发送方用接收方的公钥加密这个对称密钥,附加在密文的尾部,并发送之;

(五)、解密过程:

1、接收方用自己的私钥解密加密过的对称密码;

2、接收方用密码解密密文;

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

4、接收方用同样的单向加密算法计算出原始数据的特征码;

5、接收方比较两段特征码;

    我们发现上述加密方式中严重依赖对方的公钥,而怎样才能确定是对方的公钥呢,所以这就需要有一个专门机构来确保公钥来源的合法性并给予对方一个数字证书,其实数字证书就像我们自己的***一样,而那个专门机构就像是给我们颁发***的公安机关一样,下面来说一下数字证书和CA(证书颁发机构)。

名词释义:

数字证书(Digital Certificate):包含证书拥有者信息及公钥还有CA的签名并且附加CRL(证书吊销列表)。

CA(证书颁发机构):对证书利用单向加密的算法提取证书数据的特征码,然后用自己的私钥加密特征码并附加在数据的尾部发送之;CA分为公共CA和私有CA两类。

PKI:Public Key Infrastructure 是实现现代互联网电子商务的核心框架,只是一种规范,其核心就是CA,还有密钥验证和密码交换机制,保证验证过程是可靠的。

SSL:(Secure Socket Layer)安全套接字层,在pcp5层模型中的AL(应用层)和TL(传输层)中间增加了半层就是ssl,其实ssl只是一种协议,需要靠其它软件来实现,这种软件在linux中最通用和流行的就是openssl,目前openssl软件版本有以下几种:

    ↘sslv1 已经废弃;

    ↘sslv2 目前再用;

    ↘sslv3 目前再用;

TLS:Transport Layer security(传输层安全)协议,最常用的是tlsv1版本(与sslv3同时代)

linux上常用的加解密的工具有两个:

1、gpg 实现rpm包签名比较常用;

2、openssl ssl的开源版本的实现,一共有一下三个组件组成:

   1)libcrypto 通用库;

   2)libssl 实现ssl和tls协议的;   

   3)openssl 多用途的加密组件;

    这里我们重点讲解openssl,openssl 是多用途的加密组件,命令行工具,其可以实现对称加密算法、非对称加密算法、单向加密算法、作为一个简单的CA (OpenCA),其依赖的配置文件默认在/etc/pki/tls/openssl.cnf中,也可以自己定义;openssl作为简单的CA其颁发的证书格式有x509(比较通用,定义了证书的格式,类似于pkcs#10),pkcs#12和pkcs#17定义了如何将证书存诸的格式;openssl也可以实现证书格式的转换。

openssl的常用工具: 

openssl passwd -1 -salt 12345678(随机数)系统验证密码,其中的-1表示采用MD5算法;

openssl enc -des3 -salt -a -in inittab -out inittab.sc 给文件加密(enc表示加密解密,-des3表示3DES对称加密算法,-salt表示自己加入杂质,-a表示ASCII码的输出,-in表示从哪个文件读入,-out表示把加密以后的文件保存到哪个文件中);

openssl enc -d -des3 -salt -a -in inittab -out inittab.sc  给文件解密并保存在另一个文件中;

openssl speed  测试所有加密方式的速度;

openssl speed MD5  测试MD5算法的速度;

openssl version  查看openssl版本或者用rpm -q openssl查看;

openssl genrsa -out key.pem 1024 生成一对密钥(生成的是私钥),并保存在key.pem文件中;

openssl req -new -key key.pem -out req.pem 生成证书签署请求;

openssl rsa -in key.magedu -pubout -out key.magedu.pub  对key.magedu提取公钥信息并保存到key.magedu.pub文件中;

(umask 077;openssl genrsa -out key.test 2048) 在子shell中执行,生成一个私钥,权限为600;

openssl md5 inittab.plain 表示以MD5格式显示inittab.plain密钥,也可以对某段字符串的特征码;

一、下面我们说一下使用openssl创建私有CA并实现数字证书签署的过程:

1、先自己发一证书;

2、某主机或用户自己生成证书颁发请求;

3、递交请求;

4、服务验证信息,并签署;

openssl CA实现一个简单的CA的步骤如下:

(1)、CA服务器配置文件的修改:

对其中的配置文件进行修改和创建

(2)、CA生成自签证书

(3)、上述CA服务器已经完成了自己生成自签证书的过程,下面演示其它主机的某一服务(这里用ftp服务为例)向CA服务器申请CA证书的过程:

(4)、其它主机完成将证书申请发送到CA服务器后,下面CA服务器就要给证书申请签署证书,签署完成后发给证书证书申请方,过程如下:

 

二、总结:


   上述过程就是使用openssl创建私有CA并实现数字证书签署的过程,鉴于作者记忆力和理解力有限,错误在所难免,希望朋友们给予指点,如有可能我们可以深入探讨。