SSHのpubkeyについて

ssh-keygenで作られた公開鍵のフォーマットどないなってんねん。

RFCではこのの様になっとる: rfc4716

しかし、我々の知っている公開鍵ファイル(eg: .ssh/id_rsa.pub)はこのようになってるはずや:

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIBTKKjXHyWP6pv+Lmf0Y3URUQ21c7wY7VNzNMV1oMNzq9e3UXy0TyvMJcXJe5QDqoU/lPUk332JlBLTM2vJhZQCcsQSxUeA9s5h4twVvYW/+VC0WG3b+yioSacetioqx7CvVBOIyp2zIGgay1ykfxgaMm6BcPO9/t32IDohqwFNIw==

問い. この鍵はどうなってるのか

答え. ゴミ<space>[次の文字列のサイズ in byte :: 4byte][アルゴリズムの名前 in ascii (eg. ssh-rsa)][次の数字のサイズ in byte :: 4byte][e(positive)][次の数字のサイズ in byte :: 4byte][n(positive)] in Base64

最初の文字列ssh-rsaは次のbase64で表現されたバイナリに含まれるものと一致すべし。 次に続くのは上記のとおりバイナリ列であり、最初の4バイトはたいてい7とかかれている(00 00 00 07) - (これを aszと呼ぼう)。

次にaszバイト数だけ続くのはASCII文字列で、たいていssh-rsaなどとかかれている。

その次に4バイト分だけeのサイズがかかれており(eszとおく)、次にeがeszだけかかれている。

その次に4バイト分だけnのサイズがかかれており(nszとおく)、最後にnがnszだけかかれている。

eとnについてはwikipediaRSAの記事を読め。

  • 注意 * nを正数として表現するため、実際のサイズよりもここに格納されている値のサイズのほうが1バイトだけ大きい。たとえばeszが257であれば、実際の鍵長は256バイト(2048 bit)である。