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

2.0 vs 3.0: децентрализация и конфиденциальность
2.0 vs 3.0: децентрализация и конфиденциальность

Так какие же требования к идентификации могут предъявлять веб-приложения современного настоящего и ближайшего будущего?

UUID

Децентрализованный характер v3-приложений диктует использование UUID в качестве базы для идентификации чего угодно:

c2115ec9-dade-4475-be27-55c7f7b03db8

Автоинкременты могут использоваться только в качестве дублирующих внутренних идентификаторов в локальных хранилищах данных.

userUuid

Понятно, что каждому пользователю должен соответствовать его собственный userUuid, генерируемый клиентским ПО (фронтом) в момент регистрации пользователя в v3-приложении. Идентификаторы типа nickname, login, email, phone в v3-приложениях использоваться не будут.

hostUuid

Веб-приложения, использующие в качестве фронта браузер (SPA, PWA), просто обязаны иметь некий сервер, с которого подгружается код клиентской части (хост-сервер). Возможность работы PWA в режиме offline диктует необходимость иметь некий "почтовый ящик" (очередь сообщений), в котором могут хранится сообщения других пользователей для данного пользователя, пока он не "выйдет из сумрака" (станет online). Очевидно, что данный "почтовый ящик" будет находиться на хост-сервере.

Хосты и клиенты
Хосты и клиенты

Более того, даже для не-браузерных клиентов должен быть такой же, всегда доступный, "почтовый ящик" с постоянным адресом, из которого пользователь будет забирать приходящие к нему сообщения. Просто в силу того, что основным устройством для выхода в интернет всё чаще становится мобильный телефон и тут ни о каком постоянном ip-адресе речь идти не может в принципе.

Итого: идентификация пользователя в приложениях Web 3.0 будет иметь примерно такой вид (порядок частей и разделитель не важен):

// userUuid:hostUuid
c2115ec9-dade-4475-be27-55c7f7b03db8:31f806ab-8ddc-4397-a1ab-ad5f9fe8f55f

Нам (разрабам) нужно будет не только знать идентификатор самого пользователя, но также и идентификатор его хост-сервера.

Ключи шифрования

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

Ключи шифрования
Ключи шифрования

Таким образом, чтобы отправить сообщение какому-либо пользователю в v3-приложении, помимо его userUuid:serverUuid нужно будет знать также и публичный ключ (pubKey) получателя сообщения. Очень похоже, что хост-сервер будет хранить все идентификаторы зарегистрировавшихся на нём пользователей и их публичные ключи, чтобы любой другой пользователь мог оставить конфиденциальное "почтовое сообщение" хостящимся на сервере пользователям.

frontUuid

В общем случае пользователь может подключаться к серверу при помощи совершенно разных клиентов (SPA в браузере, PWA в браузере/мобильном, нативные мобильные приложения для iOS и Android).

Множественные клиенты (фронты)
Множественные клиенты (фронты)

В v3-приложениях нужно идентифицировать различные фронты и сопоставлять их с соответствующим пользователем. Разумеется, если конкретное v3-приложение допускает множественные подключения с различных клиентов.

Хранение данных

Децентрализация и требования конфиденциальности приводит к тому, что в качестве основного хранилища используются ресурсы клиента, а не сервера (localStorage, IndexedDB, file-system, cloud):

Хранение данных пользователя
Хранение данных пользователя

Уже сейчас рядовой пользователь имеет в своём мобильном телефоне больше пространства, чем даёт тот же Gmail (Web 2.0) по-умолчанию (15 Гб).

Если v3-приложение позволяет пользователю подключаться с разных фронтов, а основным хранилищем для данных пользователя являются хранилища фронта (например, IndexedDB), то возникает необходимость репликации данных между фронтами. Репликация может проходить как через хранилище бэка, так и через внешнее хранилище (например, облако), и даже напрямую (peer-to-peer):

Варианты репликации данных между фронтами
Варианты репликации данных между фронтами

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

Токен доступа

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

Этот токен привязывается к пользователю и к фронту, через который пользователь аутентифицировался.

Пароль пользователя

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

sessionUuid

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

В таких приложениях сервер должен различать не только пользователей и фронты, с которых пользователь подключается к серверу, но также и вкладки, на которые нужно "лить" те или иные данные. В браузере есть хранилище данных, которое не разделяется между вкладками - sessionStorage, в отличие от localStorage. Таким образом, в некоторых случаях серверу помимо frontUuid нужно знать также и sessionUuid.

Резюме

В общем случае в децентрализованных приложениях Web 3.0 разработчикам необходимо идентифицировать следующие сущности:

  • пользователь (userUuid)

  • "домашний" сервер пользователя (hostUuid)

  • клиентское приложение пользователя (frontUuid)

  • вкладка браузера (sessionUuid)

Так как круглосуточная (24x7) передача данных в режиме peer-to-peer между пользователями v3-приложений невозможна, то возникает необходимость в использовании ассиметричного шифрования для хранения сообщений в очереди сообщений на "домашнем" сервере получателя. Как следствие, пользователи также должны будут обмениваться своими публичными ключами.

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

Комментарии (19)


  1. kAIST
    29.12.2023 17:44
    +7

    в плавно привходящей третьей версии веба - Web 3.0

    Сколько лет он уже плавно приходит, но кроме статей с теоретическими рассуждениями, что нибудь есть?


    1. flancer Автор
      29.12.2023 17:44
      -3

      Любое веб-приложение, где основные данные пользователя хранятся на клиенте, можно уже считать "тройкой". Любое децентрализованное веб-приложение можно считать "тройкой". Веб большой, в нём одновременно существуют приложения всех трёх версий. Возможно вы лично с "тройкой" не сталкивались. А возможно у вас просто очень суровое определение критериев для "тройки" - поэтому вы их и не наблюдаете :)


      1. rsashka
        29.12.2023 17:44

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


        1. flancer Автор
          29.12.2023 17:44

          Вы думаете, это реально возможно? IMHO, если только если запретить шифрование. Уверен, что Даркнет работает даже за Великим Китайским Файерволом.


      1. LeetCode_Monkey
        29.12.2023 17:44

        Любое веб-приложение, где основные данные пользователя хранятся на клиенте

        Да вот что-то вообще таких не обнаруживаю у себя.


      1. orefkov
        29.12.2023 17:44

        А web4.0 это получается, когда не только данные, но и ПО сервера будет на стороне пользователя работать? И представляете, его можно будет преобразовать в нативный код, и запускать вообще без браузера! Вот это будет прорыв, я считаю, революционная идея!


    1. opusmode
      29.12.2023 17:44
      +1

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

      Собственно Web 3.0 это тоже не утверждаемый стандарт, а набор общих наблюдений, только в этот раз его попытались предсказать, притом все по своему. На момент 2007 года не угадал никто. Наблюдения от 2012 года уже ближе,но тоже не то.

      Вы узнаете, что Web 3.0 наступил, когда уже будете в нём с головой. Так что может и есть


      1. kAIST
        29.12.2023 17:44

        Вы узнаете, что Web 3.0 наступил, когда уже будете в нём с головой. 

        Сначала нам обещали что веб 3.0 это метавселенные, потому что веб 3.0 это блокчейн и все такое. Сейчас вроде поутихли с блокчейном, но все равно продолжают пытаться эту тему эксплуатировать.

        Ой, про "интернет вещей" же забыл, тоже в свое время хайповая штука была.


        1. opusmode
          29.12.2023 17:44
          +1

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

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

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

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

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

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

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


    1. flancer Автор
      29.12.2023 17:44

      Да. Тут чуть ниже в комментах пришёл к заключению, что старый добрый email и есть пример Web 3.0. Не в том виде, где gmail, mail.ru и т.п., а в том, где POP3. IMAP, кстати, это уже Web 2.0.


    1. Vitaly48
      29.12.2023 17:44
      +1

      кроме статей с теоретическими рассуждениями, что нибудь есть?

      Обманутые ожидания инвесторов


  1. BugM
    29.12.2023 17:44

    Ох, как "удобно". Причем для всех "удобно" и для пользователей, и для разработчиков.

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


  1. Sazonov
    29.12.2023 17:44
    +2

    Web 2 от 1 понятно чем отличается. В первую очередь это технический прогресс или шаг вперед - динамические страницы вместо статики. Можно сказать что web 2 полностью поглотил web 1.

    Почему многие адепты децентрализации называют это дело web 3 мне совершенно не понятно. Децентрализация это не изобретение веба. Это один из способов решения некоторого узкого круга задач, а не замена web 2.


  1. vblats1984
    29.12.2023 17:44
    -1

    Не было никакого web 1.0 или web 2.0.

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

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

    Ну вот кто этому мусью сказал что web 2.0 стремится к централизации, и что web 1.0 к централизации не стремился ?

    Мусье хотя бы удосужился прочитать профильную статью О Рейли ?

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

    Технологии вебдванолья - аджакс, помогающий шлепать и показывать контент без перезагрузки страницы; микширование, позволяющее засовывать на один сайтик разные технологии, например на страницу магазина гуглокарту, показывающую расположение магазина, и тут же комменты от discuss рядом; теггирование, собственно ключевые слова по которым можно стало искать не только объекты, а и #ссылки на эти объекты; планшетодизайн с огромными кнопками и огромными отступами, норм смотрящийся на мобилке, но всрато на десктопе (у меня ретина, полезный контент ФБ занимает 25% от ширины); индивидуализация, когда под юзера можно настроить отображаемый контент, выводимые товары, цвет фона, аватарки и тд.

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

    В общем. Было поколение "пепси", потом поколение "миллениалов", потом поколение "снежинок". Надо бы написать свой стандарт зачатия нового поколения.


  1. nikit204
    29.12.2023 17:44

    HostUUID

    А как находить сервер по uuid?

    Что-то по типу DNS? Они же относительно централизованы.

    Блокчейн?


    1. LeetCode_Monkey
      29.12.2023 17:44
      +1

      DHT


    1. flancer Автор
      29.12.2023 17:44

      Да, что-то типа DNS. Домены - это общеинтернетовский подход, а сопоставление hostUuid его реальному ip-адресу (или адресам) должно делаться на уровне самого распределённого приложения. Типа, новый хост подключается к любому существующему хосту и сообщает о своём текущем адресе, после чего эта информация разносится по остальным хостам (они же сервера, поэтому online 24x7).

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

      А как находить сервер по uuid?

      На мой взгляд, пользователь обращается к "своему" хосту, сообщая пару "user@host" для получателя сообщения, а уже "его" хост редиректит сообщение хосту получателя, основываясь на карте hostUuid => ip-address. Примерно так, как это сейчас работает с email'ом. Кстати, email - очевидный пример Web 3.0 (децентрализация - DNS, SMTP и локальное хранение данных - POP3, IMAP).

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


      1. xxxphilinxxx
        29.12.2023 17:44

        email - очевидный пример Web 3.0 (децентрализация - DNS, SMTP и локальное хранение данных - POP3, IMAP).

        Что-то не так, а то и фидонет тогда придется назвать web 3.0: там тоже не было централизации и данные хранились локально.
        Каким образом DNS и SMTP - децентрализация email? DNS - маппинг домена на айпишники, SMTP - вовсе протокол one-to-one общения для отправки письма. Чтобы отправить письмо кому-то, мне и так надо обратиться его почтовому серверу. Имхо скорее наоборот, при отсутствии DNS письма бы отправлялись по независимым IP-адресам, а DNS-сервер централизует эту систему.
        POP3 и IMAP подразумевают, что почтовый сервер поднят на какой-то другой машине, что возвращает все максимум к web 2.0; для децентрализации либо почтовый сервер должен быть поднят непосредственно у вас на мобилке/компе и быть доступен 24/7, что недостижимо и чревато утратой данных, либо, как это обычно предполагается, письмо должно доставляться в какой-то общий ресурс вроде блокчейна, распределенный по устройствам других пользователей. Блокчейн вполне может содержать и шифрованные данные, а не только открытые - встречал уже "email будущего" на таком подходе.
        Кстати, если у каждого есть только свои собственные уникальные данные, хранящиеся только на устройстве и принципиально недоступные извне, то это вообще на web-то не особо похоже: просто оффлайн-хранилище с возможностью ручной p2p-отправки в другое хранилище.


        1. flancer Автор
          29.12.2023 17:44

          Типовой email-адрес: user@mail.com. Без DNS вы не определите, кто является хост-сервером для этого пользователя. SMTP - "протокол one-to-one общения для отправки письма" (с) Это ваши собственные слова. Сравните эту архитектуру с такими сервисами, как facebook, twitter, gmail (доступ через web-интерфейс). Вот там централизация.

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

          Это слишком сложно. Достаточно, чтобы сообщение от отправителя дошло до адресата и содержимое было доступно только отправителю и получателю. Блокчейн и распределённые хранилища излишни. Хватает обычного email'а (S/MIME).

          Web 3.0 не обязательно должен быть однородный - у каждого свой сервер на мобильном телефоне. Вполне себе может существовать два типа узлов - клиентские и хосты. А то и три-четрые-... и т.д. Я пока ещё не встречал академического определения, что есть Web 3.0. Если поделитесь ссылкой на, я скорректирую своё мировоззрение.