编译支持更大 RSA 密钥的 GnuPG (16384 bit)
本文将展示如何在 Debian 11.3 环境下编译支持更大 RSA 密钥 (16384 bit) 的 GnuPG 2.2.41。
请注意,修改源代码可能会产生安全隐患。
首先,获取 GnuPG 2.2.41 源码。
$ sudo apt install curl
$ curl -O https://gnupg.org/ftp/gcrypt/gnupg/gnupg-2.2.41.tar.bz2
$ sudo apt install tar lbzip2
$ tar xf gnupg-2.2.41.tar.bz2
$ cd gnupg-2.2.41
然后,修改“g10/keygen.c”文件中的两处代码。
第一,增大“static int gen_rsa(…)”中的最大长度限制。
1697 int err;
1698 char *keyparms;
1699 char nbitsstr[35];
1700 const unsigned maxsize = 16384; // (opt.flags.large_rsa ? 8192 : 4096);
第二,增大“static unsigned int get_keysize_range(…)”中的最大长度限制。
2321 default:
2322 *min = opt.compliance == CO_DE_VS ? 2048: 1024;
2323 *max = 16384; // 4096;
2324 def = 3072;
2325 break;
接下来,编译安装修改后的 GnuPG,本文将安装至源码根目录下的“dist”目录。
$ sudo apt install gcc make libgpg-error-dev libassuan-dev libksba-dev libnpth0-dev libgcrypt20-dev
$ #rm -r dist
$ ./configure --prefix="$(pwd)/dist" && make clean && make && make install
最后,在开始使用前将安装目录临时添加到 PATH 中。为了避免因安全内存不足造成的错误,启动 gpg-agent 时可能需要附带扩展安全内存区域参数“–auto-expand-secmem n”,根据需求选择参数值。
$ export PATH="$(pwd)/dist/bin":$PATH
$ #pgrep gpg | xargs kill -9
$ gpg-agent --auto-expand-secmem 0x30000 --daemon
好了,可以使用编译好的 GnuPG 来创建更长的 RSA 密钥了。
$ gpg --pinentry-mode loopback --full-gen-key
相关:两个相对更年轻的加密签名工具。
- Age:
↪ https://github.com/FiloSottile/age
A simple, modern and secure encryption tool (and Go library) with small explicit keys, no config options, and UNIX-style composability. - Minisign:
↪ https://github.com/jedisct1/minisign
A dead simple tool to sign files and verify digital signatures.