目前PostgreSQL官方并未推出透明加密功能,但是cybertec开源了一个分支,支持透明加密。感兴趣的同学可以参考:

https://www.cybertec-postgresql.com/en/products/postgresql-transparent-data-encryption/

它支持对数据和WAL进行透明加密。本文主要介绍WAL的透明加密功能及原理。

WAL透明加密架构

WAL加密主要由一个缓冲来完成,该缓冲未encrypt_buf_xlog,该缓冲大小是8个页大小,在启动时创建,由函数setup_encryption完成,其堆栈如下:

PostgresMain->setup_encryption::encrypt_buf_xlog = (char *) MemoryContextAlloc(TopMemoryContext, ENCRYPT_BUF_XLOG_SIZE);

加密时将WAL数据加密到该缓冲中,然后刷写到磁盘。恢复回放时从磁盘上读取加密的WAL日志,然后进行in place解密,之后读取其中wal record进行回放。

加密

在XLogWrite刷写日志时进行加密:

首先会先计算有多少页需要刷写,然后将这些页一页一页的进行加密,时间线+段文件号+日志偏移作为向量和密钥encryption_key一起对页进行加密,将WAL加密到加密缓冲encrypt_buf_xlog中,然后将加密缓冲中的WAL刷写磁盘。

恢复时解密

重启时,将日志读取到缓冲中进行解密。由函数XLogPageRead完成。首先需要创建一个XLogReaderState即xlogreader,使用XLogPageRead函数读取WAL日志。然后读取checkpoint和WAL RECORD进行回放。读取WAL RECORD的函数是ReadRecord,从下面代码可以看出,其实真正读取是由XLogPageRead函数来完成的,也就是将磁盘上加密的WAL日志读取到xlogreader的readBuf中,该缓冲1个页大小。

然后,对readBuf中的WAL记录进行解密。可以看出是in place解密。

流复制场景

主上执行start replication命令开启流复制,即函数StartReplication完成的功能:

WalSndLoop不断循环,调用XLogSendPhysical函数从磁盘中将加密的WAL日志读取到encrypt_buf_xlog中,然后进行in plcace解密。将解密后的明文拷贝到output_message.data[]中,用于流复制传输。备机接收后将该日志持久化到磁盘。

备机receiver进程接收日志并写入磁盘,写入函数为XLogWalRcvWrite,这里可以看到它并没有加密。那么恢复时需要将磁盘上的日志加载到内存,这个流程认为磁盘上的WAL日志是加密的,恢复前需要先解密。但从代码上看,这个流程就存在矛盾了!

另外,Start replication命令支持对复制流加密,如下结构体:

上述中,XLogRead函数中的decrypt来源如下,在start replication命令中指定解密。若没有指定解密的话,传输的即为加密的日志流。此时,备机接收后写入磁盘为加密的日志。那么,回放时加载加密的WAL,然后解密,最后回放,这样流程是合理的。

也就是说,流复制场景下,WAL流为解密的情况下,有bug!使用时需注意。

Cybertec PostgreSQL透明加密解析相关推荐

  1. PostgreSQL 透明加密(TDE,FDE) - 块级加密

    PostgreSQL 透明加密(TDE,FDE) - 块级加密 作者 digoal 日期 2016-10-31 标签 PostgreSQL , 透明加密 , TDE , FDE , 块级加密 背景 在 ...

  2. PolarDB for PostgreSQL透明加密

    PolarDB for PostgreSQL透明加密 简介 透明加密TDE(Transparent Data Encryption)通过在数据库层执行静止数据加密,阻止可能的攻击者绕过数据库直接从存储 ...

  3. 深入解析数据库透明加密技术

    关注公众号"数安烂笔头"并回复 "标准",可获取数据安全相关标准.报告.白皮书 集合链接 目录 前置加密方式 中置加密方式 数据列加密方式 表空间加密 后置加密 ...

  4. 关于文件透明加密解密

    1.windows文件系统概述 硬盘文档加密系统驱动原理一般有两种:通过HOOK一些底层的系统内核调用对文件目录的访问权限进行控制,在文件系统输入输出驱动上层直接建立一个驱动对文件目录的数据进行加密. ...

  5. Zcash 不透明(加密)交易的分析

    Zcash 不透明(加密)交易的分析 Zcash 不透明交易中未花费的交易使用Note表示,对应于透明交易中的UTXO. Note分为SproutNote和SaplingNote不同的数据结构,对应了 ...

  6. linux透明加密系统,基于Linux的透明加密系统的设计与实现

    摘要: 随着互联网时代的到来,人们用于接触事物的方式不仅仅局限于简单的通讯工具了,如:口语交流,书信传递等等,现在已经越来越多地通过手机,电脑,平板等电子设备进行信息的交流和信息的存储.但是在我们享受 ...

  7. dlp防泄密系统卸载_浙江好用的企业图纸防泄密软件推荐,局域网内部图纸透明加密方案...

    企业图纸防泄密 浙江加密软件 图纸透明加密方案 浙江优秀企业众多,企业图纸防泄密已经成为企业网络安全管理的重要方面,很多浙江的企事业单位为了保护单位图纸信息安全和局域网内部图纸信息安全而纷纷采用各种数 ...

  8. mysql实现内容加密_简单为mysql 实现透明加密方法

    一般用户在数据库中保存数据,虽然数据库存储的是二进制,无法直接明文打开查看,但是如果是一个外行人,直接连接进入mysql中,还是可以直接查看数据的. 所以对于一些核心数据,特别是企业重要数据资产,一般 ...

  9. 大数据集群被窃取数据怎么办?透明加密可以一试

    摘要:传统大数据集群中,用户数据明文保存在HDFS中,集群的维护人员或者恶意攻击者可在OS层面绕过HDFS的权限控制机制或者窃取磁盘直接访问用户数据. 本文分享自华为云社区<FusionInsi ...

  10. 透明加密系统设计及实现-绪论

    随着信息时代的到来,计算机成为了人们日常生活的必备之物.大量的桌面计算机和移动终端设备给人们带来了极大的方便,但是也增加的个人的机密信息泄密的可能性.特别是对于机密部门的机密资料和企业公司的核心技术等 ...

最新文章

  1. 在Windows2016中回到DOS时代用tt练习打字
  2. 一招教你掌握肌肉发力的感觉
  3. SQL Server资源管理之内存管理篇(上)
  4. 检索数据_7_拼接列的值
  5. 在 Excel 中如何使用宏示例删除列表中的重复项
  6. 《计算机组成原理》_学习笔记(二)
  7. 刷机后如何升级android,手机系统怎么升级 三大方法大全【图文】
  8. MYSQL 的静态表和动态表的区别, MYISAM 和 INNODB 的区别
  9. aix oracle监听配置_Oracle数据库03用户权限与数据库的连接
  10. Windows 7 SP1 多国语言包(MUI language packs)官方下载
  11. [Azure - VNet] 解决办法:Azure P2S VNet无法建立网络连接。“parameter is incorrect“ (Error 87 参数错误)
  12. Springboot 集成 Camunda
  13. Python3 L13
  14. 苹果手机开机一会显示无服务器,苹果手机出现无信号的解决方法
  15. csgo调出参数_CSGO控制台全方位使用教程 控制台常用命令及参数说明
  16. 白杨SEO:微信视频号怎么玩?推广、涨粉、上热门及赚钱技巧大全
  17. 10.1日NOIP模拟赛
  18. java.util.logging log4j,Java核心代碼(十)日志log4j,java.util.logging,commons-logging
  19. 每日一道Leetcode - 剑指 Offer 13. 机器人的运动范围【DFS|BFS】
  20. 搅拌反应釜cad图纸_生物发酵反应釜的设计(机械CAD图纸)

热门文章

  1. 巧用Python爬取QQ空间好友信息,生成词云
  2. 子午线弧长计算公式matlab,椭球面上的几种弧长计算和大地线
  3. win10重装系统后Mysql环境和数据的恢复(无需重装Mysql)
  4. dnspod动态解析linux,NAS折腾记 篇一:五分钟搞定威联通DNSPOD动态域名解析-简单教程+问题解决...
  5. 双碑零基础法语学习 学习法语要知道哪些法语常识?
  6. 联想k50+开发者模式+linux,联想 K50-T5中文Recovery刷机教程
  7. Sentinel 控制台 不显示实时监控
  8. 东北旅行第一天流水账
  9. Binding的使用梳理
  10. 恭喜本月拍牌中标了-上海!