ssh-keygen で生成された OPENSSH フォーマットの秘密鍵を pem フォーマットへ変換する

Mac Mojave から ssh-keygen で出力されるフォーマットが変わった


Posted on 2019年 7月 27日 (土)
Tags openssh, ssh-keygen, security
openssh, ssh-keygen, security

ssh-keygen で生成された秘密鍵のヘッダが BEGIN OPENSSH PRIVATE KEY になっている

最近の Mac から ssh-keygen で生成される秘密鍵のフォーマットが見慣れない感じになっている。

 1$ ssh-keygen -t rsa -b 4096
 2
 3Generating public/private rsa key pair.
 4Enter file in which to save the key (/Users/amasuda/.ssh/id_rsa): /Users/amasuda/hoge/id_rsa
 5Enter passphrase (empty for no passphrase):
 6Enter same passphrase again:
 7Your identification has been saved in /Users/amasuda/hoge/id_rsa.
 8Your public key has been saved in /Users/amasuda/hoge/id_rsa.pub.
 9The key fingerprint is:
10
11$ cat ~/hoge/id_rsa
12
13-----BEGIN OPENSSH PRIVATE KEY-----
14b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAACF>
15NhAAAAAwEAAQAAAgEAsOvD4B2eDNB+IjNe3P6uU/KIzkO+nwHAGyjc4hB>
16BzSxiEC5zOxRj5DC6JZu21IY0o5k83n8EDEE3MAovMq6cJpBi3Yr0dvxX>
17A0g9yjXim3PlUm//SiKHzuz3wYcDSxz9n5IX7meUj5pOOydnGfwk3ZRxk>

通常、特にこのままで問題はないのだが、一部ツール (putty) で ppk フォーマットへ変換するときに、これだと変換に失敗することがある。

その場合は、出力フォーマットのオプションを指定する

1$ ssh-keygen -t rsa -b 4096 -m PEM
2
3$ cat ~/hoge/id_rsa
4
5-----BEGIN RSA PRIVATE KEY-----
6MIIJJwIBAAKCAgEAuajm9Id4q1NefRUBR9GsddzWRGrlc4ZBle65p82Hn>
7zd8xwUvOoRHNArKsl0R+J/5xsYKl5cGKaAiQATsEJUPLHH8uAnvbB8Mb7>
8cctW3cmULcDBsqvBOrk5FaSDGtHwlXdQz6eJ7+xbErZpdsyn/jeZHpoc0>

これで、ppk への変換ができる。

すでに OPENSSH フォーマットで登録している場合

既存の OPENSSH フォーマットの id_rsa に対して、下記を実行する

1# backup
2$ cp id_rsa id_rsa.openssh
3$ ssh-keygen -p -m PEM -f id_rsa

新規パスワード入力を求められるが、これは作成時と同じパスワードにしないと別の鍵になってしまう。

putty format へ pem フォーマットの秘密鍵を変換する

1$ brew install puttygen 
2$ puttygen id_rsa -O private -o id_rsa.ppk

そもそも OPENSSH のヘッダは何なのか?

ssh-keygen の man を確認する

1-m key_format
2    Specify a key format for the -i (import) or -e (export) conversion options.  
3    The supported key formats are: ``RFC4716'' (RFC 4716/SSH2 public or private key),
4    ``PKCS8'' (PEM PKCS8 public key) or ``PEM'' (PEM public key).
5    The default conversion format is ``RFC4716''.  Setting a format of ``PEM'' when generating
6    or updating a supported private key type will cause the key to be stored in the legacy PEM private key format.

デフォルトは、RFC 4716 - The Secure Shell (SSH) Public Key File Format のフォーマット。これは RFC で定められた秘密鍵のフォーマットだ。

これまで使われていた PEM フォーマットは、Privacy-Enhanced Mail - Wikipedia にもあるとおり、もともとセキュアなメールシステムの RFC 向けに開発された。 しかし、これらの RFC は1つのルート認証局の PKI に基づいたもので、運用の問題で実現することがなかった。

しかし、PEM というフォーマットは秘密鍵、公開鍵のフォーマットとして広く使われたようだ。

RFC 4716 のような仕様が策定され、今回のようにデフォルトの出力も切り替えられているため、PEM もいよいよその役割を終えるのかもしれない。

R.I.P

Share