Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What are the parts ECDSA entry in the 'known_hosts' file?

I'm trying to extract an ECDSA public key from my known_hosts file that ssh uses to verify a host. I have one below as an example.

This is the entry for "127.0.0.1 ecdsa-sha2-nistp256" in my known_hosts file:

AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBF3QCzKPRluwunLRHaFVEZNGCPD/rT13yFjKiCesA1qoU3rEp9syhnJgTbaJgK70OjoT71fDGkwwcnCZuJQPFfo=

I ran it through a Base64 decoder to get this:

���ecdsa-sha2-nistp256���nistp256���A]2F[rUF=wXʈ'ZSzħ2r`M::WL0rp

So I'm assuming those question marks are some kind of separator (no, those are lengths). I figured that nistp256 is the elliptical curve used, but what exactly is that last value?

From what I've been reading, the public key for ECDSA has a pair of values, x and y, which represent a point on the curve. Is there some way to extract x and y from there?

I'm trying to convert it into a Java public key object, but I need x and y in order to do so.

like image 750
loosebazooka Avatar asked Feb 08 '13 22:02

loosebazooka


1 Answers

Not all of characters are shown since they are binary. Write the Base64-decoded value to the file and open it in a hex editor.

The public key for a P256 curve should be a 65-byte array, starting from the byte with value 4 (which means a non-compressed point). The next 32 bytes would be the x value, and the next 32 the y value.

like image 179
Nickolay Olshevsky Avatar answered Oct 17 '22 00:10

Nickolay Olshevsky