加密和安全
墨菲定律
墨菲定律:一種心理學效應,是由愛德華·墨菲(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/
[email protected]'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 切換到當前目錄可以查看生成的公鑰私鑰對
[[email protected]]#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 可以查看當前生成的公鑰資訊
[[email protected]]#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 將公鑰內容匯出為文本格式檔案
[[email protected]]#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/
[email protected]'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傳過來的公鑰
全部加密檔案傳輸及洗掉實驗完畢!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/161490.html
標籤:Linux
