数据加密、数字签名,CA制作

数据安全->加密

1.基础概念:

机密性:防止他人拿到数据

完整性:数据不被破坏

身份验证:保证数据的来源

PKI(public key infrastructure):公共的密钥基础设施。

协商生成密码:密码交换(Interne Key Exchange,IKE)

Diffie-Hellman协议(这是一种安常见的IKE)

原理;

A 和 B 进行协商:选择两个数字p, g (大素数,生成数)

A: 自动产生随机数字x

B: 自动产生随机数字y


A: 计算g^x%p 发送到B

B: 计算g^y%p 发送到A


此时在网络上传输的数据有:g, p, g^x%p, g^y%p

这是不能够找出x和y的。


A:计算(g^y%p)^x=g^yx%p

B: 计算(g^x%p)^y=g^xy%p

此时的g^yx%p就是双方的密钥,但是谁也不知道究竟密钥是多少。


2.机密性:

对称加密:加密和解密的用的都是一把密钥。

特点:加速速度快

缺点:由于不同的会话之间都是要用到不同的密钥,所以维护的密钥过多。

实现:

DES:Data Encryption  Standard 56bit加密(这个已经不常用了)

3DES:经过三次的DES

AES:Advanced Encryption Standard 这个有很多的变种,例如AES192 AES256

BlowFish:这个是要收费的。

3.完整性:

单项加密:提取数据的特征码。

特点:输入一样,那么输出也一样;

 雪崩效应:输入产生微小变化就会引起结果的巨大变化。

 定长输出:无论原始数据多大,结果大小相同。

 不可逆:无法根据特征码还原原数据。

实现:

MD4、MD5(128bit)

SHA1 sha224  sha256  sha384 sha512  等。

linux中的命令有:sha1hmac    sha224sum   sha256sum   sha384sum   sha512sum   

sha1sum     sha256hmac  sha384hmac  sha512hmac  

 

4.身份验证:

非对称密钥:分为公钥和私钥,公钥机密私钥解密,私钥加密公钥解密。

公钥(从私钥中提取):机密数据

私钥:身份验证

特点:1.公钥加密数据的速度很慢,所以一般不用公钥加密数据。

 2.私钥主要是用来身份验证。

实现:

RSA:加密和签名

DSA:签名

ELGamal:收费


5.网络传输数据的过程:

wKioL1RWOM3xsXyHAAN61_87r7E095.jpg


对于A

1.用户要发一封秘密邮件给B用户,首先A用户的明文通过hash函数得到一个信息摘要,在用A的私钥对摘   要进行签名得到一个数字信封,我们中的数字信封又称数字指纹,具有不可否认性,就是说我们可以   根据数字信封来确认这封邮件是A发过来的,这个数字签名有什么用途,下面我们就知道了。

2.明文 A的数字签名 A的公钥钥三者和三惟一用对称加密密钥进行加密,通常这步对用户来说是透明     的,换句话来说就是系统自动用对称加密算法对数据进行加密处理,来防止网上有人的信息监听。

3.用用户B的公钥对对称加密的密钥进行加密,得到一个数字信封,我们知道对于非对称加密算法,用B   的公钥进行加密,只有B用户的私钥才可以解密,而用户B的私钥是存储在B的个人pc机上的,这样即使在传输过程中信息被人截获,由于无法得知用户B的私钥根本上是打不开的,

4.A用户把信息发送到公网


对于B用户来说,他需要做的也有4步

1.先对数字信封用B的私钥进行解密,因为我们发送的文件使用对称加密算法得出的,对于对称加密算法钥匙就有一个,而B用户是不知对称加密的密钥的,ok,B用户首先用自己的私钥对数字信封进行解密,从而得到对称加密的密钥

2.用对称加密的密钥对密文进行解密,这时候B用户才可以看到文件的明文,通过解密B用户也同时得到了三个文件,分别是明文,A的数字签名,A的公钥,这时候有人要问了,那么我们不可以伪造A的公钥吗?首先A的公钥是在我们通过非对称加密用B的私钥和对称加密算法揭开的,要得到A的公钥我们就是和对称加密和非对称加密为敌,即使是可以伪造A的公钥,可A的私钥是伪造不出来的,我们知道对于非对称加密算法,密钥是成对出现的,用私钥加密只能公钥解开,二者是相互关联的,即使有人伪造了A的公钥,同样解不开密文。这步对于用户来说同样是透明的。

3.下面我们就说到数字签名了,我们用A的公钥对数字签名进行解密,如果能解得开说明文件就是A用户发过来的,具有不可抵赖性,这样我们也就知道了为什么数字签名又叫数字指纹了。这样我们得到一个信息摘要,同样我们对明文进行HASH运算同样能得到一个信息摘要.

4.我们通过对二者进行对比,一样说明信息传递无误,不一样则说明文件别人篡改了。


6.对于以上的传输过程需要一个公正单位能够证明身份,也就是说让别人知道我是谁,而不是假冒的。

这时候就要有一个CA(Certificate Authority)证书颁发机构。

1.一个完整的CA是一个认可的证书颁发机构。

2.CA中维护者一个CRL(Certificate Revocation list)证书吊销列表。

3.CA的标准是X509(常用),pkcs12(不常用)

X509内容:

1.公钥以及其有效的期限

2.证书的合法拥有者

3.证书应该如何使用

7.PKI的具体实现:TLS/SSL,OpenGpG

1.SSL:这个是网景公司开发的,在TCP的传输层和应用层加入一个半层的SSL实现数据的加密。

它其实是一个库,实现数据的加密。

SSL版本:SSLV1 SSLV2 SSLV3 ,现在SSLV1已经不用了。

SSL全称是 Security Socket Layer 安全套接字层.

2.TSL: Transport Layer Security 这个是国际标准化制定的。

TLSV1等价于SSLV3,其实现原理一样。

8.SSL会话的建立过程

例如:http(tcp)

         客户端                                  服务器

1.客户端请求会话。                   1.服务器端收到请求

2.协商构造SSL会话,包括算法等        2.协商构造SSL会话,包括算法等

3.接受客户端的证书。                 3.向客户端发送自己的证书

4.随机产生对称密钥等打包数据         4.接受数据,并且验证数据

5.重复上面动作                       5.重复上面动作

6.使用完关闭会话                     6.关闭会话

注意:以上没有用到Diffie-Hellman协议.


9.OpenSSL:是一种强大的工具,实现了开源ssl功能。

1.构成:libcrypto:加密库文件

 libssl:ssl的库文件

 openssl:多用途的命令行工具。

2.openssl命令有很多的子命令:

例如:

1.对称加密文件

openssl enc -des3 -salt -a -in 文件名 -out 文件名

解密:

openssl enc -des3 -salt -d -in 文件名 -out 文件名

2.单向加密文件(计算出MD5)

例如:md5sum + 文件

注意:md5加密都有salt,会使得相同的密码有不一样的加密结果。

3.openssl指出RSA和DSA对文件进行加密,对应的子命令是rsautl和dsa

同时也支持随机数加密。例如 openssl rand -base64 数字 表示加密数字的长度。

10.利用openssl实现私有的CA:

1.先要生成一对密钥;

 (umask 077;openssl genrsa -out 文件名)

2.用私钥生成公钥

openssl rsa -in 私钥文件 -pubout

3.req 可以生成证书也可以申请签名

openssl req -new -x509 -key 私钥文件 -out 文件名.crt -days 天数

注意:此时的ca不一定能用,这个要按照/etc/pki/tls/openssl.cnf进行设定然后完成。

经过以上步骤就可以完成了CA的创建,接下来就是办法证书了,

1.要签证就要有自己的密钥,例如给http服务器做签证。

(umask 077;openssl genrsa -out httpd.key 1024)

2.生成请求;(这个是同一台机器上的,否则要进过网络的传输然后进行签证)

openssl req -new -key -out httpd.csr

csr:certificate signing request 证书请求文件

3.进行签证:

openssl ca -in httpd.csr -out httpd.crt -days 365


你可能感兴趣的:(数字签名,数据加密基础,ca制作)