EncFSに似た暗号化ファイルシステムのCryFSを試す

EncFSのMLで見かけたのですが,EncFSに似た暗号化FSのCryFSというものがあるようです.

EncFSは平文のファイルと暗号化ファイルが一対一で対応づいているしタイムスタンプやパーミッションも引き継いでいるので推測されやすいという問題があります.CryFSはその辺りも隠蔽できるようです.
面白そうなので少し試してみました.

初めDebian stretchに導入しようと思ったのですが,jessieのapt-lineは用意されているのですが,これをstretchに導入しようとするとバージョンチェックで対応してないと言われ,sourceから導入しようと思ったらbiiという恐らくstretchのpkgに存在しないコマンドを要求されるので手っ取り早くUbuntu 14.04 LTSで試しました.

$ linuxlogo -L ubuntu$ linuxlogo -L ubuntu
 
              .-.
        .-'``(|||)
     ,`\ \    `-`.                 88                         88
    /   \ '``-.   `                88                         88
  .-.  ,       `___:      88   88  88,888,  88   88  ,88888, 88888  88   88
 (:::) :        ___       88   88  88   88  88   88  88   88  88    88   88
  `-`  `       ,   :      88   88  88   88  88   88  88   88  88    88   88
    \   / ,..-`   ,       88   88  88   88  88   88  88   88  88    88   88
     `./ /    .-.`        '88888'  '88888'  '88888'  88   88  '8888 '88888'
        `-..-(   )
              `-`
 
 
Linux Version 3.13.0-77-generic, Compiled #121-Ubuntu SMP Wed Jan 20 10:50:42 UTC 2016
      Two 800MHz AMD Athlon Processors, 7.9GB RAM, 5191.48 Bogomips Total
                                     micro

#screenfetchがpkgに無いな

導入

このscriptで鍵やapt-lineの設定とCryFSの導入が行われます.

$ wget -O - https://www.cryfs.org/install.sh | sudo bash
$ cryfs -h
CryFS Version 0.8.5
WARNING! This version is not considered stable. Please backup your data frequently!
 
Usage: cryfs [options] rootDir mountPoint [-- [FUSE Mount Options]]
 
Allowed options:
  -h [ --help ]          show help message
  -c [ --config ] arg    Configuration file
  -f [ --foreground ]    Run CryFS in foreground.
  --cipher arg           Cipher to use for encryption. See possible values by
                         calling cryfs with --show-ciphers
  --show-ciphers         Show list of supported ciphers.
  --unmount-idle arg     Automatically unmount after specified number of idle
                         minutes.
  --extpass arg          External program to use for password input
  --logfile arg          Specify the file to write log messages to. If this is
                         not specified, log messages will go to stdout, or
                         syslog if CryFS is running in the background.
 

利用例

基本的な使い方はEncFSと同じ感じです.初回起動時は簡単な設定が必要.

$ mkdir encdir
$ mkdir mnt
$ cryfs encdir mnt
CryFS Version 0.8.5
WARNING! This version is not considered stable. Please backup your data frequently!
 
Use default settings?
Your choice [y/n]: y
 
Generating secure encryption key...done
Password:
Confirm Password:
Creating config file...done
 
Mounting filesystem. To unmount, call:

アンマウントはfuseなのでfusermount -uで

$ fusermount -u "/tmp/mnt"
$ ls -lA encdir mnt
encdir:
合計 40
-rw-rw-r-- 1 mk mk 32816  2月  7 04:08 0C2B03AEBC6D01C0AAB861907CE361A6
-rw-rw-r-- 1 mk mk  1134  2月  7 04:08 cryfs.config
 
mnt:
合計 0

cryfs.configという設定ファイルが作成されます

$ file encdir/cryfs.config
encdir/cryfs.config: data
$ od -xc encdir/cryfs.config|head
0000000    7263    6679    2e73    6f63    666e    6769    303b    733b
          c   r   y   f   s   .   c   o   n   f   i   g   ;   0   ;   s
0000020    7263    7079    0074    0000    0008    0000    0000    0001
          c   r   y   p   t  
$ file encdir/cryfs.config
encdir/cryfs.config: data
$ od -xc encdir/cryfs.config|head
0000000    7263    6679    2e73    6f63    666e    6769    303b    733b
          c   r   y   f   s   .   c   o   n   f   i   g   ;   0   ;   s
0000020    7263    7079    0074    0000    0008    0000    0000    0001
          c   r   y   p   t  \0  \0  \0  \b  \0  \0  \0  \0  \0 001  \0
0000040    0000    0001    0000    0020    0000    0000    0000    a86f
         \0  \0 001  \0  \0  \0      \0  \0  \0  \0  \0  \0  \0   o 250
0000060    eac9    f71c    a592    8034    2f04    a2cb    c19e    78db
        311 352 034 367 222 245   4 200 004   / 313 242 236 301 333   x
0000100    e526    e951    1548    6c59    8a1e    beaf    db19    c7ff
          & 345   Q 351   H 025   Y   l 036 212 257 276 031 333 377 307
  
$ file encdir/cryfs.config
encdir/cryfs.config: data
$ od -xc encdir/cryfs.config|head
0000000    7263    6679    2e73    6f63    666e    6769    303b    733b
          c   r   y   f   s   .   c   o   n   f   i   g   ;   0   ;   s
0000020    7263    7079    0074    0000    0008    0000    0000    0001
          c   r   y   p   t  \0  \0  \0  \b  \0  \0  \0  \0  \0 001  \0
0000040    0000    0001    0000    0020    0000    0000    0000    a86f
         \0  \0 001  \0  \0  \0      \0  \0  \0  \0  \0  \0  \0   o 250
0000060    eac9    f71c    a592    8034    2f04    a2cb    c19e    78db
        311 352 034 367 222 245   4 200 004   / 313 242 236 301 333   x
0000100    e526    e951    1548    6c59    8a1e    beaf    db19    c7ff
          & 345   Q 351   H 025   Y   l 036 212 257 276 031 333 377 307
  
$ file encdir/cryfs.config
encdir/cryfs.config: data
$ od -xc encdir/cryfs.config|head
0000000    7263    6679    2e73    6f63    666e    6769    303b    733b
          c   r   y   f   s   .   c   o   n   f   i   g   ;   0   ;   s
0000020    7263    7079    0074    0000    0008    0000    0000    0001
          c   r   y   p   t  \0  \0  \0  \b  \0  \0  \0  \0  \0 001  \0
0000040    0000    0001    0000    0020    0000    0000    0000    a86f
         \0  \0 001  \0  \0  \0      \0  \0  \0  \0  \0  \0  \0   o 250
0000060    eac9    f71c    a592    8034    2f04    a2cb    c19e    78db
        311 352 034 367 222 245   4 200 004   / 313 242 236 301 333   x
0000100    e526    e951    1548    6c59    8a1e    beaf    db19    c7ff
          & 345   Q 351   H 025   Y   l 036 212 257 276 031 333 377 307
  \b  
$ file encdir/cryfs.config
encdir/cryfs.config: data
$ od -xc encdir/cryfs.config|head
0000000    7263    6679    2e73    6f63    666e    6769    303b    733b
          c   r   y   f   s   .   c   o   n   f   i   g   ;   0   ;   s
0000020    7263    7079    0074    0000    0008    0000    0000    0001
          c   r   y   p   t  \0  \0  \0  \b  \0  \0  \0  \0  \0 001  \0
0000040    0000    0001    0000    0020    0000    0000    0000    a86f
         \0  \0 001  \0  \0  \0      \0  \0  \0  \0  \0  \0  \0   o 250
0000060    eac9    f71c    a592    8034    2f04    a2cb    c19e    78db
        311 352 034 367 222 245   4 200 004   / 313 242 236 301 333   x
0000100    e526    e951    1548    6c59    8a1e    beaf    db19    c7ff
          & 345   Q 351   H 025   Y   l 036 212 257 276 031 333 377 307
  
$ file encdir/cryfs.config
encdir/cryfs.config: data
$ od -xc encdir/cryfs.config|head
0000000    7263    6679    2e73    6f63    666e    6769    303b    733b
          c   r   y   f   s   .   c   o   n   f   i   g   ;   0   ;   s
0000020    7263    7079    0074    0000    0008    0000    0000    0001
          c   r   y   p   t  \0  \0  \0  \b  \0  \0  \0  \0  \0 001  \0
0000040    0000    0001    0000    0020    0000    0000    0000    a86f
         \0  \0 001  \0  \0  \0      \0  \0  \0  \0  \0  \0  \0   o 250
0000060    eac9    f71c    a592    8034    2f04    a2cb    c19e    78db
        311 352 034 367 222 245   4 200 004   / 313 242 236 301 333   x
0000100    e526    e951    1548    6c59    8a1e    beaf    db19    c7ff
          & 345   Q 351   H 025   Y   l 036 212 257 276 031 333 377 307
  
$ file encdir/cryfs.config
encdir/cryfs.config: data
$ od -xc encdir/cryfs.config|head
0000000    7263    6679    2e73    6f63    666e    6769    303b    733b
          c   r   y   f   s   .   c   o   n   f   i   g   ;   0   ;   s
0000020    7263    7079    0074    0000    0008    0000    0000    0001
          c   r   y   p   t  \0  \0  \0  \b  \0  \0  \0  \0  \0 001  \0
0000040    0000    0001    0000    0020    0000    0000    0000    a86f
         \0  \0 001  \0  \0  \0      \0  \0  \0  \0  \0  \0  \0   o 250
0000060    eac9    f71c    a592    8034    2f04    a2cb    c19e    78db
        311 352 034 367 222 245   4 200 004   / 313 242 236 301 333   x
0000100    e526    e951    1548    6c59    8a1e    beaf    db19    c7ff
          & 345   Q 351   H 025   Y   l 036 212 257 276 031 333 377 307
  
$ file encdir/cryfs.config
encdir/cryfs.config: data
$ od -xc encdir/cryfs.config|head
0000000    7263    6679    2e73    6f63    666e    6769    303b    733b
          c   r   y   f   s   .   c   o   n   f   i   g   ;   0   ;   s
0000020    7263    7079    0074    0000    0008    0000    0000    0001
          c   r   y   p   t  \0  \0  \0  \b  \0  \0  \0  \0  \0 001  \0
0000040    0000    0001    0000    0020    0000    0000    0000    a86f
         \0  \0 001  \0  \0  \0      \0  \0  \0  \0  \0  \0  \0   o 250
0000060    eac9    f71c    a592    8034    2f04    a2cb    c19e    78db
        311 352 034 367 222 245   4 200 004   / 313 242 236 301 333   x
0000100    e526    e951    1548    6c59    8a1e    beaf    db19    c7ff
          & 345   Q 351   H 025   Y   l 036 212 257 276 031 333 377 307
  
$ file encdir/cryfs.config
encdir/cryfs.config: data
$ od -xc encdir/cryfs.config|head
0000000    7263    6679    2e73    6f63    666e    6769    303b    733b
          c   r   y   f   s   .   c   o   n   f   i   g   ;   0   ;   s
0000020    7263    7079    0074    0000    0008    0000    0000    0001
          c   r   y   p   t  \0  \0  \0  \b  \0  \0  \0  \0  \0 001  \0
0000040    0000    0001    0000    0020    0000    0000    0000    a86f
         \0  \0 001  \0  \0  \0      \0  \0  \0  \0  \0  \0  \0   o 250
0000060    eac9    f71c    a592    8034    2f04    a2cb    c19e    78db
        311 352 034 367 222 245   4 200 004   / 313 242 236 301 333   x
0000100    e526    e951    1548    6c59    8a1e    beaf    db19    c7ff
          & 345   Q 351   H 025   Y   l 036 212 257 276 031 333 377 307
 001  
$ file encdir/cryfs.config
encdir/cryfs.config: data
$ od -xc encdir/cryfs.config|head
0000000    7263    6679    2e73    6f63    666e    6769    303b    733b
          c   r   y   f   s   .   c   o   n   f   i   g   ;   0   ;   s
0000020    7263    7079    0074    0000    0008    0000    0000    0001
          c   r   y   p   t  \0  \0  \0  \b  \0  \0  \0  \0  \0 001  \0
0000040    0000    0001    0000    0020    0000    0000    0000    a86f
         \0  \0 001  \0  \0  \0      \0  \0  \0  \0  \0  \0  \0   o 250
0000060    eac9    f71c    a592    8034    2f04    a2cb    c19e    78db
        311 352 034 367 222 245   4 200 004   / 313 242 236 301 333   x
0000100    e526    e951    1548    6c59    8a1e    beaf    db19    c7ff
          & 345   Q 351   H 025   Y   l 036 212 257 276 031 333 377 307
0000040    0000    0001    0000    0020    0000    0000    0000    a86f
         
$ file encdir/cryfs.config
encdir/cryfs.config: data
$ od -xc encdir/cryfs.config|head
0000000    7263    6679    2e73    6f63    666e    6769    303b    733b
          c   r   y   f   s   .   c   o   n   f   i   g   ;   0   ;   s
0000020    7263    7079    0074    0000    0008    0000    0000    0001
          c   r   y   p   t  \0  \0  \0  \b  \0  \0  \0  \0  \0 001  \0
0000040    0000    0001    0000    0020    0000    0000    0000    a86f
         \0  \0 001  \0  \0  \0      \0  \0  \0  \0  \0  \0  \0   o 250
0000060    eac9    f71c    a592    8034    2f04    a2cb    c19e    78db
        311 352 034 367 222 245   4 200 004   / 313 242 236 301 333   x
0000100    e526    e951    1548    6c59    8a1e    beaf    db19    c7ff
          & 345   Q 351   H 025   Y   l 036 212 257 276 031 333 377 307
  
$ file encdir/cryfs.config
encdir/cryfs.config: data
$ od -xc encdir/cryfs.config|head
0000000    7263    6679    2e73    6f63    666e    6769    303b    733b
          c   r   y   f   s   .   c   o   n   f   i   g   ;   0   ;   s
0000020    7263    7079    0074    0000    0008    0000    0000    0001
          c   r   y   p   t  \0  \0  \0  \b  \0  \0  \0  \0  \0 001  \0
0000040    0000    0001    0000    0020    0000    0000    0000    a86f
         \0  \0 001  \0  \0  \0      \0  \0  \0  \0  \0  \0  \0   o 250
0000060    eac9    f71c    a592    8034    2f04    a2cb    c19e    78db
        311 352 034 367 222 245   4 200 004   / 313 242 236 301 333   x
0000100    e526    e951    1548    6c59    8a1e    beaf    db19    c7ff
          & 345   Q 351   H 025   Y   l 036 212 257 276 031 333 377 307
 001  
$ file encdir/cryfs.config
encdir/cryfs.config: data
$ od -xc encdir/cryfs.config|head
0000000    7263    6679    2e73    6f63    666e    6769    303b    733b
          c   r   y   f   s   .   c   o   n   f   i   g   ;   0   ;   s
0000020    7263    7079    0074    0000    0008    0000    0000    0001
          c   r   y   p   t  \0  \0  \0  \b  \0  \0  \0  \0  \0 001  \0
0000040    0000    0001    0000    0020    0000    0000    0000    a86f
         \0  \0 001  \0  \0  \0      \0  \0  \0  \0  \0  \0  \0   o 250
0000060    eac9    f71c    a592    8034    2f04    a2cb    c19e    78db
        311 352 034 367 222 245   4 200 004   / 313 242 236 301 333   x
0000100    e526    e951    1548    6c59    8a1e    beaf    db19    c7ff
          & 345   Q 351   H 025   Y   l 036 212 257 276 031 333 377 307
  
$ file encdir/cryfs.config
encdir/cryfs.config: data
$ od -xc encdir/cryfs.config|head
0000000    7263    6679    2e73    6f63    666e    6769    303b    733b
          c   r   y   f   s   .   c   o   n   f   i   g   ;   0   ;   s
0000020    7263    7079    0074    0000    0008    0000    0000    0001
          c   r   y   p   t  \0  \0  \0  \b  \0  \0  \0  \0  \0 001  \0
0000040    0000    0001    0000    0020    0000    0000    0000    a86f
         \0  \0 001  \0  \0  \0      \0  \0  \0  \0  \0  \0  \0   o 250
0000060    eac9    f71c    a592    8034    2f04    a2cb    c19e    78db
        311 352 034 367 222 245   4 200 004   / 313 242 236 301 333   x
0000100    e526    e951    1548    6c59    8a1e    beaf    db19    c7ff
          & 345   Q 351   H 025   Y   l 036 212 257 276 031 333 377 307
  
$ file encdir/cryfs.config
encdir/cryfs.config: data
$ od -xc encdir/cryfs.config|head
0000000    7263    6679    2e73    6f63    666e    6769    303b    733b
          c   r   y   f   s   .   c   o   n   f   i   g   ;   0   ;   s
0000020    7263    7079    0074    0000    0008    0000    0000    0001
          c   r   y   p   t  \0  \0  \0  \b  \0  \0  \0  \0  \0 001  \0
0000040    0000    0001    0000    0020    0000    0000    0000    a86f
         \0  \0 001  \0  \0  \0      \0  \0  \0  \0  \0  \0  \0   o 250
0000060    eac9    f71c    a592    8034    2f04    a2cb    c19e    78db
        311 352 034 367 222 245   4 200 004   / 313 242 236 301 333   x
0000100    e526    e951    1548    6c59    8a1e    beaf    db19    c7ff
          & 345   Q 351   H 025   Y   l 036 212 257 276 031 333 377 307
      
$ file encdir/cryfs.config
encdir/cryfs.config: data
$ od -xc encdir/cryfs.config|head
0000000    7263    6679    2e73    6f63    666e    6769    303b    733b
          c   r   y   f   s   .   c   o   n   f   i   g   ;   0   ;   s
0000020    7263    7079    0074    0000    0008    0000    0000    0001
          c   r   y   p   t  \0  \0  \0  \b  \0  \0  \0  \0  \0 001  \0
0000040    0000    0001    0000    0020    0000    0000    0000    a86f
         \0  \0 001  \0  \0  \0      \0  \0  \0  \0  \0  \0  \0   o 250
0000060    eac9    f71c    a592    8034    2f04    a2cb    c19e    78db
        311 352 034 367 222 245   4 200 004   / 313 242 236 301 333   x
0000100    e526    e951    1548    6c59    8a1e    beaf    db19    c7ff
          & 345   Q 351   H 025   Y   l 036 212 257 276 031 333 377 307
  
$ file encdir/cryfs.config
encdir/cryfs.config: data
$ od -xc encdir/cryfs.config|head
0000000    7263    6679    2e73    6f63    666e    6769    303b    733b
          c   r   y   f   s   .   c   o   n   f   i   g   ;   0   ;   s
0000020    7263    7079    0074    0000    0008    0000    0000    0001
          c   r   y   p   t  \0  \0  \0  \b  \0  \0  \0  \0  \0 001  \0
0000040    0000    0001    0000    0020    0000    0000    0000    a86f
         \0  \0 001  \0  \0  \0      \0  \0  \0  \0  \0  \0  \0   o 250
0000060    eac9    f71c    a592    8034    2f04    a2cb    c19e    78db
        311 352 034 367 222 245   4 200 004   / 313 242 236 301 333   x
0000100    e526    e951    1548    6c59    8a1e    beaf    db19    c7ff
          & 345   Q 351   H 025   Y   l 036 212 257 276 031 333 377 307
  
$ file encdir/cryfs.config
encdir/cryfs.config: data
$ od -xc encdir/cryfs.config|head
0000000    7263    6679    2e73    6f63    666e    6769    303b    733b
          c   r   y   f   s   .   c   o   n   f   i   g   ;   0   ;   s
0000020    7263    7079    0074    0000    0008    0000    0000    0001
          c   r   y   p   t  \0  \0  \0  \b  \0  \0  \0  \0  \0 001  \0
0000040    0000    0001    0000    0020    0000    0000    0000    a86f
         \0  \0 001  \0  \0  \0      \0  \0  \0  \0  \0  \0  \0   o 250
0000060    eac9    f71c    a592    8034    2f04    a2cb    c19e    78db
        311 352 034 367 222 245   4 200 004   / 313 242 236 301 333   x
0000100    e526    e951    1548    6c59    8a1e    beaf    db19    c7ff
          & 345   Q 351   H 025   Y   l 036 212 257 276 031 333 377 307
  
$ file encdir/cryfs.config
encdir/cryfs.config: data
$ od -xc encdir/cryfs.config|head
0000000    7263    6679    2e73    6f63    666e    6769    303b    733b
          c   r   y   f   s   .   c   o   n   f   i   g   ;   0   ;   s
0000020    7263    7079    0074    0000    0008    0000    0000    0001
          c   r   y   p   t  \0  \0  \0  \b  \0  \0  \0  \0  \0 001  \0
0000040    0000    0001    0000    0020    0000    0000    0000    a86f
         \0  \0 001  \0  \0  \0      \0  \0  \0  \0  \0  \0  \0   o 250
0000060    eac9    f71c    a592    8034    2f04    a2cb    c19e    78db
        311 352 034 367 222 245   4 200 004   / 313 242 236 301 333   x
0000100    e526    e951    1548    6c59    8a1e    beaf    db19    c7ff
          & 345   Q 351   H 025   Y   l 036 212 257 276 031 333 377 307
  
$ file encdir/cryfs.config
encdir/cryfs.config: data
$ od -xc encdir/cryfs.config|head
0000000    7263    6679    2e73    6f63    666e    6769    303b    733b
          c   r   y   f   s   .   c   o   n   f   i   g   ;   0   ;   s
0000020    7263    7079    0074    0000    0008    0000    0000    0001
          c   r   y   p   t  \0  \0  \0  \b  \0  \0  \0  \0  \0 001  \0
0000040    0000    0001    0000    0020    0000    0000    0000    a86f
         \0  \0 001  \0  \0  \0      \0  \0  \0  \0  \0  \0  \0   o 250
0000060    eac9    f71c    a592    8034    2f04    a2cb    c19e    78db
        311 352 034 367 222 245   4 200 004   / 313 242 236 301 333   x
0000100    e526    e951    1548    6c59    8a1e    beaf    db19    c7ff
          & 345   Q 351   H 025   Y   l 036 212 257 276 031 333 377 307
  
$ file encdir/cryfs.config
encdir/cryfs.config: data
$ od -xc encdir/cryfs.config|head
0000000    7263    6679    2e73    6f63    666e    6769    303b    733b
          c   r   y   f   s   .   c   o   n   f   i   g   ;   0   ;   s
0000020    7263    7079    0074    0000    0008    0000    0000    0001
          c   r   y   p   t  \0  \0  \0  \b  \0  \0  \0  \0  \0 001  \0
0000040    0000    0001    0000    0020    0000    0000    0000    a86f
         \0  \0 001  \0  \0  \0      \0  \0  \0  \0  \0  \0  \0   o 250
0000060    eac9    f71c    a592    8034    2f04    a2cb    c19e    78db
        311 352 034 367 222 245   4 200 004   / 313 242 236 301 333   x
0000100    e526    e951    1548    6c59    8a1e    beaf    db19    c7ff
          & 345   Q 351   H 025   Y   l 036 212 257 276 031 333 377 307
  
$ file encdir/cryfs.config
encdir/cryfs.config: data
$ od -xc encdir/cryfs.config|head
0000000    7263    6679    2e73    6f63    666e    6769    303b    733b
          c   r   y   f   s   .   c   o   n   f   i   g   ;   0   ;   s
0000020    7263    7079    0074    0000    0008    0000    0000    0001
          c   r   y   p   t  \0  \0  \0  \b  \0  \0  \0  \0  \0 001  \0
0000040    0000    0001    0000    0020    0000    0000    0000    a86f
         \0  \0 001  \0  \0  \0      \0  \0  \0  \0  \0  \0  \0   o 250
0000060    eac9    f71c    a592    8034    2f04    a2cb    c19e    78db
        311 352 034 367 222 245   4 200 004   / 313 242 236 301 333   x
0000100    e526    e951    1548    6c59    8a1e    beaf    db19    c7ff
          & 345   Q 351   H 025   Y   l 036 212 257 276 031 333 377 307
   o 250
0000060    eac9    f71c    a592    8034    2f04    a2cb    c19e    78db
        311 352 034 367 222 245   4 200 004   / 313 242 236 301 333   x
0000100    e526    e951    1548    6c59    8a1e    beaf    db19    c7ff
          & 345   Q 351   H 025   Y   l 036 212 257 276 031 333 377 307

タイムスタンプは残らないようです.これはちょっと困る.

$ cryfs encdir mnt
$ cd mnt
$ touch a b c d e f
touch: `a' のタイムスタンプを設定中です: サポートされていない操作です
touch: `b' のタイムスタンプを設定中です: サポートされていない操作です
touch: `c' のタイムスタンプを設定中です: サポートされていない操作です
touch: `d' のタイムスタンプを設定中です: サポートされていない操作です
touch: `e' のタイムスタンプを設定中です: サポートされていない操作です
touch: `f' のタイムスタンプを設定中です: サポートされていない操作です
$ ls -lA
合計 0
-rw-rw-r-- 1 mk mk 0  1月  1  1970 a
-rw-rw-r-- 1 mk mk 0  1月  1  1970 b
-rw-rw-r-- 1 mk mk 0  1月  1  1970 c
-rw-rw-r-- 1 mk mk 0  1月  1  1970 d
-rw-rw-r-- 1 mk mk 0  1月  1  1970 e
-rw-rw-r-- 1 mk mk 0  1月  1  1970 f

10MBのファイルを作ってみると32kくらいで分割されたファイル群になっているようです.

$ dd if=/dev/zero of=mnt/10M.dd bs=1M count=10
$ ls -lA encdir mnt
 
encdir:
合計 11848
-rw-rw-r-- 1 mk mk 32816  2月  7 04:12 0015B9E50D707A660AC59BF6ABA4588B
-rw-rw-r-- 1 mk mk 32816  2月  7 04:12 00AB6551CD86FE4A5129ED330C86B7ED
-rw-rw-r-- 1 mk mk 32816  2月  7 04:12 00BBCEFD0A4150AD15842F356E184F94
-rw-rw-r-- 1 mk mk 32816  2月  7 04:12 00F8B1CCE5770E2D3DC4C47FA0583B80
-rw-rw-r-- 1 mk mk 32816  2月  7 04:12 048860D118BFD0F43A86B8F858456965
-rw-rw-r-- 1 mk mk 32816  2月  7 04:12 049D06A30EF07D80988B6D948E72250A
-rw-rw-r-- 1 mk mk 32816  2月  7 04:12 04FF722DB4ADFBD7F567966EC1244BD1
-rw-rw-r-- 1 mk mk 32816  2月  7 04:12 0599D02B12B1C9EAB554525482531D5F
-rw-rw-r-- 1 mk mk 32816  2月  7 04:12 05D56C792B76894E7194FB28A02F0FAB
-rw-rw-r-- 1 mk mk 32816  2月  7 04:12 06048941FF5F7E185BE3372400580A2C
-rw-rw-r-- 1 mk mk 32816  2月  7 04:12 077FE2E17E29826C6AB407578C5312CB
〜中略〜
-rw-rw-r-- 1 mk mk 32816  2月  7 04:12 FE5879AFA516A816008C9ED4AEB847B5
-rw-rw-r-- 1 mk mk 32816  2月  7 04:12 FE6BB5A582CF60F7329645CF3FAB365B
-rw-rw-r-- 1 mk mk 32816  2月  7 04:12 FFD97AF585CD8DEE23C722076FF8CB94
-rw-rw-r-- 1 mk mk 32816  2月  7 04:12 FFFA9CCA10C0F7A455DA18B109024AA7
-rw-rw-r-- 1 mk mk  1134  2月  7 04:08 cryfs.config
 
mnt:
合計 10240
-rw-rw-r-- 1 mk mk 10485760  1月  1  1970 10M.dd
-rw-rw-r-- 1 mk mk        0  1月  1  1970 a
-rw-rw-r-- 1 mk mk        0  1月  1  1970 b
-rw-rw-r-- 1 mk mk        0  1月  1  1970 c
-rw-rw-r-- 1 mk mk        0  1月  1  1970 d
-rw-rw-r-- 1 mk mk        0  1月  1  1970 e
-rw-rw-r-- 1 mk mk        0  1月  1  1970 f
$ rm mnt/10M.dd

ディレクトリを掘ってもファイルとして保存されるので覗かれてもわかりません.

$ mkdir mnt/dir
$ echo hoge > mnt/dir/hoge
$ ls -lA  encdir/
合計 328
-rw-rw-r-- 1 mk mk 32816  2月  7 04:11 0A332D1A5E0B5C36C9FBCEAB81E6320A
-rw-rw-r-- 1 mk mk 32816  2月  7 04:38 0C2B03AEBC6D01C0AAB861907CE361A6
-rw-rw-r-- 1 mk mk 32816  2月  7 04:11 40C765A5F1D681FFAEC781502836F444
-rw-rw-r-- 1 mk mk 32816  2月  7 04:11 64CF16B73827485463657F2A6928346D
-rw-rw-r-- 1 mk mk 32816  2月  7 04:11 78AA36DEE59FE330861A6D9B1218B16E
-rw-rw-r-- 1 mk mk 32816  2月  7 04:40 A9A48DEB85E2619C2ECBF7490BF3F8C9
-rw-rw-r-- 1 mk mk 32816  2月  7 04:11 DB99D4AAAAA21302B400DA1F9E370EA4
-rw-rw-r-- 1 mk mk 32816  2月  7 04:40 E5FA0435A166231035B54AC0E4723D83
-rw-rw-r-- 1 mk mk 32816  2月  7 04:11 F9589623B409B2142141F79614A865BF
-rw-rw-r-- 1 mk mk  1134  2月  7 04:08 cryfs.config
$ rm mnt/*
rm: `mnt/dir' を削除できません: ディレクトリです
$ ls -lA  encdir
合計 112
-rw-rw-r-- 1 mk mk 32816  2月  7 04:41 0C2B03AEBC6D01C0AAB861907CE361A6
-rw-rw-r-- 1 mk mk 32816  2月  7 04:40 A9A48DEB85E2619C2ECBF7490BF3F8C9
-rw-rw-r-- 1 mk mk 32816  2月  7 04:40 E5FA0435A166231035B54AC0E4723D83
-rw-rw-r-- 1 mk mk  1134  2月  7 04:08 cryfs.config

EncFSはファイル名自体にファイル名のメタデータを含むので利用できるファイル名長が短くなりますが,CryFSだとファイル中にメタデータを含むので元ファイルシステムの最大長のファイル名が利用できるようです.

$ touch mnt/012345678890123456788901234567889012345678890123456788901234567889012345678890123456788901234567889012345678890123456788901234567889012345678890123456788901234567889012345678890123456788901234567889012345678890123456788901234567889012345678890123456789012
$ ls -lA encdir
合計 40
-rw-rw-r-- 1 mk mk 32816  2月  7 04:51 0C2B03AEBC6D01C0AAB861907CE361A6
-rw-rw-r-- 1 mk mk  1134  2月  7 04:08 cryfs.config

パーミッションの変更やオーナーやグループを変更してもメタデータ内に吸収されるようです.

$ chmod 777 mnt/012345678890123456788901234567889012345678890123456788901234567889012345678890123456788901234567889012345678890123456788901234567889012345678890123456788901234567889012345678890123456788901234567889012345678890123456788901234567889012345678890123456789012
$ sudo chown www-data.www-data mnt/012345678890123456788901234567889012345678890123456788901234567889012345678890123456788901234567889012345678890123456788901234567889012345678890123456788901234567889012345678890123456788901234567889012345678890123456788901234567889012345678890123456789012
$ ls -lA encdir mnt
encdir:
合計 40
-rw-rw-r-- 1 mk mk 32816  2月  7 04:51 0C2B03AEBC6D01C0AAB861907CE361A6
-rw-rw-r-- 1 mk mk  1134  2月  7 04:08 cryfs.config
 
mnt:
合計 0
-rwxrwxrwx 1 www-data www-data 0  2月  7 04:53 012345678890123456788901234567889012345678890123456788901234567889012345678890123456788901234567889012345678890123456788901234567889012345678890123456788901234567889012345678890123456788901234567889012345678890123456788901234567889012345678890123456789012

オプションを少し見てみます.
--show-ciphersで利用できる暗号が確認できます.規定値ではaes-256-gcmのようです.

$ fusermount -u mnt
$ ls -lA mnt
合計 0
$ cryfs --show-ciphers
CryFS Version 0.8.5
WARNING! This version is not considered stable. Please backup your data frequently!
 
aes-256-gcm
aes-256-cfb
aes-128-gcm
aes-128-cfb
twofish-256-gcm
twofish-256-cfb
twofish-128-gcm
twofish-128-cfb
serpent-256-gcm
serpent-256-cfb
serpent-128-gcm
serpent-128-cfb
cast-256-gcm
cast-256-cfb
mars-448-gcm
mars-448-cfb
mars-256-gcm
mars-256-cfb
mars-128-gcm
mars-128-cfb

--extpassオプションで外部のプログラムからパスワードが受け取れます.

$ cat << __EOF__ > pass
#!/bin/bash
echo 'passwd'
__EOF__
$ chmod +x pass
$ ./pass
passwd
$ cryfs --extpass ./pass encdir mnt
CryFS Version 0.8.5
WARNING! This version is not considered stable. Please backup your data frequently!
 
Loading config file...done
 
Mounting filesystem. To unmount, call:
$ fusermount -u "/tmp/mnt"
 

--unmount-idleで一定時間利用されていない時に自動アンマウントされます.

$ cryfs --extpass ./pass --unmount-idle 1 encdir mnt

1分後

$ ls -l mnt
合計 0

今のところベータで未実装の昨日もありますし,こういう怖いメッセージも出力される状態です.

WARNING! This version is not considered stable. Please backup your data frequently!

#そういえば数年前nilfs2もmount時に似たような警告出してましたね

mount.nilfs2: WARNING! - The NILFS on-disk format may change at any time.
mount.nilfs2: WARNING! - Do not place critical data on a NILFS filesystem.

今はもう何も言われない :)

[1109102.058384] NILFS version 2 loaded
[1109102.077659] segctord starting. Construction interval = 5 seconds, CP frequency < 30 seconds

実装が済んで安定すればEncFSの競合として便利に使えそうな感じです.
興味のある方はCryFSのページのフォームでメールアドレスを登録しておくといいかもしれません.

Let us notify you when CryFS is stable!


暗号化FS EncFS Windows 移植版の EncFS4Winy を試す

以前のエントリの 「暗号化ファイルシステム EncFS の Reverse mode を試す | matoken’s meme」のコメントで EncFS の Windows移植版の EncFS4Winy というものを教えてもらいました.

EncFS の移植 & GUI で簡単にマウントしたりできるもののようです.

今回は VirtualBox 内の Windows 8.1 Professional 64bit 版に検証時の最新版の EncFS4WinyInstall_1.7.5_2.exe を試しました.手元で計算した HASH は以下の通り.

% sha256sum EncFS4WinyInstall_1.7.5_2.exe
fd8c5109876730eb1a0395e9d85a81007655fc0ae135f63adc30e3b34da84315  EncFS4WinyInstall_1.7.5_2.exe
% sha512sum EncFS4WinyInstall_1.7.5_2.exe
c722c41d99944ccc247ac8b3859a2a3f3cfc2e467c814b865adda57d767837ec0561c23725b5d3f79a03babcce8137b3553291aa498a20eedcd46fb00504cc15  EncFS4WinyInstall_1.7.5_2.exe

実行するとインストーラが起動してよきに計らってくれます.
早速起動してみると,「コンピューターに LIBEAY32.dll がないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてみて下さい。」 と言われて起動出来ませんでした.

Gyazo

LIBEAY32.dll は何者だろうと検索すると OpenSSL のもののようです.OpenSSL 本家ではバイナリを配布してないので Vector/窓の杜などで探しますが見当たりません.ReadMe_Windows.txt にも書かれている以下があちこちから参照されているし最新のバージョンに追従しているようですが,個人の人の運用しているページのようで配布物のハッシュや署名なども見当たらず.Announcement ML も登録できずでちょっと不安.皆さん自分でビルドされてるんですかね?(それとも他にいい配布元がある?)

仮想マシン環境なのでスナップショットを取ってあるので後で巻き戻すことにしてひとまずここから OpenSSL を導入しました.
すると EncFS は動作するようになりました.

<追記>
OpenSSL ライブラリが同梱された EncFS4Winy 1.7.5_3 がリリースされました.この辺りの手順は必要なくなったはずです.

</追記>

C:\Program Files (x86)\EncFS\EncFS4Winy>.\encfs.exe --version
encfs version 1.7.4
 
C:\Program Files (x86)\EncFS\EncFS4Winy>.\encfs.exe -h
.\encfs.exe: invalid option -- h
05:57:06 (..\encfs\main.cpp:354) Missing one or more arguments, aborting.
Build: encfs version 1.7.4
 
Usage: .\encfs.exe [options] rootDir mountPoint [-- [FUSE Mount Options]]
 
Common Options:
  -H                    show optional FUSE Mount Options
  -s                    disable multithreaded operation
  -f                    run in foreground (don't spawn daemon).
                        Error messages will be sent to stderr
                        instead of syslog.
  -v, --verbose         verbose: output encfs debug messages
  -i, --idle=MINUTES    Auto unmount after period of inactivity
  --anykey              Do not verify correct key is being used
  --forcedecode         decode data even if an error is detected
                        (for filesystems using MAC block headers)
  --public              act as a typical multi-user filesystem
                        (encfs must be run as root)
  --reverse             reverse encryption
 
Example, to mount at c:\plain with raw storage in c:\crypt :
    encfs c:\crypt c:\plain
 
For more information, see the man page encfs(1)
 

早速 Linux で作った暗号化ファイルシステムをマウントしてみると以下のようにエラーとなってしまいました.

C:\Program Files (x86)\EncFS\EncFS4Winy>.\encfs.exe F:\tmp\encfs_c I: EncFS Password:
06:53:02 (..\encfs\FileUtils.cpp:1694) Unable to find nameio interface nameio/block, version 4:0:0
The requested filename coding interface is not available
 

ちょっと調べると,EncFS 領域作成時のファイル名エンコードのオプションで Blick32 を指定しているとこうなるようです.EncFS4Winy で利用している EncFS 1.7.4 にはこのオプションがありません.

The following filename encoding algorithms are available:
1. Block : Block encoding, hides file name size somewhat
2. Null : No encryption of filenames
3. Stream : Stream encoding, keeps filenames as short as possible
 
Enter the number corresponding to your choice:

Linux 側で暗号化ファイルシステム作成時に Block を指定してみたところ EncFS4Winy でマウントできました.Windows 側で作成した領域の Linux でのマウントもOK でした.EncFS4Winy の EncFS バージョンが追従するまでは Linux 側で注意する必要があるようです.
ファイル名については UTF-8 であれば相互問題ありませんでした.

ということで,今度は GUI を試してみます.マウント元の暗号化フォルダと,マウント先のドライブレター,パスワードと入力していくとマウントできました.(コマンドプロンプトからの実行時にはマウント先はドライブレターだけでなくパスも指定可能)

GyazoGyazoGyazo

マウント元の暗号化フォルダに空のものを指定すると新しい EncFS の暗号化領域が作成できます.オプションで paranoia mode が指定できます.

Gyazo

動作は Linux の Cryptkeeper とほぼ同じですね.違いは EncFS4Winy では暗号化FS 作成時のオプションに paranoia mode があって,Cryptkeeper のマウントオプションに自動アンマウントオプションがあるくらいでしょうか.

GitHUB などで検索してみると Mac版の EncFS も複数出てきました.何年も更新されていないものとかもありますが GUI のあるものもあるようです.今手元に環境がないので試していませんがうまく動くようならマルチプラットホームで利用できるかもしれませんね.

暗号化ファイルシステム EncFS の Reverse mode を試す

IMGP5154

EncFS という恐らく Linux のみで動作する暗号化ファイルシステムがあります.

<追記>
コメントで Windows の移植版を教えていただきました :)
EncFS4Winy ファイル暗号化 « 座間ソフト
</追記>

これは FUSE 経由で通常のファイルシステムの上に暗号化ファイルシステムを作成するもので,設定した暗号化領域のディレクトリを Encfs でマウントすることで透過的に暗号化ファイルシステムが利用できます.ただし,ファイル名暗号化時にはメタデータをファイル名に含めるためファイル名長が短く制限されるなどの制限はあります.このあたりは eCryptFS と同じですね.私はオンラインストレージ領域などに利用しています.(同期がファイル単位の場合 EncFS はお勧め)

オプションを眺めていて EncFS コマンドの --reverse というオプションに気づきました.

–reverse reverse encryption

Reverse mode
 
encfs --reverse provides an encrypted view of an unencrypted folder. This enables encrypted remote backups using standard tools like rsync.

この EncFS の Reverse mode はその名の通り,通常の非暗号化領域をマウントして EncFS による暗号化領域を提供してくれるようです.例えば rsync のバックアップ時に利用して,バックアップ経路からバックアップ先まで暗号化すると行ったことが出来ます.(タイムスタンプやパーミッションはそのままなので rsync の差分バックアップも問題なく行える)

利用例

初回起動時は要設定ですが,2回目からはパスワードの入力だけでOK です.

  • マウント対象: ~/
  • マウントポイント: /tmp/encfs
% mkdir -m 700 /tmp/encfs
% encfs -i 10 --reverse ~/ /tmp/encfs
新しい暗号化ボリュームを作成します。
Please choose from one of the following options:
 enter "x" for expert configuration mode,
 enter "p" for pre-configured paranoia mode,
 anything else, or an empty line will select standard mode.
?> x
 
手動設定モードが選択されました
以下の暗号アルゴリズムが使用できる :
1. AES : 16 byte block cipher
 -- 鍵長 128 から 256 ビットをサポート
 -- ブロックサイズ 64 から 4096 バイトをサポート
2. Blowfish : 8 byte block cipher
 -- 鍵長 128 から 256 ビットをサポート
 -- ブロックサイズ 64 から 4096 バイトをサポート
 
使用するアルゴリズムの番号を入力してください: 1
 
アルゴリズム "AES" が選択されました
 
鍵サイズをビット単位で指定してください。選択された
暗号アルゴリズムは 128 から 256 ビット (64 ビット間隔) の
鍵サイズをサポートしています。
例えば:
128, 192, 256
使用する鍵サイズ: 256
 
鍵サイズ 256 ビットを使用します
ブロックサイズをバイト単位で指定してください。選択された
暗号アルゴリズムは 64 から 4096 バイト (16 バイト間隔) の
ブロックサイズをサポートしています。
Enter を押すとデフォルト値 (1024 バイト) を使用します。
 
ファイルシステムブロックサイズ: 4096
 
ファイルシステムブロックサイズ 4096 バイトを使用します
 
以下のファイル名暗号アルゴリズムが使用できます:
1. Block : Block encoding, hides file name size somewhat
2. Block32 : Block encoding with base32 output for case-sensitive systems
3. Null : No encryption of filenames
4. Stream : Stream encoding, keeps filenames as short as possible
 
使用するアルゴリズムの番号を入力してください: 2
 
アルゴリズム "Block32" が選択されました"
 
reverse encryption - chained IV and MAC disabled
Enable per-file initialization vectors?
This adds about 8 bytes per file to the storage requirements.
It should not affect performance except possibly with applications
which rely on block-aligned file io for performance.
y/[n]: y
 
 
設定が完了しました。以下のプロパティのファイルシステムが
作成されます:
ファイルシステム暗号アルゴリズム: "ssl/aes", バージョン 3:0:2
Filename encoding: "nameio/block32", version 4:0:2
鍵サイズ: 256 ビット  
ブロックサイズ: 4096 バイト
Each file contains 8 byte header with unique IV data.
File holes passed through to ciphertext.
 
Now you will need to enter a password for your filesystem.
You will need to remember this password, as there is absolutely
no recovery mechanism.  However, the password can be changed
later using encfsctl.
 
新しい Encfs パスワード:
Encfs パスワードの確認:
% mount |grep -i encfs
encfs on /tmp/encfs type fuse.encfs (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
% ls /tmp/encfs
23GX4BPMMVSWOUUXIQCCX4EGI4BHG
24FEOFMBBK774KOXKO6CD5LVPB2JH
2ANNTH3275PXEFQCTLRIXDUBJFMPG
2B72K7FH3NZDIXX7S6P3FSMNCPIWL
2BX2O7FBGPIMLVQ66GD67O5MRYUJN
2GXZR6YY5C2T66GTHAOTBFDHHURZF
2HRGOCQRQI2FKQU5T4YR7X756KQ37IVWCWDUJIL7U4X5APCL4GH3ITX4QRWIDCLSZRTKWXVUA7WFVWME
2HUXRTPOJQFPEY7G62TCSD6BLXI6J
2JMEPULBHHVQVIOUHT2XEMVLD4BAO
2JTHYUVWCXXNYVAWGY4GIV4HGFMBL5BFRU7SGYGVHIR43ZOLVCEG5BA
2LFQK6EBYEOKU2UQV7F32ATU4XQF2EAOXKL75QXYUG4HKKRIADTIJGD
2NU47TEEVRXUIMWBMKGTPXJUEGCAM
2OI3GILDZS3UAMVQB4TL46DQCREKL
 :

アンマウント

% fusermount -u /tmp/encfs

2回目以降のマウント

% encfs -i 10 --reverse ~/ /tmp/encfs
EncFS パスワード:

問題なく利用できました.
ただ,注意しないといけなさそうな点が1つ.マウント時にパスワードだけでマウントするために暗号化情報を格納したデータの含まれたファイルが作成されるのですが,Reverse mode の場合このファイルも暗号化されてしまうのでこのファイルは別途バックアップを取っておいたほうが良いです.

オプションを覚えていればどうにかなりますがそうでないとオプションを試行錯誤しないといけないと思います.

<追記>
man を見るとマスターキーが含まれているのでこのファイルがなくなると復元できなくなるようです.注意しましょう.

Warning: If you lose the config file, the encrypted file contents are irrecoverably lost. It contains the master key encrypted with your password. Without the master key, recovery is impossible, even if you know the password.

</追記>

このファイルは EncFS 1.8.1 では .encfs6.xml です.(EncFS のバージョンにより数字部分は変わるようです)今回の例では ~/.encfs6.xml を別途バックアップします.

EncFS は他の暗号化ファイルシステムより弱い気がしていますが,この辺の柔軟さはいいですね.
出来れば他の OS にも対応してくれると利用範囲が広がって嬉しいのですが.