2012-01-09 9 views
4

実際、プライベートメソッドはC#で実装されており、まだReflectionで検索することができます。C#で「本当に」プライベートメソッドを書くには?

私は、public string Encrypt(string data)private string Decrypt(string cipher)の方法で暗号化と復号化を行います。

残念ながら、誰かが.NETフレームワークを知っている場合、彼はDecryptメソッドを見つけるためにReflectionを使用し、暗号化されたすべてを復号化できます。

それは安全ではないようです。だから私はDecrypt方法を本当に私的方法にしたいと思います。

しかし、それを行う方法は? 2012年1月9日22:52シドニー時間

は、この質問の 技術説明

エリックリペットは、この質問の政治説明を提供

提供

bdaresを更新しました


ありがとうございましたrts!

答えて

16

できません。攻撃者があなたのコードにアクセスしてコンパイルしたものであれば、彼はあなたのプログラムを追跡し、そのプログラムが暗号化または復号化されている場所を見つけることができます。

鍵を別の場所に保存することでセキュリティ層を追加できますが、攻撃者がサーバー上でコードを実行していると、あなたはすでに犯してしまいます。

(攻撃者がサーバー上でコードを実行している場合にのみ心配します。そうでなければ、メソッドがプライベートであるかどうかは関係ありません。彼はあなたのサーバー上でコードを実行していますを一言で言えば:あなたはここで間違ったことを心配している

+2

良い点。 'プライベート'はセキュリティのコンセプトではないと言うこともできます。それは私が考える一般的な誤解です。 –

+0

私はあなたのポイントに同意します。あなたは私の質問**技術**を解決しました。もう一つ質問があります。つまり、ユーザーがプログラムのバイナリを入手した場合、本当に安全なプログラムが**ありませんか? –

+2

@AlexYeung:どんな脅威に対して**本当に安全です**?本当に安全なプログラムを作ることができます。自分の脅威を上回っている攻撃者の*コスト*が攻撃を成功させることによって得られる*利益*よりも高い場合にそうします。脅威と成功した攻撃の利点を説明してください。そうすれば、セキュリティシステムを応答として設計できます。 –

2

私はあなたが人間際に読み取られているから/変装コードを隠すための試みがあるobfuscation、を参照していると信じています。リフレクターのようなプログラムで開かれた。 Visual Studioには、小規模なプロジェクトやWindows Phoneプロジェクト(アドオンをダウンロードした場合)にこの機能を提供するPreEmptive Solutionsのdotfuscatorのコミュニティ使用ライセンスが含まれています。同じベンダーや他社のcommercial platforms availableもあります。

This blog post explains a little more

+0

難読化が質問に関連して何をしているのか、いくつかの情報を追加することができます。それが何をしていないのか。通常はメソッドを発見するのを困難にするために名前を変更するだけです。 –

1

独自の暗号化方式を作成している場合は、間違っています。あなたや私よりも暗号化についてもっと知っている人は、既に優れた暗号化方法を考え出しており、MSはすでにそのほとんどを実装しています。

暗号化を良好にするには、暗号化を安全にする方法ではなく、それが鍵です。キーを安全にしておくと、アルゴリズムはすべての人が見ることができるように公開することができます。

コンテンツを暗号化して保管しておくとDRMと呼ばれることがありますが、キーをハードウェアに隠しておくことができない限り、おそらく失敗することになります。 - 多分数ヶ月、多分年。

15

あなたの基本的な問題は、信頼モデルが間違っていることです。誰かがリフレクションを使用できる場合、はユーザです。あなたはソフトウェアプロバイダです。 あなたは彼らのために働きます。トラストフローではなく、からです。彼らはあなたがを信用しなければならない人であり、あなたはではありません。です。

ユーザーを信頼しない場合は、は最初にソフトウェアを販売しないでください。あなたを攻撃する予定の人に武器を販売しないでください。

+0

十分なのですが、なぜライセンス/暗号化/共用保護メカニズムを試して隠すのが大変なのでしょうか?ユーザーは信頼できるものではありません。あなたはそれらを壊して誤用する何かを与えます。誰もがかなりの数ではありません – ChrisWue

+0

「あなたを攻撃する予定の人に武器を売ってはいけません。それは何度も起こる –

+0

ありがとうございました。私はまたあなたの回答を私の答えとしてマークしたいが、たった一つの答えがstackoverflowで可能である。あなたの返信は私のクライアントからの質問に確実に答えるのに役立ちます。 –

0

正確なアプリケーションについてはわかりません。しかし、自分のシステムで暗号化と復号化の両方を行う顧客に製品を販売している場合、暗号化の秘密を保持する方法はありません。しかし、代わりに、独自の使用のために新しい秘密鍵を生成できるようにすることができます。このようにして、各顧客のデータは他の顧客に関して「安全」である。明らかに同じ顧客のサイト内でまだ安全ではありません。暗号化されたコンテンツを制御する他の状況では、自分の側で生成されるプライベートマスターキーを作成し、顧客に公開キーを持たせることもできます。

関連する問題