加密解密基礎——OpenSSL

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
[email protected]
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章