カウンターはサイト名に追加され、サイトの新しいパスワードを取得する必要がある場合、または生成されたパスワードが「password1」のようなものにランダムに一致するために生成されたパスワードが安全でない場合は増加します(品質保証を参照)
ここで、_Base 89
_は、_0123456789abcdef
_ではなく、アルファベットが0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"$%&/{}()[]=\+*~'#-_.:,;|
の16進数に似ています。
品質保証では、パスワードのセキュリティを評価するために zxcvbn のようなものを使用します。テストに合格しなかった場合、カウンターがインクリメントされ、プロセス全体が繰り返されます。
いつでも説明を求めてください。
これは私の新しいデザインですが、@ Gillesは次のように述べています ボールトレスパスワードマネージャーに対する良い議論 。
マスターキーは、十分に長く、ランダムに生成されたキーである必要があります。ランダムに均一に生成された少なくとも16バイトである必要があります(16のランダムな印刷可能ASCII文字ではなく、間違いなく人間が選択したパスワードやパスフレーズではありません)。それ以外の場合は、マスターキーを派生したパスワードのいずれか。
これは、マスターキーが人間にとって現実的に記憶可能ではないことを意味します。したがって、このスキームは実際にはvaultlessではありません。
HMACをハッシュとして使用する場合、マスターキーが均一にランダムに生成されなくても問題ありませんが、ブルートフォース検索を実行不可能にするために十分なエントロピーが必要です。たとえば、 Diceware の場合、128ビットのエントロピーに到達するには10ワードが必要です。キーが危険にさらされた場合にすべてのパスワードを変更する必要があることを考えると、それ以下で妥協しないでください。
マスターキーからさまざまなキーを生成することをキー派生と呼びます。 MACを キー導出関数 として使用しています。これは、実際に使用されているMACではおそらく問題ありませんが、危険です。 MACは、許可されたマスターキーのセットに対するブルートフォース検索を除いて、任意の数の(入力、出力)ペアからマスターキーを見つける方法がないことを保証します。 MACは、他の一部の入力の出力を知っていても、マスターキーを知らなければ、特定の入力の出力を見つける方法がないことも保証します。 MACが保証していないのは、切り捨てられた出力を見つける方法がないことであり、パスワードの長さの制限により、出力を切り捨てる必要がある場合があります。 MACを使用するのではなく、 [〜#〜] hkdf [〜#〜] などの認識されているKDFを使用します(これは、暗号ライブラリが実装していない場合、HMACに実装するのが非常に簡単です)それを持っている)。
MAC-should-be-KDFステップを パスワードベースのキー導出関数scrypt や Argon2 などに置き換えることができます。これにより、エントロピーの少ないマスターキーを使用できるようになります。パスワードベースの鍵導出関数は、秘密の入力としてパスワードを取り、本質的に計算が遅いことにより、小さい入力スペース(通常サイズの鍵よりもエントロピーが少ない)を補償するように設計されています。たとえば、ストレッチファクターがHKDFよりも10億倍遅くなる(PCでは約1秒かかる)場合、7つのDicewareワード(120ビットのエントロピーを与える)で十分です。このスキームでは、すべてのパスワードを変更しないとストレッチファクターをアップグレードできないので、控えめに選択してください。
「品質保証」ステップは、セキュリティを(わずかに)低下させるため、不適切な名前が付けられています。 「弱い」出力と「強い」出力を分離するものではありません。すべての出力の強度はまったく同じです。出力が、それが何であるかではなく、どのように生成されたかに由来する場合の強度。これを「出力制約」ステップと呼び、結果は「許容可能」と「許容不可能」になります。サイトごとに異なる受け入れ規則が必要になることに注意してください(たとえば、一部のサイトでは句読点文字の存在を要求し、他のサイトではすべての句読文字を拒否します)。
サイトでパスワードを変更する必要がある場合があることに注意してください。そのため、サイト名に加えて、追加のパブリック入力「バージョン」が必要です。サイト名、バージョン、およびカウンターが明確に組み合わされていることを確認してください。たとえば、example.com123
はバージョン1のカウンター23またはバージョン12のカウンター3である可能性があるため、プレーンな文字列の連結は適切ではありません。サイト名、バージョン、カウンターに印刷可能な文字列を使用する場合は、セパレータとしてのnullバイト。同じサイトで複数のアカウントをサポートするために、そこにユーザー名を含めることもできます。
このスキームの実際的な制限は、信頼できるシステムでのみマスターキー/パスフレーズを入力する必要があることです。これは、自分のPCのみを意味し、誰もあなたをスパイしていない可能性がある場合のみです(たとえば、防犯カメラの観点からではありません)。特に、低セキュリティ環境でパスワードを作成し、後でそれをキーリングにアップロードする方法はありません。すべてのパスワードは、高セキュリティ環境で生成する必要があります。
このスキームを使用するには、自分のPCを携帯する必要があるため、パスワード保管庫と比較すると、利点が限られています。唯一の利点は、マスターキーがメモリにないときにPCが盗まれても、秘密が漏らされていないことです。それと、マスターキーが侵害された場合にすべてのパスワードが即座に侵害されるリスクとのバランスをとってください。
このスキームは、正しく実装されていれば理論的には安全ですが、現実の世界ではうまく機能しません。暗号攻撃からは十分に保護されていますが、物理的なキーロガー、キーロガーマルウェア、防犯カメラなどの「帯域外」の攻撃、または coercion または間違ったフィールドに誤って入力してしまった。
スキームは基本的には、単一要素認証(マスターキーのみ)で、パスワードボールトは2要素認証(ボールトコンテンツとボールトロック解除キー)です。 2つの要素は1つよりも堅牢です。強力なパスワードで保護されたボールトは、スキームと同じすべての攻撃に耐性があり、さらにショルダーサーフィンなどの攻撃にも耐性があります。
使いやすさの点では、どちらの方式でも、自分の信頼できるPCを使用する必要があります。この方式には、新しいPCを購入し、信頼できるソースからソフトウェアを取得し、マスターキーのオフラインコピーを取得し、パスワードにアクセスできるという利点があります。金庫は暗号化された金庫をダウンロードする追加のステップを必要としますが、これは実際にはほとんど問題になりません。いつパスワードが必要だがインターネットにアクセスできないのでしょうか?上記のように、ボールトには、PCにアクセスできない状況でパスワードを作成するという一般的なシナリオで機能するという利点があります。たとえば、仕事や個人で使用するためのパスワードを作成します(例:出張用の旅行関連サイトのパスワード)を作業用マシンで使用し、個人用金庫にコピーします。
このスキームよりもパスワードボールトを強くお勧めします。実際の使用例ではより堅牢です。