---
title: "S/KEYとは？ハッシュチェーン型ワンタイムパスワード【SG試験】"
description: "S/KEYは、ハッシュ関数を繰り返し使うワンタイムパスワード方式です。シーケンス番号、Seed、サーバ側の比較方法、時刻同期方式との違いをSG試験向けに整理します。 選択肢で問われる目的・対象・責任範囲を押さえ、似た用語や対策との違いを判断できるようにします。"
last_modified_at: "2026-06-01"
canonical_url: "https://stemtazoo.github.io/sg/s-key/"
section: "sg"
---

## まず結論

**S/KEY**とは、ハッシュ関数を繰り返し使って、毎回異なる使い捨てパスワードで認証する方式です。

SG試験では、**時刻同期でパスワードを作る方式ではなく、Seedとシーケンス番号を使うハッシュチェーン型のワンタイムパスワード方式**として切り分けます。

> **S/KEY = Seedとシーケンス番号を使い、サーバが受け取った値をさらにハッシュして前回保存値と比べる方式**

## 直感的な説明

S/KEYは、「一度使うたびに前の段階へ戻っていくパスワード列」を使うイメージです。

あらかじめ、ハッシュ関数を何回も適用して作った値の列を考えます。

- 今回使う値を送る
- サーバは、それをもう1回ハッシュする
- サーバが前回保存していた値と一致すれば正しい利用者と判断する
- 次回のために、今回受け取った値を保存する

この仕組みにより、通信路上で今回の値を見られても、次回使う値を簡単には求めにくくなります。

## 定義・仕組み

S/KEYは、ハッシュ関数を使うワンタイムパスワード方式の1つです。

基本の流れは次のように整理できます。

1. クライアントが認証を要求する
2. サーバが、シーケンス番号とSeedをクライアントへ送る
3. クライアントが、パスフレーズとSeedをもとにハッシュ計算を行い、今回の使い捨てパスワードを作る
4. クライアントが、その使い捨てパスワードをサーバへ送る
5. サーバが、受け取った使い捨てパスワードをさらにハッシュする
6. サーバが、前回保存していた値と比較する
7. 一致すれば認証し、次回に備えて保存値とシーケンス番号を更新する

ここで重要なのは、**Seedやシーケンス番号をクライアントが最初にサーバへ送るのではなく、認証要求を受けたサーバがクライアントへ送る**という点です。

また、S/KEYは時刻情報を使ってパスワードを同期させる方式ではありません。時刻同期が強調される選択肢は、TOTPなどの時刻同期型ワンタイムパスワードを疑います。

公式仕様としては、[RFC 1760 - The S/KEY One-Time Password System](https://www.rfc-editor.org/rfc/rfc1760.html)で整理されています。

## どんな場面で使う？

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と番号を使い、利用者側で今回用の値を計算して送る。
- イ. 認証側と利用者側が現在時刻から同じ数値を作り、時刻の一致を前提に認証する。
- ウ. 利用者が毎回、新しい元パスフレーズを登録してから認証を受ける。
- エ. 認証側は受け取った値を保存値と照合せず、そのまま次回の認証結果として使う。

<details markdown="1">
<summary>▶ クリックして答えと解説を見る（ここを開く）</summary>

**正解：ア**

### 解説

- ア：適切です。S/KEYでは、Seedやシーケンス番号を手掛かりに、ハッシュチェーン上の値を使って認証します。
- イ：不適切です。時刻同期型ワンタイムパスワードの説明です。
- ウ：不適切です。毎回使い捨てるのは認証で送る値であり、元のパスフレーズそのものではありません。
- エ：不適切です。認証側は受け取った値をハッシュして、保存値との関係を確認します。

👉 判断ポイント
S/KEYは、**Seed・シーケンス番号・ハッシュチェーン**で切り分けます。時刻同期が出たら別方式を疑います。

</details>

## まとめ（試験直前用）

- S/KEYは、ハッシュチェーン型のワンタイムパスワード方式。
- サーバがSeedとシーケンス番号をクライアントへ送る。
- クライアントはハッシュ計算で今回の使い捨てパスワードを作る。
- サーバは受け取った値をさらにハッシュし、前回保存値と比較する。
- 時刻同期型OTPや「パスフレーズ自体を毎回捨てる」という説明と混同しない。

## 公式情報・参考リンク

- [RFC 1760 - The S/KEY One-Time Password System](https://www.rfc-editor.org/rfc/rfc1760.html)
