對稱加密算法
特性:
加密擂橘、解密使用同一個密鑰斑胜,效率高
將原始數(shù)據(jù)分割成固定大小的塊河爹,逐個進(jìn)行加密
缺陷:
密鑰過多
密鑰分發(fā)
數(shù)據(jù)來源無法確認(rèn)
算法
DES : 是一種使用密鑰加密的塊算法羊瘩,采用56位加密算法杖爽。
3DES : 三重數(shù)據(jù)加密算法跃闹,進(jìn)行三次DES加密筑公。
AES : 高級加密標(biāo)準(zhǔn)目前對稱加密中最常用的算法之一喂柒,采用128、192棚放、256枚粘、512位算法馅闽。
Blowfish: 是一個64位分組及可變密鑰長度的對稱密鑰分組密碼算法飘蚯。
IDEA : 國際數(shù)據(jù)加密算法馍迄,采用128位加密算法。
CAST-128: 是類似于DES的置換組合網(wǎng)路加密系統(tǒng)局骤,是一種12或16循環(huán)的Feistel密碼攀圈,塊長度是64位,密碼長度最大128位
查找/etc/sysconfig/下的普通文件進(jìn)行哈希運算(2者效果一樣)
[root@centos7 /app]# find /etc/sysconfig/ -type f -exec sha512sum {} \;
[root@centos7 /app]# find /etc/sysconfig/ -type f |xargs sha512sum
重定向到文件中
[root@centos7 /app]# find /etc/sysconfig/ -type f |xargs sha512sum >/app/f1.log
[root@centos7 /app]# sha512sum --check /app/f1.log 檢查是否改變
[root@centos7 /app]#openssl passwd -1 做口令加密
Password:
Verifying - Password:
$1$45Gqame0$DPzKaPrj4ymsi.FJiiVWn0 #1代表md5
密鑰交換
密鑰交換: IKE(Internet Key Exchange )
公鑰加密:
DH (Deffie-Hellman):生成會話密鑰,參看:
https://en.wikipedia.org/wiki/Diffie%E2%80%93Hel
lman_key_exchange
DH:
1峦甩、 A: a,p 協(xié)商生成公開的整數(shù)a, 大素數(shù)p
B: a,p
2赘来、 A:生成隱私數(shù)據(jù) :x (x<p ),計算得出 a^x%p凯傲,發(fā)送給B
B:生成隱私數(shù)據(jù) :y,計算得出 a^y%p犬辰,發(fā)送給A
3、 A:計算得出 [(a^y%p)^x] %p = a^xy%p冰单, 生成為密鑰
B:計算得出 [(a^x%p)^y] %p = a^xy%p幌缝,生成為密鑰
a=2,p=11
A
x=3 5
B
y=4 8
2^3=8%11=8
2^4=16%11=5
[5^3]%11=4
[8^4]%11=4
應(yīng)用程序: RPM
文件完整性的兩種實施方式
被安裝的文件
? MD5單向散列
? rpm --verify package_name (or -V)
發(fā)行的軟件包文件
? GPG公鑰簽名
? rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEYredhat*
? rpm --checksig pakage_file_name (or -K)
rpm包校驗 文件哈希值變化
5 digest (formerly MD5 sum) differs
T mTime differs
使用gpg實現(xiàn)對稱加密
對稱加密file文件
gpg -c file
ls file.gpg
在另一臺主機(jī)上解密file
gpg -o file -d file.gpg
單向散列Hash
特性
將任意數(shù)據(jù)縮小成固定大小的數(shù)值
任意輸入長度的數(shù)據(jù)。
輸出固定長度是加密數(shù)值诫欠。
若修改數(shù)據(jù)涵卵,生成的數(shù)值也會改變,不會和原來的數(shù)值產(chǎn)生沖突荒叼。
無法從數(shù)值中推算生成數(shù)據(jù)轿偎,不可逆。
功能
驗證數(shù)據(jù)完整性
提高數(shù)字簽名的有效性
常見算法
md5 : 把不同長度的數(shù)據(jù)塊進(jìn)行暗碼運算成一個128位的數(shù)值
sha1 : 對任意長度的數(shù)據(jù)運算生成一個160位的數(shù)值
sha224 : 對任意長度的數(shù)據(jù)運算生成一個224位的數(shù)值
sha256 : 對任意長度的數(shù)據(jù)運算生成一個256位的數(shù)值
sha384 : 對任意長度的數(shù)據(jù)運算生成一個384位的數(shù)值
sha512 : 對任意長度的數(shù)據(jù)運算生成一個512位的數(shù)值
MAC :是一種使用密鑰的單向函數(shù)被廓,可以用它們在系統(tǒng)上或用戶之間認(rèn)證文件或消息坏晦,常見的是HMAC(用于消
息認(rèn)證的密鑰散列)。
Linux中的常用工具
md5sum
sha1sum file伊者、sha1sum --check file
openssl
gpg
示例
[root@CentOS6.9 ~]#echo "test" > hash #生成一個文件
[root@CentOS6.9 ~]#ls #查看
admin.pubkey anaconda-ks.cfg bin hash install.log install.log.syslog test test.gpg
[root@CentOS6.9 ~]#md5sum hash #md5運算產(chǎn)生hash值
d8e8fca2dc0f896fd7cb4cb0031ba249 hash #hash值
[root@CentOS6.9 ~]#echo "123" >> hash #在文件的中加一行123
[root@CentOS6.9 ~]#md5sum hash #再用md5運算產(chǎn)生hash值
4145c486d60a3d078fc57ac0e7de44bd hash #hash值和原來的已經(jīng)不同了
[root@CentOS6.9 ~]#echo "test" > hash #把文件重置
[root@CentOS6.9 ~]#md5sum hash #再次運算
d8e8fca2dc0f896fd7cb4cb0031ba249 hash #hash值和原來的相同
[root@CentOS6.9 ~]#md5sum hash > hash.key #hash運算并把hash值寫入hash.key文件中
[root@CentOS6.9 ~]#md5sum -c hash.key #用這個文件判斷原文件的數(shù)據(jù)有沒有改變
hash: 確定
[root@CentOS6.9 ~]#echo "123" >> hash #把123追加到hash文件
[root@CentOS6.9 ~]#md5sum -c hash.key #再次判斷
hash: 失敗
md5sum: 警告:1/1 生成的校驗和不匹配
[root@CentOS6.9 ~]#
非對稱加密
特點英遭,采用公鑰和私鑰加密和解密
公鑰:公開給所有人
私鑰:自己留存,必須保證其私密性
用公鑰加密數(shù)據(jù)亦渗,只能使用與之配對的私鑰解密挖诸;反之亦然
功能:
數(shù)字簽名:主要在于讓接收方確認(rèn)發(fā)送方身份
對稱密鑰交換:發(fā)送方用對方的公鑰加密一個對稱密鑰后發(fā)送給對方
數(shù)據(jù)加密:適合加密較小數(shù)據(jù)
缺點:密鑰長, 加密解密效率低下
算法:
RSA :RSA是目前最有影響力的公鑰加密算法法精,安全性依賴于大數(shù)分解多律。(數(shù)據(jù)加密,數(shù)字簽名)
DSA :是Schnorr和ElGamal簽名算法的變種搂蜓,基于整數(shù)有限域離散對數(shù)難題狼荞,一個重要特點是兩個素數(shù)
公開,這樣帮碰,當(dāng)使用別人的p和q時相味,即使不知道私鑰,你也能確認(rèn)它們是否是隨機(jī)產(chǎn)生的殉挽,還是
作了手腳丰涉,RSA算法卻做不到拓巧。(數(shù)字簽名)
ELGamal : 公鑰密碼體制和橢圓曲線加密體,其安全性依賴于計算有限域上離散對數(shù)一死。(數(shù)據(jù)加密肛度,數(shù)字簽)
使用gpg工具實現(xiàn)公鑰加密
在hostB主機(jī)上用公鑰加密,在hostA主機(jī)上解密
在hostA主機(jī)上生成公鑰/私鑰對
gpg --gen-key
在hostA主機(jī)上查看公鑰
gpg --list-keys
在hostA主機(jī)上導(dǎo)出公鑰到wang.pubkey
gpg -a --export -o wang.pubkey
從hostA主機(jī)上復(fù)制公鑰文件到需加密的B主機(jī)上
scp wang.pubkey hostB
實驗ctntos7傳給centos6文件(加密到解密)
centos6加密
gpg --gen-key
生成秘鑰
輸入密碼(可以不輸入密碼)
提示密碼簡單
OK
查看秘鑰生成
gpg --list-key 查看秘鑰生成
將centos6公鑰拷貝到centos7主機(jī)
切換到centos7主機(jī)
gpg --gen-key 添加centos7秘鑰
生成秘鑰
把centos6公鑰導(dǎo)入到centos7的 .gnupg
用centos6公鑰給文件加密
把加密文件傳輸?shù)絚entos6主機(jī)上
切換centos6主機(jī)上
刪除centos6的秘鑰
刪除centos7秘鑰
gpg --delete-keys centos7 提示刪除公鑰先刪除私鑰
gpg --ddelete-keys centos7 刪除公鑰
完成