目录

概述

对称加密算法

DES算法

AES算法

ECB模式

CBC模式

CTR模式

CFB模式

OFB模式

GCM模式

非对称加密算法

RSA算法

ECC算法

单向加密

参考资料:


概述

在安全领域,利用密钥加密算法来对通信的过程进行加密是一种常见的安全手段。利用该手段能够保障数据安全通信的三个目标:

1、数据的保密性,防止用户的数据被窃取或泄露;
2、保证数据的完整性,防止用户传输的数据被篡改;
3、通信双方的身份确认,确保数据来源与合法的用户;

常见的密钥加密算法类型可以分为三类:对称加密、非对称加密、单向加密。下面我们来了解下相关的算法原理及其常见的算法。

对称加密算法

对称加密算法采用单密钥加密,在通信过程中,数据发送方将原始数据分割成固定大小的块,经过密钥和加密算法逐个加密后,发送给接收方;接收方收到加密后的报文后,结合密钥和解密算法解密组合后得出原始数据。

对称加密算法拥有着算法公开、计算量小、加密速度和效率高得特点,但是也有着密钥单一、密钥管理困难等缺点。

常见的对称加密算法有:

  1. DES:  分组式加密算法,以64位为分组对数据加密,加解密使用同一个算法。
  2. AES:高级加密标准算法,是美国联邦政府采用的一种区块加密标准,用于替代原先的DES,目前已被广泛应用。

DES算法

DES 是一种对称分组密码,密钥长度为 56 位,于 1977 年作为美国联邦信息处理标准 (FIPS) 46 标准发布,后来被美国国家标准与技术研究院 (NIST) 采用。

DES对密码学的进步产生了很大的影响,但是,由于 56 位的短密钥长度,所以对应用程序不安全。1999 年,http://distributed.net在 22 小时 15 分钟内破解了一个 DES 密钥,在这事件发生后,NIST 撤回了该算法作为标准。

3DES是DES加密算法的一种模式,它使用3条64位的密钥对数据进行三次加密。数据加密标准(DES)是美国的一种由来已久的加密标准,它使用对称密钥加密法。

3DES(Triple DES)是DES向AES过渡的加密算法,是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加密算法。

AES算法

AES 数据加密是一种在数学上更高效、更优雅的加密算法,由美国国家标准与技术研究院于 2001 年推出。作为高级加密标准,AES提供三种密钥长度,分别是128 位、192 位和 256 位,密钥长度越高,破解系统或破解系统所需的时间就越多。

AES只是个基本算法,实现AES有几种加密模式。分组密码有五种工作体制:

1.电码本模式(Electronic Codebook Book (ECB));

2.密码分组链接模式(Cipher Block Chaining (CBC));

3.计算器模式(Counter (CTR));

4.密码反馈模式(Cipher FeedBack (CFB));

5.输出反馈模式(Output FeedBack (OFB));

ECB模式

aes128 cmac 算法的输入_aes128 cmac 算法的输入

ECB是最简单的块密码加密模式,加密前根据加密块大小(如AES为128位)分成若干块,之后将每块使用相同的密钥单独加密,解密同理。

ECB不能提供对密文的完整性校验。

CBC模式

aes128 cmac 算法的输入_加密算法_02

CBC模式对于每个待加密的密码块在加密前会先与前一个密码块的密文异或然后再用加密器加密。第一个明文块与一个叫初始化向量的数据块异或。

CTR模式

aes128 cmac 算法的输入_加密算法_03

在CTR模式中,我们不再对密文进行加密,而是对一个逐次累加的计数器进行加密,用加密后的比特序列与明文分组进行 XOR得到密文。这种加密方式简单快速,安全可靠,而且可以并行加密,但是在计数器不能维持很长的情况下,密钥只能使用一次。

CTR不能提供密文消息完整性校验的功能。

CFB模式

aes128 cmac 算法的输入_加密算法_04

与ECB和CBC模式只能够加密块数据不同,CFB能够将块密文(Block Cipher)转换为流密文(Stream Cipher)。

OFB模式

aes128 cmac 算法的输入_数据_05

OFB是先用块加密器生成密钥流(Keystream),然后再将密钥流与明文流异或得到密文流,解密是先用块加密器生成密钥流,再将密钥流与密文流异或得到明文,由于异或操作的对称性所以加密和解密的流程是完全一样的。

GCM模式

为了校验消息的完整性,需要引入另一个概念:消息验证码(MAC)。消息验证码是一种与秘钥相关的单项散列函数。

aes128 cmac 算法的输入_学习_06

密文的收发双发需要提前共享一个秘钥。密文发送者将密文的MAC值随密文一起发送,密文接收者通过共享秘钥计算收到密文的MAC值,这样就可以对收到的密文做完整性校验。当篡改者篡改密文后,没有共享秘钥,就无法计算出篡改后的密文的MAC值。

GMAC是利用伽罗华域(Galois Field,GF,有限域)乘法运算来计算消息的MAC值。假设秘钥长度为128bits, 当密文大于128bits时,需要将密文按128bits进行分组。应用流程如下图:

aes128 cmac 算法的输入_笔记_07

AES-GCM加密算法指的是该对称加密采用Counter模式,并带有GMAC消息认证码。

aes128 cmac 算法的输入_aes128 cmac 算法的输入_08

GCM可以提供对消息的加密和完整性校验,另外,它还可以提供附加消息的完整性校验。

非对称加密算法

非对称加密算法采用公钥和私钥两种不同的密码来进行加解密。公钥和私钥是成对存在,公钥是从私钥中提取产生公开给所有人的,如果使用公钥对数据进行加密,那么只有对应的私钥才能解密,反之亦然。
下图为简单非对称加密算法的常见流程:

aes128 cmac 算法的输入_笔记_09

发送方Bob从接收方Alice获取其对应的公钥,并结合相应的非对称算法将明文加密后发送给Alice;Alice接收到加密的密文后,结合自己的私钥和非对称算法解密得到明文。这种简单的非对称加密算法的应用其安全性比对称加密算法来说要高,但是其不足之处在于无法确认公钥的来源合法性以及数据的完整性。

非对称加密算法具有安全性高、算法强度负复杂的优点,其缺点为加解密耗时长、速度慢,只适合对少量数据进行加密,其常见算法包括:

  1. RSA:RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,可用于加密,也能用于签名。
  2. ECC:Elliptic Curve Cryptography是ECC的全称表示基于椭圆曲线的加密算法。

RSA算法

在 1976 年,由于对称加密算法已经不能满足需要,Diffie 和 Hellman 发表了一篇叫《密码学新动向》的文章,介绍了公匙加密的概念,由 Rivet、Shamir、Adelman 提出了 RSA 算法。RSA 就是他们三人姓氏开头字母拼在一起组成的。

RSA算法具有以下优点:

  • 安全性高:RSA算法的安全性基于大数分解的困难性,目前尚未发现有效的攻击方法。
  • 签名和加密功能一体化:RSA算法既可以用于加密,也可以用于数字签名。
  • 广泛应用:RSA算法被广泛应用于电子商务、数字证书、VPN等领域。

RSA算法也存在一些缺点:

  • 计算复杂度高:RSA算法的加密和解密速度较慢,尤其是对于较长的密钥长度。
  • 密钥管理困难:RSA算法需要管理大素数和质因数,密钥管理相对复杂。

RSA算法被广泛应用于以下场景:

  • 加密通信:RSA算法可以用于加密通信中的密钥交换和数据加密。
  • 数字签名:RSA算法可以用于生成和验证数字签名,确保数据的完整性和真实性。
  • 数字证书:RSA算法可以用于生成和验证数字证书,提供身份认证和安全传输。

ECC算法

椭圆曲线密码学(ECC)是一种非对称加密算法,它利用椭圆曲线上的离散对数问题来提供安全性。与RSA算法相比,ECC算法使用更短的密钥长度来实现相同的安全性。

ECC算法具有以下优势:

  • 密钥长度短:ECC算法相比RSA算法,可以使用更短的密钥长度来实现相同的安全性。这对于资源受限的设备和网络通信来说非常重要。
  • 快速运算:ECC算法的加密和解密速度较快,尤其是对于较短的密钥长度。
  • 小存储空间:ECC算法所需的存储空间较小,适用于存储资源受限的设备。

ECC算法也存在一些劣势:

  • 算法复杂度高:ECC算法的实现相对复杂,需要高效的椭圆曲线运算。
  • 知识门槛高:ECC算法的理论基础相对较深,对于初学者来说较难理解和实现。

ECC算法在物联网和移动设备安全中具有广泛的应用场景,例如:

无线通信:ECC算法可以用于无线通信中的密钥交换和数据加密,保护通信的安全性。
移动支付:ECC算法可以用于移动支付中的数字签名和加密,确保支付的安全性和可靠性。
物联网设备:ECC算法可以用于物联网设备的身份认证和数据传输的加密。
 

相对于RSA,ECC没有发展起来主要有以下几个原因:

  1. ECC找到合适的椭圆曲线是一个问题,NIST(美国国家安全技术和标准)提供的Dual Elliptic Curve Deterministic Random Bit Generator (Dual_EC_DRBG)是一个使用椭圆曲线生成随机数发生器,在报道中称这个工具存在后门,这导致了人们对椭圆曲线的猜疑;
  2. ECDSA(基于椭圆曲线的数字签名)需要一个好的随机数来源,在安卓上随机数生成器具有缺陷这会导致黑客知道私钥priv。
  3. 与ECC相关的专利纠纷问题阻碍了ECC的发展。有超过130项专利涵盖了BlackBerry拥有的椭圆曲线的特定用途。
     

下面是RSA和ECC的安全性和密钥长度的对比表

aes128 cmac 算法的输入_学习_10

单向加密

单向加密算法常用于提取数据指纹,验证数据的完整性。发送者将明文通过单向加密算法加密生成定长的密文串,然后传递给接收方。接收方在收到加密的报文后进行解密,将解密获取到的明文使用相同的单向加密算法进行加密,得出加密后的密文串。随后将之与发送者发送过来的密文串进行对比,若发送前和发送后的密文串相一致,则说明传输过程中数据没有损坏;若不一致,说明传输过程中数据丢失了。单向加密算法只能用于对数据的加密,无法被解密,其特点为定长输出、雪崩效应。常见的算法包括:MD5、sha1、sha224等等,其常见用途包括:数字摘要、数字签名等等。