모든 글

읽는 데 8분

패스키가 CardanoWall에서 신원 볼트를 보호하는 방법

패스키는 CardanoWall 신원 자체가 되지 않습니다. 패스키는 사용자의 인증기만 열 수 있는 암호화된 볼트를 잠금 해제할 뿐입니다. WebAuthn PRF가 어떻게 CardanoWall을 시드 수탁자로 만들지 않으면서도 일상적인 접근을 쉽게 해 주는지 설명합니다.

CardanoWall의 패스키는 신원 자체가 아닙니다. 신원의 암호화된 사본을 잠금 해제하는 키입니다. 진짜 신원은 32바이트짜리 신원 시드(Identity Seed)이며, 패스키는 그 시드를 담은 암호화된 볼트를 사용자의 기기가 직접 열 수 있게 해 줄 뿐입니다. 덕분에 서명하거나 복호화할 때마다 시드를 일일이 붙여 넣지 않아도 됩니다.

Face ID, Touch ID, Windows Hello, 동기화된 플랫폼 패스키, 호환되는 하드웨어 키는 모두 이 일상의 문 역할을 할 수 있습니다. 그 문 뒤에는 CardanoWall 서버가 읽을 수 없는 암호문이 자리합니다. 시드가 곧 신원이고 패스키는 잠금 해제 요소일 뿐이라는 이 분리가 설계의 전부입니다.

패스키는 실제로 어떤 문제를 해결합니까?

강력한 신원 저장을 일상에서 쓸 만하게 만들어 줍니다.

편의 계층이 없다면, 다시 접속하는 사용자는 무언가에 서명하거나 복호화할 때마다 매번 신원 시드를 붙여 넣어야 합니다. 좁은 의미에서는 안전하지만 번거롭습니다. 그리고 번거로운 보안은 안전하지 않은 보안으로 무너지기 쉽습니다. 사람들은 비밀을 엉뚱한 곳에 복사하고, 평범한 메모에 남겨 두며, 결국 도구를 아예 쓰지 않게 됩니다.

패스키는 그 마찰을 없앱니다. CardanoWall은 계정마다 암호화된 볼트를 보관하고, 사용자의 기기가 사용자 확인 단계(지문, 얼굴 스캔, PIN, 하드웨어 키 탭)를 거친 뒤 그 볼트를 잠금 해제합니다. 시드의 평문 사본을 CardanoWall에 넘기지 않고도 한 번의 탭으로 접근할 수 있습니다.

여기서 패스키란 무엇입니까?

패스키는 WebAuthn 자격 증명으로, 최신 웹 전반의 "Face ID로 로그인"을 뒷받침하는 바로 그 공개 키 로그인 기술입니다.

FIDO 및 WebAuthn 모델에서 자격 증명은 특정 신뢰 당사자(여기서는 CardanoWall의 도메인)를 위해 생성되며, 그 비밀 키 부분은 인증기가 보유합니다. 그 인증기는 사용자의 휴대폰이나 노트북에 내장되어 있을 수도, 패스키 제공자를 통해 동기화될 수도, 별도의 하드웨어 보안 키에 담겨 있을 수도 있습니다.

신원 볼트의 경우 단순한 로그인만으로는 충분하지 않습니다. CardanoWall은 인증기가 브라우저로 높은 엔트로피의 비밀 자료를 내보내 주어야 하며, 그래야 브라우저가 볼트를 복호화할 수 있습니다. WebAuthn PRF 확장이 제공하는 것이 바로 이것입니다.

WebAuthn PRF란 쉽게 말해 무엇입니까?

PRF는 의사난수 함수(pseudorandom function)를 뜻합니다. PRF를 지원하는 인증기는 특정 자격 증명, 신뢰 당사자, 그리고 애플리케이션이 제공하는 솔트에 고유한 비밀 출력을 만들어 낼 수 있습니다. 그리고 같은 입력에 대해서는 매번 같은 출력을 생성합니다.

CardanoWall은 그 솔트를 사용자의 계정 식별자에서 결정론적으로 유도하므로, PRF 출력은 사용자의 계정으로 범위가 한정됩니다. 같은 물리적 키를 다른 계정에 꽂으면 다른 자료가 생성되어 엉뚱한 볼트를 열 수 없습니다. 그런 다음 브라우저는 그 PRF 출력을 볼트를 푸는 키로 사용합니다.

사용자 수준에서 요약하면 짧습니다.

  • 인증기는 자신의 비밀을 보관하며 절대 내보내지 않습니다.
  • 브라우저는 잠금 해제 자료를 인증 의식(ceremony)이 진행되는 그 순간에만 봅니다.
  • 서버는 언제나 암호화된 볼트 암호문만 저장합니다.
  • 서버는 스스로 PRF 출력을 재현할 수 없습니다.

이것이 패스키를 볼트 안 비밀의 사본이 아니라 볼트의 잠금 해제 요소로 만드는 지점입니다.

정확히 무엇이 암호화됩니까?

사용자 계정의 신원 번들입니다.

하나의 계정은 여러 신원을 담을 수 있습니다. 번들은 각 신원의 신원 시드와 그 비공개 레이블을 기록하며, 번들 전체는 저장되기 전에 암호화됩니다. 볼트는 계정당 하나의 암호문 행으로, 불투명한 서비스 상태이지 수탁(custody)이 아닙니다.

CardanoWall은 이를 WebAuthn-PRF(fido2prf) 수신자 스탠자 전용으로 지정된 age-v1 암호문으로 암호화합니다. 등록된 패스키마다 스탠자가 하나씩 붙습니다. 등록된 패스키 중 어느 하나라도 의식이 성공하면 볼트를 열 수 있습니다. 구현은 다른 종류의 수신자를 담은 볼트를 만드는 것을 거부하므로, 암호화는 설계상 대칭 키 전용으로 유지됩니다.

등록된 패스키가 하나도 없으면 서버 측에서 여는 경로 자체가 없습니다. 그래도 괜찮습니다. 시드 자체가 진짜 휴대 가능한 신원이기 때문입니다. 언제든 시드로 복원할 수 있습니다.

패스키로 감싼 볼트는 왜 비밀번호로 보호한 볼트보다 안전합니까?

오프라인에서 갈아 낼 비밀번호 유도 스탠자가 없기 때문입니다.

공격자가 사용자 선택 비밀번호로 보호된 파일을 훔치면, 자기 하드웨어가 허용하는 속도만큼 빠르게 로컬에서 추측을 돌릴 수 있습니다. 이것이 전형적인 오프라인 무차별 대입 문제이며, 약하거나 재사용된 비밀번호는 여기서 무너집니다.

CardanoWall의 호스팅 볼트는 비밀번호를 중심으로 만들어지지 않았습니다. 인증기가 보유한 PRF 자료, 즉 기기 안에 사는 무작위 256비트 키로 감싸여 있습니다. 따라서 데이터베이스가 유출되어도 공격자에게 넘어가는 것은 암호문뿐입니다. 공격할 비밀번호 해시도, 읽을 시드도 없습니다. 패스키가 일상적인 접근에 매력적인 이유이기도 합니다. 패스키는 피싱과 비밀번호 재사용을 비껴가면서 서버를 신원 비밀에서 완전히 떼어 놓습니다.

볼트에 대한 양자 공격은 어떻습니까?

여기서는 과장하기보다 정확하게 짚는 편이 낫습니다.

호스팅 볼트는 의도적으로 비대칭 공개 키 수신자 스탠자를 전혀 담지 않습니다. 이는 사람들이 우려하는 대규모 양자 공격, 즉 Shor 알고리즘이 공개 키 시스템을 표적으로 삼기 때문에 중요합니다. 볼트의 기밀성은 대칭 키 전용입니다. 패스키의 256비트 PRF 출력이 이를 감싸며, Shor 방식 공격이 겨냥할 공개 키는 설계상 존재하지 않습니다.

대칭 키에 대한 일반적인 양자 가속은 Grover 방식 탐색으로, 보통 유효 보안 여유를 대략 절반으로 줄이는 것으로 설명됩니다. 256비트 키라면 약 128비트의 유효 여유가 남으며, 이는 여전히 어마어마하게 큰 수입니다.

그러므로 정직한 주장은 "양자 공격은 불가능하다"가 아닙니다. 더 좁지만 더 단단한 주장입니다. 호스팅 볼트에는 비밀번호 유도 무차별 대입 표면이 없고, Shor가 노릴 공개 키 표적이 없으며, 일반적인 양자 탐색을 가정하더라도 대칭 키 여유가 매우 높게 유지됩니다. 덜 화려하지만, 보안 전문 독자가 실제로 신뢰할 수 있는 주장입니다.

잠금 해제에 그냥 Cardano 지갑을 쓰면 안 됩니까?

챌린지에 서명하는 것은 안정적인 볼트 키가 아니기 때문입니다.

지갑 서명은 일부 공개 클레임에는 분명히 유용하지만, 기기, 브라우저, 지갑 버전, 변화하는 하드웨어 지원을 넘나들며 동일한 볼트를 복호화해야 하는 비밀을 다시 유도하기에는 빈약한 기본 요소입니다. 볼트를 지갑에 묶으면, 어느새 지갑의 동작이 계정 복구로 바뀌어 버립니다.

CardanoWall은 이 역할들을 분리해 둡니다.

  • 신원 시드는 사용자의 Label 309 서명 키와 수신 키를 유도합니다.
  • 패스키는 호스팅 볼트를 잠금 해제합니다.
  • Cardano 지갑 서명은 사용자가 의도적으로 그 경로를 선택했을 때, 명시적이고 지갑에 결속된 레코드를 위해 따로 남겨 둡니다.

동기화된 패스키와 하드웨어 키 중 어느 쪽을 써야 합니까?

둘 다 가능합니다. 올바른 선택은 그 신원의 가치에 달려 있습니다.

동기화된 패스키는 편리한 기본값입니다. 사용자의 설정에 따라 운영체제 키체인이나 비밀번호 관리자 같은 제공자를 통해 새 기기에서 다시 나타날 수 있어, 평범한 복구가 훨씬 쉬워집니다. 동기화된 패스키는 이를 보유한 제공자의 보안 및 복구 모델을 그대로 물려받습니다.

하드웨어 키는 통제 수준이 더 높습니다. 접근에 물리적 기기가 필요하므로, 서랍에 잠가 둘 수 있는 무언가에 요소를 결속하고 싶은 고가치 신원이나 공유 팀 신원에 적합합니다.

합리적인 원칙은 이렇습니다. 패스키 방식을 신원의 가치에 맞추십시오. 대부분의 사람에게는 동기화된 플랫폼 패스키가 훌륭한 일상용 선택입니다. 민감한 팀 신원에는 하드웨어 키에 더해 신중하게 보관한 시드를 함께 두는 편이 더 나은 절충일 때가 많습니다. 동기화된 패스키와 하드웨어 키 비교 글에서 그 차이를 자세히 짚어 봅니다.

제 브라우저나 키가 PRF를 지원하지 않으면 어떻게 됩니까?

그러면 CardanoWall은 설계대로 시드 경로로 되돌아갑니다.

WebAuthn PRF 지원은 브라우저, 운영체제, 인증기의 조합에 달려 있습니다. CardanoWall은 볼트 요소를 등록하기 전에 그 조합이 PRF를 수행할 수 있는지 기능을 감지하므로, 사용자가 나중에 잠금 해제할 수 없는 볼트로 끌려 들어가는 일은 없습니다.

시드 전용 접근은 격이 낮은 모드가 아닙니다. 주권을 가진 경로입니다. 시드가 곧 신원이며, 나머지는 모두 플랫폼이 안전하게 지원할 수 있을 때 그 위에 얹는 편의입니다.

그래도 무엇이 잘못될 수 있습니까?

패스키는 큰 부류의 위험을 차단하지만, 몇 가지 현실은 남아 있으니 솔직하게 짚어 두는 편이 낫습니다.

  • 도난당한 시드는 신원의 완전한 침해입니다. 사용자의 신원 시드를 가진 자가 그 신원입니다. 대응은 새 신원을 생성하고 기존 신원을 비활성화하는 것이지, 비밀번호 재설정이 아닙니다. 비밀번호가 없기 때문입니다.
  • 잠금 해제된 세션은 살아 있는 표적입니다. 볼트가 잠금 해제된 동안에는 서명과 복호화를 할 수 있도록 사용자의 시드와 그로부터 유도된 비밀 키가 브라우저 메모리에 자리합니다. CardanoWall은 그 자료를 React 상태 바깥에 두고, 잠금과 로그아웃 시 최선의 노력으로 이를 0으로 지웁니다. 그러나 잠금 해제된 세션 안의 악성 스크립트나 확장 프로그램은 여전히 메모리 속 비밀을 읽을 수 있습니다. 엄격한 콘텐츠 보안 정책과 최소한의 스크립트가 그 위험을 줄이지만, 완전히 없애지는 못합니다. 온전히 통제하지 못하는 기기에서는 자리를 비울 때 열린 세션을 남겨 두지 말고 볼트를 잠그십시오.
  • 패스키 제거는 소급되지 않습니다. 요소를 제거하면 클라이언트는 볼트를 남은 요소들로 다시 암호화하고 기존 암호문 행은 완전히 삭제되므로, 제거된 키로는 더 이상 현재 볼트를 열 수 없습니다. 그러나 공격자가 사용자가 제거하기 전에 이미 그 패스키를 사용했다면, 제거로는 그들이 한 일을 되돌릴 수 없습니다. 패스키를 제거하면 어떻게 되는지를 참고하십시오.
  • 모든 것을 잃으면 문도 사라집니다. 시드의 모든 사본과 모든 잠금 해제 요소를 잃으면, 그 신원을 앞으로 사용할 길은 사라집니다. 이미 게시한 증명은 영원히 검증됩니다. 그것들은 사용자의 볼트가 아니라 Cardano에 살기 때문입니다. 다만 사용자는 더 이상 그 신원으로 활동할 수 없습니다.

패스키는 위험을 줄입니다. 그러나 시드와 기기를 보호할 사용자의 책임까지 없애 주지는 않습니다.

요약하면

패스키는 CardanoWall을 수탁자로 만들지 않으면서도 쓸 만하게 만들어 줍니다.

서버는 암호화된 볼트 암호문을 저장할 뿐, 자신이 복호화할 수 있는 것은 무엇도 저장하지 않습니다. 사용자의 패스키는 브라우저가 볼트를 푸는 자료를 유도하게 해 줍니다. 사용자의 신원 시드는 신원 전체의 휴대 가능한 뿌리로 남습니다. 시드를 저장한 다음, 일상적인 접근은 패스키에 기대십시오. 위에는 편의, 아래에는 주권이 있습니다. 패스키를 등록한 뒤에도 왜 시드가 여전히 중요한지 이해하고 싶다면, 신원 시드가 여전히 중요한 이유를 읽어 보십시오.

더 읽어보기

securitypasskeysidentity