
데이터 보호용 Keybag
파일 및 키체인 데이터 보호 클래스의 키는 iOS, iPadOS, tvOS, watchOS 및 visionOS의 Keybag에서 수집하고 관리합니다. 이러한 운영 체제는 user, device, backup, escrow 및 iCloud Backup 등의 Keybag을 사용합니다.
User keybag
User keybag은 기기의 일반적인 작업에 사용되는 래핑된 클래스 키가 저장되는 곳입니다. 예를 들어 암호가 입력되면 User keybag에서 NSFileProtectionComplete 키가 로드되어 래핑이 해제됩니다. No Protection 클래스에 저장된 바이너리 속성 목록(.plist) 파일입니다.
A9 이전에 출시된 SoC가 탑재된 기기의 경우, .plist 파일 콘텐츠는 삭제할 수 있는 저장 장치(Effaceable Storage)에 보관된 키로 암호화됩니다. Keybag에 전방 보안성을 제공하기 위해 사용자가 암호를 변경할 때마다 이 키는 지워졌다가 다시 생성됩니다.
A9 이상의 SoC가 탑재된 기기에서는 .plist 파일에 Secure Enclave로 제어되는 재전송 방지 값으로 보호되는 잠금 장치에 저장되는 Keybag을 나타내는 키가 포함됩니다.
Secure Enclave는 User keybag을 관리하며 기기의 잠금 상태에 대한 쿼리를 받습니다. User keybag의 모든 클래스 키가 접근 가능한 상태이며 이상 없이 래핑이 해제된 경우에만 Secure Enclave에서 기기가 잠금 해제되었음을 보고합니다.
Device keybag
Device keybag은 기기별로 특정한 데이터를 다루는 작업에 사용되는 래핑된 클래스 키를 저장하는 데 사용됩니다. 공유 iPad 모드로 사용하도록 구성된 iPad 기기는 어느 사용자도 로그인하지 않은 상태에서 자격 증명에 접근해야 하는 경우가 가끔 있습니다. 따라서 사용자의 암호로 보호되지 않는 Keybag이 필요합니다.
iOS, iPadOS 및 visionOS에서는 파일 시스템 콘텐츠를 사용자별로 암호화하여 구분하는 기능은 지원하지 않으며, 시스템이 Device keybag에서 클래스 키를 사용해 파일별 키를 래핑합니다. 하지만 키체인은 User keybag에서 클래스 키를 사용하여 사용자 키체인의 항목을 보호합니다. 단일 사용자용으로 구성(기본 구성)된 iPhone 및 iPad 기기의 경우 Device keybag과 User keybag은 동일한 하나의 개체이며, 사용자의 암호로 보호됩니다.
Backup keybag
Backup keybag은 Finder(macOS 10.15 이상 버전) 또는 iTunes(macOS 10.14 또는 이전 버전)에서 암호화된 백업 데이터가 만들어질 때 생성되고 기기가 백업된 컴퓨터에 저장됩니다. 새로운 일련의 키와 함께 새로운 Keybag이 생성되며, 백업된 데이터는 이 새로운 키로 다시 암호화됩니다. 위에서 설명한 것처럼 이동할 수 없는 키체인 항목은 UID에서 파생된 키로 래핑된 상태라 원래 백업된 기기에는 복원할 수 있지만 다른 기기에서는 접근할 수 없습니다.
암호 세트로 보호되는 keybag은 키 파생 함수 PBKDF2의 1,000만 회 반복을 통해 실행됩니다. 반복 횟수가 크지만 특정 기기에 연관되지 않아 이론상으로는 동시에 다수의 컴퓨터에 가하는 무작위 대입 공격이 Backup keybag을 공격할 수 있습니다. 하지만 강력한 암호로 이러한 위협을 완화할 수 있습니다.
사용자가 백업 데이터를 암호화하지 않기로 선택하면 해당 파일들은 데이터 보호 클래스와 무관하게 암호화가 수행되지 않지만 키체인은 UID에서 파생된 키로 계속 보호됩니다. 따라서 키체인 항목은 백업 암호가 설정된 경우에만 새로운 기기로 마이그레이션됩니다.
Escrow keybag
Escrow keybag은 USB 및 MDM(모바일 기기 관리)을 통해 Finder 또는 iTunes와 동기화하는 데 사용됩니다. 이 Keybag은 사용자에게 암호 입력을 요청하지 않고도 Finder 또는 iTunes에서 백업과 동기화를 수행할 수 있게 해 주며, MDM 솔루션에서 사용자의 암호를 원격으로 지울 수 있게 해 줍니다. Finder 또는 iTunes를 통해 동기화할 때 사용되는 컴퓨터에 저장되거나, 기기를 원격으로 관리하는 MDM 솔루션에 저장되기도 합니다.
Escrow keybag은 모든 데이터 클래스에 접근해야 할 수 있는 기기 동기화 과정에서 사용자 경험을 향상합니다. 암호로 잠긴 기기가 Finder 또는 iTunes에 처음으로 연결되면 사용자에게 암호를 입력하라는 대화상자가 나타납니다. 이후 기기에서 사용하는 것과 동일한 클래스 키가 포함된 Escrow keybag이 기기를 통해 생성되고 새로 생성된 키로 보호합니다. Escrow keybag 및 이를 보호하는 키는 기기와 호스트 또는 기기와 서버 사이에서 Protected Until First User Authentication 클래스에 있는 기기에 저장된 데이터와 함께 분리됩니다. 이런 이유로 재시동 후 처음으로 Finder 또는 iTunes에 연결하고 백업을 할 때 암호를 입력해야 합니다.
OTA(Over-The-Air) 소프트웨어 업데이트의 경우, 업데이트를 시작할 때 사용자에게 암호를 입력하라는 대화상자가 나타납니다. 이는 업데이트 후에 User keybag을 잠금 해제하는 일회성 잠금 해제 토큰을 안전하게 만드는 데 사용됩니다. 사용자의 암호를 입력하지 않으면 이 토큰을 생성할 수 없으며, 사용자의 암호가 변경되면 이전에 생성된 모든 토큰은 무효화됩니다.
일회성 잠금 해제 토큰은 소프트웨어 업데이트의 자동 또는 수동 설치 모두에 필요합니다. 해당 토큰은 Secure Enclave 내 모노토닉 카운터의 현재 값, Keybag의 UUID, Secure Enclave의 UID에서 파생된 키로 암호화됩니다.
A9 이상 SoC에서 일회성 잠금 해제 토큰은 더 이상 카운터 또는 삭제할 수 있는 저장 장치(Effaceable Storage)에 의존하지 않습니다. 대신 Secure Enclave에서 제어하는 재전송 방지 값으로 보호됩니다.
수동 소프트웨어 업데이트용 일회성 잠금 해제 토큰은 20분이 지나면 만료됩니다. iOS 13, iPadOS 13.1 및 visionOS 1.0 이상에서 토큰은 Secure Enclave에 의해 보호되는 잠금 장치에 저장됩니다. iOS 13 이전 버전에서는 이 토큰이 Secure Enclave에서 내보내져 삭제할 수 있는 저장 장치(Effaceable Storage)에 작성되었거나 Secure Enclave 재전송 방지 메커니즘에 의해 보호되었습니다. 기기가 20분 내에 재시동되지 않으면 정책 타이머가 카운터를 증가시켰습니다.
자동 소프트웨어 업데이트는 시스템에서 사용 가능한 업데이트를 감지했고 다음 중 하나에 해당되는 경우에 발생합니다.
자동 업데이트가 iOS 12 이상에서 구성된 경우.
사용자가 업데이트 알림을 받았을 때 나중에 설치를 선택한 경우.
사용자가 암호를 입력한 후 일회성 잠금 해제 토큰이 생성되며 최대 16시간 동안 Secure Enclave에서 유효합니다. 업데이트가 아직 수행되지 않은 경우, 이 일회성 잠금 해제 토큰은 모든 잠금마다 제거되고 이후에 잠금 해제를 할 때마다 다시 생성됩니다. 잠금 해제를 할 때마다 16시간 윈도우를 다시 시작합니다. 16시간이 지나면 정책 타이머가 일회성 잠금 해제 토큰을 무효화합니다.
iCloud Backup keybag
iCloud Backup keybag은 Backup keybag과 유사합니다. 이 keybag에 있는 모든 클래스 키는 비대칭(Protected Unless Open Data Protection 클래스와 같이 Curve25519를 사용함)입니다. 비대칭 Keybag은 iCloud 키체인 복구를 위해 백업된 키체인을 보호하는 데도 사용됩니다.