Cybertec PostgreSQL透明加密解析

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB PostgreSQL 版,企业版 4核16GB
推荐场景:
HTAP混合负载
云原生数据库 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!使用时需注意。

目录
相关文章
|
6天前
|
SQL 安全 算法
网络安全与信息安全:漏洞、加密技术与安全意识的深度解析
【8月更文挑战第14天】在数字化时代,网络安全和信息安全的重要性日益凸显。本文将深入探讨网络安全漏洞、加密技术以及提升个人和企业的安全意识等方面的内容。我们将通过具体案例,分析网络攻击的手段和后果,揭示加密技术的原理和应用,同时强调提升安全意识的必要性。文章旨在为读者提供全面的网络安全知识,帮助他们更好地保护自己的信息资产。
16 1
|
7天前
|
存储 安全 物联网
网络安全的盾牌与剑:漏洞防御与加密技术解析
在数字世界的海洋中,网络安全是航船上不可或缺的指南针。本文将深入探讨网络漏洞的识别与防范,同时揭示加密技术如何在保护信息安全中扮演关键角色。通过分析安全意识的重要性和提升策略,我们旨在为读者提供一套实用的网络安全知识框架,确保个人和企业能在信息战中站稳脚跟。
|
7天前
|
算法 JavaScript 前端开发
对称加密算法解析:DES、AES及其在`pycryptodome` 和 `crypto-js` 模块中的应用
对称加密算法解析:DES、AES及其在`pycryptodome` 和 `crypto-js` 模块中的应用
22 1
|
9天前
|
SQL 安全 网络安全
数字堡垒的裂缝与钥匙:网络安全漏洞与加密技术解析
在数字化时代的浪潮中,网络安全成为了保护信息资产的坚固城墙。然而,网络攻击者不断寻找着城墙的裂缝——安全漏洞,企图突破防线窃取或破坏数据。本文将揭示这些裂缝的本质,探讨如何通过加密技术加固防御,并强调提升个人与企业的安全意识在维护网络安全中的重要性。从基础概念到实际操作,我们将一同走进网络安全的世界,理解它、强化它,最终守护我们共同的数字家园。
22 3
|
17天前
|
安全 网络安全 数据处理
网络安全的盾牌与剑:漏洞管理及加密技术深度解析
【8月更文挑战第3天】在数字世界的海洋中,网络安全是保护我们免受网络风暴侵袭的坚固盾牌。本文将深入探讨网络安全中的两大核心要素——漏洞管理和加密技术。通过实际代码示例,我们将揭示如何识别和修补安全漏洞,以及如何应用加密算法来保护数据安全。文章旨在提升读者的安全意识,并提供实用的技术知识,帮助构建更为安全的数字环境。
|
4天前
|
安全 Nacos 数据安全/隐私保护
【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
19 0
|
17天前
|
SQL 安全 网络安全
数字堡垒之下:网络安全漏洞、加密技术和安全意识的深度解析
在信息技术飞速发展的今天,网络空间已成为新的战场。本文将深入探讨网络安全中的关键要素——安全漏洞、加密技术以及用户的安全意识。我们将从实际案例出发,分析常见漏洞类型及其影响,并介绍如何通过加密技术加固数据保护。同时,强调培养良好的安全习惯和意识对于防御网络攻击的重要性。通过本文,读者将获得关于如何在日益复杂的网络环境中保护自己的实用知识和策略。
|
4天前
|
SQL 安全 网络安全
数字堡垒之下:网络安全漏洞与加密技术的较量
在数字化的浪潮中,网络安全成为了保护信息资产的坚固堡垒。本文将探讨网络安全面临的挑战,特别是安全漏洞和加密技术的重要性,同时强调提升个人和企业的安全意识的必要性。我们将从网络攻击者利用安全漏洞的方式谈起,深入到加密技术如何成为防御手段的核心,最后探讨如何通过教育和实践提高安全防范能力,共同构建更安全的网络环境。
|
3天前
|
SQL 人工智能 安全
网络安全漏洞、加密技术与安全意识的探索
【8月更文挑战第16天】在数字化时代,网络安全成为维护个人隐私和企业数据的关键防线。本文将深入探讨网络安全中的漏洞问题,分析加密技术在保护信息安全中的作用,并强调培养良好的安全意识的重要性。通过案例分析和理论阐述,旨在为读者提供一套全面的网络安全知识体系,帮助其在日益复杂的网络环境中保持警惕,采取有效措施防范潜在的网络威胁。
|
3天前
|
SQL 安全 网络安全
网络安全与信息安全:漏洞、加密技术与安全意识的探讨
【8月更文挑战第16天】在数字化时代,网络安全与信息安全成为维护社会稳定和保护个人隐私的重要议题。本文将深入探讨网络安全漏洞的成因、影响及防范措施,介绍加密技术的基本原理和应用,并强调提升公众的安全意识在构建网络防线中的重要性。通过分析当前网络安全面临的挑战,提出加强技术防护和提高用户安全意识的双重策略,旨在为读者提供全面的网络安全知识分享。
22 9

推荐镜像

更多