Делаем web-аутентификацию через блокчейн. Блокчейн habrahabr


Делаем web-аутентификацию через блокчейн / Хабр

Недавно я участвовал в Ethereum-хакатоне, и сегодня хочу рассказать о проекте EtherAuth, с которым команда MixBytes заняла третье место. EtherAuth — это попытка сделать децентрализованную версию входа на сайт при помощи внешней учетной записи. Как кнопка войти через Facebook, только без Facebook.

Если вы хотите сделать на своем сайте закрытую область для пользователей, вам приходится выбирать: разработать свою систему идентификации, аутентификации и авторизации пользователей, или воспользоваться готовым решением. Готовое решение означает, что у вашего пользователя уже есть учетная запись в какой-то системе (Facebook, Google, Yahoo, Outlook, или даже просто email). И вы используете соответствующий механизм (чаще всего протокол OAuth 2.0), чтобы убедиться, что некто пытающийся залогиниться на ваш сайт с использованием внешнего идентификатора пользователя и есть этот пользователь.

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

Большинство пользователей заканчивает тем, что жертвует анонимностью со словами «да что страшного может случиться, мне нечего скрывать». К несчастью, большинство атак, ориентированных на неподготовленного пользователя и заканчивающихся денежными потерями, начинаются с похожих слов. «Что страшного может случиться, если я перешлю сотруднику банка код из смс?». «Что страшного может случиться если я перешлю сотруднику техподдержки заголовки запроса?». Ответ на этот вопрос чаще всего узнают когда уже ничего нельзя сделать.

Как тут может помочь Ethereum? Мы уже поняли, что основных проблем три:

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

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

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

В нашем решении я написал простой смарт-контракт EtherAuth для хранения идентификаторов пользователей и связанных с ними адресов кошельков. Идентификатор пользователя — это просто строка UTF-8 размером от 2 до 32 байт. Ее придумывает один раз сам пользователь и позже использует для входа на любой сайт, поддерживающий EtherAuth. Сегодня я бы добавил еще ограничение на возможные символы, входящие в строку, оставив возможность использования символов латинского алфавита и арабских цифр (подмножества 7-битной кодировки ASCII), чтобы ограничить возможность создания внешне похожих логинов.

При создании аккаунта в EtherAuth задается пара ключей: авторизационный ключ (authAddr) и ключ для восстановления доступа (recoveryKey). Название recoveryKey не совсем удачное, поскольку этот адрес используется для управления учетной записью, а не только для восстановления. При создании оба адреса равны адресу кошелька, от имени которого отправлена транзакция. Но пользователю, который заботится о своей безопасности, стоит создать отдельный управляющий ключ и хранить его в месте, недоступном по сети. Я бы даже хранил его на бумаге в сейфе в виде 12 мнемонических слов, позволяющих при необходимости воссоздать пару ключей.

Также разумно использовать отдельный адрес кошелька для аутентификации, отделяя его от адреса кошелька, в котором хранится весь ваш Эфир. Связь authKey с адресом кошелька, создавшего учетную запись, все еще можно проследить, анализируя последовательность транзакций смарт-контракта. Сейчас нельзя задать отдельный authKey и recoveryKey при создании аккаунта. Однако, если доработать смарт-контракт в этом направлении, адрес, создавший аккаунт, не обязательно будет связан с владельцем аккаунта, что позволит все желающим защитить свою анонимность.

Для взаимодействия пользователя со смарт-контрактом мы создали отдельную веб-страницу. На ней можно создать аккаунт, поменять его ключи или удалить. Для работы пользователю потребуется установить браузерный плагин MetaMask. Если вы уже активно используете сеть Ethereum, скорее всего вы этот плагин уже установили, то есть основная масса пользователей, желающих войти на сайт через Ethereum, не столкнется с дополнительной преградой на своем пути.

Общий процесс аутентификации пользователя с использованием EtherAuth выглядит так:

  • Сайт (backend) обращается в смарт-контракт и получает Ethereum-адрес пользователя;
  • Сайт (backend) генерирует и запоминает какое-то сообщение и просит пользователя подписать это сообщение при помощи адреса authKey;
  • Пользователь, находясь на сайте (frontend), подписывает сообщение при помощи плагина MetaMask и отправляет его в backend;
  • Сайт (backend) проверяет подпись, и если все в порядке, активирует сессию пользователя в соответствии со своей выбранной логикой.

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

Из проблем, с которыми мы столкнулись, можно отметить проверку подписи во frontend-части. В браузере не оказалось поддержки эллиптических кривых, поэтому пришлось добавить в смарт-контракт функцию, которая возвращает результат ecrecover от сообщения и научиться правильно передавать в нее параметры (доставать их из подписанного MetaMask-ом сообщения).

В результате за два дня мы получили proof-of-concept децентрализованной аутентификации с использованием сети Ethereum и плагина MetaMask. Мы понимаем, как нужно доработать эту систему, чтобы добавить в нее анонимность для пользователя. Пользователь имеет возможность восстановить доступ в случае утечки его основного ключа (но не в случае утечки ключа восстановления). Децентрализованная система неподвластна цензуре крупных структур, таких как Google или Facebook. При необходимости цензуры сайт должен осуществлять ее самостоятельно, но он может сделать это только в рамках собственной системы, не влияя на доступ пользователя к другим системам. Сеть Ethereum не очень быстро проводит транзакции (при создании аккаунта пользователю может быть придется подождать несколько минут), но доставать данные и осуществлять проверку аутентификации пользователя можно очень быстро. Это решение хорошо масштабируется, поскольку узлов с данными очень много, и любой желающий может добавить еще один в любой момент. Трудоемкость же внедрения такого решения для владельцев сайтов не выше, чем трудоемкость внедрения поддержки OAuth 2.0.

Безусловно, сегодня пользователей использующих сеть Ethereum ничтожно мало в сравнении с числом пользователей Facebook. Однако популярность блокчейн-технологий растет, и я верю, что в обозримом будущем таких пользователей будет становиться все больше и больше, а значит появится возможность для использования децентрализованной аутентификации в промышленных системах.

habr.com

Proof-of-Proof-of-Work на пальцах. На пути к разумному блокчейну / Хабр

Блокчейн-протоколы должны обеспечивать консенсус среди нод децентрализованной системы. Пожалуй, самым известным алгоритмом консенсуса можно считать «тормозунутый, но надежный, потому что тормознутый» алгоритм Proof-of-Work: каждая нода, имея набор новых транзакций перебирает некоторое число nonce, являющееся полем блока. Блок считается валидным, если валидны все транзакции внутри него и хэш-функция от заголовка блока имеет некоторую общепринятую особенность (например, количество нулей в начале, как в Bitcoin):

Hash( Block{transaction,nonce,…} ) = 000001001... Как известно, блокчейн — это цепочка блоков. Цепочкой он является потому, что внутри каждого блока записан id (как правило хэш от заголовка) предыдущего блока. Для последующих рассуждений блокчейн в упрощенном виде можно представить так:

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

Есть вариант запросить у соседних нод несколько последних блоков и, доверившись, принять их как валидные. Но этот вариант не соответствует духу безопасности в «среде, где никто никому не доверяет»

PoPoW-ноды.

Хэш-функция от заголовка блока является его id. Как было сказано ранее, в сети Bitcoin, как и во многих других сетях, особенностью, по которой определяется валидность блока, является число нулей в начале записи id. Это известное и общее для всех майнеров число нулей, называют сложностью майнинга T (mining target). Валидный хэш с T нулями в начале может иметь больше нулей в начале, чем Т. Конкретнее, половина блоков будет иметь только T нулей в начале; половина блоков будет иметь T+1 нуль в начале; четверть блоков T+2 нулей и.т.д. Например так может выглядеть набор валидных блоков для T = 5: 000000101… (6 нулей) 000001110… (5 нулей) 000001111… (5 нулей) 000000010… (7 нулей) 000000101… (6 нулей) 000001110… (5 нулей) 000001111… (5 нулей) Количество нулей, превышающее T в id блока назовем уровнем µ, а блоки с уровнем µ будем называть µ — суперблоками. Если блок является µ — суперблоком, то он так же является и (µ -1)-суперблоком. Таким образом, пока ничего не изменяя, а лишь оперируя введенным параметром µ, можем представить цепочку блоков в следующем µ-уровневом виде:

Блоки пронумерованы для простоты описания, нумерация не несет смысловой нагрузки.

Теперь подумаем, как мы можем это использовать. Если в заголовок каждого блока записывать не только id предыдущего блока, но и id всех последних блоков на каждом уровне, то мы позволяем каждому блоку ссылаться на более «древние» блоки, чем предыдущий. Набор всех последних на каждом уровне блоков будем называть interlink (множественная ссылка). Например, Interlink для блока 8 выглядит так:

Что нам это дает? Допустим, мы подключили новую ноду и теперь хотим безопасно синхронизировать её. Как мы уже сказали, для полноценной валидации нового блока, ноде нужно «прошагать» до genesis – блока по всему блокчейну. Однако, если мы будем иметь в валидируемом блоке ссылки на некоторые «опорные» блоки, то сможем «прошагать» до genesis – блока, запросив у других нод не весь блокчейн, а лишь некоторое доказательство (proof), которое будет содержать короткий маршрут до самого первого блока. Сам маршрут будет являться валидной подцепочкой самого блокчейна, так как блоки подцепочки последовательно ссылаются друг на друга.

Доказательство – это набор заголовков нескольких предыдущих блоков. Строго говоря, доказательство содержит не только «короткий маршрут», но и ещё несколько заголовков других блоков. Это сделано для верификации доказательства (verify) по задаваемым параметрам безопасности m, k и др. (подробное описание приводится в оригинальной статье, ссылка в конце).

Нода, которая не хранит весь блокчейн, а лишь запрашивает proof у full-нод, хранящих всю историю, называется PoPoW – нодой. Теоретически такую ноду можно развернуть на маломощном компьютере, смартфоне.

Алгорим работы PoPoW-протокола следующий:

1. PoPoW-нода запрашивает доказательство для блока у full – ноды. 2. Full – нода (proover) формирует доказательство и отправляет его. 3. PoPoW-нода (verifier) проверяет доказательство, сопоставляет с доказательствами других нод и делает заключение о валидности блока.

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

NiPoWPoW – алгоритм

Алгорим NiPoPoW – Non-Interactive Proof-of-Proof-of-Work – включает в себя усовершенствованные формирование и проверку доказательств, он устойчив к некоторым атакам, которым подвержен PoPoW. Ссылка на оригинальную статью от авторов так же в конце.

Для чего все это нужно?

С помощью этих алгоритмов решаются две актуальные проблемы: эффективная верификация транзакции и эффективное доказательство для сайдчейнов (Sidechains).

В первом случае этот алгоритм позволяет подключать к сети «легкие» ноды, которые смогут быстро синхронизироваться с сетью.

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

Данный обзор составлен на свежую голову после участия в хакатоне Unblock Hackathon, где одним из заданий было реализовать данный протокол. Авторами задания были партнеры хакатона из Ergo platform, внутри которой используется этот алгоритм.

Текст подготовлен на основе оригинальных статей PoPoW: Proofs of Proofs of Work with Sublinear Complexity. Aggelos Kiayias, Nikolaos Lamprou, and Aikaterini-Panagiota Stouka NiPoPoW: Non-Interactive Proofs of Proof-of-Work. Aggelos Kiayias, Andrew Miller and Dionysis Zindros

habr.com

Блокчейн, его перспективы и долевая экономика / Блог компании IBM / Хабр

Технология блокчейн, несмотря на всю ее перспективность для экономики, находится лишь в самом начале своего технологического цикла. Bitcoin — первый и самый известный случай применения этой технологии. Сейчас блокчейн существует отдельно от Bitcoin, разные компании и частные разработчики создают все новые и новые технологии на основе блокчейн. Корпорация IBM ее поддерживает и старается развивать эту технологию всеми доступными методами.

Благодаря блокчейну вся экономическая деятельность человека может быть перестроена. Многим людям сложно думать об этой технологии без привязки к Bitcoin, но по мере появления иных сфер применения блокчейна ситуация изменяется. Интересно, что сфера финансовых услуг лишь один из нишевых сценариев применения блокчейна, на самом деле, возможности этой технологии гораздо шире. В качестве примера можно привести несколько случаев работы с блокчейном современных компаний без привязки к финансам и Bitcoin. Например, компания EverlLeger использует блокчейн в цепочке поставок для подтверждения источника происхождения в торговле алмазами. Есть возможность работы с этой технологией и в системе обеспечения сохранности ценных вещей — этим занимается стартап Assetcha.in. А компания Midasium использует блокчейн для заключения качественных соглашений об аренде жилья на рынке недвижимости.

Мы стараемся прояснить терминологию блокчейна, поскольку обычно этот термин используется в качестве обозначения чего-то вроде распределенной бухгалтерской книги. Да, многие компании работают с этой технологией для проведения финансовых расчетов (например, Ripple), но, как мы уже говорили, есть немало и других возможностей. Например, Guardtime работает с блокчейн для обеспечения целостности данных. Банковские операции, если так можно выразиться, тоже в тренде: консорциум R3CEV, куда входит 43 банка, начинает работать над частной блокчейн-технологией в сфере банковских операций.

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

Децентрализация — зачем она нужна?

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

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

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

Экономика второго поколения

С появлением и развитием технологии блокчейн начинают быстрее эволюционировать традиционные отрасли. Электронная коммерция, рынок недвижимости, юридические услуги — везде начинает появляться блокчейн. На основе этой технологии компания Amazon.com предоставляет услуги логистики, консультирования и даже доставки на следующий после заказа день.

Благодаря новой технологии можно обходиться без посредников. К примеру, при работе с Uber, Airbnb или eBay сервисы блокчейна дают возможность пользователям работать с ресурсами совместно, обмениваться ими и совершать операции напрямую. Все это является признаками наступления эры реальной «долевой экономики», которую еще называют «экономикой совместного участия».

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

Вывод

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

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

habr.com

Три необычных примера использования блокчейна / Блог компании Binary District / Хабр

Высказывания о том, что блокчейн исключительно про ICO, криптовалюты, финансовую индустрию, банкинг и создание публичных открытых сетей, начинают терять свою значимость. Например, количество пилотных проектов, проведённых компанией IBM с партнёрами из самых разных отраслей уже в 2016 году достигло 400. «Если 2016-й год был для компаний годом экспериментальных проектов в области блокчейн-технологий, то 2017-й стал годом масштабирования и переходом от пилотных проектов к активным сетям. Я думаю, в 2018-м этот тренд продолжит развиваться, и достаточно много проектов перейдёт в продуктивную фазу. Ещё я бы отметил тенденцию всё большей интеграции блокчейн-проектов друг с другом и продуктивными системами. Блокчейн-решение, по сути, не может быть «отдельной коробочкой», оно обязательно должно быть интегрировано с продуктивными системами банков или других организаций».

                                       Владимир Алексеев, cистемный архитектор IBM в России и СНГ,                                                              спикер курса Blockchain Weekend в Binary District

В сущности, внедрение технологии блокчейн оправдано в том случае, если выполняются три главных условия:

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

Доказательство качества

Компании IBM, Walmart, китайский интернет-магазин JD и университет Цинхуа в 2017 начали совместную работу над проектом по обеспечению пищевой безопасности, реализованном на базе открытой блокчейн-платформы HyperLedger Fabric. Импульсом к разработке проекта послужила достаточно драматичная ситуация, связанная с количеством заболеваний, вызванных пищевыми отравлениями по всему миру. Технология позволяет объединить всю документацию по цепочке поставок пищевой продукции, в частности – свинины, и устранить возможность поступления в магазин контрафакта. «Это решение позволило существенно сократить время на поиск определенной партии товаров для необходимой проверки или возможного изъятия из оборота. Осенью 2017-го было анонсировано создание консорциума, в который войдут крупнейшие ритейл-поставщики со всего мира, включая Unilever, Kroger, Nestle. Цель этого объединения – расширить пилотный проект Walmart и IBM, чтобы масштабировать задачу обеспечения пищевой безопасности и прозрачности поставок на всю ритейл-индустрию США».                                                                                                               Владимир Алексеев, IBM По оценкам экспертов IBM, блокчейн-решение для Walmart поможет сократить количество летальных исходов от употребления некачественных продуктов питания по всему миру на 400 000.

Доказательство подлинности

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

Доказательство жизни

Совсем скоро расшифровка генома человека станет вполне обычной и доступной каждому процедурой. Это сможет повысить качество диагностики заболеваний, предотвратить развитие многих из них, способствовать созданию новых лекарств. Смелый проект Nebula Genomics стремится, во-первых, снизить затраты на расшифровку персонального генома, а во-вторых, оптимизировать сбор и хранение персональной информации. Для достижения этих целей применяются механизмы децентрализации, криптография и блокчейн.

18 февраля на курсе Blockchain Weekend на площадке Digital October Владимир Алексеев расскажет о ярких кейсах применения блокчейна в различных бизнесах и индустриях. Регистрация на курс.

habr.com