オンプレミスで展開する必要があるAIモデルがあります。ハードウェアは私たちから提供されるため、デバイス上で私たちが望むことは何でもできます。デバイスは、Ubuntu 18.04を実行するミニPCです。
UIはキオスクモードで起動されるため、プログラムのみが実行されます。ユーザーはマシンを起動し、ユーザー名とパスワードを入力してログインできるようにする必要があります。ソフトウェアが自動的に起動します。
このデバイスはロックダウンする必要があります。つまり必要がある:
これを可能にするために、私が見つけたいくつかの問題があります。ユーザーがシステムを使用するには、暗号化パスワードを共有する必要があります。したがって、彼はいつでもハードディスクを他のシステムに接続して使用する(またはモデルをコピーする)ことができます。
この問題を解決するにはどうすればよいですか?
私の以前の回答、@ logneckによる提案とgoogle-fu
の少しによると、質問で要求されたスキームを実装することは可能であるという結論に達しましたwith利用可能なツールと多くの忍耐/専門知識。このアプローチはOPの要求を満たす必要がありますが、多くの欠点/落とし穴があるため、設計のガイダンスにすぎません。暗号化されたディスクからデータをコピーしようとするnaive攻撃者からOPを守るのに役立ちます。
TPMチップを使用するという私の以前の考えは引き続き有効です。 このガイド 、私が試した決して、パスワードを入力せずに、誰にもパスワードを入力せずにディスクを暗号化する方法が表示されます別のマシン上のデータを復号化します。
TPMは通常マザーボードに組み込まれているため、他のハードウェアに移動することはできません。 TPMはハードウェア認証を実行するため、ハードウェア環境が準拠していること、およびサードパーティのカードがモボに接続されていないことを確認できます。
ハードウェア構成証明に合格すると、TPMは自身のロックを解除します。次に、LUKSモジュールは、ロック解除されたTPM内に格納されているディスクの暗号化キーをTPMに要求できます。
ディスクを別のマシンに移動すると、キーがなくなります。
ガイドで説明されているように、procssには以下が含まれます。
trousers
およびtpm-tools
を使用してTPMチップの所有権を取得しますtrustedgrub2
をインストールして、ブートローダーとして使用しますTPMの封印とは、ハードウェア認証を行うことを意味します。私がリンクしたguoideは、UEFIではなくBIOSブートについて語っています(UEFIユーザーはセキュアブートの概念に精通しています)。基本的にtrustedgrub2
はソフトウェアを測定します。カーネルが変更されていないことを確認するためにカーネルをチェックサムすることで、これを簡略化できます。 TPMは、ハードウェアを測定して、TPMがシールされてから他のPCIカードなどがインストールされていないことも確認します。
ブートプロセス中に、ハードウェアが変更されていない場合、およびブートカーネルがTPMをシールしたものと同じである場合、TPMは秘密を発行しますシステムへのLUKSキー。これにより、システムは自身を復号化できます。
結果:1)ディスクは暗号化されています。2)起動時にパスワードは不要なので、ユーザーはいつでもマシンを再起動できます。3)ハードウェアストレージに存在するため、ユーザーはキーを回復できません。
このソリューションは、Microsoft BitLockerと似ていますが、完全ではなく、Microsoftのソリューションと同じセキュリティ上の落とし穴を共有しています。実際、PINではなく、TPMのみで動作するBitLockerは、セキュリティが弱いため繰り返し批判されました。ここでは説明しません。
これについては、 [〜#〜] drm [〜#〜] スキームを実装する必要があります。あなたが試す前の多くは、すべてが失敗しました。ユーザーに何か(ハードウェア、データ)を渡して、意図しない方法で使用したり、コピーしたりすることはできません。難しくすることはできますが、防ぐことはできません。あなたが試したよりも多くのリソースを備えた他のもの(たとえば、コンソールゲームの海賊版を防止するためのソニー、マイクロソフト、ニンテンドー)は、結局すべてが壊れていました。
上記のTPMソリューションは100%安全ではありません(@Josefコメントを参照)。顧客に利益を与える場合、データが伝達されることを期待する必要があります。
安全なソリューションを得るには、ギズモが自分の監視下にあるサーバーに電話をかける必要があります。
通常、ソフトウェアが何かを計算する必要があるたびに、クライアントを認証する何らかの方法で計算トークンを要求します。このトークンはサーバーによって生成されるため(顧客の手元にはありません)、計算を実行する前に有効かどうかが確認されます。
ここでは任意の署名スキームを使用できます。メッセージとタイムスタンプに署名する必要があります。トークンが受け入れられるのは、署名がサーバーの公開鍵と一致し、タイムスタンプが過去にさほど遠くない場合です。
AIモデルの公開を絶対に望まない場合は、AIモデルファイルを復号化するためのキーもこのトークンに埋め込みます(暗号化に使用されるキーは、デバイスが公開された場合のグローバルリークを回避するためにデバイスごとである必要があります)。
理想的には、AIモデルを時々アップグレードし、それを使用するために許可される最大のタイムスタンプを含めます。誰かが「プライベート」キーを取得してそれを解読することに成功した場合、それは数日/週後に役に立たなくなるため、被害は限定されます。
最後に、AIの結果によって得られるクラスを暗号化することもできます(AIがデータの分類に関するものである場合)。そのため、モデルがあっても、サーバーに接続していない限り、モデルを使用するのは無意味/困難です。復号化キー。
これをすべて完了し、これに数週間/数か月を費やしたら、競合他社が実際に製品を改善するのに時間を費やし、それが現在の製品より優れていることに気付くでしょう。