Скачиваний:
9
Добавлен:
28.12.2024
Размер:
29.52 Кб
Скачать

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ,

СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ

УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»

(СПбГУТ)

Кафедра Защищенных систем связи

Факультет Кибербезопасности

Дисциплина Блокчейн и обеспечение безопасности распределенных реестров

ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ 3-4

Эмуляция формирования блоков блокчейна на языке Python

(тема отчета)

Направление/специальность подготовки

10.03.01 Информационная безопасность

(код и наименование направления/специальности)

Студент:

Травкина Е.А., ИКБ-14

(Ф.И.О., № группы) (подпись)

Федченко А.С., ИКБ-14

(Ф.И.О., № группы) (подпись)

Ящук А.А., ИКБ-14

(Ф.И.О., № группы) (подпись)

Преподаватель:

к.т.н, доцент, Кушнир Д.В.

(должность, Ф.И.О.) (подпись)

Задание

Выполнить эмуляцию на python некоторых основных функций, связанных с формированием блоков блокчейна.

Предполагается, что выполнение некоторых функций майнера, уже подготовившего информацию для размещения в блоке. В мы сформировали три блока.

  1. Имеются данные о некоторых записях, которые мы разместили в блокчейн. Предположили, это будут не транзакции, а обычные текстовые строки. Задали 4-ые текстовые строки с ФИО и номером группы:

  • tr1= «Федченко», tr2= «Александра», tr3= «Сергеевна», tr4= «группа ИКБ-14» (первый блок);

  • tr1= «Травкина», tr2= «Елизавета», tr3= «Алексеевна», tr4= «группа ИКБ-14» (второй блок);

  • tr1= «Ящук», tr2= «Анастасия», tr3= «Александровна», tr4= «группа ИКБ-14» (третий блок)

  1. Вычислили корень дерева Меркля для данных транзакций. В качестве хеш-функции выбрали ырф256. Использовали библиотеку hashlib.

  2. Составили заголовок блока, в который вошли такие данные как:

    • Номер версии, задали значение из текущего номера из bitcoin (4).

    • Хеш предыдущего блока, предположим он задан. Взяли хеш из последнего созданного блока в сети bitcoin (000000000000000000051d4a7f83ef5abfbc39620afed04be2099b1373a2e410).

    • Метка времени, получили текущее время самостоятельно в любом формате.

    • Корень дерева Меркля вычисленный на предыдущем этапе.

    • Параметр nonce. Начальное значение установили в 0.

  1. Задались предварительным значением порога target. Например, значением в 16-тиричном виде: ведущие 4 нуля, остальные fff: «0000fffff…f» (64 символа – общая длина 256 бит).

  2. Произвели вычисление хеша от заголовка блока меняя значение nonce, до тех пор, пока результат не оказался меньше target. Это говорит о том, что блок сформирован.

Block 1:

Nonce: 112630

Hash: 0000ee000e4ccd76f5d31a35c6c7527217e5917901e5c4649c8c3454d0c72228

Time to create: 0.19694209098815918 seconds

Block 2:

Nonce: 86155

Hash: 000042258b3ddcd9d5ec722e016dd2f29747e037650454f434a770d9c4863f19

Time to create: 0.14722299575805664 seconds

Block 3:

Nonce: 12890

Hash: 0000ee81279f4ef48afa2e4f20ac17d05f457b93d619d402390f9c0efd469706

Time to create: 0.022573471069335938 seconds

Время создания блока составляет доли секунды, так как использован достаточно простой уровень сложности (target).

Прикинуть, чему должен быть равен target, чтоб время создания блока приблизительно составляло 3 минуты или немного больше. После корректировки значения target, чтобы время создания блока приближалось к 3 минутам, получилось следующее:

New Block with adjusted target:

Nonce: 16968915

Hash: 0000002e59b1f251a3e189f50f92000c323570b200b96393ed70657429ff9fb5

Time to create: 176.304733753204346 seconds

New Target:

00000047b4555555555400000000000000000000000000000000000000000000

  1. Аналогично сформировали второй и третий блоки с другими данными в транзакциях.

Код программы

import hashlib

import time

def hash_string(data):

return hashlib.sha256(data.encode()).hexdigest()

def create_merkle_root(transactions):

if len(transactions) == 1:

return transactions[0]

new_level = []

for i in range(0, len(transactions), 2):

if i + 1 < len(transactions):

new_level.append(hash_string(transactions[i] + transactions[i + 1]))

else:

new_level.append(hash_string(transactions[i] + transactions[i]))

return create_merkle_root(new_level)

block1_data = ["Федченко", "Александра", "Сергеевна", "группа ИКБ-14"]

block2_data = ["Травкина", "Елизавета", "Алексеевна", "группа ИКБ-14"]

block3_data = ["Ящук", "Анастасия", "Александровна", "группа ИКБ-14"]

merkle_root_block1 = create_merkle_root(block1_data)

merkle_root_block2 = create_merkle_root(block2_data)

merkle_root_block3 = create_merkle_root(block3_data)

def mine_block(version, previous_hash, merkle_root, target):

nonce = 0

start_time = time.time()

while True:

block_header = f"{version}{previous_hash}{merkle_root}{nonce}"

block_hash = hash_string(block_header)

if block_hash < target:

end_time = time.time()

elapsed_time = end_time - start_time

return nonce, block_hash, elapsed_time

nonce += 1

version = "04000000"

previous_hash =

"000000000000000000051d4a7f83ef5abfbc39620afed04be2099b1373a2e410"

target = "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"

nonce1, block_hash1, time1 = mine_block(version, previous_hash, merkle_root_block1, target)

nonce2, block_hash2, time2 = mine_block(version, block_hash1, merkle_root_block2, target)

nonce3, block_hash3, time3 = mine_block(version, block_hash2, merkle_root_block3, target)

output = f"""

Block 1:

Nonce: {nonce1}

Hash: {block_hash1}

Time to create: {time1} seconds

Block 2:

Nonce: {nonce2}

Hash: {block_hash2}

Time to create: {time2} seconds

Block 3:

Nonce: {nonce3}

Hash: {block_hash3}

Time to create: {time3} seconds

"""

output

Вывод

В данной работе была выполнена эмуляция процесса майнинга блоков с использованием технологии блокчейн на языке Python. В качестве данных для транзакций были взяты строки с ФИО и группой участников. Мы сформировали дерево Меркля для каждого блока, вычислили хеши, и сформировали заголовки блоков с учетом номера версии, хеша предыдущего блока, метки времени и корня дерева Меркля. Была использована версия блока 4, что соответствует текущему стандарту в сети Bitcoin. Для процесса майнинга блоков было установлено начальное значение целевого хеша (target), и майнинг проводился до тех пор, пока хеш блока не становился меньше target. В рамках задания также была проведен подбор значения target таким образом, чтобы время создания блока приблизилось к 3 минутам. Таким образом, работа продемонстрировала ключевые аспекты майнинга блоков, взаимодействие с хеш-функциями и деревом Меркля, а также процесс подбора значений сложности майнинга для контроля времени создания блока.

Санкт-Петербург

2024

Соседние файлы в предмете Блокчейн и обеспечение безопасности распределенных реестров