ttomb.1 - tomb - the crypto undertaker
 (HTM) git clone git://parazyd.org/tomb.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       ttomb.1 (19383B)
       ---
            1 .TH tomb 1 "April 16, 2017" "tomb"
            2 
            3 .SH NAME
            4 Tomb \- the Crypto Undertaker
            5 
            6 .SH SYNOPSIS
            7 .B
            8 .IP "tomb [options] command [arguments]"
            9 
           10 .SH DESCRIPTION
           11 
           12 Tomb is an application to manage the creation and access of encrypted
           13 storage files: it can be operated from commandline and it can
           14 integrate with a user's graphical desktop.
           15 
           16 Tomb generates encrypted storage files to be opened and closed using
           17 their associated keys, which are also protected with a password chosen
           18 by the user. To create, open and close tombs a user will need super
           19 user rights to execute the tomb commandline utility.
           20 
           21 A tomb is like a locked folder that can be safely transported and
           22 hidden in a filesystem; it encourages users to keep their keys
           23 separate from tombs, for instance keeping a tomb file on your computer
           24 harddisk and its key file on a USB stick.
           25 
           26 
           27 .SH COMMANDS
           28 
           29 .B
           30 .IP "dig"
           31 Generates a file that can be used as a tomb and will occupy as much
           32 space as its desired initial size, the unlocked \fI.tomb\fR file can
           33 then be locked using a \fIkey\fR. It takes a mandatory \fI-s\fR option
           34 which is the size in megabytes (MiB). Tombs are digged using random
           35 data gathered from a non-blocking source (/dev/urandom).
           36 
           37 .B
           38 .IP "forge"
           39 Creates a new \fIkey\fR and prompts the user for a \fIpassword\fR to
           40 protect its usage using symmetric encryption. This operation uses
           41 random data from a blocking source (/dev/random) and it may take long
           42 when run on a server with low entropy; to switch using a non-blocking
           43 source the \fI--use-urandom\fR flag can be used. The \fI-g\fR option
           44 switches on the use of a GPG key instead of a password (asymmetric
           45 encryption), then the \fI-r\fR option indicates the recipient key;
           46 more recipient GPG ids can be indicated (comma separated). The default
           47 cipher to protect the key is AES256, a custom one can be specified
           48 using the \fI-o\fR option, for a list of supported ciphers use
           49 \fI-v\fR. For additional protection against dictionary attacks on
           50 keys, the \fI--kdf\fR option can be used when forging a key, making
           51 sure that the \fItomb-kdb-pbkdf2\fR binaries in \fIextras/kdf\fR were
           52 compiled and installed on the system.
           53 
           54 .B
           55 .IP "lock"
           56 Initializes and locks an empty tomb (made with \fIdig\fR) using a key
           57 (made with \fIforge\fR), making it ready for usage. After this
           58 operation, the tomb can only be opened in possession of the key and
           59 knowing its password. As in any other command requiring a key, the
           60 option \fI-k\fR should be used to specify a key file; in case of
           61 encryption to GPG recipients the \fI-g\fR flag should be used followed
           62 by \fI-r\fR and the recipient's secret GPG key id.  The \fI-o\fR
           63 option can be used to specify the cipher specification: default is
           64 "aes-xts-plain64:sha256", old versions of Tomb used
           65 "aes-cbc-essiv:sha256".  If you are looking for something exotic, also
           66 try "serpent-xts-plain64".  More options may be found in cryptsetup(8)
           67 and Linux documentation.  This operation requires root privileges to
           68 loopback mount, format the tomb (using LUKS and Ext4), then set the
           69 key in its first LUKS slot.
           70 
           71 .B
           72 .IP "open"
           73 Opens an existing \fItomb file\fR (first argument) using a key
           74 (\fI-k\fR) which can also be an \fIjpeg image\fR (see
           75 \fIbury\fR/\fIexhume\fR). If a second argument is given it will
           76 indicate the \fImountpoint\fR where the tomb should be made
           77 accessible, else the tomb is mounted in a directory inside /media (if
           78 not available it uses /run/media/$USER).  The option \fI-o\fR can be
           79 used to pass mount(8) options (default: rw,noatime,nodev). The
           80 \fI-g\fR option is needed when using GPG encryption to recipients.
           81 
           82 .B
           83 .IP "list"
           84 List all the tombs found open, including information about the time
           85 they were opened and the hooks that they mounted. If the first
           86 argument is present, then shows only the tomb named that way or
           87 returns an error if it's not found. If the option
           88 \fI--get-mountpoint\fR is used then print a simple list of currently
           89 open tomb mountpoint paths.
           90 
           91 .B
           92 .IP "index"
           93 Creates or updates the search indexes of all tombs currently open:
           94 enables use of the \fIsearch\fR command using simple word patterns on
           95 file names. Indexes are created using mlocate's updatedb(8) and
           96 swish-e(1) if they are found on the system. Indexes allow to search
           97 very fast for filenames and contents inside a tomb, they are stored
           98 inside it and are not accessible if the Tomb is closed. To avoid
           99 indexing a specific tomb simply touch a \fI.noindex\fR file in it.
          100 
          101 .B
          102 .IP "search"
          103 Takes any string as argument and searches for them through all tombs
          104 currently open and previously indexed using the \fIindex\fR command.
          105 The search matches filenames if mlocate is installed and then also
          106 file contents if swish++ is present on the system, results are listed
          107 on the console.
          108 
          109 .B
          110 .IP "close"
          111 Closes a currently open tomb.  If more tombs are open, the first
          112 argument should be used to specify the name of the tomb to be closed,
          113 or \fIall\fR to close all currently open tombs. This command fails if
          114 the tomb is in use by running processes (to force close, see
          115 \fIslam\fR below).
          116 
          117 .B
          118 .IP "slam"
          119 Closes a tomb like the command \fIclose\fR does, but it doesn't fail
          120 even if the tomb is in use by other application processes: it looks
          121 for and closes each of them (in order: TERM, HUP, KILL). This command may
          122 provoke unsaved data loss, but assists users to face surprise
          123 situations. It requires \fIlsof\fR else it falls back to \fIclose\fR.
          124 
          125 
          126 .B
          127 .IP "passwd"
          128 Changes the password protecting a key file specified using
          129 \fI-k\fR. With keys encrypted for GPG recipients use \fI-g\fR followed
          130 by \fI-r\fR to indicate the new recipient key, or a comma separated
          131 list.. The user will need to know the key's current password, or
          132 possess at least one of the current recipients GPG secret keys,
          133 because the key contents will be decoded and reencoded using the new
          134 passwords or keys. If the key file is broken (missing headers) this
          135 function also attempts its recovery.
          136 
          137 .B
          138 .IP "setkey"
          139 Changes the key file that locks a tomb, substituting the old one with
          140 a new one. Both the old and the new key files are needed for this
          141 operation and their passwords or GPG recipient(s) secret keys must be
          142 available. The new key must be specified using the \fI-k\fR option,
          143 the first argument should be the old key and the second and last
          144 argument the tomb file. Use the \fI-g\fR option to unlock the tomb
          145 with a GPG key, the \fI-r\fR to indicate the recipient or a comma
          146 separated list for more than one recipient.
          147 
          148 .B
          149 .IP "resize"
          150 Increase the size of a tomb file to the amount specified by the
          151 \fI-s\fR option, which is the new size in megabytes (MiB). Full access to the tomb using
          152 a key (\fI-k\fR) and its password is required. Tombs can only grow and
          153 can never be made smaller. This command makes use of the cryptsetup(8)
          154 resize feature and the resize2fs command: its much more practical than
          155 creating a new tomb and moving everything into it.
          156 
          157 .B
          158 .IP "engrave"
          159 This command transforms a tomb key into an image that can be printed
          160 on paper and physically stored as backup, i.e. hidden in a book. It
          161 Renders a QRCode of the tomb key, still protected by its password: a
          162 PNG image (extension \fI.qr.png\fR) will be created in the current
          163 directory and can be later printed (fits an A4 or Letter format).  To
          164 recover an engraved key one can use any QRCode reader on a smartphone:
          165 save it into a file and then use that file as a key (\fI-k\fR).
          166 
          167 .B
          168 .IP "bury"
          169 Hides a tomb key (\fI-k\fR) inside a \fIjpeg image\fR (first argument)
          170 using \fIsteganography\fR: the image will change in a way that cannot
          171 be noticed by human eye and hardly detected by data analysis. This
          172 option is useful to backup tomb keys in unsuspected places; it depends
          173 from the availability of \fIsteghide\fR. Use the \fI-g\fR flag and
          174 \fI-r\fR option followed by recipient id to use GPG asymmetric
          175 encryption.
          176 
          177 .B
          178 .IP "exhume"
          179 This command recovers from jpeg images the keys that were previously
          180 hidden into them using \fIbury\fR.  Exhume requires a key filename
          181 (\fI-k\fR) and a \fIjpeg image\fR file (first argument) known to be
          182 containing a key. If the right key password is given, the key will be
          183 exhumed. If the password is not known, it is very hard to verify if a
          184 key is buried in any image or not.
          185 
          186 .SH OPTIONS
          187 .B
          188 .B
          189 .IP "-k \fI<keyfile>\fR"
          190 For all operations requiring a key, this option specifies the location
          191 of the key file to use. Arguments can also be \fIjpeg image\fR files
          192 where keys have been hidden using the \fIbury\fR command, or text
          193 files retrieved from \fIengraved\fR QR codes. If the \fIkeyfile\fR
          194 argument is "-" (dash), Tomb will read the key from stdin (blocking).
          195 .B
          196 .IP "-n"
          197 Skip processing of post-hooks and bind-hooks if found inside the tomb.
          198 See the \fIHOOKS\fR section in this manual for more information.
          199 .B
          200 .IP "-o"
          201 Manually specify mount options to be used when opening a tomb instead
          202 of the default \fIrw,noatime,nodev\fR, i.e. to mount a tomb read-only
          203 (ro) to prevent any modification of its data. Can also be used to
          204 change the symmetric encryption algorithm for keys during \fIforge\fR
          205 operations (default \fIAES256\fR) or the LUKS encryption method during
          206 \fIlock\fR operations (default \fIaes-xts-plain64:sha256\fR).
          207 .B
          208 .IP "-f"
          209 Force flag, currently used to override swap checks, might be
          210 overriding more wimpy behaviours in future, but make sure you know
          211 what you are doing if you force an operation.
          212 .B
          213 .IP "-s \fI<MBytes>\fR"
          214 When digging or resizing a tomb, this option must be used to specify
          215 the \fIsize\fR of the new file to be created. Units are megabytes (MiB).
          216 .B
          217 .IP "-g"
          218 Tell tomb to use a asymmetric GnuPG key encryption instead of a
          219 symmetric passphrase to protect a tomb key. This option can be followed by \fI-r\fR when the command needs to specify recipient(s).
          220 .B
          221 .IP "-r \fI<gpg_id>[,<gpg_id2>]\fR"
          222 Provide a new set of recipient(s) to encrypt a tomb key. \fIgpg_ids\fR
          223 can be one or more GPG key ID, comma separated.
          224 .B
          225 .IP "--kdf \fI<itertime>\fR"
          226 Activate the KDF feature against dictionary attacks when creating a
          227 key: forces a delay of \fI<itertime>\fR times every time this key is
          228 used.  The actual time to wait depends on the CPU speed of the
          229 computer where the key is used.  Using 5 or 10 is a sane amount for
          230 modern computers, the value is multiplied by 1 million.
          231 .B
          232 .IP "-h"
          233 Display a help text and quit.
          234 .B
          235 .IP "-v"
          236 Display version and quit.
          237 .B
          238 .IP "-q"
          239 Run more quietly
          240 .B
          241 .IP "-D"
          242 Print more information while running, for debugging purposes
          243 
          244 .SH DEV MODE
          245 .B
          246 .IP "--no-color"
          247 Suppress colors in console output (needed for string parsing by
          248 wrappers).
          249 .B
          250 .IP "--unsafe"
          251 Enable using dev-mode arguments, i.e. to pass passwords from
          252 commandline options. This is mostly used needed for execution by
          253 wrappers and testing suite.
          254 .B
          255 .IP "--use-urandom"
          256 Use a non-blocking random source to improve the speed of the
          257 \fIforge\fR command (key generation): tomb uses /dev/urandom instead
          258 of /dev/random. According to some people using the non-blocking source
          259 of Linux kernel doesn't degrades the quality of random.
          260 .B
          261 .IP "--tomb-pwd <string>"
          262 Use string as password when needed on tomb.
          263 .B
          264 .IP "--tomb-old-pwd <string>"
          265 Use string as old password when needed in tomb commands requiring
          266 multiple keys, like \fIpasswd\fR or \fIsetkey\fR.
          267 .B
          268 .IP "-U"
          269 Switch to this user ID when dropping privileges.
          270 .B
          271 .IP "-G"
          272 Switch to this group ID when dropping privileges.
          273 .B
          274 .IP "-T"
          275 Switch to this TTY terminal when dropping privileges.
          276 
          277 .SH HOOKS
          278 
          279 Hooks are special files that can be placed inside the tomb and trigger
          280 actions when it is opened and closed; there are two kinds of such
          281 files: \fIbind-hooks\fR and \fIpost-hooks\fR can be placed in the
          282 base root of the tomb.
          283 
          284 .B
          285 .IP "bind-hooks"
          286 This hook file consists of a simple two column list of files or
          287 directories inside the tomb to be made directly accessible inside the
          288 current user's home directory. Tomb will use the "mount \-o bind"
          289 command to bind locations inside the tomb to locations found in $HOME
          290 so in the first column are indicated paths relative to the tomb and in
          291 the second column are indicated paths relative to $HOME contents, for
          292 example:
          293 .EX
          294   mail          mail
          295   .gnupg        .gnupg
          296   .fmrc         .fetchmailrc
          297   .mozilla      .mozilla
          298 .EE
          299 
          300 .B
          301 .IP "exec-hooks"
          302 This hook file gets executed as user by tomb with the first argument
          303 determining the step of execution: "open" or "close". The exec-hooks
          304 file should be an executable (ELF or shell script) present inside the
          305 Tomb. Tomb executes this hook as user supplying two or more arguments,
          306 the first being the step, followed by the mountpoint of the tomb and,
          307 on close events, its name, loopback device and dev-mapper device
          308 paths.
          309 
          310 .SH PRIVILEGE ESCALATION
          311 
          312 The tomb commandline tool needs to acquire super user rights to
          313 execute most of its operations: to do so it uses sudo(8), while
          314 pinentry(1) is adopted to collect passwords from the user. Tomb
          315 executes as super user only when required.
          316 
          317 To be made available on multi user systems, the superuser execution of
          318 the tomb script can be authorized for users without jeopardizing the
          319 whole system's security: just add such a line to \fI/etc/sudoers\fR:
          320 
          321 .EX
          322         username ALL=NOPASSWD: /usr/local/bin/tomb
          323 .EE
          324 
          325 Password input is handled by the pinentry program: it can be text
          326 based or graphical and is usually configured with a symlink. When
          327 using Tomb in X11 it is better to use a graphical pinentry-gtk2 or
          328 pinentry-qt because it helps preventing keylogging by other X
          329 clients. When using it from a remote ssh connection it might be
          330 necessary to force use of pinentry-curses for instance by unsetting
          331 the DISPLAY environment var.
          332 
          333 
          334 .SH SWAP
          335 
          336 On execution of certain commands Tomb will complain about swap memory
          337 on disk when present and \fIabort if your system has swap
          338 activated\fR. You can disable this behaviour using the
          339 \fI--force\fR. Before doing that, however, you may be interested in
          340 knowing the risks of doing so:
          341 .IP \(bu
          342 During such operations a lack of available memory could cause the swap
          343 to write your secret key on the disk.
          344 .IP \(bu
          345 Even while using an opened tomb, another application could occupy too
          346 much memory so that the swap needs to be used, this way it is possible
          347 that some contents of files contained into the tomb are physically
          348 written on your disk, not encrypted.
          349 .P
          350 
          351 If you don't need swap, execute \fI swapoff -a\fR. If you really need
          352 it, you could make an encrypted swap partition. Tomb doesn't detect if
          353 your swap is encrypted, and will complain anyway.
          354 
          355 .SH DENIABILITY
          356 
          357 The possibility to have an encrypted volume which is invisible and
          358 cannot be detected is called "deniability". The cryptographic layer of
          359 the device mapper in Linux (dm-crypt) does not implement
          360 deniability. Tomb is just a wrapper on top of that and it doesn't add
          361 cryptographic deniability. However a certain way of using tomb can
          362 facilitate a weak sort of deniability outside of the scenario of
          363 seized devices and forensic analysis of files and blocks on disc.
          364 
          365 For instance to eliminate any trace of tomb usage from the shell
          366 history ZSh users can activate the "HISTIGNORESPACE" feature and
          367 prefix all invokations of tomb with a blank space, including two lines
          368 in ".zshrc":
          369 
          370 .EX
          371 export HISTIGNORESPACE=1
          372 alias tomb=' tomb'
          373 .EE
          374 
          375 .SH PASSWORD INPUT
          376 
          377 Tomb uses the external program "pinentry" to let users type the key password into a terminal or a graphical window. This program works in conjunction with "gpg-agent", a daemon running in background to facilitate secret key management with gpg. It is recommended one runs "gpg-agent" launching it from the X session initialization ("~/.xsession" or "~/.xinitrc" files) with this command:
          378 
          379 .EX
          380 eval $(gpg-agent --daemon --write-env-file "${HOME}/.gpg-agent-info")
          381 .EE
          382 
          383 In the future it may become mandatory to run gpg-agent when using tomb.
          384 
          385 .SH SHARE A TOMB
          386 A tomb key can be encrypted with more than one recipient. Therefore, a
          387 tomb can be shared between different users. The recipients are given
          388 using the \fI-r\fR (or/and \fI-R\fR) option and if multiple each GPG
          389 key ID must be separated by a comma (\fI,\fR). Sharing a tomb is a
          390 very sensitive action and the user needs to trust that all the GPG
          391 public keys used are kept safe. If one of them its stolen or lost, it
          392 will be always possible to use it to access the tomb key unless all
          393 its copies are destroyed. The \fI-r\fR option can be used in the tomb
          394 commands: \fIopen\fR, \fIforge\fR \fIsetkey\fR, \fIpasswd\fR,
          395 \fIbury\fR, \fIexhume\fR and \fIresize\fR.
          396 
          397 .SH EXAMPLES
          398 
          399 .IP \(bu
          400 Create a 128MB large "secret" tomb and its keys, then open it:
          401 
          402 .EX
          403         tomb dig -s 128 secret.tomb
          404 
          405         tomb forge secret.tomb.key
          406 
          407         tomb lock secret.tomb -k secret.tomb.key
          408 
          409         tomb open secret.tomb -k secret.tomb.key
          410 .EE
          411 
          412 .IP \(bu
          413 Open a Tomb using the key from a remote SSH shell, without saving any
          414 local copy of it:
          415 
          416 .EX
          417         ssh user@my.shell.net 'cat .secrets/tomb.key' | tomb open secret.tomb -k -
          418 .EE
          419 
          420 .IP \(bu
          421 Open a Tomb on a remote server passing the unencrypted local key on stdin via SSH,
          422 without saving any remote copy of it:
          423 
          424 .EX
          425         gpg -d .secrets/tomb.key | ssh server tomb open secret.tomb -k cleartext --unsafe
          426 .EE
          427 
          428 .IP \(bu
          429 Create a bind hook that places your GnuPG folder inside the tomb, but
          430 makes it reachable from the standard $HOME/.gnupg location every time
          431 the tomb will be opened:
          432 
          433 .EX
          434         tomb open GPG.tomb -k GPG.tomb.key
          435         echo ".gnupg .gnupg" > /media/GPG.tomb/bind-hooks
          436         mv ~/.gnupg /media/GPG.tomb/.gnupg && mkdir ~/.gnupg
          437         tomb close GPG && tomb open GPG.tomb -k GPG.tomb.key
          438 .EE
          439 
          440 .IP \(bu
          441 Script a tomb to launch the Firefox browser every time is opened,
          442 keeping all its profile data inside it:
          443 
          444 .EX
          445         tomb open FOX.tomb -k FOX.tomb.key
          446         cat <<EOF > /media/FOX.tomb/post-hooks
          447 #!/bin/sh
          448 if [ "$1" = "open" ]; then
          449   firefox -no-remote -profile "$2"/firefox-pro &
          450 fi
          451 EOF
          452         chmod +x     /media/FOX.tomb/post-hooks
          453 .EE
          454 
          455 .IP \(bu
          456 Script a tomb to archive Pictures using Shotwell, launching it on open:
          457 
          458 .EX
          459         tomb open Pictures.tomb -k Pictures.tomb.key
          460         cat <<EOF > /media/Pictures.tomb/bind-hooks
          461 Pictures Pictures
          462 EOF
          463         cat <<EOF > /media/Pictures.tomb/post-hooks
          464 #!/bin/sh
          465 if [ "$1" = "open" ]; then
          466   which shotwell > /dev/null
          467   if [ "$?" = "0" ]; then
          468     shotwell -d "$2"/Pictures/.shotwell &
          469   fi
          470 fi
          471 EOF
          472         chmod +x /media/Pictures.tomb/post-hooks
          473 .EE
          474 
          475 .SH BUGS
          476 Please report bugs on the Github issue tracker at
          477 .UR https://github.com/dyne/Tomb/issues
          478 .UE
          479 
          480 One can also try to get in touch with developers via the #dyne chat
          481 channel on \fIhttps://irc.dyne.org\fR.
          482 
          483 .SH COPYING
          484 
          485 This manual is Copyright (c) 2011-2017 by Denis Roio <\fIjaromil@dyne.org\fR>
          486 
          487 This manual includes contributions by Boyska and Hellekin O. Wolf.
          488 
          489 Permission is  granted to copy,  distribute and/or modify  this manual
          490 under the terms of the  GNU Free Documentation License, Version 1.1 or
          491 any  later   version  published  by  the   Free  Software  Foundation.
          492 Permission is granted  to make and distribute verbatim  copies of this
          493 manual page  provided the above  copyright notice and  this permission
          494 notice are preserved on all copies.
          495 
          496 .SH AVAILABILITY
          497 
          498 The most recent version of Tomb sourcecode and up to date
          499 documentation is available for download from its website on
          500 \fIhttps://tomb.dyne.org\fR.
          501 
          502 .SH SEE ALSO
          503 
          504 .B
          505 .IP cryptsetup(8)
          506 .B
          507 .IP pinentry(1)
          508 .B
          509 .IP gpg-agent(1)
          510 
          511 GnuPG website: https://www.gnupg.org
          512 
          513 DM-Crypt website: https://gitlab.com/cryptsetup/cryptsetup/wikis/DMCrypt
          514 
          515 LUKS website: https://gitlab.com/cryptsetup/cryptsetup/wikis/home