bcrypto / bias

Authentication frameworks
2 stars 0 forks source link

Уточнить процедуру шифрования секретов в требовании УА.3 #32

Closed mkazl closed 1 year ago

mkazl commented 2 years ago

Структурный элемент стандарта: раздел 6, п. 6.2.2

В требовании УА.3 один из методов защиты секрета аутентификации имеет следующее описание: «секрет хранится в зашифрованном виде. Расшифрование выполняется в процессе аутентификации». Из данного описания неясно, каким образом должно быть организовано шифрование, в частности, где должен храниться ключ шифрования.

Предлагается уточнить данное требование.

agievich commented 1 year ago

Предлагается упростить требования УА.2, УА.3 (нумерация изменена, см. #30):

Требование УА.2 (1, 2). Секреты аутентификации в составе аттестатов не должны храниться в открытом виде. Должны использоваться методы защиты из следующего списка:

  • вместо секрета хранится ключ, который строится по секрету с помощью алгоритма PBKDF2, определенного в СТБ 34.101.45, или схожего криптографического механизма. В PBKDF2 число итераций должно быть не меньше 10000, битовая длина синхропосылки -- не меньше 64;
  • методы защиты уровня 3.

Требование УА.3 (3). Секреты аутентификации в составе аттестатов не должны храниться в открытом виде. Для защиты секретов должны использоваться СКЗИ, удовлетворяющие требованиям СТБ 34.101.27 (уровни 2--4).

agievich commented 1 year ago

Подготовлена вставка в преамбулу пакета УА, фактически объясняющая фразу "схожие криптографические механизмы" в УА.2:

Для защиты секретов в составе аттестатов могут использоваться алгоритмы построения ключа. Такой алгоритм принимает на вход секретные данные, волатильную синхропосылку (часто называемую "солью") и коэффициент сложности. Алгоритм возвращает ключ, который сохраняется вместе с синхропосылкой и служебными данными. Первоначальный секрет не сохраняется, что затрудняет его определение при компрометации аттестата. Однако секрет можно проверить, выполнив алгоритм и сравнив результат его работы с ранее сохраненным. Коэффициент сложности регулирует время работы алгоритма построения ключа, возможно объем требуемой памяти. Синхропосылка и регулировка сложности защищают от атак, в которых противник определяет низкоэнтропийные секреты, перебирая возможные их варианты и проверяя каждый из них. Синхропосылка делает выходной ключ волатильным даже при повторении входного секрета, что препятствует упрощению перебора за счет предварительных вычислений. Увеличивая сложность алгоритма, можно сделать неприемлемо большими ресурсы, которые требуются для перебора. Алгоритм PBKDF2, определенный в СТБ 34.101.45, является примером алгоритма построения ключа. Сложность PBKDF2 определяется числом внутренних итераций.

Вставка не введена в действие. Мы не видим в ней большой необходимости.

agievich commented 1 year ago

Предлагается сделать требование УА.2 более универсальным:

Требование УА.2 (1, 2). Секреты аутентификации в составе аттестатов не должны храниться в открытом виде. Для защиты секретов должны использоваться СКЗИ, удовлетворяющие требованиям СТБ 34.101.27 (уровни 2--4). Статический пароль либо должен защищаться с помощью СКЗИ, либо вместо него должны храниться хэш-значение или ключ, полученные с помощью алгоритма контролируемо большой вычислительной сложности. В алгоритме должны использоваться синхропосылки, битовая длина которых не меньше 64. Если используется алгоритм PBKDF2, то число итераций в нем должно быть не меньше 10000.

Одновременно в преамбулу пакета УА предлагается добавить следующую вставку:

Аттестат с хэш-значением пароля классифицируется как секретный, потому что хэш-значение содержит информацию о пароле и дает возможность его определить через перебор. Для усложнения перебора используются два дополнительных механизма. Во-первых, вместе с паролем хэшируется волатильная синхропосылка, часто называемая "солью". Зависимость хэш-значений от синхропосылок препятствует упрощению перебора за счет предварительных вычислений. Во-вторых, алгоритм хэширования искусственно усложняется. Например, вместо одной выполняется несколько итераций хэширования, или в процессе хэширования используется память нерационально большого объема. Большая вычислительная сложность алгоритма хэширования навязывает высокую сложность перебора. В определенных случаях хэш-значения паролей могут использоваться как ключи, и тогда вместо алгоритмов хэширования речь идет об алгоритмах построения ключа. Алгоритм PBKDF2, определенный в СТБ 34.101.45, является примером алгоритма последнего типа. Сложность PBKDF2 определяется числом внутренних итераций, которое может регулироваться.