[dm-crypt] Key-Slot Checker Tool

Arno Wagner arno at wagner.name
Sun Sep 9 15:35:12 CEST 2012


On Sun, Sep 09, 2012 at 10:27:44AM +0200, Milan Broz wrote:
> On 09/09/2012 02:41 AM, Arno Wagner wrote:
> > Hi all.
> > 
> > I just wrote a very simple key-slot checker. It divides all 
> > active keyslots into 512 byte sectors and calculates entropy
> > for each. For valid encrypted data, entropy will be close
> > to 0.95 on average (would be 1, but this is sample entropy,
> > calculated on a limited data set).
> 
> Yes, this is something very useful.

Thanks!

> But 512 slots is quite small chunk of random data, there will be
> some false warnings I guess.

Very, very few. Remember that the data looks like high-quality 
randomness if correct. I might do a measurement how rarely,
but with my test-header I had to go up to 0.93 (default is 0.85)
to get a single false detection. And the entropy-threshold is 
tunable.

> (Adding add test for the whole keyslot combined
> with separate sectors? Not sure if it helps something though...)

I don't think that is needed, but a sector-size option 
(with 0 = whole slot) is a possibility.
 
> (Well, and it cannot obviously detect corruption with
> overwriting random data :)

That would be quite a trick ;-)

> > No fancy output, no library usage (but verifies LUKS version), 
> > support for non-default key-sizes and setting your own entropy 
> > threshold. I put in 0.85 as default threshold, which should work 
> > well. 
> > 
> > Now I am not sure where to put it. Should I put it in
> > misc/ in the sources? That seems to be sort of a contrib/
> > directory. Or should we add a section in the Wiki for
> > tools?
> 
> Parsing header on its own is something which should
> not be even in misc section (in the worst case it should
> include luks.h directly).

I can do that. Just wanted to see whether it works first.
 
> But anyway, this could be integrated into luks
> format checker directly (and run in "check" cryptsetup command).

That would probably be a good idea. Is that a new command?
If you can point out were that is in the code, I can add
these tests.

> (And the same random test perhaps should be in tests for large
> enough blocks - see tests/differ.c, there is nice fixme :-)

Will have a look.
 
> I am just not sure introducing floating point in libcryptsetup
> is good idea. 

While this can be done without, it is really hard. Basically
you eiher need to simulate the logarithm in fixed-point integer
or build up huffman tree as direct entropy estimator. Easiest way
would probably be fixed-point and a 1000-entry table for the
log().

> But perhaps this can be compile time option,
> if some ancient/embedded CPU/distro has problems here,
> so it can be compiled-out.

I like that idea much better.

So, next step, make it use luks.h and put it in misc/ ? 

Arno
-- 
Arno Wagner,    Dr. sc. techn., Dipl. Inform.,   Email: arno at wagner.name 
GnuPG:  ID: 1E25338F  FP: 0C30 5782 9D93 F785 E79C  0296 797F 6B50 1E25 338F
----
One of the painful things about our time is that those who feel certainty 
are stupid, and those with any imagination and understanding are filled 
with doubt and indecision. -- Bertrand Russell 


More information about the dm-crypt mailing list