bcrypt

bcrypt

bcrypt — адаптивная криптографическая хеш-функция используемая для защищенного хранения паролей. Разработчики: Niels Provos и David Mazières. Функция основана на шифре Blowfish, впервые представлена на USENIX в 1999 году.[1] Для защиты от атак с помощью радужных таблиц bcrypt использует соль (salt); кроме того функция является адаптивной, время ее работы легко настраивается и ее можно замедлить, чтобы усложнить атаку перебором.

Шифр Blowfish отличается от многих алгоритмов вычислительно сложной фазой подготовки ключей шифрования (англ.).

Provos и Mazières воспользовались этой особенностью, но изменили алгоритм подготовки ключей, получив шифр «Eksblowfish» (expensive key schedule Blowfish). Количество раундов в подготовке ключей должно быть степенью двойки; конкретная степень может задаваться при использовании bcrypt.

Изначально реализовано в функции crypt в OpenBSD. Существуют реализации для Java, Python, C#, Ruby, Perl, PHP 5.3 и некоторых других.

Содержание

Алгоритм

Алгоритм bcrypt использует алгоритм настройки ключей из «Eksblowfish»:

EksBlowfishSetup(cost, salt, key)
    state \gets InitState()
    state \gets ExpandKey(state, salt, key)
    repeat (2cost)
        state \gets ExpandKey(state, 0, key)
        state \gets ExpandKey(state, 0, salt)
    return state

Функция InitState соответствует оригинальной функции из шифра Blowfish; для заполнения массива P и S-box используется дробная часть числа \pi.

Функция ExpandKey:

ExpandKey(state, salt, key)
    for(n = 1..18)
        Pn \gets key[32(n-1)..32n-1] \oplus Pn //treat the key as cyclic
    ctext \gets Encrypt(salt[0..63])
    P1 \gets ctext[0..31]
    P2 \gets ctext[32..63]
    for(n = 2..9)
        ctext \gets Encrypt(ctext \oplus salt[64(n-1)..64n-1]) //encrypt using the current key schedule and treat the salt as cyclic
        P2n-1) \gets ctext[0..31]
        P2n \gets ctext[32..63]
    for(i = 1..4)
        for(n = 0..127)
            ctext \gets Encrypt(ctext \oplus salt[64(n-1)..64n-1]) //as above
            Si[2n] \gets ctext[0..31]
            Si[2n+1] \gets ctext[32..63]
    return state


Для вычисления хеша bcrypt обрабатывает входные данные эквивалентно шифрованию 'eksblowfish(усиленный_ключ, input)':

bcrypt(cost, salt, key, input)
    state \gets EksBlowfishSetup(cost, salt, key)
    ctext \gets input
    repeat (64)
        ctext \gets EncryptECB(state, ctext) // шифрование стандартным Blowfish в режиме ECB
    return Concatenate(cost, salt, ctext)

В различных ОС (linux, OpenBSD), использующих алгоритм bcrypt в стандартной функции crypt (3), в качестве input подается константа "OrpheanBeholderScryDoubt".[2]

Недостатки

bcrypt был разработан в 1999 году и был защищен от эффективного перебора на аппаратных средствах того времени. В настоящее время получили широкое распространение ПЛИС, в которых bcrypt реализуется эффективнее. В 2009 был создан алгоритм scrypt, требующий для своей работы значительный объем памяти (со случайным доступом), объем памяти настраивается.[3]

В сравнении с PBKDF2, алгоритм расширения ключа в bcrypt практически не исследовался криптографами[4]

См. также

Ссылки

Примечания

  1. Provos, Niels; Mazières, David (1999). «A Future-Adaptable Password Scheme». Proceedings of 1999 USENIX Annual Technical Conference: 81–92.
  2. www.openbsd.org/papers/bcrypt-paper.pdf
  3. http://www.unlimitednovelty.com/2012/03/dont-use-bcrypt.html "Not only does scrypt give you more theoretical safety than bcrypt per unit compute time, but it also allows you to configure the amount of space in memory needed to compute the result."
  4. http://www.unlimitednovelty.com/2012/03/dont-use-bcrypt.html "Unlike bcrypt, PBKDF2 has been the subject of intense research and still remains the best conservative choice."



Wikimedia Foundation. 2010.

Игры ⚽ Поможем решить контрольную работу

Полезное


Смотреть что такое "bcrypt" в других словарях:

  • bcrypt — ist eine kryptologische Hashfunktion, die speziell für das Hashing von Passwörtern entwickelt wurde. Hintergrund Um Benutzer einer Anwendung oder Website zu authentifizieren, wird in der Regel auf eine Kombination von Benutzername oder E Mail… …   Deutsch Wikipedia

  • Password cracking — is the process of recovering passwords from data that has been stored in or transmitted by a computer system. A common approach is to repeatedly try guesses for the password. The purpose of password cracking might be to help a user recover a… …   Wikipedia

  • Rainbow table — A rainbow table is a lookup table offering a time memory tradeoff used in recovering the plaintext password from a password hash generated by a hash function, often a cryptographic hash function. A common application is to make attacks against… …   Wikipedia

  • Радужная таблица — Схема упрощенной радужной таблицы с длиной цепочек равной трем. R1 R2 R3 функции редукции, H функция хеширования. Радужная таблица (англ. rainbow table)  специальный вариан …   Википедия

  • PBKDF2 — (Password Based Key Derivation Function) is a key derivation function that is part of RSA Laboratories Public Key Cryptography Standards (PKCS) series, specifically PKCS #5 v2.0, also published as Internet Engineering Task Force s RFC 2898. It… …   Wikipedia

  • Cryptographic API — The Cryptographic Application Programming Interface (also known variously as CryptoAPI, Microsoft Cryptography API, or simply CAPI) is an application programming interface included with Microsoft Windows operating systems that provides services… …   Wikipedia

  • OpenBSD security features — The OpenBSD operating system is noted for its security focus and for the development of a number of security features. Contents 1 API and build changes 2 Memory protection 3 Cryptography and randomization …   Wikipedia

  • BestCrypt — Infobox Software name = BestCrypt caption = author = developer = Jetico, Inc. released = latest release version = 8.05.3 latest release date = 2008 07 22 latest preview version = latest preview date = operating system = Windows Vista, Windows XP …   Wikipedia

  • Liste der Dateiendungen/B — In dieser Liste sind übliche Dateinamenserweiterungen aufgelistet, die in einigen Betriebssystemen (wie zum Beispiel Microsoft Windows) zur Unterscheidung von Dateiformaten verwendet werden. In anderen Betriebssystemen erfolgt die… …   Deutsch Wikipedia

  • Message-Digest Algorithm 5 — (MD5) ist eine weit verbreitete kryptographische Hashfunktion, die aus einer beliebigen Nachricht einen 128 Bit Hashwert (deutsch: Prüfsumme) erzeugt. MD5 wurde 1991 von Ronald L. Rivest entwickelt. Sie gilt inzwischen nicht mehr als sicher, da… …   Deutsch Wikipedia


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»