/home暗号化

環境はubuntu8

FS暗号化の種類

  • loop-AES ループバックデバイスを使用する。ループバックデバイスはあまりメンテナンスされてない。ある意味枯れた技術
  • dm-crypt

カーネル2.6以降。device-mapperに暗号化レイヤを追加する。
ブロックデバイス <=> 暗号化レイヤ <=> ファイルシステム
ブロックデバイスでないフラッシュメモリには使えない

  • FUSE : Filesystem in Userspace

ユーザ空間でファイルシステムの構築&マウントができるようにする。
ファイル名、内容は暗号化されるがパーミッションやファイルの数は暗号化ディレクトリを見ればわかってしまう

暗号化関連のメタデータをファイルのヘッダに付加する。これによってポータビリティを確保。
現状、ファイル名の暗号化はできない模様。

作成

素直にdm-crypt使うかな。
キーファイルをFDに保存してパスワード入れなくても自動ログインできる形に持ってく、つもり。

バックアップ。

mtdataは俺の自分用スクリプトだけど、ま、わかるっしょ。

mtdata
mkdir /mnt/data/backup`date '+%Y%m%d'`
mkdir /mnt/data/backup20080614/home
cd /home
sudo tar cvf - . | sudo tar xvpf - -C /mnt/data/backup20080614/home/
カーネル再構築
暗号化FS構築

LUKSを使うかどうかだけど…
LUKSの利点

  • ディストリによらない
  • Open何とかを使うとwinからでも読める
  • 複数のキーを使える

なんだけど、今回は既存のデータを保持したまま移行したいのでLUKSを使わない。
HDDが壊れて大規模な移動が必要になったらその時一緒に対応しよう

リカバリーでrootで入って

umount /home
fsck /dev/sda4
cryptsetup -s 256 -d keyfile.txt -c aes-cbc-essiv:sha256 -b `blockdev --getsize /dev/sda4` create cryptvol1 /dev/sda4
dd if=/dev/sda4 of=/dev/mapper/cryptvol1 bs=4k #データの移行
起動時の自動マウント設定
$ sudo gedit /etc/default/cryptdisks
CRYPTDISKS_MOUNT="/boot"

暗号化ディスクをマウントする前にマウントする必要のある所。この場合はキーファイルのある/bootを指定した。そのうちUSBメモリに変更しよう。

$ sudo getit /etc/crypttab
cryptvol1 /dev/sda4  /boot/keyfile.txt  cipher=aes-cbc-essiv:sha256

$ sudo getit /etc/fstab
/dev/mapper/cryptvol1 /home           jfs     defaults        0       2

今回はせっかくカーネル再構築してaesをカーネルに組み込んだんだけど裏目にでた。aesはi586に最適化したものとしてないものの二つあるのだけど、どうも選択してるようなのだ。
今回はカーネルに組み込んだので/lib/cryptsetup/cryptdisks.functionsの
load_optimized_aes_module ()の処理をコメントアウト

あとは普通に再起動

メモ

cat /boot/config-2.6.24.3my02 | grep SHA
CONFIG_CRYPTO_SHA256=m
モジュールになってる。場合によってはmodprobe sha256 がいるかも
仕方ないカーネル再構築からやるか

参考

[ file:///home/j/.mozilla/swiftweasel/1be5qhpq.default/ScrapBook/data/20080404163013/index.html : ITmedia エンタープライズファイルシステムごと暗号化する方法 (1/2)]
[ http://www.clover-leaf.info/cat/2006/09/linuxhome.html : CATch a TAIL!: Linuxで/homeをお手軽暗号化]
[ http://www.shige.idani.jp/tdiary/?date=20080104 : 夜更かし日記 - swap以外の暗号化その後4〜自動起動の設定 その2 , swap以外の暗号化その後5〜キーファイルを使用する , swap以外の暗号化そ..]
[ http://memo.blogdns.net/cryptfs.html : 暗号化ファイルシステム]
[ http://omake.accense.com/wiki/LinuxDiskVolumeCrypto : LinuxDiskVolumeCrypto - アクセンスのおまけ - Trac]
>|LUKSっていうのは...「パーティションヘッダ」の部分に鍵管理の情報を格納します。...このせいでパーティション先頭の32ブロックほどが使われてしまいます。

luksFormatの場合には考慮がいる、と
[ http://markopee.blogspot.com/2008/01/linux.html : Markopee::Notebook: Linux で暗号化ファイルシステムを使う]

カーネル再構築

やることは二つ
1.暗号化FSのためにCONFIG_CRYPTO_SHA256等を有効にする
2.UATAでケーブルは対応してるはずなのにスピードが出ないことの修正

2だけどdmesg | grep DMAでlimited to UDMA/33 due to 40-wire cableとか出てこない人には関係ない。
[ http://www.nabble.com/Speeding-up-UltraBay-PATA-HDs-tremendously-td14851195.html : Nabble - Linux Thinkpad - Speeding up UltraBay PATA HDs tremendously]
を参考にして

$ lspci | grep "IDE interface"
00:1f.1 IDE interface: Intel Corporation 82801BA IDE U100 Controller (rev 05)
$ lspci -nv
...
00:1f.1 0101: 8086:244b (rev 05) (prog-if 80 [Master])
	Subsystem: 1019:0a50
	Flags: bus master, medium devsel, latency 0
	[virtual] Memory at 000001f0 (32-bit, non-prefetchable) [disabled] [size=8]
	[virtual] Memory at 000003f0 (type 3, non-prefetchable) [disabled] [size=1]
	[virtual] Memory at 00000170 (32-bit, non-prefetchable) [disabled] [size=8]
	[virtual] Memory at 00000370 (type 3, non-prefetchable) [disabled] [size=1]
	I/O ports at f000 [size=16]
...
8086:244b
     ^^^^
Subsystem: 1019:0a50
           ^^^^ ^^^^

この数字を覚えておく

カーネルの再構築

apt-get source linux-source-2.6.24
cd linux-2.6.24/
cd drivers/ata/
cp ata_piix.c  ata_piix.c.org
#修正
705行めに
	{ 0x244b, 0x1019, 0x0a50 }, /* my pc */
を追加
cd ../..
cp /boot/config-2.6.24.3my02 .config
make oldconfig
make menuconfig
コンフィグでCryptographic APIのSHA256とAESをyにしておく
sudo nice -n 10 make-kpkg clean
sudo nice -n 10 make-kpkg --initrd kernel_image kernel_headers