Proton Authenticator는 기기에서 시간 기반 일회용 비밀번호(TOTP) 코드를 생성하여 추가적인 보안 계층으로 온라인 서비스에 접근할 수 있게 해주는 오픈 소스 2단계 인증(2FA) 앱입니다. Proton의 나머지 생태계를 보호하는 것과 동일한 검증된 암호화를 사용합니다. Proton Authenticator는 처음부터 거의 모든 플랫폼에서 사용할 수 있으면서 개인정보를 보호하고 데이터에 대한 완전한 소유권을 제공하도록 설계되었다는 점에서 독특합니다.

다른 인증 앱과 달리 Proton Authenticator는 기기 동기화를 활성화한 경우에도 종단 간 암호화로 데이터를 보호합니다.

즉, Proton Authenticator는 Proton을 포함한 누구도 귀하가 어떤 온라인 서비스에 계정을 가지고 있는지 알 수 없게 합니다. 이 정보는 이메일이나 인터넷 사용 기록과 마찬가지로 귀하에 대해 많은 것을 드러낼 수 있으며, 이를 보호하는 것은 개인정보 유지에 필수적입니다.

Proton Authenticator의 종단 간 암호화는 키 생성 및 데이터 암호화를 포함한 모든 암호화 작업이 기기에서 로컬로 수행됨을 보장합니다. 즉, 암호화되지 않은 데이터는 Proton이 접근하거나 제3자와 공유할 수 없습니다. Proton 서버는 귀하의 Proton Account 비밀번호를 포함하여 암호화되지 않은 데이터에 절대 접근할 수 없습니다.

암호화 모델

Proton Authenticator는 모든 사용자 데이터에 대해 최대의 보안과 개인정보 보호를 보장하기 위해 포괄적인 접근 방식을 취합니다. 모든 암호화 작업은 기기에서 로컬로 발생하며 서버로 전송되는 모든 데이터는 항상 암호화됩니다. Proton은 사용자 데이터를 복호화하는 데 필요한 평문(plaintext) 키에 절대 접근할 수 없으므로 제3자가 요청하더라도 저장된 데이터를 복호화하는 것은 불가능합니다.

Proton Authenticator는 Proton Mail 인증에 사용하는 것과 동일한 고급 암호화를 사용합니다. 여기에는 중간자(MITM) 공격에 대해 더 강력한 보안 보장을 제공하는 강화된 버전의 SRP(Secure Remote Password) 프로토콜 사용이 포함됩니다. 저희가 구현한 방식은 Proton과 사용자 간의 메시지를 탐지할 수 없는 방식으로 임의로 읽고, 수정하고, 지연시키고, 파괴하고, 반복하거나 조작할 수 있는 공격자라도 로그인 시도당 단일 비밀번호 추측만 확인할 수 있으며, 이는 직접 로그인을 시도하는 것과 같습니다. 이러한 방식으로 Proton이 유출되어 악의적으로 행동하더라도 비밀번호에 해당하는 정보는 절대 노출되지 않습니다.

Proton의 인증 암호화에 대해 더 알아보기

데이터 암호화

Proton Authenticator를 사용하면 Proton Account가 없어도 2FA 코드를 안전하게 저장할 수 있습니다. 즉, 초기 암호화 프로세스는 전적으로 로컬 기기에서 수행되어야 합니다. 그런 다음 Proton Account를 사용하여 기기 간에 코드를 동기화하기로 결정하면 Proton 서버에 저장된 암호화 키를 사용하여 동기화를 수행할 수 있습니다.

Proton 암호화는 Proton 서버가 Authenticator 앱이 사용자 데이터를 암호화하는 데 사용하는 루트 키의 암호화된 버전을 제공하면서 시작됩니다. 각 Proton 사용자에게는 비대칭 User Key가 있으며 Proton은 기기에서 다음과 같이 이 User Key를 암호화합니다:

  • 단일 계정 비밀번호를 사용하는 계정: Proton은 계정 비밀번호의 bcrypt 해시와 계정 솔트를 사용하여 User Key를 암호화합니다.
  • 다중 계정 비밀번호 기능을 사용하는 계정: Proton은 키 비밀번호의 bcrypt 해시와 계정 솔트를 사용하여 User Key를 암호화합니다.

Proton Authenticator는 bcrypt와 계정 솔트를 사용하여 비밀번호를 해시함으로써 무차별 대입 공격에 대한 추가적인 보호 계층을 제공합니다. 악의적인 행위자가 Proton 데이터베이스에 접근하더라도 귀하의 계정 키는 무차별 대입 공격으로부터 안전합니다.

동기화를 활성화하면 Proton Authenticator가 32바이트 임의 Authenticator Key를 생성합니다. 이 키는 User Key로 암호화되고 서명되어 귀하만이 복호화할 수 있습니다. 그 누구도(Proton조차도) 새로운 Authenticator Key를 읽거나 생성할 수 없습니다. Authenticator Key에 접근할 수 있게 되면 Proton Authenticator의 모든 항목은 256-bit AES-GCM을 사용하여 암호화됩니다.

Proton Authenticator는 Proton Account가 필요하지 않으므로 데이터가 기기에만 존재할 때 안전하게 저장하는 별도의 암호화 스키마도 필요합니다. 결국 이를 구현하는 가장 쉬운 방법은 Proton Account를 별도의 키 제공자로 취급하는 것입니다. 결국 다음과 같은 모습이 됩니다:

Proton Account가 없는 Proton Authenticator 암호화 다이어그램

기기의 로컬 키 저장소의 경우 각 시스템의 보안 키 저장소 제공자에 의존합니다:

  • Android: 키를 Android Keystore(새 창)에 안전하게 저장한 다음, 앱의 보호된 파일 시스템에 저장하는 로컬 임의 키를 암호화하는 데 사용합니다. 해당 키는 기기의 모든 Proton Authenticator 항목을 대칭적으로 암호화하는 데 사용됩니다.
  • iOS/iPadOS/macOS: 로컬 임의 키를 생성하여 키체인 서비스(새 창)에 저장합니다. 해당 키는 기기의 모든 Proton Authenticator 항목을 대칭적으로 암호화하는 데 사용됩니다.
  • Windows: 로컬 임의 키를 생성하여 Windows 자격 증명 관리자(새 창)에 저장합니다. 해당 키는 기기의 모든 Proton Authenticator 항목을 대칭적으로 암호화하는 데 사용됩니다. WCM 연결을 사용할 수 없는 경우 사용자가 비밀번호로 로컬 임의 키를 암호화할 수 있도록 합니다.
  • Linux: 로컬 임의 키를 생성하여 사용 가능한 DBUS 시크릿 서비스에 저장합니다. 해당 키는 기기의 모든 Proton Authenticator 항목을 대칭적으로 암호화하는 데 사용됩니다. DBUS 시크릿 서비스가 구성되지 않은 경우 사용자가 비밀번호로 로컬 임의 키를 암호화할 수 있도록 합니다.

백업 암호화

Proton Authenticator의 주요 장점 중 하나는 항상 데이터를 통제할 수 있다는 점입니다. 여기에는 코드를 로컬 기기에 주기적으로 백업하고 이 민감한 데이터를 암호화하는 비밀번호를 설정할 수 있는 기능이 포함됩니다.

이 보안 로컬 백업을 구현하기 위해 저희는 귀하가 제공한 비밀번호를 사용하여 Argon2를 KDF(키 파생 함수)로 사용하여 보안 암호화 키를 파생시킵니다. KDF는 사용자 입력 비밀번호와 같은 비밀 입력에서 암호화 키를 생성하는 데 사용되며, 주 목적은 공격자가 비밀번호를 해독하는 것을 더 어렵고 시간이 많이 걸리게 하여 보안을 향상시키는 것입니다. 비밀번호에서 생성된 이 암호화 키를 사용하여 모든 항목을 직렬화하고 암호화하여 백업이 유출되더라도 데이터가 안전하게 암호화된 상태로 유지되도록 합니다. 또한 잘 알려진 개방형 기술을 사용하므로 Proton Authenticator를 사용하지 않고도 데이터를 복호화할 수 있어 다른 인증 앱으로 이동하기로 결정하더라도 통제권을 유지할 수 있습니다.

투명성을 통한 보안

모든 Proton 서비스와 마찬가지로 Proton Authenticator는 오픈 소스입니다. 누구나 소스 코드를 참조하여 보안 모델을 검증할 수 있습니다. 다른 서비스와 마찬가지로 Proton Authenticator도 정기적인 독립 보안 감사를 받으며 감사 보고서는 제공되는 즉시 공개적으로 공유할 것입니다.

마지막으로 관심 있는 보안 연구원을 위해 Proton Authenticator는 Proton 소프트웨어의 버그 발견에 대해 최대 10만 달러의 상금을 제공하는 Proton 버그 보상 프로그램의 대상이 됩니다.