lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Mon, 27 Jan 2014 16:54:27 -0500 From: Bill Cox <waywardgeek@...il.com> To: discussions@...sword-hashing.net Subject: Combining sliding window and bit-reversal I did more testing of different DAG architectures while enhancing my pebbling algorithm. These benchmarks change as the code changes, but here's an interesting data point. I was comparing Catena-3 graphs to Alexander's power-of-two graphs, and both did well in different areas. Then I though, how about combining them? So, instead of picking random locations within the sliding window, I pick bit-reversal based locations. This results in the hardest to pebble DAGs so far for my pebbling algorithm. I'm thinking of using this without password dependent memory location reads for the first 50%, and then for the last 50%, I'll use the existing NoelKDF DAG, which will have a ton of edges back into the sliding bit-reversal DAG. Just to be specific about how this DAG is generated, here is the function I wrote that creates edges from a position in the graph to a prior position: // Find the previous position using Alexander's sliding power-of-two window, with Catena // bit-reversal. static uint32 findSlidingReversePos(uint32 pos) { // This is a sliding window which is the largest power of 2 < i. if(pos < 2) { return UINT32_MAX; } uint32 mask = 1; while(mask <= pos) { mask <<= 1; } mask = mask >> 1; // Mask is greatest power of 2 <= pos uint32 reversePos = bitReverse((pos) & (mask-1), mask); if(reversePos + 1 >= pos - mask) { return reversePos; } return reversePos + mask; } Bill
Powered by blists - more mailing lists