Сервер должен сгенерировать небольшой (например, 16 байт), но уникальный (никогда не повторяющийся) текст, а клиент его подписать. После этого сервер проверяет, тот ли самый текст подписал клиент, и если текст верный и подпись верна, то клиент аутентифицирован. Чтобы гарантировать уникальность текста обычно в него включают текущие дату/время с высокой точностью, например, до миллисекунд по часовому поясу, не имеющему летнего времени, например, UTC (чтобы избежать риска повтора в час перевода стрелок назад).
P.S. Рекомендую: Menezes, et al. Handbook of applied cryptography,
10.3.3, раздел (ii)