cryptofoundry

Связаться с cryptofoundry

Расскажите, что вы хотите создать или автоматизировать.

Электронная почта
[email protected]
ADAMANT Messenger
Открыть в ADAMANT
Статья

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

ADAMANT MessengerИз кузницы ↗
Безопасная двухфакторная аутентификация в блокчейне

SMS — самый распространённый метод двухфакторной аутентификации, используемый банками, криптокошельками и бесчисленными онлайн-сервисами. Однако он принципиально небезопасен. Атаки методом замены SIM-карты (SIM swap), при которых злоумышленник переводит номер жертвы на новую SIM-карту, используются ещё с ранних лет мобильной связи и продолжают активно расти. В 2019 году лондонская полиция зафиксировала рост мошенничества с SIM-картами на 63 %, а громкие случаи привели к хищению миллионов долларов в криптовалюте. Причина кроется в структуре системы: тот, кто контролирует SIM-карту, может сбрасывать пароли и захватывать аккаунты, а сотрудников сотовых операторов можно подкупить или обмануть, чтобы они переназначили номер.

Перейти к безопасной 2FA в блокчейне

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

Перейти к безопасной 2FA в блокчейне

Джоэл Ортис на пресс-конференции в университете. Два года спустя он был арестован за кибермошенничество и приговорён к 10 годам тюремного заключения за кражу более чем 7,5 млн долларов в криптовалюте с помощью SIM swap.

Восстановление утраченных средств затруднено. Переводы в фиатных валютах иногда можно отменить при содействии банка, но транзакции в криптовалюте фактически необратимы и зачастую не поддаются отслеживанию. Ни одна криптобиржа не компенсировала жертвам утрату средств из-за SIM swap, а судебные иски обычно направлены против провайдера, а не на возврат средств. Например, Майкл Терпин потерял 224 миллиона долларов и подал в суд на AT&T.

Помимо замены SIM-карты, у SMS-аутентификации есть и другие технические уязвимости. Сообщения могут быть перехвачены через уязвимости в протоколе Signaling System 7 (SS7), а Национальный институт стандартов и технологий США официально исключил SMS из числа рекомендованных вторых факторов в своих Digital Identity Guidelines. Доставка SMS также ненадёжна — коды приходят с задержкой или не приходят вовсе, а наличие 2FA может создавать у пользователей ложное ощущение безопасности, из-за чего они выбирают более слабые пароли.

Другие методы 2FA и их компромиссы

Альтернативные методы 2FA включают списки одноразовых TAN-кодов, биометрическую аутентификацию, приложения-аутентификаторы с временными кодами, такие как Google Authenticator, и аппаратные ключи безопасности. У каждого из них есть практические недостатки. Физические токены можно потерять или украсть. Приложения-аутентификаторы усложняют перенос аккаунтов между устройствами — например, Google Authenticator не позволяет экспортировать ключи, из-за чего восстановление после поломки телефона становится болезненным процессом. Исследование 2013 года показало, что пользователи считают все виды 2FA неудобными, а SMS остаётся популярным просто потому, что это наименее неудобный вариант, а не потому что он самый безопасный.

Идеальный метод 2FA должен быть безопасным, надёжным, удобным и недорогим. Доставка через блокчейн отвечает этим критериям.

2FA через блокчейн с использованием ADAMANT

С точки зрения пользователя, 2FA в блокчейне работает так же, как и через SMS: сервис генерирует одноразовый код и отправляет его по каналу связи; пользователь читает и вводит его. Разница в транспорте. Вместо SMS код доставляется через мессенджер на основе блокчейна ADAMANT, доступный как веб-приложение, клиент Tor, а также нативные приложения для iOS, Android, Linux, Windows и macOS.

Перейти к безопасной 2FA в блокчейне

Блокчейн обеспечивает ряд свойств безопасности, недоступных для SMS. Для создания аккаунта не требуется номер телефона или электронная почта — только парольная фраза. Все сообщения сквозно шифруются с использованием алгоритма curve25519xsalsa20poly1305. Каждое сообщение — это транзакция в блокчейне, подписанная по алгоритму Ed25519 EdDSA, что делает атаки типа man-in-the-middle невозможными. Сообщения фиксируются в блоках с неизменяемыми временными метками, а подлинность проверяется распределённым консенсусом узлов, а не централизованным органом. Аккаунты нельзя заблокировать, а сообщения — удалить, что исключает возможность приостановки SIM-карты оператором. Коды доступны с любого устройства в любое время, а отправитель получает подтверждение доставки — что устраняет необходимость в кнопке «Отправить повторно».

Перейти к безопасной 2FA в блокчейне

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

Стоимость отправки 2FA-кода через ADAMANT составляет примерно 0,001 ADM (около 0,00001 долл. США по текущему курсу). Сервис также может запустить собственный блокчейн на основе кодовой базы ADAMANT и установить комиссию за транзакцию равной нулю.

Руководство по реализации

Ниже описаны шаги интеграции 2FA в блокчейне в сервис с использованием ADAMANT в качестве канала доставки. Референсная реализация доступна на GitHub по адресу https://github.com/Adamant-im/adamant-2fa.

Шаг 1: Создание аккаунта отправителя

Создайте аккаунт ADAMANT, который будет отправлять 2FA-коды. Это можно сделать вручную через веб-кошелёк или программно через ADAMANT Node API, Console или JS API. Создание аккаунта включает генерацию BIP39-фразы, вычисление её хэша SHA-256, вывод пары закрытого и публичного ключей Ed25519, а затем вывод адреса блокчейна из публичного ключа через ещё один хэш SHA-256 с инверсией.

Перейти к безопасной 2FA в блокчейне

Перейти к безопасной 2FA в блокчейне

Шаг 2: Генерация одноразовых кодов

Сгенерируйте код HOTP для каждой попытки входа. В примере ниже используется библиотека speakeasy:

const hotp = speakeasy.hotp({
  counter,
  secret: account.seSecretAscii,
});

Проверка при отправке кода пользователем:

se2faVerified = speakeasy.hotp.verify({
  counter: this.seCounter,
  secret: this.seSecretAscii,
  token: hotp,
});

Шаг 3: Отправка кода через блокчейн

Используйте CLI ADAMANT Console для отправки кода как сообщения в блокчейне:

const util = require('util');
const exec = util.promisify(require('child_process').exec);

const command = `adm send message ${adamantAddress} "2FA code: ${hotp}"`;
let { error, stdout, stderr } = await exec(command);

В качестве альтернативы используйте метод send из библиотеки ADAMANT JS API для программного подхода без вызова CLI.

Шаг 4: Создание пользовательского интерфейса

Предоставьте поле для ввода пользователем 2FA-кода. Демонстрационное приложение использует Vue, но подойдёт любой фронтенд-фреймворк.

Перейти к безопасной 2FA в блокчейне

Полный исходный код демонстрационного приложения доступен на GitHub по адресу https://github.com/Adamant-im/adamant-2fa, включая инструкции по установке и ссылку на живую демонстрацию.