在known_hosts文件中有哪些部分ECDSA条目

时间:2013-02-08 22:33:42

标签: ssh cryptography ecdsa

我正在尝试从我的known_hosts文件中提取ecdsa公钥,ssh用它来验证主机。我在下面有一个例子。

这是我的known_hosts文件中“127.0.0.1 ecdsa-sha2-nistp256”的条目:

  

AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBF3QCzKPRluwunLRHaFVEZNGCPD / rT13yFjKiCesA1qoU3rEp9syhnJgTbaJgK70OjoT71fDGkwwcnCZuJQPFfo =

我通过base64解码器运行它来获取此信息:

  

ECDSA-SHA2-nistp256nistp256A] 2F [RUF =wXʈ'ZSzħ2r`M:: WL0rp

所以我假设这些问号是某种分隔符[编辑:那些是长度]。我认为nistp256是使用的椭圆曲线,但最后一个值究竟是什么?根据我一直在阅读的内容,ecdsa的公钥有一对值x和y代表曲线上的一个点。有没有办法从那里提取x和y?

我正在尝试将其转换为java公钥对象,但我需要x和y才能这样做。

2 个答案:

答案 0 :(得分:6)

并非所有字符都显示,因为它们是二进制的。将Base64解码的值写入文件并在十六进制编辑器中打开它。 P256曲线的公钥应为65字节数组,从值为4的字节开始(表示非压缩点),接下来的32字节为x值,下一个为32-y值。

答案 1 :(得分:5)

这是十六进制的结果:


签名算法:

00 00 00 13
65 63 64 73 61 2d 73 68 61 32 2d 6e 69 73 74 70 32 35 36
(ecdsa-sha2-nistp256)

域名参数:

00 00 00 08
6e 69 73 74 70 32 35 36
(nistp256)

公钥值:

00 00 00 41
04
5d d0 0b 32 8f 46 5b b0 ba 72 d1 1d a1 55 11 93 46 08 f0 ff ad 3d 77 c8 58 ca 88 27 ac 03 5a a8
53 7a c4 a7 db 32 86 72 60 4d b6 89 80 ae f4 3a 3a 13 ef 57 c3 1a 4c 30 72 70 99 b8 94 0f 15 fa

首先,您要使用要使用的数字签名算法的名称,然后是曲线的名称,然后是密钥的公共组件,由未压缩的EC点表示。未压缩的点以04开头,然后是X坐标(与键大小相同),然后是Y坐标。

如您所见,所有字段值前面都有4个字节,表示字段的大小。所有值和字段都使用Big Endian表示法。