基础密码学入门:随机数、hash算法、对称加密算法

最近在看https,而想要比较清晰的理解https为什么可以解决http所存在的一些问题,我们需要对密码学有一些基本的常识。本文的目的也正基于此。

什么是密码学

  • 密码学是一门科学,有着严谨的规范,如果你想要设计一个密码学,毫无疑问是需要很深的数学知识,因此一般能设计密码学的都是一些大数学家们。
  • 密码学的原理是公开的。
  • 密码学算法相对是安全的,注意相对二字,你可以理解为密码学它可能是在当前阶段是安全的,没准在未来某个时候就是不安全的了。
  • 不需很好的数学知识,普通开发者也可以用好密码学。
  • 解决特定问题的密码学算法,没有一个密码学算法是万能的,可以解决任何问题,每个密码学都是针对某些场景下的解决方案。

密码学的目标

在互联网应用方面,密码学主要解决了四个问题。

机密性

在互联网应用数据传输的过程中,如果数据具备机密性,那么它对外暴露的就是无意义的数字,攻击者想要破解,那么它们就需要破解其密钥。可见,密钥是密码学算法的关键,对称加密算法、公开密钥算法都具备机密性

完整性

从发送方发出的数据,到接受方接受到数据,如果接受到的数据与原始数据一致,没有被篡改,说明数据是完整的,具备完整性。在密码学中主要使用MAC(消息验证码)算法来保证完整性

这里有一个点需要注意:数据具备机密性,但是不等于具备完整性,这是两个概念。

身份验证

在互联网应用中进行数据传输,一般都有发送方、接受方,而且这个过程是双向的,因此需要进行身份验证格外重要,对于接收方来说,我们需要明确数据就是由原始发送方所发送的。换言之,实际通信的双方就是彼此想要进行通信的对象,不存在代理对象。

在密码学中,一般通过数字签名技术来验证身份

不可抵赖性

不可抵赖性用生活中的场景来理解就是:A向B借了钱,并且打了借条,当B向A要其还钱时候,A抵赖说欠条不是他写的,有人冒充他。在密码学中,数据签名技术可以避免抵赖

常见算法

加密单元

在介绍算法之前,可以先了解一个概念“加密单元”。简单理解就是,加密单元就是一些基础的密码学算法,我们可以利用这些加密单元构建高级的密码学算法、协议、应用程序等。

比如我们看下面示例,基于hash算法产生的其他密码学算法。

随机数生成算法

那么真正的随机数算法需要具备哪些特性呢?

  • 高效率

在很短的时间内就可以快速生成随机数。

  • 随机性

生成的随机数只要不存在统计学的偏差,我们就可以理解为这个随机数具备随机性。简单理解就是,比如一个随机生成0-9数字的随机数算法,它产生的数字在0-0出现的概念是平均的,那么就认为符合随机性。

  • 不可预测性

随机数与随机数之间不存在关联关系,你无法通过一个随机数预测后面的随机数。

  • 不可重现性

理论上不管经过多少时间,不存在产生两个一样的随机数。但是实际上在一定的周期内,随机数算法会生成一样的随机数,只是时间长短的问题。因此在密码学中,我们尽量使用周期长的随时数算法。

hash算法

这里的hash算法指的是密码学中的hash算法、不是我们数据结构与算法中的hash算法。

hash算法公式

摘要/散列值/指纹 = hash(消息)

# hash: hash算法、摘要算法、单向散列函数等多种称呼
# 消息: 输入值
# 摘要/散列值/指纹: 输出值

密码学hash算法的特性

  • 相关的消息总是会得到相同的摘要值,并且无论消息是有多长,摘要值的长度是固定的。
  • 高效

无论消息是多长,hash算法都可以快速计算出对应的摘要值。

  • 单向性、不可逆

你无法通过摘要值推导计算出原始消息内容,如果你想进行逆运算,可以通过暴力攻击、彩虹表、字典攻击等手段,对不同的消息内容进行组合、迭代计算。如果运算结果与摘要值相匹配了,那么说明该hash算法是不应该使用在密码学中了。

  • 唯一性

两个不同的消息(哪怕只是细微的不一致)不可能产生一致的摘要值。

密码学hash算法的一些使用场景

  • 文件对比

比如如果你想验证两个文件是否一致,可以通过MD5算法(hash算法中的一种)计算MD5值,看两个文件是否一致,如果一致说明文件是同一个文件。 这里其实就利用了hash算法的一些特性(高效、唯一性等)。

  • 登陆口令

比如注册、登陆这个功能,我们不会直接将用户密码明文入库,一般会采用hash(口令+salt)算出摘要值入库,登陆时候也是通过这个方式去匹配。当然上面这个方案也存在一些问题,这里就不展开讨论。

常见的hash算法分类

  • MD5

MD5算法是一种常见的hash算法,其摘要值长度固定是128比特,目前MD5已经被证实是一种不安全的算法,因为其违反了强抗碰撞性原则,但是还没破坏单一性原则。

  • SHA

SHA是一组算法,主要包括三类。

SHA-1: 类似MD5,摘要值长度是160比特。

目前SHA-1算法在严谨的加密学中已经被证明是不安全的,但是在实际应用过程中不并代表就有安全问题,在现实世界中要构造出碰撞还是非常困难的,需要经过大量的运算,不过还是尽量使用SHA-2类的Hash算法。

SHA-2算法是目前建议使用的Hash算法,截至目前是安全的,主要有四种算法,分别是SHA-256、SHA-512、SHA-224、SHA-384,输出的长度分别是256比特、512比特、224比特、384比特。

SHA-3算法并不是为了取代SHA-2算法,而是一种在设计上和SHA-2完全不同的算法,主要有四种算法,分别是SHA3-256、SHA3-512、SHA3-224、SHA3-384,输出的长度分别是256比特、512比特、224比特、384比特。

对称加密算法

密码学中,对数据进行加密主要使用两个算法:对称加密算法、公共密钥算法。

什么是对称加密算法呢?一般是通过一个算法和一个密钥(secret key)对明文(plaintext)进行处理,得到的不规则字符就是密文(ciphertext)。

密文 = E(明文+密钥+算法)
明文 = D(密文+密钥+算法)

由公式我们可以知道,密钥是关键,密钥是一串数字,加密和解密使用同样的一个密钥,如果没有密钥,基于密文是无法获取明文的。 加密和解密操作(算法)是一个互逆过程,算法的背后就是复杂的数学知识。

对称加密算法有两种类型,分别是流密码算法(stream ciphers)和 块密码算法(block ciphers)。

目前RC4已经被证明是不安全的了,建议使用接下来讲解的块密码算法。

既然有这么多块密码算法,使用哪种算法呢?建议使用AES算法,该算法是对称加密算法的标准算法。

关于AES算法有个小小的补充:

  • AES算法使用的密钥通过口令和Salt生成,同样的口令和Salt会生成同样的密钥。
  • Salt的主要作用是为了保证同样的口令可以生成不同的密钥,是明文传输的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值