Что такое FIDO2 и Passkeys и почему они лучше
Изначально защита данных и доступа была только физической.
Типа дверь или сундук с замком. Ещё одновременно есть защита через тайну.
Это либо что-то спрятано так, что посторонние даже не знают о его существовании, либо это зашифровано.
Ещё, конечно, есть охрана — от вахтёров до сторожевых собак, капканов, сигнализаций и просто ситуации, когда вы стоите на страже.
Вот такие всем понятные методы защиты. Но потом появились компьютерные системы и удалённый доступ.
Теперь данные или деньги можно украсть так, что обворованный даже не узнает, что у него всё украли.
Но я упомянул всё это не ради истории, а чтобы было понятно, что современные парадигмы являются аналогами старых, всем понятных подходов.
Интересно их разобрать, потому что современная защита, как и попытки её обойти, сложнее, но не настолько, чтобы было совсем непонятно. Сейчас разберёмся.
Самый распространённый способ защиты — пароль. Просто пароль, и всё.
Иногда это называют пин-кодом или комбинацией, но суть одна — доступ ограничен, и чтобы его получить, надо ввести пароль.
Примерно как подобрать код на кодовом замке.
Часто пароль сочетают с именем пользователя. Это очень распространено и массово используется везде.
И всё бы ничего, но систем, где это нужно, очень много, и нам сложно создавать и, тем более, запоминать сложные пароли.
Как говорится, жизнь слишком коротка, чтобы безопасно отключать USB-устройства.
Кроме того, люди ленивые, рассеянные, зачастую невежественные и живут в вечной спешке.
Ну то есть приматы они и есть приматы.
Поэтому большая часть паролей слишком простая, одинаковая для разных систем, и ещё часто записана в легко доступных местах.
Но люди, ответственные за безопасность, или просто понимающие, что происходит, активно пытаются улучшить систему.
Много всего напридумывали.
1. Хранение паролей в зашифрованном виде
Система хранит пароли в виде хэшей.
Даже если злоумышленник взломает систему и получит доступ, он не сможет украсть пароли, потому что вместо них хранятся хэши.
Когда пользователь создаёт пароль, система с помощью специального алгоритма превращает его в хэш.
Из хэша нельзя восстановить пароль.
Когда пользователь вводит пароль при входе, система также превращает его в хэш и сравнивает с хранимым значением.
Казалось бы, очевидная и необходимая мера, но до сих пор её применяют не все.
2. Ограничения на тривиальные пароли
Пароль не должен быть пустым, слишком коротким или слишком простым.
Часто требуют, чтобы он содержал цифры, заглавные и строчные буквы, символы и т. д.
На первый взгляд, это неплохо, но на практике усложняет пользование.
Это лишь усугубляет проблему, когда один и тот же пароль используется везде, а ещё их забывают, теряют или записывают в очевидных местах.
Современные мошенники очень продвинуты, и заработки на украденных данных или взломах сравнимы с экономикой среднеразвитой страны.
Поэтому если где-то взломают систему, где пароли не хранились в защищённом виде или были перехвачены до хэширования, злоумышленники получат доступ ко всем другим системам жертвы.
Конечно, мошенники активно обмениваются такими данными.
3. Многофакторная аутентификация (MFA или 2FA)
Чтобы усложнить взлом, придумали многофакторную аутентификацию.
Суть в том, что для доступа к системе требуется нечто дополнительное помимо пароля.
Самый распространённый метод — код, присланный по SMS или email.
Это не самое надёжное, не самое удобное, и многих раздражает.
Даже в упрощённом виде, например с magic-link, эта система не идеальна.
4. Временные коды
Поэтому придумали временные коды.
При создании учётной записи или включении этой функции вам даётся специальный код, который используется для генерации новых кодов каждые 30 секунд.
Для этого применяются специальные программы — аутентификаторы.
Кстати, система довольно снисходительная. Когда код меняется, он действует ещё 30 секунд после (и даже до, если быть точным).
Поэтому если у вас осталось 5 секунд, не обязательно ждать следующий — этот тоже сработает.
Эта форма MFA считается вершиной безопасности.
Но её постоянно улучшают, в двух направлениях: повышают надёжность и упрощают использование.
Для большей надёжности стали использовать физические ключи, например USB-ключи.
Добавили биометрию — отпечатки пальцев, сканирование зрачка, распознавание лица и т. д.
Для дополнительной защиты в устройствах внедрили Secure Enclave — защищённый анклав, в котором хранятся пароли или биометрические данные.
Доступ к нему есть только у операционной системы.
5. Парные ключи (Public/Private Key)
Для важных систем, например серверов, используют ещё более надёжный метод — пару ключей.
Это отличная и надёжная система.
Для каждого аккаунта создаётся два ключа: публичный и приватный.
Приватный ключ — это файл, похожий на очень длинный пароль (например, 256 символов).
Вручную напечатать без ошибок его почти невозможно, поэтому передают сам файл.
Публичный ключ кладётся на сервер, а приватный хранится у вас.
Когда вы хотите войти, сервер запрашивает имя пользователя и соответствующий приватный ключ.
Специальный алгоритм проверяет, составляют ли они пару.
Если да — доступ разрешён.
Для дополнительной защиты приватный ключ можно зашифровать паролем (key passphrase), который запрашивается на вашем устройстве.
Этот метод надёжен, но сложен для массового применения, и пользователи могут начать использовать один и тот же ключ везде.
6. FIDO2 и Passkeys
Чтобы объединить всё лучшее и сделать систему удобной, разработали открытый стандарт FIDO2. FIDO расшифровывается как Fast IDentity Online.
По сути, это усовершенствованная система парных ключей — Passkey, но удобная и прозрачная в использовании.
Практически все крупные компании поддерживают этот стандарт.
При создании FIDO Passkey система генерирует пару ключей:
• Публичный ключ кладётся на сервер.
• Приватный (частный) ключ хранится на устройстве пользователя, но не просто так, а в менеджере паролей.
Доступ к нему заверяется биометрически.
Важно, что в системе (т.е. на сервере) не хранится ваша биометрия, а только подтверждение, что это вы её использовали, подтверждая что вы это именно вы.
Passkey может храниться в менеджере паролей и синхронизироваться между устройствами. Я например это делаю использую Enpass, другие популярные системы это 1Password, BitWarden или Apple Keychain.
При использования система попросит вас подтвердить свою личность — например, через FaceID на iPhone или TouchID на Mac, Windows Hello итп.
Эта система удобнее и безопаснее. Теперь не нужно беспокоиться о хэшировании паролей на сервере — там хранится только публичный ключ, а он не является секретом. Также пользователи не смогут выбрать слишком простой пароль или использовать один и тот же везде — алгоритм этого просто не позволит.
Типа дверь или сундук с замком. Ещё одновременно есть защита через тайну.
Это либо что-то спрятано так, что посторонние даже не знают о его существовании, либо это зашифровано.
Ещё, конечно, есть охрана — от вахтёров до сторожевых собак, капканов, сигнализаций и просто ситуации, когда вы стоите на страже.
Вот такие всем понятные методы защиты. Но потом появились компьютерные системы и удалённый доступ.
Теперь данные или деньги можно украсть так, что обворованный даже не узнает, что у него всё украли.
Но я упомянул всё это не ради истории, а чтобы было понятно, что современные парадигмы являются аналогами старых, всем понятных подходов.
Интересно их разобрать, потому что современная защита, как и попытки её обойти, сложнее, но не настолько, чтобы было совсем непонятно. Сейчас разберёмся.
Самый распространённый способ защиты — пароль. Просто пароль, и всё.
Иногда это называют пин-кодом или комбинацией, но суть одна — доступ ограничен, и чтобы его получить, надо ввести пароль.
Примерно как подобрать код на кодовом замке.
Часто пароль сочетают с именем пользователя. Это очень распространено и массово используется везде.
И всё бы ничего, но систем, где это нужно, очень много, и нам сложно создавать и, тем более, запоминать сложные пароли.
Как говорится, жизнь слишком коротка, чтобы безопасно отключать USB-устройства.
Кроме того, люди ленивые, рассеянные, зачастую невежественные и живут в вечной спешке.
Ну то есть приматы они и есть приматы.
Поэтому большая часть паролей слишком простая, одинаковая для разных систем, и ещё часто записана в легко доступных местах.
Но люди, ответственные за безопасность, или просто понимающие, что происходит, активно пытаются улучшить систему.
Много всего напридумывали.
1. Хранение паролей в зашифрованном виде
Система хранит пароли в виде хэшей.
Даже если злоумышленник взломает систему и получит доступ, он не сможет украсть пароли, потому что вместо них хранятся хэши.
Когда пользователь создаёт пароль, система с помощью специального алгоритма превращает его в хэш.
Из хэша нельзя восстановить пароль.
Когда пользователь вводит пароль при входе, система также превращает его в хэш и сравнивает с хранимым значением.
Казалось бы, очевидная и необходимая мера, но до сих пор её применяют не все.
2. Ограничения на тривиальные пароли
Пароль не должен быть пустым, слишком коротким или слишком простым.
Часто требуют, чтобы он содержал цифры, заглавные и строчные буквы, символы и т. д.
На первый взгляд, это неплохо, но на практике усложняет пользование.
Это лишь усугубляет проблему, когда один и тот же пароль используется везде, а ещё их забывают, теряют или записывают в очевидных местах.
Современные мошенники очень продвинуты, и заработки на украденных данных или взломах сравнимы с экономикой среднеразвитой страны.
Поэтому если где-то взломают систему, где пароли не хранились в защищённом виде или были перехвачены до хэширования, злоумышленники получат доступ ко всем другим системам жертвы.
Конечно, мошенники активно обмениваются такими данными.
3. Многофакторная аутентификация (MFA или 2FA)
Чтобы усложнить взлом, придумали многофакторную аутентификацию.
Суть в том, что для доступа к системе требуется нечто дополнительное помимо пароля.
Самый распространённый метод — код, присланный по SMS или email.
Это не самое надёжное, не самое удобное, и многих раздражает.
Даже в упрощённом виде, например с magic-link, эта система не идеальна.
4. Временные коды
Поэтому придумали временные коды.
При создании учётной записи или включении этой функции вам даётся специальный код, который используется для генерации новых кодов каждые 30 секунд.
Для этого применяются специальные программы — аутентификаторы.
Кстати, система довольно снисходительная. Когда код меняется, он действует ещё 30 секунд после (и даже до, если быть точным).
Поэтому если у вас осталось 5 секунд, не обязательно ждать следующий — этот тоже сработает.
Эта форма MFA считается вершиной безопасности.
Но её постоянно улучшают, в двух направлениях: повышают надёжность и упрощают использование.
Для большей надёжности стали использовать физические ключи, например USB-ключи.
Добавили биометрию — отпечатки пальцев, сканирование зрачка, распознавание лица и т. д.
Для дополнительной защиты в устройствах внедрили Secure Enclave — защищённый анклав, в котором хранятся пароли или биометрические данные.
Доступ к нему есть только у операционной системы.
5. Парные ключи (Public/Private Key)
Для важных систем, например серверов, используют ещё более надёжный метод — пару ключей.
Это отличная и надёжная система.
Для каждого аккаунта создаётся два ключа: публичный и приватный.
Приватный ключ — это файл, похожий на очень длинный пароль (например, 256 символов).
Вручную напечатать без ошибок его почти невозможно, поэтому передают сам файл.
Публичный ключ кладётся на сервер, а приватный хранится у вас.
Когда вы хотите войти, сервер запрашивает имя пользователя и соответствующий приватный ключ.
Специальный алгоритм проверяет, составляют ли они пару.
Если да — доступ разрешён.
Для дополнительной защиты приватный ключ можно зашифровать паролем (key passphrase), который запрашивается на вашем устройстве.
Этот метод надёжен, но сложен для массового применения, и пользователи могут начать использовать один и тот же ключ везде.
6. FIDO2 и Passkeys
Чтобы объединить всё лучшее и сделать систему удобной, разработали открытый стандарт FIDO2. FIDO расшифровывается как Fast IDentity Online.
По сути, это усовершенствованная система парных ключей — Passkey, но удобная и прозрачная в использовании.
Практически все крупные компании поддерживают этот стандарт.
При создании FIDO Passkey система генерирует пару ключей:
• Публичный ключ кладётся на сервер.
• Приватный (частный) ключ хранится на устройстве пользователя, но не просто так, а в менеджере паролей.
Доступ к нему заверяется биометрически.
Важно, что в системе (т.е. на сервере) не хранится ваша биометрия, а только подтверждение, что это вы её использовали, подтверждая что вы это именно вы.
Passkey может храниться в менеджере паролей и синхронизироваться между устройствами. Я например это делаю использую Enpass, другие популярные системы это 1Password, BitWarden или Apple Keychain.
При использования система попросит вас подтвердить свою личность — например, через FaceID на iPhone или TouchID на Mac, Windows Hello итп.
Эта система удобнее и безопаснее. Теперь не нужно беспокоиться о хэшировании паролей на сервере — там хранится только публичный ключ, а он не является секретом. Также пользователи не смогут выбрать слишком простой пароль или использовать один и тот же везде — алгоритм этого просто не позволит.