как работает запрос на пение Ethereum?

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

как я читал, это делается для того, чтобы убедиться, что вы прошли аутентификацию. Итак, вы подписываете сообщение.

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

Хорошее объяснение будет оценено.

Ответы (1)

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

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

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

Я не уверен, что означает «пока это не хакерская транзакция».

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

{
  someObject: {
    // arbitrarily long
  }
  signature: <short string>
}
  1. ХэшsomeObject
  2. Подпишите хэш
  3. Отправить пакет

На принимающей стороне:

  1. ХэшsomeObject
  2. отправитель = ECRecover (сообщениеHash, подпись)

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

Он возвращается в JavaScript, который запросил подпись сообщения.

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

Все, что он хочет делать. Смотрите предыдущий ответ для возможности. В качестве предостережения обычно рекомендуется добавить некоторую защиту от повторного воспроизведения в общую схему, чтобы подписанное сообщение нельзя было использовать более одного раза. Например, Ethereum использует nonceтак, чтобы «отправить деньги» нельзя было отправить повторно, как только люди увидят подпись.

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

Все зависит от того, для чего приложение использует подписи. Например, он может пройти аутентификацию один раз и установить постоянное состояние сеанса. Или это будет работать на основе подписи каждого сообщения, т.е. каждое взаимодействие с API аутентифицируется.

Надеюсь, поможет.

Привет, Роб, мне нравятся твои ответы. Я был бы признателен за ваш вклад в мой другой вопрос - ethereum.stackexchange.com/questions/94556/… . Хороших выходных.