Неправильный алгоритм аутентификации пользователя?
Запрос на мозговой штурм
Мне нужна идея для алгоритма аутентификации с некоторыми необычными требованиями.
Алгоритм будет использоваться для проверки достоверности сообщения отправителя.
Ограничения:
- "Транспортный уровень" - это электронная почта
- отправитель ( "Алиса" ) является человеком
- У Алисы есть доступ к веб-браузере и интернет-доступу (включая учетную запись веб-почты) в качестве ее инструментов; поэтому она не может делать очень сложные вычисления.
- Приемник ( "Боб" ) - это компьютер, не имеющий прямого доступа из Интернета.
- У Боба есть учетная запись электронной почты, которая периодически проверяется.
- Боб может отправить электронную почту.
- Не отправлять информацию третьему лицу: Алиса и Боб не могут отправлять информацию о внеполосности. Чтение некоторой общедоступной информации (например, времени с сервера времени) в порядке.
Предположение:
- Алиса может получить доступ к некоторой информации локально: может быть, она носит ноутбук, или мы даже можем предположить, что ее учетная запись электронной почты является взломанной, поэтому там может храниться конфиденциальная информация.
- Алиса и Боб могут обмениваться конфиденциальной информацией непосредственно за время до аутентификации (закрытые ключи?)
Non-цели:
- кодирование фактической полезной нагрузки сообщения не требуется.
- скорость/задержка не являются (большими) проблемами.
Некоторые идеи, которые помогут вам начать:
-
Обычный старый жесткий пароль.
Проблемы:
- Атака грубой силы (маловероятно)
- возможна перехват сообщений, если связь выполняется в виде открытого текста, а затем возможны повторные атаки.
-
Простой алгоритм, основанный на текущей дате/времени
Пример: Алиса добавляет текущую дату, час и минуту и отправляет результат в качестве токена аутентификации, который Боб может проверить. Предположим, что доступ только для чтения к серверу времени не нарушает правило № 7 (нет стороннего участника).
Проблемы:
- безопасность через неясность: алгоритм несколько безопасен только потому, что он не является общедоступным (ну, теперь это... oops!)
-
Какой-то механизм вызова-ответа - Алиса отправляет запрос на аутентификацию, Боб отвечает с вызовом, Алиса посылает ожидаемый ответ и фактическую полезную нагрузку.
Каковы детали механизма? Я не знаю:)
Что вы думаете? Я надеюсь увидеть некоторые творческие ответы; -)
Edit:
Может быть, пример сделает правило №3 более четким: допустим, что Алиса использует закрытое устройство с закрытым исходным кодом <cough>
iPhone <cough>
для доступа к Интернету, или она стоит перед общедоступным интернет-киоском.
Ответы
Ответ 1
Мое представление о человеко-дружественном низкотехнологичном инструменте "вызов-ответ":
- Боб меняет задачу каждый раз, когда получает правильное сообщение (например, он делает соленый хеш текущего времени)
- каждое неверное сообщение, отправленное Бобу, заставляет его ответить с текущим вызовом, поэтому Алиса может запросить его, отправив пустую почту
- как только Алиса знает вызов, она отправляется в https://www.pwdhash.com/
- в "Адрес сайта" она вводит текущий вызов
- в "Пароль сайта" она вводит свой личный пароль (который известен Бобу)
- PwdHash генерирует "хешированный пароль"
- Алиса пишет сообщение Бобу, используя хеш, только что созданный в качестве темы
- Боб получает сообщение, хеширует текущий вызов и пароль Алисы в соответствии с алгоритмом PwdHash и видит, соответствует ли его результат теме сообщения
- если это так, Боб принимает сообщение и отправляет подтверждение, содержащее новый вызов (по существу это шаг 1).
Преимущества:
- дешево и просто, может даже работать на разумно современных мобильных устройствах
- дружественный к человеку (нет математики, легко запоминается, предпосылки легко доступны в сети).
- Нет возможности повторной атаки
- нет четких текстовых паролей по кабелю
- не хватает паролей (например, одноразовые прокладки)
- нет встроенных временных ограничений (например, маркеры RSA)
- веб-сайт PwdHash может быть сохранен на диске и вызван локально, без зависимости от третьей стороны здесь.
Недостатки:
- Боб и Алиса должны предварительно поделиться ключом (пароль Алисы), поэтому Алиса не может изменить свой пароль за пределами сайта
- Компромиссный пароль Алисы - самый простой вектор атаки (но это касается почти всех защищенных паролем систем).
Обратите внимание, что PwdHash - это открытый алгоритм хэширования, Bob может легко реализовать его. Веб-сайт PwdHash работает без обратной связи, все зависит только от JavaScript на стороне клиента, никаких следов не осталось.
Ответ 2
Два варианта, о которых я могу думать:
- Выдать карточку с одноразовыми паролями (сообщение перед факсом, записная книжка)
- Электронное устройство, которое создает пинкоды (избегает повторных атак)
Ответ 3
В дополнение к Treb answer вы можете использовать одноразовые пароли, которые вы можете распечатать вместо SecurID. Подробнее см. " Perfect Paper Passwords".
Ответ 4
Я пропустил что-то очевидное, предложив простой общедоступный/закрытый ключ и подписав письмо?
В Firefox есть как минимум одно расширение, позволяющее GPG в веб-почте.
Ответ 5
Разработка lassevks answer:
В моей компании мы используем токены SecurID от RSA для удаленной аутентификации.
Это дает вам 6-значное число, которое каждые 60 секунд меняется как токен аутентификации, предположительно, ваш генератор токенов и сервер являются единственными в юниверсе, которые знают токен, который действителен прямо сейчас.
Как низкотехнологичная альтернатива, набор из n (10, 20, 100 - все, что разумно в вашем конкретном случае), однократные коды аутентификации могут быть предоставлены Алисе. Я бы попросил у нее конкретный код (например, номер 42 в списке). После использования этого кода он становится недействительным для дальнейшего использования.
Изменить: См. ответ lacop для хорошей реализации низкотехнологичного решения.
Ответ 6
Если Алиса может запускать код на своем компьютере (например, используя JavaScript, который находится на каком-то общедоступном сайте, например: http://www.functions-online.com/en/sha1.html), она может получить вызов, хешировать его вместе с паролем и отправить его обратно.
Ответ 7
Подумайте о создании веб-страницы, содержащей алгоритм как JavaScript, возможно, как загрузку (чтобы она могла скачать ее один раз и перенести на USB-накопитель).
Идея состоит в том, что она открывает страницу, проверяет исходный код (весь JavaScript должен быть встроенным), а затем вводит пароль в текстовое поле на странице. JavaScript переведет это в код по типу (так что нет сетевого трафика, пока она это делает, если есть, может быть, кейлоггер работает в фоновом режиме).
После того, как у нее есть код, она может ее где-то скопировать.
JavaScript может использовать текущее время как семя. Нарезайте текущее время на пятиминутные интервалы. Большую часть времени, используя текущее время, будет достаточно для декодирования пароля, и если вы приближаетесь к началу пятиминутного интервала, попробуйте с предыдущим.
См. этот сайт для примера: https://www.pwdhash.com/
Ответ 8
Если вы не собираетесь использовать PKI, что далеко и далеко лучшее решение, попробуйте использовать систему запроса-ответа, например CRAM-MD5 (хотя я бы предложил другой алгоритм дайджеста).
Ваши ограничения делают реализацию защищенной криптографической системы практически неосуществимой. Вы ничего не можете сделать, чтобы изменить транспорт?
Ответ 9
Вот еще одно предложение:
- Начните с обмена ключами Diffie-Hellman, в результате получив общий закрытый ключ, известный только предположительно - Алиса и Боб.
- У вас есть предопределенный пароль, известный только Алисой и Бобом.
- У Алисы зашифровать пароль с помощью общего ключа и отправить его Бобу
- Теперь Боб может видеть, что, по-видимому, Алиса действительно Алиса.
Проблемы:
- Диффи-Хеллман небезопасен, используя небольшие числа.
- Что будет простым симметричным алгоритмом шифрования (для шифрования пароля)?
Ответ 10
Самое простое решение - заставить Боб периодически отправлять письма в почтовую учетную запись Алисы. Когда ей нужно что-то от Боба, она должна ответить, используя одну из этих писем. Боб может поместить некоторые маркеры чека в почту (идентификатор почты или строку, которая должна быть повторена в теме или теле письма).
Как и многие из схем проверки электронной почты.
Недостаток: это только доказывает, что злоумышленник имеет доступ к почтовой учетной записи Алисы, а не то, что это на самом деле Алиса. Чтобы решить эту проблему, вы можете сказать Алисе пароль и использовать трюк "HTML HTML", чтобы она могла закодировать ключ от Боба, используя свой пароль.
Это докажет, что она имеет доступ к своей учетной записи электронной почты и что она знает пароль.
Ответ 11
Есть несколько методов, о которых я могу думать:
Установите зашифрованную службу https, похожую на:
http://webnet77.com/cgi-bin/helpers/blowfish.pl
или
http://cybermachine.awardspace.com/encryption.php/
Или вы можете отправлять одноразовые пароли в сочетании с XOR-шифрованием
Или вы можете написать простое Java-приложение (если Java может быть запущен на машине), который может быть загружен через www и обеспечивает шифрование с открытым ключом.
Ответ 12
Простым способом защиты данных в пути без обмена паролями является трехсторонний-XOR:
- Алиса создает несколько байтов, используя свой собственный ключ.
- Она хранит данные с этими байтами, чтобы сделать их нечитаемыми.
- Алиса отправляет зашифрованные данные в Bob
- Боб создает несколько байтов, используя свой собственный ключ.
- Он записывает данные с этими байтами.
- Боб отправляет данные с двойным зашифрованием в Alice
- Алиса снова применяет свой шаблон XOR. Теперь данные кодируются только с шаблоном Bob
- Алиса отправляет данные Бобу
- Боб теперь может декодировать данные своим собственным шаблоном
Ответ 13
Хм... это будет считаться парикой?
Настройте брата Боба - Чарли, который доступен из Интернета через HTTPS. Чтобы отправить сообщение Бобу Алисе, сначала нужно войти в Чарли (через простой старый пароль), а затем Чарли даст ей одноразовый токен. Затем она отправляет свой адрес электронной почты вместе с токеном Бобу.