2013-04-06 2 views
2

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

+1

Сетевой экран + SSL? – 2013-04-06 20:03:56

+1

Не думайте, что у Arduino достаточно вычислительной мощности/памяти для запуска SSL на нем. Я уже использую экран ethernet, но – Mason

+1

USB serial + PC + SSL? – 2013-04-06 20:21:14

ответ

2

К сожалению, на Arduino нет действительно надежных коммуникационных возможностей. Основная проблема заключается в том, что библиотеки SSL не были перенесены на эту платформу, отчасти из-за того, что 8-битные процессоры, построенные платформой, не очень мощные. Сказав, что есть некоторые вещи, которые вы можете сделать, но вы должны будете сделать их сами:

Basic access authentication - очень небезопасный способ контроля доступа к страницам HTTP, поэтому он не рекомендуется. Digest access authentication, с другой стороны, использует одностороннюю криптографическую кодировку (хеширование). Для этого требуется только библиотека MD5, которая составляет actually available для Arduino. Что вам нужно сделать, так это изменить исходный код класса Web Server для поддержки аутентификации доступа к дайджесту: AFAIK не поддерживает его из коробки.

Если вам кажется сложным, вы можете реализовать что-то довольно основное (и не очень безопасное, но лучше, чем ничего). Это может выглядеть следующим образом:

  • Первый запрос GET приходит от клиента
  • Сервер отвечает «не уполномочен» ответ, встраивание в ответ маркер, который связан с (возможно, хэш) запрашивающий IP-адрес. Вы также можете сделать оригинальную временную часть хэша, и дать этим токенам ограниченную продолжительность жизни.
  • Если следующий запрос с одного и того же IP-адреса включает хэш на основе некоторого секретного кода + отправленный токен, выполняется следующий запрос.

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

0

Возможно, вы сможете просто использовать аутентифицированные сообщения, созданные на основе общих секретов. Сообщение будет содержать [как минимум] тип сообщения, тело сообщения, временную метку и дайджест сообщения. Вы создаете дайджест посредством HMACing другого материала с общим секретом. (Тип HMAC Arduino в Google для libaries и кода.) Сообщение отправляется через TCP или UDP (я предпочитаю его). Arduino вычисляет дайджест сообщения, проверяет его, проверяет данные и затем действует на сообщение.

Одна вещь, которую мне нравится делать, это реализовать портовое деление или что-то на сетевом уровне перед сервером приложений. Это предотвращает доступ нежелательного трафика к пользовательскому (и, возможно, уязвимому) серверу команд. Это можно сделать незаметно (см. «Тихий стук») или, очевидно. Сетевая защита также может быть реализована с помощью специального устройства, которое сильно поднимает и дисквалифицирует большое количество изгоев, прежде чем оно достигнет Arduino.

Смежные вопросы