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

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

PS. Мое приложение может быть похоже на то, как работает Twitter, но у него нет учетных записей и основных серверов для их хранения. Он разработан на Android и не может использовать Интернет просто потому, что он использует Wi-Fi для подключения только к маршрутизаторам локальной сети, и я бы не хотел, чтобы пользователям приходилось использовать 3G/edge.

Возможные решения:

  1. Используйте специальный идентификатор телефона (IMEI), а также как его получить программно и действительно ли он уникален?

  2. Используйте MAC-адрес телефона (фактически хэшированное объединение MAC-адресов Bluetooth и WiFi), уникально ли это для каждого телефона? Проблема с этим и вышесказанным заключается в том, что настоящий автор может со временем сменить свой телефон.

  3. Если подлинный автор ранее входил в систему со своей учетной записью Google, сохраняется ли она в памяти телефона и могу ли я программно получить эту информацию в автономном режиме?


person Miky    schedule 25.12.2011    source источник


Ответы (2)


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

Просто что-то рассмотреть, если вы еще этого не сделали.

person Telmo Marques    schedule 25.12.2011
comment
вы правы, я забыл об этом решении. Хотя я пытаюсь придумать менее сложный метод (не хочу создавать внешний сервер, который будет действовать как центр сертификации). На данный момент я сосредоточен на учетных записях Google, проверяя, доступны ли они в памяти телефона программно и насколько это безопасно (вероятно, телефон не запомнит учетную запись Google, которая не была успешно зарегистрирована в прошлом, поэтому она должна быть хорошо, пока я могу получить эту информацию в автономном режиме). - person Miky; 26.12.2011
comment
Посмотрите, поможет ли это: stackoverflow. com/questions/2245545/ Также см. здесь, как вызвать действие, которое предлагает пользователю создать новую учетную запись stackoverflow.com/questions/3575303/ может быть удобно, если пользователь не у вас нет учетной записи Google, связанной с телефоном, и она требуется вашему приложению. - person Telmo Marques; 26.12.2011

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

Для мобильной связи вы можете пойти еще дальше и заставить людей подтверждать, что они знают другого человека, используя связь ближнего действия. Например, ваше приложение может выполнить обмен Bluetooth с другим телефоном, и это изменит каждый профиль, чтобы сказать «доверенное лицо X подтверждает, что они встретили ненадежного человека Y». Поскольку для этого потребуется согласие обеих сторон, если одной стороне доверяют, то и другой, вероятно, тоже. Коммуникации ближнего действия гарантировали бы, что стороны встретились (и, возможно, удостоверились, что человек похож на их фотографию профиля).

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

person halfer    schedule 26.12.2011