Posts AES-GCM加解密
Post
Cancel

AES-GCM加解密

什么是AES加密

常见加密分为两类:

  • 对称加密

    AES(Advanced Encrtption Standard)是对称加密的一种,即加密和解密使用相同的密钥。

  • 非对称加密

    加密和解密使用不同的密钥,非对程算法比对称算法更复杂,运算速度更慢。

AES加密流程关键概念

分组密码体制

分组密码体制是指将明文分成一段一段的来加密,然后再把一段段密文拼起来成为最终的密文。

AES加密会首先把明文分成若干段,每段数据长度必须是16字节,如果最后一段不够16字节,则padding成16字节。

Padding

Padding就是把不满16字节的分组数据填满16个字节,有三种模式:

  • PKCS5

    分组数据缺少x个字节,则在数据末尾填充x字节的x。比如缺少3个字节,则末尾填充3个字节的3。

  • PKCs7

    分组数据缺少x个字节,则在数据末尾填充x字节的0。比如缺少4个字节,则末尾填充4个字节的0。

  • NOPADDING

    表示不要填充,那么数据发送放就要保证最后一段数据是16个字节。

初始向量IV

初始向量作用是防止同样的明文块,始终加密成同样的密文块,使得加密更加安全可靠。只需要提供一个初始向量,后面每段数据的初始向量就是前面一段的密文。初始向量的长度必须为16个字节,来源必须随机。

密钥

AES密钥长度可选值[128, 192, 256]bits。每段数据都是用同一个密钥,密钥要保证随机生成。

加密模式

  • CBC(Cipher Block Chaining)

  • GCM(GMAC/Counter Mode)

    AES的GCM(Galois/Counter Mode)模式本质上是AES的CTR模式(计数器模式)加上GMAC(Galois Message Authentication Code, 伽罗华消息认证码)进行哈希计算的一种组合模式。GCM可以提供对消息的加密和完整性校验。

    • Key:对称秘钥,长度可选值[128, 192, 256]bits。
    • IV:初始向量(Initialisation Vector),值必须随机。通常以明文的形式和密文一起传送,目的是防止同样的明文块,始终加密成同样的密文块。
    • AAD:附加身份验证数据(Additional Authenticated Data)。AAD数据不需要加密,通常以明文的形式和密文一起传送。
    • MAC tag:MAC标签。用于确保数据在传输和存储过程中不会被篡改。加密时,MAC tag由明文、密钥、IV、AAD共同产生。

    完整性校验机制:加密时使用密钥生成消息的MAC值,并随消息一起发送,解密时通过共享密钥计算受到消息的MAC值,与随附的MAC值做比较,从而判断消息是否被篡改过。因为对于篡改者,没有密钥就无法对篡改后的消息计算MAC值。

EVP介绍

Openssl中实现了各种对称算法、摘要算法及签名验签算法。EVP函数封装了openssl加密库里的所有算法函数。通过统一的封装,使得只需在初始化参数的时候做很少的改变,就可以使用相同的代码实现不同算法的加解密。

使用示例

This post is licensed under CC BY 4.0 by the author.

oneDNN

SIMD