数据安全以及加密

常见的加密算法

1、对称加密

所谓对称加密,就是同一个密钥可以同时用作信息的加密和解密。

常见的对称加密算法有:DES、3DES、Blowfish、AES等。

对称加密的特点:

对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。

对称加密算法的缺点是在通信之前,发送方和接收方必须商定好秘钥,然后双方都能够保存好秘钥。另外,无法实现对数据来源的确认。

对称加密的隐患是:如果任何一方的秘钥没有保存好,那么数据就不安全了;其次,收、发双方在使用对称加密时,都需要使用其他人不知道的唯一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。

其工作原理可参考下图:将原始数据分割成固定大小的块,逐个进行加密

2、非对称加密

对称加密有一个密钥,其加密与解密的过程使用一个密钥,而非对称加密有两个密钥,即公钥(public
key)和私钥(private
key),公钥与私钥是一对儿,其加密与解密的过程要使用两个密钥;如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。

常见的非对称加密算法有:RSA(加密,数字签名)、DSA(数字签名)

非对称加密的特点:

非对称的优点是在收发双方通信之前,不需要协商秘钥;公钥与私钥,一个用来加密,一个用来解密,而且公钥是公开的,秘钥是自己保存的。

非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。

非对称加密可参考下图:

RSA:

从上图可看出:在非对称加密中,发送方首先得生成一个秘钥对儿(公钥与私钥),然后公开公钥,使用自己的私钥加密数据成密文,最后发送;而接收方会用发送方的公钥对密文解密。
非对称加密可实现数字签名与对称密钥交换的功能:

数字签名:就是加密特征码,把文件指纹信息(特征码)取出来,用私钥加密特征码,数字签名的目的是验证对方的身份。

对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方

注:提取特征码的过程就是单向加密

3、单向加密

所谓单向加密,就是只能加密,不能解密,其作用主要就是提取数据的特征码,又称指纹信息。

常见的单向加密算法有:MD5: 128bits定长输出, SHA1: 160bits输出;SHA256, SHA512

单向加密特点:

(1) 定长输出:无论原来的数据是多大级别,其加密结果长度是一样的;

(2)雪崩效应:原始数据微小改变,将导致结果巨大变化

(3) 不可逆

单向加密的功能:

(1) 数据完整性

(2)系统帐号密码校验

常用工具

md5sum | sha1sum [ --check ] fileopenssl、gpg

rpm -V

4、密钥交换

密钥交换,IKE(Internet Key Exchange): 双方通过交换密钥来实现数据的加密解密;密钥交换有以下两种情况:

公钥加密:将公钥加密后通过网络传输到对方进行解密,不常用,因为很有可能被截取破解;

DH(Deffie-Hellman):

双方共有一些参数,共同协商加密算法,此外,双方还有属于自己的私有参数;通过共有的参数、私有参数和算法信息进行加密,然后双方将计算后的结果进行交换,交换完成后再和属于自己私有的参数进行特殊算法,经过双方计算后的结果是相同的,而这个结果就是密钥。

DH算法协商过程:

   A: a,p协商生成公开的整数a,大素数p

   B: a,p2、A:生成隐私数据:x (x<p ),计算得出a^x%p,发送给B

   B:生成隐私数据:y,计算得出a^y%p,发送给A3、A:计算得出(a^y%p)^x = a^xy%p,生成为密钥

   B:计算得出(a^x%p)^y = a^xy%p, 生成为密钥

在数据通信的过程中,加密往往都不是单一的,一个可选的加密通信过程,会有自己特有的加密算法组合,如:

a–>b

Pb{data+Sa[hash(data)]}

{Pb(key){对称key}}+{对称key{data+{Sa[hash(data)]}}}

一般地,一次加密的通信过程:

发送者:

1.使用单向加密算法提取生成数据的特征码;

2.使用自己的私钥加密特征码附加在数据后面;

3.生成用于对称加密的临时密钥;

4.用此对称密钥加密数据和已经使用私钥加密后的特征码;

5.使用接收方的公钥加密此对称密钥,附加在对称加密后的数据后方;

接收方:

1.使用自己的私钥解密加密的对称(临时)密钥,从而获得对称密钥;

2.使用对称密钥解密对称加密的数据和私钥加密的特征码密文;从而获得数据和特征码密文;

3.使用发送方的公钥解密特征码密文,从而获得计算生成的特征码;

4.使用与对方相同的单向加密算法计算数据的特征码,并与解密而来的特征码进行比较;

 

SSL: Secure Socket Layer

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

1995:SSL 2.0 Netscape1996: SSL 3.0

1999: TLS 1.0

2006: TLS 1.1 RFC(Request For Comments )4346

2008:TLS 1.2 当前使用2015: TLS 1.3

SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:
SSL记录协议(SSL Record
Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL
Handshake
Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

 

Openssl

Openssl是ssl的一个,其由三部分组成:

openssl: 命令行工具,实现私有证书颁发机构

libcrypto: 加密算法库

libssl:加密模块应用库,基于会话的、实现了身份认证、数据机密性和会话完整性的TLS/SSL库、

 

openssl:命令行工具,实现私有证书颁发机构

       众多子命令:

              标准命令

              消息摘要命令(dgst子命令)

              加密命令(enc子命令)

       标准命令:enc, ca, req, genrsa, ...

       对称加密:

              实现算法的工具:openssl enc, gpg

              支持的算法:3des, aes, blowflsh, towflsh

示例:

[root@localhost ~]# cp /etc/inittab ./

[root@localhost ~]# openssl enc -des3 -salt -a -in inittab -out inittab.des3

enter des-ede3-cbc encryption password:

Verifying - enter des-ede3-cbc encryption password:

[root@localhost ~]# rm inittab

rm:是否删除普通文件 "inittab"?y

[root@localhost ~]# cat inittab.des3

U2FsdGVkX19e67iSEaNx+takTrpC3GtJ5+TggUtRTpoet+8Gdhz5e54jGsxUEe0P

52Xw1hvU3N1Q+qGUW7Fx1a5F0jN8saFB2s0NCfBQQkM1rIO1P3UHNA803tfKF+NZ

S3Wjd7gEYdpu2ji1C8gBad5gh+qtH4xkZ7+wTSFcdpxDNKfioOGcL4Ofm2ONMeSa

Hyg3AsAqTWT+8Z8WOefLlWWd5JLqlAmfIFzIR65QGI4b9PHKxae3ARn6jJSKqOYZ

pYW6F0SK/VdcT5j/yMN7GHp2MDSIg4YXn9R+8nL5fyg1BBu45MeXAnnlfP8WDRJB

nm0DqpuOX0VR0gYAUMTnhY4jZREGHiaUMj9lUQmNqb3fGyOFn9eosHkLOVqnxk0L

YQ2YEVVzQSSmkPBER4i45osZC0PH/25Z5BUSfd8pe1dNrxdgCBmMmS4FrMoctKhF

ZBz1PxwxenYWHfp2ctPf7oI/q3wZrHHVZa2HHz4FXd3ode7fNflYK3G+kS2L16SQ

rXrFTdeWmRAQc40AzTb8Sud32xU++PrIXGfRO4TUrKClXui9sLy3AuDGkVwxVcuD

FcN4SXS0YV7sE2Yo0SePV3MERhGETcBHFDKGKwKIAOABEIGqfcYbD6vKdeUy92LL

L25wbgSaOYH7kFcmGMlO5ijjCdiBaH0u1AY+nBB/gZYvprR9U4xiyPrZ4pCK4doe

[root@localhost ~]# openssl enc -des3 -d -salt -a -in inittab.des3 -out inittab

enter des-ede3-cbc decryption password:

[root@localhost ~]# cat inittab

# inittab is no longer used when using systemd.

#

# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.

#

# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target

#

# systemd uses 'targets' instead of runlevels. By default, there are two main targets:

#

# multi-user.target: analogous to runlevel 3

# graphical.target: analogous to runlevel 5

#

# To view current default target, run:

# systemctl get-default

#

# To set a default target, run:

# systemctl set-default TARGET.target

#

[root@localhost ~]#

可见,加密有“盐” -a -salt 时,解密必须加-a -salt,否则会解密失败。但加密时可以省略-a -salt.

 

单向加密:

工具:openssl dgst,md5sum, sha1sum,sha224sum,...gpgdgst命令:

                          ~]#openssl dgst -md5 /PATH/TO/SOMEFILE

[root@localhost ~]#openssl dgst md5 issue

MD5(issue)= f078fe086dfc22f64b5dca2e1b95de2c

[root@localhost ~]#

生成用户密码:

工具:passwd,openssl passwd

    openssl passwd -1 -salt SALT

salt的生成–>生成随机数:

生成随机数工具:openssl rand 

[root@localhost ~]# openssl  rand -base64 8

Y/fAcCRad/M=

[root@localhost ~]# openssl  rand -base64 12

x/Rj7tG7nuQ7W82c

[root@localhost ~]# openssl  rand -hex 8

4bd62b2457add52c

[root@localhost ~]# openssl  rand -hex 12

6eda721ddc2e011205b71517

[root@localhost ~]# openssl passwd -1 -salt `openssl rand -hex 4`

Password:  123456

$1$510ef137$eCOhjfTyfyye4Ynh/Y7Iq0

公钥加密:

加密解密:

       算法:RSA, ELGamal

       实现算法的工具:openssl rsautl, gpg

数字签名:

       算法:RSA, DSA, ELGamal

       实现算法的工具:openssl rsautl, gpg

密钥交换:

       算法:DH

生成密钥:

生成私钥:

       ~]# (umask 077; openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE NUM_BITS)

提取公钥:

       ~]# openssl rsa -in /tmp/mykey2.private -pubout

 

MAC: Message Authentication Code,单向加密的一种延伸应用,用于实现网络通信中保证所传输数据的完整性机制。

CBC-MAC

HMAC:使用md5或sha1算法

随机数生成器:random和urandom

键盘和鼠标

块设备中断

/dev/random:仅从熵池返回随机数;随机数用尽,阻塞

/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞

熵池:在操作系统上有一个叫做熵池的地址,它是用来保存硬件中断产生的随机数,即每一次硬件终端都会产生一个随机数。

猜你喜欢

转载自blog.csdn.net/qq_22193519/article/details/83081810