6个稳定版本
1.1.2 | 2024年5月20日 |
---|---|
1.0.2 | 2024年5月18日 |
1.0.1 | 2024年5月17日 |
#354 in 加密
每月 210 次下载
15KB
65 行
pg_ecdsa_verify
: ECDSA签名验证的PostgreSQL扩展
概述
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)。
- 椭圆曲线:支持
secp256r1
和secp256k1
曲线。 - 哈希函数:支持SHA-256用于哈希输入数据。
- 性能:用Rust编写,以提高安全性和性能。
- 测试:具有全面的测试套件以确保可靠性。
- 基准测试:包含基准测试以测量性能。
入门
先决条件
如果您已经安装了这些,或者您使用的是不同于Ubuntu/Debian的平台,请访问链接并遵循您平台上的说明。
-
安装Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh source $HOME/.cargo/env
-
安装最新版本的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"
-
安装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
安装
-
克隆仓库
git clone https://github.com/joelonsql/pg_ecdsa_verify.git cd pg_ecdsa_verify
-
构建和测试扩展
cargo pgrx test
-
将扩展安装到 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