17

データベースのパスワードを設定ファイルに保存する必要があります。明らかな理由で、私はそれらを暗号化したい(できればAESで)。10,000行を超える歴史的に成長した(URGH!)ソースコードを使用して既存のプロジェクトに簡単に導入できるDelphiの実装を知っている人はいますか?

明確化:簡単とは、ユニットをプロジェクトに追加し、最大数を追加することを意味します。構成ファイルが読み取られ、それを使用して実行される5行のコード。15分以上かかることはありません。

別の説明:パスワードは、アプリケーションのユーザー管理スキームをサポートするためではなく、データベースへの接続を作成するために必要です。したがって、ハッシュを使用しても効果はありません。dbエンジンは、アプリではなく、パスワードが有効かどうかを確認します。

4

15 に答える 15

18

私は、David Barton のDCPCrypt ライブラリの推奨を支持します。いくつかのプロジェクトで成功裏に使用しており、使用例を読んでから 15 分もかかりません。MIT ライセンスを使用しているため、商用プロジェクトなどで自由に使用できます。DCPCrypt は、AES である Rijndael を含む多くのアルゴリズムを実装しています。

グーグルで検索できるスタンドアロン (単一ユニット) の実装も多数あります。問題は、特定のライブラリの修正性を自分で検証する準備ができていない限り、どれを信頼するかです。

于 2008-09-25T13:58:19.717 に答える
15

通常の認証では、パスワードを保存する必要はありません。ユーザーが入力したパスワードが正しいかどうかを確認するだけで済みます。その場合は、代わりにハッシュ署名 (MD5 など) を保存して、入力したパスワードの署名と比較することができます。2 つの署名が一致する場合、入力したパスワードは正しいです。

誰かがあなたの「マスター」パスワードを取得すると、すべてのユーザーのパスワードを取得できるため、暗号化されたパスワードを保存することは危険な場合があります。

MD5 を使用する場合は、Delphi に付属の MessageDigest_5.pas を使用できます (少なくとも、私の Delphi 2007 には含まれています)。選択できる Delphi ソース コードを使用した他の実装もあります。

于 2008-09-25T14:18:50.713 に答える
8

Turbopower LockBox は暗号化のための優れたライブラリだと思います:

http://sourceforge.net/projects/tplockbox/

あなたの用途には大きすぎるかどうかはわかりませんが、非常に使いやすく、5 行のコードで文字列を暗号化できます。それはすべて例にあります。

于 2008-09-25T14:08:04.860 に答える
3

TOndrejには正しいアプローチがあります。リバーシブルサイファーを使用してパスワードを保存しないでください。正しく指摘されているように、「マスター」キーが危険にさらされた場合、システム全体が危険にさらされます。MD5などの不可逆ハッシュを使用すると、はるかに安全になり、ハッシュ値をクリアテキストとして保存できます。入力したパスワードをハッシュして、保存されているハッシュと比較するだけです。

于 2008-09-25T16:24:05.420 に答える
3

私はいつもTurbopower Lockboxを使用しています。それはうまく機能し、非常に使いやすいです。私は実際にまったく同じ目的で使用し、パスワードを設定テキスト ファイルに保存します。

http://sourceforge.net/projects/tplockbox/

于 2008-09-26T23:06:43.767 に答える
3

TurboPower LockBox 3 (http://lockbox.seanbdurkin.id.au/) は自動ソルティングを使用します。IV はソルト化されていないため、Barton の DCPCrypt には反対することをお勧めします。状況によっては、これは非常に重大なセキュリティ上の欠陥です。

以前のコメントとは対照的に、LB3 の AES の実装は標準に完全に準拠しています。

于 2010-10-13T02:29:07.230 に答える
2

私はこのライブラリを使用しましたが、追加するのは本当に簡単です。しかし、ウィキにはさらにいくつかの解決策が示されています。

于 2008-09-25T13:45:51.510 に答える
2

暗号化したとしても、復号化キーと暗号化されたパスワードの両方が実行可能ファイルに含まれているように思えます。誰でも復号化キーと暗号化されたパスワードを取得して、生のパスワードを生成できます。

必要なのは一方向ハッシュです。

于 2008-09-25T13:55:14.233 に答える
1

ある種の塩を使うことをお勧めします。crypt(password)を設定ファイルに保存しないでください。ただし、このストアcrypt(salt + password)を挿入してください。'salt'として、データベースを開くために必要なものを使用できます。db_name+user_name。暗号化機能の場合、AES、Idea、DESなどのよく知られたアルゴリズム、または各バイトを他の文字列のバイトとxorするような単純なものを使用できます。その文字列がキーになります。解決方法をさらに変えるために、ランダムなバイトをいくつか使用して保存することができます。

だから保存するには:

  1. init_str:=5ランダムバイト
  2. new_password:= salt + password // salt:= db_name + user_name
  3. crypted_pa​​ssword = xor_bytes(init_str + new_password、'my keyphrase')
  4. crypted_pa​​ssword:= init_str + crypted_pa​​ssword
  5. crypted_pa​​sswordをconfigに保存します。これは、hexifyまたはbase64できるバイトになるためです。

そして接続するには:

  1. configから読み取ったデータをinit_strとcrypted_pa​​sswordに分割します
  2. new_password = xor_bytes(init_str + crypted_pa​​ssword、'my keyphrase')
  3. password:= new_passwordから(db_name + user_name)を削除します
于 2008-09-29T05:45:18.657 に答える
1

ただのリマインダー。

他のcryptlibと相互運用する必要がない場合は、DCPまたはLockBoxがその役割を果たします。

しかし

rinjdaelの仕様に完全に準拠する必要がある場合は、無料のコンポーネントを忘れてください。ほとんどの場合、それらはちょっと「お粗末」です。

于 2008-09-26T13:29:28.740 に答える
1

他の人が指摘しているように、認証目的では、可逆暗号化を使用してパスワードを保存することは避ける必要があります。つまり、パスワードハッシュのみを保存し、保存したハッシュに対してユーザー提供のパスワードのハッシュをチェックする必要があります。ただし、このアプローチには欠点があります。攻撃者がパスワード ストア データベースを入手した場合、レインボー テーブル攻撃に対して脆弱です。

あなたがすべきことは、事前に選択された(そして秘密の)ソルト値とパスワードのハッシュを保存することです。つまり、ソルトとパスワードを連結し、結果をハッシュして、このハッシュを保存します。認証するときも同じことを行います - あなたのソルト値とユーザー提供のパスワード、ハッシュを連結し、等しいかどうかをチェックします。これにより、レインボー テーブル攻撃が実行不可能になります。

もちろん、ユーザーがネットワーク経由でパスワードを送信する場合 (たとえば、Web またはクライアント サーバー アプリケーションで作業している場合)、パスワードをクリア テキストで送信するべきではありません。 password) を保存して hash(salt + hash(password)) に対してチェックし、クライアントにユーザー提供のパスワードを事前にハッシュして、ネットワーク経由で送信させる必要があります。これにより、ユーザー (多くのユーザーがそうであるように) が複数の目的で同じパスワードを再利用した場合に、ユーザーのパスワードも保護されます。

于 2008-09-28T08:22:18.757 に答える
0

現在のユーザーだけがアクセスできる場所に保存する必要があります。

基本的にこれを行うには2つの方法があります。

  1. EFS暗号化ファイルに保存します。
  2. 安全なローカルストレージに保存します。

Internet Explorerは2を使用します。ただし、ローカルアクセスを取得できる場合は、適切なマスターキーとアルゴリズムがあれば1と2の両方を復号化できます(たとえば、iepvはInternet Explorerのパスワードを取得できます)。

したがって
、可能であれば、パスワードの保存は避けてください。
最初に代替手段(Windows認証、ディレクトリサービスなど)を探します。

--jeroen

于 2010-10-13T10:07:31.277 に答える
0

Nick の言うとおりです。セキュリティ ソリューションの実装に 15 分間すべてを費やしたいと言うとき、自分が何をしているのかわかっていると思います。DCPCrypt ライブラリは、その (より良い) ルートに進むことにした場合、多数のハッシュ アルゴリズムも実装します。

于 2008-09-25T14:00:33.037 に答える
0

いくつかの解決策:

  • パスワードは一切保存しないでください。データベースが統合認証をサポートしている場合は、それを使用します。プロセスは特定の ID で実行するように設定でき、データベースによって自動的に認証されます。
  • Windows 証明書ストアと証明書を使用して、パスワードを暗号化します。パスワードの暗号化に使用するキーをアプリケーションに保存すると、とにかくセキュリティがほとんどなくなり、キーも保護する必要があります。
于 2010-10-13T07:11:13.447 に答える