一些安全的、随机的字节,无需`pgcrypto`

主要观点:

  • 在 Postgres 中常用random()函数生成随机数,但它是伪随机数生成器,不适合需要真正随机性的情况,Postgres 提供了通过pgcrypto扩展获取安全随机数的方式。
  • 引入pgcrypto数据库可能没问题,但测试 Postgres 17 RC 版本时,构建pgcrypto依赖 OpenSSL 很困难,作者反对使用 Postgres 扩展。
  • Postgres 内部有pg_strong_random.c模块可生成安全随机数,无需依赖 OpenSSL 或pgcrypto,但未提供给用户。
  • 可通过gen_random_uuid()函数获取安全随机数据生成 V4 UUID,利用其生成 ULID 所需的 10 字节随机数,避免依赖pgcrypto扩展。

关键信息:

  • random()是伪随机数生成器。
  • pgcrypto需通过pgcrypto扩展获取gen_random_bytes
  • 测试 Postgres 17 RC 版本时构建pgcrypto困难。
  • pg_strong_random()可生成安全随机数。
  • gen_random_uuid()生成 V4 UUID 包含安全随机数据。

重要细节:

  • 示例代码中通过gen_random_uuid()生成随机 UUID 并提取前后 5 字节得到 10 字节随机数用于 ULID。
  • 改变gen_ulid()实现以避免依赖pgcrypto扩展。
  • 希望尽快在核心中实现 V7 UUID 以摆脱此技巧。
阅读 11
0 条评论