加解密技术
一.加密/解密
1.什么是算法?什么是密钥?
算法:加密/解密所使用的转换规则
密钥:加密/解密所使用的指令或代码
2.加密的目的和方式
--确保数据的机密性
加密的方式:
对称加密:加密/解密用同一个密钥
非对称加密:加密/解密用不同的密钥(公钥/私钥)
--保护信息的完整性
信息摘要:基于输入的信息生成长度较短 位数固定的散列值
3.常见的加密算法:
对称加密:
--DES,Data Encryption Standard 数据加密算法
--AES,Advanced Encryption Standard 高级加密算法
非对称加密:
--RSA,Rivest Shamirh Adleman 由发明者的三个人名组成
--DSA,Digital Signature Algorithm 数字签名算法
信息摘要:
--MD5,Message Digest Algorithm 5
--SHA,Secure Hash Algorithm
4.MD5完整性检验
系统中的每个文件都有一个唯一的MD5值,当文件被修改之后,MD5值也会随之改变;
我们可以利用这一特性,通过查看文件的MD5值来判断文件是否经过修改,防止别人的“恶作剧”。
root@localhost test]# md5sum a.txt //创建一个测试文件,查看一下MD5值
bf7b0cb3765580ec2f58c215319aeea8 a.txt
[root@localhost test]# vim a.txt //做不容易被发现的更改,比如在行尾添加一个空格
[root@localhost test]# md5sum a.txt //再次查看其MD5值
456466dcc2b97adf52a50c94183e7266 a.txt //发现MD5值已经改变
5.GnuPG,加密工具
1)GnuPG,GUN Privacy Guard,最流行的数据加密,数字签名工具软件
[root@localhost test]# gpg --version //查看软件版本
gpg (GnuPG) 2.0.14
libgcrypt 1.4.5
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Home: ~/.gnupg
支持的算法:
公钥:RSA, ELG, DSA
对称加密:3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128,
CAMELLIA192, CAMELLIA256
散列:MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
压缩:不压缩, ZIP, ZLIB, BZIP2
二.使用GPG加/解密文件
对称方式:
--加密操作:-c或者--symmetric
--解密操作:-d或者--decrypt
[root@localhost test]# gpg -c test.txt
[root@localhost test]#ls //加密后会生成一个gpg的文件
test.txt test.txt.gpg
[root@localhost test]# file test.txt* //查看文件类型
test.txt: ASCII text
test.txt.gpg: data
[root@localhost test]# gpg -d test.txt.gpg > dtest.txt //解密-d
非对称方式:
工作原理:
公钥解密,私钥解密
用户A和用户B加密通信,用户B先生成一对密钥对,然后用户B把自己的公钥上传到互联网上,用户A获取到用户B的公钥之后,用用户B的公钥进行加密,生成加密的数据,最后用户B用自己的私钥揭开加密数据,其他人由于没有用户B的私钥,所以接不开加密数据。
1、非对称密钥成对出现,使用收件人的公钥加密,发给收件人,收件人有一个与之对应的私钥,才能解密。
2、bob要给alice发一个加密的文件,需要使用alice的公钥加密
*************************** 前期准备************************************
用ssh -X 的方式分别登录到bob和alice,不要用su的方式
--alice创建密钥对:--gen-key
--alice导出公钥:--export --armor 或-a
--bob导入公钥:--import
2.1
[alice@rhel6-1 ~]$ gpg --gen-key //按向导回答问题
gpg (GnuPG) 2.0.14; Copyright (C) 2009 Free Software Foundation, Inc.
请选择您要使用的密钥种类:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (仅用于签名)
(4) RSA (仅用于签名)
您的选择? //设置用户信息,私钥口令
...
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
//过程中让你填写的密码是用于保护私钥的
公钥和私钥已经生成并经签名。
gpg: 正在检查信任度数据库
gpg: 需要 3 份勉强信任和 1 份完全信任,PGP 信任模型
gpg: 深度:0 有效性: 1 已签名: 0 信任度:0-,0q,0n,0m,0f,1u
pub 2048R/96A314F4 2014-04-26
密钥指纹 = B9FE F46D 26AF B55F D0A3 94D7 1E4B 2764 96A3 14F4
uid alice <[email protected]>
sub 2048R/8805B9B4 2014-04-26
//看到类似信息,表示密钥对生成成功
[alice@rhel6-1 ~]$ gpg --list-keys
/root/.gnupg/pubring.gpg //查看公钥详细信息
------------------------
[alice@rhel6-1 ~]$ gpg --list-secret //查看私钥相关信息
2.2 alice把公钥传递给bob
[alice@rhel6-1 ~]$ gpg -a --export > /tmp/alice.pub //上传公钥
选项-a代表用ASSIC码的方式加密
2.3 bob收到alice的公钥后,用其加密文档
[bob@rhel6-1 ~]$ gpg --import /tmp/alice.pub //导入公钥
gpg: 密钥 96A314F4:“alice <[email protected]>”未改变
gpg: 合计被处理的数量:1
gpg: 未改变:1
[bob@rhel6-1 ~]$ gpg --list-keys //bob查看导入的公钥
/home/bob/.gnupg/pubring.gpg
----------------------------
pub 2048R/A3820BAE 2013-12-04
uid alice <[email protected]>
sub 2048R/60AFF7EC 2013-12-04
*************************加解密操作****************************************
--加密操作:--encrypt 或-e
--指定目标用户:--recipient(受体)或-r
--解密操作:--decrypt或-d
加密文件:
[bob@rhel6-1 ~]$ gpg -ear alice bob.txt
2.4 bob把加密后的文件发给alice
[bob@rhel6-1 ~]$ cp bob.txt.asc /tmp/
2.5 alice解密文件
[alice@rhel6-1 ~]$ cp /tmp/bob.txt.asc .
[alice@rhel6-1 ~]$ gpg bob.txt.asc //用私钥解密
[alice@rhel6-1 ~]$ ls
bob.txt bob.txt.asc
[alice@rhel6-1 ~]$ cat bob.txt
this is from bob
一次加密传输至此完成!
三、使用GPG实现签名
1、签名可实现的功能:
(1)身份认证,表明用户确实是他声称的那个人
(2)数据完整性,数据一旦被篡改,签名就会失效
(3)认可:不可抵赖
2、alice发送签名文件给bob
2.1 alice签名一个纯文本文件
[alice@rhel6-1 ~]$ echo 'alice file' > alice.txt
[alice@rhel6-1 ~]$ gpg -b alice.txt //-b选项创建签名
alice.txt alice.txt.sig
2.2 把原文和签名文件发送给bob
[alice@rhel6-1 ~]$ cp alice.txt* /tmp/
2.3 验证签名
[bob@rhel6-1 ~]$ cp /tmp/alice.txt* .
[bob@rhel6-1 ~]$ ls
[bob@rhel6-1 ~]$ gpg --verify alice.txt.sig
gpg: 于 2013年12月04日 星期三 15时59分51秒 CST 创建的签名,使用 RSA,钥匙号 A3820BAE
gpg: 完好的签名,来自于“alice <[email protected]>”
gpg: 警告:这把密钥未经受信任的签名认证!
gpg: 没有证据表明这个签名属于它所声称的持有者。
主钥指纹: D780 8E96 D660 D394 1001 BF02 22BF 7AF9 A382 0BAE
2.4 把alice.txt的内容稍做修改存盘,再次验证
[bob@rhel6-1 ~]$ vim alice.txt
gpg: 已损坏的签名,来自于“alice <[email protected]>”