All of lore.kernel.org
 help / color / mirror / Atom feed
From: ken <gebser@mousecar.com>
To: dm-crypt@saout.de
Subject: Re: [dm-crypt] recovering forgotten passwords for 2 LVs
Date: Tue, 23 Aug 2011 09:17:43 -0400	[thread overview]
Message-ID: <4E53A877.8090608@mousecar.com> (raw)
In-Reply-To: <20110822171627.GA5648@tansi.org>



On 08/22/2011 01:16 PM Arno Wagner wrote:
> On Mon, Aug 22, 2011 at 10:48:54AM -0400, ken wrote:
>> On 08/17/2011 01:44 PM ken wrote:
>>> Having searched through the archives and read the FAQ list, I know this
>>> isn't going to be easy, but I have to give it a try anyway.  Yes, I'm
>>> yet another guy who forgot his LUKS password.  And I encrypted both the
>>> system and data LVs (when I first installed CentOS/Linux).  After a
>>> couple days trying out various passphrases (going through my three
>>> chances and then having to shut down and restart the machine to get
>>> another three chances) and not succeeding, I removed the drive and put
>>> it into a drive enclosure, then attached it (via USB) to an older but
>>> working system.  Now I can read only the /boot partition of that drive....
>> Over the weekend I read a bunch more documentation, got a spare drive
>> connected, and on it created an encrypted partition containing a Linux
>> LVMed filesystem (ext3 if it matters... same as the on the disk I'm
>> trying to get back).  I did all this to test and refine a script I
>> created so I can input possible/likely passphrases and see which of them
>> might work.  My script works fine on the one encrypted partition I
>> created on the test disk.  I have a concern though.
>>
>> When booting the disk I'm locked out of, it would prompt me twice...
>> because, as explained above, the partition contained two encrypted
>> logical volumes... so I was prompted for passphrases for each.  In fact,
>> if I failed to input the correct passphrase for the first LV, I'd still
>> be prompted for the passphrase for the second LV.  When I do "cryptsetup
>> isLuks /dev/sda5" the error code (0) tells me I've got an encrypted
>> device... but just one.  Using luksDump likewise shows just one instance
>> of something (?) encrypted.
>>
>> Why is this, when I know there to be *two* encrypted LVs on that
>> partition/device?
>>
>> Most importantly, when I run
>>
>> echo -n "$PASS PHRASE" |/sbin/cryptsetup luksOpen /dev/sdb5 name1
>>
>> is cryptsetup going to be talking to one or the other encrypted LVs...?
>> and if so, which one?
> 
> With this command, cryptestup is going to look exactly at the
> start of /dev/sdb5 and nowhere else. If you want it to look
> anywhere else, you need to specify.

And this is how I would hope it would operate.  I just need to know
where to tell cryptsetup to look.  How do I find that out?


> 
> As I said before, any booting magic is with your distro and
> not cryptsetup. That means you have to recreate any such
> magic (as starting LVM, for example) in order for cryptsetup
> to work and you have to gve cryptesup the right partition,
> physical or remapped, possibly with offset if the distro
> "magic" does that if you actually want to open the LUKS 
> container.

The term "boot" covers a lot, so you and I might be thinking of
different things.  I consider "booting" everything from when a system is
powered on to when the init scripts are finished and the user is
prompted for ID and password.

And perhaps I should have been clearer a few emails ago about
encountering the problem and its context.  Let me try again:

This disk which I'm locked out of boots fine until I'm asked for the
passphrases.  Because I don't know them, it can't boot any further.  The
boot process stops there.  That is, when I turn the machine on, the
(unencrypted) /boot partition is mounted and the boot partition is
displayed.  This is a dual-boot (actually multi-boot) system, so a boot
menu is displayed from which I can select which system to boot.  When
Linux is selected, the root (/) filesystem needs to be mounted.  But
this is encrypted, so I'm prompted for a passphrase.  I don't know it,
so the booting of the system stops there.  So I don't believe booting is
in any way a part of the problem per se.

Moreover, because it was cumbersome to try possible passphrases (and
because I couldn't use the non-booting system), I took out the drive,
installed it in a hardware enclosure, and attached it to another Linux
machine.  In this hardware configuration booting is no longer an issue.
 I simply need to access the encrypted partition and mount it.  It
doesn't need to boot.  Even though the partition contains system files,
the entire filesystem can simply be mounted like a data drive.  Indeed,
this is what I have done with the (unencrypted) /boot partition.  So for
this reason too, the boot process cannot be said to be the source of the
problem.


This procedure below sounds interesting.  And, yes, all I want to do is
determine what the passphrase it.

> 
> If you just want to find the paswort, you can go a simple way:
>  1. look for the physical location of the header(s)
>  2. copy it off to a loop-mounted file 
>  3. try luksOpen on that. 
> This will not give you your data,
> but will allow the testing of passwords, as cryptsetup
> does not care where the header is, just that it gets
> told where it is.
> 
> Header length and how to use a loop-mounted file with
> cryptestup are in the FAQ. The header has the magic
> string {'L', 'U', 'K', 'S', 0xBA, 0xBE } at the beginning.
> This should typically be right after a sector border.
> You can search for that, copy 2MiB off (just in case it is XTS)
> and try with that in said loopfile.
> 
> A very simple (but slow) way to find a LUKS header uses
> grep like this: 
> 
>   cat /dev/sdb | hd | grep "4c 55 4b 53 ba be"
> 
> This gives you the binary position of all LUKS headers
> with respect to the disk start.
> 
> To copy it off, you can use, e.g. dd_rescue as below,
> and assuming luksfile is a 100MB file described in FAQ
> item "How do I use LUKS with a loop-device?". Do not losetup
> or cryptsetup ist before adding the header! Do the losetuop
> afterwards and the cryptsetup then for the trial luskOpen.
> 
>   dd_rescue -s <offset found above, converted to decmal> \
>             -S 0 -m 2M  /dev/sdb  luksfile
> 
> Don't do that with the original, it is far too easy to 
> damage it by messing up the dd_rescue command and overwriting
> the headers insted of copying them. The rest should be fairly 
> safe.
> 
> Arno

Thanks, Arno.  Currently I have a script which basically does this:

echo -n "$PossiblePassphrase" |cryptsetup luksOpen /dev/sda5 name1

I don't understand, what benefit would be derived from creating a
loopfile?  Is there something wrong with using my "echo -n ..." command
on the partition as it is on the original drive itself?

  reply	other threads:[~2011-08-23 13:17 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-17 17:44 [dm-crypt] recovering forgotten password ken
2011-08-17 19:35 ` Arno Wagner
2011-08-17 19:40   ` Arno Wagner
2011-08-22 14:48 ` [dm-crypt] recovering forgotten passwords for 2 LVs ken
2011-08-22 16:19   ` Yves-Alexis Perez
2011-08-22 22:33     ` ken
2011-08-22 22:53       ` Milan Broz
2011-08-23  0:23         ` ken
2011-08-23  7:43           ` Yves-Alexis Perez
2011-08-23  9:35             ` ken
2011-08-23 11:59         ` ken
2011-08-23 12:57       ` Arno Wagner
2011-08-23 13:39         ` ken
2011-08-22 17:16   ` Arno Wagner
2011-08-23 13:17     ` ken [this message]
2011-08-23 13:47       ` Arno Wagner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4E53A877.8090608@mousecar.com \
    --to=gebser@mousecar.com \
    --cc=dm-crypt@saout.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.