nonce(ノンス)とは?「読み方」や「リプレイ攻撃の防ぎ方」などを解説!

この記事では『nonce(ノンス)』について、

  • nonce(ノンス)とは
  • nonceによりリプレイ攻撃を防止する例

などを図を用いて分かりやすく説明するように心掛けています。ご参考になれば幸いです。

nonce(ノンス)とは

nonceは「number used once」の略であり、意訳すると「一度だけ使われるランダムな値」です。

nonceはネット上の認証の際に大事な役割を果たし、nonceを用いることでリプレイ攻撃を防ぐことができます。

リプレイ攻撃とは

リプレイ攻撃とは、攻撃者が過去に送信された正当なデータの通信(例:認証情報、トランザクションデータなど)を傍受し、それを再度送信することでシステムに不正にアクセスしようとする攻撃手法です。この攻撃により、攻撃者はなりすましや二重取引などの不正操作を試みることができます。

補足

  • nonceは「ノンス」や「ナンス」と呼びます。「ノンス」の方が一般的のようです。
  • リプレイ攻撃は「リプレイアタック」や「反射攻撃」とも呼ばれています。

IDとパスワードによる認証とリプレイ攻撃

IDとパスワードによる認証とリプレイ攻撃

通常、ユーザーはIDとパスワードを入力してサーバーに送信します。しかし、そのままの情報を送ると、攻撃者に傍受されるリスクがあるため、パスワードは「ハッシュ化」という方法で暗号化されます。このハッシュ化により、攻撃者が通信を傍受しても、実際のパスワードを知ることはできません。

しかし、ハッシュ化だけでは不十分です。なぜなら、認証のたびに同じハッシュ値(暗号化された文字列)をサーバーに送信するので、攻撃者がこのハッシュ値を傍受すれば、ユーザーになりすますことが可能です。このような攻撃を「リプレイ攻撃」と呼びます。

nonceによりリプレイ攻撃を防止する例

nonceによりリプレイ攻撃を防止する例

リプレイ攻撃を防ぐための一つの方法が「nonce(ノンス)」です。以下は、nonceリプレイ攻撃を防ぐ手順を以下に示します。

nonceを用いてリプレイ攻撃を防ぐ手順

  • まず、IDとパスワードを入力する前にサーバーがnonceをユーザーに送ります。
  • ユーザーはIDとパスワードを入力し、入力したパスワードをハッシュ化します。
  • ハッシュ化したパスワードに先ほどのnonceを連結し、連結した文字列を再度ハッシュ化します。この結果を「ハッシュ値1」としてサーバーに送信します。
  • サーバー側でも同様の手順で「ハッシュ値2」を作成します。
  • サーバーは「ハッシュ値1」と「ハッシュ値2」を比較し、認証情報が正しいか判断します。

上記の手順から分かるように、認証の度にnonceが変わるので、ユーザーが送信するハッシュ値が毎回変わります。そのため、攻撃者が通信を盗聴できたとしても、盗んだハッシュ値を使いまわすことができなくなります。

本記事のまとめ

この記事では『nonce(ノンス)』について、以下の内容を説明しました。

  • nonce(ノンス)とは
  • nonceによりリプレイ攻撃を防止する例

お読み頂きありがとうございました。