GnuPG реализует OpenPGP для подписи и шифрования файлов и почты, подписи пакетов во многих дистрибутивах Linux и подписи коммитов git. Факты на этой странице проверены на пакете Alpine 3.24.2: GnuPG 2.4.9 с libgcrypt 1.12.2. gpg --quick-gen-key с одним только идентификатором пользователя создаёт основной ключ Ed25519 для подписи и сертификации и подключ шифрования Curve25519 (cv25519), оба как ключи версии 4, а срок действия основного ключа истекает через 1095 дней (три года), если срок не задан явно. Разбирайте ключи и подписи в инспекторе OpenPGP.
Ключи ECDSA можно создавать на P-256, P-384, P-521, secp256k1 и трёх кривых Brainpool r1; nistp224 завершается ошибкой «Unknown elliptic curve». Пакет подписи содержит r и s как два MPI OpenPGP — это не DER и не r‖s фиксированной длины. Подписи P-256 по умолчанию используют SHA-256; запрос SHA-256 для ключа P-384 завершается ошибкой «signing failed: Invalid length», а SHA-512 с ключом P-256 принимается.
Nonce детерминированные: при зафиксированных часах (--faked-system-time) две подписи одного файла совпали байт в байт, а r совпало с результатом независимой реализации RFC 6979, поэтому повторная подпись тех же данных не приводит к опасному повторному использованию nonce. Значение s не нормализуется, и подпись, в которой s заменили на n − s, была признана верной — это важно везде, где от подписей ожидается уникальность.
Подписи Ed25519 используют устаревший формат EdDSA (алгоритм 22): R и S хранятся как MPI, а Ed25519 подписывает не сам файл, а дайджест SHA-512 от файла и хешируемых полей подписи. Подпись R‖S, в которой каждое значение дополнено слева до 32 байт, прошла проверку в OpenSSL по этому дайджесту и не прошла по самому файлу, поэтому для проверки подписей gpg библиотекой Ed25519 общего назначения сначала нужно вычислить дайджест OpenPGP. Ключи Ed448 создаются как пакеты ключей версии 5 в формате черновика LibrePGP, которому следует GnuPG, тогда как ключи по умолчанию, ключи ECDSA и ключи Ed25519 в проверке были версии 4; прежде чем выбирать Ed448, убедитесь, что другая сторона читает версию 5. В этом выпуске нет ни одного постквантового алгоритма: в списке алгоритмов с открытым ключом — RSA, ELG, DSA, ECDH, ECDSA и EDDSA, а ky768_cv25519 отклоняется как неизвестная кривая.
В скриптах читайте машиночитаемый вывод --status-fd, а не текст: для верной подписи gpg выдал GOODSIG и VALIDSIG с кодом завершения 0, для подписи других данных — BADSIG с кодом завершения 1, а для обрезанного пакета — NODATA с кодом завершения 2. gpg --export-ssh-key с отпечатком и ! записывает для ключей ECDSA и Ed25519 строку открытого ключа OpenSSH, а --export и --export-secret-keys записывают пакеты OpenPGP.