MD5 и любая другая хеш-функция описываются изначально не как string f(string),
а последовательностью вызовов:
state f_start()
state f_add_info(state,info1)
…
state f_add_info(state,infoN)
string f_finish(state)
Это их полное нормальное описание.
А эрзац string f(string) — это уже свертка описанного выше.
Используйте полный формат хеш-функции. Это решит все Ваши проблемы.
У Вашего сервиса есть НЕЧТО_1, что должно иметь возможность САМОСТОЯТЕЛЬНО без участия Вас и клиента аутентифицироваться на сайте. Если в Вашей модели нет НЕЧТО_2, которое не подвержены краже, то при краже происходит полный переход этого НЕЧТО_1 злоумышленнику и он полностью имперсонируется от имени Вас, т.е. по факту — от Вашего пользователя.
Чем может быть НЕЧТО_2?
— проверкой по IP-адресу Вашего сервера — как я понимаю, не подходит, т.к. у клиента должна остаться возможность аутентифиицироваться и мимо Вашего сервиса;
— нечто, что находится постоянно в оперативной памяти Вашего сервиса и не может быть украдено/перехвачено (сниффером) — тут уже надо думать, основные проблемы могут быть с рестартом Вашего сервиса — может для Вас будет приемлемым просыпаться в 3 часа ночи в случае рестарта сервиса и заново вводить пароль шифрования хранящихся на диске данных клиента;
— что-то еще — я не совсем понимаю Вашу специфику — может найдется и еще что-то.
Пока Ваша разработка будет находиться вне «официального» поля скорее всего ничего не будет («скорее всего» — поскольку есть 334 Указ Президента, который до сих пор никто не отменял, хотя нет мер воздействия по нему).
А как только Вы попытаетесь ее зарегистрировать, либо какое-либо юридическое лицо попытается использовать ее для защиты информации, охраняемой Законом, Вы попадете под действие Закона о лицензировании (Вы должны иметь лицензию ФСБ для разработки криптосредств для сторонних пользователей — для себя можно без лицензии по новой редакции ФЗ) и под действие ПКЗ-2005 (очень рекомендую ознакомиться).
Фантазия «саморегулируемости Хабра» рисует еще более жесткую модель:
— комментарии к снижению кармы обязателен
— все комментарии анонимны
— НО: рядом с каждым таким комментарием в интерфейсе есть кнопка «Увеличить/уменьшить карму этому хабраюзеру», так и не узнав кто был автором этого «минуса» на самом деле.
«Справочник по математике И.Н.Бронштейна и К.А.Семендяева выдержал множество изданий. Благодаря краткости изложения, полноте и удачному построению материала он прочно завоевал популярность не только в России, но и за рубежом.»
а последовательностью вызовов:
state f_start()
state f_add_info(state,info1)
…
state f_add_info(state,infoN)
string f_finish(state)
Это их полное нормальное описание.
А эрзац string f(string) — это уже свертка описанного выше.
Используйте полный формат хеш-функции. Это решит все Ваши проблемы.