2013-02-11 3 views
0

Я закодировал мобильный api с помощью Node.js, Redis & MongoDB. Однако прямо сейчас я ищу конкретный способ для обеспечения безопасности в нашей системе. Вопрос, который я вдохновил печально известный принцип Августа Керкхоффа;Mobile API Security Paradigm

«Это не должно быть обязательно быть секретным, и он должен быть в состоянии попасть в руки противника без неудобств»

После проверки этого принципа я сообразить, что не существует безопасного способа для защиты данных после того, как сниффер захватил весь пакет данных. Конечно, существуют альтернативные способы, как с помощью API ключ, используя алгоритмы шифрования как MD5 & MD6, Triple DES, SHA1 и т.д. Однако это также не будет работать, если весь пакет данных захватывается , И есть стандарты безопасности, такие как HTTPS, SSL-сертификаты. Однако, если кто-то с талантом захватывает пакет данных, он может действовать точно так же, как и проверенный пользователь в нашей системе.

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

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

+0

Что не так с HTTPS? При правильной проверке HTTPS нет среднего человека. –

ответ

1

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

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

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

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

Хеш, который был отправлен по каналу, можно обнюхать и использовать для аутентификации. Правда, но сервер может различать попытку подделать и фактическую попытку, используя соединение HTTPS. Сервер отслеживает сеансы HTTPS и будет просить повторить проверку, если произойдет что-то подобное. HTTPS блокирует использование обнюхиваемых данных/атаки MITM. Даже если сниффер получает хэш (временный билет), он не может делать ничего злонамеренного, имя пользователя и пароль не могут быть взломаны.

Благодаря Kerckhoff наши пароли безопасны.

Как реализовать его на node.js ?? ищите пакет passport.js. Он реализует текущий стандарт OpenAuth.