18 июля 2010, 10:16:21 PM   # 1
 
 
Сообщения: 574
Цитировать по имени
цитировать ответ
по умолчанию Re: отметки времени

Взлом Биткоин адресов.
500 Биткоинов взломаны в "мозговом кошельке" с паролем "bitcoin is awesome"
Адрес кошелька: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE
Приватный ключ: 5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e
подробнее...


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
В течение нескольких дней я собирал тайминг сгенерированных блоков момент моя система заметила новый сгенерированный блок. Некоторое время назад я узнал, что я могу извлечь временную метку информации из самой p2p сети. После некоторого ручного анализа моих данных и данных, полученных из сети p2p, я заметил, что продолжительность между сгенерированными блоками были почти точной, но в ряде случаев расчеты моей системы были выключены на целых несколько минут. Я определил это может быть вызвано из-за некоторые блоки генерируются узлами, в которых она принимает больше информации блока генерируется от достижения моих или всех других узлов, однако я не уверен.
   
Для определения данных временной метки из p2p сети я использовал следующее:
Код:
кошка ~ / .bitcoin / debug.log > вне
Bitcoin -printblock

Я выполнил это в три отдельных общих блоках генерируются. Вот некоторые сравнения информации из заголовков каждого бревна.

Код:
68845 (всего 32963420 байт)
Загруженные 9173 адреса
LoadBlockIndex (): hashBestChain = 00000000000394ae высота = 68844
mapBlockIndex.size () = 68880
nBestHeight = 68844

Код:
68858 (всего 32771350 байт)
Загруженные 9190 адреса
LoadBlockIndex (): hashBestChain = 00000000000052ff высота = 68857
mapBlockIndex.size () = 68893
nBestHeight = 68857

Код:
68943 (всего 32837629 байт)
Загруженные 9407 адреса
LoadBlockIndex (): hashBestChain = 00000000015364ae высота = 68942
mapBlockIndex.size () = 68978
nBestHeight = 68942

Я решил, что в лог DATAS, что каждая строка, начинающаяся с "CBlock"  и содержащий "NTime" были сведения о генерации блока. Однако это показалось мне странным, что выход производится из 68,858 был меньше данных, чем от 68,845.

68845 выхода журнала имеет 69,402 CBlock линии. (557 CBlock линии больше, чем блоки генерируются)
68858 выхода журнала имеет 68,893 CBlock линии. (35 CBlock линии больше, чем блоки генерируются)
68943 выхода журнала имеет 68,978 CBlock линии. (35 CBlock линии больше, чем блоки генерируются)

В обоих журналах для 68,858 и 68,943 количество CBlock линий соответствует mapBlockIndex.size (), но не для 68,845. Является ли мои данные журнала неточными или есть другое объяснение для этого?
   
-

После получения этой информации, я проанализирован его с помощью следующего:
Код:
Grep CBlock файл_журнала | вырезать -b 99-108 | сортировать

Это обеспечило последовательную информацию временной метки, которые я использовал для сравнения моих данных журнала в официальных DATAS производства системы p2p Bitcoin.
Как примечание, я заметил, что некоторые из меток времени не были уникальными, и дублируются.

Код:
# Grep CBlock debug.log.68943 | вырезать -b 99-108 | сортировать | туалет -l
68978
смерть .bitcoin # Grep CBlock debug.log.68943 | вырезать -b 99-108 | сортировки | Uniq | туалет -l
68938

Однако, это невозможно для журнала для 68,943 блоков только иметь данные для 68,938 (менее) блоков, поэтому я делаю вывод, что некоторые блоки были созданы в то же метке времени, как ранее созданный блок и предложения Gavin этого развенчать в том, что метки время будет уникальным [ http://bitcointalk.org/index.php?topic=457.msg4042#msg4042 ].

Сравнивая свои данные системного журнала для данных, выводимых из каротажных данных для 68,858 Я нашел образец в длительностей между блоком генерации и был в состоянии совпасть, который временная метка была связана с какой блок генерируется. Бревенчатые данные `Bitcoin -printblock` не указывает, какой блок связан с меткой времени. Поэтому я должен был либо принять или использовать свои существующие данные, которые я сделал. Тем не менее, потому что есть больше CBlock линий, то фактические сформированные блоки в файлах журнал, я не уверен относительно того, как приступить к исключению определенной CBlock линии от моего дальнейшего анализа, чтобы совпасть метки времени с сгенерированными блоками. Я заметил, что оба журнала для 68,858 и 68,943 имеют только 35 CBlock линии больше, и это может быть полезно для понимания, которые не имеют отношения CBlocks / что-то еще, но сейчас я прошу сообщества / УБС, если они могут помочь объяснить это лучше.


котировка
Я определил, что некоторые генерируемые блоки имеют одинаковую метку времени, как ранее сгенерированный блок: http://bitcointalk.org/index.php?topic=464.0
Где информация о временной метки взялось?
не забудьте -printblock также печатает "тупик" блоки
<ЛЧМ> Prolly от orginating часов PC
PC часы + - смещение в среднем от сверстников
ArtForz, я не знаю, что. Вы должны ответить на этот вопрос в теме, так что другие знают и
Что такое тупиковый блок? Или, если вы подробнее в теме форума, я буду читать его там.
хорошо, когда 2 клиентов почти одновременно найти хэш, * как * блоки получить распространение по сети
поэтому у нас есть 2 блоков с одинаковым hashPrevBlock
и в основном общая сеть "решает" какой блок является "реальный" один, который привыкает, как hashPrevBlock для следующего блока
но те, "тупик" блоки все еще остаются в БД, и -printblocks отвалов ет

ArtForz способствовали этот кусок кода, который извлекает информацию из временной метки blk0001.dat
Код:
#! / USR / бен / окр питон
импорт структура
импорт hashlib

Защиту uint256_deser (ы):
г = 0L
для г в xrange (8):
т = struct.unpack ("<я", С [я * 4: я * 4 + 4]) [0]
г + = т << (Я * 32)
возвращение г

Защиту uint256_ser (и):
Rs = ""
для г в xrange (8):
RS + = struct.pack ("<я", у & 0xFFFFFFFFL)
U >>= 32
вернуться RS

Защиту uint256_from_compact (с):
= число-байт (с >> 24) & 0xFF
v = (с & 0xFFFFFFL) << (8 * (- 3 число-байт))
возврат v

Защиту get_difficulty (с):
вернуться поплавка (uint256_from_compact (0x1D00FFFF) * 1000 // uint256_from_compact (с)) / 1000.

Класс CBlock:
Защита десериализации (я, s):
self.nVersion = struct.unpack ("<я", С [0: 4]) [0]
self.hashPrevBlock = uint256_deser (с [4:36])
self.hashMerkleRoot = uint256_deser (ы [36:68])
self.nTime = struct.unpack ("<я", С [68:72]) [0]
self.nBits = struct.unpack ("<я", С [72:76]) [0]
self.nNonce = struct.unpack ("<я", С [76:80]) [0]
h1 = hashlib.sha256 (с [0:80]). (переваривают)
self.hash = uint256_deser (hashlib.sha256 (h1) .digest ())
если self.hash > uint256_from_compact (self.nBits):
поднять ValueError ("плохой хэш в% с" % Магнезия (сам))
self.next = []
self.blocknum = -1
Защиту __repr __ (Я):
вернуть "CBlock {вер =% 08x л.с. =% 064x гм =% 064x нт =% 08x пь =% 08x пп =% 08x ч =% 064x, п =% я}" % (Self.nVersion, self.hashPrevBlock, self.hashMerkleRoot, self.nTime, self.nBits, self.nNonce, self.hash, self.blocknum)

Защиту get_chain_len (BLK):
г = 1
в то время как Len (blk.next) == 1:
BLK = blk.next [0]
г + 1 =
если Len (blk.next) > 1:
bestchainlen = 0
для nextblk в blk.next:
chainlen = get_chain_len (nextblk)
если chainlen > bestchainlen:
bestchainlen = chainlen
г + = bestchainlen
возвращение г


Защиту readblocks (имя файла):
е = открытое (имя файла, "Р.Б.")
блоки = []
idxmap = {}
в то время как True:
пытаться:
магии = f.read (4)
если магия! = "\ Xf9 \ XBE \ XB4 \ xd9":
ломать
blklen = struct.unpack ("<я", F.read (4)) [0]
если blklen < 80:
ломать
blkdata = f.read (blklen)
если Len (blkdata) = blklen:
ломать
Кроме:
ломать
BLK = CBlock ()
blk.deserialize (blkdata)
blocks.append (BLK)
idxmap [blk.hash] = BLK
если blk.hashPrevBlock:
prevblk = idxmap [blk.hashPrevBlock]
blk.prev = prevblk
prevblk.next.append (BLK)
f.close ()
rootblk = блоки [0]
дель блоки
дель idxmap
BLK = rootblk
curblkidx = 0
в то время как True:
blk.blocknum = curblkidx
если Len (blk.next) == 0:
не blk.next = None
ломать
если Len (blk.next) > 1:
не bestnextblk = None
bestchainlen = 0
для nextblk в blk.next:
chainlen = get_chain_len (nextblk)
если chainlen > bestchainlen:
bestchainlen = chainlen
bestnextblk = nextblk
Элиф chainlen == bestchainlen:
если nextblk.nTime < bestnextblk.nTime:
bestchainlen = chainlen
bestnextblk = nextblk
blk.next = [bestnextblk]
blk.next = blk.next [0]
curblkidx + 1 =
BLK = blk.next

BLK = rootblk
в то время как BLK:
#Распечатать "% Я% я% .3f 0x% 08X" % (blk.blocknum, blk.nTime, get_difficulty (blk.nBits), blk.nBits)
avghashes = 2 ** 256 / uint256_from_compact (blk.nBits)
Распечатать "% Я% я% я" % (Blk.blocknum, blk.nTime, avghashes)
BLK = blk.next

если __name__ == "__главный__":
readblocks ("/home/necro/.bitcoin/blk0001.dat")
mizerydearia сейчас офлайн Пожаловаться на mizerydearia   Ответить с цитированием Мультицитирование сообщения от mizerydearia Быстрый ответ на сообщение mizerydearia


Как заработать Биткоины?
Без вложений. Не майнинг.


23 июля 2010, 11:59:55 PM   # 2
 
 
Сообщения: 196
Цитировать по имени
цитировать ответ
по умолчанию Re: отметки времени

Получил 1806 Биткоинов
Реальная история.





нечетные метки времени просто вызваны системами, которые не имеют дату и время, установленные в любом месте правильно так Bitcoin должен составить временную метку, которая до сих пор весьма случайным образом. Таким образом, Вы получаете блок с отрицательным интервалом времени от последней и тому подобных.
ЛЧМ сейчас офлайн Пожаловаться на ЛОМ   Ответить с цитированием Мультицитирование сообщения от ЛОГО Быстрый ответ на сообщение ЛЧМ



Как заработать Биткоины?

Bitcoin Wallet * Portefeuille Bitcoin * Monedero Bitcoin * Carteira Bitcoin * Portafoglio Bitcoin * Bitcoin Cüzdan * 比特币钱包

bitcoin-zarabotat.ru
Почта для связи: bitcoin-zarabotat.ru@yandex.ru

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW