从 Linux 命令行创建 DSA 签名

从 Linux 命令行创建 DSA 签名

我正在寻找一个 Linux/Unix 命令行工具来从给定的文件/数据和私钥创建 DSA 签名。

我知道xmlsec1 工具。但我想要更简单的东西。OpenSSL 似乎将此功能作为开发人员库提供,而不是作为工具提供。

答案1

它是通过“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

答案2

下列暂定的命令集似乎适用于 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 位的签名(可能使用 SHA-1)。评论,我将其添加-sha256openssl dgst,但没有什么区别。实验表明-pkeyopt dsa_paramgen_q_bits:256,即使手册页明确指出-pkeyopt dsa_paramgen_md:sha256了以下事项:

dsa_paramgen_md:digest
参数生成期间要使用的摘要。必须是sha1sha224或之一sha256。如果设置,则将匹配指定摘要的输出大小并且dsa_paramgen_q_bits参数将被忽略(..)

答案3

答案4

您是否想为文件创建签名,以便验证该文件的完整性?我认为您正在寻找 Gnu Privacy Guard (GnuPG)。

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

这将根据原始文件名创建一个签名文件 filename.sig,可以使用以下方法进行验证

gpg --verify filename.sig filename

相关内容