The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Доступен crypt_blowfish 1.1 с устранением уязвимости, упрощающей подбор некоторых паролей

22.06.2011 13:52

В библиотеке crypt_blowfish 1.1, используемой для хэширования паролей в таких дистрибутивах, как ALT Linux, Owl и SUSE, а также для генерации хэшей в PHP 5.3.0+, исправлена ошибка, присутствовавшая в коде на протяжении 13 лет и заметно снижавшая стойкость паролей, содержащих восьмибитовые символы. Проблема была выявлена в процессе тестирования эффективности John the Ripper - разработчики тестового комплекта обратили внимание, что для генерируемого с одними и теми же параметрами пароля, хэш функция отличается для реализаций bcrypt в OpenBSD и библиотеке crypt_blowfish.

Проблема проявляется в crypt_blowfish при использовании в тексте пароля восьмибитовых символов, например, русских букв. Примерно 30% паролей, содержащих один восьмибитовый символ теряют при генерации хэша от одного до трех предыдущих символов исходного пароля. Например, если используется пароль из 11 символов, среди которых один символ с установленным восьмым битом, то результирующий хэш может быть построен на основании только 8 символов. Чем больше восьмибитовых символов используется в пароле, тем больше вероятность снижения стойкости хэша. Проблема безопасности проявляется только для паролей нечетной длины и паролей длиной от 20 символов (в том числе для четных длин).

На практике пароли, содержащие не ASCII символы, встречаются довольно редко, а те, что используются, как правило имеют большую длину или усложнены. Что частично компенсирует возможный ущерб от наличия данной ошибки и отчасти объясняет то, что проблема оставалась незамеченной более 10 лет. При установке crypt_blowfish 1.1 следует иметь в виду, что ранее созданные некорректные хэши после обновления перестанут совпадать проверяемыми корректными хэшами, что потребует от некоторых пользователей изменения пароля для продолжения работы. В качестве запасного варианта предусмотрена возможность замены стандартного префикса хэша "$2a$" на "$2x$", при сверке которого будет использован старый метод генерации хэша.

Помимо исправления ошибки в crypt_blowfish 1.1 добавлен код быстрого само-тестирования функции хэширования при каждом вызове, в том числе на 8-битных символах. Затраты на такое тестирование - около 0.6% при типичных настройках ("$2a$08").

  1. Главная ссылка к новости (http://www.openwall.com/lists/...)
Лицензия: CC-BY
Тип: Проблемы безопасности
Короткая ссылка: https://opennet.ru/30953-blowfish
Ключевые слова: blowfish, hash, password, crypt
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (8) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, anon8 (ok), 14:57, 22/06/2011 [ответить]  
  • +2 +/
    Нечего пароли из русских букв составлять.
     
     
  • 2.2, Аноним (-), 15:30, 22/06/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А из китайских можно?
     
     
  • 3.3, Michael Shigorin (ok), 16:46, 22/06/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Восьмибитных.
     
     
  • 4.4, Anonymouse (?), 18:06, 22/06/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Всё таки OpenBSD - рулез!

    PS: Не во всём конечно, но всё же :)

     
     
  • 5.5, анон (?), 18:11, 22/06/2011 [^] [^^] [^^^] [ответить]  
  • +/
    При чём тут опенбсд?
    Это весьма типичная ошибка. Проблема собственно в том, что если двоичное число 1111 1111 считать имеющее знак (signed char), то при расширении его до 16 бит это будет число 1111 1111 1111 1111, а если без знака (unsigned char), то 0000 0000 1111 1111. В этом и ошибка по теме.
     
     
  • 6.8, Аноним (-), 05:47, 23/06/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >При чём тут опенбсд?
    >>"хэш функция отличается для реализаций bcrypt в OpenBSD и библиотеке crypt_blowfish."

    Переводил правда какой то деревянный - вот оригинал от самого Solar Designer'a":
    "The impact of this bug was that most (but not all) passwords containing non-ASCII characters with the 8th bit set were hashed incorrectly, resulting in password hashes incompatible with those of OpenBSD's original implementation of bcrypt."

    Как ты видишь этой "весьма типичной ошибки" в опенке нет.

     
     
  • 7.9, Аноним (-), 07:37, 23/06/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >>При чём тут опенбсд?
    >>>"хэш функция отличается для реализаций bcrypt в OpenBSD и библиотеке crypt_blowfish."
    > Переводил правда какой то деревянный

    Не переводил деревянный, а квотил деревянный, там фраза совсем из другого контекста и как раз о том, что результат выполнения bcrypt в OpenBSD и crypt_blowfish не совпадает:

    "Проблема была выявлена в процессе тестирования эффективности John the Ripper - разработчики  тестового комплекта обратили внимание, что для генерируемого с одними и теми же параметрами пароля, хэш функция отличается для реализаций bcrypt в OpenBSD и библиотеке crypt_blowfish."

     

  • 1.10, solardiz (ok), 01:02, 25/06/2011 [ответить]  
  • +/
    Во-первых, хочу еще раз извиниться за эту нелепую ошибку и за то что мы ее не обнаружили раньше.

    Во-вторых, я вносил некоторые правки в текст новости уже после ее публикации, т.к. последствия проблемы все еще исследовались. Вот как именно она проявляется для русских слов в koi8-r и utf-8 (очень по-разному): http://www.openwall.com/lists/oss-security/2011/06/24/1 (в текст новости эта ссылка тоже добавлена, но думаю ее мало кто заметил).

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2020 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру