加解密基础

加密解密相关概念

互联网上中间人攻击通常用的三种方式:1)窃听 2)数据篡改 3)会话劫持

 

密码算法协议的分类:

  1. a)  对称加密

        常用的有:DES、3DES、AES、Blowfish、RC6、CAST5等

        特性:1.加密、解密使用同一个密钥。

             2.将原始数据分割成固定大小的块,逐个进行加密。

             3.加解密速度快,密钥短。

  1. b)  非对称加密(公钥加密)

        常用的有:RSA、DSA、DH

        特性: 1.用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然。

             2.公钥公开给所有人,私钥自己留存,必须保持其私密性。

        其它一些介绍:

             1.RSA可用于数字签名和密钥交换

             2.DSA用于数字签名 (Digital SignatureAlgorithm)

             3.基于大数运算的加密算法,降低了加解密的速度。一般来说只用于少量数据加密。一般采用对称加密算法加密其文件,然后用非对称算法加密对称算法所用到的对称密钥

             4.DH仅适用于密钥交换

  1. c)  单向加密

        常用的有: MD5、SHA-1、SHA224、SHA256、SHA384

        特性:1.用于数据完整性校验

             2.定长输出、雪崩效应

             3.只能加密,不能解密,单向的运算


密钥交换算法:

DH算法只能用于密钥的交换,而不能进行消息的加密和解密。

 

DH 密钥交换算法的原理和过程如下:

有用户Alice 和Bob需要通信。

1.双方先确定2个大素数n和g,这两个数不能保密。

2.Alice再选择一个大随机数x,并计算A:A=g^x mod n

3.Alice将A发给Bob

4.Bob另外选择一个大随机数y,并计算B如下:B=g^y mod n

5.Bob将B发给Alice

6.计算秘密密钥K1,K1=B^x mod n

7.计算秘密密钥K2,K2=A^y mod n

最终结果一定是K1=K2,且K1、K2都没有暴露出来,因此Alice和Bob就可以用K1或者K2来进行加密和解密了。


公钥私钥的知识:

1,公钥和私钥成对出现

2,公开的密钥叫公钥,只有自己知道的叫私钥

3,用公钥加密的数据只有对应的私钥可以解密

4,用私钥加密的数据只有对应的公钥可以解密

5,如果可以用公钥解密,则必然是对应的私钥加的密

6,如果可以用私钥解密,则必然是对应的公钥加的密

 

公钥加密的2个功能:

1.身份验证/数字签名:【私钥加密数据,公钥来验证数字签名】

    【例如:Alice生成两个数字,公钥a,私钥b。Alice用私钥b加密一段数据c(私钥签名),加密后结果为d,发给Bob,并告诉对方解密出的数据应该是c。如果Bob解密后确认是c,则一定是Alice发送的,因为能用公钥解密的数据,必然是对应的私钥加密的,私钥只有Alice存有,这样就确认了发送方是Alice,这个过程叫数字签名。】

 

2.数据加密:【公钥加密数据,私钥来解密】

    【例如:Alice生成两个数字,公钥a,私钥b。将a发给Bob,告诉他这是公钥。这样Bob用公钥a加密了一段数据c,加密后的数据为d,放到网上,如果被人窃取了,但是没法被解开,因为不知道私钥b,只有Alcie自己知道私钥是b,只有Alice才能知道d解密后的内容。】

 

总结:

    1,用公钥加密数据,用私钥来解密数据(数据加密)

    2,用私钥加密数据,用公钥解密,来验证数字签名。在实际的使用中,公钥不会单独出现,总是以数字证书的方式出现,这样是为了公钥的安全性和有效性。

    3. 由于公钥加密太费时间。一般只用在密钥交换时候,用公钥加密下。


下面的内容摘自博客:http://blog.itpub.net/21851324/viewspace-1023022/

SSL在通信中的应用:

Alice和Bob要进行安全的通信。很频繁,用公钥加密数据就不行了,原因:

    1.Bob没有公私钥对,无法发消息(实际情况下,可以双方都有工私钥对)

    2.公私钥加密都很费时间,影响速度。

 

Alice的公钥1是公开的,Bob找了个数字3,用Alice的公钥1,加密后发给Alice,说我们以后就用这个数字来加密信息吧,Alice解开后,得到了数字3,这样只有Alice和Bob知道这个秘密的数字3,别的人都不知道,因为他们既不知Bob挑了一个什么数字,加密后的内容他们也无法解开,我们把这个秘密的数字3叫做会话密钥。

 

然后,我们选择一种对称密钥算法,比如DES,(对称算法是说,加密过程和解密过程是对称的,用一个密钥加密,可以用同一个密钥解密),来加密我们之间的通信内容。别人因为不知道3是我们的会话密钥,因而无法解密。

 

 

【说明:对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都能对消息进行加密解密。只要通信需要保密,密钥就必须保密】

 

总结一下:

    1,SSL实现安全的通信

    2,通信双方使用一方或者双方的公钥来传递和约定会话密钥 (这个过程叫做握手)

    3,双方使用会话密钥,来加密双方的通信内容

 

实际使用中,比上面说的还要复杂很多。好在先驱们已经实现了这层Layer,取名为SSL(Secure Socket Layer)


OpenSSL:开源项目

三个组件:

    openssl: 多用途的命令行工具

    libcrypto: 公共加密库

    libssl: 库,实现了ssl及tls


对称加密:

    工具:openssl enc, gpg

    算法:3des, aes, blowfish, twofish

enc命令:【man enc查看详细帮助】

加密:

    openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext

    openssl enc -e -des3 -a -salt -in fstab -out fstab

    ciphertext -k 123456  #一步到位,设置密码为123456

解密:

    openssl enc -d -des3 -a -salt -in fstab.ciphertext -out fstab


单向加密:

    工具:md5sum, sha1sum, sha224sum, sha256sum,..., openssl dgst

    sha1sum inittab  和   openssl dgst -sha1 inittab   的结果一样。

    md5sum inittab   和   openssl dgst -md5 inittab    的结果一样。

    dgst命令:计算消息摘要

        如:openssl dgst [-md5|-sha1] FILE   # 常用的两种计算摘要方式


    openssl base64  -in file -out file.b64 # base64编码文件

    openssl base64 -d -in file.b64 -out file.bin # base64解码文件


    MAC: Message Authentication Code,单向加密的一种延伸应用,用于实现在网络通信中保证所传输的数据的完整性

    机制:

        CBC-MAC

        HMAC:使用md5或sha1算法


生成用户密码:

    passwd命令

        openssl passwd -1 -salt SALT  【-1 是数字1,不是字母,salt】

        如:openssl passwd -1 -salt 123456


生成随机数:

    openssl rand [-base64|-hex] NUM

        支持-base64和-hex两种。

        NUM: 表示字节数。-hex时,每个字符4位,出现的字符数为NUM*2;

    如:openssl rand -hex 4   # 随机生成8位数的字符串

    # 使用场景(如批量添加用户时,生成密码)

    for ((i=1;i<=10;i++));do

        useradd user$i &> /dev/null

        p=$(openssl rand -hex 4)

        echo $p |passwd --stdin user$i &> /dev/null

        echo "user$i :$p" >>/tmp/add_user.txt

    done



openssl加密命令基础:


生成密钥对儿:

# 生成私钥,再从私钥中提取出公钥。

    openssl genrsa -des3 -out [私钥文件路径]  [密钥长度]   # 生成私钥,并对其进行des3加密【这样每次自己使用都要输入密码,一般都是有下面的这种】

    (umask 077; openssl genrsa -out key.pri 2048)  # 生成私钥,不带密码加密。安全起见,设置文件权限600

提取出公钥:

    如:openssl rsa -in server.key -pubout > pub.key 【公钥文件权限644】



随机数生成器:

    /dev/random:仅从熵池返回随机数;随机数用尽,阻塞

    /dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数;非阻塞;

常见的用法:

echo $RANDOM|md5sum #生成随机数

或者下面3种方式都能生成随机数:

    date +%N

    head -200 /dev/urandom | cksum | cut -d" " -f1

    cat /proc/sys/kernel/random/uuid| cksum | cut -d" " -f1

你可能感兴趣的:(互联网,密码,数据加密,中间人,私密性)