数据安全->加密
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.网络传输数据的过程:
对于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