<<< prev block block 333278 next block >>>
+------------------------------------------------------------------+
| THIBA - Things/Texts Hidden In Bitcoin Addresses readme >>> |
+------------------------------------------------------------------+
| hash160 | decoded text |
+------------------------------------------------------------------+
+------------------------------------------------------------------+
| 64c12c6b6a3b64b55a7acbed78af62e75d539f5940d0f6fd12d9722cb7fb939e |
+------------------------------------------------------------------+
| 2320626c6f636b636861696e656e74726f70792e | # blockchainentropy.
| 70790a232053656c65637473206e20626c6f636b | py # Selects n block
| 20686561646572732066726f6d20746865206269 | headers from the bi
| 74636f696e20626c6f636b636861696e20626173 | tcoin blockchain bas
| 6564206f6e20612068657861646563696d616c20 | ed on a hexadecimal
| 696e70757420737472696e672e20546869732069 | input string. This i
| 6e70757420737472696e6720636f756c64206265 | nput string could be
| 20610a2320686173686564207365637265742070 | a # hashed secret p
| 6173737068726173652e20546869732061707072 | assphrase. This appr
| 6f6163682063616e206265207573656420617320 | oach can be used as
| 616e2065787472656d656c79204849474820656e | an extremely HIGH en
| 74726f707920736f7572636520666f7220612070 | tropy source for a p
| 617373776f72642077686963682069730a232065 | assword which is # e
| 66666563746976656c7920696d706f737369626c | ffectively impossibl
| 6520746f20627275746520666f7263652e0a230a | e to brute force. #
| 23204578616d706c6573206f66206e20283d6e75 | # Examples of n (=nu
| 6d626572206f6620626c6f636b732073656c6563 | mber of blocks selec
| 746564293a0a232020204173206f66204e6f7665 | ted): # As of Nove
| 6d62657220323031342074686572652061726520 | mber 2014 there are
| 726f7567686c79203330302c30303020626c6f63 | roughly 300,000 bloc
| 6b7320696e2074686520626974636f696e20626c | ks in the bitcoin bl
| 6f636b636861696e2e0a232020206e203d203135 | ockchain. # n = 15
| 3a20546865726520617265203330302c3030305e | : There are 300,000^
| 3135203d20325e323733203d2031305e38322077 | 15 = 2^273 = 10^82 w
| 617973206f662073656c656374696e6720313520 | ays of selecting 15
| 626c6f636b73206f7574206f66203330302c3030 | blocks out of 300,00
| 300a232020206e203d2033303a20546865726520 | 0 # n = 30: There
| 617265203330302c3030305e3330203d20325e35 | are 300,000^30 = 2^5
| 3435203d2031305e3136342077617973206f6620 | 45 = 10^164 ways of
| 73656c656374696e6720333020626c6f636b7320 | selecting 30 blocks
| 6f7574206f66203330302c3030300a230a232020 | out of 300,000 # #
| 2041207368613235362073756d207969656c6473 | A sha256 sum yields
| 20612036342d6368617261637465722068657861 | a 64-character hexa
| 646563696d616c20737472696e67207769746820 | decimal string with
| 63616e206265206469766964656420696e746f20 | can be divided into
| 313520626173652d313020696e7465676572730a | 15 base-10 integers
| 2320202041207368613531322073756d20796965 | # A sha512 sum yie
| 6c64732061203132382d63686172616374657220 | lds a 128-character
| 68657861646563696d616c20737472696e672077 | hexadecimal string w
| 6974682063616e20626520646976696465642069 | ith can be divided i
| 6e746f20333020626173652d313020696e746567 | nto 30 base-10 integ
| 6572730a230a23204869676820456e74726f7079 | ers # # High Entropy
| 3a0a232020204120626974636f696e20626c6f63 | : # A bitcoin bloc
| 6b20686561646572206973206120736861323536 | k header is a sha256
| 20636865636b73756d2077697468203634206368 | checksum with 64 ch
| 6172616374657273207768696368206571756174 | aracters which equat
| 657320746f2032353620626974206f6620656e74 | es to 256 bit of ent
| 726f70792e0a2320202053656c656374696e6720 | ropy. # Selecting
| 313520626c6f636b20636865636b73756d732079 | 15 block checksums y
| 69656c6473203135202a2032353620626974203d | ields 15 * 256 bit =
| 203338343020626974206f6620656e74726f7079 | 3840 bit of entropy
| 2c20737472696e67206f66206c656e6774682039 | , string of length 9
| 36300a2320202053656c656374696e6720333020 | 60 # Selecting 30
| 626c6f636b20636865636b73756d73207969656c | block checksums yiel
| 6473203330202a2032353620626974203d203736 | ds 30 * 256 bit = 76
| 383020626974206f6620656e74726f70792c2073 | 80 bit of entropy, s
| 7472696e67206f66206c656e6774682031393230 | tring of length 1920
| 0a230a232048696e74733a0a2320202042652073 | # # Hints: # Be s
| 6d6172742061626f757420746865207365637265 | mart about the secre
| 74207061737370687261736520796f7520757365 | t passphrase you use
| 20617320696e707574202873756666696369656e | as input (sufficien
| 74206c656e6774682c20656e74726f70792c206e | t length, entropy, n
| 6f2064696374696f6e61727920776f7264732065 | o dictionary words e
| 74632e290a23202020426520736d617274206162 | tc.) # Be smart ab
| 6f757420746865206861736866756e6374696f6e | out the hashfunction
| 2028757365206120707572706f73656c7920736c | (use a purposely sl
| 6f77206f6e652c20652e672e2073637279707429 | ow one, e.g. scrypt)
| 0a230a23204e6565647320656c65637472756d74 | # # Needs electrumt
| 6f6f6c732e7079202873656520626974636f696e | ools.py (see bitcoin
| 207472616e73616374696f6e2035393337353763 | transaction 593757c
| 3337333033613834383763363065643263353232 | 37303a8487c60ed2c522
| 6233313535393462333635613636623230313263 | b315594b365a66b2012c
| 3436646130616338626235303432323561290a23 | 46da0ac8bb504225a) #
| 206173682c20323031342d31322d30370a232044 | ash, 2014-12-07 # D
| 6f6e6174696f6e732077656c636f6d653a203132 | onations welcome: 12
| 64584c675352726f7267576171464e3157574c38 | dXLgSRrorgWaqFN1WWL8
| 6b5a78797044634c316935790a696d706f727420 | kZxypDcL1i5y import
| 6f730a696d706f7274207379730a0a66726f6d20 | os import sys from
| 656c65637472756d746f6f6c7320696d706f7274 | electrumtools import
| 20686173685f6865616465722c20726561645f68 | hash_header, read_h
| 65616465720a0a0a6465662066696e645f686173 | eader def find_has
| 686573286865785f7374722c2066696c656e616d | hes(hex_str, filenam
| 653d27626c6f636b636861696e5f686561646572 | e='blockchain_header
| 73272c20766572626f73653d46616c7365293a0a | s', verbose=False):
| 202020206966206e6f74206f732e706174682e65 | if not os.path.e
| 78697374732866696c656e616d65293a0a202020 | xists(filename):
| 20202020207072696e742027626c6f636b636861 | print 'blockcha
| 696e5f686561646572732066696c65206e6f7420 | in_headers file not
| 666f756e642e20446f776e6c6f61642077697468 | found. Download with
| 3a20270a20202020202020207072696e74202777 | : ' print 'w
| 67657420687474703a2f2f686561646572732e65 | get http://headers.e
| 6c65637472756d2e6f72672f626c6f636b636861 | lectrum.org/blockcha
| 696e5f68656164657273270a2020202020202020 | in_headers'
| 7379732e657869742831290a0a202020206c6973 | sys.exit(1) lis
| 745f6f665f686173686573203d205b5d0a0a2020 | t_of_hashes = []
| 20207072696e7420276f726967696e616c206865 | print 'original he
| 7861646563696d616c206e756d6265722028313a | xadecimal number (1:
| 3230206f6620746f74616c206c656e6774682027 | 20 of total length '
| 202b20737472286c656e286865785f7374722929 | + str(len(hex_str))
| 202b202729270a202020207072696e7420686578 | + ')' print hex
| 5f7374725b313a32305d0a0a202020202320636f | _str[1:20] # co
| 6e7665727420686578206e756d62657220746f20 | nvert hex number to
| 696e7465676572207468656e20636f6e76657274 | integer then convert
| 20746f20737472696e670a20202020696e745f73 | to string int_s
| 7472203d2073747228696e74286865785f737472 | tr = str(int(hex_str
| 2c20313629290a0a202020207072696e7420276f | , 16)) print 'o
| 726967696e616c2068657861646563696d616c20 | riginal hexadecimal
| 6e756d62657220636f6e76657274656420746f20 | number converted to
| 696e74656765722028313a3230206f6620746f74 | integer (1:20 of tot
| 616c206c656e6774682027202b20737472286c65 | al length ' + str(le
| 6e28696e745f7374722929202b202729270a2020 | n(int_str)) + ')'
| 20207072696e7420696e745f7374725b313a3230 | print int_str[1:20
| 5d0a0a2020202069203d20300a202020206a203d | ] i = 0 j =
| 203520202320617272617920696e646963657320 | 5 # array indices
| 746f2067657420696e746567657273206f66206c | to get integers of l
| 656e677468203520283d72616e676520312d3939 | ength 5 (=range 1-99
| 2c39393929206f7574206f6620696e745f737472 | ,999) out of int_str
| 0a0a202020206b203d2031202023207363616c69 | k = 1 # scali
| 6e6720706172616d6574657220746f2067657420 | ng parameter to get
| 696e74656765727320696e746f2072616e676520 | integers into range
| 312d3330302c3030302c206c6f6f70732066726f | 1-300,000, loops fro
| 6d203120746f20330a202020206c203d20312020 | m 1 to 3 l = 1
| 2320636f756e7473206e756d626572206f662068 | # counts number of h
| 61736865730a0a202020207768696c6520547275 | ashes while Tru
| 653a0a20202020202020206375725f696e74203d | e: cur_int =
| 20696e7428696e745f7374725b693a6a5d290a0a | int(int_str[i:j])
| 202020202020202023207363616c652076616c75 | # scale valu
| 6520696e746f2072616e676520312d3330302c30 | e into range 1-300,0
| 30302c0a20202020202020202320652e672e2028 | 00, # e.g. (
| 32202a203130302c30303029202d203132333435 | 2 * 100,000) - 12345
| 203d203138372c3635350a202020202020202063 | = 187,655 c
| 75725f696e74203d20286b202a20313030303030 | ur_int = (k * 100000
| 29202d206375725f696e740a0a20202020202020 | ) - cur_int
| 20626c6f636b5f686561646572203d2068617368 | block_header = hash
| 5f68656164657228726561645f68656164657228 | _header(read_header(
| 66696c656e616d652c206375725f696e7429290a | filename, cur_int))
| 20202020202020206c6973745f6f665f68617368 | list_of_hash
| 65732e617070656e6428626c6f636b5f68656164 | es.append(block_head
| 6572290a2020202020202020696620766572626f | er) if verbo
| 73653a0a2020202020202020202020206966206c | se: if l
| 203d3d20313a0a20202020202020202020202020 | == 1:
| 2020207072696e742027626c6f636b7320616e64 | print 'blocks and
| 207468656972206861736865733a270a20202020 | their hashes:'
| 20202020202020207072696e7420737472286c29 | print str(l)
| 202b20273a2027202b20737472286375725f696e | + ': ' + str(cur_in
| 7429202b2027202d2027202b20626c6f636b5f68 | t) + ' - ' + block_h
| 65616465720a2020202020202020202020206c20 | eader l
| 2b3d20310a0a2020202020202020232070726570 | += 1 # prep
| 61726520696e646963657320666f72206e657874 | are indices for next
| 20696e7465676572202873686966742062792035 | integer (shift by 5
| 290a202020202020202069203d206a0a20202020 | ) i = j
| 202020206a202b3d20350a0a2020202020202020 | j += 5
| 232061766f696420686176696e67206120736d61 | # avoid having a sma
| 6c6c6572207468616e206c656e67746820352069 | ller than length 5 i
| 6e74656765722061742074686520656e640a2020 | nteger at the end
| 2020202020206966206a203e3d206c656e28696e | if j >= len(in
| 745f737472293a0a202020202020202020202020 | t_str):
| 627265616b0a0a20202020202020202320616461 | break # ada
| 7074207363616c696e6720706172616d2028726f | pt scaling param (ro
| 74617465206b2066726f6d203120746f2033290a | tate k from 1 to 3)
| 20202020202020206966206b203d3d20333a0a20 | if k == 3:
| 20202020202020202020206b203d20310a202020 | k = 1
| 2020202020656c73653a0a202020202020202020 | else:
| 2020206b202b3d20310a0a202020207265747572 | k += 1 retur
| 6e2027272e6a6f696e286c6973745f6f665f6861 | n ''.join(list_of_ha
| 73686573290a0a6966205f5f6e616d655f5f203d | shes) if __name__ =
| 3d20275f5f6d61696e5f5f273a0a202020206966 | = '__main__': if
| 206c656e287379732e6172677629203c20323a0a | len(sys.argv) < 2:
| 20202020202020207072696e7420274552524f52 | print 'ERROR
| 3a20617267732120313a206865785f737472270a | : args! 1: hex_str'
| 20202020202020207379732e657869742831290a | sys.exit(1)
| 20202020656c73653a0a2020202020202020626c | else: bl
| 6f636b5f686173686573203d2066696e645f6861 | ock_hashes = find_ha
| 73686573287379732e617267765b315d2c207665 | shes(sys.argv[1], ve
| 72626f73653d54727565290a0a20202020202020 | rbose=True)
| 207072696e742027616c6c206861736865732063 | print 'all hashes c
| 6f6d62696e656420286c656e6774683a2027202b | ombined (length: ' +
| 20737472286c656e28626c6f636b5f6861736865 | str(len(block_hashe
| 732929202b2027293a20270a2020202020202020 | s)) + '): '
| 7072696e7420626c6f636b5f6861736865730a20 | print block_hashes
+------------------------------------------------------------------+