加密安全和数字签名证书

------------------------------------------------------------------------------------------------------------------------------------------

墨菲定律:如果两种或两种以上去做某件事去,而其中一种选择方式将导致灾难性的后果,则必定有人会做出这种选择


信息安全防护的目标:保密性、完整性、可用性、可控制性、不可否认性


安全防护环节有如下:

物理安全:设备、主机、机房环境

系统安全:设备、主机的操作系统

应用安全:各种服务

网络安全:对网络访问控制、防火墙

数据安全:信息的备份与恢复、加密与解密

管理安全:各种保障性的规范、流程和方法


安全公鸡(敏感词取谐音,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文件