加密安全和数字签名证书
------------------------------------------------------------------------------------------------------------------------------------------
墨菲定律:如果两种或两种以上去做某件事去,而其中一种选择方式将导致灾难性的后果,则必定有人会做出这种选择
信息安全防护的目标:保密性、完整性、可用性、可控制性、不可否认性
安全防护环节有如下:
物理安全:设备、主机、机房环境
系统安全:设备、主机的操作系统
应用安全:各种服务
网络安全:对网络访问控制、防火墙
数据安全:信息的备份与恢复、加密与解密
管理安全:各种保障性的规范、流程和方法
安全公鸡(敏感词取谐音,attack):STRIDE
Spoofing:假冒
Tamperng:篡改
Repudiation:否认
Information Diclosure:信息泄露
Denial of Service:拒绝服务
Elevation of Privilege:提升权限
安全设计基本原则
使用成熟的安全系统
以小人之心度输入数据(对其他人输入的数据不能大意)
外部系统是不安全的
最小授权
减少外部接口
缺省使用安全模式
安全不是似是而非
从STRIDE思考
在入口处检查
从管理上保护好系统
安全算法
常用安全技术:3A,认证、授权、审计
密码算法和协议:对称加密、公钥加密
对称加密:
DES:Data Encryption Standard,56bit密钥
3DES:相当于用DES加密了3次
AES:Advanced(128,192,256bits)
Blowfish,Twofish
IDEA,RC6,CAST5
特点:
1.加密解密使用同一个密钥,效率高,适用于大量数据解密
2.将原始数据分割成固定大小的块,逐个进行加密
缺陷:
1.如果和多人通信,会造成密钥过多
2.密钥分发过程中存在不安全因素
3.数据来源无法确认
非对称加密算法
公钥加密:密钥是成对出现,有公钥就会有私钥
公钥:可以公开给所有人,public key
私钥:自己留存,必须保证私钥的私有性
特点:
用公钥加密数据,只能使用与之配对的私钥解密,反之亦然
缺陷:
密钥长,加密效率低下
功能:
数字签名:用私钥加密作数字签名,主要在于让接收方确认发送方身份
对称密钥交换:发送方用接收方的公钥加密一个对称密钥后发送给接收方
数据加密:适合加密较小数据
算法:
RSA(可以用作加密和数字签名)
DSA(只能用作数字签名)
ELGamal
单向散列:将任意数据缩小成固定大小的“指纹”
hash(data)=digest,digest不可反推出data,且它的长度固定不变
digest:摘要
data不同,digest必不同
data相同,digest必相同
功能:检查数据完整性
算法:
md5(128bits)、sha1(160bits)、sha224 、sha256、sha384、sha512
结合以上3种算法,有一种比较安全的加密方式,现举例说明:key( data + ss(hash) ) + rp(key),(key:对称公钥,ss:发送者非对称加密算法私钥,rp:接收者非对称加密算法私钥),意思为
1、发送者先将发送的数据做哈希运算确保数据完整性,将哈希值以发送者私钥加密
2、将数据和公钥加密后的哈希值整体打包做对称加密
3、将对称加密的公钥用接收者的非对称加密公钥加密
4、发送给接收者后接收者可以先用自己的私钥获取rp(key)中的公钥,从而获得公钥中的data + ss(hash),再用发送者公钥验证hash值,检查data是否完整没有修改
这种算法暂时性是很安全,不过长久看来公钥私钥因为是不变的,因此还是有安全隐患,由此我们引出新的概念
密钥交换:IKE,双方通过交换密钥实现数据加密解密,密钥交换有以下两种
公钥加密:将公钥加密后通过网络传输到对方进行解密,这种方式很大可能被截获破解,不常用;
DH:德弗·赫尔曼算法
A和B商量好,有下列条件存在
A有两个参数P和G,一个私有参数X,其中P为大质数,G是生成器,私有参数X<P,且B不知道私有参数X
B有两个参数P和G,一个私有参数Y,其中P为大质数,G是生成器,私有参数Y<P,且A不知道私有参数Y
他们有相同的算法,A有一结果G^X%P,B有一结果G^Y%P,彼此双方交换结果,用该结果取自己参数次幂运算后再对P取余,即A的结果[(G^Y%P)^X]%P=G^YX%P,B的结果[(G^X%P)^Y]%P=G^XY%P,A和B得到的结果一样,这个结果就是密钥
gpg工具
使用gpg实现对称加密
gpg -c FILE
指令选项
gpg -o FILE -d FILE.gpg:将FILE.gpg解密并存放到FILE文件内,也可以gpg -d FILE.gpg > FILE
gpg --gen-key:生成公钥私钥
gpg --list-keys:查看本机密钥文件
gpg -a --export -o KEY.pubkey:导出密钥并以ASCII码封装
gpg --import KEY.pubkey:导入密钥
gpg -e -r KEY FILE:以谁的密钥加密文件
gpg -o FILE -d FILE.gpg:解密文件
gpg --delete-keys PUBLICKEY:删除公钥
gpg --delete-secret-keys PRIVATEKEY:删除私钥
公钥加密
在B主机公钥加密,在A主机上解密的实现:
1、在A上生成公钥私钥对儿:gpg --gen-key,出现交互式界面可以按照默认选择,最后一项必须输入用户id用以识别钥匙,Email和注释可以不填,之后选o,完成后输入密码,也可以不输
2、在A上查看公钥:gpg --list-keys
3、在A上导出公钥到chen.pubkey:gpg -a --export -o chen.pubkey,(在哪个目录做此命令,公钥就在哪个目录)
4、从A上复制公钥文件到需加密的B上:scp chen.pubkey B的IP:/目标位置 (不输位置默认放到root家目录)
5、在需加密的B上生成公钥私钥对儿,和第1步一样的指令
6、在B上导入A的公钥,gpg --import chen.pubkey,并查看gpg --list-keys
7、用从A主机导入的公钥,加密B主机的文件FILE,生成FILE.gpg,gpg -a -r A的密钥UserName FILE,生成FILE.gpg
8、复制加密文件到A主机:scp FILE.gpg IPA:/目标位置
9、在A主机解密文件:gpg -d FILE.gpg,如果解密后文件需要存放,gpg -o FILE -d FILE.gpg
10、删除公钥和私钥:gpg --delete-keys PUBLICKEY,gpg --delete-secret-keys PRIVATEKEY
中间人公鸡(敏感词取谐音)会使得上述的加密解密变得不安全,因此有了CA和证书
PKI:公钥基础设施
签证机构:CA
注册机构:RA
证书吊销列表:CRL
证书存取库
数字证书格式:X.509,定义了证书的结构以及认证协议标准
证书结构
序列号:CA用于唯一标识此证书
签名算法
有效期限
主体名称
主体公钥
发行商的唯一标识
证书主体的唯一标识
扩展信息
签名:CA对此证书的数字签名
证书类型:
证书授权机构的证书
服务器证书
用户证书
获取证书的两种方法
使用证书授权机构
生成签名请求(csr)
将csr发送给CA
从CA处接受签名
自签名的证书
自己签发自己的公钥
安全协议
SSL:安全套接层
TLS:传输层安全,目前应用最广泛是TLS1.2,TLS1.3在2015年问世
功能:机密性,认证、完整性、重放保护
HTTPS协议:HTTP协议和SSL/TLS协议的结合,HTTP over SSL或者HTTP over TLS
openssl:开源项目,三个组件
openssl:多种用途工具
libcrypto:加密算法库
libssl:加密模块应用库
enc选项
加密:openssl enc -e des3 -a -salt -in FILE -out FILE.cipher,加密FILE文件为FILE.cipher,其中-salt为加盐,不加盐每次加密结果都一样,加此选项加密结果不同
解密:openssl enc -d des3 -a -salt -in FILE.cipher -out FILE
单向加密
工具:md5sum,sha1sum,sha224sum,sha256sum
命令:oppenssl dgst -md5 /路径/FILE
MAC: Message Authentication Code,单向加密的一种延伸应用,用于实现网络通信中保证所传输数据的完整性机制,此MAC与网络MAC地址没有关系
CBC-MAC
HMAC:使用md5或sha1算法
对输入的用户密码加密
openssl passwd -1 -salt XXXXXXXX:X最多为8位
生成随机数
openssl rand -hex NUM,NUM:表示字节数,结果出现的字符数为NUMx2
openssl rand -base64 NUM,当NUMx8的值能被6整除,结果将不会出现=,base64不是一种加密算法,只是将ASCII码转换成base64码
公钥加密
算法:RSA,ELGamal
工具:gpg,openssl rsautl
数字签名
算法:RSA,DSA,ELGamal
密钥交换
算法:dh
DSA:Digital Signature Algorithm
DSS:Digital Signature Standard
RSA
生成私钥
openssl genrsa -out /路径/FILE NUM_BITS,NUM_BITS为加密位数
(umask 077;openssl gensra -out FILE.key -des 2048)
openssl rsa -in FILE.key -out FILE.key,将加密key解密
从私钥中提取出公钥
openssl rsa -in PRIVATEKEY -pubout -out PUBLICKEY
openssl rsa -in FILE.key -pubout -out FILE.key.pub
随机数生成器
/dev/random:仅从熵池返回随机数,随机数用尽阻塞
/dev/urandom:从熵池返回随机数,随机数用尽会利用软件生成伪随机数
创建CA和申请证书
1、创建私有CA,打开openssl的配置文件:/etc/pki/tls/openssl.cnf,根据自己需要建立的环境挑选环境中的policy中选用policy_match还是policy_anything,policy_default中比较严格,要求被授权方国家名、省名、组织名必须一样,如果在公司内部建立私有CA,此处可选择policy_anything
2、创建所需必备文件,/etc/pki/CA/index.txt和/etc/pki/CA/serial
3、自签证书,先生成私钥,(umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem),需要加括号,以免umask 066开启子进程影响到其它文件
4、生成自签名证书,openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem
5、给需要使用证书的主机生成证书请求
(1)给web服务器生成私钥,(umask 066;openssl genrsa -out /etc/pki/CA/private/*.key)
(2)生成证书申请文件,openssl req -new -key /etc/pki/CA/private/*.key
6、将证书请求文件传输给CA:scp SERVER.csr IPCA:/位置
7、CA签署证书,并将证书颁发给请求者,openssl ca -in /位置/*.csr -out /位置/*.crt -days NUM
8、查看证书中的信息
吊销证书
1、在客户端获取要吊销的证书serial
2、在CA上,根据客户提交的serial与subject信息,对比验证是否与index.txt文件中的信息一致,吊销证书:openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
3、指定第一个吊销证书的编号,echo 01 > /etc/pki/CA/crlnumber
4、查看crl文件