Действительно ли winapi bcrypt.h поддерживает хэширование bcrypt?

Это может показаться странным вопросом, и мне кажется немного странным, что я действительно должен это задавать, но, проведя пару часов, просматривая документацию MSDN для подпрограмм bcrypt, добавленных в Vista, почти достигли вывода о том, что фактической поддержки bcrypt нет!

Согласно Википедии:

bcrypt - это адаптивная криптографическая хеш-функция для паролей... на основе шифрования Blowfish... Помимо включения соль для защиты от приступов радужного стола, bcrypt является адаптивным хеш: со временем его можно сделать медленнее и медленнее, чтобы он оставался устойчивые к конкретным атакам поиска грубой силы против хэша и соль.

Однако из документации по MSDN библиотека "bcrypt", по-видимому, фактически является общим интерфейсом для шифрования и хэширования. Вы должны получить дескриптор "поставщика алгоритма" через функцию

Я что-то упускаю? Я читаю это неправильно? Или библиотека Windows "bcrypt" фактически не поддерживает bcrypt?

Ответ 1

В контексте MSDN BCrypt представляет собой короткую форму "BestCrypt", но PR-имя для нее:

API криптографии: следующее поколение (Cng)

Он реализован в bcrypt.dll.

BestCrypt/BCrypt/Cng является преемником более старого CryptoAPI.

Microsoft медленно удаляет ссылки на "BestCrypt" со своего сайта, но вы все еще можете видеть это на некоторых страницах, например:

SHA256Cng Класс

Этот алгоритм предназначен только для хэширования и не обеспечивает никакого шифрования или дешифрования. Он использует слой CNPR (BestCrypt) CNG.

Интересно (мне все равно), что платформа .NET обычно может предоставить вам три реализации для каждого типа криптографического алгоритма. Например, для хэширования SHA2 существует:

  • SHA256Managed: реализация, написанная исключительно в управляемом коде
  • SHA256CryptoServiceProvider: оболочка вокруг реализации реализации Cryptographic Service Provider (CSP)
  • SHA256Cng: оболочка вокруг реализации Cryptography Next Gen (Cng)

Краткая версия

Нет, bcrypt не подходит для bestcrypt. И нет, он не поддерживает хэширование паролей bcrypt (blowfish crypt).

Ответ 2

API BCrypt являются универсальными и поддерживают различные криптографические алгоритмы хеширования, но bcrypt не является одним из них. Префикс B - это просто способ отличить старые API от следующего поколения.