#author("2020-09-01T13:07:34+09:00","default:editor","editor") #author("2020-09-01T13:11:26+09:00","default:editor","editor") * 教員向け/二段階認証の利用法 [#l8795db2] ** 二段階認証とは [#r1997615] 二段階認証 (two-factor authentication) とは、 システムの利用者の本人確認 (authentication) を行う際に、 異なる二つの情報や方式を使って確認する手法です。 ちなみに、コンピュータのセキュリティでは、 AAA (Authentication, Authorization, and Accounting) が重要な要素となります。 Authentication は「認証」、 つまり、利用者が本当に本人であるかどうかを確認すること、 Authorization は「認可」、 つまり、利用者がシステムを利用する権限があるかどうかを判定すること、 Accounting は「アカウンティング」、 つまり、利用者のシステム利用状況を記録・管理すること、 を意味します。 二段階認証は、「二段階による「認証 (authentication) 」」ですので、 AAA のうち、あくまで最初の A (Authentication = 本人確認) の話です。 システムを利用しようとしている人が、 本当に本人かどうかを確認する (そのためだけの) 手法です。 - [[外部リンク: Multi-factor authentication>https://en.wikipedia.org/wiki/Multi-factor_authentication]] - [[外部リンク: AAA (computer security)>https://en.wikipedia.org/wiki/AAA_(computer_security)]] ** 関西学院情報システム Web サービスの二段階認証 [#t620aada] 二段階認証に、どのような異なる情報や方式を使うかについてはさまざまな組み合わせがあります。 関西学院情報システム Web サービスでは、 関西学院システム利用者 ID の「パスワード」と、 使い捨ての「ワンタイムパスワード (one-time password)」を使用します (それ以外の組み合わせは 使用できません)。 関西学院システム利用者 ID の「パスワード」とは、 関西学院システム利用者 ID に紐付いた秘密鍵です。 関西学院システム利用者 ID の発行時に通知されるものです。 「ワンタイムパスワード」とはその場その場でしか使えない、 使い捨てのパスワードです。 One-Time Password の頭文字を取って、 OTP とも呼ばれます。 関西学院情報システム Web サービスは、 インターネットの標準規格の一つである RFC 6238 で定められている、 TOTP (Time-based One-time Password algorithm) 方式を採用しています。 TOTP では、現在時刻とシークレット (secret) と呼ばれる秘密鍵をもとに、 ワンタイムパスワードを生成するアルゴリズムを規定しています。 関西学院情報システム Web サービスでは、 シークレットの長さは 192 ビット、 ダイジェストアルゴリズムは SHA-1、 ワンタイムパスワード長は 6 文字、 ワンタイムパスワードの更新間隔は 30 秒を採用しているようです。 TOTP (RFC 6238) や、 その元となった HOTP (HMAC-based One-time Password algorithm) (RFC 4226) を 読めばわかりますが、 「シークレット (秘密鍵) 」 K と、 「エポックから現在時刻までのワンタイムパスワードの更新回数」である C_T から ワンタイムパスワードを計算しています。 K と C_T からワンタイムパスワードを計算するアルゴリズムに HOTP を 使用しています。 HOTP 自体は、SHA-1 でダイジェストを計算して、 ある決められたルールでダイジェスト値中のある部分ビット列から ワンタイムパスワードを計算しています。 - [[外部リンク: Time-based One-time Password algorithml>https://en.wikipedia.org/wiki/Time-based_One-time_Password_algorithm]] - [[外部リンク: HMAC-based One-time Password algorithm>https://en.wikipedia.org/wiki/HMAC-based_One-time_Password_algorithm]] ** ワンタイムパスワードの安全性 [#he100d31] 上記の説明からわかるのは、 シークレット (と現在時刻) がわかれば誰でも簡単にワンタイムパスワードが計算できる ということです。 関西学院情報システム Web サービスにおける二段階認証の設定時に QR コードが表示 されますが、 QR コードには「シークレット」が生のまま書かれています ので、これを絶対に第三者に見せてはいけません。QR コードなので人間にはランダム な文字列に見えますが、簡単にデコードできてしまいます。デコードすると、 otpauth://totp/***********?secret=Base64でエンコードしたシークレット&issuer=Kwansei%20Gakuin%202020%2F09%2F01%2010%3A56&algorithm=SHA1&digits=6&period=30 のように Base64 エンコードされたシークレットがそのまま書かれています。 以下で説明する Google Authenticator のような OTP クライアントでも同じような 脆弱性があり、Google Authenticator に登録したシークレットを簡単に取り 出せるようです。 従って、 // 以下で説明する Google Authenticator のような OTP クライアントでも同じような // 脆弱性があり、Google Authenticator に登録したシークレットを簡単に取り // 出せるようです。 // 従って、 Google Authenticator が動作しているスマートフォンを一瞬でも誰かに触らせては いけない // Google Authenticator が動作しているスマートフォンを一瞬でも誰かに触らせては // いけない ということを意味します。 // ということを意味します。 ある程度の知識があれば、 誰かの TOTP のシークレットを盗むのはそれほど難しくはありませんので、 (1) OTP クライアント (例: Google Authenticator) をインストールした スマートフォンは慎重に管理する、 (2) 二段階認証やワンタイムパスワードの危険性を理解して使う (二段階認証をしているから安心だと盲信しない) ことが重要です。 ** OTP クライアント [#b767cf83] 上述のように、関西学院情報システム Web サービスでは TOTP を採用していますので、 TOTP に従ったワンタイムパスワードを生成できる OTP クライアントであれば何でも 利用できます。 以下では、いくつかのメジャーな OTP クライアントを紹介します。 *** FreeOTP [#c0621a48] Android および iOS 上で動作する、 オープンソースの OTP クライアントです。 HOTP と TOTP の両方をサポートしています。 Red Hat が公式にサポートしているプロジェクトのようです。 単純な OTP クライアントですので、普通に使えます (特に凝ったことはできません)。 - [[FreeOTP>https://freeotp.github.io/]] *** Google Authenticator [#nd147d4e] Android、iOS、BlackBerry OS 上で動作する、 プロプリエタリな (ソースコードが公開されていない) OTP クライアントです。 HOTP と TOTP の両方をサポートしています。 単純な OTP クライアントですので、普通に使えます (特に凝ったことはできません)。 - [[Google Authenticator>https://www.google-authenticator.com/]] ちなみに、Google Authenticator の Wikipedia エントリには、 Google Authenticator 以外の HOTP/TOTP クライアントも紹介されていますので 参考になると思います。 - [[Google Authenticator>https://en.wikipedia.org/wiki/Google_Authenticator]] *** WinAuth [#cc93acde] Windows 上で動作する、 オープンソースの OTP クライアントです。 HOTP と TOTP の両方をサポートしています。 単純な OTP クライアントですので、普通に使えます (特に凝ったことはできません)。 - https://github.com/winauth/winauth *** Twilio Authy [#fe6d484a] Android、iOS、Windows、 macOS、Linux 上で動作する、 プロプリエタリ (?) な (ソースコードが公開されていない) OTP クライアントです。 HOTP と TOTP の両方をサポートしています (?)。 Twilio Authy は、複数のデバイスで (シークレットを含む) OTP の設定を 同期できることを売りにしています。 - [[Twilio Authy>https://authy.com/]] - [[How to install Twilio Authy on Debian>https://snapcraft.io/install/authy/debian]] ただし、関西学院情報システム Web サービスで利用できる OTP クライアントは、 「一つの関西学院システム利用者 ID につき一デバイスまで (例えば、 一台のスマートフォンにインストールした Google Authenticator のみ) 」といった 制約は''ありません''ので、上述したような TOTP の原理を理解すれば Windows 端末では WinAuth を、Android のスマートフォンでは FreeOTP を使を、 iPhone では Google Authenticator を併用する といった使い方が (TOTP の仕様上、最初から) できるようになっています。 関西学院情報システム Web サービスの自身の ID に対応する TOTP のシークレットが 何か? 、また、そのシークレットを、 それぞれの OTP クライアントにどのように設定すればよいか? がわかっていれば設定できます。 *** oathtool [#b0630204] Unix 系 OS 上で動作する、 オープンソースの OATH Toolkit に含まれる oathtool というコマンドが OTP クライアントとして利用できます。 HOTP と TOTP の両方をサポートしています。 Debian GNU/Linux では、標準のパッケージに含まれています (パッケージ名は oathtool)。 - [[OATH Toolkit>https://www.nongnu.org/oath-toolkit/]] - [[OATH Toolkit - Summary>https://savannah.nongnu.org/projects/oath-toolkit/]] - [[Use oathtool Linux command line for 2 step verification (2FA)>https://www.cyberciti.biz/faq/use-oathtool-linux-command-line-for-2-step-verification-2fa/]] ** コメント [#p184b0b2] #comment アクセス数: 現在: &online;, 今日: &counter(today);, 合計: &counter(total);