题记:失败的经历总是惨痛的,关键是要快速的重新振作起来,再次前行。最近的面试总是被问到加密算法的问题,这让我很郁闷,今天就查找了一些资料,收集总结一些关于密码学的小点,因为我并不是要从事算法或密码学相关领域,就简单记了些概要和流程,再面试被问到时,总不能什么都了解吧。简单学习一下,发现了解这些还是有必要的。(文中如有错误,还请提出,一起交流,内容不全,感兴趣的同学可以留言补充,笔者将感激不尽)
1.密码术的准则
- 不能证明某个事物是安全的,只能证明他是不安全的
- 算法和实现之间存在区别
- 永远不要相信专用算法
- 算法的强度基于密钥的秘密性,而非算法本身
- 密码术不仅仅是SSL(安全套接字协议,在客户端的浏览器和服务器之间进行点到点的加密)
- 所有的密码术都是可破解的,这仅仅是时间的问题
- 特性:
- 机密性
- 完整性
- 认证性
- SSL会话
- 低级别的加密方案,用于加密高级别协议(HTTP等)和文件传输协议(FTP)
- 为了传送加密的数据,浏览器和服务器必须交换共同的密钥
-
过程:
2. 四个密码原语
这些密码源语可以构建密码术的所有领域,原语之间也是紧密关联的
-
包括:
- 随机数生成
- 对称加密
- 非对称加密
- 散列函数
随机数生成:不存在真正的随机数,只能依靠一定的算法或思想生成伪随机数
-
对称加密:又称单密钥加密,最基本和最容易的密码原语
思想:使用一个密钥加密和解密消息
流密码:消息被当成数据流,其数据是一个字节一个字节处理的,顺序很重要,一次一密
-
分组密码:一次只对一个分组加密,一个分组可认为是一定数量的位,由算法确定,每个分组都是独立处理的,同一个消息中的各个分组的加密不存在关联。与流密码的区别就是在于他是一次对一个消息分组进行处理的。
约束:通信双方必须在使用算法之前知道该密钥。
-
共享密钥:
实现:密钥协商。其中Diffie-Hellman密钥协商的实现就是让每个用户向其他用户发送一条消息,一旦双方都拥有了对方的消息,便在二者之间确定了一个密钥。
缺陷:没有建立认证,通信的机密性和完整性都将丧失。
-
非对称加密:又称双密钥加密,需要两个密钥,一个用来加密(公钥),另一个用来解密(私钥)。非对称加密非常缓慢。
实现:与对称加密一起使用
1。A创建两个用于非对称加密的密钥,其中一个密钥向外部公开(即公钥),用于其他用户可以使用该密钥进行加密,另一个密钥只有A自己知道,供自己使用,用来解密(即私钥) 2。用户B创建一个对称密钥 3。用户B利用A公开的密钥(即公钥),对自己创建的对称密钥进行加密,再发送给A 4。A接收到经过非对称加密得到的密文,使用其私钥进行解密,得到用户B创建的对称密钥,并使用这个对称的密钥与用户B通信
-
散列函数:也叫单向散列函数,以任意长度的消息为输入,并计算出一个更短的长度固定的消息叫做摘要或散列,计算量小。
-
三个特性:
- 找到能过散列到相同摘要的两条消息在计算上是不可行的,
- 给定一个摘要,找到能够产生相同摘要的第二条消息在计算上是不可行的
- 给定一个摘要,找到该摘要的原始消息在计算上是不可行的
-
常见的散列函数:MD(消息摘要),SHA(安全散列算法)
MD4算法:是一个三轮迭代散列函数,每一轮都是16个步骤,而且每个步骤对应一个输入字,他得到的散列值是4个字长的位字符串。
MD5算法:在MD4的基础上增加了额外一轮和更多常数,这些使得MD5更难被追踪。
SHA-0:
SHA-1:推荐连接
-