0

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

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

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

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

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

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

ответ

1

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

Просто подумайте, если вы еще этого не сделали.

+0

Вы правы, я забыл об этом решении. Хотя я пытаюсь думать о менее сложном методе (не хочу создавать внешний сервер, который будет действовать как центр сертификации). Пока я сосредоточен на учетных записях Google, проверяя, являются ли они доступными в памяти телефонов программно и насколько это безопасно (вероятно, телефон не будет помнить учетную запись google, которая не была успешно завершена в прошлом, поэтому она должна быть отлично, пока я могу получить эту информацию в автономном режиме). – Miky

+1

См., Если это поможет: http://stackoverflow.com/questions/2245545/accessing-google-account-id-username-via-android. Также см. Здесь, как вызвать действие, которое побуждает пользователя создать новую учетную запись http : //stackoverflow.com/questions/3575303/programatically-starting-the-add-account-activity-in-android-2-2, это может быть удобно, если у пользователя нет учетной записи google, связанной с телефоном, и вашего приложение требует этого. –

1

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

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

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