web-dev-qa-db-ja.com

OTPによる2要素認証を追加すると、実際にKeePassの安全性が高まりますか

KeePass は、すべてのパスワードをデータベースに保存するアプリケーションです。それは主にマスターパスワードおよび/またはキーファイルによって保護されています。データベースがそのパスワードで適切に暗号化されている場合、これは非常に安全です。

プラグイン OtpKeyProv があり、2番目の認証要素を追加することでセキュリティを強化すると思われます。このプラグインを使用してデータベースを保護した後、データベースを開くためにワンタイムパスワードを生成して入力する必要があります。

私の質問:これは本当にセキュリティを向上させますか? OTPメカニズムを使用してデータベースをさらに暗号化する方法はわかりません。データベースを手に入れるハッカーは、OTP値を要求しないバージョンのKeePass(オープンソース)を単純にコンパイルすることはできませんか?

私が見る限り、プラグインは、アプリケーションにアクセスしたいときにしかあなたを困らせるので、誤った特別な安心感につながります。

または私は何かを見落としているか。

21
Jeff

いいえセキュリティは同じまま+追加の認識オーバーヘッド。

おそらくプラグインは OATH HOTP を使用します。ここで、KeePassファイルまたはマスターキーは、次のワンタイムパスワードでアクセスするたびに再暗号化されます。

ただし、デバイスで次のパスワードを生成するには、プラグインはデバイスに保存されているシークレットか、KeePassファイルの通常のパスワードのいずれかを必要とします。

ワンタイムパスワードからのセキュリティは、攻撃者がキーを知らない間、同じキーとカウンタを知っている2つのパーティから得られます-HOTP(Key,Counter)-。攻撃者がKeePassのインストールとファイルを保存しているデバイスにアクセスできる場合、セキュリティは、通常のパスワードのセキュリティに自動的に折りたたまれます。 KeePassファイルが他のKeePassプログラムと相互運用可能な場合は、この方法でワンタイムパスワードを使用しても何も得られません。

クライアントとサーバーの両方のエンドポイントは安全であると見なされ、攻撃者は「あなたが所有するもの」と「あなたが知っているもの」を必要とするため、ワンタイムパスワードはサーバー認証に適しています= '。攻撃者があなたのコンピュータを持っている場合、彼らは今 'あなたが所有するもの'を持っています。

15
LateralFractal

ソースを読むと、シークレットはYubikeyに保存され、otp.xmlファイル内の異なるキーで複数回暗号化されて保存されているように見えます。暗号化キーは、OTP i..i + mから始まる次のn個のOTP(シークレットから導出)から導出されます。ここで、iは現在のカウンター、mは先読み値です。ユーザーがOTP値を入力すると、プラグインはそれらの値からキーを作成し、そのキーを使用してシークレットの暗号化されたコピーの1つを復号化しようとします。成功した場合、シークレットを使用して次のn + m個のOTPが導出され、データベースのロックを解除する前に次回のためにシークレットを暗号化するために使用されるm個のキーが生成されます。これは、データベースと一緒にプレーンテキストで保存されていないシークレットのコピーがないと、保護を回避できないことを意味します。

どうやら安全ですが、カウンターが同期しなくなる可能性があるため、このプラグインは好きではありません。安全な場所に書き留めた秘密のコピーがあることを確認してください。

11
mdonoughe

KeePassには、通常はパスワードで暗号化されたマスターキーがあります。そのキーがOTPとパスワードによって生成されたもので暗号化されている場合、データストアを暗号化するマスターキーを復号化するには両方のメカニズムが必要になります。とは言っても、通常OTPはキーストレージではなく認証方法であるため、安全なOTPセットアップをどのように実装したのかはわかりません(つまり、OTPでキーのロックを解除する方法はわかりません)。 。

また、ほとんどの攻撃シナリオではdbが攻撃者によって制御されているため、必ずしも期待どおりの方法であるとは限らないため、再生を効果的に防止できる可能性もあります。彼らはこの問題を回避する方法を持っているかもしれませんが、私はそれを考えることができません。

2
AJ Henderson