1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenID Connectにおける「nonce」の役割とリプレイアタック対策

Posted at

OpenID Connectにおける「nonce」の役割とリプレイアタック対策

SSO(Single Sign-On)を導入するにあたり、セキュリティを確保するためのキー概念の1つnonce(ノンス)です。
本記事では、OpenID Connectにおける nonce の具体的な使われ方と、リプレイアタックをどのように防いでいるのかを、初心者にもわかりやすく整理してみました。


nonce(ノンス)とは?

nonce(ナンス、Number used once)とは、一度しか使えない一意のランダム値のこと。
主に以下のような目的で使われます:

  • 暗号化における初期ベクトル
  • 一時的なトークン(ワンタイムトークン)
  • 認証の整合性確認(OpenID Connectなど)

つまり、「使い捨ての鍵」のようなものです。


OpenID Connectにおけるnonceの流れ

OIDC(OpenID Connect)では、nonceIDトークンの再利用(リプレイ)を防ぐためのセキュリティ対策として使用されます。

① 認証リクエストでnonceを生成

クライアント(例:Webアプリ)は、IdP(Identity Provider)にリクエストを送る際に、ランダムな nonce を生成します。

import os

nonce = os.urandom(20).hex()  # 例: Pythonでの生成方法

② nonceをセッションに保持

生成した nonce は、セッションや一時的なストレージに保存しておきます(後で検証するため)。

③ IdPがIDトークンにnonceを埋め込む

ユーザーが認証に成功すると、IdPは nonce をIDトークンのpayload内に含めてクライアントに返します。

④ トークン受信時にnonceを検証

クライアント側では、IDトークンに含まれる nonce とセッションストアに保存された nonce を照合します。

一致 → トークン有効
不一致 → 不正なトークンとして拒否

⑤ nonceを削除して再利用を防止

照合後、セッションから nonce を削除します。
そのため、同じIDトークンを使い回そうとする攻撃者は、nonceが一致せず失敗するという仕組みです。

リプレイアタックとは?
リプレイアタックとは、攻撃者が一度使われた正規のIDトークンを再利用して、不正にアクセスを試みる攻撃です。

しかし、nonceがあることで以下のように防げます:

攻撃者が盗んだIDトークン → 使おうとする
でも、正しいnonceはもう存在しない!
よって認証エラー!

まとめ:一言でいうと…

nonceを使えば、IDトークンは“一度きりしか使えない”仕組みになるってことです!

SSOやOIDCを安全に導入したいなら、nonce の概念は必ず押さえておきたいポイントですね。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?