こう 聞かれます
- 「パスワードは
データベースに どう 保存しますか」 - 「パスワードを
暗号化して 保存するのは 正しいですか」 (ハッシュとの 違いを 確かめる形) - 「ソルトとは
何ですか。 なぜ要るのですか」
面接官が 見ている点
- 平文、
暗号化、 ハッシュの 違いを、 戻せるか どうかで言えるか - 速い
ハッシュではなく、 パスワード用の ゆっくりした ハッシュを 選ぶ理由を言えるか - 自分で
仕組みを 作らず、 決まった 道具を 使う 姿勢があるか
短い答え
- パスワードは
平文でも 暗号化でもなく、 元に 戻せない 一方向の ハッシュに 変えて 保存します。 - ハッシュには、
Argon2id や bcrypt のような、 わざと 計算に 時間が かかる パスワード用の 方式を 使います。 - 利用者ごとに
違うソルトを 混ぜるので、 同じ パスワードでも 保存される 値が 変わります。
少し 詳しい答え
平文、 暗号化、ハッシュ
- 平文 データベースが
漏れたら、 そのまま 読まれます - 暗号化鍵が
あれば 元に 戻せます。 鍵も 一緒に 漏れれば 読まれます - ハッシュ元に
戻せない 一方向の 変換です。 保存するのはこれです
ログインの
なぜゆっくりした ハッシュか
データが
ソルト
ソルトは
作った
よく ある間違い
- 「暗号化して保存する」と言う
暗号化は 鍵で 戻せます。 パスワードは 戻せない 一方向の ハッシュで 保存します - 「SHA-256 で
ハッシュに すれば 安全」と言う 速い ハッシュは 試しを 大量に 回されます。 パスワード用の ゆっくりした方式を使います - ハッシュの
仕組みを 自分で作る 細かな 誤りが 穴に なります。 決まった 方式を、 よく 使われている 道具で使います
深掘りの問い
- 「bcrypt に
入れる 長さで 気を つけることは」 多くの 作りで 72 バイトまでしか 使われないので、 それより 長い 入力の 扱いを 決めて おく、と答えます - 「方式や
重さの 設定を 後から 上げるには」利用者が 次に ログインして 正しい パスワードが 手に 入った ときに、 新しい 方式で 作り直して 保存する、と答えます - 「パスワードを
忘れた 人には どうしますか」元の パスワードは 返せないので、 期限つきの 再設定の リンクを 送って 新しく 決めて もらう、と答えます