公钥加密:密钥是成对儿出现
公钥:公开给所有人;pubkey
私钥:自己留存,必须保证其私密性;secret key
特点:用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然;
实现:
数字签名:主要在于让接收方确认发送方身份;用自己的私钥加密;
密钥交换
方式(IKE):
①.发送方用对方的公钥加密一个对称密钥,并发送给对方;
②.DH算法,不会在网络上发送秘钥,所以就算破解了也拿不到秘钥,想了解DH算法请google
安全通信过程解析:(假设A和B要安全传输数据,A要发送数据给B)
发送方A:
1.A用单向加密算法对实际数据做hash,并且用自己的私钥加密hash得到的特征码
2..A用随机对称密钥加密实际数据和刚刚hash得到的特征码,用B的公钥加密那个随机的对称密钥
3.将⑴用刚刚对称密钥加密的数据和特征码,⑵用B的公钥加密后的对称密钥发送给B
接收方B:
1.用自己的私钥解密得到发送方的随机对称密钥
2.用对称密钥解密数据得到以A的私钥加密了的特征码和实际数据
3.用A的公钥解密那个加密了的特征码
4.对实际数据做hash比对上面说的特征码实现了完整性校验
上面过程看似很完美,其实有个漏洞:
A如何拿到B的公钥呢?万一C假冒B告知A自己是B呢?同理B如何拿到A的公钥呢?
这时就需要用到CA了,CA是证书颁发机构,B会把自己的公钥发送给CA,让CA证明B就是B(会在发给B的证书(证书里内嵌了B的公钥)上面盖一个章,实现B的身份认证,这就是数字签名)
为了保证私钥丢了其他人也不能用,私钥需要加密,但是万一别人解密呢?
所以:CA机构需要有证书吊销列表(证书其实有有效期的),接受方每次都会查看证书是不是可信机构发的,而且会查看CA服务器上的证书吊销列表有没有发送方的这个证书,有的话就不可信
PKI: Public Key Infrastructure
签证机构:CA
注册机构:RA
证书吊销列表:CRL
证书存取库
证书格式:
X.509:定义了证书的结构以及认证协议标准
版本号
序列号
签名算法ID
发行者名称
有效期限
主体名称
主体公钥
发行者惟一标识
主体的惟一标识
扩展
发行者签名
上面流程还是有漏洞,万一有人冒充CA呢?那么收到CA证书的人如何验证CA的可靠性呢?
这时,CA会用自己的私钥加密自己颁发给A或者B的证书的特征码,这时,就需要CA的公钥去解密得到特征码,此时就用到CA的证书了,CA自己给自己发证书,当A或者B收到CA颁发给自己的证书同时要验证CA的签名是否可靠(是不是可信CA),用什么方式验证呢?就是装系统时系统会内嵌所有可信CA公证机构的证书,会用系统内嵌的证书里提取出CA公钥,除非系统盗版
windows上自带的证书:
SSL/TLS:在应用层和传输层之间加了半层
分层设计:
1、最低层:基础算法原语的实现,aes, rsa, md5
2、向上一层:各种算法的实现
3、再向上一层:组合算法实现的半成品
4、用各种组件拼装而成的种种成品密码学协议/软件:
tls, ssh,
三个组件:
openssl: 多用途的命令行工具;
libcrypto: 公共加密库;
libssl: 库,实现了ssl及tls;
linux上openssl命令使用:
1.enc命令:
加密:~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext
解密:~]# openssl enc -d -des3 -a -salt -in fstab.ciphertext -out fstab
openssl ?可以获取帮助
2.单向加密:
工具:md5sum, sha1sum, sha224sum, sha256sum,..., openssl dgst
dgst命令:openssl dgst -md5 /PATH/TO/SOMEFILE
MAC: Message Authentication Code,单向加密的一种延伸应用,用于实现在网络通信中保证所传输的数据的完整性;
机制:CBC-MAC HMAC:使用md5或sha1算法
3.生成随机数:
openssl rand -base64|-hex NUM
NUM: 表示字节数;-hex时,每个字符4位,出现的字符数为NUM*2;
4.生成密钥对儿:
openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
# (umask 077; openssl genrsa -out key.pri 2048)
提取出公钥:
# openssl rsa -in /PATH/FROM/PRIVATEKEY.FILE -pubout(公钥可以从私钥中提取出来)