nonce(ノンス)とsalt(ソルト)の違いをわかりやすく解説!

セキュリティに関する用語には、なんだか似たような言葉がいくつも出てきますよね。

nonce(ノンス)」と「salt(ソルト)」はどちらも「ランダムな値を使ってセキュリティを高める」という点では共通しているため、混同しがちです。

この2つは同じものだと思いがちですが、目的も使い方もまったく異なります!

この記事では、セキュリティ初心者の方にもわかりやすく、nonce(ノンス)」と「salt(ソルト)」の違いをわかりやすく解説します。

nonce(ノンス)とは?

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

nonceは主に「通信の認証処理」で使われます。たとえば、攻撃者が過去の通信内容(例:認証情報、トランザクションデータなど)を盗聴して、それをそのまま再送信して不正アクセスを試みる「リプレイ攻撃」という手法があります。

このような攻撃を防ぐために、サーバーはリクエストごとに異なるnonceを発行し、それを認証の一部として使います。1回しか使えないnonceを使うことで、同じリクエストの使い回しを防ぐというのがnonceの役割です。

nonceの読み方は「ノンス」が一般的です。まれに「ナンス」とも呼ばれますが、この記事では「ノンス」と表記します。

あわせて読みたい

nonce(ノンス)』については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。

salt(ソルト)とは?

salt(ソルト)は、文字通り「塩」です。セキュリティの世界では、元データ(例:パスワード等の文字列)に付け加える「ランダムな文字列」という意味で使われます。

saltは主に「パスワードのハッシュ強化」で使われます。ユーザーが入力したパスワードをそのまま保存するのは危険なので、通常は「ハッシュ化」という方法で暗号化します。しかし、もし2人のユーザーが同じパスワードを設定した場合、ハッシュ値も同じになってしまいます。これでは、ハッシュ値だけを見て「この2人は同じパスワードだ」とバレてしまう危険があります。そこで、ハッシュ化する前に「salt(ランダムな文字列)」を付け足します。

password → ハッシュ → a1b2c3
password + salt123 → ハッシュ → x9y8z7(全く違う値に!)

このようにsaltを加えることで、同じパスワードでも異なるハッシュ値が生成されるため、より安全にパスワードを管理できます。

あわせて読みたい

salt(ソルト)』については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。

nonceとsaltの違い

nonce(ノンス)」と「salt(ソルト)」の違いをわかりやすく表にまとめました。

項目nonce(ノンス)salt(ソルト)
意味一度だけ使うランダムな値パスワードに加える「ランダムな味付け」
目的リプレイ攻撃を防ぐために「一度きりのリクエスト」であることを保証するパスワードのハッシュ値をユニークにして、辞書攻撃やレインボーテーブル攻撃を防ぐ
主な用途認証リクエストや署名、暗号通信などパスワードのハッシュ化処理
使用タイミング通信ごとに毎回生成して使い捨てるユーザー登録やパスワード更新の際に生成し、ハッシュ値と一緒に保存
使い回しの可否使い回し不可。再利用するとリプレイ攻撃を許してしまう同じユーザーでは使い回すが、他ユーザーとは異なるsaltを用意するのが基本
セキュリティ効果攻撃者にリクエストの再送(リプレイ)をさせない同じパスワードを使っていても、異なるハッシュ値にすることでパターン解析を防ぐ
保存の必要性原則保存不要。使い捨てる保存が必要。ハッシュと一緒に保存される(DBにsaltも保存する)
代表例JWTのnonce、OAuthのPKCE、ダイジェスト認証などbcryptやscrypt、PBKDF2でのソルト付与処理など

本記事のまとめ

この記事ではnonce(ノンス)」と「salt(ソルト)」の違いについて、以下の内容を説明しました。

  • nonce(ノンス)
    • 「一度だけ使う」ランダムな値(number used once)
    • 主に通信の認証や署名処理に使われる
  • salt(ソルト)
    • 「パスワードに加える」ランダムな文字列
    • 主にハッシュ強化のために使われる

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

スポンサーリンク