Насколько надежен этот хеш? Реально ли получить исходный пароль зная хеш? Возможно это в принципе?
Надёжность хэша зависит от алгоритма хэширования.
Я думаю это довольно надежная защита. Но как это реализовать?
Я тоже думаю, что это довольно надёжная защита
от брутфорса паролей, что в целом никак не говорит о защите во всём остальном. Как реализовать - самые простые варианты:
а) Записывает с какого IP была неудачная попытка входа с датой и временем события в БД (или любое другое хранилище, которые Вы используете), при попытке ввода пароля - проверяете, сколько неудачных попыток ввода с этого IP была за прошедшие N времени, если больше чем X - попытка ввода пароля блокируется
б) Аналогично пункту А, но проверяете не IP адрес, а логин, по которому пытаются залогинится
в) Сочетание пунктов А и Б
г) Масса других вариантов, коих просто прорва, включая применение гугл-капчи, систем распознавания ботов а так же различные сочетания методов защиты и всяческих извращений, в т.ч. выше описанные.
Реально ли получить исходный пароль зная хеш? Возможно это в принципе?
Сам по себе хэш - это не необратимый тип шифрования, если вопрос в этом. Иными словами, хэш-алгоритмы какой либо "расшифровки" не подразумевают априори. Но, реально существуют готовые таблицы хэшей для md5 (я думаю, что и для других алгоритмов хэширования они существуют тоже и то, что Вы уже догадались, что таблица представляет из себя исходные данные и результат их хэширования), с помощью которой в некоторой степени "расшифровать" md5 можно (ну если конечно не брать во внимание тот факт, что совершенно разные комбинации могут в итоге давать одинаковый хэш, т.к. кол-во комбинаций бесконечно, а кол-во вариаций хэша всё-таки имеет какое-то конечное значение).
Я подумал начать изучать криптографию, чтобы улучшить защиту и хранить не хеш пароля, а хеш шифра пароля.
Осталось дело за малым:
1. Изучить (Вам) криптографию на уровне достаточно для реализации поставленных задач, в т.ч. для написания собственных криптографических алгоритмов (методов шифрования), о которых говорилось тут:
Безусловно, нужно еще этот метод шифровки придумать, но это уже другой вопрос.
2. Решить задачу безопасного хранения приватного (закрытого) ключа, который обязательно понадобиться в данном случае
P.S. Судя по контексту Вашего вопроса, Вы пытаетесь создать какую-то "мега-защиту" в одном месте, упуская из внимания то, что защита формы для ввода пароля и этого механизма в целом (у нас же про это идёт речь?) - это ~1% от общей безопасности среднестатистической системы, и примеров тому - масса. Например, есть просто масса примеров того, когда у крупных почтовых провайдеров внезапно "утекала" база данных пользователей, в т.ч. с их паролями (хэшированными, разумеется) и связано это было не с брутфорсом (и ему подобными деяниями) явно, есть всякие там
Heartbleed, от которой "официально" пострадали очень крупные компании, за сетевой безопасностью в которых следили люди разбирающиеся в данном вопросе куда лучше, чем Вы, я и все остальные участники данного вопроса - вместе взятые... и т.д. [очень много разных примеров]. Вы же всерьёз не думаете, что цель любого хакера заключается в том, что бы подобрать или получить какой-то отдельно взятый пароль и (даже если его цель заключается именно в этом, внезапно), что этот самый хакер будет до потери пульса "биться лбом о стену" в попытках получить этот самый злополучный пароль путём брутфорса по форме авторизации или чем-то подобным и в результате неудачной попытки вся его "хакерская деятельность" на этом и остановится?