То, что вы делаете, кажется достаточно вменяемым, за исключением того, что вы не проверяете параметры (что будет довольно большой проблемой).
Что-то, что очень похоже на ваш дизайн, и его было бы целесообразно скопировать, это Схема аутентификации запросов веб-сервисов Amazon
В частности, убедитесь, что ваша схема кодирования параметров однозначна и обратима; Amazon облажался в одной точке. Учитесь на своих ошибках. :)
Если говорить криптографически, то, что вы делаете, называется не подписью, а кодом проверки подлинности сообщения (MAC). MAC может быть создан и проверен любым, кто разделяет секретный ключ (термин «подпись» обычно зарезервирован для схем с открытым ключом, таких как DSA или RSA). MD5 (msg || K) является известным и достаточно разумным MAC; Я не уверен, что вы пропустили это случайно или преднамеренно, но метод, который на первый взгляд кажется эквивалентным, MD5 (K || msg), довольно небезопасен, потому что изворот в том, как MD5 (и большинство других хэшей) функции) означают, что если вы знаете H (m), вы можете легко вычислить H (m || m2) для любого m2 - поэтому, если вы используете MD5 (K || param1 = 5), кто-то может снять это с провода и затем создайте MD5 (K || param1 = 5, param2 = 666). (Возможно, это немного более технически, чем вам интересно, но это называется свойство расширения длины ).
Однако, хотя MD5 (K || msg), вероятно, «в порядке», вам лучше использовать что-то вроде HMAC, потому что оно фактически было разработано как MAC. У MD5 много проблем, но ничего не влияет напрямую на его использование в качестве MAC (пока - таким образом MD4 сломался). Поэтому для проверки на будущее (и проверки) используйте HMAC с SHA-1 или SHA-256. Даже если вы не хотите использовать криптографическую библиотеку, HMAC довольно прост, и для SHA-1 и SHA-2 доступны известные значения, поэтому вы можете проверить свой код .