オープンソースに移行してソフトウェアを自由に配布できない状況を私たちは皆知っています。そして、私はこれらの状況のいずれかにいます。
多数のバイナリ(Cソースからコンパイル)とpythonシステムにすべてをラップするコード。ネットワーク経由でアプリの機能にアクセスできますが、バイナリとコードが保存されている実際のサーバーに触れる機会はありません。
次に、システムの「ローカル」バージョンを提供します。アプリは、ユーザーが物理的に所有するPC上で実行されます。私たちはすべてが壊れる可能性があることを知っていますが、少なくとも可能な限りコピーやリバースエンジニアリングからアプリを保護したいと考えています。
Dockerは素晴らしい展開ツールであることを知っているので、コンテナのファイルシステムに保存されているデータを誰も見ることができない暗号化されたdockerコンテナを作成することは可能でしょうか?この問題の既知の解決策はありますか?
また、おそらくドッカーに基づいていないよく知られたソリューションがありますか?
あなたが尋ねているのは 難読化 と呼ばれています。これはDockerとは関係がなく、言語固有の問題です。データについては、必要なマングリングをいつでも行うことができますが、攻撃者を思いとどまらせることはできますが、決して安全ではありません。プログラム(ユーザーが提供する)にはキーが含まれている必要があるため、最先端の暗号化スキームでも役に立ちません。
Cは通常、リバースエンジニアリングするのに十分な難易度です。Pythonを試すことができます pyobfuscate および similar 。
データについては、 この質問 (キーワード: 暗号化ファイルゲーム )が見つかりました。
ホストマシン(root
デーモンが実行されている)上のdocker
ユーザーは、ホストで実行されているすべてのプロセスへのフルアクセス権を持っています。つまり、ホストマシンを制御する人は、アプリケーションとファイルシステムのRAMに常にアクセスできます。これにより、ファイルシステムの復号化や保護のためにキーを隠すことができなくなります。 RAMデバッグから。
標準のLinuxボックスで難読化を使用すると、ファイルシステムとRAMを読みにくくすることができますが、不可能にしたりコンテナを実行したりすることはできません。
オペレーティングシステムを実行しているハードウェアを制御できる場合は、システムが起動するとすぐにシステム検証を開始する Trusted Platform Module をご覧ください。次に、rootユーザーがシステムにアクセスしてキーを隠し、ファイルシステムを強力に暗号化する前に、理論的に何かを行うことができます。その場合でも、マシンへの物理的アクセスが与えられれば、決心した攻撃者は常に復号化されたデータを取得できます。
完全に安全なソリューションが必要な場合、機密性の「聖杯」である準同型暗号化を探しています。つまり、アプリケーションとデータを暗号化してPCに送信し、所有者、OS、または他の人がデータをすくい取ることなく、このPCでそれらを実行する必要があります。パフォーマンスを大幅に低下させることなくこれを行うことは、活発な研究プロジェクトです。少なくとも 1つのプロジェクト がこれを管理しましたが、まだ制限があります:
TPMの使用に関するAndyの提案は、ポイント2および3と同様の意味を持ちます。
Dockerのようなサウンドは適切なツールではありません。これは、本格的なサンドボックスとして使用することを意図したものではなかったためです(少なくとも私が読んでいるものに基づくと)。より本格的なVirtualBoxアプローチを使用していないのはなぜですか?少なくともその後、ログインの背後で仮想マシンをロックアップし(他の人のコンピューターへの物理的なインストールをロックアップできる限り)、分離された暗号化されたファイルシステムと9ヤード全体を実行できます。
軽く開いて開くか、太って閉じてください。 「軽量で閉じた」オプションがあることは知りません。
私はまったく同じ問題を抱えています。現在、私が発見できたのは以下です。
A. Asylo( https://asylo.dev )
B.スコーン( https://sconedocs.github.io )