Linux加密和數據安全性

加密和安全git

墨菲定律redis

墨菲定律:一種心理學效應,是由愛德華·墨菲(Edward A. Murphy)提出的,算法

原話:若是有兩種或兩種以上的方式去作某件事情,而其中一種選擇方式將導centos

致災難,則一定有人會作出這種選擇安全

主要內容:網絡

任何事都沒有表面看起來那麼簡單dom

全部的事都會比你預計的時間長ide

會出錯的事總會出錯工具

若是你擔憂某種狀況發生,那麼它就更有可能發生ui

 

安全機制

信息安全防禦的目標

保密性 Confidentiality

完整性  Integrity

可用性 Usability

可控制性 Controlability

不能否認性 Non-repudiation

安全防禦環節

物理安全:各類設備/主機、機房環境

系統安全:主機或設備的操做系統

應用安全:各類網絡服務、應用程序

網絡安全:對網絡訪問的控制、防火牆規則

數據安全:信息的備份與恢復、加密解密

管理安全:各類保障性的規範、流程、方法

 

安全

安全攻擊: STRIDE

Spoofing 假冒

Tampering 篡改

Repudiation 否定

Information Disclosure 信息泄漏

Denial of Service 拒絕服務

Elevation of Privilege 提高權限

 

安全設計基本原則

使用成熟的安全系統

以小人之心度輸入數據

外部系統是不安全的

最小受權

減小外部接口

缺省使用安全模式

安全不是似是而非

從STRIDE思考

在入口處檢查

從管理上保護好你的系統

 

安全算法

u經常使用安全技術

認證

受權

審計

安全通訊

加密算法和協議

對稱加密

公鑰加密

單向加密

認證協議

對稱加密算法

對稱加密:加密和解密使用同一個密鑰

DES:Data Encryption Standard,56bits

3DES:

AES:Advanced (128, 192, 256bits)

Blowfish,Twofish

IDEA,RC6,CAST5

特性:

一、加密、解密使用同一個密鑰,效率高

二、將原始數據分割成固定大小的塊,逐個進行加密

缺陷:

一、密鑰過多

二、密鑰分發

三、數據來源沒法確認

 

對稱加密理解幫助:

Bob 向Alice傳輸數據過程:

對稱加密

Bob --data(Bob對數據加密)----data(Alice對數據解密) 

key1==key2(加密和解密的祕鑰相同,爲對稱加密)

 

非對稱加密算法

公鑰加密:密鑰是成對出現

公鑰:公開給全部人;public key

私鑰:本身留存,必須保證其私密性;secret key

特色:用公鑰加密數據,只能使用與之配對的私鑰解密;反之亦然

功能:

數字簽名:主要在於讓接收方確認發送方身份

對稱密鑰交換:發送方用對方的公鑰加密一個對稱密鑰後發送給對方

數據加密:適合加密較小數據

缺點:密鑰長,加密解密效率低下

算法:

RSA(加密,數字簽名)

DSA(數字簽名)

ELGamal

 

非對稱加密

基於一對公鑰/密鑰對

• 用密鑰對中的一個加密,另外一個解密

實現加密:

• 接收者

生成公鑰/密鑰對:P和S

公開公鑰P,保密密鑰S

• 發送者

使用接收者的公鑰來加密消息M

將P(M)發送給接收者

• 接收者

使用密鑰S來解密:M=S(P(M))

非對稱加密

u實現數字簽名:

• 發送者

生成公鑰/密鑰對:P和S

公開公鑰P,保密密鑰S

使用密鑰S來加密消息M

發送給接收者S(M)

• 接收者

使用發送者的公鑰來解密M=P(S(M))

結合簽名和加密

分離簽名

RSA和DSA

RSA:公鑰加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在

(美國麻省理工學院)開發的,RSA取名來自開發他們三者的名字,後成立RSA

數據安全有限公司。RSA是目前最有影響力的公鑰加密算法,它可以抵抗到目

前爲止已知的全部密碼攻擊,已被ISO推薦爲公鑰數據加密標準。RSA算法基於

一個十分簡單的數論事實:將兩個大素數相乘十分容易,但那時想要對其乘積

進行因式分解卻極其困難,所以能夠將乘積公開做爲加密密鑰

DSA (Digital Signature Algorithm):1991年7月26日提交,並歸屬於David

W. Kravitz前NSA員工,DSA是Schnorr和ElGamal簽名算法的變種,被美國

NIST做爲SS(DigitalSignature Standard), DSA是基於整數有限域離散對數難

題的,其安全性與RSA相比差很少。DSA只是一種算法,和RSA不一樣之處在於

它不能用做加密和解密,也不能進行密鑰交換,只用於簽名,它比RSA要快不少

單向散列

將任意數據縮小成固定大小的「指紋」

• 任意長度輸入

• 固定長度輸出

• 若修改數據,指紋也會改變(「不會產生衝突」)

• 沒法從指紋中從新生成數據(「單向」)

功能:數據完整性

常見算法

md5: 128bits、sha1: 160bits、sha224 、sha25六、sha38四、sha512

經常使用工具

• md5sum | sha1sum [ --check ] file

• openssl、gpg

• rpm -V

 

示例:

md5sum  f1   對f1進行md5的加密算法,容易被破解

 sha1sum  f1 對f1進行sha1算法加密

 

非對稱文件加密理解:

Bob:public(公鑰),secret(私鑰)key,pb,sb,Pa    Bob手裏有本身的公鑰、私鑰及Alice公鑰

Alice:Pa,Sa  Alice的公鑰和私鑰

第一種非對稱加密過程:

Bob--data-用Alice的Pa(公鑰加密)-data'-用Alice(私鑰解密)-data--->Alice   

加密解密過程詳解:Bob用Alice的公鑰加密進行發送,Alice用本身的私鑰進行解密

 

第二種非對稱加密過程:(能夠肯定對方發送文件的來源,進行了兩次加密,解碼時間很長,不經常使用)

Pa[Sb(data)]    用Bob的私鑰對數據加密,再經過Alice公鑰加密傳送給Alice

解密過程:

Sa{Pa[Sb(data)]}=Sb(data)  Alice用本身的私鑰解密

Pb[Sb(data)]=data  再用Bob的公鑰解開Bob的私鑰獲得數據

 

第三種非對稱+hash的加密過程:

Pa{data+Sb[hash(data)]}   用Alice 的公鑰加密,Bob用私鑰對哈希算法的數據加密

解密過程:

1)Sa{Pa{data+Sb[hash(data)}}=data+Sb[hash(data)] 用Alice的私鑰解密

2)Pb{Sb[hash(data)]}=hash(data)  而後用Bob的公鑰解密

3)hash(data)===?hash(data)    用相同的hash算法對比兩個數據,若是兩個數據算法結果相等就確認是Bob發過來的數據。

 

第四種對稱+非對稱+hash

key{data+Sb[hash(data)]}+Pa(key)   用Alice公鑰給key加密,而後用Bob的加密hash算法加密過的數據

1)Sa[Pa(key)]=key   用Alice的私鑰解開公鑰獲得key

2)key{key{data+Sb[hash(data)]}}=data+Sb[hash(data)]  用Bob的公鑰解開,而後用hash算法對比,若是同樣就會肯定是Bob發的數據,不然不是。

3)hash(data)===?hash(data)    用相同的hash算法對比兩個數據,若是兩個算法結果相等就確認是Bob發過來的數據。

 

應用程序:RPM

文件完整性的兩種實施方式

被安裝的文件

• MD5單向散列

• rpm --verify package_name (or -V)

發行的軟件包文件

• GPG公鑰簽名

• rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat*

 

• rpm --checksig pakage_file_name (or -K)

 

密鑰交換

密鑰交換:IKE( Internet Key Exchange )

公鑰加密:

DH (Deffie-Hellman):生成會話密鑰,由惠特菲爾德·迪菲(Bailey

Whitfield Diffie)和馬丁·赫爾曼(Martin Edward Hellman)在1976年發表

參看:https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange

DH:

A: g,p 協商生成公開的整數g, 大素數p

B: g,p

A:生成隱私數據 :a (a<p ),計算得出 g^a%p,發送給B

B:生成隱私數據 :b,計算得出 g^b%p,發送給A

A:計算得出 [(g^b%p)^a] %p = g^ab%p,生成爲密鑰

B:計算得出 [(g^a%p)^b] %p = g^ab%p,生成爲密鑰

 

 

實驗一:生成對稱祕鑰文件進行傳輸過程

1) 在centos6上將一個文件進行對稱加密;

命令: gpg -c f1  對f1文件進行加密

[root@centos6data]#gpg -c f1

can't connect to `/root/.gnupg/S.gpg-agent': No such file or directory

Xlib:  extension "RANDR" missing on display "localhost:11.0".

(pinentry-gtk-2:7639): GLib-GObject-CRITICAL **: Object class GtkSecureEntry doesn't implement property 'editing-canceled' from interface 'GtkCellEditable'

Xlib:  extension "RANDR" missing on display "localhost:11.0".

(pinentry-gtk-2:7642): GLib-GObject-CRITICAL **: Object class GtkSecureEntry doesn't implement property 'editing-canceled' from interface 'GtkCellEditable'

 

 查看當前生成文件格式,是以gpg後綴的加密文件:

[root@centos6data]#ls

f1  f1.gpg

2)將文件傳送到centos7的data目錄下,並將其進行解密保存成文件:

scp  f1.gpg  192.168.34.100:/dafa

[root@centos6data]#scp f1.gpg 192.168.34.101:/data/

root@192.168.34.101's password: 

f1.gpg                                                                              100%   50     0.1KB/s   00:00 

3)在centos7上進行解密

第一種解密方式:gpg -o f1 -d f1.gpg   -o是指定一個文件名爲f1

第二種解密方式:gpg -d f1.gpg > f1    直接重定向到f1文件中

[root@centos7data]#gpg -o f1 -d f1.gpg

gpg: 3DES encrypted data

gpg: encrypted with 1 passphrase

gpg: WARNING: message was not integrity protected

[root@centos7data]#ls  查看已解密的文件

f1  f1.gpg

[root@centos7data]#cat f1  能夠查看解密後的文件信息

aa

dd

ss

 

實驗二:生成非對稱祕鑰並加密文件進行傳輸過程

1)在centos6中生成公鑰和私鑰文件並加密

gpg --gen-key  生成公私鑰命令

[root@centos6data]#gpg --gen-key 

gpg (GnuPG) 2.0.14; Copyright (C) 2009 Free Software Foundation, Inc.

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:

   (1) RSA and RSA (default)   默認用rsa加密算法

   (2) DSA and Elgamal

   (3) DSA (sign only)

   (4) RSA (sign only)

Your selection? 

RSA keys may be between 1024 and 4096 bits long.

What keysize do you want? (2048) 1024

Requested keysize is 1024 bits

Please specify how long the key should be valid.

         0 = key does not expire  默認是永久有效

      <n>  = key expires in n days 有效期是n天

      <n>w = key expires in n weeks  有效期是n周

      <n>m = key expires in n months 有效期是n月

      <n>y = key expires in n years   有效期是n年

Key is valid for? (0) 0   0爲默認永久有效

Key does not expire at all

Is this correct? (y/N) y   輸入y贊成上面操做

GnuPG needs to construct a user ID to identify your key.

Real name: wangge  輸入一個祕鑰名稱

Email address:   輸入一個ip地址

Comment: 

You selected this USER-ID:

    "wangge"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o  輸入o對私鑰進行加密

You need a Passphrase to protect your secret key.

can't connect to `/root/.gnupg/S.gpg-agent': No such file or directory

Xlib:  extension "RANDR" missing on display "localhost:11.0".

(pinentry-gtk-2:7743): GLib-GObject-CRITICAL **: Object class GtkSecureEntry doesn't implement property 'editing-canceled' from interface 'GtkCellEditable'

Xlib:  extension "RANDR" missing on display "localhost:11.0".

(pinentry-gtk-2:7748): GLib-GObject-CRITICAL **: Object class GtkSecureEntry doesn't implement property 'editing-canceled' from interface 'GtkCellEditable'

We need to generate a lot of random bytes. It is a good idea to perform

some other action (type on the keyboard, move the mouse, utilize the

disks) during the prime generation; this gives the random number 

generator a better chance to gain enough entropy.

 

cd /boot/.gnupg 切換到當前目錄能夠查看生成的公鑰私鑰對

[root@centos6.gnupg]#ll

total 24

drwx------ 2 root root 4096 Oct 19 13:41 private-keys-v1.d

-rw------- 1 root root  661 Oct 19 17:36 pubring.gpg  生成的公鑰

-rw------- 1 root root  661 Oct 19 17:36 pubring.gpg~

-rw------- 1 root root  600 Oct 19 17:36 random_seed

-rw------- 1 root root 1325 Oct 19 17:36 secring.gpg  生成的私鑰

-rw------- 1 root root 1360 Oct 19 17:36 trustdb.gpg

 

gpg --list-keys   能夠查看當前生成的公鑰信息

[root@centos6.gnupg]#gpg --list-keys

/root/.gnupg/pubring.gpg

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

pub   1024R/B2753BA3 2019-10-19 [expires: 2019-10-29]

uid                  wangge

sub   1024R/E155F1DF 2019-10-19 [expires: 2019-10-29]

2)將centos6的公鑰導出到一個文件中

  gpg -a --export -o /data/wang   -a 將公鑰內容導出爲文本格式文件

[root@centos6.gnupg]#gpg -a --export -o /data/wang

3)將centos6導出的公鑰傳送給centos7的data目錄下

scp wang 192.168.34.101:/data/

4)gpg --import /data/wang   將centos6和centos7的公鑰導入到一塊兒

5)gpg -e -r wangge f2    -e 加密 -r 指定公鑰用戶名。   用centos6的wangge用戶進行加密文件

[root@centos7data]#ls

f2  f2.gpg  wang      加密後的文件以gpg後綴結尾,f2.gpg爲加密後的文件

6)scp f2.gpg 192.168.34.100:/data/  將加密的f2.gpg文件傳到centos6上去

[root@centos7data]#scp f2.gpg 192.168.34.100:/data/

root@192.168.34.100's password: 

f2.gpg   

7)在centos6上對f2.gpg進行解密,全部加密文件及傳輸過程已完。

gpg -o f2 -d f2.gpg

8)將centos6/7生成的公鑰和私鑰分別進行刪除:

centos6刪除公鑰、私鑰

gpg --delete-secret-keys wangge  先刪除私鑰

gpg --delete-keys wangge    再刪除公鑰

centos7刪除公鑰、私鑰

gpg --delete-secret-keys liuge 先刪除私鑰

gpg --delete-keys liuge   再刪除公鑰

gpg --delete-keys wangge  刪除centos6傳過來的公鑰

所有加密文件傳輸及刪除實驗完畢!

相關文章
相關標籤/搜索