35
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

macOS の標準機能でパスワードをランダム生成する方法

35
Last updated at Posted at 2018-03-01

TL; DR (今北産業)

  1. pwgen なんかないのよ
  2. 「パスワードアシスタント」を使う
    1. New → 新しい「パスワード」アプリのメニューから「ファイル」→「新規パスワード」で生成する
  3. 標準インストールされたコマンドやプログラム言語のワンライナーで生成する

キーチェーンアクセスの終焉。要早めのバックアップ

残念ながら、本記事のメインである「キーチェーンアクセス」は、廃止予定(Deprecated)となり、将来的に OS に同梱されなくなるようです。

Tahoe では「アプリケーション」の「ユーティリティ」一覧からも「キーチェーンアクセス」は消えましたが、実態は残っています。Command + スペースキー → 「キーチェーンアクセス」を検索すれば起動できます。

「キーチェーンアクセス」の廃止は、これまでの一元管理の仕組みをやめ、従来の「メモ」アプリに新しく追加された「メモをロック」機能と、新しい「パスワード」アプリに責務をわける方向に舵を切ったためと思われます。

問題はバックアップです。Tahoe では「キーチェーンアクセス」の内容は「あえて」一括出力(ダンプ出力)できないように制限されているため、「秘密メモ」は、手動でバックアップする必要があります。

  • https://discussions.apple.com/docs/DOC-250008926
    • バックアップは、「キーチェンアクセス」アプリから手動で「メモ」アプリにコピペして「メモをロック」するしか手立てがないとコミュニティで報告されています

とは言え、新しい「パスワード」アプリは、パスワード関連の管理機能に特化し、強化されたアプリになっています。

「パスワードの平文」「セキュリティ・キー(QRコードなどによる One-Time-Password のキー)」「パスキー」「WiFiアクセス・キー」といった鍵関連の管理や任意の追加・削除も従来と同じようにできます。パスワードの漏洩検知といった機能も強化されていたり、「キーチェーンアクセス」の古い暗号化方法より強化されたものが使われていることもあり、面倒ですが「キーチェーンアクセス」に保存した「秘密メモ」は「手動」で「メモ」に移動し「メモをロック」するのが今の所 Apple 系デバイスでは安全でしょう。

ちなみに、データは iCloud にバックアップされるものの、Web 版の iCloud 上では内容は確認できないので、Apple 系の認証デバイスをなくすと詰みます。

TS; DR pwgen ねぇ。sw-pwgen ねぇ。 Homebrew なんか見たこたねぇ」な時のサバイバル術

お客様先の Mac で急きょランダムなパスワードを目の前で作成する必要に迫られました。

オンラインのパスワード・ジェネレーターなどもってのほか、思いついた適当な文字列や数字でも自他共に自分のクセが現れます。

brewHomebrew)が使えるなら、pwgensf-pwgen などをインストールして便利なパスワード・ジェネレーター(パスワード生成)コマンドが利用できます。

しかし、いずれも macOS には標準でインストールされていません。一時的な利便性のために、お客様のマシンに不要なツールをインストールすることは、余計なトラブルを招くことになるので避けたいと考えています。

そのような、brew 含め余計なアプリもインストールできない場合の「OS 標準の機能でランダム生成する」いくつかのサバイバル術です。

他にも「こんなサバイバル術あるよ!」という方は編集リクエストで遠慮なく追記ください。

「キーチェーンアクセス」から「パスワードアシスタント」をそれらしく起動して生成する

2018-03-02_2.58.26.png
  1. 「Spotlight」を開く。
    タスクバー/ステータスバーの右端にある:mag:もしくは「control+スペース」 or 「command+スペース」で Spotlight を開きます
  2. 「キーチェーンアクセス」を開く。
    "パスワード" もしくは "keychain access" と カチャカチャカチャ…ッターン すると「キーチェーンアクセス.app」が起動します。
    (入力途中からアプリ名が表示されるので、選択してアプリを開いてください。)
  3. 「パスワードアシスタント」を起動する。
    「キーチェーンアクセス」ウィンドウの下部にある「+」ボタンを押して「パスワード」欄にある「:key:」(鍵ボタン)を押します
  4. パスワードを生成する。
    「パスワードアシスタント」が起動したら、「品質」(パスワード強度)を見ながら生成します
  5. アプリを終了する。
    良い感じのパスワードが生成できたら、パスワードを控えてアプリを終了します。
    (この時、後述するキーチェーンアクセスに追加・保存しておくと便利です)

キーチェーンアクセスを使うメリット

  1. 安心感
    お客様が見ている前で作成する際に「アップルのパスワード管理システムを使って作成します」と安心感を与えることができます。1
  2. バックアップ
    「パスワードアシスタント」で作成したパスワードを「キーチェーンアクセス」内に任意の「キーチェーン項目名」を付けて保存しておくことができます。
    これは「あの時のパスワードって何だっけ?」と後から聞かれた際のバックアップとして、とても有効です。特に、OS の設定で AppleID の iCloud 項目にある「キーチェーン」にチェックが入っていれば、iCloud バックアップの同期対象となるので OS の再インストールでも安心
  3. セキュリティ
    上記 2 で保存したパスワードは、同じログインユーザー(キーチェーンを開けるユーザー)のパスワードを入れないと見られないので安心感を与えられます

デメリット

  • 途中マウス操作が必要なため、終始カチャターンができないので、いささか格好悪い

余談

残念ながらコマンドラインから直接「パスワードアシスタント」を起動する方法がわかりませんでした。せいぜい $ open -a "Keychain Access" で「キーチェーンアクセス.app」を起動させるくらいでしょうか。意味ないですけど。

ちなみに「キーチェーンアクセス」に保存されているデータは security コマンドで確認は出来ます(要ログイン・パスワード)。また、SSH 接続時のパスワードや Web サイトなどで自動入力されるパスワードなどもキーチェーンアクセスで確認できます。

キーチェーンアクセスに任意のメモやパスワードを保存する @ iCloud

1Password のようなパスワード・マネージャーで、Apple 製のものには「Passwords」アプリがあります。しかし、実質的に iCloud キーチェーン(Apple のパスワード同期機構)の「パスワード用ビュー」です。

そして、この iCloud キーチェーンの管理ツール(ローカル・エディター)となるのが macOS の「キーチェーンアクセス」アプリです。

実は、キーチェーンアクセスには、任意の値を保存することができます。パスワードや PIN コード関連はもちろんのこと、API などのアクセス用に発行したアクセストークンなど、どこかにメモしておかないといけないが、「メモ」アプリでは不安な場合などに活用できます。

  1. キーチェーンアクセスを開く
  2. 左ペイン(左側の項目)の「キーチェーン」にある「iCloud」を選ぶ。(これで iCloud に保存されます)
  3. 保存したいデータの種類を選ぶ。(「秘密メモ」or「パスワード」など)
  4. データを入力する
    • 「秘密メモ」の場合
      1. 「キーチェーン項目名」欄に後で用途は思い出せるも具体的な内容は推測できない名前を付ける
      2. 「メモ」欄に秘密のメモの内容を書いて「保存」する
    • 「パスワード」の場合
      1. 「キーチェーン項目名」欄に後で用途を思い出せる名前を付ける
      2. 「アカウント名」欄にパスワードと紐付けるアカウント名を入れる
        • Web ブラウザやアプリなどにフォーカスが当たっていた場合、OS が「これはアカウント名の項目だ」「これはパスワード欄の項目だ」と検知できた場合に、この項目の内容が参照されます
      3. 「パスワード欄」に該当するパスワードを入力、もしくは生成して「保存」する
      4. キーチェーン項目名に補足したいメモがある場合
        • 保存された項目を開いて属性の「メモ」欄に追記し「変更内容を保存」します。パスワードの用途などが良いでしょう。「最初に飼ったペットの名前」など、パスワードの内容そのものが推測できるものは、ここには記載しないようにしましょう
      5. 特定の URL や URI のみで自動挿入させたい場合(1Password 的な使い方)
        • 保存された項目を開いて属性の「場所」欄に URL を記載します。(必ず反応するわけではありません)
  5. 保存した秘密メモやパスワードを確認する
    • 追加した項目をダブル・クリックで開き「パスワードを表示」をクリックすると、現在 OS にログインしているユーザーのパスワードを聞かれ、パスワードの内容が確認できます

コマンドラインからパスワードを作成するワンライナー

macOS の標準で使えるコマンドやプログラム言語でターミナルからパスワードを作成する方法です。他にも方法がありましたら、コメントいただけると嬉しいです。

/dev/urandom のランダム発生器を使う New

head -c で長さを調整でき、たいていの Linux でも使える。Docker の Alpine でも使えた。

$ base64 /dev/urandom | tr -d -c '[:alnum:]' | head -c 32
fYP59YWxLq0KiAWMp44UqPoUaRijlBO2

openssl コマンドを使う

以下はいずれも16桁のパスワードです。(正確にはランダム値のハッシュなんですが)

8桁の数値(0-9a-f)で撃ちやすいが強度が弱いパスワード
$ openssl rand -hex 8
163ff7872a9b495e
ランダムな12バイトのバイナリデータをBase64にエンコードして作成するランダムパスワード
$ openssl rand -base64 12
6kRz+U9TCFXs5Us=
🐒   OpenSSL の rand で Base64 の指定バイト数と出力桁数(のバイト数)が合わない理由

上記 -base64 で 12 と指定しているのに 16 桁になるのは、Base64 に変換するとバイト長が 4/3 倍になるからです。

12バイト * 4 / 3 = 16桁

逆に言えば、欲しい桁数を 3/4 倍すると必要なバイト数が出て来ます。

16桁 * 3 / 4 = 12バイト

20桁のランダムなパスワードが欲しい場合
$ # 20 桁 * 3 / 4 = 15 バイト
$ openssl rand -base64 15
Gz930m5pUxD+DWfZ/EFW

しかし、整数に割り切れない場合は注意が必要です。バイト長を小数で指定しても、小数点以下は切り捨てられてしまうからです。例えば 10 桁欲しい場合はバイト長は 7.5 になります。 10 * 3 / 4 = 7.5

以下は同じ長さになる=小数以下は切り捨てられている
$ openssl rand -base64 7.5
xPIuDOt87w==
$ openssl rand -base64 7
fkLTZPHLfA==

そのため、欲しい桁数が微妙な場合は長めに出力して欲しい桁数ぶんにカットする必要があります。

長めに出力し、あたまの10文字だけ出力する
$ # 10 桁の次に出てくる整数に割り切れる値は 12 桁なので 12 * 3 / 4 = 9
$ openssl rand -base64 9 | head -c 10
kytm+5VNM3$ # この場合、改行が付かないので注意

PHP の OpenSSL を使って生成する

以下の $n の値を出力したい桁数に置き換えて実行する。

echo substr(base_convert(bin2hex(openssl_random_pseudo_bytes($n)),16,36),0,$n) . PHP_EOL;

例:16桁のパスワード

$ php -r "echo substr(base_convert(bin2hex(openssl_random_pseudo_bytes(16)),16,36),0,16) . PHP_EOL;"
1j131w7idxgks4gw
  • macOS 12 Monterey(12.0)以降 では PHP は標準で同梱されなくなりましたが、記事作成時は同梱されていました

参考文献

  1. スケープゴートのつもりはないのですが、Google アカウントしかり「アップル(もしくは Google)のセキュリティが破られるレベルの攻撃を受けたら私でも歯が立ちません」といった言葉を添えるようにしています。だって、事実そうだもの。トドメは「これで破られた場合は、マスターパスワードの使い回しか、社内からの漏洩ですね」というのが私のおきまりのルーチンです。だって、事実そうだもの。

35
24
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?