* Key derivation and passprhase wrapping [not found] <794484591.224591.1452104561446.JavaMail.zimbra@halfgaar.net> @ 2016-01-18 10:27 ` Wiebe Cazemier 2016-01-20 3:05 ` Tyler Hicks 0 siblings, 1 reply; 5+ messages in thread From: Wiebe Cazemier @ 2016-01-18 10:27 UTC (permalink / raw) To: ecryptfs Hi, I was looking at the ecryptfs source code, and saw that the actual encryption key inserted into the kernel keyring is the *original* wrapped passphrase, SHA512'ed 65536 times. Why is a user-given passphrase encrypted as key, and not data from /dev/random? I unwrapped the passphrase on my Linux Mint system and saw it is actually a random string, so the Ubuntu/Mint installer took care of it for me. But why is that responsibility given to the user / outside world? One of the problems is that I can't change it. Had I made a ecryptfs archive myself and wrapped 'hello' as passphrase, that weak key will be used and cannot be changed by rewrapping. Would it be possible/feasible to do something like: * generate random encryption key A for insertion into kernel keyring. * derive encryption key B from password with 'generate_passphrase_sig(...)' to encrypt key A. * In v2 wrapped passphrase file, Octets 26-N1, store encrypted A, instead of encrypted passphrase. Depending on how it's implemented, it could even be done completely backwards compatible (by ignoring the to-wrap passphrase). Regards, Wiebe ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Key derivation and passprhase wrapping 2016-01-18 10:27 ` Key derivation and passprhase wrapping Wiebe Cazemier @ 2016-01-20 3:05 ` Tyler Hicks 2016-01-20 19:51 ` Wiebe Cazemier 0 siblings, 1 reply; 5+ messages in thread From: Tyler Hicks @ 2016-01-20 3:05 UTC (permalink / raw) To: Wiebe Cazemier; +Cc: ecryptfs [-- Attachment #1: Type: text/plain, Size: 2378 bytes --] On 2016-01-18 11:27:37, Wiebe Cazemier wrote: > Hi, > > I was looking at the ecryptfs source code, and saw that the actual > encryption key inserted into the kernel keyring is the *original* > wrapped passphrase, SHA512'ed 65536 times. Why is a user-given > passphrase encrypted as key, and not data from /dev/random? This assumes that the mount.ecryptfs helper is used and not the mount.ecryptfs_private helper. mount.ecryptfs does key stretching (SHA512 * 65536) on a user-provided passphrase and uses that as the file encryption key encryption key (FEKEK). This keeps things simple so that the only thing a user needs to access their encrypted files is the passphrase. There's no chance of losing track of a file containing a wrapped FEKEK that is randomly generated. However, mount.ecryptfs could be extended to make use of wrapped, randomly generated FEKEK which would provide a more secure option. > I unwrapped the passphrase on my Linux Mint system and saw it is > actually a random string, so the Ubuntu/Mint installer took care of it > for me. But why is that responsibility given to the user / outside > world? All of the logic that set up that random FEKEK is in upstream ecryptfs-utils. The confusion is probably caused by the unfortunate split between the mount.ecryptfs and mount.ecryptfs_private helpers. > One of the problems is that I can't change it. Had I made a > ecryptfs archive myself and wrapped 'hello' as passphrase, that weak > key will be used and cannot be changed by rewrapping. > > Would it be possible/feasible to do something like: > > * generate random encryption key A for insertion into kernel keyring. > * derive encryption key B from password with 'generate_passphrase_sig(...)' to encrypt key A. > * In v2 wrapped passphrase file, Octets 26-N1, store encrypted A, instead of encrypted passphrase. I'm not following the intent here. You're wanting to change the FEKEK that the Ubuntu/Mint installer generated? Tyler > > Depending on how it's implemented, it could even be done completely backwards compatible (by ignoring the to-wrap passphrase). > > Regards, > > Wiebe > -- > To unsubscribe from this list: send the line "unsubscribe ecryptfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 819 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Key derivation and passprhase wrapping 2016-01-20 3:05 ` Tyler Hicks @ 2016-01-20 19:51 ` Wiebe Cazemier 2016-01-20 20:03 ` Wiebe Cazemier 0 siblings, 1 reply; 5+ messages in thread From: Wiebe Cazemier @ 2016-01-20 19:51 UTC (permalink / raw) To: Tyler Hicks; +Cc: ecryptfs ----- Original Message ----- > From: "Tyler Hicks" <tyhicks@canonical.com> > To: "Wiebe Cazemier" <wiebe@halfgaar.net> > Cc: ecryptfs@vger.kernel.org > Sent: Wednesday, 20 January, 2016 4:05:57 AM > Subject: Re: Key derivation and passprhase wrapping > > On 2016-01-18 11:27:37, Wiebe Cazemier wrote: > > Hi, > > > > I was looking at the ecryptfs source code, and saw that the actual > > encryption key inserted into the kernel keyring is the *original* > > wrapped passphrase, SHA512'ed 65536 times. Why is a user-given > > passphrase encrypted as key, and not data from /dev/random? > > This assumes that the mount.ecryptfs helper is used and not the > mount.ecryptfs_private helper. > > mount.ecryptfs does key stretching (SHA512 * 65536) on a user-provided > passphrase and uses that as the file encryption key encryption key > (FEKEK). This keeps things simple so that the only thing a user needs to > access their encrypted files is the passphrase. There's no chance of > losing track of a file containing a wrapped FEKEK that is randomly > generated. However, mount.ecryptfs could be extended to make use of > wrapped, randomly generated FEKEK which would provide a more secure > option. > > > I unwrapped the passphrase on my Linux Mint system and saw it is > > actually a random string, so the Ubuntu/Mint installer took care of it > > for me. But why is that responsibility given to the user / outside > > world? > > All of the logic that set up that random FEKEK is in upstream > ecryptfs-utils. The confusion is probably caused by the unfortunate > split between the mount.ecryptfs and mount.ecryptfs_private helpers. > > > One of the problems is that I can't change it. Had I made a > > ecryptfs archive myself and wrapped 'hello' as passphrase, that weak > > key will be used and cannot be changed by rewrapping. > > > > Would it be possible/feasible to do something like: > > > > * generate random encryption key A for insertion into kernel keyring. > > * derive encryption key B from password with 'generate_passphrase_sig(...)' > > to encrypt key A. > > * In v2 wrapped passphrase file, Octets 26-N1, store encrypted A, instead > > of encrypted passphrase. > > I'm not following the intent here. You're wanting to change the FEKEK > that the Ubuntu/Mint installer generated? > > Tyler > > > > > Depending on how it's implemented, it could even be done completely > > backwards compatible (by ignoring the to-wrap passphrase). > > > > Regards, > > > > Wiebe I think I missed an important bit. I was looking at ecryptfs-wrap-passphrase, which makes you supply the FEK and FEKEK, but ecryptfs-setup-private actually already uses a random passphrase: -m, --mountpass MOUNTPASS Passphrase for mounting the ecryptfs directory, default is 16 bytes from /dev/urandom if omitted Never mind ;) ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Key derivation and passprhase wrapping 2016-01-20 19:51 ` Wiebe Cazemier @ 2016-01-20 20:03 ` Wiebe Cazemier 2016-01-29 22:57 ` Tyler Hicks 0 siblings, 1 reply; 5+ messages in thread From: Wiebe Cazemier @ 2016-01-20 20:03 UTC (permalink / raw) To: Tyler Hicks; +Cc: ecryptfs ----- Original Message ----- > From: "Wiebe Cazemier" <wiebe@halfgaar.net> > To: "Tyler Hicks" <tyhicks@canonical.com> > Cc: ecryptfs@vger.kernel.org > Sent: Wednesday, 20 January, 2016 8:51:43 PM > Subject: Re: Key derivation and passprhase wrapping > > I think I missed an important bit. I was looking at ecryptfs-wrap-passphrase, > which makes you supply the FEK and FEKEK, but ecryptfs-setup-private > actually already uses a random passphrase: > > -m, --mountpass MOUNTPASS > Passphrase for mounting the ecryptfs directory, default is 16 bytes from > /dev/urandom if omitted > I do see an issue though. The bash script says: random_data=`head -c 16000 /dev/urandom | od -x` || error_testing "$temp" "$(gettext 'Could not generate random data')" But when urandom can't be read (doesn't exist, no file handles, whatever): random_data=`head -c 16000 /dev/urando | od -x` || echo "fail" head: cannot open ‘/dev/urando’ for reading: No such file or directory Note, no 'fail' and $? == 0. And: echo $random_data 0000000 Regards, Wiebe ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Key derivation and passprhase wrapping 2016-01-20 20:03 ` Wiebe Cazemier @ 2016-01-29 22:57 ` Tyler Hicks 0 siblings, 0 replies; 5+ messages in thread From: Tyler Hicks @ 2016-01-29 22:57 UTC (permalink / raw) To: Wiebe Cazemier; +Cc: ecryptfs [-- Attachment #1: Type: text/plain, Size: 1313 bytes --] On 2016-01-20 21:03:13, Wiebe Cazemier wrote: > ----- Original Message ----- > > From: "Wiebe Cazemier" <wiebe@halfgaar.net> > > To: "Tyler Hicks" <tyhicks@canonical.com> > > Cc: ecryptfs@vger.kernel.org > > Sent: Wednesday, 20 January, 2016 8:51:43 PM > > Subject: Re: Key derivation and passprhase wrapping > > > > I think I missed an important bit. I was looking at ecryptfs-wrap-passphrase, > > which makes you supply the FEK and FEKEK, but ecryptfs-setup-private > > actually already uses a random passphrase: > > > > -m, --mountpass MOUNTPASS > > Passphrase for mounting the ecryptfs directory, default is 16 bytes from > > /dev/urandom if omitted > > > > I do see an issue though. The bash script says: > > random_data=`head -c 16000 /dev/urandom | od -x` || error_testing "$temp" "$(gettext 'Could not generate random data')" > > But when urandom can't be read (doesn't exist, no file handles, whatever): > > random_data=`head -c 16000 /dev/urando | od -x` || echo "fail" > head: cannot open ‘/dev/urando’ for reading: No such file or directory > > Note, no 'fail' and $? == 0. And: > > echo $random_data > 0000000 For completeness, we should mention that this is being tracked in Launchpad: https://launchpad.net/bugs/1539553 Tyler [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 819 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2016-01-29 22:57 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <794484591.224591.1452104561446.JavaMail.zimbra@halfgaar.net>
2016-01-18 10:27 ` Key derivation and passprhase wrapping Wiebe Cazemier
2016-01-20 3:05 ` Tyler Hicks
2016-01-20 19:51 ` Wiebe Cazemier
2016-01-20 20:03 ` Wiebe Cazemier
2016-01-29 22:57 ` Tyler Hicks
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).