全社会人のためのパスワード管理

# ‎TL;DL

- 「頭を使う」パスワード管理はあまり良くないです
- 「覚えやすいパスワード」はもっと良くないです
- **「自分ですら知らないパスワード」**が最強です
- あとは個人の思想に準じて手段を使い分けましょう

# パスワード管理の重要性について

パスワード、管理してますか？使いまわしは一切せず、全て別のパスワードを設定していますか？

パスワード周りのベストプラクティスを探し求め、筆者がたどり着いた結論は**「パスワード管理アプリで自動生成した、自分すら知らないパスワードを使う」**ことでした。
具体的にどういう意味か、綴っていきましょう。

# 大前提
以下はアウト(論外)です。

- シンプルなもの
    - abcdef
    - qwerty
- 名前と誕生日
    - Takata0101
- 会社名等
    - erasTakata0101

パスワードそのものの単純さも良くないのですが、筆者は知ってます。こういうパスワード使う人は**使いまわし**をします。
なし崩し的に流出しかねません。

# よく言われているパスワード生成方法について
では、複雑なパスワードはどのように生成するべきでしょうか。

[あなたのパスワードは大丈夫？～インターネットサービスの不正ログイン対策～](https://www.youtube.com/watch?v=lXh0b4KS9gE&t=312s)
上記IPAの動画で推奨されている「識別子 + ランダム文字列」という方法は、個人的には「ある前提」がある場合を除き、オススメしません。
「ある前提」に関しては後述します。

「識別子 + ランダム文字列」というのは、例えばマスターパスワードを完全ランダムだったり、ある文字列の子音字を取ったりといった方法で、とりあえず

- Ewlk98jarwlk

と決めておいて、例えばQiitaならば、子音字の"Qt"を先頭につけて

- **Qt**Ewlk98jarwlk

とするような方法です。
一時期この方法を使っていたのですが、大きな欠点があります。

### 識別子がわからなくなる
「Qtだっけ？Qitだっけ？？？」

### 共通パスワードが使えなかったり、パスワードポリシーに合致しなかったり、サイト仕様が変だったり
「何！？ パスワードに数字は使えません！？ どんな仕様だよこのサイト！！！！」
「何！？ パスワードに記号は必須です！？ じゃあ後ろに!をつけて……」
「何！？ パスワードは8文字以内！？ 嘘だろ！？」
「あれ、このサイトって!必要だっけ、必要なかったっけ……そもそも数字必要だっけ……」

**ｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱﾛｯｸｻﾚﾀｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱｱ!!!!!!**

# 結果的に、「毎回頭を使っている」時点で良くない
「頭を使わなさすぎて単純なパスワードを全てのサイトで使い回す」のは論外として、「毎回頭を使ってパスワードを思い出す」のも、上記のような問題を孕んでいます。

ではどうすれば良いのか。

# パスワード管理アプリ、使いましょう
個人的には、**全社会人必須の勢いで、パスワード管理アプリを使うべき**と考えています。
パスワード管理アプリは、端的に言えば「ひとつだけパスワードを覚えておけば、残りのパスワードは全部自動で生成してくれるし、管理してくれる」というアプリのことです。有名なものに1Password, Dashlane, Bitwarden等があります。
大抵の場合Chromeの拡張機能なども備えており、フォームへの入力が極めて容易にできます。
要するに「Excelでパスワードを管理する」の超進化版だと考えると分かりやすいと思います。

筆者は現在Bitwardenを愛用しています。

# パスワード管理アプリって安全なの？
大きな懸念としてこの点が挙げられるとは思います。
結論、「どの方法でも絶対安全な方法などないのだから、各々の信条に従って選択するしかない」という身も蓋もないお話になってしまうのですが……

例えばExcel等は比較的安全だとは思いますが、パスワード管理アプリにあるような「基本的に伏せ字で管理されており、そのままコピーできる」というような特性はないので、職場で使うと覗き見されてしまうかもしれません。

「(OSSのパスワード管理アプリの場合)パスワード管理アプリをAWS等のサーバ上で公開されているソースをベースにインストールし、自社サーバのみで管理する」というややマニアックな方法もありますが、それでも「サーバに侵入されたらどうする？」というような問題が無いとも言い切れません。

極論、「実はGoogleを使うのは危険」「Amazonを使うのも危険」みたいなところまで考え始めるとキリがありません。

**結局は「どこかで踏み切る」必要があります。**
ただ確実に言えるのは、パスワード管理アプリを使えば少なくとも「単純なパスワードを使い回した結果流出する」という悲劇は避けられますし、サイトごとにパスワードを覚える頭の負担も減らせて、なおかつ「自分ですら知らない」というある種最強のパスワードを全サイトに設定できます。

なお、筆者がBitwardenを選んだ理由は

- 無料でかなりの機能が使えること
- オープンソースであるため、不正が入りにくい
- 第三者機関の監査を受けていること
    - [Bitwarden Completes Third-party Security Audit](https://bitwarden.com/blog/post/bitwarden-network-security-assessment-2020/)

のあたりです。

# 「識別子 + ランダム文字列」を使うべき「ある前提」とは？
> 上記IPAの動画で推奨されている「識別子 + ランダム文字列」という方法は、個人的には「ある前提」がある場合を除き、オススメしません。

こちらの「ある前提」ですが、具体的には2点です。

- パスワード管理アプリそのもののパスワード
    - これはどうしてもパスワード管理アプリでは管理できないので、何かしらの方法で覚える必要があります。
- パスワード管理アプリのインストールや管理アプリへのログインができない現場・客先等

後者がなかなか厄介で、客先次第でフリーウェアのinstallが気軽にできなかったり、ましてデバイス間同期できるようなソフトウェアとなると論外、といったところも多いでしょう。
まあこういった現場で複数のWebサービスの認証情報を管理する必要ってあまりないと思うので、そこまで問題になることは少ないかなと思います。大抵の場合ランダム文字列をChromeの標準パスワード管理機能で管理すれば大丈夫かなと。
※客先PCで意味なく個人アカウントで何かしらにログインするのは避けましょう。

# まとめ
セキュリティにベストプラクティスはありませんが、少なくともパスワード管理ソフトを導入した後は、「識別子 + ランダム文字列」で全てのサイトを強行していた際より大幅に頭の疲労がマシになりました。
個人としてはここに書いた方法が一番オススメですが、この情報も踏まえた上で、各々でベストの方法を追求してみてください。

# 余談
パスワード定期的変更の必要性に関しては、今や「不要」が常識となっています。
これに関しては組織のポリシーで強制される場合もあると思いますが……
……まあ、その場合は……郷に入りては郷に従いましょう。