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