はじめに
HTBでUnder Constructionをやっていたところ,JWTなる言葉がでてきましたので,JWTの勉強をしていきます.
簡単に言うと,JSON Web Tokenの略であり,電子署名により、改ざん検知できる.また,認証用のトークンなどで用いられる.
と書かれていました.そこで,認証用のトークンを少し深堀していきます.
認証トークンの歴史
認証トークンが登場する前は,パスワードとサーバーを使用していました.
パスワードの場合,一般的には以下の特徴があります.
- ユーザーが任意に生成:文字/数字/記号の組み合わせによって生成されます.
- 記憶:生成したパスワードとパスワードを使用するサービスを記憶する必要がある.
- 反復:アクセスする際に,毎回パスワードを入力する必要がある.
ここで,ユーザーは生成したパスワードとパスワードを使用するサービスを記憶する際に下記のような対応をする場合が多いと思われる.
- メモする:パスワードをメモする
- 繰り返し使用:複数のサービスで同じパスワードを繰り返し使用する
- 少しだけ変える:文字や数字を1つだけ変更する人
しかし,これらの対応はパスワード流出のような多大なリスクを負うことになるのは明白であり,問題視されてきた.
ここで認証用トークンの出番である.
認証用トークン
トークンベースの認証システムを使用すると,資格情報を一度検証するだけでアクセスできます.
このとき,特定の期間だけアクセスを許可するトークンがユーザーに付与されます.
以下のような流れで実行されます.
要求:サーバーにパスワードを使用したログインやデバイスなどからログインします.
検証:サーバーが要求が正しいものかを判断します(パスワードやデバイスの照合).
トークンの生成:サーバーがトークンを発行してユーザーに渡します.
ストレージ:トークンの有効期限の間保存され,対象のサーバーを通信する際に使用されます.
認証用トークンの種類
ハードウェアトークン
非接続型トークン
IT機器やPCと接続する必要がなく,それ単体で使うことができるトークンが非接続型トークンの特徴です.
キーチェーンにつないで持ち運べるキーホルダータイプなどがあり,ネットバンキングやオンラインゲームなどのクラウドサービスに広く使われています.
単体で使えるため使い勝手が良いですが,バッテリーが切れたら使えなくなるといったデメリットもあります.
スマートカード型トークン
薄いカードのような形をしたトークンで,クレジットカードのように財布などに入れて持ち運べます.単体で機能する非接続型のほかに,Bluetoothで通信する機能を持ったタイプもあります.
Bluetooth型トークン
Bluetoothで通信する機能を持ったトークンです.トークン内に保持しているライセンス情報や,ワンタイムパスワードをBluetooth通信でIT機器に送信できるため,ユーザーがパスワード入力などをしなくても自動で認証できるのが特徴です.カードハッキング対策のためにBluetooth機能を無効にできるものもあります.
PCカード型トークン
ノートPCのカードスロットに挿入して使うトークンです.PCに挿入しておくだけで有料アプリなどのライセンス認証が自動でできるのが特徴です.
USB型トークン
PCやIT機器のUSBインターフェースに接続して使うトークンです.利用方法はPCカード型トークンと一緒ですが,USBで接続するかカードスロットに挿入するかといった接続方法の違いがあります.
ソフトウェアトークン
ソフトウェアトークンは専用機器が不要です.iOSやAndroidのアプリケーションとしてインストールし,ワンタイムパスワードを生成します.スマートフォンがあればどこでもワンタイムパスワードの生成が可能です.
こちらのソフトウェアトークンにJWTは該当します.
おわりに
今回はJWTが認証トークンに分類され,認証トークンについて深堀してきました.
次回からは,JWTの構造を理解し,実際の問題を使って解読していきたいと思います.