CRAM-MD5
В криптографии (CRAM) , CRAM-MD5 представляет собой механизм аутентификации запрос-ответ основанный на алгоритме HMAC-MD5 . Как один из механизмов, поддерживаемых простым уровнем аутентификации и безопасности (SASL), он часто используется в программном обеспечении электронной почты как часть аутентификации SMTP и для аутентификации пользователей POP и IMAP , а также в приложениях, реализующих LDAP , XMPP , BEEP. и другие протоколы.
Когда такое программное обеспечение требует аутентификации по незашифрованным соединениям, CRAM-MD5 предпочтительнее механизмов, которые передают пароли «в открытом виде», таких как LOGIN
и PLAIN
. Однако он не может предотвратить получение пароля путем грубой атаки , поэтому он менее эффективен, чем альтернативные механизмы, которые избегают паролей или используют соединения, зашифрованные с помощью Transport Layer Security (TLS).
Протокол
[ редактировать ]Протокол CRAM-MD5 включает один цикл запроса и ответа и инициируется сервером:
- Задача: сервер отправляет Base64 клиенту строку в кодировке . До кодирования это может быть любая случайная строка, но стандарт, определяющий в настоящее время CRAM-MD5, гласит, что она имеет формат
Message-ID
значение заголовка электронного письма (включая угловые скобки ) и включает произвольную строку случайных цифр, временную метку сервера и полное доменное имя . - Ответ: Клиент отвечает строкой, созданной следующим образом.
- Задача декодируется в формате Base64.
- Декодированный запрос хешируется с использованием HMAC-MD5 с общим секретом (обычно паролем пользователя или его хешем) в качестве секретного ключа.
- Хешированный запрос преобразуется в строку шестнадцатеричных цифр нижнего регистра.
- Имя пользователя и пробел добавляются к шестнадцатеричным цифрам.
- Затем объединение кодируется в формате Base64 и отправляется на сервер.
- Сравнение: Сервер использует тот же метод для вычисления ожидаемого ответа. Если данный ответ и ожидаемый ответ совпадают, аутентификация прошла успешно.
Сильные стороны
[ редактировать ]Односторонний хэш и новый случайный вызов обеспечивают три типа безопасности:
- Другие не могут дублировать хэш, не зная пароля. Это обеспечивает аутентификацию.
- Другие не могут воспроизвести хэш — это зависит от непредсказуемости задачи. Это по-разному называется свежестью или предотвращением повторов .
- Наблюдатели не запоминают пароль; это называется секретность.
Слабые стороны
[ редактировать ]- Нет взаимной аутентификации : клиент не проверяет сервер. Однако аутентификация SASL обычно выполняется через соединение TLS , которое проверяет подлинность сервера.
- Слабое хранение паролей: некоторые реализации требуют доступа к открытым текстовым паролям пользователей, в то время как другие (например, Dovecot ) используют промежуточный этап процесса HMAC для хранения MD5 -хеша пароля (строго говоря, о внутренних переменных HMAC i_key_pad и o_key_pad). . [1] [2] В таких реализациях для вычисления md5(something_with_64_bytes || Something_else) необходимо знать только md5_internal(something_with_64_bytes) и Something_else (из-за использования Меркла-Дамгорда в MD5; md5_internal — это md5 без последнего блока). Поскольку i_key_pad и o_key_pad находятся в начале внутреннего и внешнего хеша HMAC и имеют длину 64 байта, этот факт можно использовать.
- Угроза обратимости: автономная атака по словарю для восстановления пароля возможна после перехвата успешного обмена протоколом CRAM-MD5 (например, с использованием Cain & Abel ). Эта угроза неизбежна в любой схеме хеширования паролей, но более современные алгоритмы используют растяжение ключей для увеличения стоимости атаки в тысячу и более раз. И наоборот, дайджесты CRAM-MD5 могут быть рассчитаны с использованием очень небольшого количества вычислительных ресурсов на выделенном оборудовании или даже на стандартных процессорах .
- Возможность прокси: в отличие от схемы соглашения о ключах с аутентификацией паролем (PAKE), CRAM-MD5 не устанавливает секрет, общий для двух конечных точек, но неизвестный перехватчику. Таким образом, активный человек посередине может открыть соединение с сервером, принять вызов, предложить этот вызов клиенту, получить ответ клиента и переслать этот ответ на сервер. Теперь он может отбрасывать дальнейшие сообщения клиента, одновременно выдавая себя за клиента на сервере.
Стандарты
[ редактировать ]CRAM-MD5 определяется документом RFC 2195, отслеживающим стандарты IETF , который заменяет RFC 2095, вышедший ранее в 1997 году. Эти де-факто стандарты определяют CRAM-MD5 как метод аутентификации для протоколов управления почтовыми ящиками электронной почты POP и IMAP .
CRAM-MD5 — это один из методов аутентификации, поддерживаемых простым уровнем аутентификации и безопасности (SASL), определенным в 2006 году в RFC 4422, который заменяет стандарт RFC 2222 1997 года.
Управление по присвоению номеров Интернета (IANA) ведет реестр механизмов SASL. [3] включая CRAM-MD5, для ограниченного использования.
CRAM-MD5 необходим для ретрансляции почты по требованию (ODMR), определенной в RFC 2645.
Устаревший
[ редактировать ]20 ноября 2008 года было рекомендовано объявить стандарт устаревшим. В качестве альтернативы вместо него рекомендуется, например, SCRAM или SASL Plain, защищенный TLS . [4]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «функция проверки_кредитных данных» . Исходный код Dovecot 2.0 . Проверено 23 января 2014 г.
- ^ «файл hmac-md5.c» . Исходный код Dovecot 2.0 . Проверено 23 января 2014 г.
- ^ «Простые механизмы аутентификации и безопасности (SASL)» . Реестры протоколов . ИАНА .
- ^ Зейленга < [email protected] >, Курт. «CRAM-MD5 в исторический» . www.tools.ietf.org . Проверено 5 декабря 2020 г.