暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL数据库透明数据加密之加密算法介绍

作者:王硕
王硕
中国PG分会认证专家
PostgreSQL资深内核研发工程师,他为完整数据库加密,Oracle兼容功能,PostgreSQL监控工具,PostgreSQL即时编译等做了很多工作。

前言

       最近一段时间,一直在和PostgreSQL国际社区合作开发透明数据加密(Transparent data encryption),研究了一些密码学相关的知识,并利用这些知识和数据库相结合。本系列共分为3篇文章,将分别介绍加密算法(不同和性能对比),密钥管理和PG中的TDE。而在开发TDE过程中,大家首先讨论如何选择加密算法,在这里先和大家聊一下加密算法。


一、加密算法选择

        常用加密目前主要有流式加密、分组加密、公钥加密三种。首先分析一下三种加密方式:

        流式加密的特性是,密钥长度与明文数据长度一致,而这在数据库中是难以实现的,所以在这不考虑。

        公钥加密是最大的优势在于分为公私密钥,公钥是可以公开的,这就降低了密钥管理的问题,但是其加密性能太差,分组加密算法是公钥加密的几百倍,所以在此也不进行考虑。分组加密是目前主流的加密算法,性能最优,应用最广。

        而当前国际公认的分组加密算法是AES。 下面我们简单介绍一下AES。 分组加密算法,首先需要分组,AES的加密长度为128bits,也就是说16 bytes。 拥有3种密钥长度,128,192以及256。 AES拥有5种加密模式:ECB mode: Electronic Code Book mode,电子密码本模式 CBC mode: Cipher Block Chaining mode,密码分组链表模式 CFB mode: Cipher FeedBack mode,密文反馈模式 OFB mode: Output FeedBack mode,输出反馈模式 CTR mode: Counter mode,计数器模式


二、5种模式的加密流程

1.ECB mode

a. 加密:

b. 解密:

c. 过程:

  1. 将明文进行分组,以16字节为一组;

  2. 使用相同的密钥进行加密明文;

  3. 得到密文;

  4. 逆向则解密。

2.CBC mode

a. 加密:

b. 解密:

c. 过程:

  1. 将明文进行分组,以16字节为一组;

  2. 初始化16字节长度的IV(Initialization Vector,向量);

  3. 使用IV和明文进行异或;

  4. 使用相同的密钥加密步骤iii的结果;

  5. 得到密文;

  6. 使用密文作为下一次加密时与明文进行异或的数据;

  7. 逆向则解密。

3.CFB mode

a. 加密:

b. 解密:

c. 过程:

  1. i. 将明文进行分组,以16字节为一组;

  2. 初始化16字节长度的IV;

  3. 使用相同的密钥进行加密IV;

  4. 使用加密后的IV和明文进行异或;

  5. 得到密文;

  6. 使用密钥加密密文,与一下次的明文进行异或,重复iv,v,vi;

  7. 逆向则解密。

4.OFB mode

a. 加密:

b. 解密:

c. 过程:

  1. 将明文进行分组,以16字节为一组;

  2. 初始化16字节长度的IV;

  3. 使用密钥加密IV;

  4. 使用加密后的IV对明文异或;

  5. 在此使用密钥加密步骤iii结果,重复步骤iv和v,直至完成整个明文加密;

  6. 逆向则解密。

5.CTR mode

a. 加密:

b. 解密:

c. 过程:

  1. 将明文进行分组,以16字节为一组;

  2. 初始化计数器,要求所有计数为唯一值;

  3. 使用密钥加密计数;

  4. 使用加密后的计数和明文异或;

  5. 得到密文;

  6. 重复步骤iii,iv,v;

  7. 逆向则解密。


三、5种模式的异同

         上述阐述了5种mode的加密过程,由此不同的加密过程,则产生异同点:

1.ECB mode

  1. 简单;快速;支持并行计算

  2. 明文中的重复排列会反映在密文中;通过删除、替换密文分组可以对明文进行操作;对保护某些比特错误的密文进行解密时,对应的分组会出错;不能抵御重放攻击(National Institute of Standards and Technology)不推荐使用

2.CBC mode

  1. 明文中的重复排列不会反映在密文中;支持并行解密;能够解密任意明文分组

  2. 对包含某些错误比特的密文进行解密时,第一个分组的全部比特以及后一个分组的相应比特会出错;加密不支持并行计算

3.CFB mode

  1. 不需要填充;支持并行解密;能够解密任意明文分组

  2. 加密不支持并行计算;对包含某些错误比特的密文进行解密时,第一个分组的全部比特以及后一个分组的相应比特会出错;不能抵御重放攻击

4.OFB mode

  1. 不需要填充;可事先进行加密和解密的准备;加密、解密使用相同结构;对某些包含错误比特的密文进行解密时,只有明文中相应的比特会出错

  2. 不支持并行计算;主动攻击者反转密文分组中的某些比特时,明文分组中对应的别特也会被反转 

5.CTR mode

  1. 不需要填充;可事先进行加密和解密的准备;加密、解密使用相同结构;对某些包含错误比特的密文进行解密时,只有明文中相应的比特会出错;支持并行计算

  2. 主动攻击者反转密文分组中的某些比特时,明文分组中对应的别特也会被反转


四、5种模式的加解密效率

加密:

解密:


下期预告

下篇文章将关于密钥管理、密钥生成、密钥保存、密钥交换和密钥轮转。

欢迎投稿



        中国开源软件推进联盟PostgreSQL分会,欢迎大家积极投稿,向PGer分享自己的实践经验、心得体会,共建PG中国生态。

投稿邮箱:

press@postgresqlchina.com

最后修改时间:2019-11-06 10:53:48
文章转载自开源软件联盟PostgreSQL分会,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论