1

古いバージョンのアプリケーションでは、いくつかのパスワードがデータベースのクリアに保存されています。新しいエントリが作成されたときにパスワードを暗号化する更新バージョンを作成しましたが、データベースに直接アクセスして、既存のエントリを手動で暗号化することはできません。アップデートが公開されると、プレーンテキストのパスワードを復号化しようとしてクラッシュします。

既存のすべてのデータを削除するなどの抜本的なことを行う以外に、私が考えることができる他の唯一のアプローチはこれです(パスワードデータが使用されるときに呼び出されるラッパー擬似コード)。

# data refers to the password data, either encrypted or plain
if data length < AES.block_size:
    # (Shorter than initialization vector, definitely not encrypted.)
    open database and replace password entry with encrypt(data)
    login(username, data)
else:
    try: # try plaintext first
        login(username, data)
    except AuthenticationError:
        login(username, decrypt(data))
    else: #plain text worked, encrypt data for future use.
        open database and replace password entry with encrypt(data)

一度実行した後に解消される問題を解決するためにこのコードを保持するのは残念なことのようです。パスワードが暗号化され、それを必要とするものだけを復号化するために機能する可能性のある他のアプローチはありますか?

4

1 に答える 1

2

このシナリオでは、関係するクライアントとシステムに応じて、次のいずれかを実行します。

  • 暗号化されたパスワードコードを設定し、既存のパスワードをすべて削除して、全員に新しいパスワードを入力させます。パスワードはわかりやすく、時間の経過とともに見られたり共有されたりする可能性があるため、私はこれを好みます。
  • ワンタイムスクリプトを実行して、システム内のすべてのパスワードを暗号化します。このように、ミックスはありません。
  • 「SHA1:」など、暗号化方式のプレフィックスが付いた新しい暗号化パスワードを使用します。誰かがパスワードの先頭と同じテキストを持っているというリスクを冒しますが、それはありそうにありません。
于 2012-07-24T16:29:29.960 に答える