yayayasososo
@yayayasososo

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

二段階認証について

解決したいこと

何かしらサービスを運営するシステムがあるとしてそのシステム内に「二段階認証を導入したい」です。様々な二段階認証がありますがどれが最適なのか教えてください。

自分で試したこと

たとえばサービス利用ユーザーが自身のメールアドレスでログインするのが通常ログインと仮定。そのシステムに2段階認証を導入したとして、ユーザーの通常ログイン後、システム側からユーザーの同じメールアドレス宛に認証パスワードを送付する流れで2段階認証のパスワードをユーザー側に入力を促した場合でも意味はあるのでしょうか?

一般的には、システム側から送信される2段階認証用のパスワードは「ユーザーが使っているメインのメールアドレス以外の異なるメールアドレス」や、ユーザーが別途プロフィール等に登録している携帯電話のSMSだったり「ログイン用として使っていない連絡先に送る方が安全」なような気もするのですが実際どちらが理想と言えますか??

もし「メールアドレスとパスワード」が何かしらのサービス経由で漏洩した状況を考慮すると、そのメールアドレスとパスワードで外部侵入者がシステムにログインを試みた時「システムから同じメールアドレスに2段階認証の専用パスワードが送られる仕様」だと結果的にメール受信BOXを見られてしまう可能性も含むと意味がなさそうです。

とはいえメールボックスがハックされている前提は稀なのでどこまでを想定範囲とすべきなのか分かりかねています。詳しい方がいらっしゃればアドバイスくださいませ。

0

4Answer

Comments

  1. @yayayasososo

    Questioner

    やはりそうなんですね!

    となればユーザーが通常ログインした後に、「ユーザーがログイン用として使っていない連絡先」に、「ユーザー自身では登録していないパスワード」でログインしてもらうのがよいのでしょうか?

    仮にユーザー自身が「マイページ内で2段階認証用のログインID(ユーザーがログイン用として使っていない連絡先)と2段階認証用のパスワードを登録する」としたら「通常ログインのログイン情報」が何かしらで外部に漏れた場合、外部の人間が「2段階認証用のログイン情報」にもアクセスできることになってしまうためほとんど意味がないようにも思えます。

    しかし、2段階認証用のパスワードだけは「システム側が乱数で自動発行して2段階認証用のメールアドレスに通知する」といった仕様であれば少しは安全なのなか?と考えています。とはいえ、上記で書いた「ログイン情報のメールアドレス」はユーザーが各々で設定する任意文字列になるので、お客様側でメールボックス自体のログイン情報が漏れてしまった最悪の想定をした場合にはメールの中身自体が見られるので何の意味もなしませんよね。

    このあたりはどこまで対策するのが良いのでしょうか?

  2. 横レス失礼します。

    仮にユーザー自身が「マイページ内で2段階認証用のログインID(ユーザーがログイン用として使っていない連絡先)と2段階認証用のパスワードを登録する」としたら「通常ログインのログイン情報」が何かしらで外部に漏れた場合、外部の人間が「2段階認証用のログイン情報」にもアクセスできることになってしまうためほとんど意味がないようにも思えます。

    「2段階認証用のパスワード」というのは何を言ってますか?

    2FA の第 2 要素がメールの場合、サーバー側ではランダムでかつ有効期限のあるトークン(数字 6 文字とか)を生成して登録したメールアドレスに送ってくるので、それを以下のような確認画面に入力するという形になるのが普通だと思います。(赤枠部分は検証用に追加したもので実際の画面にはありません。ユーザーにはメールまたは SMS で送信されてきます)

    image.jpg

    あるサイトのログイン用の ID にメールアドレスを使う場合でも、Password はメールアカウントのものとは別のものを使うと思うのですが、同じ Password を使っているユーザーがいるかもしれないので、その場合漏洩するとメールボックスまで覗かれることを心配しているのですか?

  3. @yayayasososo

    Questioner

    コメントありがとうございます!

    「2段階認証用のパスワード」というのは何を言ってますか?

    2段階認証用のパスワードは第2要素のパスワードのことを指しています。

    そのパスワードは一般的に「ランダムでかつ有効期限のある文字列」だと理解しているのですが、システムによっては「ユーザー側が自分自身で設定している文字列」といった状況もあるのかと思いそのように記述いたしました。

    あるサイトのログイン用の ID にメールアドレスを使う場合でも
    Password はメールアカウントのものとは別のものを使うと思うのですが
    同じ Password を使っているユーザーがいるかもしれないので、
    その場合漏洩するとメールボックスまで覗かれることを心配しているのですか?

    はい、そのご認識の通りです。説明不足で申し訳ございません。

    上記につきましてはシステム側で考慮できる範疇を超えた部分かとは存じますが、その可能性まで考慮するなら「2段階認証用のログイン情報には同じメールアドレスを設定することができない」または「2段階認証用のログイン情報にはメール以外(電話番号等)を設定する」といったルールを作らなければならないような気がした次第です。汲み取っていただきありがとうございます。

まず評価方法がおかしなことになっているので評価基準を整理することから始めてみると良いです。

一般論として、「二段階認証」を「多要素認証」の一例として考えるのであれば、「予め登録したメールアドレスにワンタイムパスワードを送信する方式」は「記憶情報(知識情報)」なので、それ以外のものと組み合わせなければ意味を持ちません。本件の質問には記載がありませんが、通常ログインの認証が「メールアドレス+パスワード」の組み合わせの検証なのであれば、意味を持たないことになります。

また、「自分で試したこと」の中にあるように個別の攻撃手法に対して「攻撃の発生可能性と受容可能性」の判定を積み重ねることをリスク分析と呼びます。リスク分析観点での評価は、攻撃手法に関しての情報を網羅的に入手しそれを判定しなければならないため、プロにそれなりの対価を払って相談するのが適切です。(ここで聞けるようなボリュームではありません)
参考)政府情報システムにおける
セキュリティリスク分析ガイドライン-デジタル庁

どのような背景で質問されているのか不明ですが、その背景に応じて質問先を再選定されることをおすすめします。

1Like

Comments

  1. @yayayasososo

    Questioner

    評価方法によって基準が変わるんですね。仮に「二段階認証」を「多要素認証」の一例として考えた場合で、システム側から「ワンタイムパスワード」が乱数で発行されるとしても「記憶情報」になるのでしょうか?

    通常ログインの「メールアドレス+パスワード」はユーザー自身のプロフィール内に存在しているとすれば記憶情報ですが、2段階認証用の「メールアドレス+パスワード」はパスワードのみシステム側から(ユーザーが通常ログインした直後に)送るという意味でお伝えしています。2段階認証用パスワードはシステム側が乱数で送るなら「どこにも記憶されていない情報」かと思っていましたが認識が間違っていれば教えていただけますと幸いです。

    なお、私は仮定で質問しており、評価方法には触れていませんがどの箇所が評価方法に該当しているのかも可能な範囲で補足をいただければ助かります。

  2. 評価方法によって基準が変わるんですね。仮に「二段階認証」を「多要素認証」の一例として考えた場合で、システム側から「ワンタイムパスワード」が乱数で発行されるとしても「記憶情報」になるのでしょうか?

    はい。知識情報という訳の方が分かりやすいかもしれません。英語だと「Something you know」で検証するのでこのカテゴリーに当てはまります。

    私は仮定で質問しており、評価方法には触れていませんがどの箇所が評価方法に該当しているのかも可能な範囲で補足をいただければ助かります。

    「二段階認証」という言葉が「多要素認証」としての側面を評価し、「自分でやったこと」が「攻撃の発生可能性と受容可能性」の検討をおこなっており、その延長線がリスク分析の評価にあたります。

    評価基準や方法に関しては「Digital Identity Guidelines」あたりが参考になるかと思います。
    体系的な記述になっているので、一度読んでみてください。
    また、日本語の解説記事もあるので探してみると良いです。

  3. @yayayasososo

    Questioner

    記事に目を通してみますね。

    システム側から「ワンタイムパスワードが乱数で発行される」としてもそれは記憶情報(知識情報)になるとのことですが、その流れではワンタイムパスワードはユーザーに知り得ない情報かと存じます。これらが記憶情報に該当するというのはどういった解釈か教えていただけますでしょうか?これらの内容が記事のどこかに記載されているならその箇所を示してもらえれば助かります。

  4. システム側から「ワンタイムパスワードが乱数で発行される」としてもそれは記憶情報(知識情報)になるとのことですが、その流れではワンタイムパスワードはユーザーに知り得ない情報かと存じます

    知らされているので「知っている情報」です。

    断片的な情報をつまみ食いしても時間の無駄ですよ。体系的な学びが無ければ話が通じないので関わった皆が不幸になります。

  5. @yayayasososo

    Questioner

    頭ごなしに否定から入るのはお人柄でしょうか?

    あなたの、謎に上からコメントに返信しているだけでも感謝してくださいよ。

    毎度、明後日の方向に話が進んでいるじゃないですか。癖なのかな?
    的確な回答ができないから勝手に論点をずらしているように見えます。

    エンジニア界隈ではよく見かけるあるあるですね。

    少なくともあなた以外のコメントは2段階認証を知らない人にはとても有益。

    知識情報の解説ではなく小さな知識マウント、ご苦労様。

    イイネは自分で押すものじゃないですよΣd(ゝ∀・).

何かしらサービスを運営するシステムがあるとしてそのシステム内に「二段階認証を導入したい」です。世の中には様々な二段階認証があります。どれが最適なのか教えて下さい。

ID とPassword でログインに成功した後での 2 段階目の認証に何がいいのかという話と理解します。

質問者さんが使っている開発環境のフレームワークに何が備わっているかによって話が変わってくるかと思います。

例えば、Microsoft の ASP.NET Core の場合、以下の記事で、

ASP.NET Core での多要素認証
https://learn.microsoft.com/ja-jp/aspnet/core/security/authentication/mfa?view=aspnetcore-8.0

第 2 要素として以下の項目が紹介されています。

(1) TOTP (Time-based One Time Password)

(2) パスキー / FIDO2

(3) SMS / Email

セキュリティ的には (2) が良いそうですが、Visual Studio のテンプレートで作るプロジェクトには実装されていません。

(3) については "存在する既知の攻撃ベクトルが多すぎます" ということで非推奨となり、新しいテンプレートには実装されていません。

(1) は Visual Studio のテンプレートで作るプロジェクトには実装済で、何も手を加えることなく 2FA を実現できます。詳しい話に興味があれば以下の記事を見てください。

ASP.NET Core アプリに 2 要素認証を実装
http://surferonwww.info/BlogEngine/post/2021/11/06/aspnet-core-application-with-two-factor-authentication.aspx

という訳で、ASP.NET Core の場合は (1) TOTP が一番目の選択肢になります。

TOTP というのがどういう仕組みかですが、ITmedia NEWS の以下の記事が分かりやすいと思いますので見てください。

SMS認証の仕組みと危険性、「TOTP」とは? 「所有物認証」のハナシ
https://www.itmedia.co.jp/news/articles/1904/08/news026_3.html

システム側からユーザーの同じメールアドレス宛に認証パスワードを送付するという流れで2段階認証のパスワードをユーザー側に入力を促した場合でも意味はあるのでしょうか?

第 2 要素がメールでも SMS でも、ID とPassword だけよりはるかにセキュリティは高いはずで、もちろん意味はあると思いますが? ただ、上に書いたように、ASP.NET Core では非推奨になっています。他に TOTP などよりセキュリティの高い選択肢があるならそちらを選ぶという話になると思います。

1Like

Comments

  1. @yayayasososo

    Questioner

    具体的な実例をありがとうございます!開発環境によっても変わってくるんですね。(こちらは参考までとなりますがLAMP環境での開発を想定しております)

    第 2 要素がメールでも SMS でも
    ID とPassword だけよりはるかにセキュリティは高いはず

    どうあれ「第2要素があるだけ」でセキュリティ面は強化されると聞き安心いたしました。ちなみに第2要素のパスワードは種類によってセキュリティは強くなるのでしょうか?

    1. ユーザー自身が設定した通常ログイン用とは異なるパスワード
    2. システム側が(ユーザーの通常ログイン時に)都度乱数発行するパスワード

    ユーザー側が「通常ログイン用と2段階認証用の連絡先を自分自身で設定」している場合では上記のパスワードが「1」や「2」であったとしてもそれほど差はないものですか??

    前提条件を少し変えるだけで範囲も大きく変わってくる点が悩ましいです。

  2. ちなみに第2要素のパスワードは種類によってセキュリティは強くなるのでしょうか?

    @jinbei230525 さんの回答の下のコメント欄にも書きましたが・・・

    「第2要素のパスワード」というのは何を言ってますか?

    2FA の第 2 要素がメールの場合、サーバー側ではランダムでかつ有効期限のあるトークン(数字 6 文字とか)を生成して登録したメールアドレスに送ってくるので、それを以下のような確認画面に入力するという形になるのが普通だと思います。(赤枠部分は検証用に追加したもので実際の画面にはありません。ユーザーにはメールまたは SMS で送信されてきます)

    image.jpg

    あるサイトのログイン用の ID にメールアドレスを使う場合でも、Password はメールアカウントのものとは別のものを使うと思うのですが、同じ Password を使っているユーザーがいるかもしれないので、その場合漏洩するとメールボックスまで覗かれることを心配しているのですか?

  3. @yayayasososo

    Questioner

    再度コメントありがとうございます!以下同じものになりますが記載させていただきますね。

    「2段階認証用のパスワード」というのは何を言ってますか?

    2段階認証用のパスワードは第2要素のパスワードのことを指しています。

    そのパスワードは一般的に「ランダムでかつ有効期限のある文字列」だと理解しているのですが、システムによっては「ユーザー側が自分自身で設定している文字列」といった状況もあるのかと思いそのように記述いたしました。

    あるサイトのログイン用の ID にメールアドレスを使う場合でも
    Password はメールアカウントのものとは別のものを使うと思うのですが
    同じ Password を使っているユーザーがいるかもしれないので、
    その場合漏洩するとメールボックスまで覗かれることを心配しているのですか?

    はい、そのご認識の通りです。説明不足で申し訳ございません。

    上記につきましてはシステム側で考慮できる範疇を超えた部分かとは存じますが、その可能性まで考慮するなら「2段階認証用のログイン情報には同じメールアドレスを設定することができない」または「2段階認証用のログイン情報にはメール以外(電話番号等)を設定する」といったルールを作らなければならないような気がした次第です。汲み取っていただきありがとうございます。

  4. 「2段階認証用のログイン情報には同じメールアドレスを設定することができない」

    メールアドレスを 2 つも登録してくれるユーザーがいるとは思えないし、実装も大変です。少なくとも現実的とは思えないですが・・・

    または「2段階認証用のログイン情報にはメール以外(電話番号等)を設定する」

    SMS はセキュリティの問題で非推奨です。

    私の回答で述べた TOTP (Time-based One Time Password) を使う方が現実的だと思います。

  5. @yayayasososo

    Questioner

    メールアドレスを 2 つも登録してくれるユーザーがいるとは思えない

    おっしゃる通りでユーザー側が2段階認証を使うハードルが上がってしまいますよね。そこを加味すると2段階認証用のメールアドレスは通常ログイン用をそのまま使ってかつシステム側からワンタイムパスワードを発行するのが無難かもしれません。SMSがセキュリティ問題で非推奨とのことであれば、通常ログイン用で登録されているメールアドレスを「2段階認証時にワンタイムパスワードを通知するメールアドレスとして流用する方がまだ良い」ということですよね。

    ちなみに「TOTP (Time-based One Time Password) 」というのはシステム側から「ランダムでかつ有効期限のある文字列を発行」すればOKなのでしょうか?

    その際に上記に書いた「2段階認証用のメールアドレスは通常ログイン用のメールアドレスをそのまま使う」としても2段階認証時に「メールアドレス」を使っていることに変わりはないかと思うのですが、その点はいかがでしょうか?

    (3) SMS / Email

    TOTPはメールも電話番号も使わずにワンタイムパスを発行する技術ですか?

  6. TOTP については先の回答で参考になる記事を紹介しました。聞く前にそれを読んでほしいのですが。

    要点のみ書いておくと、Authenticator はスタンドアロンで動いています。Web アプリ他どことも通信していませんが共有した秘密キーとスマートフォンの内部時刻でパスワードは計算できます。

  7. @yayayasososo

    Questioner

    Authenticator はスタンドアロンで動いています

    スタンドアロンで動く仕組みであればメールアドレスは不要ですね。

    ざっくりと言えば大手オンラインバンクのシステムに導入されているワンタイムパスワードが「TOTP」ということかと存じます。私がさきほど申した「メールアドレス宛にシステム側で生成したワンタイムパスワードを送る方法」と、@SurferOnWwwさんがおすすめしている「TOTPで生成されたワンタイムパスワード」の根本的な違いは、後者はメールを送らずとも、その場で認証(2段階目の認証として)を完結できるという点が優れているということですよね?

    指定のメールアドレスにメールを送る、指定の電話番号にSMSを送る、という行為自体が通信の時点で盗聴される可能性がある(リスクが高い)のはおおむね理解できました。お忙しいなか的確なアドバイスに感謝申し上げます。

要求が不明ですがリスクは低いシステムだと思われるので
多要素認証(MFA)モジュールの導入を提案したらどうですか?

ただ、今まで2段階ですらなかったことを加味すればシステム自体のセキュリティ対策レベルは低いと判断します。入り口だけ固めて問題ないと判断することだけは無いようにご注意ください。

1Like

Comments

  1. @yayayasososo

    Questioner

    多要素認証(MFA)モジュールの導入

    こちら私の方でも調べてみますね!

    2段階認証の仕様を考えた場合に「どこまでの範囲をカバーするのか」という点が重要になりますよね。仮に第2要素が「電話番号+ワンタイムパスワード」だとしても「メール+ワンタイムパスワード」だとしても(システム側の脆弱性が存在していた等で)第2要素の電話番号やメールアドレス自体を書き換えられてしまうとそもそも2段階認証の意味をなさないかと存じます。

    そういった意味ではさきほど@SurferOnWwwさんがおっしゃっていた下記の「1」または「2」ならその問題点をクリアできるのかもしれません。

    多要素認証(MFA)というのはそういった部分も解決できますでしょうか?

    (1) TOTP (Time-based One Time Password)
    (2) パスキー / FIDO2
    (3) SMS / Email

    わかる範囲で教えていただけますと幸いです。

  2. おそらく何か誤解していると思いますので複数の認証を組み合わせましょうというのが多要素認証です。2種類や2段に限定しません。
    比較的簡単にやるならGoogle、Amazon、MisrosoftのM365などのID連携をすることで
    その先の先進企業が推奨する多要素認証に任せるということです。

    お金がなくてでもやりたいなら以下やつで狙うイメージにはなるかと思います。
    https://majisemi.com/topics/tool/2660/

    ただMFAを採用したとしてもセッションハイジャック(フィッシング詐欺みたいなもの)は解決できません。

  3. @yayayasososo

    Questioner

    2段階認証について質問しているのでその前提で解釈していました。

    多要素認証とおっしゃられているのはGoogle Authenticator等のことですか?

  4. 多要素認証とおっしゃられているのはGoogle Authenticator等のことですか?

    違いますよ

  5. @yayayasososo

    Questioner

    @SurferOnWwwさん、補足ありがとうございます。

    2段階認証ではなく論点がズレそうなので参考程度にさせていただきますね。

  6. @yayayasososo

    Questioner

    記事のご紹介、ありがとうございます!

    おかげさまで見えづらかった色々な部分がクリアになり解決できそうです。

    長々とお時間を頂戴し、すみませんでした。

    あらためて心より感謝申し上げます。

Your answer might help someone💌