데이터 보호 클래스
데이터 보호를 지원하는 기기에서 새로운 파일이 생성되면 그 파일을 생성한 앱이 파일에 클래스를 할당합니다. 데이터 접근 시기를 결정하는 정책은 클래스마다 다릅니다. 기본 클래스와 정책은 다음 섹션에서 설명합니다. Apple Silicon 기반 Mac 컴퓨터는 클래스 D를 지원하지 않습니다. 클래스 D는 보호 기능이 없으며 로그인 및 로그아웃시 보안 경계가 설정됩니다(iPhone 및 iPad에서처럼 잠금 또는 잠금 해제하는 방식이 아님).
클래스 | 보호 유형 |
---|---|
클래스 A: Complete Protection | NSFileProtectionComplete |
클래스 B: Protected Unless Open | NSFileProtectionCompleteUnlessOpen |
클래스 C: Protected Until First User Authentication 참고: macOS는 볼륨 키를 사용하여 FileVault 보호 특성을 다시 생성함. | NSFileProtectionCompleteUntilFirstUserAuthentication |
클래스 D: No Protection 참고: macOS에서 지원되지 않음. | NSFileProtectionNone |
Complete Protection
NSFileProtectionComplete: 이 클래스 키는 사용자 암호 및 기기 UID에서 파생된 키로 보호됩니다. 사용자가 기기를 잠그고 잠시 후(암호 요구가 ‘즉시’로 설정되어 있는 경우 10초), 암호화가 해제된 클래스 키는 폐기되고, 사용자가 암호를 다시 입력하거나 Face ID 및 Touch ID를 사용하여 기기를 잠금 해제(로그인)하기 전까지 이 클래스에 있는 모든 데이터에 접근할 수 없도록 렌더링합니다.
macOS에서 사용자가 로그아웃하고 잠시 후, 암호화가 해제된 클래스 키는 폐기되고 사용자가 암호를 다시 입력하거나 Touch ID를 사용하여 기기에 로그인하기 전까지 이 클래스에 있는 모든 데이터에 접근할 수 없도록 렌더링합니다.
Protected Unless Open
NSFileProtectionCompleteUnlessOpen: 일부 파일은 기기가 잠금 상태이거나 사용자가 로그아웃했을 때에도 쓸 수 있어야 합니다. 좋은 예로는 이메일 첨부 파일을 백그라운드에서 다운로드하는 상황입니다. 이 작업은 비대칭 타원곡선 암호화(Curve25519를 통한 ECDH)를 통해 실행됩니다. 일반적으로 파일별 키는 NIST SP 800-56A에 서술된 단일 패스 디피-헬만 키 합의(Diffie-Hellman Key Agreement)를 사용해 파생된 키로 보호됩니다.
해당 합의로 파생된 임시 공개 키는 래핑된 파일별 키와 함께 저장됩니다. KDF는 NIST SP 800-56A의 5.8.1에 서술된 연속 키 유도 함수(Concatenation Key Derivation Function)(승인된 대안 1)입니다. 여기서 AlgorithmID는 생략됩니다. PartyUInfo는 임시 공개 키이며 PartyVInfo는 정적 공개 키입니다. SHA256은 해시 함수로 사용됩니다. 파일을 닫으면 바로 파일별 키는 메모리에서 지워집니다. 파일을 다시 열려면 Protected Unless Open 클래스의 개인 키 및 파일의 임시 공개 키를 사용해 공유 비밀이 다시 생성됩니다. 이 개인 키와 임시 공개 키를 사용하여 파일별 키의 래핑을 해제한 다음 파일의 암호화도 해제합니다.
macOS에서 시스템의 모든 사용자가 로그인되어 있거나 인증되어 있는 동안에는 NSFileProtectionCompleteUnlessOpen의 비공개 영역에 접근할 수 있습니다.
Protected Until First User Authentication
NSFileProtectionCompleteUntilFirstUserAuthentication: 이 클래스는 기기가 잠기거나 사용자가 로그아웃하더라도 암호화가 해제된 클래스 키가 메모리에서 삭제되지 않는다는 점을 제외하면 Complete Protection과 같은 방식으로 동작합니다. 이 클래스의 보호 방식은 데스크탑 풀 볼륨 암호화(Full-Volume Encryption)와 비슷한 특징을 가지고 있으며 재시동과 관련된 공격으로부터 데이터를 보호합니다. 데이터 보호 클래스에 할당되지 않은 모든 타사 앱 데이터는 기본으로 이 클래스에 할당됩니다.
macOS에서 이 클래스는 볼륨이 마운트되어 있는 동안 접근할 수 있는 볼륨 키를 사용하며 FileVault처럼 작동합니다.
No Protection
NSFileProtectionNone: 이 클래스 키는 UID로만 보호되며 삭제할 수 있는 저장 장치(Effaceable Storage)에 보관됩니다. 이 클래스에 있는 파일을 암호화 해제하는 데 필요한 모든 키는 기기에 저장되어 있기 때문에 암호화는 빠른 원격 지우기의 이점만 제공합니다. 파일에 데이터 보호 클래스가 할당되지 않더라도 iOS 및 iPadOS 기기의 다른 모든 데이터와 마찬가지로 암호화된 형태로 보관됩니다.
macOS에서 지원되지 않습니다.
참고: macOS에서 시동된 운영 체제가 아닌 볼륨의 경우, 볼륨이 마운트되어 있는 동안에는 모든 데이터 보호 클래스에 접근할 수 있습니다. 기본 데이터 보호 클래스는 NSFileProtectionCompleteUntilFirstUserAuthentication입니다. 익스텐트별 키 기능은 Rosetta 2 및 기본 앱에서 사용할 수 있습니다.