Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20150817135207.GB31031@openwall.com>
Date: Mon, 17 Aug 2015 16:52:07 +0300
From: Solar Designer <solar@...nwall.com>
To: john-dev@...ts.openwall.com
Subject: Re: testing every index (Re: more robustness)

Kai,

On Mon, Aug 17, 2015 at 08:43:42PM +0800, Kai Zhao wrote:
> What do you mean by "make use of all test vectors at once
> rather than use just one plaintext for all expected-correct indices."
> For example,
> 
> LM.fmt.c
> 
> static struct fmt_tests tests[] = {
>         {"$LM$a9c604d244c4e99d", "AAAAAA"},
>         {"$LM$cbc501a4d2227783", "AAAAAAA"},
>         {"$LM$3466c2b0487fe39a", "CRACKPO"},
>         {"$LM$dbc5e5cba8028091", "IMPUNIT"},
>         {LM_EMPTY LM_EMPTY, ""},
>         {"$LM$73cc402bd3e79175", "SCLEROS"},
>         {"$LM$5ecd9236d21095ce", "YOKOHAM"},
>         {"$LM$A5E6066DE61C3E35", "ZZZZZZZ"}, /* uppercase encoding */
>         {"$LM$1FB363feB834C12D", "ZZZZZZ"}, /* mixed case encoding */
>         {NULL}
> };
> 
> Now we are cracking the "$LM$a9c604d244c4e99d", and the correct
> password is "AAAAAA".
> 
> The current array of keys which set correct passwords on the even
> index is:
> 
> [0] = "AAAAAA"
> [1] = "wrong password"
> [2] = "AAAAAA"
> [3] = "wrong password"
> ...
> 
> To make use of all the test vectors, do you mean the array should be
> the following ?
> 
> [0] = "AAAAAA"
> [1] = "AAAAAAA"
> [2] = "CRACKPO"
> [3] = "IMPUNIT"
> ...

No.  I still want to have us test handling of incorrect passwords at the
same time as well.  So it's more like:

[0] = "AAAAAA"
[1] = "wrong password"
[2] = "AAAAAAA"
[3] = "wrong password"
[4] = "CRACKPO"
[5] = "wrong password"
[6] = "IMPUNIT"
[7] = "wrong password"
...

And as I had mentioned, testing of other correct/incorrect patterns is
also good.  Maybe you could add separate testing with all-correct and
all-incorrect passwords as well, just to make sure these extreme cases
work as well.  So this would be 6 crypt_all() invocations, then - two
for even/odd i, two for even/odd h(i), and two for all-correct (like you
suggested above) and all-incorrect.

BTW, we haven't even approached coming up with a combined self-test and
benchmark yet, right?  It's where a benchmark would run with e.g. 99.9%
of incorrect passwords, but also with occasional correct passwords, and
we'd be checking for the expected results in both cases.

Alexander

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.