【Mac初心者向け】pwgenで安全なパスワードを簡単に生成しよう

2014.12.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、虎塚です。

皆さんは普段パスワードをどのように作成されていますか?

お客様や同僚に自分が構築したサーバを引き渡す際、パスワードに「password」などと設定してドン引きされてセキュリティ上のリスクを作っていないでしょうか。

今日は、Macで使えるパスワード生成ツールのpwgenをご紹介します。

ほかの選択肢

クロスプラットフォームアプリの1Passwordや、Mac標準ツールのKeychainを使うとパスワードの生成や管理ができます。しかし、次のような問題があります。

  1. GUIアプリケーションなので、起動からパスワードを得るまでに複数のアクションが必要
  2. 一度に複数のパスワードを作成できない

1つ目は、ターミナルの上で過ごすのが好きな方には同意いただける話ではないでしょうか(?)。2つ目は、記号混じりのパスワードを作成したいときに顕著になる問題です。

たとえば、Amazon RDSのインスタンスを起動する時に設定可能な、マスターユーザのパスワードの要件を見てみましょう。

MasterUserPassword

The password for the master database user. Can be any printable ASCII character except "/", """, or "@".

MySQL
Constraints: Must contain from 8 to 41 characters.
Type: String
Oracle
Constraints: Must contain from 8 to 30 characters.
Type: String
SQL Server
Constraints: Must contain from 8 to 128 characters.

Type: String

Required: Yes

パスワードには、「/」、「"」、「@」を除く、印刷可能なASCII文字が利用できます。

しかし、多くのパスワード生成・管理ツールでは、「パスワードに記号を含むか否か」という設定しかできません。仕様で許容される記号だけを含むパスワードを生成するには、何度もパスワード生成を試行することになります。

この制約は、pwgenでもじつは同じです。しかし、後でご紹介するように、pwgenでは一度に複数のパスワードを生成できますので、利用可能なものを採用するまでの時間が短縮できます。

そこで、使い慣れたmkpasswdを使おうという気持ちになるかもしれませんが、CUIで使えることを除いては同じ問題があります。今回はパスして、pwgenを使ってみましょう。(Mac OSにプリインストールされていないという点では、pwgenもmkpasswdも同じです)

pwgenのインストール

pwgenは、brewでインストールできます。

% brew  install pwgen
==> Downloading https://downloads.sourceforge.net/project/pwgen/pwgen/2.06/pwgen
######################################################################## 100.0%
==> ./configure --prefix=/usr/local/Cellar/pwgen/2.06 --mandir=/usr/local/Cellar
==> make install
  /usr/local/Cellar/pwgen/2.06: 4 files, 44K, built in 5 seconds
% which pwgen
/usr/local/bin/pwgen

pwgenの機能

pwgenは、pwgen [ OPTION ] [ pw_length ] [ num_pw ]の形式で使います。pw_lengthはパスワードの文字数、num_pwは生成する個数です。

便利そうなオプションを抜粋して、次に示します。

オプション 内容
-0, --no-numerals パスワードに数字を含めない
-A, --no-capitalize パスワードに大文字を含めない
-B, --ambiguous パスワードにまぎらわしい文字(lと1, 0とOなど)を含めない
-c, --capitalize パスワードに少なくとも1個の大文字を含める(ttyへの標準出力ではデフォルト)
-n, --numerals パスワードに少なくとも1個の数字を含める(ttyへの標準出力ではデフォルト)
-y, --symbols パスワードに少なくとも1個の特殊文字を含める

-Bオプションは一見便利そうですが、利用できる文字数が大幅に減少するので、推奨されていません。たとえば、パスワードをコピーアンドペーストできない状況、たとえば、紙に印刷して連絡する必要がある場合などに使うとよいのではないでしょうか。

-yオプションを使うと、記号を含むパスワードを生成できます。

pwgenの使用例

先ほど引用したRDSのマスターユーザパスワードの要件に沿ったパスワードを、pwgenで生成してみましょう。

具体的には、パスワードの要件を次のように定めます。

  • パスワードの文字数は20文字とする
  • パスワードに数字を1個以上含む
  • パスワードにアルファベット大文字を1個以上含む
  • パスワードに記号を1個以上含む(ただし「/」、「"」、「@」以外)

上記を満たすパスワードを10個まとめて生成して、その中から適切な記号を含むパスワードを採用します。

コマンドは次のようになります。(実行結果は、一例です)

% pwgen -y 20 10 | grep -v @ | grep -v / | grep -v \"
ieghoosheephaeb*aiy)
phaevaepochiel[ienah
paazaurum&aingo)phae
xuxaizaeda$obaingail
goozairalo*i>mieg&ee
imepie:gheiduzeolee>
taew~e-ataipheingeix
ahxeek+ohruguxebaegh

1個以上の数字を含めるためのオプション「-n」と、1個以上の大文字を含めるためのオプション「-c」の指定は、省略しました。ターミナルで実行する限り、これらはデフォルトの動作になります。

「/」と「"」と「@」を避けるために、grepで否定のマッチを指定しています。これによって、適切なパスワードだけが表示されました。

おわりに

pwgenもgrepも便利ですね。LinuxでもMacでも、こういった便利なツールを活用して、適切なパスワードを設定するようにしましょう。

それでは、また。

くらめそちゃんとかまくら

クラスメソッド非公式キャラクター・くらめそちゃん