Lists of hash choices.

Searching the Cryptographic Hash Function Output Space

How Do Hash Functions Cover Their Potential Output Space?

A cryptographically strong hash function generates a distinctive fixed-size output for arbitrary input. While this output is completely deterministic (always producing the same output for a given input), we can say that it "looks random" because very slight changes in the input lead to drastic changes in the output. A single-bit change in the input to a useful cryptographic hash function typically causes about half of the output bits to change. Some applications of hash functions lead to two questions. First, does the function generate all potential output patterns? For example, can SHA-256 generate all 2256 possible 256-bit patterns? In more formal terms, does the range or image of the hash function include all possible 256-bit outputs? Second, what is the topology of the paths through the output space formed by repeated hashing?

Applications of Repeated Hash Functions

Repeated hashing authentication systems such as S/KEY derivatives including OPIE and OTPdroid use chains of hash functions. However, they typically use chains no longer than a few thousand hashes. We are instead interested in arbitrarily exhaustive searches of the hash output space, as used in Rainbow Tables or cryptocurrency mining.

A Rainbow Table is a time-space tradeoff for attacking passwords. Complete lookup tables for all possible hash outputs aren't practical, they aren't even possible for modern salted password authentication systems as there's not enough storage in the world to keep such a thing. But since Windows does not use the standard salt mechanism, a Rainbow Table attack is possible there. A potentially vast amount of computing is done in advance to generate the Rainbow Table, which means that the attack can now be done in a much shorter time than required for a brute-force search.

Rainbow Tables, as well as "cryptocurrencies" such as Bitcoin, use chains of repeated hashes. Some initial value is the starting point. Its hash is calculated to form the next point in the chain, and that is then used as the input to the next stage. The process is continued until some criteria is met. For Bitcoin and similar, until a target value is reached. For Rainbow Tables, until either you loop back to the starting point (that is, the output of the Nth hash is equal to the initial value) or until the chain reaches a specified maximum length.

A Simple Illustration of Repeated Hashing

I need a simple script to extract just the hash value itself from the output and then convert that ASCII representation of a 256-bit string into the actual binary. I want to calculate the hash of a hash value, not the hash of a human-readable description.

% cat ascii-to-binary
#!/bin/sh

awk '{print $2}' | echo -n -e $( sed 's/../\\x&/g')

Let's start with a 256-bit block of all zeros, verifying that it's exactly 256 bytes of all zeros.

% cd /tmp
% dd if=/dev/zero bs=1 count=256 > input
256+0 records in
256+0 records out
256 bytes (256 B) copied, 0.00013002 s, 2.0 MB/s
% ls -l input
-rw-r--r-- 1 cromwell cromwell 256 Jul 10 12:46 input
% od -x input 
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
0000400

Let's calculate the SHA-256 hash of that initial input. I'll denote this as H(input).

% openssl sha256 input
(input)= 5341e6b2646979a70e57653007a1f310169421ec9bdd9f1a5648f75ade005af1

Now let's calculate the next generation, the hash of the hash of the input or H2(input).

% openssl sha256 input | ascii-to-binary | openssl sha256
(stdin)= e4d347b3d1f774cbe546519c7c404830b1646a147cd57f3acd32dea1b5cc17fa

And so on, with H3(input).

% openssl sha256 input | ascii-to-binary | openssl sha256 | ascii-to-binary | openssl sha256
(stdin)= 6ada04b26aeed9f3c8be55e25a762c971af57a4091d6e7651fa731aa4da3cb00

Repeated Hash Walks Through The Output Space

Maximum input size (bits)
SHA-1 264 - 1
SHA-224, SHA-256 264 - 1
SHA-384, SHA-512 2128 - 1
SHA-3

The number of potential hash outputs is an enormous number by everyday standards, but the number of possible inputs is far greater yet for SHA-1 and SHA-2, and infinite for SHA-3. For example, for SHA-256:

Possible outputs = 2256
Possible inputs = 2(264 - 1) = 218446744073709551615

We have to conclude that for any possible output there will be an astronomical number of inputs that will generate that same output. The term is that collisions must exist. Not just exist, but there must be an enormous or even infinite (for SHA-3) number of them. However, the avalanche effect that leads even a single-bit change in input to cause a very large change in output means that it should be very difficult to discover any arbitrary collision, and even harder to discover a second input that collides with a specified target.

Let's consider the second of our two initial questions:

What is the topology of the paths through the potential output space formed by repeated hashing?

To start with the answer, repeated hashing must cover the space of 2N possible outputs for an N-bit hash function in one of these three ways:

1: One closed cycle including all possible inputs.

2: Multiple closed cycles collectively including all possible inputs.

3: One or more closed cycles, at least one of which has one or more extra input chains. The initial points of those chains are potential outputs that cannot be generated from any N-bit input, and it is possible that some of them cannot be generated as outputs of any input.

Keep reading for the explanation.

Do Hash Functions Enforce Parity?

A cryptographic hash function produces a fixed size output. For example, SHA-1 produces a 160-bit output.

Here is a demonstration of how SHA-1 is both deterministic (the first two outputs are equal) and sensitive to input change (the last two outputs are very different).

$ echo "hello, world" | openssl sha1
(stdin)= cd50d19784897085a8d0e3e413f8612b097c03f1
$ echo "hello, world" | openssl sha1
(stdin)= cd50d19784897085a8d0e3e413f8612b097c03f1
$ echo "Hello, world" | openssl sha1
(stdin)= 7b4758d4baa20873585b9597c7cb9ace2d690ab8 

But are all 2160 possible 160-bit patterns valid outputs? Or might the design of the SHA-1 algorithm enforce something like parity, or a limit on the entropy or 0-vs-1 balance of the output pattern itself, meaning that there are some "forbidden patterns" which never will be seen?

Examples of the possible general form of these "forbidden patterns" could be restrictions like "No more than N of the 160 bits set to the same value" or "No more than N sequential bits set to the same value."

The answer, as I understand it so far, is: There seem to be no forbidden patterns. However, as I would expect, as the patterns become more "interesting" due to larger numbers of equal bits or longer sequences of identical bits, it takes more and more brute-force search to discover them.

I wrote a program that simplifies to the following:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <openssl/sha.h>
#include <time.h>
unsigned char *SHA1(const unsigned char *d,
			unsigned long n,
			unsigned char *md);
#define LENGTH 20
#define TRUE 1
#define FALSE 0

int main(  int argc, char **argv ) {

	unsigned char	pattern[LENGTH],
			hash[LENGTH];
	int	i,
		loops = 0,
		events = 0,
		continue;

	// Initialize the input pattern to all zero
	for (i = 0; i < LENGTH; i++)
		pattern[i] = 0x00;

	while (1) {
		// Calculate the hash: hash <- sha1(pattern)
		SHA1(pattern, LENGTH, hash);

		// Count numbers of bits set to 0 and 1
		// ....
		// Find longest substring set to all 0
		// ....
		// Find longest substring set to all 1
		// ....

		// Print new discoveries.  But also print details
		// if we tied but did not exceed the last maximum.
		if (any of those are equal or larger than those found so far) {
			print: which loop we are on
			if (any is larger) {
				events++;
				printf("event %d ", events);
			} else
				printf("REPEAT ");
			printf("CPU time %.2fs ", ((float) clock())/((float) CLOCKS_PER_SEC));
			print: what interesting thing happened
			print: input value as hexadecimal
			print: output hash value as hexadecimal
		}

		// Step to the next loop, where the input
		// will be the output from this loop.
		pattern = hash;
		loop++;
	}
	return(0);  // This never happens!
} 

I ran this on a 4-core 3415 MHz AMD CPU:

%  lscpu 
Architecture:          x86_64
CPU op-mode(s):        64-bit
CPU(s):                4
Thread(s) per core:    1
Core(s) per socket:    4
CPU socket(s):         1
NUMA node(s):          1
Vendor ID:             AuthenticAMD
CPU family:            16
Model:                 4
Stepping:              3
CPU MHz:               3415.409
Virtualization:        AMD-V
L1d cache:             64K
L1i cache:             64K
L2 cache:              512K
L3 cache:              6144K

After two days with one CPU core saturated running this process 99-100% of the time, I had observed 73 events. Here is the raw output:

loop 0 event 0 CPU time 0.00s: new longest sequence of 1 bits: 5
loop 0 event 0 CPU time 0.00s: new longest sequence of 0 bits: 9
loop 0 event 0 CPU time 0.00s: new maximal number of 1 bits: 73
loop 0 event 0 CPU time 0.00s: new maximal number of 0 bits: 87
    input = 0x0000000000000000000000000000000000000000
    hash  = 0x6768033e216468247bd031a0a2d9876d79818f8f

loop 1 CPU time 0.00s: REPEAT longest sequence of 1 bits: 5
loop 1 event 1 CPU time 0.00s: new maximal number of 1 bits: 81
    input = 0x6768033e216468247bd031a0a2d9876d79818f8f
    hash  = 0x24d5d1ed739e0825bc6d9d44a7dd0d720454eafa

loop 2 event 2 CPU time 0.00s: new longest sequence of 1 bits: 9
loop 2 event 2 CPU time 0.00s: new maximal number of 1 bits: 87
    input = 0x24d5d1ed739e0825bc6d9d44a7dd0d720454eafa
    hash  = 0x2be310f6065ab0ab65ff7af8ec628fcbda47743c

loop 3 event 3 CPU time 0.00s: new maximal number of 1 bits: 91
    input = 0x2be310f6065ab0ab65ff7af8ec628fcbda47743c
    hash  = 0x26dcddb77e20fe05dfee1caad2ec93e806277dcf

loop 5 event 4 CPU time 0.00s: new longest sequence of 1 bits: 10
    input = 0x1fb4b4b5d99cdde327a5e2fdeda24fa76093c05a
    hash  = 0xd5f16da580cc7107fea67f68ca9cf1af8f8e4534

loop 8 event 5 CPU time 0.00s: new maximal number of 0 bits: 89
    input = 0xd0dd65193885ddcb3328d946c809727a157ba137
    hash  = 0x973be09580a8aa0a84cefd1488c8becda6032961

loop 9 event 6 CPU time 0.00s: new longest sequence of 0 bits: 10
    input = 0x973be09580a8aa0a84cefd1488c8becda6032961
    hash  = 0x0c57e7a8c64ac9e00e7597604c4a801b0dc3fd16

loop 12 CPU time 0.00s: REPEAT longest sequence of 0 bits: 10
    input = 0xe225aed4ce77008d3b6419ad219149bfcfd92c37
    hash  = 0x8f60711ac994f3fb6f71a9e3003815ab7f56a940

loop 13 event 7 CPU time 0.00s: new longest sequence of 1 bits: 13
loop 13 CPU time 0.00s: REPEAT longest sequence of 0 bits: 10
    input = 0x8f60711ac994f3fb6f71a9e3003815ab7f56a940
    hash  = 0x3d93653680d0801e406492077ffc40aaf2fb499b

loop 14 event 7 CPU time 0.00s: new longest sequence of 0 bits: 12
    input = 0x3d93653680d0801e406492077ffc40aaf2fb499b
    hash  = 0x60867d90e38bd25ad000c8107bc0f86250c9ffb8

loop 28 event 8 CPU time 0.00s: new maximal number of 0 bits: 91
    input = 0xb47d83309252215d76fe1720d9cd9c09f818c843
    hash  = 0x0c555bba983280366668ca4019c30741464cdde7

loop 32 event 9 CPU time 0.00s: new longest sequence of 0 bits: 17
loop 32 event 9 CPU time 0.00s: new maximal number of 0 bits: 92
    input = 0xdf1845d418ce323ac3da1108e761f11b0613fac9
    hash  = 0x4c16a214d704c94693765044e8eff98e7a0000c6

loop 33 event 10 CPU time 0.00s: new maximal number of 1 bits: 93
    input = 0x4c16a214d704c94693765044e8eff98e7a0000c6
    hash  = 0xef9d72c12d317a5f8adffbf7027a9aad43de85d3

loop 51 event 11 CPU time 0.00s: new maximal number of 0 bits: 93
    input = 0xa966bf125ad2dc0447d0ada2ad08890edf2c703c
    hash  = 0xb8bcf119642f4711832a6926ec82281952696140

loop 63 event 12 CPU time 0.00s: new maximal number of 0 bits: 94
    input = 0x8b312d017dcf4332207c74ff084d83df019647fb
    hash  = 0x36d5018ba0ce36a47e83a054082fb02c12918fc0

loop 86 event 13 CPU time 0.00s: new maximal number of 1 bits: 95
    input = 0xda50e45ab02f4cc5403f0b3e79498cb891cdcecc
    hash  = 0xbd27aa366cfbd6357f4ab9b78f45e34e572e5d7a

loop 87 event 14 CPU time 0.00s: new maximal number of 0 bits: 100
    input = 0xbd27aa366cfbd6357f4ab9b78f45e34e572e5d7a
    hash  = 0x741034b05050b442283d9077b25202487452315c

loop 234 CPU time 0.00s: REPEAT longest sequence of 1 bits: 13
    input = 0x69a0ab796a8b59e6f8a007c2fe5c295ceefa49c2
    hash  = 0xf23912545ed600a49f1ffdfa8a6dfff5f656fe42

loop 311 CPU time 0.00s: REPEAT longest sequence of 1 bits: 13
    input = 0xfee7b2bba79c8f46d635dd77d46aac0cf2aa8a79
    hash  = 0x8660b012454e6030842965530940435fff22d036

loop 320 event 15 CPU time 0.00s: new maximal number of 1 bits: 98
    input = 0xfe9d88d64a64f803916c60fabf5eea0deca1757c
    hash  = 0xfae7ecbf7b5af4625a75d364bdf2583b66bb3faa

loop 594 CPU time 0.00s: REPEAT longest sequence of 1 bits: 13
    input = 0xdba562da87119e66441e99e05bba748f3562cfee
    hash  = 0x2fff885626c5b518a18b8070c305a694448352da

loop 633 CPU time 0.00s: REPEAT longest sequence of 1 bits: 13
    input = 0x000327f913e47c2f594e91f80d61ce54fe11e924
    hash  = 0x3661e8b368a7ffce71a877241fa9cbe2756f4b2f

loop 695 event 16 CPU time 0.00s: new longest sequence of 1 bits: 14
loop 695 event 16 CPU time 0.00s: new maximal number of 1 bits: 99
    input = 0x908278763d08a4a2b86103e4d20835d5eed89182
    hash  = 0xb186fd3affd57ffe7ccf7443f4f51c84b4e6d6ee

loop 742 event 17 CPU time 0.00s: new longest sequence of 1 bits: 17
    input = 0x0649ea14a60ea9b0c89111d098a4a7a89c7bc014
    hash  = 0x38f293c7fffd477faf1b4e8d531981991ff79278

loop 1032 event 18 CPU time 0.00s: new maximal number of 1 bits: 101
    input = 0x0c606bc5ee4260f9e9204f206af70ffaa44ebe80
    hash  = 0x1577c5396f6db6d93f4b3fafeef0e2bef5db8b9e

loop 1121 CPU time 0.00s: REPEAT longest sequence of 0 bits: 17
    input = 0xe5722b226c707dc1eec8dbf24c76e6af131fe703
    hash  = 0x15d7e8769e91ceee69edd0cf91530e1d6000081f

loop 2232 CPU time 0.00s: REPEAT longest sequence of 0 bits: 17
    input = 0xa6df51e9610bad04d8e6cf02c3092687dba66825
    hash  = 0xa1e9d865ccf23c974d00004f1381f699244ae260

loop 2470 event 19 CPU time 0.00s: new maximal number of 0 bits: 102
    input = 0xa9630d10fb17be7168355cd6bdfd7c4027d0a9f9
    hash  = 0x60890001620f95a311f4944d24485e58240b4538

loop 2481 CPU time 0.00s: REPEAT longest sequence of 1 bits: 17
    input = 0x055c45e98df7390baea1777f42c52f7ac5ac8256
    hash  = 0x07c2d49e645af52c54affff8815f0fcf7e32c78c

loop 2853 CPU time 0.00s: REPEAT longest sequence of 0 bits: 17
    input = 0xc5a810269880ac1e467eaca76852f4242328950a
    hash  = 0x7630b510d60688215c0ecdfce2200009d9800f76

loop 3469 CPU time 0.00s: REPEAT longest sequence of 1 bits: 17
    input = 0x471d3a9004f9b04e203e4ac3541bb95fe747ec7e
    hash  = 0xf5fa260d2e1a9344a861b7c5ed3a9ffff2073dd4

loop 3770 event 20 CPU time 0.00s: new maximal number of 1 bits: 103
    input = 0x3a4d3b9be3aca25387dc461179f085c2e71d49a8
    hash  = 0x5bdf3b7247ec5effff5e5fe45117a6f1dcfb9f83

loop 4042 event 21 CPU time 0.00s: new maximal number of 1 bits: 110
    input = 0x57555184b5d446dcaf6ccba03c5ff06fea7560a6
    hash  = 0x2beeedf0ffdfff4b4b6ef6ddb5ff15ab9fd7f691

loop 4054 event 22 CPU time 0.00s: new longest sequence of 1 bits: 19
    input = 0x252060e991d10b7a0a79f9437eaf663b389c480a
    hash  = 0x9089a8cc8197ffff094d1e23dcb95b64e3c4d300

loop 4073 event 23 CPU time 0.00s: new longest sequence of 0 bits: 18
loop 4073 event 23 CPU time 0.00s: new maximal number of 0 bits: 104
    input = 0xd996850a047af91da28e6a60c9c8ef8a40e8fc71
    hash  = 0xd4a841e84f130c6a8ca09697083d45104040000b

loop 8760 event 24 CPU time 0.00s: new longest sequence of 0 bits: 19
    input = 0xa07c9c8651c84d7b0473d2ae0ace1385c17728cb
    hash  = 0x3fbdfbcb4e3060521d0c4f809d00001ca7834338

loop 9386 event 25 CPU time 0.01s: new longest sequence of 0 bits: 22
    input = 0x0c73a5d5d574b4084e41089fa9859eeb78f3387f
    hash  = 0xe84f82000006c12c25b8f33fd83fdd757497e289

loop 9776 CPU time 0.01s: REPEAT longest sequence of 1 bits: 19
    input = 0x61af898b59c3af2b44cea99972e8dad53c7f2e3e
    hash  = 0x011896154bffffa61bd89d726b3cf21f3ae23593

loop 10011 CPU time 0.01s: REPEAT longest sequence of 1 bits: 19
    input = 0x44eaee6ea6c1a9be68febb3864b6ebb44ba5e36c
    hash  = 0xe3f87b984fefc5decb64f5dd67a4a3ffff932202

loop 16563 event 26 CPU time 0.01s: new longest sequence of 1 bits: 20
    input = 0x681019eba9873516aca8b9aff10a25f0933ca503
    hash  = 0x308fffff3b8d50023d283c07358c1662ee2eab42

loop 25219 event 27 CPU time 0.02s: new longest sequence of 1 bits: 21
    input = 0x308561eb62cb9114869f1091b9c45005cc3a1f94
    hash  = 0x37b5c130b7fcb5e1fc03bb461426c7ffffda7b23

loop 63826 event 28 CPU time 0.07s: new longest sequence of 1 bits: 23
    input = 0xe2f7677c6d88384603009d682ec05d1c712eb50f
    hash  = 0xd3bff430a63fffff8df7e7c5aa2c0bed9a19e6ba

loop 94417 CPU time 0.10s: REPEAT longest sequence of 1 bits: 23
    input = 0xdec1e7f7f0afbf49659ae25ee6cae8f40fd0813d
    hash  = 0x7095b4b94984244acd5dcf85744a33fffff9ae02

loop 99998 CPU time 0.11s: REPEAT longest sequence of 0 bits: 22
    input = 0x908f2073f9bf5841018e03d741bfec84a96383fb
    hash  = 0xeccbe87fa9ba75b9dc59d2d0e10915e0000058ff

loop 142926 CPU time 0.16s: REPEAT longest sequence of 1 bits: 23
    input = 0x9a8399966347e6de76098beb624a4c2e2b4003f6
    hash  = 0xc2631c8ff97f847d7de96fe6b95f3fffffb41f8e

loop 176565 event 29 CPU time 0.20s: new maximal number of 0 bits: 107
    input = 0x3e236c633c89bb0adcc2fbcffcb262ca517360c4
    hash  = 0x4b9f004c420013e1f18484052821e1a40a0812b8

loop 225703 event 30 CPU time 0.26s: new longest sequence of 0 bits: 23
    input = 0x9aa94818f7ce73ae9431de25542db599f6b37af6
    hash  = 0x8f8715f0ed1ee45910fa5e13314623a516000002

loop 261383 CPU time 0.30s: REPEAT longest sequence of 0 bits: 23
    input = 0xa431e5f59e77751d047d591f87801a5782fc2955
    hash  = 0x79484df9000001ee6d766be5d9216b2c2b5da754

loop 354687 event 31 CPU time 0.40s: new longest sequence of 0 bits: 26
    input = 0x664a8b818bc878614a22237d5ddfc91c8390fa3b
    hash  = 0x328384a8b287cd2de9803993de0e041180000018

loop 381061 CPU time 0.43s: REPEAT longest sequence of 0 bits: 26
    input = 0x77fa9889769ec60af36c5689be8ed08977fea136
    hash  = 0x97ed24bec9f9a2b20e1dd5d597ae1a7b4000000c

loop 398977 event 32 CPU time 0.46s: new longest sequence of 1 bits: 26
    input = 0x5f2eb82025e196e0bfe262d673f584b626c03c1b
    hash  = 0xb25ffffff922c45f7dcea3d11e51f95a08572d1f

loop 779021 event 33 CPU time 0.89s: new maximal number of 0 bits: 108
    input = 0x133dc2a557b6277ef328b95bc49ec97830a9e097
    hash  = 0x00e9cca0806082117c0ac888256ea5c00425028c

loop 805201 event 34 CPU time 0.93s: new maximal number of 0 bits: 110
    input = 0xc0ebb39a8f0ed1c49b63c89fbdeca9e0978a5aaa
    hash  = 0x100e53051c10600233f040140a0308ab00d9818f

loop 970673 event 35 CPU time 1.12s: new maximal number of 1 bits: 111
    input = 0xf8119790524871c4c5665312dd482ec0b1959253
    hash  = 0xff9c6a66be77779d52fddfd5badffe6fcf69f66e

loop 1737924 CPU time 2.01s: REPEAT longest sequence of 0 bits: 26
    input = 0x265d4caa7a6c0ea824f0a23ef893919575162a07
    hash  = 0x25f9d0e35b765f74780000016c07779ee9858cdb

loop 2048251 CPU time 2.37s: REPEAT longest sequence of 0 bits: 26
    input = 0x5d9cede2df2912b914b1b67110f7168d6186ff38
    hash  = 0x5bc900000038022e9ed51fb00f0ff4275b247ffa

loop 2094609 event 36 CPU time 2.42s: new longest sequence of 1 bits: 28
    input = 0xb1caa251dc341fff7d8fb4fc85ff355d183b6e39
    hash  = 0x012deda844e1cac5cb40a1bf4ee7ffffff8c87fc

loop 2508544 CPU time 2.90s: REPEAT longest sequence of 0 bits: 26
    input = 0xf47c3de0cd90f9eee71ebad0b687a863b850c7e9
    hash  = 0x37e61db8000001520a9d522696e91851029b837d

loop 3643356 CPU time 4.21s: REPEAT longest sequence of 0 bits: 26
    input = 0xf836fb6f11362aa675c346bef30b1b6febea28f9
    hash  = 0xab7fd85c12beb88fdefce1450000002e524fdfea

loop 4941570 event 37 CPU time 5.71s: new longest sequence of 1 bits: 29
    input = 0xca4c21288c9a377e5d3da41df50d241801d5b708
    hash  = 0xfffffffac2a5dd1ca86d0359dae49e13a9ca4678

loop 6354166 CPU time 7.35s: REPEAT longest sequence of 0 bits: 26
    input = 0x38f14a9e3f1d6fc58897dd17a9242cd5b0a46bd9
    hash  = 0x8090000002b73dfb0a7dc4722bac0b04466fcdcd

loop 6619279 event 38 CPU time 7.65s: new maximal number of 0 bits: 111
    input = 0x7585a39456ce0c48fab8e5fb9ca2515a24ccbe1b
    hash  = 0x20d62140c010fa326b908008c52066c50280a104

loop 6720710 event 39 CPU time 7.77s: new maximal number of 1 bits: 112
    input = 0x443700879f416befde16901c7d9b7f73d8eeda53
    hash  = 0xd6f52d9f57d5efcd7af3b29bcf338fdfffde7ef7

loop 6952331 event 40 CPU time 8.04s: new maximal number of 0 bits: 113
    input = 0x2841907fa036ec311573ed69df6395d6410e67ed
    hash  = 0x40a0a8031a1122014428a11c0a211019b01da90a

loop 7992556 event 41 CPU time 9.24s: new longest sequence of 0 bits: 27
    input = 0x990580fdb2ecf4f50622d380b8a70e1720c471f3
    hash  = 0xa7f430000001970a3c8846dfeebef8a8c0872591

loop 8608466 event 42 CPU time 9.96s: new longest sequence of 0 bits: 28
    input = 0x3fe13cdb9f879c5e2c9046c2d9e8ac925f3d7b1e
    hash  = 0x0ff4ac0dfdaf312eef0165d35ee68600000013d1

loop 12302530 event 43 CPU time 14.23s: new longest sequence of 0 bits: 29
    input = 0x86f7a8febc121cd5d774cdf1a4a8ed42d97ffeb3
    hash  = 0xa4e9ae800000026d37e318729a0ad6b97565a409

loop 15192277 CPU time 17.57s: REPEAT longest sequence of 1 bits: 29
    input = 0x961efc07f3722137ca1106cd689a3e66dc7de3b0
    hash  = 0xda9c8af0ca17b0f6fffffffb056df028d0080aaf

loop 15362149 event 44 CPU time 17.77s: new longest sequence of 1 bits: 33
    input = 0x880a6411db9f74b3ee458b2aef27960a4b68f12e
    hash  = 0x4687cf429fedad0ffffffff85fecacbb04126381

loop 23051632 CPU time 26.67s: REPEAT longest sequence of 0 bits: 29
    input = 0x549d9862682edfdf9b6e66ea9acf5adb78bd6abd
    hash  = 0x66eb40000001c56acd9a04aa6e3e4b8cb006d82e

loop 30366418 event 45 CPU time 35.13s: new maximal number of 1 bits: 113
    input = 0xc8c1ba1a2ecbdd867303a193e469dcaceeaed20a
    hash  = 0x32bac731f7ffa7e7bfdedbff9f2cbbeafbee4df7

loop 31470232 event 46 CPU time 36.41s: new longest sequence of 0 bits: 31
    input = 0x0d8a22ac7848eba1dd0ba3e14bfa223c29c5984d
    hash  = 0x6e82cfdf4108b6071e4ad766000000035be8c316

loop 54249543 event 47 CPU time 62.82s: new maximal number of 1 bits: 114
    input = 0xe87817dea967a51b485f21d6f847910421f65f5e
    hash  = 0x1cfaf5f7f74e3a3bffcfbb4f7ebbdcfdf9deb36f

loop 55340200 event 48 CPU time 64.08s: new maximal number of 0 bits: 114
    input = 0x055483449b473c8e2eac5f3fe7cb688ed0a1fdb5
    hash  = 0xa02109a24c02d08413126404044360131c242415

loop 73333867 event 49 CPU time 84.92s: new maximal number of 1 bits: 115
    input = 0xc711ee2be1900f97c478cdaa84776ef79a364b89
    hash  = 0x6dbf5daed727eff7fffdcd6d2fd5efac565f7d7f

loop 86049535 event 50 CPU time 99.66s: new maximal number of 0 bits: 115
    input = 0xf36894db3a21c9dd7e8776db4d248f0ecbb8de88
    hash  = 0x4200a8c1244a031800415020020f1b581b245844

loop 113359411 CPU time 131.29s: REPEAT longest sequence of 0 bits: 31
    input = 0x2df9a186354af1ea8cae6d54d05c95d0138f400e
    hash  = 0x1914bbf1871d9090cfc6e1cbebf2000000032cb6

loop 173644586 event 51 CPU time 201.09s: new longest sequence of 1 bits: 34
    input = 0xa0dcd751d0bb3c3b4459c41735c641507e5e0057
    hash  = 0x388c0ffffffffd13aaf0b26ab0331309b143dd6e

loop 183289550 CPU time 212.25s: REPEAT longest sequence of 0 bits: 31
    input = 0xf1e87aaa73391daaf8822241ee0cb161f22fd158
    hash  = 0x7a32ad5bb5100000001f4d3c9f74024514b47624

loop 191664451 event 52 CPU time 221.96s: new longest sequence of 0 bits: 37
    input = 0x2ce961a796226dbed72268c4002ec3d64e74f2ed
    hash  = 0x8a57f43b13800000000334bf5ce7ac82779a991b

loop 282466814 event 53 CPU time 327.07s: new maximal number of 1 bits: 116
    input = 0x65d75bbb5d381e007488902feff65e3ea0a52962
    hash  = 0xf7efdf37fa6df93b7d5d3a73f55fcbfd7ddff7ca

loop 378036082 CPU time 437.45s: REPEAT longest sequence of 1 bits: 34
    input = 0xf5ccbc7ea75d7ed5bb5cfa2d0e9610628f91c3d3
    hash  = 0xc430f56f43d576f4c47a87fffffffecc687cd331

loop 531330505 CPU time 614.55s: REPEAT longest sequence of 1 bits: 34
    input = 0xa0c600ab764a33d9985dcd636bca768ddbd72315
    hash  = 0xc606b1ec6e2b9128f4f7fffffffead8195dc3199

loop 565438242 event 54 CPU time 653.97s: new longest sequence of 1 bits: 37
    input = 0xcb3c99ddd9b67ebe49da350a6c75c0ddbfc031ab
    hash  = 0x77cfd152770080a6a220c5b9fffffffff3456a84

loop 711024812 event 55 CPU time 822.49s: new maximal number of 0 bits: 116
    input = 0x5131004616424594de602251d94838d504ddb321
    hash  = 0x81c0003892481f26c21ca100aa0200a009043058

loop 724549671 event 56 CPU time 838.14s: new maximal number of 0 bits: 117
    input = 0x2022793420624d8e02e9445fa9dbab10f2fa7a6c
    hash  = 0x2da4848c564041811221000a0271010602412885

loop 857004833 CPU time 991.47s: REPEAT longest sequence of 0 bits: 37
    input = 0x8c3619ba64c2a68d50063ba5f9a9ace2b44eee3a
    hash  = 0xdd6920a06eabc45aa000000000d75adb407973b5

loop 1417207898 event 57 CPU time 1639.08s: new maximal number of 1 bits: 117
    input = 0x636c915876c2b95e52b8780756b64d4abbb23f3e
    hash  = 0x76eff507cfd76dffe74fb71fdf566ffdffbcafde

loop 1479938248 event 58 CPU time 1711.79s: new maximal number of 0 bits: 118
    input = 0x6c0078e9af6ae434da66a893b5e21417bea48e5c
    hash  = 0x010098640c10709108da2a21400600c102545105

loop 2681535980 event 59 CPU time 3101.75s: new maximal number of 1 bits: 118
    input = 0xa958e0482acb6d07bdaebff7923504d10a5ef0de
    hash  = 0x7b70fe7bfbdf7bf39fe6ff1bd5f7ebfa5bbef3f9

loop 2849034123 CPU time 3295.63s: REPEAT longest sequence of 0 bits: 37
    input = 0xc6f59c1a93796e516b3b9bcf7b1470f58ccc5fa8
    hash  = 0xdf1f36c0ae6f6905219c005669bf7c2000000000

loop 3340510932 event 60 CPU time 3863.89s: new maximal number of 0 bits: 119
    input = 0xe1d29a688d5ecd38ea5c4f3183b0347dd8e5113f
    hash  = 0x0030dc82082c451929e225130020920080000324

loop 6099526669 event 61 CPU time 7052.98s: new longest sequence of 1 bits: 39
    input = 0xd293dbdf3cb5e4fff378e3e24a07032daebfd5ed
    hash  = 0x883bb9df32e2f11e2b43fffffffffbff333e3adb

loop 6383537660 event 62 CPU time 7381.04s: new longest sequence of 1 bits: 41
    input = 0xcb10bd12c57b50c0f694c8870f9fa85ed3b3f29a
    hash  = 0x03def07ae480f51ffffffffff136839cc4ac3d15

loop 6631168516 event 63 CPU time 7667.22s: new longest sequence of 0 bits: 38
    input = 0xf232b4c6b3faabfe35a7ef27d07158bcd89707ba
    hash  = 0x0000000003ef6c0f88e5ddf2cbcc3997663242dd

loop 6725463530 event 64 CPU time 7776.44s: new maximal number of 1 bits: 120
    input = 0xcc080c4c2b3db7e995dc6f3b7066b90c637ecf5f
    hash  = 0xbfa67dcfd6c1f5bf77f7ef75a7ffbf7fee97f7bd

loop 13550739796 CPU time 15661.23s: REPEAT longest sequence of 0 bits: 38
    input = 0xac58208f52cb094415128304d3a5c7c842eb38dd
    hash  = 0x3370b01c96af956880000000015c9580fd741d1b

loop 17887716422 event 65 CPU time 20670.01s: new longest sequence of 0 bits: 39
    input = 0x27302176efefe02e0714e6e3faebe2840351ae45
    hash  = 0x20000000002870dedb531f649a91505324e1872c

loop 29151116953 event 66 CPU time 33682.38s: new maximal number of 1 bits: 121
    input = 0x47c1d852fccb0995716732e9f50694ba23587c84
    hash  = 0x77fbfdb5a77b8f5ef375efbadfe2ffffe75afffb

loop 37151390083 event 67 CPU time 42917.45s: new maximal number of 0 bits: 120
    input = 0x9b0c3bbca76824914dea71147751db34c9b076ce
    hash  = 0xa1002246c882004420150328e0200204940aab08

loop 37200793617 event 68 CPU time 42974.47s: new maximal number of 0 bits: 122
    input = 0xcca02e75717ae30b24deb999c1b6722331c9a877
    hash  = 0x023080409900002008133288061226370019a840

loop 41160386629 CPU time 47544.90s: REPEAT longest sequence of 0 bits: 39
    input = 0x58dca576ec02560f97945a18392ee9be6f5c8657
    hash  = 0x87dd41ca4d203edb5d50000000001086194eea0f

loop 42596091949 event 69 CPU time 49202.08s: new longest sequence of 0 bits: 40
    input = 0x8405af63d7da73a49516a9dbacc0e4886877c01f
    hash  = 0x61259e00000000017fdac25079c1831e684a40a2

loop 43824344382 CPU time 50619.82s: REPEAT longest sequence of 0 bits: 40
    input = 0x6c0dcbcfeec62f239170a866381a69f707508069
    hash  = 0x6c0000000002e43295ded77f2d18548d7b7cec90

loop 45642612307 event 70 CPU time 52718.53s: new longest sequence of 1 bits: 44
    input = 0x5f75aadf4d919ffddad5b689c28429e58fab3083
    hash  = 0xb41bf251baafffffffffff2f4942f94bab9c3bfa

loop 54743606639 event 71 CPU time 63241.78s: new longest sequence of 0 bits: 41
    input = 0x5a3be4f90e5295b729ad1277275cc209ffb005df
    hash  = 0x152c16e0d29249feca00000000008d70841c7836

loop 96097737693 event 72 CPU time 111012.54s: new longest sequence of 0 bits: 44
    input = 0x102e5fc7773f8c46a2db5a67ee71f9f9e393b3ca
    hash  = 0x53000000000009f5e00f5bd39b6d096b2ec60ca2

loop 140199958490 event 73 CPU time 161927.64s: new maximal number of 1 bits: 123
    input = 0x04dd5fd34033377fdae13e5fe49e59c53ef1833b
    hash  = 0xf773dfb7dafdfdf77b5dd6fdfff6d5dfdd5e3d7f

loop 204535956068 event 74 CPU time 236197.67s: new longest sequence of 0 bits: 49
    input = 0xd48baf9ca7a0b3d18d1bbc27341f89a4456bff8e
    hash  = 0x0330a65451b1a191f4e616ae71aa000000000000

loop 417333824780 event 75 CPU time 481953.75s: new maximal number of 0 bits: 123
    input = 0x4464a2c3f07222066f4fbb3e52289b9f869f55b5
    hash  = 0x20118480142aa0e0404012b010e0341400600038