ログイン機能はどう作られる?

SNS・ゲーム・ネット通販——ほぼすべてのサービスにあるログイン機能。ID・パスワードを入れるあのシンプルな画面の裏で、実はけっこう複雑な仕組みが動いています。、その流れを図解でひも解いていきます。

そもそもログインとは?

ログインは「あなたが本当にそのアカウントの持ち主かどうか」をサーバーが確認する仕組みです。一般的にはユーザーID(メールアドレス)とパスワードの2つを使いますが、最近は指紋・顔認証・スマホへのコード送信など、追加で確認する方式(多要素認証)も広く使われています。

ログインの基本フロー

同じパスワード「password123」を3つの方法で変換すると… サーバーはこの右側の文字列をDBに保存する。元のパスワードは保存しない MD5(旧式・危険) 1992年・解読が容易 482c811da5d5b4bc6d497ffa98491e38 → オンライン辞書1秒で復元される SHA-256(中間) 2001年・速いがブルートフォース可 ef92b778bafe771e89245b89ecbc08a44a4e166c06659911881f383d4473e94f → GPUで数時間〜数日(弱いパスワードなら) bcrypt(推奨) 1999年・遅くする工夫あり $2b$12$KIXz3Lv4F9.../zxN3w6q7sWv9L4M → 同じパスワードでも数百年かかる試行回数 ※実行例の概算。bcryptは「コスト」を上げると意図的に時間を増やせる仕組み
図1:「password123」もハッシュ関数を通すとぐちゃぐちゃの文字列に。bcryptを使うと解読にかかる時間が桁違いに伸びる

仕組み:パスワードはそのまま保存しない

大事なポイントは「サーバーはパスワードそのものを保存していない」ことです。ユーザー登録のとき、パスワードを「ハッシュ化」と呼ばれる一方向の変換にかけて、ぐちゃぐちゃの文字列に変えてからデータベースに保存します。ログイン時は、入力されたパスワードをまた同じ方法でハッシュ化し、保存してあるハッシュと一致するか比較します。

もしDBが流出しても、ハッシュからは元のパスワードに戻せないため、被害が小さくなります。ただし弱いパスワード(123456など)はハッシュからでも逆算されやすいので、長くて複雑なパスワードが必要なのはこのためです。

セッションとトークン

ログイン成功後、毎回ID・パスワードを送らないために「セッションID」または「トークン」と呼ばれる合言葉が発行されます。これがブラウザのCookieに保存され、以降のリクエストに自動で付いていくことで、サーバーは「このリクエストはAさんからだ」と判断できます。

ここで大事なのは、セッションIDやトークンは「一時的な通行証」だということです。ログアウトしたとき、一定時間操作しなかったとき、パスワードを変更したときには、古い通行証を無効にする設計が必要です。共有パソコンでログアウトを忘れると危ないのは、この通行証がブラウザに残る場合があるからです。

ログイン4方式 強さ(左軸)と手間(右軸) バー長=攻撃者がアカウントを突破するのに必要な平均試行回数(対数スケール) パスワードのみ 弱い:流出DB1件で突破 入力1回 PW+SMS認証 中:SIMスワップ攻撃に弱い 入力2回 PW+認証アプリ 強い 入力2回 パスキー 非常に強い:物理デバイスが必要 指紋1回 主要サービスのログイン方式(2026年時点) Google パスキー対応 2023年〜既定推奨 Apple パスキー対応 iOS 16〜 GitHub 2FA必須 2023年〜全員 X 2FA任意 SMS有料化 PayPay SMS+生体 金融サービス マイナポータル 物理カード必須 公的個人認証 参考:Google発表「2024年12月時点で全アクティブアカウントの3分の1以上がパスキー利用」 ※凡例|緑=パスキー/物理鍵 青=認証アプリ2FA 橙=SMS 赤=PWのみ
図2:パスワードのみは突破リスクが高い。今のうちに「認証アプリ+パスキー」に慣れておくと社会人後も役立つ

おすすめの学び方

「自分でログイン画面を作れるとWeb開発のレベルが一気に上がる」と覚えておきましょう。Pythonの Flask + Werkzeug、Node.jsの Express + bcrypt あたりが入門に向いています。最初は「メアドとパスワードで登録→ログイン→マイページ表示」の最小機能だけ作るのが目標です。

ただし、練習用のログイン機能をそのまま公開サービスに使うのは危険です。実際のサービスでは、ログイン失敗回数の制限、パスワード再設定メールの有効期限、CSRF対策、CookieのSecure属性やHttpOnly属性など、細かい安全策が必要になります。最初は「仕組みを理解するためのミニアプリ」と割り切り、本番ではフレームワークや認証サービスの標準機能を使うのが現実的です。

気をつけたい落とし穴

ログイン機能で絶対やってはいけない3つ
  • パスワードをそのままDBに保存する。必ずハッシュ化(bcryptやArgon2など)する
  • HTTPSを使わない。通信が盗み見られるとパスワードが丸見えになる
  • パスワードを忘れたとき「メールに元のパスワードを送る」設計にする。これは保存方法が間違っている証拠

将来どう役立つ?

ログイン機能を「正しく」理解していると、Webアプリを作るときだけでなく、自分のアカウントを守る判断にも役立ちます。最近はパスキー(指紋・顔認証ベース)の利用も広がっており、パスワードだけに頼らない認証が少しずつ増えています。古い知識に固定せず、パスワード、2要素認証、パスキーの違いを説明できるようになると、セキュリティ分野にも進みやすくなります。

今日からできること

3ステップで始めよう
  1. 自分のSNSアカウントで2要素認証をオンにする(最初の実体験)
  2. 「パスワード ハッシュ化 bcrypt 入門」で検索して仕組みを5分読む
  3. 慣れてきたら、PythonかNode.jsで「メアド登録→ログイン→ログアウト」を写経してみる

まとめ

ログインは「サーバーが本人確認をする仕組み」で、裏側ではハッシュ化・セッション・Cookieが連携しています。パスワードはそのままDBに保存しない、HTTPS必須、2要素認証は積極的に使う。この3つを意識するだけで、Webサービスの安全性は段違いに上がります。今のうちにこの仕組みを理解しておくと、自分のアカウントの守り方も賢くなります。

確認 パスワードを保存する基本は?