Я бы не усложнял и сделал бы дополнительную проверку контрольной суммы в передаваемом хеше ключа.
- Не предавал бы ключ в открытом виде а шифровал бы его во что-то типа
key = md5(ключ + соль)
- Дальше бы генерил доп строку, на основе данных доступных обоим сторонам запроса, например:
check = md5(внешний ip)
- Дальше бы по спец алгоритму о котором знаю только я и оба софта, смешивал бы значение key и check. Например, первые 5 символов в check добавлял бы через букву в key. Для особой паранойи можно способ шифрования сделать от версии ПО или вообще предварительным запросом к серверу
- На серваке опять восстанавливал бы key и часть check, и сравнивал бы с сгенерированным check на сервере.
- Если check совпал, тогда бы сверял key со своей базой
Даже в случае перехвата, алгоритм подобрать будет сложно. А брутфорс на серваке можно отслеживать. Разумеется от дизассемблирования, это не спасет.. но тот кто может позволить себе понять алгоритм шифрования по исходникам ассемблера (т.е. разобраться как генерится check и что используется за соль), вряд ли не сможет просто вырубить запрос к серверу или ограничения...
-