|
|
Message-ID: <20130507202634.GB18836@openwall.com>
Date: Wed, 8 May 2013 00:26:34 +0400
From: Solar Designer <solar@...nwall.com>
To: Tavis Ormandy <taviso@...xchg8b.com>
Cc: john-dev@...ts.openwall.com
Subject: Re: --fork
Hi Tavis,
On Tue, May 07, 2013 at 08:29:48AM -0700, Tavis Ormandy wrote:
> Hey Solar, if I understand correctly this skips the inc_key_loop step on
> alternate nodes during do_inc_crack to distribute the work (similar in
> concept, but less overhead than the parallel external mode).
>
> e.g.
>
> for (i = 0; i < n; i++) {
> if (this_node % i == 0)
> inc_key_loop()
> }
You mean something like "i % number_of_nodes == this_node". Yes, that's
what we do. It's the same thing we did with MPI in jumbo.
> I have an algorithm to skip to an arbitrary state in constant time without
> having to increment it, would you be interested in a patch against core?
I do remember your work on this, thanks! However, your algorithm is
probably not usable for the new incremental mode as-is (with
per-position character counts growing separately from each other) - it
will need slight changes. I actually wanted to look into doing that for
1.8, but then decided to leave that for post-1.8 to avoid scope creep
for 1.8 (it's time to release 1.8 already!)
Unfortunately, this does mean that some future versions will need to
support both approaches for a while (the approach currently implemented
for 1.8 will still be needed for restored sessions). I think I'll
increase "compat" from 2 to 3 along with making the change, and some
versions of JtR will need to support both 2 and 3 in restored sessions
for a while.
As to a patch to a core file like this, this immediately brings up
licensing concerns. %-) I recall that you preferred to use GPLv2+ for
rawSHA1_ng_fmt.c, and I respect that decision of yours, but for a core
file I would not accept a GPL'ed change copyrighted by someone other
than me. I would also not want to relax the license to inc.c for the
general public just yet (maybe later). This means that accepting a
patch to it gets tricky: we'd need to introduce some "license with right
to sublicense" scheme (or copyright transfer, but I dislike that for a
number of reasons). I am to think of how to do this best and with
minimal complexity for everyone; at this time, though, I merely need to
push 1.8 out with its inc.c almost as-is.
> I guess it would be more invasive, but would save a lot of cycles
> (especially on a large number of nodes).
I think you recall incorrectly. The simpler approach that we currently
have does not waste cycles. It does not skip individual passwords - it
skips large blocks of them, quickly. A real problem with it is that
those blocks may be too large. This limits scalability, yes - simply
because there are too few such blocks for a large cluster. Another
problem is that those blocks are not of same size, so when/if endgame is
reached, some nodes terminate much sooner than others (even if they're
same speed). Yet another problem is that with a lot of nodes the order
in which candidate passwords are tested becomes significantly
non-optimal. All of this will definitely need to be dealt with in a way
similar to what you describe - before or when we proceed to add better
distributed processing (not just --node and MPI, but also option for
MPI-less communication between the nodes, which is planned).
In fact, as I think I had mentioned to you before, I had a similar in
concept thing implemented in an early prototype of incremental mode only
distributed cracker back in 1997, which I never brought to "release
quality". It too would split portions of individual "entries", rather
than simply distribute the entries to nodes. Incremental mode was a bit
simpler at the time, but it already had this order[] thing.
> I wrote about it here: http://www.openwall.com/lists/john-dev/2012/06/14/5
Yes, thanks!
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.