web-dev-qa-db-ja.com

LastPassワンタイムリカバリパスワード-方法

LastPassパスワードマネージャは、プラグインを使用する各ブラウザのローカルにワンタイムリカバリパスワードを保存します。

http://helpdesk.lastpass.com/account-recovery/

私の質問は、どのようにして複数のパスワードを設定できるかということです。

LastPassはPBKDF2のバリアントを使用してマスターパスワードから暗号化キーを導き出し、この暗号化キーを使用してAESでローカルにデータを暗号化すると思いました。このシナリオでは、データが複数回暗号化されない限り、複数のパスワードを使用する余地はありません。また、サーバー側に何らかの形で保存されていない限り、OTPをどのように有効または無効にできますか?ほんとに魚臭い。データの暗号化キーがコンピューターから出てこない場合、LastPassから通知されていない何かがなく、ローカルのJavaScript暗号化がすべて煙と鏡である場合を除き、マスターパスワード以外のパスワードがどのようにパスワードボールトにアクセスできるかを理解できません。 。

更新

LastPassに連絡したところ、ここで説明が表示されました: http://forums.lastpass.com/viewtopic.php?f=12&t=22959&p=87289

7
John

LastPassは、「マスターパスワード」から派生したキーで暗号化されたデータのコレクションである「ボールト」をサーバーに保存します。そのキーを[〜#〜] k [〜#〜]と呼びましょう。通常、[〜#〜] k [〜#〜]は、マスターパスワードから再計算することにより、ローカルコンピューターで再構築されます。ただし、同じキー[〜#〜] k [〜#〜]もサーバーに保存できますが、今回は暗号化回復キーKr[〜#〜] k [〜#〜]Kr。 「ブラウザに保存されているワンタイムリカバリパスワード」はKになりますr(「パスワード」と呼びますが、ユーザーが入力しないため、通常「キー」として知られる、ランダムなバイトの太いシーケンスになる場合があります)。

このようなシステムでは、ボールトはEの「リカバリBLOB」で拡張できます。Kr(K)。リカバリBLOBを生成するには、[〜#〜] k [〜#〜]の知識が必要です。そのため、LastPassはクライアントシステムで発生しているはずです。 [〜#〜] k [〜#〜]またはマスターパスワードが不明です。これは、ワンタイムリカバリパスワードがブラウザ固有であるという考えに一致します。

1つの「回復Blob」を保存できる場合、several回復Blobも保存できます。ユーザーは、将来の回復のためにブラウザーを準備したい場合、ブラウザーに新しいランダムKを生成させますr、それをブラウザーの内臓に保存し、回復BLOBを計算します(ユーザーがマスターパスワードを入力すると、ブラウザーが再計算します[〜#〜] k [〜 #〜]そしてKで暗号化しますr)。次に、回復BLOBがLastPassのサーバーに送信されて保存されます。 LastPassは[〜#〜] k [〜#〜]、マスターパスワード、または「ワンタイムリカバリーパスワード」を学習しません。 。


上記で説明しているのは、もっともらしい実装です。 LastPassが実際に行うことを保証することはできません。

ただし、重要なのは"one-time"についてです。 つまり1つは純粋なマーケティングです。私が説明した内容には、本質的に「1回限り」のものはありません。彼らが意味することは、サーバーが特定のリカバリBLOBをユーザーに複数回送信することを拒否することです。おそらく、ユーザーが接続してリカバリBLOBのダウンロードを要求すると、LastPassサーバーはそれを送り返し、その後サイドでそれを破棄します。これはすべて、LastPassがこのデータ破壊ルーチンにどの程度準拠しているかに関係しています。

(システムの一部が攻撃者が元に戻すことができない状態の変更を強制しない限り、システムに一度は存在できません。これは一般的です。)

8
Thomas Pornin

彼らは、LinuxでHDDパーティションを暗号化するために一般的に使用される Linux Unified Key Setup (LUKS)に類似したシステムを使用できます。 LUKSは通常、質問のようにPBKDF2とAESでも展開されます。

LUKSを使用すると、データはMaster Keyで暗号化され、User Keyごとに1回暗号化されます。ユーザーキーは1つ以上のUser Passwordsから生成され、それぞれ個別に保存されます。これにより、任意のパスワードを使用してマスターキーを生成し、データを復号化できます。

これはすべて、上にリンクされているPDFの「概要」セクションで詳細に説明されています。

また、ユーザーごとに異なるキーを与えたり、キー/パスワードを変更する必要なしに個人へのアクセスを取り消すことができます。

1
lynks

この機能に関するさまざまな情報を照合しようとしました。

「ログインOTP」と「リカバリーOTP」の違いは何ですか?

ログインOTP:

ログインOTPまたはワンタイムパスワードは、このページで生成できます。 https://lastpass.com/otp.php これらのパスワードを印刷して、携帯することができます。そのリストの各ワンタイムパスワードは、 https://lastpass.com/otp.php を介してLastPassにログインするために使用できます-信頼できないコンピューターを使用している場合、キーロガーの脅威のためにマスターパスワードを入力したくない場合は、OTPを使用できます。使用後は有効期限が切れますが、マスターパスワードを入力しなくてもログインできます。これらは移植可能であり、生成されたデバイスに対してローカルではありません。 https://lastpass.com/otp.php でログインすると、どこからでもリストにアクセスでき、さらに生成して印刷できます。アカウントの復旧には使用できません。

リカバリーOTP:

ユーザーはリカバリOTPに直接アクセスできません。これらは、ブラウザのアドオンによって自動的に保存されるデータのビットです。 LastPassブラウザーアドオンを使用すると、アドオンはマスターパスワードから派生したOTPを生成し、ブラウザーのLastPassファイルに保存します。 OTPが生成および保存された特定のブラウザーでアカウントを回復するまで、この状態が続きます。リカバリプロセス( https://lastpass.com/recover.php )を実行すると、そのOTPが「呼び出され」、それが検出された場合はすぐにパスワードをリセットできます。 OTPはブラウザに保存されました。

OTPは特定のブラウザーに対してローカルであり、LastPassを使用するコンピューターごとに、ブラウザーごとに1つのOTPを生成する必要があります。リカバリーOTPは移植可能ではなく、特定のブラウザーのファイルに保管されるため、LastPassアカウントを以前に使用したブラウザーでのみリカバリーを実行できます。マスターパスワードをリセットした後、次回アカウントにログインすると、次回ログインしたときにブラウザーに新しいOTPが生成されます。

***注:すべてのOTPは、作成時にアカウントに現在適用されているマスターパスワードから取得されます。何らかの方法でマスターパスワードを変更すると、元に戻しても、OTPが機能しなくなります。

From https://lastpass.com/support.php?cmd=showfaq&id=4616

次に、さらに技術的な詳細が このLastPassフォーラムスレッド に投稿されました。

...

実際に行うことははるかに複雑です。

  • 完全にランダムな128ビットの数値を作成する
  • ユーザー名とランダムなパスワードからランダムなキーをハッシュとして作成します
  • ユーザー名とランダムパスワードからランダムハッシュを作成し、これをサーバーに送信します。これにより、暗号化されたデータを後でダウンロードできるように、16進数の正しい32桁を入力したことがわかります。
  • 新しいrandom_keyで実際のキーを暗号化して、後でランダムパスワードが入力されたときに取得できるようにして、サーバーに送信する

基本的に、ランダムに作成された128ビットのキーを使用してプロセス全体を再帰しました。

これの安全性は非常に高く、特にOTPを裏返すと、暗号化されたデータへの128ビットのフルキーで、一度使用するとワイプされます。

ここで少し後悔がありますが、それはタイムラインで実装する必要があったために起こりました。保存されたパスワード回復ハッシュに同じ128ビットOTPプロセスを使用しています-できない理由はありません入力しないので256ビット(またはそれ以上)です。ある時点でこれを修正することができれば幸いですが、128ビットAESは非常に強力であり、ブルートになる前に宇宙の終わりになるでしょう。強制…ここで時間は私たちの側にあります。


私はそれが今理解できれば幸いです。わかりやすくするために繰り返します。

簡単に言うと(送信されるデータとローカルで使用されるデータに関して)、OTPを要求すると、

  • ランダムOTPはローカルで作成されます
  • temp_key = hash(username + OTP)
  • Username + hash(OTP)がサーバーに送信されます
  • encrypt(master_password, temp_key)がサーバーに送信されます

したがって、私のマスターパスワードもOTPもtemp_keyもサーバーに送信されません。

OTPを使用している場合、

  • ユーザー名とOTPを入力します
  • Username + hash(OTP)は認証のためにサーバーに送信されます
  • 次に、暗号化されたデータベースと_temp_key-encrypted master_password_を送ってください
  • _temp_key_は、ユーザー名とOTPからローカルに再作成されます
  • マスターパスワードはローカルで復号化されます
  • データベースはローカルで復号化されます
  • 使用済みのUsername + hash(OTP)値を削除して、このOTPを認証に使用できないようにします。

したがって、基本的にはOTPで暗号化されたマスターパスワードを扱います。

これは正しいです?次に、OTPを取り消す方法がわかりません。私にOTP暗号化されたmaster_passwordを送って、ローカルでOTPを入力した場合、ローカルマシンで誰かがキーロギングを実行して両方の値を保存し、後でmaster_passwordを復号化できますか?同じOTPで2番目の認証を許可しませんが、その人はすでにマスターパスワードを取得しています。どこが間違っているのですか?


完全ではありません-OTPが簡単な方法でハッシュを作成しようとすると、ハッシュが作成されます。このハッシュは、サーバー上でOTPがまだ有効かどうかを検証し、有効な場合はローカルでOTPと組み合わせることができるランダムデータのダウンロードを許可します(OTPがハッシュだけでサーバーに送信されなかったことを思い出してください)キーを作成します。

はい、OTPがサーバーで有効で使用されている場合は遅すぎます-キーもローカルになりました-OTPリストを紛失した場合は、サーバーに実行してすべてのユーザーを無効にしてから、人がそれらを使用してください。

From https://forums.lastpass.com/viewtopic.php?f=12&t=22959&p=87289

これは役立ちますが、LastPassはこの投稿の後に明確な実装の詳細や確認を提供していないようです。

0
Simon East