$Пользователь->Генерирование Приватного Ключа->запрос к сереверу на авторизацию
$Сервер->Запрос на публичный ключ пользователя из БД->генерирование рандомного числа -, генерирование Рандомного RSA ключ->шифрование публичным ключём пользователя (Случайнок число, публичный RSA ключ)->отправка данных;
$Пользователь->дешефровка данных Приватным ключём->извлечение публичного RSA ключа->извлечение рандомного ключа->шифрование рандомного числа публичным RSA ключём->отправка данных на сервер
$Сервер->дешефровка принятых данных->проверка на идентичность полученого числа из принятых данных и сгенерированным.
uXjrkGqe5WuS7zsTg6Z9DuS8cXLFz38ue+xrFzxrcQJCXtVccCoUFP2qH/AQ4qMvxxvqkSYBpRm1R5a4/NdQ5ei8sE8gfZEq7dlcR+gOSv3nnS4/CX1n5Z5m8bvFPF0lSZnYQ23xlyjXTaNacmV0IuZbqWd4j9LfdAKq5dvDaoE=
// так выглядит публичный ключ
"R8yqFn5/r/7mam+oaXd1BW4ErX53Q9AiT0xyZp6qiASCz7WjZKEcW0fWNZ2/tAq5vZ+UDXAsUo4P4BUPedoCNWPSGXsu2siiIPtkVALuXoPn40Z2PgjFjQVt2Or387T2sS299278cjHIMt1swIv6xsvuJ+Vp6DE0H483S+geJ2g=?rzu2yJBmDzesRq/tKF6uDBCnkTVsYy4mJ0db0s0dj81vi9miSKQmQ4STX8aTW66/4et2yF5Xclm76f/X0y9dUhZOYuOATL1hLXlO3YyW9XU="
// шифрованные данные с подписью
PHP только сравнит значение которое загадал и с тем какое разгадал пользователь и даёт доступ к сайту.