隨著智能手機的計算能力和存儲能力的提高,手機中將會存放越來越多的私有數據,這些數據的洩密可能造成嚴重後果。手機信息安全一直是我們的重點之一,對於一些重要的功能我們要求鑒權後才能使用,但這只能擋住初級的黑客,只能防君子不能防小人,所以我們希望把重要的數據進行加密後再保存。為此,今天花了一點時間去了解Linux 磁盤加密的方法。
方法一:cryptoloop
下載並編譯util-linux
http://www.paranoiacs.org/~sluskyb/hacks/util-linux/losetup-combined.patch
http://ftp.cwi.nl/aeb/util-linux/util-linux-2.12.tar.gz
http://hydra.azilian.net/util-linux-2.12-kernel-2.6.patch
tar zxvf util-linux-2.12.tar.gz
cd util-linux-2.12
patch -p1 Block Devices>Loopback device support
BLK_DEV_CRYPTOLOOP
加載模塊
modprobe cryptoloop
(以及加密模塊)
創建loop設備
dd if=/dev/zero of=~/cryptoloop.image bs=1M count=10
losetup -e aes-256 /dev/loop0 ~/cryptoloop.image
(提示輸入密碼)
創建文件系統並加載
mkfs.ext3 /dev/loop0
mkdir /mnt/crypto
mount -t ext3 ~/cryptoloop.image /mnt/crypto/ -oencryption=aes-256
(提示輸入密碼)
卸載
umount /mnt/crypto
losetup -d /dev/loop0
重新加載
losetup -e aes-256 /dev/loop0 ~/cryptoloop.image
mount -t ext3 ~/cryptoloop.image /mnt/crypto/ -oencryption=aes-256
cryptoloop的實現比較簡單,可以看看drivers/block/cryptoloop.c中的代碼。loop設備在讀寫之前會調用lo_do_transfer函數,該函數再調用所安裝的transfer插件。cryptoloop就是一種transfer的實現。至於使用哪種transfer及transfer的參數(如密碼),這可以通過LOOP_SET_STATUS64的ioctrl系統調用來完成(mount命令就是這樣實現的)。
cryptoloop的缺點是只能針對loop設備,而且對日志型文件系統無效。