密码学基础知识

公司现在对产品的安全性抓得很严,各种敏感数据都要求加密存储,通信协议全部要求是安全的通信协议。乘这个机会,学习一些密码学的基础知识。

一些术语

首先是密码学的一些术语梳理:

  • 明文:原始消息
  • 密文:加密后的消息
  • 加密:从明文到密文的变换过程
  • 解密:从密文到明文的变换过程
  • 密钥:用来完成加解密等过程的秘密信息
  • 密码算法:也叫密码,是用于加密和解密的数学函数(通常情况下,有两个相关的函数,一个用于加密,一个用于解密)

密码算法的分类

常见的密码算法整体可以分为三大类:对称算法、非对称算法和哈希算法。

对称算法

对称算法:对称算法有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立。在大多数对称算法中,加密解密密钥是相同的。这些算法也叫秘密密钥算法或单密钥算法,它要求发送者和接收者在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都能对消息进行加密解密。只要通信需要保密,密钥就必须保密。

常见的对称密码算法有DES、3DES、Blowfish、IDEA、RC4、RC5、RC6和AES。

非对称算法

也叫做公开密钥算法,它使用两个密钥:公钥和私钥,一个用于加密,一个用于解密,并且解密密钥不能在合理假定的长时间内通过加密密钥计算出来。之所以叫公开密钥算法,是因为加密密钥能够公开,即陌生者能用加密密钥加密信息,但只有相应的解密密钥才能解密信息。在这种系统中,加密密钥叫做公开密钥(即公钥),解密密钥叫做私人密钥(即私钥)。但有时消息也用私钥加密而用公钥解密,这常见于数字签名技术。

与对称加密相比,由于公钥加密加解密过程中使用的密钥不一样,所以相对而言安全性更高,但算法更加复杂因此加解密速度更慢,因此不适用于对大量数据进行加密,在某些极端情况下,甚至能比非对称加密慢上1000倍。因此,在实际应用中,我们需要对大量数据进行加密时,往往采用对称加密的方法,再用公钥加密对对称加密的密钥进行加密。接收方收到信息之后首先用自己的私钥进行解密得到对称加密的密钥,然后再对消息进行解密。这样既保证了加解密的速度同时又提高了安全性,一举两得。

常见的非对称密码算法:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)。

哈希算法

又称摘要算法,它的特别之处在于它是一种单向算法。用户可以通过哈希算法对任意长度的输入生成固定长度的唯一哈希值,却不能通过这个哈希值重新获得目标信息。因此哈希算法常用在不可还原的密码存储、信息完整性校验等。(注:这里所说的生成唯一哈希值,是指多次对同一输入运用同样的哈希算法,得到的结果是一样的)

哈希函数应用于密码学中,需要满足以下三个标准:

  • 原像稳固(单向性):通过给定的哈希值很难找到原文。即对于给定的哈希值h,很难找到任何M使得h=H(M)。
  • 第二原像稳固:给定明文和哈希值,很难找到与给定明文不同但哈希值相同的另一种明文。即给定M以及h=H(M),很难找到M'使得M≠M'但H(M)=H(M')。
  • 抗碰撞:在不给定任何信息条件下,很难找到两种明文不同但哈希值相同的明文。即很难找到M和M'使得M≠M'但H(M)=H(M')。

常见的Hash算法有MD2、MD4、MD5、HAVAL、SHA。

数字摘要

数字摘要也称消息摘要、数字指纹,是使用单向哈希函数根据明文产生的固定长度的密文,用来确保通信消息完整性和防篡改。如果消息在传递的途中改变了,接收者通过对收到的消息采用相同的哈希算法重新计算,新产生的摘要与原来的摘要进行比较,如果不一样,则说明已被篡改。

数字签名

数字签名是公开密钥算法的一种应用,即使用消息发送方的私钥对数字摘要进行加密,得到数字签名,然后数字签名和消息报文一起发送给接收方,接收方通过发送方的公钥进行解密得到数字摘要。数字签名用来确保消息的来源和消息的完整性。

数字签名过程如下图所示:

  1. A首先用B的公钥对明文加密得到密文,再用哈希函数对明文进行哈希得到哈希摘要,之后使用A的私钥对摘要进行加密得到数字签名。
  2. A将数字签名和密文一起发给B。
  3. B收到密文和签名后,首先使用B的私钥对密文解密得到明文,然后用哈希函数哈希明文得到摘要。之后用A的公钥对数字签名解密得到消息摘要 ,对得到的两个摘要进行对比,若一致则表明消息没有被篡改,否则拒绝接受消息。

数字证书

有了数字签名,似乎是可以做到认证发送方身份和确保消息完整性了,但是这种方式仍然存在漏洞:以上图为例,如果接收方B保存的A的公钥被非法替换了,那么攻击者可以冒充发送方A,使用对应的私钥做数字签名,给B发送消息。为了解决这个问题,就需要一个权威的值得信赖的第三方机构(数字证书认证机构,Certificate Authority,一般是由政府审核并授权的机构)来给公钥做认证。证书中心用自己的私钥,对发送方A的公钥和一些相关信息一起加密,生成数字证书。

之后发送方A再给接收方B发送消息,在签名的同时,再附上数字证书即可。接收方B在收到消息后,用CA的公钥解开数字证书,就可以拿到发送方A的真实公钥了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值