关于 DSA 密钥大小

on DSA key size

当你执行

ssh-keygen -t ssh-dss

它生成两个文件:一个包含 public,另一个包含私钥。

ssh-keygen man-page 说它总是生成一个 1024 位密钥,但是当我打开 public 密钥文件时,我总是得到一个 580 个字符的行(这将是 ASCII 中的 4640 位)。

是我漏掉了什么还是想错了?我试过阅读算法,但考虑到所涉及的素数的大小,很难计算。

有没有一种方法可以根据 id_dsa.pub 文件中的字符数量来验证它是否是 1024 位密钥?

ssh-keygen 存储 public 和私钥的文件有一些预定义的格式(PEM,...),它们不是密钥本身的转储(例如,记住 private密钥通常会被加密)。

在此 link (https://martin.kleppmann.com/2013/05/24/improving-security-of-ssh-private-keys.html) 中,您会找到一些关于不同格式的很好的解释,以及如何使用 "openssl asn1parse" 等工具来显示它们:

私钥为ASN.1数据结构,使用DER序列化为字节串,再进行Base64编码。 ASN.1 大致相当于JSON(它支持各种数据类型,例如整数、布尔值、字符串和可以嵌套在树结构中的lists/sequences)。它被广泛用于加密目的,但它在网络一代中不知何故已经过时了(我不知道为什么,它似乎是一种相当不错的格式)。

查找 public 密钥大小的一种方法是在 ASN1 中查找存储它的标签并验证其数据的长度。