Hacker News 中文摘要

RSS订阅

DuckDB中的静态数据加密 -- Data-at-Rest Encryption in DuckDB

文章摘要

DuckDB v1.4版本新增了数据库加密功能,文章介绍了其加密实现细节、使用方法及性能影响。作者建议使用最新稳定版v1.4.2,并提及现代CPU已具备专用加密指令,使加密技术更加普及高效。

文章总结

标题:DuckDB中的数据静态加密技术

来源:https://duckdb.org/2025/11/19/encryption-in-duckdb

发布时间:2025年11月19日

作者:Lotte Felius, Hannes Mühleisen

核心内容: DuckDB v1.4版本推出了数据库加密功能。本文详细介绍了加密技术的实现细节、使用方法及其性能影响。

加密背景: 现代数据库系统普遍需要数据加密功能。DuckDB现支持使用行业标准AES加密算法实现透明数据加密,包括AES-GCM-256和AES-CTR-256两种加密模式。前者更安全但速度较慢,后者速度更快但安全性稍逊。

技术实现: 1. 文件结构: - 主数据库头保持明文,用于验证文件有效性 - 加密标识位和元数据(包括数据库标识符、加密算法信息等)存储在头文件中 - 使用加密"哨兵值"验证密钥正确性

  1. 密钥管理:
  • 支持任意明文或base64编码字符串作为密钥
  • 通过密钥派生函数生成更安全的32字节密钥
  • 原始密钥使用后立即从内存中清除
  1. 块加密:
  • 默认256KB块大小
  • 加密块包含16字节nonce/IV和可选的16字节tag
  • 校验和也被加密以提高安全性
  1. 其他加密:
  • 预写日志(WAL)采用逐值加密
  • 临时文件自动加密
  • 支持三种临时文件类型的不同加密方式

使用方法: 1. 加密现有数据库或创建新加密数据库 2. 支持数据库解密和重新加密 3. 默认使用AES-GCM算法,可指定使用AES-CTR 4. 通过查询duckdb_databases()查看加密状态

性能表现: 1. 加密带来的性能影响较小 2. 使用OpenSSL硬件加速时,加密开销几乎可忽略 3. TPC-H基准测试显示加密前后性能差异不大

优势与展望: 1. 支持加密数据库文件的安全分发 2. 简化云环境下的威胁建模 3. 未来可能支持更多加密场景

建议用户使用最新稳定版(v1.4.2)以获得最佳加密体验。该功能为DuckDB带来了更安全的数据存储能力,同时保持了系统的高性能特性。

(注:本文保留了技术实现细节和关键性能数据,删减了部分历史背景和示例代码,使内容更加紧凑聚焦。)

评论总结

以下是评论内容的总结:

  1. 对DuckDB加密性能的赞赏

    • 观点:DuckDB的页级加密和利用现代处理器原生AES操作,显著提升了性能。
    • 引用:
      • "DuckDB is encrypting at the page level and leveraging modern processors native AES operations, they are able to perform read/writes at practically no cost."
      • "We had built out a naive solution with OpenSSL... that lead to a 2x runtime cost for first time queries."
  2. 关于多用户云端DuckDB的疑问

    • 观点:询问是否有好的多用户云端DuckDB模型,以便像普通数据库一样运行。
    • 引用:
      • "Other than motherduck, is anyone aware of any good models for running multi-user cloud-based duckdb?"
      • "Running it like a normal database, and getting to take advantage of all of its goodies."
  3. SQLite加密扩展的替代方案

    • 观点:指出SQLite的免费加密替代方案,如SQLiteMultipleCiphers和Turso Database。
    • 引用:
      • "SqliteMultipleCiphers has been around for ages and is free."
      • "Turso Database supports encryption out of the box."
  4. 对AES-GCM实现细节的质疑

    • 观点:质疑DuckDB的AES-GCM实现中nonce重用的敏感性问题,并指出文档中未明确说明解决方案。
    • 引用:
      • "AES-GCM sensitivity to nonce reuse is a tricky implementation detail."
      • "the header contains 16 bytes for the nonce instead of the expected 12 bytes and they do not share what bytes are random."

总结保持了不同观点的平衡,并引用了每条观点的关键评论。