When you forget ssh key passphrase


Have you forgotten ssh key passphrase before? I forgot it twice. 設定したパスフレーズではなぜか使えなかったり、パスフレーズをどこに控えたかを忘れてしまったり。 そんなときに、とても時間がかかりますがブルートフォースでパスワードを当てる方法があります。

使うもの

john the ripper
総当たりをするための候補を作るプログラム。 linux だとパッケージに入っていることが多いです。
ssh-privkey-crack.c
キーの検証を行うプログラム。 コンパイルできる環境が必要です。

Procedure

  1. Download ssh-privkey.crack.c from lusas project. (執筆時にはダウンロードできていたのですが、時点で同じようにダウンロードできるかはわかりません。)

  2. Compile ssh-privkey-crack.c. コンパイルの方法はプログラム内のコメントに書かれています。 私の環境では gcc -Wall -o ssh-privkey-crack ssh-privkey-crack.c -lssl -lcrypto でコンパイルできました。 コンパイル後のファイルには実行権限をつけておきます。

  3. john the ripper をダウンロードして設定ファイルを編集します。 In my environment (ubuntu), /etc/john/john.conf was the default configuration. それに追記する形で設定を追加しました。

    総当たりをする場合の設定です。 File の指定は存在する chr ファイル を指定し、 Extra に chr ファイル 外 の文字で使用する文字を記述します。 chr ファイル の作り方がいまいち把握できていないのでこのようにしました。 MinLen 、 MaxLen はパスフレーズの長さの範囲を指定します。 CharCount で使用する文字の総数を記述します。 今回は 数字と大文字、小文字なので 62 です。 chr ファイルは私の環境だと /usr/share/john/ にありました。

  4. コマンド john -stdout -incremental:Pattern1 | ./ssh-privkey-crack ssh-private-keyfile を実行します。 最後に “-v” をつけると詳細なアウトプットが出せます。 (実際のところ MinLen = 3, MaxLen = 10, CharCount = 62 だとまず終わらないです。)