加密原理
概念:加密是指通过加密算法和加密密钥将明文转变为密文,而解密则是通过解密算法和解密密钥将密文恢复为明文
原理:利用数学上逆运算比正运算难的原理,例如除法比乘法难;找两个质数,把它们乘起来得到一个合数容易,给一个合数把它分解成两个质数相乘很难等。
简单举例:设明文为12, 加密算法为乘上一个数,假设为3(就是加密秘钥),得到密文为36,而解密算法为除以一个数,解密秘钥这里也为3。但是在不知道解密秘钥的情况下,即使知道解密算法,结果也有各种可能。
加密分类
对称加密:加密秘钥和解密秘钥一样(效率高)
非对称加密:加密秘钥和解密秘钥不一样(破解难)
对称加密(略)
非对称加密
为什么会有非对称加密?
非对称加密相对于对称加密解决的问题:秘钥在传输过程中的安全性问题
举例:
对称加密的局限性:假设A,B分处两地,A加密送出,B接受解密。使用对称加密的话,加密秘钥和解密秘钥是一样的,A必须把秘钥通过公开渠道(比如写信,网络传输等)发送给B一份,B才能实现最终解密。秘钥在公开渠道的传输过程中就是有可能被窃取的。
非对称加密的解决方案:加密算法生成两个秘钥,一个公钥,给人谁便看都行;一个私钥,自己保留,完全不传播
同样还是,假设A,B分处两地,A加密送出,B接受解密。此时使用非对称加密,在B处(接收解密方)先运行算法,生成公私钥,然后B通过任何渠道(写信,发mail,或者直接在网站上贴出来等方式),把公钥发送给A。
然后A通过公钥,运行算法加密明文送出,B用自己保留的私钥,接收解密。简单来说,非对称加密解决秘钥在传输过程中的安全性问题的原理,就是不传输解密秘钥
应用举例:SSH加密通信
ssh采用了对称秘钥和非对称秘钥相结合的方式。数据通信采用客户端生成的对称秘钥,简称会话秘钥。
而客户端又是通过非对称加密将会话秘钥送达服务器端的,保证秘钥传输过程中不被窃取。

这里进行一下说明:
- 首先服务端会通过非对称加密,产生一个公钥和私钥;
- 在客户端发起请求时,服务端将公钥暴露给客户端,这个公钥可以被任意暴露;
- 客户端在获取公钥后,会先产生一个由256位随机数字组成的会话密钥,这里称为口令;
- 客户端通过公钥将这个口令加密,发送给服务器端;
- 服务器端通过私钥进行解密,获取到通讯口令;
- 之后,客户端和服务端的信息传递,都通过这个口令进行对称的加密。
电子签名(非对称加密的另一个应用)
电子签名的作用:不可伪造性,向别人证明(电脑另一端的我就是我)
如何实现电子签名?
首先我们看加密流程:公钥加密送出,私钥接收解密。反加密流程过来的话,就是签名:私钥加密(签名)送出,公钥解密(验证)接收。由于私钥你自己独有,所以你加密出来的东西独一无二,就像别人没有办法伪造你的签名一样。而对于接受者,通过公钥很容易验证签名真伪(想想如何?)
电子证书
由于任何人都可以自己生成公私钥,如果通讯的双方互相认识,比如朋友A和B,使用自己的公私钥加密通讯是没有问题的。假设双方不认识,比如你和银行之间,你如何确定和你交易的是真的银行?这个时候需要一个大家都认可的机构来证明,和你打交道的是真的银行。方法是,由这个大家都认可的机构来帮银行生成公私钥,相当于给银行发了一份证书,用来正面银行就是银行。而你可以使用公钥来验证银行证书的真假。
常见的证书机构:CA
Linux全盘加密
Linux可以使用Dmcrypt实现全盘加密。dm-crypt: Linux kernel device-mapper crypto target
支持的算法:
1 2 3 |
loop-AES: aes, Key 256 bits plain: aes-cbc-essiv:sha256, Key: 256 bits, Password hashing: ripemd160 LUKS1: aes-xts-plain64, Key: 256 bits, LUKS header hashing: sha1, RNG: /dev/urandom |
操作举例:
|
|
通过api调用来实现加密解密:
|
|
文件系统加密
文件系统级别加密可以使用ecryptfs
|
|
例如安装ubuntu时候的home目录加密:

操作举例:
|
|
高级用法(暂略)