У меня есть идея для моей системы входа в систему и проверки, но мне интересно, является ли это правильной идеей или она уже была реализована где-то еще.
Чтобы попытаться смягчить некоторые атаки, перед тем как идентификатор входа в систему хотел быпредложить вызов клиенту.Поэтому я думаю предложить вычислительную задачу для пользователя.Мне нужно как-то сгенерировать проблему или какой-то код, который может обработать среднее машинное X секунд.С ответом, который я мог бы быстро вычислить и проверить.
Например, я знаю, что алгоритмы хеширования / шифрования требуют времени, возможно, я мог бы использовать простой алгоритм шифрования и сгенерировать некоторый случайный короткий пароль и более длинныйдлина ключевого слова.Затем я шифрую ключевое слово паролем и отправляю его клиенту.
Затем клиент должен случайным образом угадать / проверить пароль, а когда он его получает, он отправляет мне ключ.
ПРИМЕР:
Password:Foo
Length: 3
Answer: Bar
Keyword:123456
Output: encrypted(answer+keyword)->o3jubo3ibf32ib3o
ОТПРАВИТЬ-> o3jubo3ibf32ib3o, Ответ: Бар.
Затем клиент обрабатывает это и пытается найти пароль, угадывая и проверяя, если первые 3 буквы =bar.
Когда он находит ответ, он возвращает мне ключевое слово и пароль для проверки.Я проверяю, совпадает ли ключевое слово, продолжаю ли я, если нет.Я пытаюсь расшифровать вызов с помощью пароля, который они использовали, чтобы увидеть, есть ли в нем первые 3 буквы, равные ответу.Если мне когда-нибудь дадут пароль, который не имеет первых 3 букв, равных паролю, - я помещаю в черный список IP-адрес на 5 минут или около того и разрываю соединение.
Похоже, это будет работать?
Была ли уже создана библиотека для этого?
Есть ли примеры в c ++, которые я могу посмотреть?
Какой метод шифрования будет лучшим для этого подхода?