私は組み込みLinuxシステム用のファームウェアアップデートシステムを設計しようとしています。私の計画は、ファイル全体を解凍する必要がないようにターゲットシステムにインストールできるイメージを送信することです。また、画像を暗号化してオプションで圧縮したいと思います。このイメージを生成するために使用されるビルドシステムは複数のシステムに展開されるため、ビルドシステムで最小限の設定しか必要としないようにします。つまり、root権限は必要ありません。
losetup
以下を使用して、イメージファイルをインストールする作業モデルを作成しました。
dd if=/dev/zero of=image_file bs=1M count=10
losetup -e aes loop0 image_file
mkfs.ext2 /dev/loop0
losetup -d loop0
mount -t ext2 -o loop,encryption=aes image_file some_working_folder/
# Add files to some_working_folder
umount some_working_folder
# Send encrypted image to the target system
今、いくつかのシステムでは設定がやや面倒なので、固定サイズの画像を作成しないようにしたいと思います。だからlosetup
コマンドを別のものに変えたいのです。virt-make-fs
ファイルシステムを使用してインストール可能なイメージを生成するためのコマンドを見つけましたext2
。 Linuxカーネルが解読できるようにイメージファイルを暗号化するだけです。 OpenSSLを試してみましたが、正しいアルゴリズムが見つからないか、何かが欠けている可能性があります。これを行う方法を知っている人はいますか?基本的には以下のスクリプトのようなものが欲しい。
tar -cf archive.tar some files
virt-make-fs archive.tar image.ext2
# the below command need to be fixed/replaced
openssl enc -aes192 -in image.ext2 -out image.ext2.aes
ターゲットシステムで次のコマンドまたは少なくとも同様のコマンドを使用できることを願っています。
# The next command should be done on the target
mount -t ext2 -o loop,encryption=aes image.ext2.aes /mnt/upgrade
# work with files in /mnt/upgrade
したがって、明確にすると、ルートにならずに暗号化されたインストール可能イメージファイルをどのように生成しますか?
私が新しい方法を試している場合、またはこの問題に対する他の実証済みの解決策がある場合は、いつでもコメントを残してください。より良い解決策がありますが、暗号化の問題を解決するコマンドにはまだ興味があります。
編集:指摘したように、cryptoloopは安全ではありません。http://lwn.net/Articles/67216/。したがって、他の解決策を見つけることもできます。 utilを見つけaespipe
たのに使えるかもしれませんね。
編集2:LinuxカーネルのAESモジュールのソースコードを調べたところ、おそらく問題を引き起こすのはパスワードのハッシュであるという結論に達しました。 AESモジュールはすべてaespipe
AES-256-CBC暗号化を使用します。私が知る限り、Linuxカーネルは与えられたパスワードをキーとして使用し、着信aespipe
パスワードをハッシュします。 「ルートなし」の部分は私にとって非常に重要なので、別のソリューションを探し始めました。
tar -cf - file0 file1 ... | gzip -c | aespipe -e aes256 > arhive_file
その後、ターゲットシステムで実行
rm -rf /tmp/update ; mkdir -p /tmp/update
aespipe -d -e aes256 < archive.mbl | gzip -cd | tar -C /tmp/update -xf -
ベストアンサー1
cryptloopのセキュリティは脆弱ですが、これ。
ユーザーモードFSコンストラクタを使用できます(例:buildroot geneext2fs.shやandroid make_ext4fs)。 aespipeツールと一緒に使用すると、root / superuser権限なしでホストに暗号化されたイメージを作成できます。
ただし、Lostupをパッチする必要があります(少なくともインストールする必要があります)。ループaesそして、ターゲットのLinuxカーネルがこれらの暗号化イメージを直接マウントできるように、cryptoloopをモジュールまたは組み込みとして有効にします。
以下は、暗号化されたext4ファイルシステムイメージに対してこれを行う方法を示しています(ext2 FSの場合、最初の2つのコマンドをbuildroot genext2fs.sh [3]に置き換えます)。
HOST $ make_ext4fs -s -l 512M -a data yourimage.simg folder/
HOST $ simg2img yourimage.simg yourimage.img
HOST $ cat yourimage.img | aespipe -e aes256 > yourimage.crypt
TARGET # modprobe cryptoloop #in case of cryptoloop as module.
TARGET # losetup.patched -e aes-256 /dev/loop0 yourimage.crypt
TARGET # mount -t ext4 /dev/loop0 /mnt/uncrypt