web-dev-qa-db-ja.com

パスワードで暗号化されたファイルに「パスワードを忘れた」オプションを与える方法は?

ファイル(.txt、.doxなど)を暗号化するユーティリティを作成しました。ユーティリティは、ファイルの暗号化時にユーザーにパスワードを要求します。

問題

ユーザーが異なるパスワードで1000の暗号化ファイルを作成し、あるファイルのパスワードを忘れたとします。彼はそれをどのように回復しますか?

私の考え

各パスワード(暗号化された)をどこかに記録する必要があります。ファイルの名前とサイズによって、ユーザーに提供できるファイルのパスワードを見つけることができますが、次の点に注意してください。

  1. 同じ名前とサイズのファイルが多数存在する可能性があります
  2. ユーザーはファイルの名前を変更できるので、ここではあまり役立ちません
  3. サイズだけでパスワードを見つけようとすると、同じサイズのファイルが多数存在する可能性があるため、ユーザーに正確なパスワードを提供するのは良い方法ではありません。

また、パスワードログ全体をユーザーの登録済みメールでユーザーに送信することも考えましたが、この [〜#〜] link [〜#〜] を見つけて、考えを変えました。

リクエスト

暗号化されたファイルの正確なパスワードをユーザーに提供する最善の方法は何ですか?

PS:ユーティリティはObjective-c、Cocoa for OSXを使用してビルドされています

3
Vikas Bansal

あなたの主な質問は、暗号化されたファイルを、データベース内のそのファイルのクリアテキストパスワードと照合する方法についてです。安全なハッシュ関数、たとえば SHA-256 を使用してこの問題を解決できます。アルゴリズムは

  1. ユーザーからファイルとパスワードを取得します。
  2. パスワードを使用してファイルを暗号化します。
  3. 暗号化されたファイルのSHA-256を生成します。
  4. SHA-256をキーとして使用して、データベースにパスワードを保存します。これがリスクがある場所であることに注意してください。必ず別の場所に保管する鍵でパスワードを暗号化してください。ボブにアリスの暗号化されたファイルの平文パスワードを取得させたくないので、ファイルを暗号化したユーザーを記録する必要もあります。

ユーザーがパスワードのクリアテキストバージョンを要求すると、次のようになります。

  1. ファイルのSHA-256を計算します。
  2. データベースで一致するハッシュを見つけます。
  3. 適切なアクセスチェックを実行して、これが暗号化されたファイルであることを確認してください。
  4. クリアテキストのパスワードをユーザーに返します。
4
Neil Smithline

まず、あなたの考えのいくつかを明らかにしましょう:

  • 正確に同じ名前とタイプの2つのファイルを作成することはできません。同じ名前で拡張子が異なるファイルが作成されます。ファイル名と関連する暗号化パスワードを保存する場合は、完全なファイル名を使用してください。 abc.txt/abc.pdfなど.

  • ファイルを復号化しないと名前を変更できないような方法でプログラムを構築する必要があります。特権のない名前の変更を許可すると、整合性の原則に違反するため、お勧めできません。それでもやりたい場合は、保存されているファイルのファイル名も更新します。

  • 関係ありません。完全なファイル名(abc.txt)を検索すると、必要な主キーが提供されます。

パスワードを回復する機能を提供する必要がある場合、認証システムを設計してパスワードを回復する人とパスワードを回復する人が同じであることを確認する必要があるため、複雑さが増します。

  1. ほとんどのアプリやウェブサイトで実行されている、メールベースのパスワード回復システムを使用できます。 (ログイン認証情報を保存する必要があります)

  2. OTPベースのシステムを使用できます。ここでも、ログイン資格情報と携帯電話番号などを保存する必要があります。

  3. この機能を実装しないでください。パスワードを覚えておくことの重要性と、パスワードを紛失した場合の結果を示すアラートに固執します。 [同意する]メッセージのあるチェックボックスがあります。 :D

私がいくつかの洞察を与えたことを願っています。 :)

2
user2339071