Linux加密和數據安全性


加密和安全

墨菲定律

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

原話:如果有兩種或兩種以上的方式去做某件事情,而其中一種選擇方式將導

致災難,則必定有人會做出這種選擇

主要內容:

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

所有的事都會比你預計的時間長

會出錯的事總會出錯

如果你擔心某種情況發生,那么它就更有可能發生

 

安全機制

信息安全防護的目標

保密性 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

特性:

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

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

缺陷:

1、密鑰過多

2、密鑰分發

3、數據來源無法確認

 

對稱加密理解幫助:

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 、sha256、sha384、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傳過來的公鑰

全部加密文件傳輸及刪除實驗完畢!

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM