He resuelto: este es el proceso que estoy siguiendo en caso de que alguien esté interesado.
Durante el registro inicial, el usuario ingresa un nombre de usuario y contraseña. Ambos están procesados, enviados a través de HTTPS al servidor.
El servidor DB guarda el hash de inicio de sesión del cliente y la salida a password_hash ($ pass, PASSWORD_BCRYPT, ["cost" = > 12]) a la db.
Más tarde, durante el proceso de inicio de sesión, el usuario ingresa el inicio de sesión y la contraseña. Ambos están procesados, enviados a través de HTTPS al servidor.
El cliente solicita al servidor que busque en la base de datos el loginhash, recupera la salida de password_hash.
si password_verify ($ clientpass, $ dbpass) devuelve true, entonces la contraseña es válida, en caso contrario, false / password inválida.
Esto funciona para mí.
¿Por qué tengo un hash entre el usuario y la contraseña en el cliente a pesar de que pasan por el cable como https? Debido a que las longitudes fijas son más rápidas de buscar en la base de datos (mysql preparo todas mis consultas para garantizar que no dependa de datos de clientes sucios). También porque aunque los datos se cifran, prefiero una larga secuencia de caracteres en lugar de una breve secuencia que podría contener un nombre de usuario / contraseña. En mi mundo, se siente mejor, aunque creo que por lo que leo no lo hago. No hay nada extra por el esfuerzo.