OpenSSL使用Ed25519算法签名

Ed25519是一个公钥数字签名系统,以高性能及高安全性著称,其介绍可以参见这里,本文只描述如何利用OpenSSL来支持这一方法的签名和验证。所使用的环境包括Ubuntu 20.04 x64、OpenSSL 3.0.0 Alpha 13。

OpenSSL编译

目前,Ubuntu 20.04 x64系统上自带的OpenSSL版本为1.1.1f,而Ed25519算法,在OpenSSL 3.0.0以后才得到支持,因此,需要自己编译源码安装新版本,已经验证的OpenSSL版本,对应于其git源码tag openssl-3.0.0-alpha13。编译安装过程如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
$ git clone https://github.com/openssl/openssl.git
$ cd openssl
$ git checkout -b v3.0.0-alpha13 openssl-3.0.0-alpha13
# 若要生成静态链接的可执行文件,使用./Configure -static
$ ./Configure
$ make
# 默认安装到/usr/local/[bin|include|lib|share|ssl]
$ sudo make install
# 清除Shell先前缓冲执行文件路径
$ hash -r
# 验证OpenSSL版本,正常应该是输出OpenSSL 3.0.0-alpha13 11 Mar 2021这样的
$ openssl version
OpenSSL 3.0.0-alpha13 11 Mar 2021 (Library: OpenSSL 3.0.0-alpha13 11 Mar 2021)

使用方法

生成私钥

1
$ openssl genpkey -algorithm Ed25519 -out private.pem

生成公钥

1
$ openssl pkey -in private.pem -pubout -out public.pem

以私钥签名/bin/ls

1
$ openssl pkeyutl -sign -inkey private.pem -out sig.dat -rawin -in /bin/ls

以公钥验证/bin/ls

1
2
$ openssl pkeyutl -verify -pubin -inkey public.pem -rawin -in /bin/ls -sigfile sig.dat
Signature Verified Successfully