Создание DSA Signature из командной строки Linux

Я ищу инструмент командной строки Linux/Unix для создания подписи DSA из заданного файла / данных и закрытого ключа.

Я знаю об инструменте xmlsec1. Но я бы хотел что-то попроще. Кажется, что OpenSSL предоставляет эту функцию как библиотека разработчика, но не как инструмент.

4 ответа

Это сделано с "openssl dgst" - не самое очевидное место, чтобы поместить это...

Нашел в:

http://www.myelin.co.nz/post/2005/5/23/

openssl dsaparam 1024 < /dev/random > dsaparam.pem

openssl gendsa dsaparam.pem -out dsa_priv.pem

openssl dsa -in dsa_priv.pem -pubout -out dsa_pub.pem

echo "foobar" > foo.txt

sha1sum < foo.txt | awk '{print $1}' > foo.sha1

openssl dgst -dss1 -sign dsa_priv.pem foo.sha1 > sigfile.bin

openssl dgst -dss1 -verify dsa_pub.pem -signature sigfile.bin foo.sha1

Следующий примерный набор команд работает с openssl 1.0.2g и 1.1.0g. По сравнению с этим другим ответом он нацелен на генерирование подписи файла (включая стандартный хэш-шаг), а не подписи (включая второй шаг хеша) шестнадцатеричного представления ASCII в нижнем регистре первого хэша файла. Также он использует более современный хэш и размер модуля.

# generate parameters with 2048-bit DSA, SHA-256 (can be common to multiple keys)
openssl genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:2048 -pkeyopt dsa_paramgen_q_bits:256 -pkeyopt dsa_paramgen_md:sha256 -out dsaparams.pem

# generate a private key and extract the public key
openssl genpkey -paramfile dsaparams.pem -out dsaprivkey.pem
openssl dsa -in dsaprivkey.pem -pubout > dsapubkey.pem

# create a file "myfile" to be signed
echo 'The Magic Words are Squeamish Ossifrage' > myfile

# create signature "myfile.sig"
openssl dgst -sha256 -sign dsaprivkey.pem myfile > myfile.sig

# verify "myfile" against signature "myfile.sig" and public key
openssl dgst -sha256 -verify dsapubkey.pem -signature myfile.sig myfile

Примечание. В предыдущей попытке openssl 1.0.2g генерировал подписи с 160-битным q (возможно, с использованием SHA-1). За комментарий я добавил -sha256 в openssl dgst, но это не имело значения. Эксперименты показывают, что необходимо использовать -pkeyopt dsa_paramgen_q_bits:256хотя man-страница явно заявляет -pkeyopt dsa_paramgen_md:sha256 заботится об этом:

dsa_paramgen_md:digest
Дайджест для использования при генерации параметров. Должен быть одним из sha1, sha224 или же sha256, Если установлено, то число битов в q будет соответствовать выходному размеру указанного дайджеста и dsa_paramgen_q_bits параметр будет игнорироваться (..)

Вы хотите создать подпись для файла, чтобы можно было проверить целостность этого файла? Я думаю, что вы ищете Gnu Privacy Guard (GnuPG).

gpg --output filename.sig --detach-sig filename

Это создает файл подписи filename.sig, основанный на оригинальном имени файла, который можно проверить с помощью

gpg --verify filename.sig filename

Вы смотрели на:

  • openssl gendsa
  • openssl dsa
  • openssl pkcs8
Другие вопросы по тегам