セキュリティに関する用語には、なんだか似たような言葉がいくつも出てきますよね。
「nonce(ノンス)」と「salt(ソルト)」はどちらも「ランダムな値を使ってセキュリティを高める」という点では共通しているため、混同しがちです。
この2つは同じものだと思いがちですが、目的も使い方もまったく異なります!
この記事では、セキュリティ初心者の方にもわかりやすく、「nonce(ノンス)」と「salt(ソルト)」の違いをわかりやすく解説します。
nonce(ノンス)とは?
nonce(ノンス)は「number used once」の略であり、意訳すると「一度だけ使われるランダムな値」です。
nonceは主に「通信の認証処理」で使われます。たとえば、攻撃者が過去の通信内容(例:認証情報、トランザクションデータなど)を盗聴して、それをそのまま再送信して不正アクセスを試みる「リプレイ攻撃」という手法があります。
このような攻撃を防ぐために、サーバーはリクエストごとに異なるnonceを発行し、それを認証の一部として使います。1回しか使えないnonceを使うことで、同じリクエストの使い回しを防ぐというのがnonceの役割です。
nonceの読み方は「ノンス」が一般的です。まれに「ナンス」とも呼ばれますが、この記事では「ノンス」と表記します。
あわせて読みたい
『nonce(ノンス)』については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。 続きを見るnonce(ノンス)とは?「読み方」や「リプレイ攻撃の防ぎ方」などを解説!
salt(ソルト)とは?
salt(ソルト)は、文字通り「塩」です。セキュリティの世界では、元データ(例:パスワード等の文字列)に付け加える「ランダムな文字列」という意味で使われます。
saltは主に「パスワードのハッシュ強化」で使われます。ユーザーが入力したパスワードをそのまま保存するのは危険なので、通常は「ハッシュ化」という方法で暗号化します。しかし、もし2人のユーザーが同じパスワードを設定した場合、ハッシュ値も同じになってしまいます。これでは、ハッシュ値だけを見て「この2人は同じパスワードだ」とバレてしまう危険があります。そこで、ハッシュ化する前に「salt(ランダムな文字列)」を付け足します。
password → ハッシュ → a1b2c3
password + salt123 → ハッシュ → x9y8z7(全く違う値に!)
このようにsaltを加えることで、同じパスワードでも異なるハッシュ値が生成されるため、より安全にパスワードを管理できます。
あわせて読みたい
『salt(ソルト)』については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。 続きを見るハッシュ化で用いる「ソルト(Salt)」や「ペッパー(Pepper)」とは?わかりやすく解説!
nonceとsaltの違い
「nonce(ノンス)」と「salt(ソルト)」の違いをわかりやすく表にまとめました。
項目 | nonce(ノンス) | salt(ソルト) |
意味 | 一度だけ使うランダムな値 | パスワードに加える「ランダムな味付け」 |
目的 | リプレイ攻撃を防ぐために「一度きりのリクエスト」であることを保証する | パスワードのハッシュ値をユニークにして、辞書攻撃やレインボーテーブル攻撃を防ぐ |
主な用途 | 認証リクエストや署名、暗号通信など | パスワードのハッシュ化処理 |
使用タイミング | 通信ごとに毎回生成して使い捨てる | ユーザー登録やパスワード更新の際に生成し、ハッシュ値と一緒に保存 |
使い回しの可否 | 使い回し不可。再利用するとリプレイ攻撃を許してしまう | 同じユーザーでは使い回すが、他ユーザーとは異なるsaltを用意するのが基本 |
セキュリティ効果 | 攻撃者にリクエストの再送(リプレイ)をさせない | 同じパスワードを使っていても、異なるハッシュ値にすることでパターン解析を防ぐ |
保存の必要性 | 原則保存不要。使い捨てる | 保存が必要。ハッシュと一緒に保存される(DBにsaltも保存する) |
代表例 | JWTのnonce、OAuthのPKCE、ダイジェスト認証など | bcryptやscrypt、PBKDF2でのソルト付与処理など |
本記事のまとめ
この記事では「nonce(ノンス)」と「salt(ソルト)」の違いについて、以下の内容を説明しました。
- nonce(ノンス)
- 「一度だけ使う」ランダムな値(number used once)
- 主に通信の認証や署名処理に使われる
- salt(ソルト)
- 「パスワードに加える」ランダムな文字列
- 主にハッシュ強化のために使われる
お読み頂きありがとうございました。