Openwall GNU/*/Linux - a small security-enhanced Linux distro for servers
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Fri, 25 Jan 2008 16:02:35 +0300
From: Solar Designer <solar@...nwall.com>
To: john-users@...ts.openwall.com
Subject: Re:  question about charsets

On Fri, Jan 25, 2008 at 08:00:41AM +0000, helleye wrote:
> ok , i wrote a charset generator , and a wordlist generator

I don't know why you chose to write anything from scratch.

The code in JtR is straightforward to extend to make it consider three
preceding characters instead of just two.

> and on -i -stdout
> 
> barissa
> barissy
> barison
> barisor
> bariner
...
> i think that the trick is the seed you use ? 

I'm not sure what you mean, but no, the code does not use a seed (as in
a PRNG).

> every 1 it change last char , 2 - one before ,4 - two before and so on

If you let it run for longer, you'll notice that things will be
different - although it will continue to try to make sure that only one
character changes most of the time, because this allows for faster key
setup with some hash types.

BTW, JtR 1.6 used an algorithm that did not have this property - it was
changing many characters at once more often - and you can still find
that code in inc.c: inc_key_loop() after the compat: label.  I intend to
drop that compatibility code sometime.  (It is only invoked when you
restore a session that was started with an older version of JtR.)

> anyway can you correct me / elaborate on how to do the rounds please ?

You're probably referring to what is called the "cracking order" in JtR
source code comments.  In charset.h:

/*
 * Cracking order.
 *
 * This is a list of current {length, fixed position, character count}.
 * There are CHARSET_LENGTH different lengths, and fixed position is up
 * to the current length, which means we have exactly (CHARSET_LENGTH *
 * (CHARSET_LENGTH + 1) / 2) different {length, fixed position} pairs;
 * for each such pair we need to try all charsets from 1 character and
 * up to CHARSET_SIZE characters large.
 */
	unsigned char order
		[CHARSET_LENGTH * (CHARSET_LENGTH + 1) / 2 * CHARSET_SIZE * 3];

As usual, the best answer to your question is the source code - just
check out the uses of this order[] array in charset.c and inc.c.  Also
relevant is this older posting:

	http://www.openwall.com/lists/john-users/2007/11/13/4

-- 
Alexander Peslyak <solar at openwall.com>
GPG key ID: 5B341F15  fp: B3FB 63F4 D7A3 BCCC 6F6E  FC55 A2FC 027C 5B34 1F15
http://www.openwall.com - bringing security into open computing environments

-- 
To unsubscribe, e-mail john-users-unsubscribe@...ts.openwall.com and reply
to the automated confirmation request that will be sent to you.

Powered by blists - more mailing lists

Your e-mail address:

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