Post
Topic
Board Идеи
Re: Авторизация на сайтах, при помощи биткоин
by
crypto_trader#43xzEXrP
on 05/08/2019, 23:37:51 UTC
Но тогда зачем нам именно авторизация через криптовалюты, а не через внутренний ресурс сайта?
Ну, потому что мы в крипте. А внутренний ресурс сайта, могут в любой момент - подменить.

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

Я где-то видел авторизацию через MetaMask, по-моему на https://idex.market/ .
Там, короче, такая схема:
1. Ставишь разширение к браузеру, под названием MetaMask.
2. Вводишь туда приватный ключ, шифруешь его паролем, расширение получает из приватного ключа адрес эфира,
и проверяет баланс эфира и токено на сайте https://etherscan.io/ через API.
3. Балансы эти оно выводит и через это расширение можно перевести токены и эфир,
и при этом - расширение подписывает транзакции зашифрованным внутри - приватным ключём.
4. Подпись доступна не только для транзакций, но и для сообщений.
5. Когда я заходил на https://idex.market там можно было просто импортировать privkey чтобы зайти,
но это стрёмно как-то импортировать ключ в сторонний сайт,
а можно было ещё - просто выбрать MetaMask, и покуда privkey уже есть там,
и хранится он локально, в зашифрванном виде, то так - безопаснее.
Безопаснее, в том плане, что этот privkey не надо вводить никуда, а значит - никто его не стыбрит,
никакой админчег централизованного сервера, хотя сама биржа https://idex.market/ - это DEX, походу.
Да, так оно и есть:
IDEX – это первая децентрализованная биржа со смарт-контрактами на основе Ethereum, которая поддерживает трейдинг в реальном времени и обеспечивает высокую пропускную способность транзакций.
Но дело не в этом, а в том, что там авторизация работает через цифровые подписи.
И когда я в чате вводил ник там - в браузере всплывало окно с просьбой подтвердить подписание сообщения от биржи - через MetaMask,
либо отклонить это действие.
Как только подписываешь это сообщение - оно отправляется на сервер, сервер проверяет подпись,
и тогда вводится никнейм (если он уникальный и не зарезервирован никем, в чате).
И тогда уже - можно постить в чат что угодно, и этот ник привязан к адресу.

Ну, а что касается анонимности...
Где-то, у какого-то альткоина, я ещё видел block-explorer, где в разделе richlist - просто адреса.
Так вот, там можно было задать никнейм для адреса - схема та же:
1. Сервер генерирует рандом, шлёт его и просит подписать.
2. Подписываешь, вводишь подпись цифровую, сервер проверяет её и сравнивает с адресом.
Достаточно было просто ввести строку цифровой подписи, чтобы она была проверена,
и только тогда к адресу в rich-list'е - цеплялся введённый пользоватеем никнейм.
Можно с лёгкостью понять что происходило на стороне сервера:
Сервер проверял подпись, извлекал с неё адрес (а это всё есть в открытом исходнике монеты),
дальше, если адрес соответствует адресу из рич-листа, к которому цепляется никнейм,
значит этот владелец адреса подписал сообщение.
Более того, у него есть приватный ключ, он живой, и вот он - хочет ввести никнейм.
Действие - производится успешно. Никто другой, кроме владельца, не смог бы ввести никнейм, и просто висел бы анонимный адрес.

Идём дальше...
Зайдём-ка на https://etherscan.io/token/0xdac17f958d2ee523a2206206994597c13d831ec7#comments
Там можно оставить коммент, но требуется авторизация через различные централизованные сервисы.
А я, где-то видел подобное, но на приватных ключах. Не помню какой альткоин. Что-то вроде анонимной соцсети.
Там были имена, привязанные к адресам, и после цифровой подписи - можно было постить комменты от имени,
или вроде-как там была система, позволяющая оставлять голоса "круто" или "фигня", и коммент.

Теперь по другим цитатам, быстро пробегусь:
Quote
Аутентификация на основе ключевых пар и так давно уже придумана была, где то в конце 80х, ты немного опоздал.
Интересно. Дай ссылку на исходники, где используется - именно ECDSA.

Quote
Как раз таки такое не вводят потому, что анонимность и есть возможность клепать мультов пачками.
Вот от мультов отдельная защита должна бы быть реализована на сервере.
Но как ты определишь, мульт ли это, или два человека, через один шлюз сидят и пишут с одного IP?

Quote
А теперь впихни эту подпись сюда, например: https://reinproject.org/bitcoin-signature-tool/ и получишь "Message verified to be from (address wasn't specified)"

А здесь и здесь вообще надо адрес и само тело сообщения (ну тело по сути не нужно, чтобы узнать кто подписывал)
- https://btc.coin.space/messages/verify
- https://github.com/gregorvolkmann/coinig.com

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

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

Quote
Что мешает подменить публичный адрес и также обломать тебе работу на сайте?
Ничего. На самом сервере сайта можно же - что угодно подменить.

Quote
В твоем варианте она тоже может быть использована вполне. Ничего не мешает вредному прокси серверу получить сообщение на подпись, переслать тебе, потом получить готовую подпись, отослать серверу и все, вуаля.
Поэтому кстати как раз и должна быть клиент сайд генерация новой ключевой пары и секьюрный обмен публичным ключом (отправить его на сервер чтобы он знал о нем) ну или просто сертификат серверу отправить свой, самоподписный.
Если там, в подписи pub, а не адрес, то да, ECDH тут как нигде кстати.
Это затруднило, если не исключило бы подобную MITM-атаку, которую ты описал здесь.