t[clenaup] Uppercase secrets - tomb - the crypto undertaker HTML git clone git://parazyd.org/tomb.git DIR Log DIR Files DIR Refs DIR README DIR LICENSE --- DIR commit 43225c790e583079d1d8efed6ba386043b98d4c4 DIR parent fe01a62467f8e815903de98c0cba17ff81a089ee HTML Author: hellekin <hellekin@cepheide.org> Date: Thu, 23 Oct 2014 03:44:45 -0300 t[clenaup] Uppercase secrets Diffstat: M tomb | 55 +++++++++++++++---------------- 1 file changed, 27 insertions(+), 28 deletions(-) --- DIR diff --git a/tomb b/tomb t@@ -79,10 +79,10 @@ typeset -H TOMBFILE # File name of the tomb typeset -H TOMBNAME # Name of the tomb # Tomb secrets -typeset -H TOMBKEY # Key contents (see forge_key(), recover_key()) -typeset -H TOMBKEYFILE # Key file (ditto) -typeset -H tomb_secret -typeset -H tomb_password +typeset -H TOMBKEY # Encrypted key contents (see forge_key(), recover_key()) +typeset -H TOMBKEYFILE # Key file (ditto) +typeset -H TOMBSECRET # Raw deciphered key (see forge_key(), gpg_decrypt()) +typeset -H TOMBPASSWORD # Raw tomb passphrase (see gen_key(), ask_key_password()) typeset -aH tomb_tempfiles typeset -aH tomb_loopdevs t@@ -111,8 +111,8 @@ endgame() { TOMBNAME="$rr"; unset TOMBNAME TOMBKEY="$rr"; unset TOMBKEY TOMBKEYFILE="$rr"; unset TOMBKEYFILE - tomb_secret="$rr"; unset tomb_secret - tomb_password="$rr"; unset tomb_password + TOMBSECRET="$rr"; unset TOMBSECRET + TOMBPASSWORD="$rr"; unset TOMBPASSWORD for f in $tomb_tempfiles; do ${=WIPE} "$f"; done t@@ -415,8 +415,8 @@ dump_secrets() { _verbose "TOMBFILE: ::1 tomb file::" $TOMBFILE _verbose "TOMBKEY: ::1 key:: chars long" ${#TOMBKEY} _verbose "TOMBKEYFILE: ::1 key file::" $TOMBKEYFILE - _verbose "tomb_secret: ::1 secret:: chars long" ${#tomb_secret} - _verbose "tomb_password: ::1 tomb pass::" $tomb_password + _verbose "TOMBSECRET: ::1 secret:: chars long" ${#TOMBSECRET} + _verbose "TOMBPASSWORD: ::1 tomb pass::" $TOMBPASSWORD _verbose "tomb_tempfiles: ::1 temp files::" ${(@)tomb_tempfiles} _verbose "tomb_loopdevs: ::1 loopdevs::" ${(@)tomb_loopdevs} t@@ -731,7 +731,7 @@ gpg_decrypt() { if [ "$gpgver" = "1.4.11" ]; then _verbose "GnuPG is version 1.4.11 - adopting status fix." - tomb_secret=`print - "$gpgpass" | \ + TOMBSECRET=`print - "$gpgpass" | \ gpg --batch --passphrase-fd 0 --no-tty --no-options"` ret=$? unset gpgpass t@@ -742,7 +742,7 @@ gpg_decrypt() { tmp_create _status=`tmp_new` - tomb_secret=`print - "$gpgpass" | \ + TOMBSECRET=`print - "$gpgpass" | \ gpg --batch --passphrase-fd 0 --no-tty --no-options \ --status-fd 2 --no-mdc-warning --no-permission-warning \ --no-secmem-warning 2> $_status` t@@ -791,7 +791,7 @@ get_lukskey() { fi - gpg_decrypt "$_password" # saves decrypted content into $tomb_secret + gpg_decrypt "$_password" # Save decrypted contents into $TOMBSECRET ret="$?" t@@ -801,7 +801,7 @@ get_lukskey() { # This function asks the user for the password to use the key it tests # it against the return code of gpg on success returns 0 and saves -# the password in the global variable $tomb_password +# the password in the global variable $TOMBPASSWORD ask_key_password() { [[ -z $TOMBKEYFILE ]] && { _failure "Internal error: ask_key_password() called before load_key()." } t@@ -875,7 +875,7 @@ change_passwd() { _success "Changing password for ::1 key file::" $TOMBKEYFILE - # here $tomb_secret contains the key material in clear + # Here $TOMBSECRET contains the key material in clear if option_is_set --tomb-pwd; then tomb_new_pwd="`option_value --tomb-pwd`" t@@ -971,15 +971,14 @@ gen_key() { --batch --no-options --no-tty --passphrase-fd 0 --status-fd 2 \ -o - -c -a ${tombpass} -${tomb_secret} +$TOMBSECRET EOF # print -n "${tombpass}" \ # | gpg --openpgp --force-mdc --cipher-algo ${algo} \ # --batch --no-options --no-tty --passphrase-fd 0 --status-fd 2 \ # -o - -c -a ${lukskey} - # update global var - tomb_password="$tombpass" + TOMBPASSWORD="$tombpass" # Set global variable unset tombpass unset tombpasstmp } t@@ -1042,7 +1041,7 @@ bury_key() { /^Version/ {next} {print $0}' \ | steghide embed --embedfile - --coverfile ${imagefile} \ - -p ${tomb_password} -z 9 -e serpent cbc + -p $TOMBPASSWORD -z 9 -e serpent cbc if [ $? != 0 ]; then _warning "Encoding error: steghide reports problems." res=1 t@@ -1105,9 +1104,9 @@ exhume_key() { if option_is_set --tomb-pwd; then tombpass="`option_value --tomb-pwd`" _verbose "tomb-pwd = ::1 tomb pass::" $tombpass - elif [[ "$tomb_password" != "" ]]; then + elif [[ -n $TOMBPASSWORD ]]; then # password is known already - tombpass="$tomb_password" + tombpass=$TOMBPASSWORD else tombpass=`exec_as_user ${TOMBEXEC} askpass "Insert password to exhume key from $imagefile"` if [[ $? != 0 ]]; then t@@ -1264,12 +1263,12 @@ forge_key() { fi _verbose "Data dump using ::1:: from ::2 source::" ${DD[1]} $random_source - tomb_secret=`${=DD} bs=1 count=256 if=$random_source` - { test $? = 0 } || { + TOMBSECRET=`${=DD} bs=1 count=256 if=$random_source` + [[ $? == 0 ]] || { _warning "Cannot generate encryption key." _failure "Operation aborted." } - # here the global var tomb_secret contains the nude secret + # Here the global variable TOMBSECRET contains the naked secret _success "Choose the password of your key: ::1 tomb key::" $TOMBKEYFILE _message "(You can also change it later using 'tomb passwd'.)" t@@ -1379,7 +1378,7 @@ lock_tomb_with_key() { _success "Locking ::1 tomb file:: with ::2 tomb key file::" $TOMBFILE $TOMBKEYFILE _message "Formatting Luks mapped device." - print -n - "$tomb_secret" | \ + print -n - $TOMBSECRET | \ cryptsetup --key-file - --batch-mode \ --cipher ${cipher} --key-size 256 --key-slot 0 \ luksFormat ${nstloop} t@@ -1388,7 +1387,7 @@ lock_tomb_with_key() { _failure "Operation aborted." fi - print -n - "$tomb_secret" | \ + print -n - $TOMBSECRET | \ cryptsetup --key-file - \ --cipher ${cipher} luksOpen ${nstloop} tomb.tmp if ! [ $? = 0 ]; then t@@ -1463,7 +1462,7 @@ change_tomb_key() { fi { test $? = 0 } || { _failure "No valid password supplied for the old key." } - old_secret="$tomb_secret" + old_secret=$TOMBSECRET # luksOpen the tomb (not really mounting, just on the loopback) print -n - "$old_secret" | \ t@@ -1486,7 +1485,7 @@ change_tomb_key() { fi { test $? = 0 } || { _failure "No valid password supplied for the new key." } - new_secret="$tomb_secret" + new_secret=$TOMBSECRET # danger zone: due to cryptsetup limitations, in setkey we need # to write the bare unencrypted key on the tmpfs. t@@ -1631,7 +1630,7 @@ mount_tomb() { { test $? = 0 } || { _failure "No valid password supplied." } - print -n - "$tomb_secret" | \ + print -n - $TOMBSECRET | \ cryptsetup --key-file - luksOpen ${nstloop} ${mapper} if ! [ -r /dev/mapper/${mapper} ]; then t@@ -2156,7 +2155,7 @@ resize_tomb() { mapdate=`date +%s` mapper="tomb.${tombname}.${mapdate}.`basename $nstloop`" - print -n - "$tomb_secret" | \ + print -n - $TOMBSECRET | \ cryptsetup --key-file - luksOpen ${nstloop} ${mapper} if ! [ -r /dev/mapper/${mapper} ]; then