web-dev-qa-db-ja.com

特定のOSとデバイスでのみ復号化できるLinuxの暗号化フォルダー

アプリケーションを実行する誰かにコンピュータを渡したいとします。プログラムが別のコンピュータにコピーされたり、改ざんされたりすることを避けたいです。そのため、プログラムを含むフォルダーを暗号化し、そのデバイスのホストOS(Linux)のみが暗号化を解除できるようにします(つまり、コンピューター間でディスクを移動しないようにします)。コンピューターにTPMがありません。セキュアブートはすでに実行されていますが、CMOSをリセットするとリセットされるようです。アプリケーションにはネットワークが必要なので、すでに利用可能です。

これは可能ですか?できれば、これがどのようにできるのか本当にわかりません。そして、そうではありません。それを可能な限り困難にすることができますか?

7
Patrik

何をするにしても、暗号化キーをどこかに保存する必要があり、それを復元できます。ライセンスサーバーが必要な場合は、アプリケーションをフックまたはパッチすることで回避できます。このようなことで敵をスローダウンさせることはできますが、完全な保護にはなりません。ソフトウェアを実際に提供したくない場合は、サーバー側のロジックの大部分を使用してクライアント/サーバーアーキテクチャを使用し、有料/承認済みユーザーからの認証を要求します(ただし、クライアントソフトウェアをコピーまたは変更されますが、それは通常許容されるリスクです)。

11
multithr3at3d

アプリケーションを実行する誰かにコンピュータを渡したいとします。プログラムが別のコンピュータにコピーされたり、改ざんされたりすることを避けたいです。

これを行う市販のツールがあります。ご想像のとおり、専用の敵によって破られることのない防弾ソリューションはありません。ただし、実際には、目的に「十分」な可能性がある市販の難読化ツールがあります。

市販のツールは、ハードウェアの「指紋」をとることによって、ソフトウェアを特定のハードウェアに関連付けることもできます。繰り返しますが、これはおそらく十分な作業で偽造可能ですが、あなたの目的には「十分」である可能性があります。

市販のツールの一例は、Windows .NETソフトウェアで使用するための「.NET Reactor」( https://www.eziriz.com/dotnet_reactor.htm )です。ソフトウェアを難読化してリバースエンジニアリングを妨げることがあり、ハードウェアフィンガープリント手法を使用してソフトウェアを特定のハードウェアに関連付けることができます。

5
hft

私が見た1つの戦略は絶対に確実なものではありませんが、一意のハードウェアIDを読み取り、それをキーとして使用してソフトウェアを復号化します。別のマシンに移動すると、復号化されません。

これに関する唯一の問題は、これらの値のほとんどが上書きされる可能性があることと、攻撃者がこれらの値の派生元のハードウェアを知っている場合、それらを再現してソフトウェアを効果的に「ロック解除」/復号化することです。

さらに、そのハードウェアのいずれかが故障して交換された場合に問題が発生し、交換した新しいハードウェアのハードウェアIDの新しい組み合わせで暗号化された新しいソフトウェアをカットする必要があります。

5
thepip3r