Наиболее популярный способ аутентификации, стойкий к прослушиванию передаваемых данных - challenge-handshake :
1) сервер формирует случайное неповторяющееся число/строку достаточной длины "nonce" и направляет его клиенту перед каждым очередным запросом;
2) клиент выполняет SHA-1(key||nonce||key) и отправляет результат или его часть серверу вместе с запросом, где key - секретный ключ (стойкость системы будет зависеть от того, насколько "хорошо" Вы его спрячете в клиенте);
3) сервер, получив запрос, повторяет вычисление SHA-1(key||nonce||key) с экземпляром key, хранящимся у него на сервере, и если полученный результат совпадает с присланным клиентом - отвечает данными.
Есть множество модификаций:
а) Вы можете вместо nonce использовать строку текущего времени с определенными округлениями и уловками;
б) если параметры запроса достаточно уникальны, то Вы можете банально использовать их самих вместо (вернее сказать, в качестве - ) nonce.
В обоих этих случаях исчезает первый шаг из описанных выше - а это очень удобно.