加密算法
对称加密:加密和解密使用同一个密钥key,有如下算法:
DES(Data Encryption Standard)(56bits)
3DES(128bits)
AES(Advanced Encryption Standard)(128,192,256bits)
特征:效率高,但是无法确认数据的来源
非对称加密:成对出现的公钥(public key)、密钥(secret key)
公钥:公开给所有人
密钥:自身留存,保证隐私性
每对公私钥都只可以相互解锁
主要算法有:RSA(加密,数字签名)、DSA(数字签名)
数字签名的实现:
发送者生成公钥、密钥:P、S
将公钥公开,并对信息M进行密钥加密S(M)
接收者使用收到的公钥P来解密S(M),成功即可验证数字签名
特征:数据可确认来源
HASH算法:HASH FILE = DIGEST
通过不同的Hash算法可以给指定文件生成一连串的字符号,简称摘要,文件内容不变,摘要一定不变,可用来检查数据的完整性。
HASH -c FILE 检查文件是否变化
常用的HASH算法工具有:
md5sum(128bits)
sha{1|224|256|384|512}sum(其中1表示160bits)
上述三种算法结合的使用模式:
a传输者
Key{ Sa{ HASH(data)}+data } + Pb(Key)
b接收者
Sb得到Key---àKey得到Sa{ HASH(data)}+data---àPa得到HASH(data)
另外进行HASH(data)作比较,相同则data成功传输
另外还有DH算法加密,网址如下:
https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange
实现加密的命令和举例
A主机:传输数据 B主机:接收数据
对称加密:
gpg的方法:
A: gpg -c FILE 对文件加密生成 FILE.gpg,然后将FILE.gpg传送给B
B: gpg -o FILE_NAME -d FILE.gpg 解密文件至指定文件名
openssl的方法:
A: openssl enc -e [-加密算法] -a -salt -in FILE -out FILE_NAME
FILE_NAME传送给B
B: openssl enc –d [-加密算法] -a -salt -in FILE_NAME -out FILE
(其中-salt称为盐,对密钥起到保护作用,使密钥不被轻易解读)
非对称加密:
gpg的方法:
A: gpg --gen-key A上生成公私钥
gpg -a --export -o PAkey_NAME A上公钥导出到文件
PAkey_NAME传输给B
B:(为演示选择pubkey解密,B也生成公、私钥)
gpg --gen-key B上生成公私钥
gpg --import PAkey_NAME B导入A的公钥:
gpg -e -r PAkey_NAME FILE B使用A的公钥对文件FILE进行加密,生成FILE.gpg
然后将FILE.gpg传输给A
A:解密
gpg -o FILE_NAME -d FILE.gpg 解密文件至指定文件名
gpg命令生成公、私钥存放在 /root/.gnupg/目录下
gpg --list-keys 可查看本机上的公、私钥
最后删除公私钥:(必须先删除私钥)
gpg --delete-secret-keys KEY_NAME
gpg --delete-keys KEY_NAME
CA证书
专门的第三方CA机构充当中间人的角色
HTTPS协议的基于CA认证的工作原理:
Client(客户端) 发送请求 -> Service(服务端)
Client(客户端) <- 发送Sca(Pserver) Service(服务端)
Client(客户端) Pca验证Sca(Pserver)确定Pserver真实性
Client(客户端) 验证成功,生成随机数字作为key,用Pserver加密后发送 -> Service(服务端)
Client(客户端) <-通过key互相加密传输文件 -> Service(服务端)
CA建立基于openssl命令工具的使用
Openssl命令建立公、私钥:
私钥: openssl genrsa -out FILE.key [-des] 2048
(其中 [ ]内算法可变以及不使用,2048是私钥长度位数,可变)
若对加密后的私钥解密,则执行如下:
openssl rsa -in FILE.key -out NEW_NAME.key
从私钥中提取公钥:
openssl rsa -in FILE.key -pubout -out FILE.key.pub
(其中公、私钥的路劲可自己指定存放目录)
CA的搭建和认证:
假设A主机充当CA机构 B主机申请CA证书
A:
创建私有CA:(具体要求在/etc/pki/tls/openssl.cnf配置文件中)
第一步:生成密钥
密钥的路径和名字固定:/etc/pki/CA/private/cakey.pem
为了保证密钥的安全,可以对其进行权限设定和算法加密:
(umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem -des3 1024)
第二步:生成自签名证书文件
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 100 -out /etc/pki/CA/cacert.pem
其中“-x509”就是在自签名证书时使用
B:
申请CA证书:
第一步:在需要申请证书的主机上生成密钥
(umask 066;openssl genrsa -out test.key -des3 1024)
第二步:生成证书申请文件(申请文件一般以.csr结尾)
openssl req -new -key test.key -out test.csr
第三步:将申请文件test.csr发送给A
A:
签署申请后颁发给B
第一步:需要在 /etc/pki/CA/目录下生成两个文件
touch index.txt 索引数据库文件
echo “序号”> serial 指定第一个颁发证书的序号
第二步:签署颁发
openssl ca -in test.csr -out /etc/pki/CA/certs/test.crt -days 600
注意:申请证书中默认国家、省、公司三项必须和CA一致。若需要变动,则可以在/etc/pki/tls/openssl.cnf配置文件中修改相关选项