Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

S/KEY(エスキー)とは | 意味や読み方など丁寧でわかりやすい用語解説

S/KEY(エスキー)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

エスキー (エスケイ)

英語表記

S/KEY (エスキー)

用語解説

S/KEY(エスキー)は、主にネットワーク経由での認証において、パスワードの盗聴や使い回しによる不正アクセスを防ぐことを目的とした、ワンタイムパスワード認証方式の一つである。インターネットの黎明期に、セキュリティ意識の向上とともに登場し、パスワードの安全な利用を可能にする画期的な技術として注目された。

S/KEYの基本的な考え方は、ユーザーがシステムにログインするたびに、一度だけ有効な異なるパスワードを使用するという点にある。これにより、たとえ通信経路上でパスワードが盗聴されたとしても、そのパスワードは次回の認証には使用できないため、攻撃者が不正にログインすることを防げる。これは、従来の固定パスワード認証が持つ「パスワードの盗聴=不正ログインの可能性」という問題を根本的に解決しようとする試みだった。

具体的な動作原理について解説する。S/KEY認証は、ハッシュ関数という一方向性の暗号技術を利用する。ハッシュ関数とは、任意の長さのデータを受け取り、固定長の全く異なるデータ(ハッシュ値またはメッセージダイジェストと呼ばれる)を生成する関数のことである。このハッシュ関数には、元のデータからハッシュ値を計算するのは容易だが、ハッシュ値から元のデータを復元することは非常に困難であるという特徴がある。S/KEYでは、このハッシュ関数を複数回繰り返し適用することで、一連のパスワードを生成する「ハッシュチェーン」という仕組みを用いる。

認証プロセスを開始するにあたり、まずユーザーは、自分だけが知る秘密鍵(シード)と、認証に利用するハッシュ関数の反復回数(シーケンス番号)を決定する。例えば、反復回数を100回と設定した場合、ユーザーは秘密鍵にハッシュ関数を100回適用して生成される最終的なハッシュ値を計算する。これをP_100とする。このP_100を、最初の認証時にサーバーに登録する。サーバーはこのP_100を記憶し、ユーザーの秘密鍵やハッシュチェーンの生成過程は知る必要がない。

次回の認証、例えば1回目のログイン時を考える。ユーザーは設定した反復回数から1を減らした回数、つまり99回、秘密鍵にハッシュ関数を適用してパスワードを生成する。これをP_99とする。ユーザーはこのP_99をサーバーに送信する。サーバーは、受信したP_99にハッシュ関数を1回適用する。ハッシュ関数の特性から、H(P_99)はP_100と等しくなる。サーバーは、この計算結果と自身が記憶しているP_100を比較し、両者が一致すれば認証を成功させる。認証が成功した後、サーバーは、ユーザーから受け取ったP_99を新たな「次回期待するパスワードのハッシュ値」として記憶する。

2回目のログイン時には、ユーザーはさらに反復回数を1減らし、98回秘密鍵にハッシュ関数を適用してP_98を生成し、サーバーに送信する。サーバーは受信したP_98にハッシュ関数を1回適用し、H(P_98)が前回認証後に記憶したP_99と一致するかを確認する。このプロセスが、反復回数が0になるまで繰り返される。このようにして、毎回異なるパスワードが使用され、一度使われたパスワードは再利用できなくなるため、盗聴されたパスワードが不正ログインに悪用されるリスクを排除できる。

S/KEYのセキュリティ上の利点は、ワンタイムパスワードであることに加えて、サーバー側でユーザーの秘密鍵そのものを保持する必要がない点にある。サーバーが記憶するのは、常に「次にユーザーが送信するパスワードにハッシュ関数を1回適用した値」であり、ハッシュチェーンの進行状況を示すハッシュ値だけである。これにより、仮にサーバーのデータベースが攻撃を受けて情報が漏洩したとしても、ユーザーの秘密鍵が直接的に危険にさらされることはない。漏洩するのは過去に使用されたハッシュ値であり、ハッシュ関数の一方向性により、それから秘密鍵や未来のパスワードを逆算することは極めて困難である。

しかし、S/KEYには運用上のいくつかの課題も存在した。最大の課題は、反復回数に上限があることである。ユーザーは設定した回数分しか認証を行えず、すべてのパスワードを使い切ってしまうと、再度秘密鍵を設定し直して新しいハッシュチェーンを生成する必要があった。これは、ユーザーにとって利便性が低い側面を持っていた。また、S/KEYで生成されるパスワードは、ハッシュ値であるため、非常に長く複雑な文字列になる。これをユーザーが手作業で記憶したり入力したりすることは現実的ではなく、通常は専用のクライアントソフトウェアやコマンドラインツールを用いてパスワードを生成する必要があった。この点も、広く一般の利用者に普及させる上での障壁となった。

現在では、S/KEYのようなワンタイムパスワード認証の概念は、より発展した形で利用されている。例えば、TOTP(Time-based One-Time Password)やHOTP(HMAC-based One-Time Password)といった方式は、スマートフォンの認証アプリなどで広く普及しており、より使いやすく、様々なシステムに統合しやすいという利点を持つ。S/KEYは、これらの現代的なワンタイムパスワード技術の先駆けとして、インターネットセキュリティの歴史において重要な役割を果たした技術と言える。その基本的なセキュリティ原則は、現代の認証技術にも受け継がれている。

関連コンテンツ