Cybertec PostgreSQL透明加密解析

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: Cybertec PostgreSQL透明加密解析

目前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!使用时需注意。

目录
相关文章
|
20小时前
|
存储 关系型数据库 数据库
postgresql|数据库|提升查询性能的物化视图解析
postgresql|数据库|提升查询性能的物化视图解析
185 0
|
20小时前
|
SQL 关系型数据库 API
从API获取数据并将其插入到PostgreSQL数据库:步骤解析
使用Python处理从API获取的数据并插入到PostgreSQL数据库:安装`psycopg2`,建立数据库连接,确保DataFrame与表结构匹配,然后使用`to_sql`方法将数据插入到已存在的表中。注意数据准备、权限设置、性能优化和安全处理。
|
20小时前
|
关系型数据库 MySQL 分布式数据库
PolarDB for MySQL数据库外网连接解析失败的原因
【2月更文挑战第5天】PolarDB for MySQL数据库外网连接解析失败的原因
67 8
|
20小时前
|
关系型数据库 MySQL 分布式数据库
PolarDB for MySQL数据库外网连接解析失败的原因可能有以下几点
【1月更文挑战第21天】【1月更文挑战第105篇】PolarDB for MySQL数据库外网连接解析失败的原因可能有以下几点
49 1
|
20小时前
|
算法 安全 网络安全
HTTPS加密原理解析:保障通信安全的密码学算法
HTTPS加密原理解析:保障通信安全的密码学算法
72 0
|
20小时前
|
数据安全/隐私保护
URL编码解析方式-特殊字符加密和解密
URL编码解析方式-特殊字符加密和解密
32 0
|
20小时前
|
供应链 安全 物联网
深度剖析:区块链技术掌握必备知识,加密货币与智能合约应用解析
深度剖析:区块链技术掌握必备知识,加密货币与智能合约应用解析
139 0
|
20小时前
|
SQL 关系型数据库 分布式数据库
深度解析PolarDB数据库并行查询技术
深度解析PolarDB数据库并行查询技术:加速SQL执行的关键问题和核心技术 随着数据规模的不断扩大,用户SQL的执行时间越来越长,这不仅对数据库的优化能力提出更高的要求,并且对数据库的执行模式也提出了新的挑战。为了解决这个问题,许多数据库系统,包括Oracle、SQL Server等,都开始提供并行查询引擎的支持,以充分利用系统资源,达到加速SQL执行的效果。本文将深入探讨基于代价进行并行优化、并行执行的云数据库的并行查询引擎的关键问题和核心技术。
153 2
|
20小时前
|
SQL 关系型数据库 数据库
postgresql|数据库|pg数据库的文件系统详解---最全面的解析
postgresql|数据库|pg数据库的文件系统详解---最全面的解析
152 0
|
20小时前
|
关系型数据库
电子好书发您分享《阿里云认证的解析与实战-关系型数据库ACP认证》
电子好书发您分享《阿里云认证的解析与实战-关系型数据库ACP认证》
48 1

推荐镜像

更多