ARMデバイス(Raspberry Pi)でLinuxカーネルをブートするブート可能なSDカードである作業をコピー保護しようとしています。私はこのアプローチを使用しています:
- このアプローチでは、initrdを使用して、暗号化されたルートファイルシステムをマウントします。
- initrdは、SDカードのCIDに従ってファイルシステムのパスワードを生成します。(ハッシュ関数が使用され、md5またはsha1についてはまだ決定していません)。Initrdは、生成されたパスワードを使用してファイルシステムをマウントしようとします。
- 最も興味深い/疑わしい部分は次のとおりです。initrd自体はカスタムC関数を使用して暗号化され、基本的に各バイトはカスタムメイドの擬似ランダムジェネレーターを使用してXORされます。カーネルは、同じ暗号化機能を持つように修正され、暗号化解除機能として機能します。
- システム自体が取り外されているため、キーボードや外部ストレージを使用する方法はありません。単一のアプリがフルスクリーンで実行されます。
そのため、ブートローダーがカーネルとinitrdをロードした後、カーネルはinitrdを復号化し、そのinitスクリプトを実行します。これにより、パスワードが生成され、ルートファイルシステムがマウントされます。
私の質問は、この設定を破る(ルートファイルシステムを解読し、任意のSDカードから起動する)ことはどれほど簡単でしょうか?最も弱い部分は何ですか?カーネルを逆コンパイルして、それらのカスタム暗号化関数を見つけるのはどれくらい簡単ですか?
編集:ここにいくつかの修正がありますので、明らかなことで時間を無駄にしないでください:
- ルートデバイスはLUKS(aes256)で暗号化され、キーはSDカードのCIDとソルトを使用するHMAC機能によって生成されます。
- initramfs暗号化の擬似ランダムアルゴリズムは、実際にはRC4になります。カスタム関数を使用してキーのみが生成されます。しかし、他の方法はないようです)。
- SDカードエミュレーターを使用すると、誰かがこのシステムのコピーを作成できることを理解していますが、これは非常に難しく、誰もこれを行うことができないためです(また、誰もエミュレーターに対処したくないでしょう)