8

PHP でアプリケーションを作成していますが、将来ユーザー データベースを別のシステムに切り替える際の問題を回避するために、パスワードを復号化できる必要があります。この将来のシステムのパスワード方式を変更することは不可能であり、パスワードを生成するには平文のパスワードが必要であると考えてください。

サーバーに保存されている公開鍵を使用して、ユーザーのパスワードを暗号化する計画です。認証は、入力を暗号化し、結果を比較することによって行われます。復号化は行われません。復号化可能な秘密鍵は、後で使用するためにオフサイトに保存されます。

どの暗号化/復号化アルゴリズムを提案しますか? 攻撃者が秘密鍵を利用できないと考える場合、暗号化されたパスワードはハッシュ (MD5/SHA1) と同じくらい安全ですか?

4

5 に答える 5

8

ジャマーのアプローチを言い換えます -

  1. 公開鍵と秘密鍵のペアを生成します。ウェブサーバーで公開鍵をハードコーディングします。秘密鍵は、ウェブサーバー/データベース/開発者の手の届かないところにある物理的な銀行のロッカーに保管してください。
  2. ユーザー登録時に、公開鍵を使用してパスワード + ソルトを暗号化します。この手順は、ハッシュ アルゴリズムを使用する場合と同じです。暗号化されたパスワード + ソルトをデータベースに保存します。
  3. パスワードを確認する場合は、再度暗号化し、データベースに保存されている値と比較します。

攻撃者がデータベースを取得した場合、秘密鍵を持っていないため、パスワードを解読できません。彼の手の届かない銀行の金庫室にあるため、彼は秘密鍵を取得できません。2 つの同一のパスワードは、salt のためにデータベースに異なる方法で保存されます。

上記のアプローチを使用することはお勧めしません。将来、誰かが秘密鍵を悪用してすべてのパスワードにアクセスできるようになる可能性があるからです。

しかし、秘密鍵が常に秘密のままであることが保証されている場合、技術的な欠陥は見当たりません。

もちろん、私は間違っているかもしれません。

于 2010-03-31T22:34:03.333 に答える
5

パスワードを解読しないでください。将来パスワード システムを変更する必要がある場合は、storage_type (またはその他) というフィールドを追加します。

次に、パスワードを変更する必要がある場合は、古いパスワードかどうかを確認します。そうである場合は、次回のログイン時に、パスワードのエンコードを変更できます。それ以外の場合は、新しいシステムでログインしてください。

于 2010-03-31T20:35:18.707 に答える
2

パスワードを解読できることは悪い考えです (暗号化されていない状態で保存するよりもはるかに優れた方法はおそらくありません)。ストレージ方法を変更した場合、主な問題はパスワードを使用できることのようです。Linux と同じように、パスワードをパスワードでハッシュする方法を保存するだけです。たとえば、$1$salt$hash は MD5 です。そうすれば、パスワードの保存方法を変更することにした場合でも、古いパスワードと照合できます (また、誰かが正しくログインした場合は、そのパスワードを新しいハッシュで更新できます)。

于 2010-03-31T20:28:54.330 に答える
1

私が目にする唯一の問題は、公開鍵と秘密鍵の暗号化コードのほとんどが、公開鍵を使用して対称鍵を暗号化し、それを解読する秘密鍵に依存し、対称鍵を使用してメッセージを暗号化することです。

公開鍵を使用して、パスワード + ソルトを直接暗号化したい。

したがって、システムに対する攻撃は次のようになります。

  1. 一般公開鍵・秘密鍵暗号に対する攻撃
  2. 秘密鍵ストアに対する攻撃。
于 2010-04-02T07:49:41.987 に答える
-1

ほとんどのアプリケーションでは、パスワードの SHA-1 ハッシュを保存するだけで十分です。

はい、ほとんどのハッシュ アルゴリズムには既知の衝突がありますが、それは実際の攻撃ベクトルを意味するものではありません。特にハッシュをソルトするとき。

ソルトの場合: 外部からはアクセスできないが、PHP インストールで読み取ることができる構成ファイルに保存します。

于 2010-03-31T20:31:47.343 に答える