安全和加密

2017-09-10  本文已影响0人  择一城遇一人

对称加密算法

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����_

上一篇下一篇

猜你喜欢

热点阅读