最終更新日:2026年6月1日
sg sg-security-overview crypto_auth access_control
まず結論
S/KEYとは、ハッシュ関数を繰り返し使って、毎回異なる使い捨てパスワードで認証する方式です。
SG試験では、時刻同期でパスワードを作る方式ではなく、Seedとシーケンス番号を使うハッシュチェーン型のワンタイムパスワード方式として切り分けます。
S/KEY = Seedとシーケンス番号を使い、サーバが受け取った値をさらにハッシュして前回保存値と比べる方式
直感的な説明
S/KEYは、「一度使うたびに前の段階へ戻っていくパスワード列」を使うイメージです。
あらかじめ、ハッシュ関数を何回も適用して作った値の列を考えます。
- 今回使う値を送る
- サーバは、それをもう1回ハッシュする
- サーバが前回保存していた値と一致すれば正しい利用者と判断する
- 次回のために、今回受け取った値を保存する
この仕組みにより、通信路上で今回の値を見られても、次回使う値を簡単には求めにくくなります。
定義・仕組み
S/KEYは、ハッシュ関数を使うワンタイムパスワード方式の1つです。
基本の流れは次のように整理できます。
- クライアントが認証を要求する
- サーバが、シーケンス番号とSeedをクライアントへ送る
- クライアントが、パスフレーズとSeedをもとにハッシュ計算を行い、今回の使い捨てパスワードを作る
- クライアントが、その使い捨てパスワードをサーバへ送る
- サーバが、受け取った使い捨てパスワードをさらにハッシュする
- サーバが、前回保存していた値と比較する
- 一致すれば認証し、次回に備えて保存値とシーケンス番号を更新する
ここで重要なのは、Seedやシーケンス番号をクライアントが最初にサーバへ送るのではなく、認証要求を受けたサーバがクライアントへ送るという点です。
また、S/KEYは時刻情報を使ってパスワードを同期させる方式ではありません。時刻同期が強調される選択肢は、TOTPなどの時刻同期型ワンタイムパスワードを疑います。
公式仕様としては、RFC 1760 - The S/KEY One-Time Password Systemで整理されています。
どんな場面で使う?
S/KEYは、固定パスワードをそのまま何度も送ることを避けたい場面で考えます。
- 使い捨てパスワードで認証したい
- 通信路上で同じパスワードを繰り返し使いたくない
- ハッシュ関数を使って次回値を推測しにくくしたい
- Seedやシーケンス番号を使うOTP方式を問われている
SG試験では、実務での利用頻度よりも、時刻同期型OTPとの違いと、サーバが受け取った値をハッシュして保存値と比較する流れを押さえることが大切です。
よくある誤解・混同
クライアントがSeedを送る方式ではない
S/KEYでは、認証要求を受けたサーバが、シーケンス番号とSeedをクライアントに送ります。
そのため、選択肢で「クライアントが認証要求のたびにSeedやシーケンス番号をサーバへ送る」とあれば、送信方向が逆です。
時刻同期方式ではない
S/KEYは、時刻情報をもとにクライアントとサーバで同じパスワードを生成する方式ではありません。
| 用語 | 判断ポイント |
|---|---|
| S/KEY | Seed、シーケンス番号、ハッシュチェーン |
| TOTP | 時刻情報を使って一定時間だけ有効なOTPを生成 |
| HOTP | カウンタを使ってOTPを生成 |
SG試験では、「時刻情報」や「時刻同期」が強調されていれば、S/KEYではなく時刻同期型OTPを疑います。
サーバは受け取った値をそのまま前回値と比べるだけではない
S/KEYでは、サーバはクライアントから受け取った使い捨てパスワードに、さらにハッシュ関数を適用します。
そして、得られた値をサーバが保存している前回値と比較します。
この「もう1回ハッシュして比較する」という流れが、S/KEYの選択肢を切る重要ポイントです。
利用者のパスフレーズ自体を毎回捨てるわけではない
S/KEYで使い捨てになるのは、認証で送るワンタイムパスワードです。
利用者が設定した元のパスフレーズそのものを毎回捨てる、という説明は不適切です。
確認問題(SG試験対策)
S/KEYの認証手順を判断するとき、最も適切なものはどれか。
- ア. 認証側が示したSeedと番号を使い、利用者側で今回用の値を計算して送る。
- イ. 認証側と利用者側が現在時刻から同じ数値を作り、時刻の一致を前提に認証する。
- ウ. 利用者が毎回、新しい元パスフレーズを登録してから認証を受ける。
- エ. 認証側は受け取った値を保存値と照合せず、そのまま次回の認証結果として使う。
▶ クリックして答えと解説を見る(ここを開く)
正解:ア
解説
- ア:適切です。S/KEYでは、Seedやシーケンス番号を手掛かりに、ハッシュチェーン上の値を使って認証します。
- イ:不適切です。時刻同期型ワンタイムパスワードの説明です。
- ウ:不適切です。毎回使い捨てるのは認証で送る値であり、元のパスフレーズそのものではありません。
- エ:不適切です。認証側は受け取った値をハッシュして、保存値との関係を確認します。
👉 判断ポイント S/KEYは、Seed・シーケンス番号・ハッシュチェーンで切り分けます。時刻同期が出たら別方式を疑います。
まとめ(試験直前用)
- S/KEYは、ハッシュチェーン型のワンタイムパスワード方式。
- サーバがSeedとシーケンス番号をクライアントへ送る。
- クライアントはハッシュ計算で今回の使い捨てパスワードを作る。
- サーバは受け取った値をさらにハッシュし、前回保存値と比較する。
- 時刻同期型OTPや「パスフレーズ自体を毎回捨てる」という説明と混同しない。