6个稳定版本

1.1.2 2024年5月20日
1.0.2 2024年5月18日
1.0.1 2024年5月17日

#354 in 加密

Download history 332/week @ 2024-05-13 385/week @ 2024-05-20 12/week @ 2024-07-01

每月 210 次下载

MIT 许可证

15KB
65

pg_ecdsa_verify: ECDSA签名验证的PostgreSQL扩展

CI Crates.io

概述

pg_ecdsa_verify 是一个用于验证ECDSA签名的PostgreSQL扩展,用Rust实现。它利用 pgrx 框架在Rust中创建PostgreSQL扩展。它使用作者编写的 ecdsa_verify Rust包来提供核心的ECDSA签名验证逻辑。

这个扩展旨在与基于C的 pg-ecdsa 兼容,具有相同的 ecdsa_verify() 函数签名,以便于集成。

为什么只做验证?

通过限制范围到验证,该扩展保持简单且易于实现和审计。由于验证只涉及公钥而不涉及私钥,因此它本质上对侧信道攻击具有安全性,并且比签名生成算法更容易正确实现。

典型用途是一个客户端需要验证服务器身份,其中公钥存储在PostgreSQL服务器中。在这种情况下,服务器端只需要签名验证算法。这就是为什么 pg_ecdsa_verify 包仅公开ECDSA签名验证算法的原因。

功能

  • 兼容性:支持多个PostgreSQL版本(11至16)。
  • 椭圆曲线:支持 secp256r1secp256k1 曲线。
  • 哈希函数:支持SHA-256用于哈希输入数据。
  • 性能:用Rust编写,以提高安全性和性能。
  • 测试:具有全面的测试套件以确保可靠性。
  • 基准测试:包含基准测试以测量性能。

入门

先决条件

如果您已经安装了这些,或者您使用的是不同于Ubuntu/Debian的平台,请访问链接并遵循您平台上的说明。

  1. 安装Rust

    https://rustup.rs/

    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    source $HOME/.cargo/env
    
  2. 安装最新版本的PostgreSQL

    https://postgresql.ac.cn/download/linux/ubuntu/

    sudo apt install -y postgresql-common
    sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
    sudo apt -y install postgresql
    sudo -u postgres createuser --superuser "$USER"
    createdb "$USER"
    
  3. 安装pgrx

    https://github.com/pgcentralfoundation/pgrx/

    sudo apt install -y libclang-dev build-essential libreadline-dev \
        zlib1g-dev flex bison libxml2-dev libxslt-dev libssl-dev libxml2-utils \
        xsltproc ccache pkg-config
    cargo install --locked cargo-pgrx
    cargo pgrx init
    

安装

  1. 克隆仓库

    git clone https://github.com/joelonsql/pg_ecdsa_verify.git
    cd pg_ecdsa_verify
    
  2. 构建和测试扩展

    cargo pgrx test
    
  3. 将扩展安装到 PostgreSQL

    cargo pgrx install --sudo
    

使用方法

SQL 函数

该扩展提供了一个单一的 SQL 函数 ecdsa_verify 用于验证 ECDSA 签名。

函数签名

\dx+ pg_ecdsa_verify
             Objects in extension "pg_ecdsa_verify"
                       Object description
-----------------------------------------------------------------
 function ecdsa_verify.ecdsa_verify(bytea,bytea,bytea,text,text)
 schema ecdsa_verify
(2 rows)

示例用法

psql
CREATE EXTENSION pg_ecdsa_verify;

SELECT ecdsa_verify.ecdsa_verify(
    public_key := '\x7fa92dd0666eee7c13ddb7b6249b0c8f9fba4360857c4e15d2fc634a2b5a1f8fdb9983b319469d35e719a3b93e1ac292854cd3ff2ad50898681b0a32ffbcbc6a'::bytea,
    input_data := '\x49960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d9763010000000117bd119a942a38b92bfc3b90a21f7eaa37fe1a7fa0abe27fd15dd20683b14d54'::bytea,
    signature := '\x10fab01307f3eed59bc11601265efaab524b50d017bd9cdfeec4f61b01caa8d669c6e9f8d9bcbdba4e5478cb75b084332d51b0be2c21701b157c7c87abb98057'::bytea,
    hash_func := 'sha256',
    curve_name := 'secp256r1'
);

 ecdsa_verify
--------------
 t
(1 row)

支持的曲线

  • secp256r1
  • secp256k1

支持的哈希函数

  • sha256

开发

项目结构

.
├── Cargo.toml
├── LICENSE
├── benches
   └── ecdsa_verify.rs
├── pg_ecdsa_verify.control
├── sql
└── src
    └── lib.rs
  • Cargo.toml:项目元数据和依赖项。
  • src/lib.rs:主要实现文件。
  • benches/ecdsa_verify.rs:基准测试脚本。
  • pg_ecdsa_verify.control:PostgreSQL 扩展控制文件。

运行测试

要运行测试,请使用以下命令

cargo pgrx test

基准测试

要基准测试扩展,请确保您正在使用 Rust Nightly 工具链,然后使用以下命令

cargo bench

基准测试结果

基准测试是在 Intel Core i9-14900K 上运行的。以下是结果

$ cargo bench

     Running benches/ecdsa_verify.rs (target/release/deps/ecdsa_verify-c81f65e672ca3ad2)

test bench_ecdsa_verify ... bench:     840,849 ns/iter (+/- 11,204)

许可协议

本项目采用 MIT 许可协议。有关详细信息,请参阅 LICENSE 文件。

致谢

  • 独立的 ecdsa_verify crate 是基于 Star Bank 的 starkbank-ecdsa Python 库 v2.2.0 版本。
  • 使用 pgrx 框架构建。

贡献

欢迎提交错误修复、优化和简化,但不接受更多新功能。请打开一个问题或提交一个 pull request。

依赖项

~23MB
~508K SLoC