加密和安全

Posted jayhenry7

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了加密和安全相关的知识,希望对你有一定的参考价值。

对称加密算法

?对称加密:加密和解密使用同一个密钥
DES:Data Encryption Standard,56bits
3DES:
AES:Advanced (128, 192, 256bits)
Blowfish,Twofish
IDEA,RC6,CAST5
 
加密、解密使用同一个密钥,效率高

 

对称加密

?公钥加密:密钥是成对出现
?公钥:公开给所有人;public key
?私钥:自己留存,必须保证其私密性;secret key
?特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然
?功能:
?数字签名:主要在于让接收方确认发送方身份
?对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方
?数据加密:适合加密较小数据
 

非对称加密

?基于一对公钥/密钥对
• 用密钥对中的一个加密,另一个解密

?实现加密

• 接收者
生成公钥/密钥对:P和S
公开公钥P,保密密钥S
• 发送者
使用接收者的公钥来加密消息M
将P(M)发送给接收者
• 接收者
使用密钥S来解密:M=S(P(M))
 

实现数字签名:确认身份真实性

• 发送者
生成公钥/密钥对:P和S
公开公钥P,保密密钥S
使用密钥S来加密消息M
发送给接收者S(M)
• 接收者
使用发送者的公钥来解密M=P(S(M))
?结合签名和加密
?分离签名
 
技术图片
银行U盾里放置的是自己的私钥 /密钥   加密信息发送给银行使用自己的公钥解密来核实身份真实性
 
插上U盘输口令 (公钥加密)U盘丢失防止他人冒充  
 
key(Sa) 对称密钥来加密私钥
PbSa(data)
?算法:
RSA(加密,数字签名)
DSA(数字签名)
ELGamal

 

 

hash 加密

hash(data)=digist 摘要  

data不同 digist 摘要必不同

digist不同逆推出data

任意长度输入
 固定长度输出

如果固定位某种算法 长度也固定

md5 算法 128位 

sha1 160位

sha5 512位

 

技术图片

md5sum -c 检查单个文件的完整性

比较hash

rpm -v 查看 hash 值 rpm -k  

来源:数字签名

 

 

 

 

 技术图片

 

检查文件真实完整性 

ma5sum文件重定向md5后缀的加密

md5sum重定向不同文件写入md5.log 日志

 md5sum -c         md5.log日志 比较检查完整性

               --check

 

key(data+Sb[hash(data)]) + Pa(key)

本机操作 对称加密 gpg -c

gpg -d -o  生成新文件

 gpg --gen-key

a发给b b的公钥加密 6发给7

 

 

gpg --list 导出公钥列表

gpg -a --export - o 文件导出文字文件 以 base二进制文件转换可见格式文件

- e加密  

gpg --delete -keys magedu

gpg --delete-secret-keys wange

 

A 的私人信息

 

B-A

 

使用gpg工具实现公钥加密
?在hostB主机上用公钥加密,在hostA主机上解密
?在hostA主机上生成公钥/私钥对
gpg --gen-key   Pa Sa
?在hostA主机上查看公钥
gpg --list-keys
?在hostA主机上导出公钥到wang.pubkey
gpg -a --export -o wang.pubkey    Pa
?从hostA主机上复制公钥文件到需加密的B主机上 
scp wang.pubkey hostB:
使用gpg工具实现公钥加密
?在需加密数据的hostB主机上生成公钥/私钥对
gpg --list-keys Pb Sb
gpg --gen-key
?在hostB主机上导入公钥
gpg --import wang.pubkey   Pa
gpg --list-keys
?用从hostA主机导入的公钥,加密hostB主机的文件file,生成file.gpg Pa
gpg -e -r wangxiaochun file
file file.gpg使用gpg工具实现公钥加密
?复制加密文件到hostA主机
scp fstab.gpg hostA:   
?在hostA主机解密文件
gpg -d file.gpg           
gpg -o file -d file.gpg
?删除公钥和私钥
gpg --delete-keys wangxiaochun
gpg --delete-secret-keys wangxiaochun

 

openssl命令

?对称加密:

工具:openssl enc, gpg
算法:3des, aes, blowfish, twofish
?enc命令:
帮助:man enc
加密:
openssl enc -e -des3(对称算法) -a(ASCII乱码转换base64编码) -salt(每次生成的不一样避免密码整体的重复性) -in testfile  -out testfile.cipher(生成新文件)
base64 6位编码 2的6次方 64种组合

技术图片

 


ASCII6位一组重新组合成BASE64编码 不够6位0来补齐 可见的为=

解密:
openssl enc -d -des3 -a -salt –in testfile.cipher -out testfile (生成新文件)
 

 

单向加密

工具:md5sum, sha1sum, sha224sum,sha256sum…
 
 
openssl dgst
dgst命令
帮助:man dgst
openssl dgst -md5 [-hex默认] /PATH/SOMEFILE
openssl dgst -md5 testfile
md5sum /PATH/TO/SOMEFILE
 
技术图片

 

 
?MAC: Message Authentication Code,单向加密的一种延伸应用,用于实现
网络通信中保证所传输数据的完整性机制
CBC-MAC
HMAC:使用md5或sha1算法openssl命令

生成用户密码:

passwd命令:
帮助:man sslpasswd
openssl passwd -1(md5加密) -salt SALT(最多8位)
随机salt生成随机密码  
技术图片

$$内为salt

openssl passwd -1 –salt (指定 salt 指定使用上次密码)centos

?生成随机数:

帮助:man sslrand

openssl rand -base64|-hex NUM

NUM: 表示字节数,使用-hex,每个字符为十六进制,相当于4位二进制,
出现的字符数为NUM*2openssl命令
技术图片

生成8位随机口令

?公钥加密:
算法:RSA, ELGamal
工具:gpg, openssl rsautl(man rsautl)
?数字签名:
算法:RSA, DSA, ELGamal
?密钥交换:
算法:dh
DSA:Digital Signature Algorithm
DSS:Digital Signature Standard
RSA:openssl命令
?生成密钥对儿:man genrsa
?生成私钥
openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
(umask 077; openssl genrsa –out test.key –des 2048)(加密位数)对称加密加密私钥

 

()开启子shell 仅对当前文件设置提高访问权限 防止丢失他人窃取密码(字符串)

 
 
openssl rsa -in test.key –out test2.key 将加密key转换位新文件(没有对称加密)
 
 
 
?从私钥中提取出公钥
openssl rsa -in PRIVATEKEYFILE –pubout –out PUBLICKEYFILE
openssl rsa –in test.key –pubout –out test.key.pub
 
 
?随机数生成器:伪随机数字
键盘和鼠标,块设备中断
/dev/random:仅从熵池返回随机数;随机数用尽,阻塞
/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机
数,非阻塞OpenSSL
 
 

?PKI:Public Key Infrastructure

CA
RA
CRL
证书存取库
?建立私有CA:
OpenCA
openssl
?证书申请及签署步骤:
1、生成申请请求
2、RA核验
3、CA签署
4、获取证书

 

 A——B

Pb  Sb 加密

Sa  Pa 来源性

每个用户的公钥 私钥 加密解密一一对应  PaSa   SaPa            PbSb SbPb

 公钥公开发放不具有唯一性   无法拿到保证对方真实公钥

Ca核对公钥

openssl -dgst -md5 -1 testfile    -1指定盐

openssl rand -base64 12

 umask 066 :openssl genrsa -out 

openssl命令
?生成密钥对儿:man genrsa
?生成私钥
openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
(umask 077; openssl genrsa –out test.key –des 2048)
openssl rsa -in test.key –out test2.key 将加密key解密
?从私钥中提取出公钥
openssl rsa -in PRIVATEKEYFILE –pubout –out PUBLICKEYFILE
openssl rsa –in test.key –pubout –out test.key.pub
?随机数生成器:伪随机数字
键盘和鼠标,块设备中断
/dev/random:仅从熵池返回随机数;随机数用尽,阻塞
/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机
数,非阻塞
 
证书申请及签署步骤:
1、生成申请请求
2、RA核验 注册机构 测试可省
3、CA签署 
4、获取证书
 
创建CA和申请证书
?创建私有CA:
openssl的配置文件:/etc/pki/tls/openssl.cnf
三种策略:match匹配、optional可选、supplied提供
match:要求申请填写的信息跟CA设置信息必须一致
optional:可有可无,跟CA设置信息可不一致
supplied:必须填写这项申请信息,
?1、创建所需要的文件
touch /etc/pki/CA/index.txt 生成证书索引数据库文件
echo 01 > /etc/pki/CA/serial 指定第一个颁发证书的序列号
?2、 CA自签证书
生成私钥
cd /etc/pki/CA/
(umask 066; openssl genrsa -out private/cakey.pem 2048)

  

  

1、创建所需要的文件touch /etc/pki/CA/index.txt 生成证书索引数据库文件echo 01 > /etc/pki/CA/serial 指定第一个颁发证书的序列号?
 
 
 
 
2、 CA自签证书生成私钥cd /etc/pki/CA/ (umask 066; openssl genrsa -out private/cakey.pem 2048)创建CA和申请证书?生成自签名证书openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem-days 3650 -out /etc/pki/CA/cacert.pem
 
 
、颁发证书
?在需要使用证书的主机生成证书请求
给web服务器生成私钥
(umask 066; openssl genrsa –out /data/test.key 2048)
生成证书申请文件
openssl req -new -key /data/test.key -out /data/test.csr
?将证书请求文件传输给CA
?CA签署证书,并将证书颁发给请求者
openssl ca -in /tmp/test.csr –out /etc/pki/CA/certs/test.crt -days 100
注意:默认要求 国家,省,公司名称三项必须和CA一致创建CA和证书管理
? 查看证书中的信息:
openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|issuer|subject|serial|dates
openssl ca -status SERIAL 查看指定编号的证书状态

 

 

 实验:私有ca的建立

1 建立CA

cd /etc/pki/CA

touch index.txt   证书信息

echo 0F > serial

(umask 066;openssl genrsa -out private/cakey.pem 4096 )

openssl req -new -x509 -key private/cakey.pem  -out cacert.pem -days 3650

openssl x509 -in cacert.pem -noout -text

 

  

2 在客户端生成证书申请

 (umask 066;openssl genrsa -out test.key 1024)

openssl req -new  -key test.key -out test.csr

scp test.csr  192.168.36.7:/data

 

 

3 CA给客户端颁发证书

openssl ca -in /data/test.csr  -out certs/test.crt -days 100

 

SSH
?ssh: secure shell, protocol, 22/tcp, 安全的远程登录
?具体的软件实现:
OpenSSH: ssh协议的开源实现,CentOS默认安装
dropbear:另一个开源实现
?SSH协议版本
v1: 基于CRC-32做MAC,不安全;man-in-middle
v2:双方主机协议选择安全的MAC方式
基于DH算法做密钥交换,基于RSA或DSA实现身份认证
?两种方式的用户登录认证:
基于password
基于keyOpenssh软件组成
?OpenSSH介绍
?相关包:
openssh
openssh-clients
openssh-server
?工具:
基于C/S结构
Linux Client: ssh, scp, sftp,slogin
Windows Client:xshell, putty, securecrt, sshsecureshellclient
Server: sshdssh客户端
? 客户端组件:
? ssh, 配置文件:/etc/ssh/ssh_config
Host PATTERN
StrictHostKeyChecking no 首次登录不显示检查提示
? 格式:ssh [[email protected]]host [COMMAND]
ssh [-l user] host [COMMAND]
? 常见选项
-p port:远程服务器监听的端口
-b:指定连接的源IP
-v:调试模式
-C:压缩方式
-X:支持x11转发
-t:强制伪tty分配
ssh -t remoteserver1 ssh -t remoteserver2 ssh remoteserver3ssh客户端
?允许实现对远程系统经验证地加密安全访问
?当用户远程连接ssh服务器时,会复制ssh服务器/etc/ssh/ssh_host*key.pub
(CentOS7默认是ssh_host_ecdsa_key.pub)文件中的公钥到客户机的
~./ssh/know_hosts中。下次连接时,会自动匹配相应私钥,不能匹配,将拒
绝连接公钥交换公钥交换
?客户端发起链接请求
?服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)
?客户端生成密钥对
?客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密
?客户端发送加密后的值到服务端,服务端用私钥解密,得到Res
?服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到
客户端公钥)
?最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,
之后的所有通讯都会被加密ssh加密通讯ssh服务登录验证
?ssh服务登录验证方式
?用户/口令
?基于密钥
?基于用户和口令登录验证
?1 客户端发起ssh请求,服务器会把自己的公钥发送给用户
?2 用户会根据服务器发来的公钥对密码进行加密
?3 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,
则用户登录成功基于用户名口令登录验证ssh服务基于密钥登录验证
?基于密钥的登录方式
?1 首先在客户端生成一对密钥(ssh-keygen)
?2 并将客户端的公钥ssh-copy-id 拷贝到服务端
?3 当客户端再次发送一个连接请求,包括ip、用户名
?4 服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的
IP和用户,就会随机生成一个字符串,例如:magedu
?5 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
?6 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的
字符串发送给服务端
?7服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一
致,就允许免密码登录基于密钥的登录方式基于key认证实现
?基于密钥的认证:
?(1) 在客户端生成密钥对
ssh-keygen -t rsa [-P ‘‘] [-f “~/.ssh/id_rsa"]
?(2) 把公钥文件传输至远程服务器对应用户的家目录
ssh-copy-id [-i [identity_file]] [[email protected]]host
?(3) 测试
?(4) 在SecureCRT或Xshell实现基于key验证
在SecureCRT工具—>创建公钥—>生成Identity.pub文件
转化为openssh兼容格式(适合SecureCRT,Xshell不需要转化格式),并复制到
需登录主机上相应文件authorized_keys中,注意权限必须为600,在需登录的ssh
主机上执行:ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys基于key认证
?(5)重设私钥口令:
ssh-keygen –p
?(6)验证代理(authentication agent)保密解密后的密钥
这样口令就只需要输入一次
在GNOME中,代理被自动提供给root用户
否则运行ssh-agent bash
?(7)钥匙通过命令添加给代理
ssh-add

 

 

 

 

 

 

 

 

 

 

 

  

 

以上是关于加密和安全的主要内容,如果未能解决你的问题,请参考以下文章

安全和加密

Linux之加密和安全

Android安全加密:数字签名和数字证书

Android安全加密:对称加密

加密和安全相关

加密和安全