加密解密
名词:
明文:直接可以看懂的数据
密文:经过某些算法,把明文变成杂乱无章的代码。
算法:处理明文和密文的方法
密钥:加密解密时算法使的代码
加密类型
对称加密 :加密和解密使用同一个密码。一般加密与解密速度相对较快。
常用的算法:
DES:已被破解。使用56位加密
3DES:三倍于DES的加密算法,DES的升级
AES:高级加密标准,可以自己选择加密位数。
blowfish:
非对称加密:加密与解密不使用同一个密钥,而是私钥加密只能公钥解密,公钥加密只能私钥解密。公钥从私钥中提取出来。由于密钥相对较长,加密解密所用时间较长。私钥只有自己留存,公钥可以让任何人拥有。需要一对密钥。
常用算法:
RSA:此算法可以做加密和身份认证。
DSA:只能用于身份认证。
单向加密:用来抽取数据的特征码,特征码长度固定。用来确认数据是否变动过。数据只要有稍微变动,特征码有天大的差别。
常用的算法:
MD5 :输出长度128位
SHA1 :输出160位长度
SHA384
SHA256
密钥交换方式
使用对方的公钥加密后发给对方
使用DH算法交换密钥。
密钥颁发机构
CA:Certification Authority 数字证书认证中心,解决数字证书所有者公开的公钥身份确认。一般是可信任的第三方机构。
RA:Registration Authority 数字证书注册审批机构,给申请数字证书者发放证书,发放前对申请者进行审合登记,它是CA的延伸机构。
PKI:Public Key Infrastructure,公钥基础设施,由密钥管理(发放,吊销),密钥合法性验证,认证机构,密钥发放等组成。为数据完整性,隐私性,数据身份认证等提供基础服务。
通用证书认证协议标准由x.509定义。有三个版本,
CA搬发的证书包含了以下内容(x.509最新版本)
版本号:证书格式使用x.509的那个版本。用来区分不同版本
证书序列号:在CA中的维一标识。用一个整数标识。
算法参数:给此证书签名时使用到的算法
发行者名称:由谁颁发
有效期限:证书有效使用时间
主体名称:证书拥有者名称,由申请者自己填写。如果用在主机上,此名称必须为主机名。
公钥:最关键的部分,由申请者自己填写。
发行者的ID:颁发此证书机构的维一标识
主体ID:给证书拥有者的维一ID
其它信息:
CA签名:CA用自己的私钥对此证书的特征码加密。以保证此证书的合法性。
openssl,ssh安全套接字(secure sockets layer).openssl,ssl协议一种实现,是开源的。用来对互联网通信之间的数据加密传输。借助它,可以达到数据的保密性,数据完整性和数据身份认证。此功能工作于tcp/ip协议模型的应用层与传输层之间,如果传输需要加密,就借助ssl传输。
ssl通信模型
为了保证数据完整性,隐私性,数据发送者身份真实性,数据需要经过以下加工。
验证对方公钥合法性:使用ca的公钥取出对方公钥中ca签证过的对方公钥特征码,自己计算对方公钥特征码与ca签证中的特征码对比对。如果不一样,视为不受信任。(此时为对方颁发密钥的ca机,构必须为自己所信任。)
发送端,前提:需要向ca机构申请证书,并且得到对方的合法公钥。
1,有数据需要加密传时,先使用单向加密给源数据计算一个特征码。由特征码可以保证数据完整性。
2,使用自己的私钥对特征码加密,这样就可以保证源数据特征码是自己所计算。标识了特征码的身份。此步为数字签名。
3,使用对称加密,生成一个密码,用此密码加密源数据和已经过签名的特征码,这一步保证了数据的隐私性。
4,使用对方的公钥加密上一步使用的密码,这一步保证了密码只有对方才可以看到。使密码可靠传输有所保证。
5,把加密后的密码与数据一并发送给对方。
接收端,
1,得到数据后,先用自己的私钥解密对称加密使用的密码。
2,使用解密后的密码对数据解密,得到源数据和对方签名过的数据特征码。
3,使用对方的公钥对特征码解密,自己计算源数据牲码并与对方给出的特殊码做比对。来保证源数据完整性和源数据发送者的身份。
3.1 如果需要验证对方公钥的合法性,取出对方证书中ca签名部分解密,计算对方公钥的特征码与解密后的特征码比对。比对无误则受此证书。
在实际应用中,此模型只使用了一部分,因ca所颁发证书有使用费用,通常服务器没认证客户端使用其它机制。使用ssl客户端向与服务器端第一次通信时会索要服务器端的证书,并且根据自己信任ca公钥来确保服务器端的证书无误。如果对方的证书不是自己信任ca颁发的证书,一般会向用户提示,这时用户需要自行选择是否信任此服务器。如与12306交易时,由于12306证书颁发机构没有在windows系统中系统,交易时会提示用户是否信任此站点。
openssl,命令使用
#rpm -qa openssl #查看当前系统是否安装了openssl
#rpm -ql openssl #查看openssl安装包都生成了那些文件
#openssl version #查看当前系统使用openssl的版本
openssl软件功能主要有三个部分组成
/usr/bin/openssl :多用途命令行工具,可以加密解密,
/usr/lib64/libssl.so.10 :ssl协议实现,使用ssl传输数据时调用此库
/usr/lib64/libcrypto.so.1.0.1e :加密库,其它程序加密解密时调用此库,里面有很多种加密算法
命令使用方法
使用openssl对文件进行对称加密
ens 子命令的选项,
-des3 :指定加密使用的算法,比如此处指定算法为des3
-in filename:指定要加密的文件名。
-out filename:指定加密后文件名
-pass :指定加密使用的密码
-a :使用base64编码处理,加密文件使用。
-e :表示此过程为加密
-d:表示此过程为解密
-salt:加密时添加额外特性,以增加加密强度。如果不指定,默认使用此选项。
加密wukui.txt文件的过程
[root@wukui ~]# echo aaabbb >> wukui.txt
[root@wukui ~]# openssl enc -des3 -e -in wukui.txt -out wukui.txt.enc -a
enter des-ede3-cbc encryption password: #输入密码
Verifying - enter des-ede3-cbc encryption password: #再次输入密码
[root@wukui ~]# cat wukui.txt.enc
U2FsdGVkX19i59EEB5m8+enxgNKVdmaC
[root@wukui ~]# cat wukui.txt
aaabbb
解密wukui.txt.enc过程
[root@wukui ~]# cat wukui.txt.enc
U2FsdGVkX19i59EEB5m8+enxgNKVdmaC
[root@wukui ~]# openssl enc -d -des3 -a -salt -in wukui.txt.enc -out wukui.test
enter des-ede3-cbc decryption password: #输入密码
[root@wukui ~]# cat wukui.test
aaabbb
openssl 计算文件的特征码
dgst 子命令选项
-md5 :指定算法
-out filename:指定特征码输出到的文件名,如果不指定文件名,会直接打印到屏幕上。
[root@wukui ~]# openssl dgst -md5 wukui.txt.enc #使用openssl命令计算
MD5(wukui.txt.enc)= 014cfd3c170fbaa5bca8a288c1e88c4d #计算后结果
[root@wukui ~]# md5sum wukui.txt.enc #使用md5sum命令计算
014cfd3c170fbaa5bca8a288c1e88c4d wukui.txt.enc #计算后结果
MAC:消息摘要码,单向加密的延伸类应用,保证数据在传输中数据完整性,但不依赖公钥机制。使用的算法有CBC-MAC,HMAC等。
passwd 子命令,用来加密密码。
-1:使用md5加密
-salt abcdefgh :指定额外的字符串到加密中,以增加密码强度。
-in filename :指定读取密码的文件
-stdin :表示密码从标准输出读取。
示例:
[root@wukui ~]# openssl passwd -1 -salt asdf
Password: #输入密码
$1$asdf$RPWJ/sut29dokbBFHCkFE/
rand 子命令,输出随机字符串
#openssl rand -base64 6 #生成大小写字母,带字符和数字的随机字符串
#openssl rand -hex 6 #生成小写字母和数字的随机字符串
#openssl passwd -1 `openssl rand -hex 6` #使用随机数指定salt方式加密密码。
密钥生成
gendsa:生成dsa算法密钥
genrsa:生成rsa算法的密钥
-out filename:生成后密钥文件名。
# openssl genrsa 4096 #生成rsa算法的密钥,长度为4096(可选长度为1024,2048,4096等)
示例1:
[root@wukui ~]# openssl genrsa -out wukui.key 4096
Generating RSA private key, 4096 bit long modulus
.........................................................................++
...........++
e is 65537 (0x10001)
[root@wukui ~]# ll wukui.key
-rw-r--r-- 1 root root 3243 Aug 2 11:05 wukui.key
[root@wukui ~]# chmod 600 wukui.key #密钥文件只应该让属主有rw权限
示例2:
# (umask 077;openssl genrsa -out wukui.key 4096) #这样就密钥权限就为600了
rsa :从rsa算法生成的密钥中提取公钥
-in filename:指定密钥文件
-pubout:表示提取公钥
-text:输出为纯文本格式
-noout:不输出密码编码版本。
-out filename :指定输出到那个文件中
示例:
# openssl rsa -in wukui.key -text -pubout -noout -out wukui.key.pub #把公钥输出到一个文件中
# openssl rsa -in wukui.key -pubout #查看密钥的公钥