WinAuth を使って Slack の2要素認証を設定する

SMS による 2 要素認証は安全じゃない、ということで代替ツールを使うことに。WinAuth。

2要素認証ってなに?

ログイン時に ID/PASS 以外に、もう一つ何かを使うという認証方式。略語では 2FA と書く。

参考: 2要素認証を設定する – Slack

そういえば過去記事でまとめてた(「二段階認証」という言葉を使っているが):

stakiran.hatenablog.com

設定手順

(1) WinAuth を入手する

GitHub の Releases · winauth/winauth よりダウンロードする。

Beta よりも Stable(安定版)が良いだろう。2018/11/05 現在では 3.5.1 が最新の Stable。

また、インストールが面倒くさい場合は zip ファイルをダウンロードする。本記事では zip ファイルで進める。

(2) WinAuth を起動

展開すると WinAuth.exe という実行ファイルが一つだけ存在する。これを適当なディレクトリに配置する。

(3) Slack の2要素認証を設定してみる

まずは WinAuth 画面。

  • Add ボタン > Google で「Add Google Authenticator」ダイアログを開く
  • Name と Icon は適当に

ここで Slack 側の 2 要素認証画面に移る。

  • 設定画面はこの辺
    • https://(ワークスペース名).slack.com/account/settings?msg=verified_two_factor#two_factor を開く
  • 認証画面を開くと、Step 3 つから成る画面が出る
  • このバーコードをスキャンできませんか? → 時間ベースキーを表示。これをコピー。

WinAuth 画面に戻る。

  • コピーした時間ベースキーを貼り付ける
  • Verify Authenticator ボタンクリック
  • 「3. Verify the following... 」の欄に確認コードが出ることを確認して、OK ボタンを押す

パスワード設定画面が出るので、必要ならする。これをしておくと、他人が WinAuth を起動した時も(パスワード入れないと使えないので)悪用されずに済む。

あとは WinAuth 側で登録したばかりの Authenticator から 6 桁のコードを表示して、Slack 側に入力する。XXX XXX ではなく XXXXXX と 6 文字で入れる(スペースは入れない)。

(余談) このコード、時間が経つたびに別のコードに変化していくが、問題はない。このコードの生成は(たぶん時刻をキーにして) WinAuth 側と Slack 側で同じアルゴリズムが使われているので、Slack 側でもちゃんと認識できる。というより、このように一定時間ごとに変化するコードを使うところこそがこの方式のセキュリティの肝。

Q&A

Q: WinAuth のデータはどこに保存される?

Ans: %appdata%\winauth\winauth.xml

中身は以下のような感じ。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<WinAuth version="3.5">
  <alwaysontop>false</alwaysontop>
  <usetrayicon>false</usetrayicon>
  <notifyaction>Notification</notifyaction>
  <startwithwindows>false</startwithwindows>
  <autosize>true</autosize>
  <left>250</left>
  <top>553</top>
  <width>0</width>
  <height>0</height>
  <WinAuthAuthenticator id="xxxxxxxx-..." type="WinAuth.GoogleAuthenticator">
    <name>Google</name>
    <created>xxxxxxxxxxxxx</created>
    <autorefresh>false</autorefresh>
    <allowcopy>false</allowcopy>
    <copyoncode>false</copyoncode>
    <hideserial>false</hideserial>
    <skin></skin>
    <authenticatordata encrypted="y">XXXXXXXX...</authenticatordata>
  </WinAuthAuthenticator>
</WinAuth>