天天看点

加解密技术

               加解密技术

一.加密/解密

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]>”

继续阅读