2011-01-30 9 views
-2

翻訳プログラミング言語によって開発されるソフトウェアを考えてみましょう。解釈されたプログラミング言語とは、Javaや.NETのような逆コンパイルが可能な言語を意味します。組み込みデータベースを暗号化するために使用される鍵の保護

重要なデータは埋め込みデータベースに保存され、データベースに挿入する前に鍵を使用してすべてのデータを暗号化します。 ユーザーがデータを参照したい場合、同じキーを使用して暗号化されたデータを再度復号化します。ハードコーディングされたキーと暗号化アルゴリズムは、リフレクターを使って見つけることができました!!!だから、あなたに私に解決策を提案してほしい。 1つの潜在的な解決策は、キーとメインプログラムが内部で実行し、起動時にキーを取得する小さな実行可能ファイルを持つことです。

+5

ネイティブ実行ファイルもデコンパイルすることができます。 – bdonlan

+6

重要なデータと攻撃者に鍵を与えるだけでは機能しません。あなたのセキュリティモデルがあなたのプログラムに依存していて、逆コンパイルされていなければ、それは壊れています。期間。 – CodesInChaos

+0

"組み込みデータベース"とはどういう意味ですか?それはクライアントに保存されていますか?暗号化はどのような脅威から保護しようとしていますか? – sinelaw

答えて

3

あなたのアプローチは根本的に欠陥があります。

ある時点で、暗号化されたデータベースとキーが両方ともユーザーのマシンに存在します。これが起こると、それらを捕捉することができ、後者は前者のロックを解除して読み取ります。

ネイティブコード、難読化またはその他の手法(たとえば、TPMなど)にコンパイルする量は、アプリケーションに組み込まれているマシンに配置したデータを盗んでしまわないようにすることができます。

ベスト・アプローチは、データベースを制御して安全に保つことができるようにすることです。例えばサーバールームのWebサーバー。スマートカードベースのアプローチを使用することもできますが、データベースの使用方法によっては、セキュリティ上の問題が発生する可能性があります。

+0

暗号化されたデータをサーバ上のlogginで保持し、そのキーを取得することができます(無差別な攻撃を防ぐためにはかなり長い)。これは軽量ソリューションであり、非常にシンプルなサーバーと帯域幅を必要としません。 – bestsss

+0

ソフトウェアはクライアントソフトウェアではありません!それは非常に軽く、小さなデスクトップのものです。 – ehsun7b

+0

@答えが嫌い:何が間違っていますか? – bestsss

6

いいえ、オープンプラットフォームでデータを保護する方法はありません。

実行可能ファイルにアクセスできるユーザーは、コードをリバースエンジニアリングしてキーを抽出できます。

キーが生成される方法を隠すことはできますが、リバースエンジニアリングには少し時間がかかります。

鍵を保護する唯一の方法は、改ざんすることはできませんセキュアデバイス内全体の認証メカニズムを持つことです:などスマートカード、SIM ..

更新:に基づいて

  1. 改ざん防止ソフトウェアが簡単に行われていない、あなたがこの分野の専門家ではありませんようだ:あなたのコメントは、私はあなたに二つのことをお勧めすることができますあなたがsecurity through obscurity使用することを示唆していますセキュリティ対策も講じており、これを顧客に「非常に重要な機能」として販売しようとしています。

    暗号化や改ざんのない機能を搭載して出荷してください。

  2. 強力な認証によって有効になっている暗号化されたUSBディスクで製品を出荷してください。また、このUSBディスクにすべてのデータを保存するようにアプリケーションを設定します。そのような多くの製品があります:an example

+0

あなたの答えに感謝!しかし、ソフトウェアはビジネスに非常に重要な個人パスワードを保持するために使用される組み込みdbを持つ小さなデスクトップソフトウェアです。 – ehsun7b

+1

「非常に小さなデスクトップソフトウェア」は「ビジネスにとって非常に重要」であってはなりません。 –

0

暗号化されたキーを格納し、そのキーの復号化機能でObfuscatorを使用できます。これにより、攻撃者がキーを取得することは非常に困難になりますが、引き続き検索することは可能です。

Atackersは、プロファイラとデバッガを使用してコードにステップインし、必要に応じてそこにあるすべてのデータを見ることができます。そのため、exeを使用してキーを保存しても、exeを残してJavaスペースに入ります。ここでは、あらゆる変数が攻撃者に公開されています。

実際には、デバッガやプロファイラを検出するのは難しいです。

+1

私に1時間を与える(*トップ*)と私はすべてのデータを持っています。 – bestsss

+0

半スマート攻撃者はメモリから復号化されたデータをコピーします。これはシンプルなヒープダンプによる簡単な攻撃です – bestsss

+0

okey、あなたは大丈夫です、私のソリューションはうんざりです:)...暗号化されたものここに。投稿のために – Daniel

0

一般に、唯一の90%の唯一の解決策は、鍵を保持する暗号ハードウェア(USB暗号鍵またはスマートカード)を使用することです(鍵はハードウェアから抽出できません)。しかし、問題は、ユーザーが暗号化されたデータベースと暗号化メカニズム(自分の鍵)を持っている場合、すべてのデータを取得することがスキルと時間の問題であるということです。

デザインを確認し、脅威の可能性を特定し、特定された脅威から保護することができます。一般的な(特に今日の)ソリューションは、データベースをサーバーに移動し、ユーザーにデータベースをリアルタイムで照会させることです(一部のキャッシングが関係する可能性があります)。さらに、ユーザーが期間内に要求できるデータ量を制限することで、APIを介してデータベースを完全に奪われないようにする必要があります。

+0

ソフトウェアは非常に小さく、データベースは埋め込みDBです。 – ehsun7b

-3

コードを暗号化してデコンパイルすることはできません。 「dotnet_reactor」というプログラムのようなことは確かです。 私はそれを試したと良いです Product Page

+0

あなたのコードをより安全に保護する方法があるかもしれませんが、検索する必要がありますが、これも機能します。 – AlaaL

+0

そのプログラムでコードを暗号化した後、逆コンパイルを試みても機能しません。 – AlaaL

+0

私はこれを信じていません。十分な時間とインセンティブが与えられれば、(既知のハードウェアアーキテクチャの)バイナリ実行可能ファイルは、逆アセンブルまたはデコンパイルすることができます。そうでなければ、ターゲットマシンはそれを実行できません。 –

関連する問題