スマートフォン用の表示で見る論理と、幻想と。FFXIVやPCが好きなITスペシャリストが作ったものや考えたことについてダラダラ書きます2018-09-18知っておいて損はないワンタイムパスワードの仕組み技術ワンタイムパスワードについてのそこそこ詳しい話です。今回はスクエニアカウントにおけるワンタイムパスワードのことを書きますが、他のワンタイムパスワードを利用しているサービスでも同じような仕組みになっています。コンピュータリソースに対するアクセス用に発行される、一度限り有効なパスワードのことである。以下、ワンタイムパスワードのことをOTPと呼びます。2段階認証とは通常のユーザID/パスワードのマッチングによる認証のほか、ユーザしか持ちえない固有のレイヤーの情報を用いて2つ目の認証を行うことを2段階認証と呼びます。OTPの場合はトークンが「ユーザしか持ちえないレイヤーの情報」にあたります。FF14におけるOTPすでに理解した上で使用している方が大多数だと思いますが、おさらいします。通常のパスワード認証というのは、ユーザIDとかユーザ名パスワードこの2つの要素によってユーザ本人かどうかの認証を行います。セキュリティリスクが多様化した現代において、この2つの情報、とりわけ文字データでしかない2要素での認証というのは非常に危険です。誕生日や趣味趣向などからパスワードを割り出すソーシャルハック同じIDやパスワードを使いまわしている別サービスからの流出などなど、IDとパスワードが流出することは多いに有りえます。実際に、FF14でもサービス開始から間もないころ、たくさんのユーザが乗っ取り被害に遭いました。私のフレンドもRMT業者に乗っ取られてシャウト宣伝BOTになっていたこともありました。OTPは、このような乗っ取り対策として打ち出された、とても強固なセキュリティ担保ツールというわけです。詳しい仕組みは後述しますが、これを導入することにより乗っ取り被害の大部分は防げることから、FF14でも運営チームがとても強く導入を推奨しています。面倒くさがるユーザに対してもメリットを与えられるように、OTPを利用するだけでお気に入りテレポ(無料)が一箇所増える、という力の入れようです。本来、ユーザが自分自身を守るためのツールのために、運営がシステム側で利点を作る、というわけですから。OTPを導入するとどうなるのかゲームにログインするときLodestoneにログインするときモグステーションにログインするときコンパニオンアプリにログインするとき通常のユーザID/パスワードの他に、6桁のパスワードの入力を求められるようになります。OTPは発行するたびに変動し、このOTPを発行するツールをトークンと呼んでいます。スマホアプリとしてインストールするソフトウェアトークン、専用のハードウェアによるハードウェアトークン、どちらも仕組みは同じです。以後、どちらもOTPトークンと呼びます。OTPはなぜ安全なのか初めてOTPトークンとアカウントを紐付ける際に、特殊なパスワード(数値)の入力を求められたことがあると思います。サーバ側で秘密の鍵を発行して文字列を表示し、それをOTPトークンに登録する重要な操作です。この操作により、サービスとOTPトークンの間で、ユニークな固有認証情報(秘密鍵)が共有されます。サービス側では、この情報をアカウントと紐づけます。つまるところ、サービス側で「このOTPトークンは、このアカウントの正しい持ち主であることの証である」という情報が登録されるわけです。OTPトークンが出力するOTPは、6文字という短い数字でありながら、常に自分のOTPトークンの固有情報を含んでいます。そのため、正しいOTPを入力できる=アカウントの持ち主本人によるアクセスである、ということの証明ができるのです。OTPの仕組みOTPの発行OTPは発行するたびに異なる値を出力します。Password)としてRFC6238にも規定されています。エンジニアでない方にとっては初耳かもしれませんが、時間というのは数値化が可能なものです。この値はUNIX時間などと呼ばれ、世界協定時(UTC)における1970年1月1日午前0時0分0秒からの経過秒数を示す数字がそれです。時刻カウンターとでも呼んでおきましょうか。1536291300となります。人類がパッと見ても意味がわかりませんが相手はコンピュータなので気にしない。この時刻カウンターと、前述の秘密鍵情報を用いてゴニョゴニョ計算した結果が、6桁の数字、OTPとして出てきます。OTPの検証このOTPを受け取った認証サーバは、入力された値が正しいものかどうかを判別しなきゃいけないわけですが、これはとてもシンプルな仕組みです。計算に使用している秘密鍵情報は、あらかじめOTPトークンと認証サーバとの間で共有しているわけですから、受け取ったOTPの値に対して検算を行うことができます。OTPトークン固有情報となるはずです。割り出したOTPトークン固有情報が、入力されたユーザアカウントのものであるかどうか特定し、一致していればログインしていいよ!ということになります。余談ですが、OTPトークンがOTPを発行した時刻と、サーバ側でOTPを受け取って検算を始める時刻とでは当然ズレがあります。サーバ側では1分以内ぐらいの誤差だったら同じOTPトークンからのOTPであると割り出せるような計算ロジックが組んであります。人間がOTPを入力するタイムラグや、通信のタイムラグを考慮した実装にしましょうね、っていうのは前述のRFC6238でも推奨されています。真のOTP皆さんお気づきかどうか分かりませんが。同時刻にゲームとLodestoneに同時にログインしようとしたとしましょう。どちらのログインにも、同じ時間に発行された同じOTPを入力します。すると、後からログインしようとした方はログインに失敗します。これは、最後に認証に成功したときの時刻カウンターの値を認証サーバ側で保持していて、より新しい時刻カウンターを用いて発行されたOTPでないとログインできない、ということです。これは真のワンタイムパスワードの要件を満たします。真じゃないワンタイムパスワードって何なのかというと。邪悪な例ですが、例えば正規のユーザがOTPを発行して入力してログインするまでの間に何らかの形でOTPが盗み見られたりして、悪意ある攻撃者がパパパっと操作を行った場合、悪意ある攻撃者のログインが成立していまいます。正規のユーザがログインできない、ということになればすぐに気付けるのですが、そうでない場合はどちらもすんなりログインできてしまいます。同じパスワードで複数回のログインが成立してしまうのは、"ワンタイム"なパスワードではないよね、という話です。いえ例の通りで、スクエニのOTPも盗み見られたりして(いわゆるショルダーハック)、盗み見た人の方が先にログインをしようとしたら出来てしまうので、そのへんは注意が必要ですね。みなさんもワンタイムパスワードを利用して安心安全なエオルゼアライフを。»プロフィール根無し草なIT系エンジニアです。ゲームしたり本読んだりしています。月別アーカイブ記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。Reserved.はてなブログをはじめよう!hackermindさんは、はてなブログを使っています。あなたもはてなブログをはじめてみませんか?はてなブログをはじめる(無料)はてなブログとは論理と、幻想と。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。