誰かが私のデータを簡単に取得するのを防ぐために、私はサービスからのデータを暗号化されたファイルとしてキャッシュします(基本的にはコピー防止)。
ただし、これを行うには、暗号化キーを.NETアセンブリ内に保存して、これらのファイルを暗号化および復号化できるようにする必要があります。
キーをすぐに引き出すことができるRedGateの.NETReflectorのようなツールを知っていると、これは非常に安全な方法ではないと感じます...これを行うためのベストプラクティスはありますか?
誰かが私のデータを簡単に取得するのを防ぐために、私はサービスからのデータを暗号化されたファイルとしてキャッシュします(基本的にはコピー防止)。
ただし、これを行うには、暗号化キーを.NETアセンブリ内に保存して、これらのファイルを暗号化および復号化できるようにする必要があります。
キーをすぐに引き出すことができるRedGateの.NETReflectorのようなツールを知っていると、これは非常に安全な方法ではないと感じます...これを行うためのベストプラクティスはありますか?
許容できるリスクのレベルを決定する必要があります。これを行う「安全な」方法はありません。
誰かがリフレクターを使用するリスク、またはSystem.Reflection.Assemblyクラスを使用してアセンブリを開き、その方法でリソースを取得するリスクが大きすぎる場合、次のステップは、起動時にサーバーからキーをダウンロードすることです。 。
次に、誰かがあなたのコードを使用している間にデバッグのようなことをし、その方法でキーを取得する必要があります。キャッシュされているものを期限切れにして、キーを交換することができます。あるユーザーのデータを別のユーザーから保護するために、個人がそれぞれ独自のキーを持つようにすることができます。
あなたはたくさんのことをすることができます、しかしあなたの目標があなたが彼らのマシンに置いているアセンブリが解読する能力を持っているという情報を誰かが解読できないようにすることであるなら、あなたはそれがほとんど不可能であることを知っているべきです。実際にできることは、キー/データの海賊版のコストを上げることだけです。あなたはそれを止めることはできません。
記述を防ぐことはできませんが、改ざんされたデータの再暗号化を防ぐことはできます。
他の人がアクセスできるコンピューターでコードを実行している限り、他の人がプログラムを調べないようにする方法はありません。ただし、逆コンパイルと分析には時間がかかります。MaxGuernseyIIIが指摘しているように、それはすべて許容可能な脅威レベルに関するものです。
あなたの場合、問題はハッカーがあなたのコードを逆コンパイルできるほどではありませんが、あなたが保護したいデータ(ライセンスを所有している人)を変更できるほどではありません。
したがって、公開鍵暗号方式を使用してデータを暗号化できます。そうすれば、ハッカーは読み取ることができますが、再暗号化することはできません。
Maxが示唆しているように、脅威モデルを検討する必要があります。
どんな攻撃者が心配ですか?(一部のことを心配することは正当であり、他のことを心配することはそれほど正当ではありません)。典型的なカテゴリは、「プログラムを購入したコンピュータに精通していないユーザー」、「ソリューションに何時間も費やすことをいとわない熱心なユーザー」、「オンラインで亀裂を見つける方法を知っているカジュアルユーザー」などです。
正確なシナリオに応じて、ソリューションは異なる場合があります。
注意すべき興味深い/悲しい項目の1つは、製品が人気のある場合、1人か2人の熱心な人が座ってそれを壊し、すべての人にパッチをリリースするだけでよいということです。これはソフトウェアの性質であり、アプリケーション全体がそのマシンで実行されている場合は未解決の問題だと思います。
明らかに、アプリケーションがWebサイトとして実行されている場合、つまり、制御しているマシン上にある場合は、問題ではないことを意味します。
これは特に有用な答えではないことを私は知っています。