9月7日 安全和加密 1

1、对称加密算法

对称加密:加密和解密使用同一个密钥。
DES:Data Encryption Standard,56bits
3DES:
AES:Advanced (128, 192, 256bits)
Blowfish,Twofish
IDEA,RC6,CAST5
data---加密key1(data)=data'----解密key2(data')=data
如果key1=key2,称为对称加密
如果key1!=key2,称为非对称加密
特性:
1、加密、解密使用同一个密钥,效率高。1G的数据用DES加密后变成2G,加密需要4分钟,解密需要8分钟,一共12分钟。
2、将原始数据分割成固定大小的块,逐个进行加密。
缺陷:
1、密钥过多。
2、密钥分发时不安全,因为用同一把钥匙,怎么将钥匙传给对方才算安全,如果传递时被黑客截获钥匙和加密数据,就可以打开加密的数据,除非人送过去,但人送过去还不如直接把数据带过去了。
3、数据来源无法确认。
示例

[root@redhat7 app]#gpg -c bak.sh ---加密bak.sh文件,会出现一个
框让输入密码,输入两遍密码后就会把文件加密,这个密码就相当于
对称秘钥,对方要想解密,也得需要这个秘钥才能解密
[root@redhat7 app]#ls    ---生成一个bak.sh.gpg文件,这个文件就是
加密的文件
bak.sh      dos.sh  f1.txt  fun.awk   scp.sh  ssh1.exp
bak.sh.gpg  f1      f2      reset.sh  script  website
[root@redhat7 app]#scp bak.sh.gpg 172.18.21.6:/app  ---将这个加密的文件传给centos6
root@172.18.21.6's password: 
bak.sh.gpg                                  100%   79   107.1KB/s   00
[root@centos6 app]#gpg -d bak.sh.gpg --- -d选项用于解密文件,要输入秘钥才能解密,只会在屏幕上输出
gpg: directory `/root/.gnupg' created
gpg: new configuration file `/root/.gnupg/gpg.conf' created
gpg: WARNING: options in `/root/.gnupg/gpg.conf' are not yet active durs run
gpg: keyring `/root/.gnupg/secring.gpg' created
gpg: keyring `/root/.gnupg/pubring.gpg' created
gpg: CAST5 encrypted data
can't connect to `/root/.gnupg/S.gpg-agent': No such file or directory
gpg-agent[8859]: directory `/root/.gnupg/private-keys-v1.d' created       ┌─────────────────────────────────────────────────────┐
           │ Enter passphrase                                    │
           │                                                     │
           │                                                     │
           │ Passphrase ******__________________________________ │
           │                                                     │
           │       <OK>                             <Cancel>     │
           └─────────────────────────────────────────────────────┘
gpg: encrypted with 1 passphrase
cp -a /etc/ /app/`date "+%F-%T"`/     ---解密后显示的文件内容
gpg: WARNING: message was not integrity protected
[root@centos6 app]#gpg -o bak.sh -d bak.sh.gpg ---为了让解密后的内容保存到文件中,使用-o选项,这里-o选项必须在前面。
gpg: CAST5 encrypted data
can't connect to `/root/.gnupg/S.gpg-agent': No such file or directory    ┌─────────────────────────────────────────────────────┐
           │ Enter passphrase                                    │
           │                                                     │
           │                                                     │
           │ Passphrase ******__________________________________ │
           │                                                     │
           │       <OK>                             <Cancel>     │
           └─────────────────────────────────────────────────────┘
gpg: encrypted with 1 passphrase
gpg: WARNING: message was not integrity protected
[root@centos6 app]#cat bak.sh   ---查看文件内容
cp -a /etc/ /app/`date "+%F-%T"`/

2、非对称加密算法

非对称加密:密钥是成对出现
公钥:公开给所有人;public key
私钥:自己留存,必须保证其私密性;secret key
特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然
功能:
数字签名:主要在于让接收方确认发送方身份,比如用发送方的私钥加密的数据,只有用发送方的公钥才能解密,如果能解开,说明是发送方发的数据,相当于发送方在数据里打了个标签,证明这个数据是我发送的数据,你必须用我给你的公钥才能解密数据。
比如a--->b发数据
a有两把钥匙:pa、sa
b有两把钥匙:pb、sb
data--->加密sa(data)=data'---->解密pa(data')=data
a用自己私钥加密的数据,b只有拿到a的公钥才能解开。
对称密钥交换:发送方a用对方b的公钥加密一个对称密钥后发送给对方b,对方b用自己的私钥解开后,就可以得到对称秘钥,保证对称秘钥传输的安全性。
a发送pb(key)--->b ,b用自己的sb解开就可以得到key
数据加密:适合加密较小数据
缺点:密钥长,加密解密效率低下,比如用RSA非对称加密算法加密后,1G的数据,加密后还是1G,加密时间1分钟,解密时间需要64小时,效率极低
算法:
RSA(加密,数字签名),DSA(数字签名),ELGamal
常见的加密方式

a有两把钥匙:pa、sa
b有两把钥匙:pb、sb
hash(data):表示取数据的哈希值
 pb[sa(data)]   ---a用a的私钥加密数据后,再用b的公钥加密,然后传
给b,这样就可以保证数据是a的,因为你必须拿到a的公钥才能解密
数据。
pb{data+sa[hash(data)]}   ---a将数据哈希值用a的私钥加密,实现数
字签名,然后再将数据和数据的哈希值用b的公钥加密,传给b,b收
到数据后用自己的私钥解密,然后再用a的公钥解密哈希值,再将
data取哈希值,看看两个哈希值是否一样,就可以判断传输的过程中
数据有没有损坏
key{data+sa[hash(data)]}+pb(key)   ---表示a用自己的私钥加密哈希
值,然后用对称秘钥加密数据,再用b的公钥加密对称秘钥,这种方
式可以提高效率,因为哈希值比数据少很多,用非对称加密时速度就
快,用对称加密数据速度也快,并且用非对称加密对称秘钥的钥匙也
比较快。

3、用哈希值检查文件的数据是否被破坏

数据相同,哈希值必相同,数据不同,哈希值必不同,例如/etc/shadow文件,修改密码的时候这个文件中的内容会发生改变,第二列的密码处会改变,即使修改的密码和原来是一样的,第二列也会发生变化,哈希值就会不同。哈希值就是利用不同的加密算法对文件进行哈希运算,文件内容相同,算法相同,哈希值必相同,哈希值也没称为摘要。

取文件的哈希值
[root@redhat7 app]#md5sum f1
b961a0c24aae5dbdd45c616698aa2583  f1
[root@redhat7 app]#sha1sum f1
af3a88aa357037a2c10a5b36bcaecc790e058d50  f1
[root@redhat7 app]#sha512sum f1
899263275ec8aab505102b9c58032e4dba758bf4cfca3da7fc5916f7e895cd31bc57ac99e9883287a41fdeaaed0664a45e90ad4050c168e0baea240355616459  f1
用不同的算法取出来的哈希值不同,取出来的哈希值是个16进制,1
个16进制代表4个2进制。
常见算法:md5: 128bits、sha1: 160bits、sha224:224bits
sha256:256bits、sha384:384bits、sha512:512bits
[root@redhat7 app]#sha512sum f1 >f1.sha512  ---将文件的哈希值
保存到一个文件中
[root@redhat7 app]#sha512sum --check f1.sha512 ---检查文件的哈
希值是否发生改变,ok就是没有改变,说明文件没有破坏
f1: OK
[root@redhat7 app]#echo >> f1  ---在里面加一个空格
[root@redhat7 app]#sha512sum --check f1.sha512 ---发现失败了,
说明文件遭到了破坏
f1: FAILED
sha512sum: WARNING: 1 computed checksum did NOT match
[root@redhat7 app]#find /etc/sysconfig/ -type f -exec sha512sum {} \; >/app/all.log   ---也可以一次就得出多个文件的哈希值,并将其保存
到文件中。
[root@redhat7 app]#sha512sum --check all.log ---一次检查多个文件
的哈希值,看看有没有什么变化。
/etc/sysconfig/ip6tables-config: OK
/etc/sysconfig/iptables-config: OK
/etc/sysconfig/cbq/avpkt: OK
/etc/sysconfig/cbq/cbq-0000.example: OK

4、rpm检查文件完整性的两种实施方式

  • 被安装的文件
[root@redhat7 app]#rpm -ql tree   ---tree包安装后生成的文件
/usr/bin/tree
/usr/share/doc/tree-1.6.0
/usr/share/doc/tree-1.6.0/LICENSE
/usr/share/doc/tree-1.6.0/README
/usr/share/man/man1/tree.1.gz
[root@redhat7 app]#rpm -V tree   ---检查文件的属性和哈希值等是否发生改变,发现没有发生改变
[root@redhat7 app]#echo >> /usr/share/doc/tree-1.6.0/LICENSE 
---加一个空格在一个文件中
[root@redhat7 app]#rpm -V tree  ---再检查,发现文件的属性和哈希值等发生了变化
S.5....T.  d /usr/share/doc/tree-1.6.0/LICENSE

rpm安装tree包时,会把每个文件的属性以及哈希值等保存到rpm数据库中,用rpm -V 进行检查时,就是将数据库中文件属性以及哈希值等和目前的文件进行比对,看是否有变化。

  • 检查发行的软件包文件
[root@centos6 app]#rpm -K /misc/cd/Packages/tree-1.5.3-3.el6.x86_64.rpm 
/misc/cd/Packages/tree-1.5.3-3.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

可以检查软件包文件的完整性和签名,是在导入公钥的前提下。

5、使用gpg工具实现公钥加密

centos6端进行的操作
[root@centos6 app]#gpg --list-key  ---查看公钥
gpg: /root/.gnupg/trustdb.gpg: trustdb created
[root@centos6 app]#ll /root/.gnupg/   
total 16
-rw-------. 1 root root 7856 Sep  8 07:52 gpg.conf
drwx------. 2 root root 4096 Sep  8 07:52 private-keys-v1.d
-rw-------. 1 root root    0 Sep  8 07:52 pubring.gpg  ---存放公钥的文
件,大小都是0
-rw-------. 1 root root    0 Sep  8 07:52 secring.gpg   ---存放私钥的文
件,大小是0,说明公钥和私钥还没有
-rw-------. 1 root root   40 Sep  8 12:11 trustdb.gpg
[root@centos6 app]#gpg --gen-key   ---生成公钥和私钥
[root@centos6 app]#ll /root/.gnupg/   
total 32
-rw-------. 1 root root 7856 Sep  8 07:52 gpg.conf
drwx------. 2 root root 4096 Sep  8 07:52 private-keys-v1.d
-rw-------. 1 root root  650 Sep  8 12:21 pubring.gpg
存放公钥的文件大小已经发生变化
-rw-------. 1 root root  650 Sep  8 12:21 pubring.gpg~
-rw-------. 1 root root  600 Sep  8 12:21 random_seed
-rw-------. 1 root root 1313 Sep  8 12:21 secring.gpg
存放私钥的文件也是发生变化
-rw-------. 1 root root 1280 Sep  8 12:21 trustdb.gpg
[root@centos6 app]#gpg --list-key   ---查看一下,发现公钥已经生成
/root/.gnupg/pubring.gpg
------------------------
pub   1024R/84BCC1E9 2017-09-08
uid                  centos6  ---公钥和私钥
sub   1024R/8DC5A90D 2017-09-08
[root@centos6 app]#gpg --list-secret-key  ---查看私钥也已经生成
/root/.gnupg/secring.gpg
------------------------
sec   1024R/84BCC1E9 2017-09-08
uid                  centos6
ssb   1024R/8DC5A90D 2017-09-08
[root@centos6 app]#gpg -a --export -o centos6.pubkey   ---导出公钥到一个文件中
[root@centos6 app]#scp centos6.pubkey 172.18.21.7:/app
root@172.18.21.7's password: 
centos6.pubkey                                                                                      100%  984     1.0KB/s   00:00   
把公钥文件传给centos7
在centos7中进行的操作
[root@redhat7 app]#gpg --gen-key   ---生成公钥和私钥
[root@redhat7 app]#gpg --list-key
/root/.gnupg/pubring.gpg
------------------------
pub   1024R/E046B6B6 2017-09-08
uid                  centos7
sub   1024R/A0F81BB8 2017-09-08
[root@redhat7 app]#gpg --list-secret-key
/root/.gnupg/secring.gpg
------------------------
sec   1024R/E046B6B6 2017-09-08
uid                  centos7
ssb   1024R/A0F81BB8 2017-09-08
发现公钥和私钥都已经生成
[root@redhat7 app]#gpg --import /app/centos6.pubkey  ---将centos6的公钥导入centos7中
gpg: key 84BCC1E9: public key "centos6" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
[root@redhat7 app]#gpg --list-key ---发现导入成功
/root/.gnupg/pubring.gpg
------------------------
pub   1024R/E046B6B6 2017-09-08
uid                  centos7
sub   1024R/A0F81BB8 2017-09-08

pub   1024R/84BCC1E9 2017-09-08
uid                  centos6
sub   1024R/8DC5A90D 2017-09-08
[root@redhat7 app]#gpg -e -r centos6 bak.sh ---用centos6的公钥加密bak.sh这个文件
gpg: 8DC5A90D: There is no assurance this key belongs to the named user

pub  1024R/8DC5A90D 2017-09-08 centos6
 Primary key fingerprint: 0DE9 D72A 9C65 492F 750B  5E80 31B5 FB3D 84BC C1E9
      Subkey fingerprint: 624D 280C B6FF 0BE7 79AA  4CE3 D153 F605 8DC5 A90D

It is NOT certain that the key belongs to the person named
in the user ID.  If you *really* know what you are doing,
you may answer the next question with yes.

Use this key anyway? (y/N) y
[root@redhat7 app]#scp bak.sh.gpg 172.18.21.6:/app
root@172.18.21.6's password: 
bak.sh.gpg                                                                                          100%  243   358.3KB/s   00:00    
把这个文件传给centos6
在centos6中进行的操作
[root@centos6 app]#gpg -o bak.log -d bak.sh.gpg   ---解密这个文件,我们发现自动就是用自己的私钥解密
gpg: encrypted with 1024-bit RSA key, ID 8DC5A90D, created 2017-09-08
      "centos6"
[root@centos6 app]#cat bak.log   --可以看到这个文件的内容了
cp -a /etc/ /app/`date "+%F-%T"`/
[root@centos6 app]#gpg --delete-secret-keys centos6  ---删除私钥
[root@centos6 app]#gpg --delete-keys centos6  ---删除公钥,必须先删除私钥,才能删除公钥
[root@centos6 app]#ll /root/.gnupg/
total 24
-rw-------. 1 root root 7856 Sep  8 07:52 gpg.conf
drwx------. 2 root root 4096 Sep  8 07:52 private-keys-v1.d
-rw-------. 1 root root    0 Sep  8 15:52 pubring.gpg
-rw-------. 1 root root  650 Sep  8 12:21 pubring.gpg~
-rw-------. 1 root root  600 Sep  8 15:48 random_seed
-rw-------. 1 root root    0 Sep  8 15:52 secring.gpg
-rw-------. 1 root root 1280 Sep  8 15:52 trustdb.gpg

总结:在生成公钥和私钥时,需要一些时间,并要不断的移动鼠标,或者敲键盘才能生成,建议实验的时候选择1024大小,避免浪费时间。删除公钥时要注意,要先删除自己的私钥才能删除公钥。

6、CA和证书

如果a要想给b传数据,使用b的公钥去加密,怎么才能保证得到的公钥是b的呢?这就需要一个第三方的权威机构,称为CA认证机构,颁发证书给b,b首先将自己的公钥pb传给CA,CA进行的操作是颁发证书:sca(pb)+CA+算法+有效期等,首先用自己的私钥去加密b的公钥,相当于数字签名,并将证书和算法有效期等一起传给b,b再将这证书传给a,a因为认可这个机构,所以a有CA的公钥,就可以解密这个证书,得到b的公钥。一般CA还会有上级CA,称为根CA,他的下一级CA称为子CA,根CA给子CA颁发证书,子CA再给b颁发证书,根CA是用来给子CA证明合法性的,根CA谁来证明呢,只有自己证明自己,自己签名自己的公钥,也就是b得到的证书是srootca(psubca)+ssubca(pb),根ca用自己的私钥签名子ca的公钥,然后把证书传给子ca,子ca用自己的私钥签名b的公钥,a得到这个证书后,因为认可根ca,所以有根ca的公钥,就解密子ca的公钥,得到子ca的公钥后,就可以解密b的公钥,得到b的公钥了。
PKI: Public Key Infrastructure
签证机构:CA(Certificate Authority)
注册机构:RA
证书吊销列表:CRL
证书存取库:
X.509:定义了证书的结构以及认证协议标准
版本号 序列号 签名算法 颁发者 有效期限 主体名称 主体公钥
CRL分发点 扩展信息 发行者签名
证书类型:
证书授权机构的证书
服务器
用户证书
获取证书两种方法:
•使用证书授权机构
生成签名请求(csr)
将csr发送给CA
从CA处接收签名
•自签名的证书
自已签发自己的公钥

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容