Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ext4のファイルベース暗号化FSを試してみる

709 views

Published on

鹿児島Linux勉強会2017.04(2017-04-08)で発表するつもりだったもの
https://kagolug.connpass.com/event/52477/

※Marpで書き出したpdfとSlideshareは相性が悪いようなので駄目な場合は以下のあたりをみてください
Speakerdeck : https://speakerdeck.com/matoken/ext4falsehuairubesuan-hao-hua-fswoshi-sitemiru
source : https://bitbucket.org/matoken/lu-er-dao-linuxmian-qiang-hui-2017.04

Published in: Technology
  • Be the first to comment

ext4のファイルベース暗号化FSを試してみる

  1. 1. ext4のファイルベース暗号化FSを試して みる KenichiroMATOHARA(@matoken) http://matoken.org 鹿児島Linux勉強会2017.04(2017­04­08) サンエールかごしま 小研修室3 ※時間切れ未発表 @matoken 1
  2. 2. KenichiroMATOHARA( @matoken ) 大隅から来ました PC­UNIX/OSS, OpenStreetMap, 電子工作, 自転車…… altanativeが好き @matoken 2
  3. 3. ext4のファイルベース暗号化FSを試して みる @matoken 3
  4. 4. 昔やった似たような?発表 偏執的な人の為の? NotePCセキュリティ HDD編 ­小江戸らぐ1 月のオフな集まり(第102回)­ @matoken 4
  5. 5. よく使われてそうな暗号化ファイルシステ ム Windows : BitLocker MacOS : FileVault2 Linux : dm­crypt(LUKS) / eCryptFS ValaCrypt(旧TrueCryptフォーク) @matoken 5
  6. 6. なんでするの? メディアやPCを紛失しても安心 ディスク廃棄時にそのまま廃棄できる  shred とか掛けるとすごく時間がかかってしまう SSDなどの場合単純な上書きではデータが消去できない可 能性がある(secure eraseは全体削除で使い勝手が良くな い) @matoken 6
  7. 7. 圧縮ファイルやgpgじゃ駄目? 暗号化FSは透過的に利用できる 認証を済ませるといつものように利用できる (ログイン状態で放置するとデータ盗めるので注意) @matoken 7
  8. 8. 重くなる? C2D以降やGeodeLXなどにはAES支援機能が入っているので 軽い $ grep ­m 1 ­o aes /proc/cpuinfo  aes HDDでも1重なら体感速度は変わらない SSDでは2重(dm­crypt + eCryptFS)でも行ける感じ @matoken 8
  9. 9. Linuxでの暗号化FSの種類 ディスク全体 dm­crypt(LUKS) システム全体向け ValaCrypt(マルチプラットホーム) 持ち運び媒体など ファイル単位 eCryptFS Ubuntu等のHOMEの暗号化 EncFS オンラインストレージ等 ext4の暗号化機能 Android向け @matoken 9
  10. 10. ext4の暗号化機能 Android/ChromeOS向けに開発(eCryptfsの初期開発者等) Linux 4.1で導入(メモリリークやファイルシステム破損のバグ 修正が4.4で入っている) 暗号化アルゴリズム AES­256­XTS, AES­256­CBC + CTS(ファイル名) ファイルベースの暗号化 パーティション単位の暗号化は出来ない,指定ディレクトリ以 下が暗号化される タイムスタンプ,オーナー,グループ,パーミッションなどは 確認できてしまう パーミッションが許せば削除等も出来る @matoken 10
  11. 11. 実際に使ってみる @matoken 11
  12. 12. 条件 Linux 4.1以上 $ uname ­r 4.9.0­2­amd64 CONFIG_EXT4_ENCRYPTIONが有効 $ grep CONFIG_EXT4_ENCRYPTION /boot/config­`uname ­r` CONFIG_EXT4_ENCRYPTION=y e2fsprogs 1.43以上 $ dpkg­query ­W e2fsprogs e2fsprogs       1.43.4­2 ブロックサイズが4k $ sudo dumpe2fs /dev/loop0 | grep ­i 'block size' dumpe2fs 1.43.4 (31­Jan­2017) Block size:               4096@matoken 12
  13. 13. 必要なパッケージの導入 $ sudo apt install e2fsprogs keyutils    util­linux coreutils mount @matoken 13
  14. 14. ファイルシステムの用意 今回は既存のファイルシステム内にディスクイメージを作成してそ れを利用 1GBのディスクイメージの作成 $ dd if=/dev/zero of=ext4­crypt.img seek=1073741824 bs=1 count 1+0 レコード入力 1+0 レコード出力 1 byte copied, 0.000118528 s, 8.4 kB/s @matoken 14
  15. 15. パーティションの作成 primaryパーティションを1つ作成 $ /sbin/fdisk ext4­crypt.img  : Command (m for help): n Partition type    p   primary (0 primary, 0 extended, 4 free)    e   extended (container for logical partitions) Select (default p): p Partition number (1­4, default 1):  First sector (2048­2097151, default 2048):  Last sector, +sectors or +size{K,M,G,T,P} (2048­2097151,  Created a new partition 1 of type 'Linux' and of size 1023 Command (m for help): w The partition table has been altered. Syncing disks. @matoken 15
  16. 16. ext4でフォーマット $ /sbin/mkfs.ext4 ./ext4­crypt.img  mke2fs 1.43.4 (31­Jan­2017) Found a dos partition table in ./ext4­crypt.img Proceed anyway? (y,N) y Discarding device blocks: done                             Creating filesystem with 262144 4k blocks and 65536 inodes Filesystem UUID: dc44fd43­7d7a­4dfc­87f1­dc52410e2dd1 Superblock backups stored on blocks:          32768, 98304, 163840, 229376 Allocating group tables: done                             Writing inode tables: done                             Creating journal (8192 blocks): done Writing superblocks and filesystem accounting information:  @matoken 16
  17. 17. マウント $ sudo mount ­o loop ./ext4­crypt.img /mnt $ grep /mnt /etc/mtab  /dev/loop0 /mnt ext4 rw,relatime,data=ordered 0 0 オーナー,グループの変更 $ sudo chown `id ­u`.`id ­g` /mnt $ ls ­la /mnt 合計 36 drwxr­xr­x 3 mk   mk    4096  4月  2 04:58 . drwxr­xr­x 1 root root   248  3月 28 02:19 .. drwx­­­­­­ 2 root root 16384  4月  2 04:58 lost+found @matoken 17
  18. 18. ext4暗号化ファイルシステムの利用 @matoken 18
  19. 19. ext4の暗号化フラグを設定 $ sudo tune2fs ­O encrypt /dev/loop0 $ sudo dumpe2fs /dev/loop0 | grep ­io encrypt dumpe2fs 1.43.4 (31­Jan­2017) encrypt @matoken 19
  20. 20. 鍵の生成とキーリングへの追加 $ /usr/sbin/e4crypt add_key Enter passphrase (echo disabled):  Added key with descriptor [07a3ce5a6ebf0396] $ keyctl show Session Keyring 1048296028 ­­alswrv   1000  1000  keyring: _ses  615559430 ­­alsw­v   1000  1000   _ logon: ext4:07a3ce5a6ebf ※パスフレーズの入力は1回だけで確認されないので初回は特に注 意.利用しはじめる前にキーリングをクリアして登録し直してパス フレーズが正しいか確認しておく. @matoken 20
  21. 21. 暗号化ポリシーの設定 このとき対象ディレクトリが空ではない場合エラーとなる(  Error [Directory not empty] setting policy.  )ので注意. マウントポイントには lost+found が存在するので必ずサブディレ クトリ以下である必要がある. $ mkdir /mnt/encryption $ /usr/sbin/e4crypt set_policy 07a3ce5a6ebf0396 /mnt/encryptio Key with descriptor [07a3ce5a6ebf0396] applied to /mnt/encrypt ※鍵の生成とキーリングへの追加と暗号化ポリシーの設定は次のよ うにすることで一度に設定可能 $ /usr/sbin/e4crypt add_key /mnt/encryption @matoken 21
  22. 22. 暗号化ファイルシステム領域にファイルを 作成 $ echo 'hello' > /mnt/encryption/test.txt $ ls ­la /mnt/encryption 合計 12 drwxr­xr­x 2 mk mk 4096  4月  2 05:07 . drwxr­xr­x 4 mk mk 4096  4月  2 05:06 .. ­rw­r­­r­­ 1 mk mk    6  4月  2 05:07 test.txt @matoken 22
  23. 23. キーリングのクリア $ sudo keyctl clear @s $ sudo keyctl show Session Keyring 1048296028 ­­alswrv   1000  1000  keyring: _ses @matoken 23
  24. 24. キーリングをクリアしただけではアクセス できる $ ls ­lA /mnt/encryption 合計 12 ­rw­r­­r­­ 1 mk mk    6  4月  2 05:07 test.txt @matoken 24
  25. 25. アンマウントとマウントし直し キーリングをクリアした状態でアンマウントすると暗号化された状 態に戻る $ sudo umount /mnt $ sudo mount ­o loop ./ext4­crypt.img /mnt $ ls ­la /mnt/encryption 合計 12 drwxr­xr­x 2 mk mk 4096  4月  2 05:42 . drwxr­xr­x 4 mk mk 4096  4月  2 05:06 .. ­rw­r­­r­­ 1 mk mk    6  4月  2 05:42 uzUlJZQfaxMx,7cC63,53 $ cat /mnt/encryption/uzUlJZQfaxMx,7cC63,53A  cat: /mnt/encryption/uzUlJZQfaxMx,7cC63,53A: 要求されたキーが利用で ユーザ,グループ,パーミッションなどは見える.内容にはアクセ スできない. @matoken 25
  26. 26. 再度暗号化領域を利用出来るようにする 鍵の生成とキーリングへの追加と暗号化ポリシーの設定をし直すと アクセスできるようになる $ /usr/sbin/e4crypt add_key /mnt/encryption Enter passphrase (echo disabled):  Added key with descriptor [07a3ce5a6ebf0396] $ ls ­la /mnt/encryption 合計 12 drwxr­xr­x 2 mk mk 4096  4月  2 05:42 . drwxr­xr­x 4 mk mk 4096  4月  2 05:06 .. ­rw­r­­r­­ 1 mk mk    6  4月  2 05:42 test.txt @matoken 26
  27. 27. ファイル名長の確認 eCryptFSなどはファイル名のメタデータがファイル名内にあるので 利用できるファイル名長が短くなってしまう.ext4ではどうか試 す. 通常のext4領域では256文字 $ touch /mnt/1234567890123456789012345678901234567890123456789 touch: '/mnt/1234567890123456789012345678901234567890123456789 $ touch /mnt/1234567890123456789012345678901234567890123456789 @matoken 27
  28. 28. 暗号化領域も同様だった $ touch /mnt/encryption/12345678901234567890123456789012345678 $ ls ­lA /mnt/encryption/ 合計 4 ­rw­r­­r­­ 1 mk mk 0  4月  2 07:14 1234567890123456789012345678 ­rw­r­­r­­ 1 mk mk 6  4月  2 05:42 test.txt 非暗号化状態ではこんな状態 ­rw­r­­r­­ 1 mk mk    0  4月  2 07:14 _OsoePJvc3qPQCPHbUMtjSyns ­rw­r­­r­­ 1 mk mk    6  4月  2 05:42 uzUlJZQfaxMx,7cC63,53A 復号状態のファイル名は別の場所に記録されているよう. @matoken 28
  29. 29. 複数の暗号化領域を作ってみる 新しい暗号化領域のためのディレクトリを作成 $ mkdir /mnt/encryption2 $ ls ­la /mnt/encryption2 合計 8 drwxr­xr­x 2 mk mk 4096  4月  2 06:49 . drwxr­xr­x 5 mk mk 4096  4月  2 06:49 .. 暗号化設定 $ sudo e4crypt add_key /mnt/encryption2 Enter passphrase (echo disabled): Key with descriptor [9640dd016062b432] already exists Key with descriptor [9640dd016062b432] applied to /mnt/encrypt $ keyctl show Session Keyring    1048296028 ­­alswrv   1000  1000  keyring: _ses   94779002 ­­alsw­v      0     0   _ logon: ext4:69ca01e21495  219437542 ­­alsw­v      0     0   _ logon: ext4:07a3ce5a6ebf 1025344233 ­­alsw­v      0     0   _ logon: ext4:9640dd016062 $ touch /mnt/encryption2/hoge @matoken 29
  30. 30. 一回暗号化を解除してマウントし直す $ keyctl clear @s $ keyctl show Session Keyring    1048296028 ­­alswrv   1000  1000  keyring: _ses $ sudo umount /mnt $ sudo mount ­o loop ./ext4­crypt.img /mnt @matoken 30
  31. 31. 片方だけ鍵を登録して暗号化領域を利用 $ sudo e4crypt add_key /mnt/encryption2 Enter passphrase (echo disabled): Added key with descriptor [9640dd016062b432] Key with descriptor [9640dd016062b432] applied to /mnt/encrypt $ ls ­la /mnt/encryption* /mnt/encryption:   合計 12 drwxr­xr­x 2 mk mk 4096  4月  2 06:11 . drwxr­xr­x 5 mk mk 4096  4月  2 06:49 .. ­rw­r­­r­­ 1 mk mk    0  4月  2 06:11 _OsoePJvc3qPQCPHbUMtjSyns ­rw­r­­r­­ 1 mk mk    6  4月  2 05:42 uzUlJZQfaxMx,7cC63,53A /mnt/encryption2:  合計 8 drwxr­xr­x 2 mk mk 4096  4月  2 06:51 . drwxr­xr­x 5 mk mk 4096  4月  2 06:49 .. ­rw­r­­r­­ 1 mk mk    0  4月  2 06:51 hoge @matoken 31
  32. 32. 暗号化領域に鍵が登録されてない状態でフ ァイルを作ってみる 暗号化領域に鍵が登録されてない状態でファイルを作るとどうなる かを確認. $ ls ­lA /mnt/encryption 合計 4 ­rw­r­­r­­ 1 mk mk 0  4月  2 07:14 _OsoePJvc3qPQCPHbUMtjSynszcH ­rw­r­­r­­ 1 mk mk 6  4月  2 05:42 uzUlJZQfaxMx,7cC63,53A mk@x220:~ (1180)$ touch /mnt/encryption/test touch: '/mnt/encryption/test' のタイムスタンプを設定中です: そのような mk@x220:~ (1181)$ ls ­lA /mnt/encryption 合計 4 ­rw­r­­r­­ 1 mk mk 0  4月  2 07:14 _OsoePJvc3qPQCPHbUMtjSynszcH ­rw­r­­r­­ 1 mk mk 6  4月  2 05:42 uzUlJZQfaxMx,7cC63,53A エラーとなって作れない. @matoken 32
  33. 33. 別のユーザで利用 別のユーザで中が見えるか確認 $ id uid=1001(gm) gid=1001(gm) groups=1001(gm),20(dialout),24(cdrom $ ls ­la /mnt/encryption 合計 12 drwxr­xr­x 2 mk mk 4096  4月  2 06:11 . drwxr­xr­x 7 mk mk 4096  4月  2 07:48 .. ­rw­r­­r­­ 1 mk mk    0  4月  2 07:14 _OsoePJvc3qPQCPHbUMtjSyns ­rw­r­­r­­ 1 mk mk    6  4月  2 05:42 uzUlJZQfaxMx,7cC63,53A $ ls ­la /mnt/encryption 合計 12 drwxrwxrwx 2 mk mk 4096  4月  2 06:11 . drwxr­xr­x 7 mk mk 4096  4月  2 07:48 .. ­rw­r­­r­­ 1 mk mk    0  4月  2 07:14 1234567890123456789012345 ­rw­r­­r­­ 1 mk mk    6  4月  2 05:42 test.txt @matoken 33
  34. 34. 権限があればファイル作成もできる $ touch /mnt/encryption/other_user $ ls ­lA /mnt/encryption 合計 4 ­rw­r­­r­­ 1 mk mk 0  4月  2 07:14 1234567890123456789012345678 ­rw­r­­r­­ 1 gm gm 0  4月  2 07:55 other_user ­rw­r­­r­­ 1 mk mk 6  4月  2 05:42 test.txt @matoken 34
  35. 35. 暗号化解除は出来ないと思ったが, $ /usr/sbin/e4crypt add_key /mnt/encryption /mnt/encryption: Permission denied パーミッションをゆるくしてやると出来てしまう. $ ls ­la /mnt/encryption 合計 12 drwxrwxrwx 2 mk mk 4096  4月  2 07:55 . drwxr­xr­x 7 mk mk 4096  4月  2 07:48 .. ­rw­r­­r­­ 1 gm gm    0  4月  2 07:55 97NmIBETx,1q9US96etRsA ­rw­r­­r­­ 1 mk mk    0  4月  2 07:14 _OsoePJvc3qPQCPHbUMtjSyns ­rw­r­­r­­ 1 mk mk    6  4月  2 05:42 uzUlJZQfaxMx,7cC63,53A $ /usr/sbin/e4crypt add_key /mnt/encryption Enter passphrase (echo disabled):  Added key with descriptor [07a3ce5a6ebf0396] Error [Permission denied] setting policy. The key descriptor [07a3ce5a6ebf0396] may not match the existi $ ls ­lA /mnt/encryption 合計 4 ­rw­r­­r­­ 1 mk mk 0  4月  2 07:14 1234567890123456789012345678 ­rw­r­­r­­ 1 gm gm 0  4月  2 07:55 other_user ­rw­r­­r­­ 1 mk mk 6  4月  2 05:42 test.txt @matoken 35
  36. 36. 使いどころ eCryptFSの代替として eCryptFSの教訓を生かして実装しているので筋は良さそう 速度も速くなるはず ファイル名長もフルに使える 透過的にログイン時自動マウントは自分で設定が必要 多分eCryptFSの真似で行ける 未だあまり利用例がないのでバグとか心配 Androidで使われるようになったらきっと大丈夫? @matoken 36
  37. 37. これから確認したいこと 暗号化seedを変更したり eCryptFSの代わりに $HOME を透過的に暗号化したり : @matoken 37
  38. 38. BtrFS…… FAQ ­ btrfs Wiki Btrfs does not support native file encryption (yet), and there's nobody actively working on it. It could conceivably be added in the future. @matoken 38
  39. 39. 参考URL 本の虫: Ted Ts'oがEXT4で暗号化を実装 https://cpplover.blogspot.jp/2015/04/ted­tsoext4.html Ext4 encryption [LWN.net] https://lwn.net/Articles/639427/ '[PATCH 00/22] ext4 encryption patches' ­ MARC http://marc.info/?l=linux­ext4&m=142801360603286&w=2 @matoken 39

×