11

PythonWebアプリケーションデータベースのフィールドを暗号化/復号化するためにpycryptoなどの暗号化ライブラリを使用することを検討しています。ただし、暗号化アルゴリズムにはキーが必要です。ソースに暗号化されていないキーがある場合、サーバーのようにdbフィールドの暗号化を試みるのはばかげているようです。誰かがdbファイルにアクセスできる場合、Pythonソースコードにもアクセスできます。

使用するキーを保護するためのベストプラクティスの方法はありますか?または、dbフィールドを暗号化する別の方法(dbレベルではなくアプリケーションで)?

更新:私が保護しようとしているフィールドはoauthトークンです。

更新:これを回避する一般的な方法はないと思います。dbファイルがバックアップされて移動される可能性があるため、とにかくフィールドを暗号化する必要があると思います。少なくとも、問題を1つの脆弱な場所(ソースコードの表示)に減らします。

更新:ユーザーがオフラインのときにAPI呼び出しにoauthトークンを使用する必要があるため、この場合、パスワードをキーとして使用することは適切ではありません。

4

3 に答える 3

5

検証のみが必要な(リコールではない)フィールドを暗号化する場合は、SHAを使用した単純なハッシュ、DESを使用した一方向暗号化、またはレインボーテーブルが実際にフィールドを表示しないようにソルトを使用したIDEAを使用します。これは、パスワードやその他のアクセスシークレットに役立ちます。

Pythonとwebappsは私にGAEのことを考えさせます。したがって、これらはすでにGAEで安価ではないため、すべてのDBトランザクションで暗号化/復号化を行わないものが必要になる場合があります。

暗号化されたデータベースのベストプラクティスは、ユーザー自身の秘密でフィールドを暗号化することですが、ユーザーの秘密鍵を暗号化する非対称バックドアを含めることで、ユーザー(DBソースファイルやテーブルにアクセスできる人ではない)が暗号化を解除できるようにします秘密鍵を使用したユーザー鍵は、回復またはその他の必要がある場合に使用します。

その場合、ユーザー(またはあなたまたは信頼できる代理人)は、自分の情報のみを廃止して暗号化を解除できます。暗号化によってフィールドを保護する必要があると考えている場合は、ユーザーシークレットの検証をより厳密にする必要があります。

この点で、「ジャングルの中で強力なジャングル」などのいくつかの秘密の単語のパスフレーズ(パスワードではなく)を奨励することをお勧めします。

編集:ちょうどあなたの更新を見ました。OAuthを保存する最良の方法は、寿命を短くし、必要なリソースのみをリクエストし、長いトークンを取得して再度リクエストすることです。キーをバックドアの下に10年間置いておくよりも、認証を取得し、アクセスを取得して外に出るように設計することをお勧めします。

ユーザーがオンラインになったときにOAuthを呼び出す必要がある場合は、上記のようにして、ユーザー固有のシークレットで暗号化することができます。暗号化されたカウンター(ユーザーシークレットで暗号化されている)からkeygenを実行して、実際の暗号化キーがトランザクションごとに変更され、カウンターがプレーンテキストで保存されるようにすることもできます。ただし、使用する前に、このモードの特定の暗号アルゴリズムの説明を確認してください。一部のアルゴリズムはこれでうまく機能しない場合があります。

于 2012-02-08T17:54:05.127 に答える
1

お気づきのように、対称暗号化は実際には役に立ちません。ただし、特定のフィールドでは、非対称暗号化またはトラップドア関数を使用できる場合があります。

  • Webアプリケーションがデータを読み戻す必要がない場合は、非対称暗号化を使用します。これは、たとえばクレジットカードデータの場合に役立ちます。アプリケーションは、公的にアクセスできない別のマシン上にある注文処理システムの公開鍵を使用してデータを暗号化します。

  • 同等性の比較だけが必要な場合は、メッセージダイジェストなどのトラップドア関数を使用します。理想的にはソルト値を使用します。これは、サーバーで回復できないはずのパスワードに適しています。

于 2012-02-08T17:46:13.920 に答える
0

どの暗号化アプローチが最適であるかを判断する前に、何を保護しようとしているのか、攻撃者がシステムからキー/情報を取得するためにどれだけの労力を費やす準備ができているのかを考える必要があります。

暗号を使用して修正しようとしている攻撃シナリオは何ですか?盗まれたデータベースファイル?

于 2012-02-08T17:47:34.133 に答える