La única computadora verdaderamente segura es aquella que está aislada de Internet, apagada, desenchufada, enterrada en un bunker de 100 pies bajo tierra, con guardias armados en la única entrada. Incluso entonces, lo revisaría de vez en cuando.
Hashing las contraseñas es parte de lo que se conoce como "seguridad en profundidad". Usted tiene razón en que, en un mundo ideal, no cometería ningún error que les daría a los atacantes acceso a esos datos, por lo que en teoría no importaría si fueran contraseñas o hashes de texto simple. En un mundo real, ocurren intrusiones, y es muy difícil predecir cómo y dónde ocurrirán. La idea de la seguridad en profundidad es hacer que, en teoría, incluso si un atacante compromete su sistema de alguna manera, haya realizado esfuerzos para mitigar el daño.
En el mundo real, existe una necesidad natural de acceder a los hashes de forma regular. Cada vez que un usuario inicia sesión, necesita la capacidad de acceder a ellos. En consecuencia, casi siempre son accesibles para cualquier aplicación que esté realizando la autenticación. Si alguien compromete su solicitud, es posible que puedan leer datos que no debían leer.
Las formas en que ocurren estos ataques son infinitas. Puede tener ataques de inyección SQL si no pudo desinfectar sus entradas. Podría tener una saturación del búfer, que le da al atacante la capacidad de ejecutar su propio código. Podría tener un error de permisos, haciendo que un archivo sea legible por personas cuando no debería haberlo hecho. ¡El atacante puede obtener una de sus cintas de copia de seguridad debido a un mal manejo por parte de su servicio de copia de seguridad!
Todos estos ataques le dan a un atacante un punto de apoyo en su computadora, pero no siempre resultan en una interrupción completa. Es posible que haya puesto chroot en su servidor SQL, de modo que el proceso del servidor SQL literalmente no pueda ver el resto del equipo. Sin embargo, en tales situaciones, la información de inicio de sesión que necesitan los usuarios debe estar al alcance del servidor SQL, o no tiene ningún valor. Por lo tanto, la información de inicio de sesión suele estar comprometida antes de que ocurran otros compromisos más infames.
Al codificar las contraseñas, disminuye su valor. Un hash no es útil para propósitos de inicio de sesión. Necesitan tener la contraseña que hash a ese valor. Pueden o no pueden pagar el costo de romper el hash. En el mejor de los mundos, nunca tuvo que preocuparse por esto en primer lugar, pero si se suscribe al enfoque de seguridad en profundidad, se asegura de que incluso una intrusión exitosa no comprometa todos sus datos.