Cybertec PostgreSQL透明加密解析

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
密钥管理服务KMS,1000个密钥,100个凭据,1个月
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: 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!使用时需注意。

目录
相关文章
|
1月前
|
SQL 安全 网络安全
网络安全的护城河:漏洞防御与加密技术的深度解析
【10月更文挑战第37天】在数字时代的浪潮中,网络安全成为守护个人隐私与企业资产的坚固堡垒。本文将深入探讨网络安全的两大核心要素——安全漏洞和加密技术,以及如何通过提升安全意识来强化这道防线。文章旨在揭示网络攻防战的复杂性,并引导读者构建更为稳固的安全体系。
48 1
|
21天前
|
SQL 安全 算法
网络安全之盾:漏洞防御与加密技术解析
在数字时代的浪潮中,网络安全和信息安全成为维护个人隐私和企业资产的重要防线。本文将深入探讨网络安全的薄弱环节—漏洞,并分析如何通过加密技术来加固这道防线。文章还将分享提升安全意识的重要性,以预防潜在的网络威胁,确保数据的安全与隐私。
39 2
|
23天前
|
安全 算法 网络安全
网络安全的盾牌与剑:漏洞防御与加密技术深度解析
在数字信息的海洋中,网络安全是航行者不可或缺的指南针。本文将深入探讨网络安全的两大支柱——漏洞防御和加密技术,揭示它们如何共同构筑起信息时代的安全屏障。从最新的网络攻击手段到防御策略,再到加密技术的奥秘,我们将一起揭开网络安全的神秘面纱,理解其背后的科学原理,并掌握保护个人和企业数据的关键技能。
28 3
|
29天前
|
SQL 监控 安全
网络安全的盾牌与利剑:漏洞防御与加密技术解析
在数字时代的洪流中,网络安全如同一场没有硝烟的战争。本文将深入探讨网络安全的核心议题,从网络漏洞的发现到防御策略的实施,以及加密技术的运用,揭示保护信息安全的关键所在。通过实际案例分析,我们将一窥网络攻击的手段和防御的艺术,同时提升个人与企业的安全意识,共同构筑一道坚固的数字防线。
|
1月前
|
安全 算法 网络安全
网络安全的盾牌与剑:漏洞防御与加密技术解析
【10月更文挑战第42天】在数字时代的海洋中,网络安全是守护数据宝藏的坚固盾牌和锋利之剑。本文将揭示网络安全的两大支柱——漏洞防御和加密技术,通过深入浅出的方式,带你了解如何发现并堵塞安全漏洞,以及如何使用加密技术保护信息不被窃取。我们将一起探索网络安全的奥秘,让你成为信息时代的智者和守护者。
36 6
|
1月前
|
存储 SQL 安全
网络安全的屏障与钥匙:漏洞防御与加密技术解析
【10月更文挑战第42天】在数字时代的浪潮中,网络安全成为守护个人隐私与企业数据不被侵犯的关键防线。本文将深入探讨网络安全中的两大核心议题——漏洞防御和加密技术。我们将从网络漏洞的识别开始,逐步揭示如何通过有效的安全策略和技术手段来防范潜在的网络攻击。随后,文章将转向加密技术的奥秘,解读其在数据传输和存储过程中保护信息安全的作用机制。最后,强调提升个人和企业的安全意识,是构建坚固网络安全屏障的重要一环。
|
1月前
|
SQL 人工智能 安全
网络安全的盾牌:漏洞防护与加密技术解析
在数字时代的浪潮中,网络安全和信息安全成为了维护社会稳定和保护个人隐私的关键。本文将深入探讨网络安全中的常见漏洞、先进的加密技术以及提升安全意识的重要性。通过分析网络攻击的手法,揭示防御策略的构建过程,并分享实用的代码示例,旨在为读者提供一套全面的网络安全知识体系,以增强个人和组织在网络空间的防御能力。
|
17天前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。
|
18天前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
40 10
|
19天前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的内容,并提供一些实用的代码示例。通过阅读本文,您将了解到如何保护自己的网络安全,以及如何提高自己的信息安全意识。
46 10

推荐镜像

更多