Blockchain

    Данный текст будет являться новой главой для учебного пособия по защите информации кафедры радиотехники и систем управления МФТИ (ГУ). Полностью учебник доступен на github. На хабре я же планирую выкладывать новые «большие» куски, во-первых, чтобы собрать полезные комментарии и замечания, во-вторых, дать сообществу больше обзорного материала по полезным и интересным темам.

    Когда у вас есть знания о том, что такое криптографически стойкая хеш-функция, понять, что такое blockchain («цепочка блоков») очень просто. Blockchain – это последовательный набор блоков (или же, в более общем случае, ориентированный граф), каждый следующий блок в котором включает в качестве хешируемой информации значение хеш-функции от предыдущего блока.

    Технология blockchain используется для организации журналов транзакций, при этом под транзакцией может пониматься что угодно: финансовая транзакция (перевод между счетами), аудит событий аутентификации и авторизации, записи о выполненных ТО и ТУ автомобилей. При этом событие считается случившимся, если запись о нём включена в журнал.

    В таких системах есть три группы действующих лиц:

    • источники событий (транзакций)
    • источники блоков (фиксаторы транзакций)
    • получатели (читатели) блоков и зафиксированных транзакций.

    В зависимости от реализации эти группы могут пересекаться. В системах типа BitCoin, например, все участники распределённой системы могут выполнять все три функции. Хотя за создание блоков (фиксацию транзакций) обычно отвечают выделенные вычислительные мощности, а управляющими их участников называют майнерами (см. раздел про децентрализованный blockchain далее).

    Основное требование к таким журналам таково:

    • Невозможность модификации журнала: после добавления транзакции в журнал должно быть невозможно её оттуда удалить или изменить.

    Для того чтобы понять, как можно выполнить требование на запрет модификации, стоит разобраться со следующими вопросами:

    • Каким образом гарантируется, что внутри блока нельзя поменять информацию?
    • Каким образом система гарантирует, что уже существующую цепочку блоков нельзя перегенерировать, тем самым исправив в них информацию?

    Ответ на первый вопрос прост: нужно снабдить каждый блок хеш-суммой от его содержимого. И эту хеш-сумму включить в качестве дополнительной полезной информации (тоже хешируемой) в следующий блок. Тогда для того, чтобы поменять что-то в блоке без разрушения доверия клиентов к нему, нужно будет это сделать таким образом, чтобы хеш-сумма от блока не поменялась. А это как раз практически невозможно, если у нас используется криптографически стойкая хеш-функция. Либо поменять в том числе и хеш-сумму блока. Но тогда придётся менять и значение этой хеш-суммы в следующем блоке. А это потребует изменений, в свою очередь, в хеш-сумме всего второго блока, а потом и в третьем, и так далее. Получается, что для того, чтобы поменять информацию в одном из блоков, нужно будет перегенерировать всю цепочку блоков, начиная с модифицируемого. Можно ли это сделать?

    Тут нужно ответить на вопрос, как в подобных системах защищаются от возможности перегенерации цепочки блоков. Мы рассмотрим три варианта систем:

    • централизованный с доверенным центром
    • централизованный с недоверенным центром
    • децентрализованный вариант с использованием доказательства работы

    Централизованный blockchain с доверенным центром


    Если у нас есть доверенный центр, то мы просто поручаем ему через определённый промежуток времени (или же через определённый набор транзакций) формировать новый блок, снабжая его не только хеш-суммой, но и своей электронной подписью. Каждый клиент системы имеет возможность проверить, что все блоки в цепочке сгенерированы доверенным центром и никем иным. В предположении, что доверенный центр не скомпрометирован, возможности модификации журнала злоумышленником нет.

    Использование технологии blockchain в этом случае является избыточным. Если у нас есть доверенный центр, можно просто обращаться к нему с целью подписать каждую транзакцию, добавив к ней время и порядковый номер. Номер обеспечивает порядок и невозможность добавления (удаления) транзакций из цепочки, электронная подпись доверенного центра – невозможность модификации конкретных транзакций.

    Централизованный blockchain с недоверенным центром


    Интересен случай, когда выделенный центр не является доверенным. Точнее, не является полностью доверенным. Мы ему доверяем в плане фиксации транзакций в журнале, но хотим быть уверенными, что выделенный центр не перегенерирует всю цепочку блоков, удалив из неё ненужные ему более транзакции или добавив нужные.

    Для этого можно использовать, например, следующие два метода.

    • Первый метод с использованием дополнительного доверенного хранилища. После создания очередного блока центр должен отправить в доверенное и независимое от данного центра хранилище хеш-код от нового блока. Доверенное хранилище не должно принимать никаких изменений к хеш-кодам уже созданных блоков. В качестве такого хранилища можно использовать и децентрализованную базу данных системы, если таковая присутствует. Размер хранимой информации может быть небольшим по сравнению с общим объёмом журнала.
    • Второй возможный метод состоит в дополнении каждого блока меткой времени, сгенерированной доверенным центром временных меток. Такая метка должна содержать время генерации метки и электронную подпись центра, вычисленную на основании хеш-кода блока и времени метки. В случае, если «недоверенный» центр захочет перегенерировать часть цепочки блоков, будет наблюдаться разрыв в метках времени.
      • Стоит отметить, что этот метод не гарантирует, что «недоверенный» центр не будет генерировать сразу две цепочки блоков, дополняя их корректными метками времени, а потом не подменит одну другой.

    Децентрализованный blockchain


    Наибольший интерес для нас (и – наименьший для компаний, продающих blockchain-решения) представляет децентрализованная система blockchain без выделенных центров генерации блоков. Каждый участник может взять набор транзакций, ожидающих включения в журнал, и сформировать новый блок. Более того, в системах типа BitCoin такой участник (будем его назвать «майнером», от англ. to mine — копать) ещё и получит премию в виде определённой суммы и/или комиссионных от принятых в блок транзакций.

    Но нельзя просто так взять и сформировать блок в децентрализованных системах. Надёжность таких систем основывается именно на том, что новый блок нельзя сформировать быстрее (в среднем) чем за определённое время. Например, за 10 минут (BitCoin). Это обеспечивается механизмом, который получил название доказательство работы.

    Механизм основывается на следующей идее. Пусть есть криптографически стойкая хэш-функция $h(x)$ и задан некоторый параметр $t$ (от англ. target – цель). $0 < t < 2^{n}$, где $n$ — размер выхода хэш-функции в битах. Корректным новым блоком blockchain-сеть будет признавать только такой, значение хэш-суммы которого меньше текущего заданного параметра $t$. В этом случае алгоритм работы майнера выглядит следующий образом:

    • собрать из пула незафиксированных транзакций те, которые поместятся в 1 блок (1 мегабайт для сети Bitcoin) и имеют максимальную комиссию (решить задачу о рюкзаке)
    • добавить в блок информацию о предыдущем блоке;
    • добавить в блок информацию о себе (как об авторе блока, кому начислять комиссии и бонусы за блок);
    • установить $r$ в некоторое значение, например, $0$;
    • выполнять в цикле:
      • обновить значение $r := r + 1$;
      • посчитать значение $h = h( блок || r)$;
      • если $h < t$, добавить в блок $r$ и считать блок сформированным, иначе — повторить цикл.


    Для каждой итерации цикла вероятность получить корректный блок равна $t / 2^{n}$. Так как $t$ обычно мало, то майнерам нужно сделать большое количество итераций цикла, чтобы найти нужный $r$. При этом только один (обычно — первый) из найденных блоков будет считаться корректным. Чем больше вычислительная мощность конкретного майнера, тем больше вероятность, что именно он первым сумеет найти нужный $r$.

    Зная суммарную вычислительную мощность blockchain-сети, участники могут договориться о таком механизме изменения параметра $t$, чтобы время генерации нового корректного блока было примерно заданное время. Например, в сети Bitcoin параметр $t$ пересчитывается каждые 2016 блоков таким образом, чтобы среднее время генерации блока было 10 минут. Это позволяет адаптировать сеть к изменению количества участников, их вычислительных мощностей и к появлению новых механизмов вычисления хэш-функций.

    Кроме задания параметра $t$ можно оперировать другими величинами, так или иначе относящимися к мощности вычислений.

    • Hashrate — количество хешей, которые считают за единицы времени конкретный майнер или сеть в целом. Например, в ноябре 2017 года общий hashrate для сети Bitcoin составлял примерно $7,7 \times 10^{18}$ хэшей в секунду.
    • Difficulty — сложность поиска корректного блока, выражаемая как $d = d_{const} / t$, где $d_{const}$ — некоторая константа сложности, а t — текущая цель (англ. target). В отличие от параметра t, который падает с ростом вычислительной мощности сети, d изменяется вместе с hashrate, что делает его более простым для восприятия и анализа человеком.


    В случае примерно одновременной генерации следующего блока двумя и более майнерами (когда информация о новом блоке публикуется вторым майнером до того, как ему придёт информация о новом блоке от первого) в направленном графе блоков происходит разветвление. Далее каждый из майнеров выбирает один из новых блоков (например – какой первый увидели) и пытается сгенерировать новый блок на основе выбранного, продолжая «ответвление» в графе. В конце-концов одна из двух таких цепочек становится длиннее (та, которую выбрало большее число майнеров), и именно она признаётся основной.

    В случае нормального поведения системы на включение конкретных транзакций в блоки это влияет мало, так как каждый из добросовестных майнеров следует одному и тому же алгоритму включения транзакций в блок (например, в сети BitCoin – алгоритму максимизации комиссии за блок). Однако можно предположить, что какой-нибудь злоумышленник захочет «модерировать» распределённый blockchain, включая или не включая в блоки транзакции по своему выбору. Предположим, что доля вычислительных ресурсов злоумышленника (направленных на генерацию нового блока) равна $p$ ( 0% < $p$ < 50%). В этом случае каждый следующий сгенерированный блок с вероятностью $p$ будет сгенерирована мощностями злоумышленника. Это позволит ему включать в блоки те транзакции, которые другие майнеры включать не захотели.

    Но позволит ли это злоумышленнику не включать что-то в цепочку транзакций? Нет. Потому что после его блока с вероятностью $(1-p)$ будет следовать блок «обычного» майнера, который с радостью (пропорциональной комиссии-награде) включит все транзакции в свой блок.

    Однако ситуация меняется, если мощности злоумышленника составляют более 50% от мощности сети. В этом случае, если после блока злоумышленника был с вероятностью $1-p$ сгенерирован «обычный» блок, злоумышленник его может просто проигнорировать и продолжать генерировать новые блоки, как будто он единственный майнер в сети. Тогда если среднее время генерации одного блока всеми мощностями $t$, то за время $T$ злоумышленник сможет сгенерировать $N_E = p * T / t$, а легальные пользователи $N_L = (1 – p) * T / t$ блоков, $N_E > N_L$. Даже если с некоторой вероятностью легальные пользователи сгенерируют 2 блока быстрее, чем злоумышленник один, последний всё равно «догонит и перегонит» «легальную» цепочку примерно за время $t / (2p – 1)$. Так как в blockchain есть договоренность, что за текущее состояние сети принимается наиболее длинная цепочка, именно цепочка злоумышленника всегда будет восприниматься правильной. Получается, что злоумышленник сможет по своему желанию включать или не включать транзакции в цепочки.

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

    Кроме концепции «доказательство работы» используются и другие. Например, в подходе «доказательство доли владения» (англ. proof of stake), используемой в сетях Etherium и EmerCoin, вероятность генерации блока пропорциональна количеству средств на счетах потенциальных создателей нового блока. Это намного более энергоэффективно по сравнению с PoW, и, кроме того, связывает ответственность за надёжность и корректность генерации новых блоков с размером капитала (чем больше у нас средств, тем меньше мы хотим подвергать опасности систему). С другой стороны, это даёт дополнительную мотивацию концентрировать больше капитала в одних руках, что может привести к централизации системы.

    Механизм внесения изменений в протокол


    Любая система должна развиваться. Но у децентрализованных систем нельзя просто «включить один рубильник» и заставить участников системы работать по новому – иначе систему нельзя назвать полностью децентрализованной. Механизмы и способы внесения изменений могут выглядеть на первый взгляд нетривиально. Например:

    • апологеты системы предлагают изменения в правилах работы
    • авторы ПО вносят изменения в программный код, позволяя сделать две вещи:
      • указать участникам системы, что они поддерживают новое изменение
      • поддержать новое изменение
    • участники системы скачивают новую версию и выставляют в новых блоках транзакций (или самих транзакциях) сигнальные флаги, показывающие их намерение поддержать изменение
    • если к определённой дате определённое число блоков содержат сигнальный флаг (обратите внимание на привязку числа голосов к числу сгенерированных блоков), то изменение считается принятым, и большая (по числу новых блоков) часть участников системы в определённую дату включают эти изменения
    • те участники, которые не приняли изменения, или приняли изменения вопреки отсутствию согласия на них большей части участников, в худшем случае начнут генерировать свою цепочку блоков, только её признавая корректной. Основную цепочку блоков они будут считать неверно сгенерированной. По факту это приведёт к дублированию (разветвлению, форку) системы, когда в какую-то дату вместо одного журнала транзакций появляется два, ведущимися разными людьми. Это журналы совпадают до определённой даты, после чего в них начинаются расхождение.

    Подводя итоги, Сатоши Накамото (псевдоним), автор технологий blockchain и bitcoin, сумел предложить работающий децентрализованный механизм, в котором и само поведение системы, и изменения к этой системе проходят через явный или неявный механизм поиска консенсуса участников. Для получения контроля над системой в целом злоумышленнику придётся получить контроль как минимум над 50% всех мощностей системы (в случае PoW), а без этого можно лишь попытаться ограничить возможность использования системы конкретными участниками.

    Однако созданная технология не лишена недостатков. Существуют оценки, согласно которым использование метода PoW для системы bitcoin приводит к затратам энергии, сравнимой с потреблением электричества целыми городами или странами. Есть проблемы и с поиском консенсуса – сложный механизм внесения изменений, как считают некоторые эксперты, может привести к проблемам роста (например, из-за ограниченности числа транзакций в блоке), и, в будущем, к отказу использования механизма как устаревшего и не отвечающего будущим задачам.

    Хотелось бы узнать у сообщества, про какие ещё технологии стоит рассказывать студентам. С одной стороны, им обязательно надо рассказать про базовые вещи — классическую криптографию и криптографию на открытых ключах. Но хочется дать понятие и про современные вещи, которые, возможно, не станут лишним грузом знаний и через пять-десять лет. С текущим содержание учебной программы можно ознакомиться здесь.

    Это произведение доступно по лицензии Creative Commons «Attribution» («Атрибуция») 4.0 Всемирная

    История изменений


    • 2017-11-17: Добавлено указание лицензии CC-BY
    • 2017-11-18: Уточнёна и расширена информация про механизм proof-of-work и связанные определения
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 73
    • –15
      Бесполезный хайп. Через годик уляжется.
      Совершенно никому не нужная технология без практического применения и реализации. Такой, пук в вечность.
      • +14
        Давайте разделим технологию и хайп. Биткоин появился в 2009 году. Прошло уже 8 лет, капитализация достигла $ 67 млрд. и у меня назвать это «пуком в вечность» как то рука не поднимается. Это — весьма существенно для «open source» валюты.

        А вот хайп, который поднялся вокруг этого, попытка «монетизировать» blockchain за пределами bitcoin и валют, действительно очень часть являются непрактичными IT-решениями на волне популярности bitcoin'а.
        • +2
          проще просто сказать, что капитализация битка больше чем у роснефти
          • 0

            Капитализация — параметр не показательный. Миллион биткоинов Накамото, намайненный в начале, возможно, утерян. А в капитализацию он тоже зачитывается. Да и другие утерянные битки (например, вследствии внезапной смерти владельца) тоже в добавляют свой вес, хотя и недоступны никому

            • 0
              Кстати, что будет с ценами на биткойн, если Накамото решит продать свой миллион битков на бирже? Сразу или постепенно.
              • +2

                Такую сумму сразу не продашь: покупателей не найдётся, но думается мне, что в процессе ее продажи цена битка обрушится. Но если он ее сразу продаст кому-нибудь напрямую, не через биржи, то возможно никто и не заметит ничего.

                • +2

                  Заметят. Все кошельки, предположительно принадлежащие Накомото, известны. Движение по ним заметят сразу.

                  • 0

                    Он может отдать ключи от кошельков.

                    • +1
                      Тогда у кошельков будет минимум два владельца
                      • +1

                        Продать битки не переводом с кошелька на кошелёк, а передачей ключей? Это не надёжно для покупателя, но тогда с курсом ничего не произойдёт, действительно. Если саму сделку скроют.

                      • 0
                        Как отличить перевод между своими кошельками и между чужими?
                        • 0

                          Не очень понял вопрос. Какими своими и какими чужими?

                          • 0
                            Если Накомото переведёт биткойны с одного кошелька на другой, то как понять, перевёл он на чужой кошелёк или на свой новый?
                            • +1

                              Никак. Да это и не так важно — важен сам факт движения первых биткоинов. Это будет означать, что Накомото жив и, главное, у него есть приватные ключи (а это не факт).


                              Но опять же, предсказать реакцию рынка на это сложно.

                              • 0
                                Не факт, возможно кто то из счастливчиков нашел коллизию.
            • 0
              В мире полно таких «бесполезных» штук, стоимость которых формируется «договорённостью» заинтересованных сторон. Начиная с предметов «искусства» или «раритетов» (картины, корзины, кошёлки и маленькие собачонки), заканчивая продажей игроков за 100 млн.долларов. Тут главное не оказаться последним, заскочившим в поезд МММ.
            • 0
              Интересно вот что. Как вы сказали, сложность подстраивается таким образом, чтобы время генерации блока составляло около 10 минут. Т.е. если блок сгенерировался менее чем за 10 минут (например, количество майнеров выросло), то для следующего блока сложность будет увеличена. Вопрос в том, как система измеряет время, прошедшее с момента генерации предыдущего блока? Получается, должен быть какой-то ЕДИНЫЙ доверенный источник временных меток? Но, насколько мне известно, в Bitcoin такой источник не используется. Как решается эта задача?
              • 0

                В BitCoin все участники сети каждые 2016 блоков (2 недели) смотрят разницу в полях block timestamp у принятых в основную цепь блоков и определяют difficulty для новых 2016 блоков.


                При этом на это поле накладываются определённые ограничения, не дающие очень сильно играться с его значениями. Не более чем +2 часа у средних значений времени от соседних (в сети Echo) с вами блоков.

                • 0
                  … от соседних (в сети Echo) с вами блоков узлов.
                  • 0
                    Понял, спасибо за ответ. Т.е. если узел, сформировавший очередной блок, укажет timestamp не соответствующий критериям, другие узлы просто не примут этот блок.
                  • 0
                    UPD. Уже ответили.
                    • 0
                      тоже интересно стал именно этот момент. Во первых зачем это ограничение? Что будет, если не 10 минут, а за 10 миллисекунд сформируется блок. Попытка уравнять майнеров?
                      И как система определяет, что пора усложнять подсчет?
                      • 0

                        Тогда каждые 10 миллисекунд будет вознаграждение за блок (то есть почти миллион биткоинов за то время, когда должно появиться 12). Не очень хорошо для пользователей сети

                        • 0
                          туплю, а что такого плохого в быстрой транзакции? И я не понимаю, если допустим идет 1000 транзакций, то их все равно надо как-то обслужить и они что ж, создают очередь с паузой в 10 минут на каждую транзакцию?
                          • 0

                            В быстрой транзакции ничего плохого нет. Но блок — это не транзакция, это пачка транзакций. Например, 10 или 300 транзакций сразу. Есть системы, где блоки появляются чаще (эфириум — 15 секунд), главное, что бы сложность подстраивались. Если сложность не подстраивать, то, как я написал выше, вознаграждение за блоки будет выдаваться чаще, чем задумано.

                            • 0
                              «Каждый участник может взять набор транзакций, ожидающих включения в журнал, и сформировать новый блок.»
                              А это как это технически происходит? Как формируются транзакции в пул?
                              • 0
                                В биткоине содержатся в MemPool blockchair.com/bitcoin/mempool/transactions. Все участники сети передают транзакции.
                                Это кстати еще одно разумное ограничение на размер блоков и сложность mining иначе транзакции будут не успевать распространяться.
                            • +1
                              туплю, а что такого плохого в быстрой транзакции?

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

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

                              Резюме. Быстрые транзакции => большие накладные расходы на согласование веток.
                          • 0

                            Одновременно майнятся несколько блоков, и состав этих блоков могут быть разные. Если бы блоки создавались очень быстро, то узлы не успевали бы синхронизировать найденные блоки между собой. 10 минут это некий компромисс чтобы узлы успевали выбрать наиболее длинную ветвь. Подробнее

                        • 0
                          В вопросах безопасности самым уязвимым местом чаще всего являются действия самого пользователя.
                          • +5
                            Здравствуйте, я не много читал про блокчейн и я — мимокрокодил.
                            Если технология блокчейна подразумевает хранение всех транзакций, то нафиг оно надо, если все клиенты перед использованием должны будут таскать с собой (хорошо, брать с серверов) всю историю всех транзакций?
                            Использую эмеркоин для DNS-резолвинга, прямо сейчас папка с блоками «весит» 320 МБ. Это не популярная валюта, и транзакций мало. У Биткоина сейчас размер «гроссбуха» почти 130 ГБ. Если технология станет такой же популярной, как бумажные деньги, то размер базы очень быстро начнёт исчисляться терабайтами.

                            Скажите мне, что я ошибаюсь и что на самом деле всё не так, иначе вся эта технология действительно кажется просто бесполезным на практике хайпом. Ну или она вынуждена будет перейти к «архивированию» базы транзакций, аналогично закрытию года в 1С :)
                            Примерно как «вот этому блоку верить, он 146% правильный, всё что до него — в старой базе, а мы работаем с нуля, начиная с этого блока.»
                            • +1
                              Все на самом деле так. Просто терабайты — это совсем не так страшно звучит, как, скажем 20 лет назад, — объем информации в Интернет уже миллионами экзабайт исчисляется. Ну а полную ноду (содержащую весь список транзакций) не обязательно хранить каждому участнику, и «хвост» начиная с блоков, которым можно верить, выглядит довольно разумным компромиссом между надежностью и компактностью.
                              • 0

                                Чтобы генерировать новые блоки или создавать новую транзакцию не обязательно иметь у себя весь журнал. Даже для майнера достаточно некоего "snapshot'а" состояния сети + последние 2016 блоков (для учёта изменения сложности). Кроме того есть много мобильных клиентов, "кошельков", у которых база транзакций централизованно хранится на сервере, а они только осуществляют переводы.


                                С размером базы не всё так просто. Нужно ещё учесть, что её размер не может расти быстрее, чем 1 Мб / блок (т.е. на 10 минут). Даже если увеличить размер блока за счёт SegWit и других технологий, принципиальные ограничения останутся. Размер блока мы уже достигли (в среднем все блоки заполнены), поэтому скорость роста останется примерно одинаковой, скачкообразно меняясь только при вводе принципиально новых технологий формирования блоков в строй.

                                • 0
                                  365*24*60min*1MB/10min=52.56GB/year — на столько увеличивает журнал за год.
                                  image
                                  • 0

                                    Так если все начнут пользоваться такими вот light-версиями, не проверяя корректность всей цепочки, то не кажется ли, что безопасность всей децентрализированной системы, заложенной в дизайне, немного страдает?

                                  • 0
                                    Есть куча online-wallet, грубо говоря банков, зачем вам таскать с собой 100 тысяч бумажных денег, когда они спокойно могут храниться в хранилище. Прибавьте к этому, что не все транзакции так уж необходимо, чтобы попадали в blockchain, а только банковские взаиморасчеты (segwit), то получите вменяемую систему.
                                    • 0

                                      Онлайн-валлет — это не банк, это какой-нибудь "деньги мигом", который завтра может исчезнуть и никто не будет напрягаться, что бы вам что-то вернуть.

                                      • 0
                                        Ну так проголосуйте за тех депутатов, чтобы они приравняли хотя бы некоторые online-wallet к банкам и чтобы кто-то напрягался, чтобы деньги вернуть. А пока нет поддержки со стороны государства, конечно, это теоретическое сравнение, а не практическое.
                                        • +2

                                          Ни в коем случае. Не надо мне депутатов, которые ещё и криптовалюты зарегулируют по максимуму. Кому нужна регуляция — для них уже есть доллар, рубль и банки. Мгновенные транзакции, дешёвые платежи с карты на карту, страхование вкладов. Если нравится — пользуйтесь. А криптовалюты лучше хранить в оффлайн-валлетах. А переводить через официальные десктопные клиенты. Даже если ФБР арестует какие-то севера разработчиков, ваш валлет останется на вашем компьютере.

                                          • 0
                                            Да даже во многих онлайн валлетах ключи храняться локально и никуда не передаются. Если онлайн валлет умрет, возьмете ключи и подсуните их другому онлайн-валлету.
                                            • +1

                                              Онлайн кошелёк локально? Когда все на javascript, как у Classic Ether Wallet? В следущий раз при открытии такого онлайн кошелька вам могут подсунуть js, который передает ключ на сервер злоумышленника (если сайт валлета взломали). Подменить бинарник кошелька-приложения тоже можно, но его обновляешь раз в год, а онлайн — каждый раз при открытии.

                                              • 0

                                                Я не обновляю каждый раз. Лежит локально скрипт.
                                                Для того чтобы сформировать транзакцию вам не нужен блокчейн.
                                                Как и для того чтобы сгенерировать новый кошелёк.

                                                • 0

                                                  Конечно, не нужен. Но речь про онлайн-валлет была. Если у вас скрипт локально, как у NEM, это просто валлет на js. Не отличается особо от валлета на питоне или qt/c++. Это вполне безопасно, в отличии от кошельков на сайтах.

                                          • 0
                                            налоги и контроль. Ничего плохого особо не вижу в налогах и контроле, но пользователям криптовалют явно это не нужно
                                      • 0

                                        Нужно хранить все транзакции публично, что бы видеть, а не тратит ли кто-нибудь деньги второй раз. В целом, для этого хватило бы хранить балансы кошельков, но децентрализованного решения пока никто не предложил

                                      • +1
                                        Читать курс, конечно, необходимо. Возможно он должен быть про детали реализации. Потому что в bitcoin применено очень много интересных решений. То есть необходимо рассказать, что такое адрес, как устроена транзакция, как реализовывать различные виды смарт-контрактов, что такое segwit, transaction malleability. Все это крайне поучительно в плане distributed crypto systems.
                                        По крайней мере на основе blockchain пишутся научные работы, а следовательно, это не просто очередной стартап.
                                        • 0

                                          А есть уже собранный учебник?

                                        • +2

                                          Могу сказать, что я спокоен за студентов. Впервые вижу на Хабре статью, которая не ассоциирует блокчейн с криптовалютой.


                                          Если рассказываете, про авторизацию через COOKIES, то стоит добавить и Authorization-заголовок с Bearer, для обращение к API, это уже стандарт. И не очень понятно, как и зачем, влезли mysql инъекции, это больше про ИБ, чем про блокчейн. Лучше учить сразу делать проекты независимыми от базы данных.

                                          • 0

                                            [я буду внимательней читать пост в следующий раз]

                                          • +2

                                            Не раскрыта тема приватных блокчейнов, где генерация блоков отдана выбранному набору узлов, а для согласования применяются алгоритмы консенсуса. Например у нас в Exonum применяется модифицированный алгоритм византийского консенсуса. А чтобы владелец блокчейна не вел тайно параллельную цепочку применяется анкоринг на публичный биткоин блокчейн.
                                            Таким образом достигается большая производительность и не теряется доверие к системе в целом.

                                            • 0

                                              Наверное проще это вынести в виды консенсусов.

                                              • 0
                                                Gorthauer87, а ваш алгоритм («модифицированный алгоритм византийского консенсуса») описан где-нибудь?
                                                • 0
                                                  • 0

                                                    Я нашел описание на сайте: https://exonum.com/doc/architecture/consensus/#assumptions


                                                    На что стоит обратить внимание:


                                                    1. The network is partially synchronous. Обычно сеть себя ведет как асинхронная, тут могут быть проблемы в реальной системе.
                                                    2. Не сказано про network split и борьбу с ошибками. В алгоритме это мало отражено.
                                                    3. Алгоритм формально не верифицирован. Есть вопросы с тем, как он протестирован. По крайней мере я не нашел соответствующей информации.

                                                    При этом утверждается, что "The same assumptions are used in PBFT (the most well-known BFT consensus) and its successors." А в статье http://pmg.csail.mit.edu/papers/osdi99.pdf написано про "2 System Model. We assume an asynchronous distributed system where nodes are connected by a network." Это противоречит утверждению об "The same assumptions" и "The network is partially synchronous", что намекает.

                                                    • 0

                                                      Доказательства есть и скоро их выложим, а что касается первого пункта, то в документации есть указание, что PBFT оперирует частично синхронной моделью.


                                                      The algorithm does not rely on synchrony to provide safety. Therefore, it must rely on synchrony toprovide liveness; otherwise it could be used to implement consensus in an asynchronous system, which is not possible.
                                                  • 0
                                                    А сколько стоит опубликовать транзакцию, которую более-менее гарантированно примут в следующий блок?
                                                    • 0

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

                                                      • 0
                                                        Я про «анкоринг на публичный биткоин блокчейн». Я так понимаю, делается транзакция, состоящая из оплаты майнерам за её включение в блок и дополнительной информации. Вот и интересно, сколько сейчас надо заплатить за включение кусочка информации в цепочку биткоина.
                                                • 0
                                                  Дайте ссылку на собранный учебник пожалуйста.
                                                • +2
                                                  В защиту «блокчейна вне биткоина»: по сути, блокчейн есть «очень сильно» линейный случай git-репозитория. Вот про git студентам надо рассказывать обязательно, git-scm в помощь.
                                                  • –1
                                                    Ну, кажется, проводить вот такое отношение эквивалентности не совсем корректно (но поправьте меня, если я ошибаюсь). А вот проводить аналогию именно в этом аспекте — уже имеет смысл, да.

                                                    И да, учить людей работе с VCS, да и принципам, на которых они устроены — очень и очень нужно, соглашусь на правах студента.
                                                  • 0
                                                    А где можно почитать про сам биткоин?
                                                    Про блокчейн уже понятно, а что за сущность биткоин, как им обмениваются, как их тратят, сколько раз один биткоин может менят хозяина, есть ли кроме виртуального доверия к этой валюте, её материальное обеспечение?
                                                    • 0

                                                      Один из плюсов биткоина — что нет людей, которые обещают материально гарантировать его стоимость. А значит они не могут внезапно отказаться от обещаний и таким образом обрушить курс. Биткоин стоит примерно столько, сколько обещает пользы, а не сколько за ним заводов или слитков золота.

                                                      • 0
                                                        Определение из поста:
                                                        Blockchain – это последовательный набор блоков (или же, в более общем случае, ориентированный граф), каждый следующий блок в котором включает в качестве хэшируемой информации значение хэш-функции от предыдущего блока.

                                                        Если мы возьмём последовательность коммитов на участке, когда не было мёржей, то мы увидим, что каждый последующий коммит включает хэш предыдущего. вот этот линейный кусок и есть блокчейн. Ограничение на хэш тривиально (принимается любой хэш, сложность нулевая).
                                                    • 0
                                                      Если через nn лет я захочу потратить деньги с кошелька на котором за все это время не было оборотов, кто подтвердит наличие средств в кошельке, если у подавляющего большинства майнеров (а может быть и у всех активных на этот момент) будут храниться только хвосты цепочки транзакций?
                                                      • 0
                                                        Кроме хвостов у них должно быть и «тело» — snapshot состояния всех кошельков
                                                        • 0

                                                          В случае bitcoin не получится, там сами транзакции используются в качестве входов для будущих. Поэтому кошелек там — это просто набор транзакций, у которых есть приватный ключ от их выходов (каких-то из них).

                                                          • 0
                                                            А не слишком много места это потребует? Судя по инфе с вики, каждому кошельку соответствует 512 битный адрес (открытый ключ). Если принять что каждый житель Земли (7 млрд) имеет кошелёк, то на хранение информации только об адресах (но не о средствах на счёте) нужно примерно 64*7=448 гигабайт места.

                                                            А ведь на той же вики сказано, что сам Сатоши рекомендовал для обеспечения анонимности создавать для каждой транзакции отдельный кошелёк.
                                                        • 0
                                                          Так, а если я наконец дособеру пару квантовых суперкомпьютеров, то смогу ли я в одно лицо совершить атаку 51%?
                                                          • 0
                                                            Ну, если вы сможете научить эти суперкомпьютеры решать задачу полного перебора быстрее, чем обычные (см. алгоритм Гровера), то да, атака 51% возможна.

                                                            Но я бы рекомендовал в этом случае не решать задачу в 51%, а просто по тихому взломать ECDSA и перечислять на свой кошелёк деньги. См. Quantum computing attacks on ECC

                                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.