SCRAMSCRAM (Salted Challenge Response Authentication Mechanism, RFC 5802 . Дата обращения: 27 декабря 2013. Архивировано 18 декабря 2013 года.) — механизм хранения данных и протокол аутентификации посредством пароля. SCRAM относится к механизмам SASL уровня, что делает возможным его использование вместе с некоторыми стандартными протоколами, использующими SASL: SMTP, LDAP, IMAP и POP. Также Scram является GSS-API механизмом. Поддерживает привязку канала и двухстороннюю аутентификацию. На момент написания статьи (январь 2013) является наиболее совершенным и многофункциональным. Предпосылки
В целом, все предпосылки отражают недостатки других механизмов аутентификации. Поэтому в июне 2010 был создан SCRAM, лишенный проблем других механизмов, и отвечающий запросам своего времени[3]. Общая схемаРассмотрим ниже описание полного, не использующего сжатие SASL SCRAM обмена аутентификационными данными. Для нижеследующего описания псевдокода алгоритма будут использованы следующие обозначения:
Hi(str, salt, i):
U1 := HMAC(str, salt + INT(1))
U2 := HMAC(str, U1)
…
Ui-1 := HMAC(str, Ui-2)
Ui := HMAC(str, Ui-1)
Hi := U1 XOR U2 XOR … XOR Ui
где « Перед началом процесса SCRAM-клиент имеет в своём распоряжении имя пользователя и пароль. Клиент посылает имя пользователя на сервер, который достаёт из базы данных сведения ( SaltedPassword := Hi(Normalize(password), salt, i)
ClientKey := HMAC(SaltedPassword, "Client Key")
StoredKey := H(ClientKey)
AuthMessage := client-first-message-bare + "," + server-first-message + "," + client-final-message-without-proof
ClientSignature := HMAC(StoredKey, AuthMessage)
ClientProof := ClientKey XOR ClientSignature
ServerKey := HMAC(SaltedPassword, "Server Key")
ServerSignature := HMAC(ServerKey, AuthMessage)
Сервер проверяет подлинность клиента путём вычисления Аналогично, клиент выполняет аутентификацию сервера путём вычисления ServerSignature и сравнением его со значением, которое отправил сервер. Если они равны, то это доказывает, что у сервера был доступ к
Таким образом SCRAM позволяет аутентифицировать пользователя на сервере по его имени и паролю, и позволяет аутентифицировать сервер для клиента, но при этом сервер оказывается неназванным[3]. Такая схема говорит о том, что секретом в данном случае являются:
Пример диалога между сервером «S» и клиент «C» в процессе аутентификации: C: n,,n=user,r=fyko+d2lbbFgONRv9qkxdawL S: r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,s=QSXCR+Q6sek8bf92, i=4096 C: c=biws,r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j, p=v0X8v3Bz2T0CJGbJQyF0X+HI4Ts= S: v=rmF9pqV8S7suAoZWja4dJRkFsKQ= Надёжность механизмаВ случаях когда SCRAM используют без дополнительного уровня безопасности, TLS например, то пассивный перехватчик может получить достаточное количество информации для организации полного перебора его пароля в офлайн режиме. Количество времени, необходимое для подбора пароля, зависит от используемой криптографической хеш-функции, сложности пароля. Внешний слой сетевой безопасности предотвращает эту атаку[3]. В сетях с TLS механизм привязки порта может быть использован для обнаружения атаки типа человек посередине. Тем не менее, у атакующего появится возможность для офлайн брутфорс атаки. В случае кражи аутентификационной информации из аутентификационной базы данных, с помощью брутфорс-атаки можно будет получить пароль пользователя. Используемая соль смягчает влияние этой атаки, вынуждая подбирать каждый пароль по отдельности[3]. Важным является тот факт, что эффективность любого механизма аутентификации на основе пароля будет сильно зависеть от соблюдения пользователем политики паролей. На практике SCRAM является одним из наиболее безопасных механизмов аутентификации на основе пароля[2]. Другие механизмы аутентификации
Преимущества SCRAM
Поскольку SCRAM создавался для того, чтобы исправить недостатки предшествующих ему механизмов, то описанные выше проблемы ему не присущи (его основным преимуществом является отсутствие недостатков). Стоит отметить, что SCRAM хоть и является в чистом виде SASL-механизмом, но в то же время он полностью соответствует требованиям к GSS-API механизму[3][2]. Аутентификация, не использующая парольОснованная на паролях схема безопасности опирается на общий секрет, который известен двум сторонам. Это влечёт за собой трудности в управлении настройками безопасности между многими частями системы. Это также создаёт проблему доставки секретной информации в разные точки. Для PKI, один закрытый ключ можно защитить очень надёжно, например, сохраняя его на смарт-карте, что даст дополнительный фактор аутентификации, а также обеспечения защиты. Строгая аутентификация на основе PKI является лучшим выбором для:
Аутентификация на основе пароля лучше, так как
ПримечанияЛитература
|