OpenSSL:

协议分层的意义:把复杂的大问题分解成多个简单的小问题,底层为上层提供服务;

 

主机间通信通过套接字的方式进行通信,在此过程中信息传输是通过明文的方式进行传输的,容易被他人在传输过程中间截获通信内容;

 

安全通信所涉及的三个方面:

         保密性:数据保密性,隐私性,

         完整性:数据自身完整性,系统完整性;

         可用性:真正授权的数据接收方要能还原数据;

 

安全***:

         被动***:窃听等;

         主动***:伪装、重放、消息篡改、拒绝服务***;

 

安全机制:

         数据加密、数字签名(身份认证)、访问控制、数据完整性、认证交换、流量填充、路由控制、公证;

 

安全服务:

         认证服务

访问控制

数据保密性、

         连接保密性

         无连接保密性

         选择域保密性

         流量保密性

         数据完整性服务

         不可否认性

 

密码算法和协议:

         对称加密

         公钥加密

         单向加密

         认证协议

Linux系统:常用加密解密工具:OpenSSLgpg(pgp协议的实现)

常见的加密算法和协议:

对称加密:加密和解密使用同一个密钥;算法的安全性依赖于密钥;

                   DESDataEncryption Standard56位密钥,2003年前后被攻破;

                   3DESDES算法密钥长度扩长三倍;

                   AESAdvancedEncryption Standard(128bits,192bits,258,384,512bits);

                   Blowfish

                   Twofish

                   IDEA:商业加密算法;

                   RC6

                   CAST5

                   常用的为前三种;

对称加密的特性:

1、  加密、解密使用同一个密钥;

2、  将原始数据分割成固定大小的块,逐个进行加密;

缺陷:

1、  密钥过多,根据通信对象数量而定;

2、  密钥分发过程无安全方法;

plain text 明文(加密前)

cipher text 密文(解密后)

公钥加密:密钥成对儿出现:

                   公钥:公开给所有人;pubkeyy

                   私钥:自己留存,必须保证其私密性;secret key


 特点:用公钥加密的数据,只能使用与之配对的私钥解密;使用私钥加密的数据,只能使用与之配对的公钥解密;

                   数字签名(身份认证):主要用于让接收方确认发送方身份;

                   密钥交换:发送方用对方的公钥加密一个对称密钥,并发送非对方;

                   数据加密:公钥加密一般不用于数据加密,因为密钥长度过长,加密时间较长;

                   算法:RSADSAELGamal(商业加密算法)


Question 1:如何使用公钥加密完成密钥交换?

情景设定:A将准备发给B的数据使用对称加密的方法加密后传输给B,但B并不知道加密时使用的密钥。故A需要将加密时使用的密钥(对称加密的密钥)传送给B

(1)    A使用B公布在外的B的公钥将(自己加密数据时使用的对称加密密钥)进行加密后传输给B

(2)    此时发送的数据,只有B能解密,其他人一概不能,包括A自己,因为加密时使用的是B的公钥,只能使用B的私钥进行解密,而B的私钥只有B一个人有;

(3)    B接收到数据后使用自己的私钥进行解密便得到了A在做对称加密时使用的密钥,在使用该密钥对之前A发送过来的数据进行解密便可得到A真正想发送给B的数据原信息了;

真正传输过程中可能是先传密钥,再传数据;此处只为说明原理,不做深入研究;


Question2:身份认证,即接收方怎么确认发送方的身份?

(1)    发送方将一段数据使用自己的私钥进行加密后发送给接收方,接收方使用发送方的公钥进行解密,如果能解密,则表示发送方为真正的发送方,因为只用发送方私钥加密的数据使用与之配对的公钥才能解密;

但是,在真正的传输工程中,不会使用私钥取加密数据,原因有二:

1、  使用私钥加密的数据,能被所有拥有自己公钥的人解密,不安全;

2、  私钥长度过长,因此加密消耗的时间及硬件资源也会很多;


Question 3:在不使用私钥加密数据本身的情况下完成密钥交换?

1、  发送者A将数据使用单向加密的方式提取特征码,因为单向加密的特征码是定长输出的512字节;

2、  发送者A使用自己的私钥将512字节的特征码进行加密后附加在数据后面一同发送给B

3、  接收者B接收到数据后,使用A的公钥对加密过的特征码进行解密,如能解密,证明发送方确实是A,否则不是;

4、  B获得特征码后,验证数据的完整性:将数据使用相同的单向加密算法再次进行加密后与刚才解密出来的特征码进行逐位比对,若完全一样则数据完整,否则不完整;

Note:在上述过程中,最薄弱的安全环节是,公钥的发布,容易受到“中间人”的***;因为上文所述中的解密过程都需要用到发送方的公钥,我们现在需要解决的就是怎么安全地得到发送的公钥而不被其他人冒充?


为解决上述问题中公钥交换的问题,从而引入了CACertificateAuthority),电子商务认证中心电子商务认证授权机构,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。

         证书是进行身份验证的重要环节;

单向加密:只能加密,不能解密;提取数据的特征码(指纹)

         特性:定长输出、雪崩效应;

         算法:

                   md5:128bits

                   sha1:160bits

                   sha225

                   sha256bit

                   sha384

                   sha512

         功能:实现数据的完整性验证;

 

         此处看图:

                   数据加密过程:发送方;

wKioL1YL5q-A2ihWAAHCj9QOnu0210.jpg

数据解密过程:接收方;

wKiom1YL5tLQXaDZAAJpDtkz74Q045.jpg

密钥交换:IKEInternet Key Exchange,互联网密钥交换)

         公钥加密:

         DHDeffie-Hellman: 密码不需要在互联网上发送;

                   密钥协商:

                            UserA:生成两个大素数:pg

                            UserB:生成两个大素数:pg

                                     此时生成的数不需要保密,其他人知道也无妨;

                           

                            A:自己生成一个数x,不让其他任何人知道;包括B

                            B:自己生成一个数y,不让其他任何人知道,包括A

 

                            A:将 p^x%g 的结果发送给B

                            B:将 p^y%g 的结果发送给A

 

                            A:收到p^y%g,将收到的数值取x次方,得到(p^y%g)^x=( p^xy)%g

                            B:  收到p^x%g,将收到的数值取y次方,得到(p^x%g)^y=(p^xy)%g

此时的(p^xy)%g  就是双方通信的密钥了;

 

         证书的获取:

                   CA给某机构颁发了证书,提取证书的特征码,使用自己的私钥加密证书的特征码,用户在获取到机构的证书后向CA求证机构证书的可靠性,若能使用CA的公钥解密特征码,则说明该特征码的确是由CA加密的;解密后的特征码,与用户自行对证书提取的特征码进行对比,对比成功则说明该证书的确是由CA颁发的;

 

但用户的CA身份的确认的话,靠的是信任链,即操作系统内置信任CA等方式实现;

 

PKIPublic KeyInfrastructure,公钥基础设施;

         签证机构:CA

         注册机构:RACA的代理)

         证书吊销列表:CRL(声明作废的证书列表)

         证书存取库


         x.509  定义了证书的结构以及认证协议标准; 是一种证书规范

                   版本号;

                   序列号;

                   签名算法ID

                   发行者名称

                   有效期限

                   主体名称(证书拥有者名称)

                   主体公钥

                   发行者的唯一标识(CA

                   主体的唯一标识

                   扩展信息:

                   发行者签名

Example:用户A和用户B为了安全传输数据,需要获得对方的公钥,如何安全可靠地获得对方的公钥呢?

1、  用户AB发送一条信息,把你的证书发我一份;

2、  A在收到B发送过的证书后,查看证书中包含的“发行者名称”;

3、  在本地存储的公钥中去查找与“发行者名称”对应的publick Key解密证书中发来的“发行者签名”,若能成功解密,则该证书的确是由可信任的机构签发的,确认了“签发者”的身份;得到证书的特征码;

4、  根据“签名算法ID”中所描述的方法对证书进行单向加密后与解密出来的特征码进行比对,若一致则该证书是可靠的;

B验证A的身份也是一个相同的过程;


SSLSecure Socket Layer,安全的套接字层;

TLSTransport Layer Security;传输层安全;

         1995年,SSL 2.0Netscape公司;

         1996年,SSL 3.0Netscape公司,事实上的标准;

         1999年,ISOCTLS 1.0

         2006年,TLS 1.1 RFC4346

         2008年,TLS 1.2 发布;

         2015年,TLS 1.3

wKioL1YL50uwC47JAAI3Kugewno116.jpg

SSL/TLS 的内部分层设计:

1、  最低层:基础算法原语的实现,aesrsamd5

2、  向上一层,各种算法的实现;

3、  再向上一层:组合算法实现的半成品;

4、  用各种组件拼装而成的各种成品密码学协议/软件;

tlsssh


OpenSSL:开源项目;

         三个组件:

                   openssl:多用途的命令行工具;

                   libcrypto:公共加密库;

                   libssl:库,实现了ssltls

 

Openssl命令工具:

 #openssl version  查看程序版本号;

#openssl help 输入一个错误的子命令,将输出所有可用的子命令,如下:

三类命令:标准命令、消息摘要命令、加密命令;

 标准命令:enccareq

消息摘要命令

 对称加密:

     工具:opensslencgpg

     算法:3des,aes,blowfish,twofish

                           

 enc命令:

[root@kalaguiyin ~]# whatis enc
enc (1ssl)           - symmetric cipher routines
[root@kalaguiyin ~]#man enc
openssl enc -ciphername [-in filename][-out filename] [-pass arg] [-e] [-d] [-a/-base64] [-A] [-k password] [-kfile
      filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt]

加密# openssl enc –e –des3 –a –salt –in fstab –outfstab.ciphertext

          -e ,表示加密;-d,表示解密;-des3,使用3des加密;-a,表示使用文本编码;-salt,加入杂质;-in,加密的文件;-out指定加密后输出的文件;

解密[root@kalaguiyin ~]#openssl enc -d -des3 -a -salt -in kalaguiyin.ciphertxt-out kalaguiyin.txt

         此处的 –des3,是算法,可以使用其所支持的任意一种算法替换;如下:

wKiom1YL5-eRaBcdAAGrk9cunQc423.jpg

#加密:
[root@kalaguiyin ~]# openssl enc -e -des3 -a -salt -in kalaguiyin.txt -outkalaguiyin.ciphertxt
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryptionpassword:
[root@kalaguiyin ~]# ls
'                Desktop    Downloads functions             kalaguiyin.txt  messages pam.d     Public   Templates Videos
anaconda-ks.cfg  Documents down.txt   kalaguiyin.ciphertxt  ls.txt         Music     Pictures  scripts up.txt     yum.text
[root@kalaguiyin ~]# catkalaguiyin.ciphertxt
U2FsdGVkX1/bMeUt/9yv57JZ5WgY3XTRAFGKtog92hVVaObpsJ8Jg8GJDHN8zYk3
gA5hjG8uv4rfT8vqJeo24inc6USIqA8bDJsK2336S3Xe+SGHhw8Xnw==
解密刚才加密的文件:
[root@kalaguiyin ~]# ls
Desktop   Downloads  functions             kalaguiyin.txt  messages pam.d     Public   Templates Videos
anaconda-ks.cfg  Documents down.txt   kalaguiyin.ciphertxt  ls.txt          Music     Pictures scripts  up.txt     yum.text
[root@kalaguiyin ~]# rm kalaguiyin.txt
rm:是否删除普通文件"kalaguiyin.txt"?y
[root@kalaguiyin ~]# openssl enc -d -des3 -a -salt -in kalaguiyin.ciphertxt -outkalaguiyin.txt
enter des-ede3-cbc decryption password:
[root@kalaguiyin ~]# ls
Desktop   Downloads  functions             kalaguiyin.txt  messages pam.d     Public   Templates Videos
anaconda-ks.cfg  Documents down.txt  kalaguiyin.ciphertxt  ls.txt          Music     Pictures scripts  up.txt     yum.text
[root@kalaguiyin ~]# cat kalaguiyin.txt
xiongguiyin
zhaohongfei
hezhijie
kalaguiyin@gmail.com
www.mageedu.com
[root@kalaguiyin ~]#
[root@kalaguiyin ~]# openssl ?
openssl:Error: ''' is an invalid command.
 
Standard commands                           #标准命令;
asn1parse         ca                ciphers           cms              
crl               crl2pkcs7         dgst              dh               
dhparam           dsa               dsaparam          ec               
ecparam           enc               engine            errstr           
gendh             gendsa            genpkey           genrsa           
nseq              ocsp              passwd            pkcs12           
pkcs7             pkcs8             pkey              pkeyparam         
pkeyutl           prime             rand              req              
rsa               rsautl            s_client          s_server         
s_time            sess_id           smime             speed            
spkac             ts                verify            version          
x509             
 
Message Digest commands (see the `dgst'command for more details)   #消息摘要命令,即单向加密命令;
md2               md4               md5               rmd160           
sha               sha1             
 
Cipher commands (see the `enc' command formore details)       # 加密命令;
aes-128-cbc       aes-128-ecb       aes-192-cbc       aes-192-ecb      
aes-256-cbc       aes-256-ecb       base64            bf               
bf-cbc            bf-cfb            bf-ecb            bf-ofb           
camellia-128-cbc  camellia-128-ecb  camellia-192-cbc  camellia-192-ecb 
camellia-256-cbc  camellia-256-ecb  cast              cast-cbc         
cast5-cbc         cast5-cfb         cast5-ecb         cast5-ofb        
des               des-cbc           des-cfb           des-ecb          
des-ede           des-ede-cbc       des-ede-cfb       des-ede-ofb      
des-ede3          des-ede3-cbc      des-ede3-cfb      des-ede3-ofb     
des-ofb           des3              desx              idea             
idea-cbc          idea-cfb          idea-ecb          idea-ofb         
rc2               rc2-40-cbc        rc2-64-cbc        rc2-cbc          
rc2-cfb           rc2-ecb           rc2-ofb           rc4              
rc4-40            seed              seed-cbc          seed-cfb         
seed-ecb          seed-ofb          zlib

单向加密:

         工具:md4sumsha1sumsha224sumsha256sum…..openssldgst(消息摘要)

         #whatis dgst

         dgst命令:

                   openssldgst –md5 /PATH/TO/SOMEFILE

[root@kalaguiyin ~]# #单向加密
[root@kalaguiyin ~]# md5sum kalaguiyin.txt
fbfe6d924c9f622c2241fd389c49f9d8  kalaguiyin.txt
[root@kalaguiyin ~]# openssl dgst -md5kalaguiyin.txt
MD5(kalaguiyin.txt)=fbfe6d924c9f622c2241fd389c49f9d8
[root@kalaguiyin ~]# #不同工具使用同一种算法的加密结果是一致的;
[root@kalaguiyin ~]# openssl dgst -md5-binary kalaguiyin.txt  #使用二进制编码

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

         机制:

                   CBC-MAC

                  HMAC:使用md5sha1算法;

生成用户密码:

         passwd命令:

                   opensslpasswd -1 –salt SALT

[root@kalaguiyin ~]# whatis passwd
sslpasswd (1ssl)     - compute password hashes                 #此处使用的是sslpasswd;
passwd (1)           - update user's authenticationtokens
passwd (5)           - password file
查看man帮助时,需要man sslpasswd;
SYNOPSIS:
openssl passwd [-crypt] [-1] [-apr1] [-saltstring] [-in file] [-stdin] [-noverify] [-quiet] [-table] {password}
[root@kalaguiyin ~]# #生成用户密码:
[root@kalaguiyin ~]# openssl passwd -1 -salt12345678
Password:           #两次使用同一个密码,但salt修改了一位数字,结果千差万别;
$1$12345678$pnegfIxmUNXHlhM..hQ50.
[root@kalaguiyin ~]# openssl passwd -1-salt 12345679
Password:
$1$12345679$HG3NttsJR2cVfvpGOm5Em1

生成随机数:

         rand命令:

         #openssl rand –base64 | -hex NUM

                   NUM:表示字节数;-hex时,每个字符4位,出现的字符数为NUM*2

[root@kalaguiyin ~]# whatis rand
sslrand (1ssl)       - generate pseudo-random bytes   #是这个;
rand (3)             - pseudo-random number generator
rand (3p)            - pseudo-random number generator
[root@kalaguiyin ~]# man sslrand
openssl rand [-out file] [-rand file(s)][-base64] [-hex] num
[root@kalaguiyin ~]# openssl rand -base64 4#-base64,字符编码,4,4个字节
9sCxsA==
[root@kalaguiyin ~]# openssl rand -hex4       #-hex,使用16进制编码;
4273c712
[root@kalaguiyin ~]# openssl rand -hex 4
6ce3ad40
[root@kalaguiyin ~]# openssl rand -hex 4
ce024c6d
[root@kalaguiyin ~]# openssl rand -base6416
J7rUVT9BOWZb/F0eJdvAZA==                           #马哥说用它来做自己的密码,呵呵!
[root@kalaguiyin ~]# openssl rand -base6416
3gIt1ZjQltsMQavdSv824g==
[root@kalaguiyin ~]# openssl rand -base6416
QBia6qkTAAQbWVtvoQ+pew==

公钥加密:

         加密:

算法:RSAELGamal

工具:gpgopensslrsautl

[root@kalaguiyin ~]# whatis rsautl
rsautl (1ssl)        - RSA utility
[root@kalaguiyin ~]# man rsautl
openssl rsautl [-in file] [-out file][-inkey file] [-pubin] [-certin] [-sign] [-verify] [-encrypt] [-decrypt]
      [-pkcs] [-ssl] [-raw] [-hexdump] [-asn1parse]

         数字签名:

                   算法:RSADSAELGamal

         密钥交换:

                   算法:dh

         DSADigital Signature Algorithm,数字签名算法:

         DSSDigital Signature Standard,数字签名标准;

         RSA

         生成密钥对儿:

[root@kalaguiyin~]# whatis genrsa
genrsa(1ssl)        - generate an RSA privatekey
[root@kalaguiyin~]# man genrsa
opensslgenrsa [-out filename] [-passout arg] [-des] [-des3] [-idea] [-f4] [-3] [-randfile(s)] [-engine id] [numbits]

用法:opensslgenrsa –out /PATH/TO/PRIVATEKEY.FILE NUM_BITS  #生成私钥;

[root@kalaguiyin ~]# openssl genrsa -out rsakey.private 2048    #生成一个2048位的私钥,保存为rsakey.private
Generating RSA private key, 2048 bit longmodulus
.......................................+++
..................+++
e is 65537 (0x10001)
[root@kalaguiyin ~]# cat rsakey.private
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA82cBVz6zMCicd5f2Jea2trsUn3UmvsSpGlZ1ZTlZP9PkGtib
cIxbhYKkjsxBq+MBgateg8m1ynuFrx5Indt6Cglv4qipeManI62omVu3Ofhbs6Ql
PAxjUufyUvoSr8bnj+eWlF3yky+kmdiAHN4px/PkONO4f2gGf9HpK4Q7xqdWLz4P
Di2M+z4bbRNRv7Csm+MOGTWHPAZviZuEA/dwzozWAyYyQhsAIQicSTNpmO/SWVL9
uGQQxqABfJ22muHGWtJT/SmHgCRhz8LaW5cyQDgAH8ZaOYTbJpKTxE1uTDpnumtl
FJLE7+bEy/0pJiV+mWkydwhjp8Afp8dpQLXBywIDAQABAoIBABLy2+nc2bpQDw5I
aEM/GM5U9iAL0L5dNQT14iHFOyt65XEpl8BFTQKxzvnG8P3eqEld+/eqhlqDDz84
zlJrua56WZl9o+PhIzXl2RBHUZZTvV/Y0YVBOaJEqFrJWRcSFwje8JwQTEglF11a
u26D4CQP+p5p7R0ODiN5Rfu7SaQHUBEbJ7MWg0UAvYHKaCDAs7tbXI1JZzvLd2Q6
GwkVxYhmo5gv/a3ECzlQxgGhtKT5rkfzwjaQD0opu/uXJJjI3KUgse7vnQxCAej8
ikxKllhzOngy+RANN6Rul8f/wTmGZHQ88jK3DwuXy9+/9KjNuWTawd2FazsXTyHb
1QVf69ECgYEA/eoJ1ZREF49AkIwdR5r/swekppRvpI2sQ2K6X08gZsMYsOl2YMYZ
L7lgXDYBDS4XLIasxj2Mb0txfCpeMgZEyifaBm6C0cS15g468e4E0phuxxDviqHN
0EHEl4vx0LKZHqqe/dLBouRPZC27ThQLqEUv334gqFQ23PoCp+LT+l8CgYEA9Wbc
ecpIrPD1FleuyxBHLcJzmI8C37XxpUsIHgX8I4aT9P1oeWMIfPGKx9T+EDcl9OtV
hldNwOFjzQHPHQUiyLf4c07zLfYVw1umc3mrh76WZfHDx+oXMiY5DQy6SYplRoVx
KSfc4uQClLlcbb+XeBGVAq0TC+JPpZFrssFIyBUCgYBqgZsybYjKYRpyB3PYr1mG
XTRhc24JFiwl7+nBRM2QjVF0E9nF6hJyhE25ICX8w1KRKMScOwEHRhwKOzNbxGli
aqj3fa9+EgdCwsFS7cY0GCCPe7ke65QLQSsXbmo2YlP8GxGp4pe6ng33NX+V1q61
HKBiHOPR99Ezi+NFTM4h/QKBgQDHH7Hi+SrDebnFaVyh1RGMpe4aamDQmdf8Ycey
ZPTU9sxzzHPLm3o1t+D+iWumSLl55MM/APRMgBb1MHSYfaRd7jmhhvx33OiH3oRP
yvhOa22qRuSwANjVjoJYfm1iYvQOpxTNalUnnhAiEc5YF1CW0t1wkHOV/wrVtAwJ
viCKiQKBgQCuqlcoIGDWbsPMVyP+q3rEWMo4wRelJGwrAea2cfD1n7kCcFnkkETR
3IlJYpfnFGb7qQMSK4WqGseED55OC63WN+DeZ/vH75wbZ8GxWfAPko9EGvIg7zP8
4P5WgIlrU4j90l+CBXWk9f5hDyvmzo+2JRW4Bl/zzM0Y+X1Eam2Cgg==
-----END RSA PRIVATE KEY-----

从私钥中提取公钥: # openssl –rsa –in /PATH/FROM/PRIVATEKEY.FILE -pubout

[root@kalaguiyin ~]# openssl rsa -in rsakey.private –pubout   #从私钥中提取公钥;
writing RSA key
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA82cBVz6zMCicd5f2Jea2
trsUn3UmvsSpGlZ1ZTlZP9PkGtibcIxbhYKkjsxBq+MBgateg8m1ynuFrx5Indt6
Cglv4qipeManI62omVu3Ofhbs6QlPAxjUufyUvoSr8bnj+eWlF3yky+kmdiAHN3p
t/PkONO4f2gGf9HpK4Q7xqdWLz4PDi2M+z4bbRNRv7Csm+MOGTWHPAZviZuEA/dw
zozWAyYyQhsAIQicSTNpmO/SWVL9uGQQxqABfJ22muHGWtJT/SmHgCRhz8LaW5cy
QDgAH8ZaOYTbJpKTxE1uTDpnumtlFJLE7+bEy/0pJiV+mWkydwhjp8Afp8dpQLXB
ywIDAQAB
-----END PUBLIC KEY-----

生成私钥后需要将私钥文件的权限改为,只有所有者可读可写,其他人没有任何权限;

[root@kalaguiyin ~]# chmod og= rsakey.private

现在来个一步到位,生成私钥,并且密钥文件权限为600,

[root@kalaguiyin ~]# (umask 077;opensslgenrsa -out key.pri 2048)
#此处使用括号()的原因是将括号中的命令在一个子shell进程中运行,因此不会修改当前shell进程的umask;
Generating RSA private key, 2048 bit longmodulus
...........................................................+++
.........+++
e is 65537 (0x10001)
[root@kalaguiyin ~]# ll key.pri
-rw-------. 1 root root 1679 9月  26 10:42 key.pri

随机数生成器:

                   熵池:为了真正的生成随机数,收集的例如两次键盘敲击动作的时间间隔,或两次磁盘I/O中断间隔;

保存在内存的一段空间中,就是所谓的熵池;

                  在需要使用随机数时,就到熵池中去取;

                   Linux系统中存在两个随机数生成设备,/dev/random/dev/urandom;

[root@kalaguiyin ~]# whatis random
random (3)           - random number generator
random (3p)          - pseudo-random number functions
random (4)           - kernel random number sourcedevices
[root@kalaguiyin ~]# whatis urandom
urandom (4)          - kernel random number source devices

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

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


加密解密是一门科学,如果想做深入研究,那是要付出代价的,如果只是作为运维工作中的工作需要的好,好好学习一下还是能掌握的!本次就谈到这里吧!

最后给大家附上我在学习过程中画的思维导图,很多地方都还不完整。故请不要随意评论!保护一下我这脆弱的心灵!

wKioL1YVI-uReR_gADCn6jT1Y68429.jpg