Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

アカウントのセキュリティ更新

あなたはあなたの高価なインターネットの請求書を捨ててあなたの隣人の安全でないwifiを使いたいと思いましたか? Honeybadgerの単一要素認証フローを妨げているのはそれだけでしたか?さて、私はあなたにニュースをもらいました。

発表:2要素認証(2FA)

冗談はさておき、私たちはセキュリティを非常に真剣に受け止めています。ユーザーとそのデータの安全性を維持するための重要なツールを提供できることを嬉しく思います。

2FAを有効にする方法を説明できると思いますが、その面白さは何ですか?暗号化の野生の世界を気楽に垣間見て、2FAがどのように機能するかを理解してみませんか。

楽しみがあなたのものでない場合は、完全に有効にする方法に直接進むことができます。私の気持ちは傷つけられません。

⚠️警告:以下の理論

多くの2FA実装は、時間ベースのワンタイムパスワードと呼ばれるアルゴリズムに基づいて構築されています ( TOTP )。舌からすぐに転がります。

ワンタイム?

はい、この方法の利点は、ログインするたびに同じ「パスワード」を送信しないことです。オーセンティケーターアプリケーションを使用すると、ワンタイム「パスワード」が生成され、短時間(通常は30秒)有効です。 、これは中間者攻撃の効果を大幅に弱めます。

いくつかの複雑な部分がありますが、全体的な実装は比較的単純です。

秘密

キー TOTPについて理解するためのポイント サーバー(verifier) およびオーセンティケーター(証明者) 共有秘密が必要です。これは本物です 「パスワード」ですが、送信されるのは1回だけです(これも1回だけだと思います)!

シークレットを消費するための推奨される方法は、QRコードを使用することです。 QRコードをスマートフォンにスキャンすると、シークレットは次のような標準URI内にエンコードされます。

otpauth://totp/Honeybadger.io:inigo@honeybadger.io?secret=base32-secret-key

QRコードを提供することには、(プレーンテキストの秘密を公開するのではなく)いくつかの利点があります:

  1. 32文字のコードを入力する時間があるのは誰ですか?
  2. オーセンティケーターアプリは、ワンタイムパスワードに役立つラベルを提供できます(URIで電子メールと発行者を参照します)。これは、複数のサービスで2FAを使用する場合に特に便利です。
  3. 最後に良い QRコードを使用する理由!

otpauthには、いくつかの追加の(ほとんど無視される)パラメーターがあります。 ここで表示できるスキーム。

MACと私

秘密が合意されると🤝、(ある時点で)ワンタイムパスワードを提供するように求められます。 ここで物事が現実になります

TOTP HMACベースのワンタイムパスワードと呼ばれる別のアルゴリズムの上に構築されています (HOTP) 、それ自体はハッシュベースのメッセージ認証コードに基づいています (HMAC) 。それはすべて1つの大きな暗号タマネギです。

TOTP HOTP 基本的に、どのメッセージがハッシュされるかについてのバリエーションです。 HMAC 本当に魔法が起こる場所です。 HMAC ダイジェストを生成します。これは、ハッシュアルゴリズムを介して何らかの値を実行した結果です。いくつかのルビーコードで実際に動作するのを見てみましょう:

OpenSSL::HMAC.digest("SHA1", "my-secret-key", "the-earth-is-flat")
=> "R\xABp\xCB\xEC\xFEJ\r#\x02\xC8\xAB\x96\xB68\v\xDA0\xD7z"

うわー、そのバイナリ文字列を見てください!これがメッセージ認証コードです (MAC)

SHA1を選択しました ハッシュ関数として( TOTP の実装と同様) )。選択できる機能は他にもたくさんあり、それぞれに独自のセキュリティとパフォーマンスの影響があります。ハッシュアルゴリズムの根本的な点は、任意の入力のアルゴリズムです。 、同じ出力を取得します 、 毎回!また、大きく異なるユニークなを生成します 微妙な入力変更からの出力(ハッシュ関数によって異なりますが、ここでの衝突についてはそれほど心配していません)。

さて、それはメッセージ認証コードと呼ばれています 受信したメッセージが本物であることを証明するために使用できるためです。あなたと私が秘密を知っているなら(my-secret-key )、メッセージthe-earth-is-flatを送信できます MACと一緒に 。必要なのは、まったく同じダイジェスト関数を同じ入力で実行することだけです。MACが一致する場合は、メッセージが認証されています。改ざんされておらず、私からしか来られなかったのはご存知でしょう!

😎

タイムコード

それでは、これを TOTPに戻しましょう。 。 時間について話す時が来ました 。ほら、 TOTP the-earth-is-flatのようなばかげたメッセージを消化する代わりに 、代わりに、入力としてタイムステップカウント(文字列に変換)を使用します。オーセンティケーターアプリを開いて、コードが切り替わるのを見ると、パターンに気付く場合があります。そうです、私と一緒に言ってください:「彼らは1分半のスイッチを入れます」、とても良いです。

これにより、メッセージの計算が少し簡単になります。この場合、30秒の切り捨てられたカウントを使用します(タイムステップ )時間の始まりから(まあ、UNIX時間)。だから、再びルビーで:

Time.now.to_i / 30
=> 51772900

あはは!それが私たちのメッセージです 。

そのため、Authenticatorアプリでは、信頼できるダイジェスト関数を使用して、新しい HMACを取得します。 :

hmac = OpenSSL::HMAC.digest("SHA1", "avwe8aw71j2boib23jkbjk32", "51772900")
=> "H\x7F\xC1\xACL\xDA\xDB\xE7DQ\x91kE\x1C\xE3,c\nH\xA0"
get_otp_code(hmac)
=> "332204"

最後のステップは、このバイナリ文字列から番号コードを取得することです。ビット操作が必要なため、匿名のget_otp_codeの背後に隠れます。 今のところ機能します。必要に応じて、HOTP仕様でどのように機能するかを読むことができます。

コードをサーバーに送信すると、サーバーはまったく同じダイジェスト操作を実行し、コードを比較します。それらが一致するとき、あなたは入っています!時間で作業しているため、レイテンシーが要因になります。考えられる遅延を説明するための戦略があります。必要に応じて、それを理解することが宿題になります。

これが、時間ベースのワンタイムパスワードの要点です。 仕事!! 🎉この情報を次のディナーパーティーの生活に使用した後は、お気軽に感謝のメールを送ってください!

実装

これらがどのように機能するかを理解することは重要だと思いますが、自分で何かをロールバックすることは強くお勧めしません。 暗号関連。 Ruby / Railsエコシステムの優れた点の1つは、問題を解決するための宝石(場合によっては多数)を見つけることができることです。

ここHoneybadgerではdeviseを使用しており、two_factor_authenticationと呼ばれる優れたdeviseプラグインがあります。選択できる2FA実装がいくつかあるため、これを選択した理由は次のとおりです。

  • 簡単なセットアップ(移行、一部の構成と初期化子が散在しています)
  • ワンタイムコードを独自のページに入力できます(有効なユーザー/パスワードの後)
  • 許容可能なデフォルトでありながら、簡単に上書きできます
  • また、仕様で推奨されている最大ログイン試行回数チェックもあります
有効にする方法

設定は簡単です。[ユーザー設定]>[認証]ページに移動し、[2要素認証の設定]を選択し、指示に従ってAuthyまたはGoogle認証システム(または実際には他の TOTP )を使用してシークレットを同期します アプリ)。

アカウントのセキュリティ更新

それでおしまい!次回ログインするときに、認証システムコードの入力を求められます。入力して、完全かつ完全に安心してください。 🧘

アカウントのセキュリティ更新

セキュリティとシンプルさ?それはもっと良くなることができますか?

最後にもう1つ:Pwned Password Check

弱いパスワードを支持するすべての人のために、簡単なものを用意しました。また、devise-pwned_pa​​sswordgemと統合しました。今後、パスワードを必要とする操作を実行する場合、提案されたパスワードが既知のデータ侵害の範囲内で蔓延していないことを確認します。新しいパスワードを追加するときにチェックに失敗した場合、そのパスワードは許可されません。

まだの場合は、非常に パスワードマネージャー(1Password ahem)の使用をお勧めします。

Pwned Passwordの興味深い点の1つは、サードパーティのサービスのデータベースと照合している間でもパスワードを安全に保つ方法です。これはk-Anonymityと呼ばれます ここで概要を確認できます。

さて、今のところこれですべてです。次回まで! 👋


  1. ワイヤレスネットワークのセキュリティコードは何ですか?

    ワイヤレスネットワークのセキュリティキーを見つけるにはどうすればよいですか? スタートメニューをクリックして起動します。 [ネットワーク接続]画面が表示されます。ネットワーク共有センターはここにあります。ワイヤレスネットワークアイコンが表示されます。左側のメニューから[ワイヤレスプロパティ]を選択します。 [セキュリティ]タブが開いているはずです。 [文字を表示]を選択すると、ネットワークセキュリティキーが表示されます。 Wi-Fiのセキュリティコードとは何ですか? WPAまたはセキュリティキーと呼ばれるこのパスワードを使用すると、ワイヤレスネットワークに接続できます。 WIFIセキュリ

  2. ネットワークセキュリティとは何ですか。コード?

    ネットワークセキュリティコードを見つけるにはどうすればよいですか? スタートメニューをクリックして起動します。 [ネットワーク接続]画面が表示されます。ネットワーク共有センターはここにあります。ワイヤレスネットワークアイコンが表示されます。左側のメニューから[ワイヤレスプロパティ]を選択します。 [セキュリティ]タブが開いているはずです。 [文字を表示]を選択すると、ネットワークセキュリティキーが表示されます。 Wi-Fi接続のネットワークセキュリティキーとは何ですか? 基本的に、これらはローカルエリアネットワークにアクセスするために要求されるパスワードまたはコードです。 *多くの人がネ