对称加密算法
v对称加密:加密和解密使用同一个密钥
DES:Data Encryption Standard,56bits
3DES:
AES:Advanced (128, 192, 256bits) Blowfish,Twofish
IDEA,RC6,CAST5
v特性:
1、加密、解密使用同一个密钥,效率高
2、将原始数据分割成固定大小的块,逐个进行加密v
缺陷:
1、密钥过多
2、密钥分发
3、数据来源无法确认
现有两个通讯双方A和B。A给B发送数据
A---->B
数据需要加密
Data(明文)------>data’(密文)
A需要加密数据为key1(data)=data’加密后的数据
B需要解密数据key2(data’)=data解密后的数据
所谓对称加密意思就是key1=key2他们的秘钥相同
如果不相等为不对称加密
非对称加密算法
公钥加密:密钥是成对出现Ø
公钥:公开给所有人;public key Ø
私钥:自己留存,必须保证其私密性;secret key v
特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然
实现数据加密,隐私
现有两个通讯双方A和B
每个人都有两把钥匙(公钥和私钥)A(公钥Pa,私钥Sa)
A---->B
A发数据,用B的公钥去加密,加密后的数据发送给B,B用自己的私钥解密
A[Pb(data)]=data’对A发送的数据加密
Sb(data’)用B的私钥解密
功能:Ø
数字签名:主要在于让接收方确认发送方身份Ø
对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方Ø
数据加密:适合加密较小数据v
缺点:密钥长,加密解密效率低下v
算法:
RSA(加密,数字签名),DSA(数字签名),ELGamal
基于一对公钥/密钥对
用密钥对中的一个加密,另一个解密v
实现加密:
接收者
生成公钥/密钥对:P和S
公开公钥P,保密密钥S
发送者
使用接收者的公钥来加密消息M
将P(M)发送给接收者
接收者
使用密钥S来解密:M=S(P(M))
实现数字签名:主要在于让接收方确认发送方身份
数据来源确认
data---加密Sa(data)=data'----> 解密Pa(data')=data
数据来源的确认,A给B发送数据,想要确定是A发的,就要A用自己的私钥加密,然后发送给B,B接收到数据后,用A的公钥来解密。
发送者
生成公钥/密钥对:P和S
公开公钥P,保密密钥S
使用密钥S来加密消息M
发送给接收者S(M)
接收者
使用发送者的公钥来解密M=P(S(M)) v
结合签名和加密v
分离签名
单向散列
将任意数据缩小成固定大小的“指纹”
任意长度输入
固定长度输出
若修改数据,指纹也会改变(“不会产生冲突”)
无法从指纹中重新生成数据(“单向”)
实现数据加密,实现数据来源确认,同时提高效率
方法1:
A---->B
Pb{data+Sa[hash(data)]}
在数据的最后(data)累加一个字符串,对这个数据做个hash运算,得出一个摘要值,然后在外层用A的私钥加密(签名)Sa[hash(data)]可忽略不计,签名完了以后在最外面来一个加密用B的公钥,然后发送给B,用B的私钥去解密
方法2:
用对称加密算法,非对称加密算法和hash算法实现数据加密,实现数据来源确认,同时提高效率
key{data+Sa[hash(data)]}+Pb(key)
跟上述方法类似,在对data+Sa[hash(data)]进行对称加密,然后最后在加上这个秘钥(key)用B的公钥
如何解密呢:先用B的秘钥将key这个钥匙拿到手,拿到key后就可以解开key{data+Sa[hash(data)]}这个数据,得到这个数据后,如何让确认数据的来源呢,用A的公钥解密后得到[hash(data)]然后用相同的hash算法再次的运算,
hash(data)=[hash(data)]如果这两个摘要值相同就说明是同一个人加密的。
功能:数据完整性
常见算式md5: 128bits、sha1: 160bits、sha224 sha256、sha384、sha512 v 常用工具
md5sum | sha1sum [ --check ] file
使用gpg工具实现公钥加密
在hostB主机上用公钥加密,在hostA主机上解密 v
在hostA主机上生成公钥/私钥对
gpg --gen-key v
在hostA主机上查看公钥
gpg --list-keys v
在hostA主机上导出公钥到wang.pubkey
gpg -a --export -o wang.pubkey v
从hostA主机上复制公钥文件到需加密的B主机上
scp wang.pubkey hostB:
在需加密数据的hostB主机上生成公钥/私钥对
gpg --list-keys
gpg --gen-key v
在hostB主机上导入公钥
gpg --import wang.pubkey gpg --list-keys v
用从hostA主机导入的公钥,加密hostB主机的文件file,生成 file.gpg
gpg -e -r wangxiaochun file
file file.gpg
复制加密文件到hostA主机
scp fstab.gpg hostA: v
在hostA主机解密文件
gpg -d file.gpg gpg -o file -d file.gpg v
删除公钥和私钥
gpg --delete-keys wangxiaochun
gpg --delete-secret-keys wangxiaochun
创建CA和证书申请
自己给自己颁发证书
先切换目录到cd /etc/pki/CA/
1、创建所需要的文件
touch /etc/pki/CA/index.txt 生成证书索引数据库文件
echo 01 > /etc/pki/CA/serial 指定第一个颁发证书的序列号
2、先生成私钥
(umask 066; openssl genrsa -out private/cakey.pem 2048)
3、生成自签名证书
openssl req -new -x509 –key private/cakey.pem -days 7300 -out cacert.pem
给客户端颁发证书
1、还是生成私钥
(umask 066; openssl genrsa -out private/test.key 2048)
2、生成证书申请文件
openssl req -new -key /etc/pki/tls/private/test.key -out etc/pki/tls/test.csr
3、复制test.csr给根CA
scp test.csr 172.18.77.7:/etc/pki/CA
4、CA签署证书,审核信息,并将证书颁发给请求者
openssl ca -in /tmp/test.csr –out certs/test.crt -days 365
5、最后将证书发给客户端
scp certs/app.crt 172.18.77.6:/etc/pki/tls/certs
给子CA颁发证书(申请过程是一样的)
1、
touch /etc/pki/CA/index.txt
echo 01 > /etc/pki/CA/serial
2、
(umask 066; openssl genrsa -outprivate/cakey.pem2048)当CA必须放到这个文件
3、申请证书
openssl req -new–keyprivate/cakey.pem -out subca.csr
4、
scp subcsr.csr 172.18.77.7:/etc/pki/CA
5、
openssl ca -in subca.csr –outcerts/sub.crt-days 365
6、
scp certs/sub.crt 172.18.77.6:/etc/pki/CA/cacert.pem
子CA给客户端颁发证书
1、还是先生成私钥
2、还是一样申请证书
3、复制给子CA
4、颁发证书
5发送证书给客户端
un:'�n����_