1、什么是OpenSSL?
OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
2、OpenSSL的组成
OpenSSL三部分组成
1:libcrypto库
2:libssl库
3:openssl 多用途命令行工具
3、OpenSSL加密算法和协议
1)对称加密算法
算法种类:
DES:现代加密算法;8个字节位一块儿,64位加密算法。已被破解
3DES:DES升级版,三个数量级,千倍
AES:高级加密标准:128bit位,192bits位,256bits位,384bits位
对称加密的特性:
机密解密同一个秘钥
加密原始数据分割成固定大小的块,逐个加密
对称加密的缺陷:
秘钥过多
秘钥分发困难
2)公钥加密算法
秘钥的种类
公钥:从私钥中提取产生,可公开给所有人
私钥:通过工具创建,使用者自己留存,必须保证其私密性
特点:用公钥加密的数据,只能使用与之对应的私钥解密,反之亦然
用途:
数字签名:主要用于让接收方确认发送放的身份
密钥交换:发送发用对方公钥加密一段对称密钥,并发送给对方
算法:
RAS
RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。1987年首次公布,当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。
DAS 数字签名算法
3)单向加密
特性:
只能加密不能解密,提取数据指纹(特征)
定长输出;
雪崩效应(数据微小变化,数据验证将会发生巨大变化)
算法:
MD5 固定128位定长输出;
sha1 160位的定长输出
sha224
sha256
sha384
sha512
4)秘钥交换
公钥加密:获取对方公钥,只有对方私钥才能解密
算法采用 DH算法:deffie-hellman
4、公钥加密过程(snow-->bamboo)
snow给bamboo发送数据需要进行以下步骤:
1、snow首先使用单向加密算法算法算出这段数据的特征;
2、并使用自己的私钥将这段特征码进行加密,生成数字签名。并把这段签名附加在数据后面;
3、然后snow使用对称加密算法将数据进行加密,(自己生成的一个一次性的对称秘钥)然后通过bamboo的公钥对对称加密码进行加密,并将其附加数据报文的后面
当bamboo收到snow传输过来的数据后会做如下解密和验证步骤:
1:bamboo使用自己的私钥进行对数据的密码进行解密,这种方法就叫做秘钥交换;
2:bamboo使用解密出来的密码将数据进行解密;
3:bamboo然后使用snow的公钥解密这段数据的加密后的特征码,然后使用同种加密算法算出这段数据的特征码与解密出来的特征码比较是否一致,如果一样,数据完整性得到了保证了;
以上既保证了数据的完整性,保密性,和唯一性,但是如果在网络中有人冒充bamboo,将其公钥给了snow,怎么来解决这一问题?CA第三方公钥合法性效验中心。
5、CA的出现!
证书授证中心,作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。CA中心(GlobalSign)为每个使用公开密钥的用户发放一个数字证书,数字证书的作用是证明证书中列出的用户合法拥有证书中列出的公开密钥。CA机构的数字签名使得攻击者不能伪造和篡改证书。它负责产生、分配并管理所有参与网上交易的个体所需的数字证书,因此是安全电子交易的核心环节。
6、各加密算法命令
1)对称加密
工具:opensslenc, gpg
算法:3des, aes, blowfish, twofish
enc命令:man enc
加密:
openssl enc -e -des3 -a -salt -in filename
-out filename.encryption
解密:
openssl enc -d -des3 -a -salt –in testfile.encryption
-out testfile
2)单向加密
工具:md5sum, sha1sum, sha224sum,sha256sum…
openssl dgst
dgst命令:
openssl dgst -md5 [-hex默认] /PATH/SOMEFILE
openssl dgst -md5 testfile
md5sum /PATH/TO/SOMEFILE
3)生成用户密码
工具:passwd,openssl passwd
opensslpasswd-1 -salt SALT(最多8位)
opensslpasswd-1 –salt centos
[[email protected] testdir]# openssl passwd -1 -salt $(openssl rand -hex 10)
Password:
$1$8e0dbb21$N4b97PdbzsQpBdw9zNcAU1
4)生成随机数:man sslrand
openssl rand -base64|-hex NUM
NUM: 表示字节数;-hex时,每个字符4位,出现的字符数为NUM*2
[[email protected] testdir]# openssl rand -base64 10LMAeXPhRn3m3pg==
[[email protected] testdir]# openssl rand -hex 10
55f6e4a8c9c9ce58c1c0
5)公钥加密:
算法:RSA, ELGamal
工具:gpg, opensslrsautl(man rsautl)
数字签名:
算法:RSA, DSA, ELGamal
密钥交换:
算法:dh
DSA: Digital Signature Algorithm
DSS:Digital Signature Standard
RSA:
生成私钥: # (umask 077; openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE NUM_BITS)
提出公钥: # openssl rsa -in /PATH/FROM/PRIVATE_KEY_FILE -pubout