Splyncはパスワードを平文で保存しません
これまでの記事では、HTTPSがアプリとサーバー間の通信路をどのように保護し、SSHがサーバー自体をどのように保護するかを紹介しました。今回は、サーバー内部を見て、Splyncがパスワードを受け取った後にどのように安全を確保するかを説明します。もし誰かにあなたのパスワードが取得された場合、その人はアカウントにログインし、支出記録を含む機密情報にアクセスできてしまいます。だからこそ、Splyncはパスワードを平文で保存しません。各パスワードは、データベースに保存される前にハッシュ化されたバージョンに変換されます。これはどういう意味なのでしょうか?ハッシュ化とは一方向の変換で、変換された後は元のパスワードに戻すことはできません。この方法は、銀行から主要なクラウドサービスに至るまで、インターネット全体で標準的に使用されていますが、実際にどのように機能するかを知っている人は多くありません。簡単な日常の例えで探ってみましょう。
ハッシュ化の基本:いつも同じように混ぜるミキサー
パスワード保護がどのように機能するか理解するために、SHA-256という単純なハッシュ化方法から始めましょう。それを、いつも同じように材料を混ぜるミキサーと考えてください。同じパスワードをミキサーに入れてボタンを押すと、いつも同じユニークなスムージー、つまり文字と数字が混ざったものが得られます。このプロセスは逆にすることはできません。スムージーを元のバナナと牛乳に戻すことができないように、ハッシュ化されたものを元のパスワードに戻すこともできません。
SHA-256の例:パスワードを知らずに検証する方法
SHA-256は最も一般的なハッシュアルゴリズムの一つです。例えば、"splync1234"というパスワードを"9cdafa20d069ecfb202e5f0bc937c73071cc6cd85634cc2d95d30ddcf2a71d41"にハッシュ化します。既存のユーザーがログインパスワードを入力するたびに、SHA-256は常に同じハッシュ化されたパスワードを生成します。アプリは、入力されたパスワードを再度ハッシュ化して、保存されたハッシュと一致するかどうかを確認するだけです。システムがユーザーの元のパスワードを知ることはありません。しかし、もし攻撃者が一般的なパスワードとそのハッシュをリスト化(レインボーテーブル攻撃として知られる)してユーザーのパスワードを素早く推測しようとしたらどうでしょう?その懸念は非常に現実的です。これが、現代のシステム、Splyncを含め、単なるSHA-256に依存しない理由です。
SplyncはSHA-256より強力なbcryptでパスワードをハッシュ化
Bcryptは、ユーザーごとにランダムなソルトを使用し、そのソルト(およびコストファクター)を保存されたハッシュ文字列に直接エンコードします。Bcryptを秘密のスパイス(ソルト)とゆっくりしたモーター(作業ファクター)を備えたミキサーと考えてください。それはすべてのミックスをユニークで複製しにくくします。ソルトが128ビット(約3×10³⁸の可能性)であるため、同じパスワードが天文学的な数の異なる保存ハッシュにマッピングされる可能性があります。これにより、事前計算されたレインボーテーブルは大規模には役に立ちません。ログイン時に、Splyncは保存されたbcrypt文字列からソルトとコストを読み取り、入力されたパスワードに対してこれらのパラメーターでbcryptを再実行し、その結果を保存されたハッシュと比較します。一致すれば、パスワードは正しいです。しかし、bcryptは意図的に遅く、ソルトはユニークであるため、ブルートフォース攻撃は攻撃者にとってはるかにコストがかかります。
bcryptを使った簡単な例
実際にどのようになるのか見てみましょう。"splync1234"というパスワードをbcrypt(コスト12を使用)でハッシュ化すると、次のような文字列が得られるかもしれません:`$2b$12$gBeouKYdue9uvvuV0HtGgeVPymnrojMqP/wcRw28HFlGEGIQbyw7O`。このbcrypt文字列では、`$2b`がアルゴリズムバージョンを示し、`$12`がコストファクター(パスワードが処理される回数)を示し、`gBeouKYdue9uvvuV0HtGgeV`がユニークなランダムソルト、`PymnrojMqP/wcRw28HFlGEGIQbyw7O`が最終的なハッシュ化パスワードです。ハッシュ自体がソルトとコストを含んでいるため、Splyncは保存された文字列からこれらの値を抽出して同じハッシュ化プロセスを再現し、結果を比較することができます。一方で、攻撃者がソルトとコストを知らない場合、全てのユーザーに対応するレインボーテーブルを構築することはできません。
ハッシュ化されたパスワードは二重の保護を提供
このアプローチにはもう一つの重要な利点があります。Splyncは平文のパスワードを決して保存しないため、データベースが漏洩または盗まれても、ユーザーはすぐに危険にさらされることはありません。攻撃者は、持っているのがただのスクランブルされた文字列だけなので、盗まれたデータで直接ログインすることはできません。この設計により、サーバー自体に既に存在する安全対策の上に、ユーザーに追加の保護層が提供されます。パスワードのハッシュ化はSplyncに特有のものではありません。それは、Google、Apple、Amazonなどの巨人が使用している技術業界の標準です。Splyncは非常に安全に構築されており、電子メール認証、ブルートフォース保護、継続的な監視などの機能でセキュリティを改善し続けることで、さらに安全になります。