Proton Authenticator — это приложение для двухфакторной аутентификации (2FA) с открытым исходным кодом, которое генерирует одноразовые пароли на основе времени (TOTP) на вашем устройстве, позволяя вам получать доступ к онлайн-сервисам с дополнительным уровнем безопасности. Оно использует то же проверенное шифрование, которое защищает остальную часть экосистемы Proton. Proton Authenticator уникален тем, что был разработан с нуля, чтобы быть доступным почти на каждой платформе, сохраняя при этом вашу конфиденциальность и предоставляя вам полное право собственности на ваши данные.
В отличие от других приложений для аутентификации, Proton Authenticator защищает ваши данные с помощью сквозного шифрования, даже когда вы включаете синхронизацию устройств.
Это означает, что Proton Authenticator не позволяет никому, включая сам Proton, узнать, в каких онлайн-сервисах у вас есть аккаунты. Эта информация, как и ваши электронные письма или история браузера, может многое о вас рассказать, и ее защита важна для сохранения вашей конфиденциальности.
Сквозное шифрование Proton Authenticator гарантирует, что все криптографические операции, включая генерацию ключей и шифрование данных, выполняются локально на вашем устройстве. Это означает, что Proton не может получить доступ к вашим незашифрованным данным, и они не могут быть переданы каким-либо третьим лицам. Серверы Proton никогда не имеют доступа к вашим незашифрованным данным, включая пароль вашего Proton Account.
Модель шифрования
Proton Authenticator использует комплексный подход для обеспечения максимальной безопасности и конфиденциальности всех данных пользователя. Все криптографические операции происходят локально на вашем устройстве, и любые данные, передаваемые на сервер, всегда зашифрованы. Proton никогда не имеет доступа к ключам в простом тексте, необходимым для расшифровки данных пользователя, что делает невозможным для нас расшифровать сохраненные данные, даже если этого потребуют третьи лица.
Proton Authenticator использует то же передовое шифрование, которое мы используем для аутентификации в Proton Mail. Это включает использование усиленной версии протокола Secure Remote Password (SRP), который предлагает более надежные гарантии безопасности против атак «человек посередине» (MITM). Наша реализация означает, что даже злоумышленник, который может произвольно читать, изменять, задерживать, уничтожать, повторять или фабриковать сообщения между Proton и пользователем незаметным образом, ограничен проверкой только одной догадки пароля за попытку входа, что эквивалентно попытке войти напрямую. Таким образом, даже если Proton будет скомпрометирован и будет действовать злонамеренно, информация, эквивалентная паролю, никогда не будет раскрыта.
Узнайте больше о шифровании аутентификации Proton
Шифрование данных
Proton Authenticator позволяет вам безопасно хранить ваши коды 2FA, даже если у вас нет Proton Account. Это означает, что начальный процесс шифрования должен быть выполнен полностью на вашем локальном устройстве. Затем, если вы решите использовать свой Proton Account для синхронизации кодов между устройствами, мы можем использовать криптографические ключи, сохраненные на серверах Proton, для выполнения синхронизации.
Шифрование Proton начинается с того, что сервер Proton предоставляет зашифрованную версию корневого ключа, которую приложение для аутентификации использует для шифрования данных пользователя. У каждого пользователя Proton есть асимметричный ключ пользователя, и Proton шифрует этот ключ пользователя на вашем устройстве следующим образом:
- Аккаунты, использующие один пароль аккаунта: Proton шифрует ключ пользователя с помощью хеша bcrypt пароля аккаунта и соли аккаунта.
- Аккаунты, использующие нашу функцию нескольких паролей аккаунта: Proton шифрует ключ пользователя с помощью хеша bcrypt пароля ключа и соли аккаунта.
Proton Authenticator использует bcrypt и соль аккаунта для хеширования вашего пароля в качестве дополнительного уровня защиты от атак перебором. Даже если злоумышленник получит доступ к базе данных Proton, ключи вашего аккаунта будут в безопасности от атак перебором.
Как только вы включаете синхронизацию, Proton Authenticator генерирует 32-байтовый случайный ключ аутентификатора. Этот ключ зашифрован и подписан вашим ключом пользователя, гарантируя, что только вы можете его расшифровать — никто (даже Proton) не может прочитать или создать новый ключ аутентификатора. Как только вы получаете доступ к ключу аутентификатора, все записи в Proton Authenticator шифруются с использованием 256-битного AES-GCM.

Поскольку Proton Authenticator не требует наличия Proton Account, нам также нужна отдельная схема шифрования, которая безопасно хранит ваши данные, когда они существуют только на вашем устройстве. В конечном итоге, самый простой способ реализовать это — рассматривать Proton Account как отдельного поставщика ключей. В итоге это выглядит следующим образом:

Для локального хранения ключей на вашем устройстве мы полагаемся на безопасных поставщиков хранения ключей каждой системы:
- Android: Мы безопасно храним ключ в Android Keystore(новое окно), который затем используется для шифрования локального случайного ключа, который мы храним в защищенной файловой системе приложения. Этот ключ используется для симметричного шифрования всех записей Proton Authenticator на вашем устройстве.
- iOS/iPadOS/macOS: Мы генерируем локальный случайный ключ и храним его в службе Keychain(новое окно). Этот ключ используется для симметричного шифрования всех записей Proton Authenticator на вашем устройстве.
- Windows: Мы генерируем локальный случайный ключ и храним его в Windows Credential Manager(новое окно). Этот ключ используется для симметричного шифрования всех записей Proton Authenticator на вашем устройстве. Если подключение к WCM недоступно, мы позволяем пользователю зашифровать свой локальный случайный ключ паролем.
- Linux: Мы генерируем локальный случайный ключ и храним его в доступной службе DBUS Secret Service. Этот ключ используется для симметричного шифрования всех записей Proton Authenticator на вашем устройстве. Если служба DBUS Secret Service не настроена, мы позволяем пользователю зашифровать свой локальный случайный ключ паролем.
Шифрование резервной копии
Одной из главных сильных сторон Proton Authenticator является то, что вы всегда контролируете свои данные. Это включает возможность периодически создавать резервную копию ваших кодов на локальном устройстве и устанавливать пароль, который шифрует эти конфиденциальные данные.
Чтобы реализовать эту безопасную локальную резервную копию, мы используем предоставленный вами пароль для получения безопасного ключа шифрования с помощью Argon2 в качестве KDF (функции формирования ключа). KDF используется для генерации криптографических ключей из секретных входных данных, таких как введенные пользователем пароли, и его основная цель — повысить безопасность, усложняя и замедляя взлом паролей для злоумышленников. Используя этот ключ шифрования, сгенерированный из вашего пароля, мы сериализуем все ваши записи и шифруем их, чтобы гарантировать, что ваши данные остаются надежно зашифрованными, даже если произойдет утечка резервной копии. А благодаря использованию известных и открытых технологий, вы можете расшифровать свои данные, не используя Proton Authenticator, что позволяет вам сохранять контроль, даже если вы решите перейти на другое приложение для аутентификации.
Безопасность через прозрачность
Как и все сервисы Proton, Proton Authenticator имеет открытый исходный код. Любой может обратиться к нашему исходному коду, чтобы проверить нашу модель безопасности. Как и другие наши сервисы, Proton Authenticator также будет проходить регулярные независимые аудиты безопасности, и мы будем публично делиться отчетами об этих аудитах, как только они станут доступны.
Наконец, для заинтересованных исследователей безопасности Proton Authenticator доступен в рамках программы отлова ошибок Proton, которая предлагает вознаграждение до 100 000 $ за обнаружение ошибок в программном обеспечении Proton.


