macOS 타호에서 시큐어 앤클레이브 맥 간 로그인 키체인 복사 불가
macOS Tahoe부터 애플 실리콘 등 시큐어 앤클레이브(Secure Enclave) 탑재 맥에서는 로그인 키체인 파일을 다른 맥으로 복사해도 더 이상 열 수 없습니다. 키체인 암호화 키가 원본 맥의 시큐어 앤클레이브에 저장되기 때문에, 비밀번호가 맞더라도 다른 맥에서는 복호화 키 자체를 사용할 수 없기 때문입니다. 기존의 키체인 마이그레이션 방식을 쓰던 IT 관리자들에게 중요한 변화입니다.
최근 macOS의 로그인 키체인과 관련된 문제를 겪었다. 로그인 키체인에 익숙하지 않은 분들을 위해 설명하자면, 이것은 macOS가 맥의 각 사용자 계정에 자동으로 생성하는 키체인이다. 사용자의 로그인 키체인 비밀번호는 맥에 로그인할 때 사용하는 비밀번호와 일치한다. 로그인 키체인은 암호화된 데이터베이스 파일로 저장되며, 기본적으로 로그인 비밀번호와 키체인 비밀번호가 같기 때문에 사용자가 로그인하면 자동으로 잠금 해제된다.
macOS Tahoe 기준으로 로그인 키체인은 login.keychain-db라는 이름의 SQLite 데이터베이스 파일이며, 사용자의 홈 폴더 내 다음 디렉터리에 저장된다: /Users/username_goes_here/Library/Keychains
지금까지는 로그인 키체인 파일을 한 맥에서 다른 맥으로 복사한 후, 해당 키체인의 비밀번호를 입력하면 대상 맥에서 열 수 있었다. 그러나 macOS Tahoe부터는 시큐어 앤클레이브(Secure Enclave)를 사용하는 맥에서는 더 이상 작동하지 않는 것으로 보인다. 이러한 맥에서는 로그인 키체인의 비밀번호만으로는 부족하다. 그 이유는 애플의 플랫폼 보안(Platform Security) 문서의 '키체인 데이터 보호' 섹션에 설명되어 있다:
키체인 항목은 두 개의 서로 다른 AES-256-GCM 키로 암호화된다: 테이블 키(메타데이터)와 행별 키(시크릿 키)이다. 키체인 메타데이터(kSecValue를 제외한 모든 속성)는 검색 속도를 높이기 위해 메타데이터 키로 암호화되며, 시크릿 값(kSecValueData)은 시크릿 키로 암호화된다. 메타데이터 키는 시큐어 앤클레이브가 보호하지만 키체인의 빠른 조회를 위해 애플리케이션 프로세서에 캐시된다. 시크릿 키는 항상 시큐어 앤클레이브를 거쳐야 한다.
위 인용문에서 중요한 부분은 다음과 같다:
메타데이터 키는 시큐어 앤클레이브가 보호하지만 키체인의 빠른 조회를 위해 애플리케이션 프로세서에 캐시된다. 시크릿 키는 항상 시큐어 앤클레이브를 거쳐야 한다.
이를 통해 볼 때, 로그인 키체인의 잠금을 해제하려면 비밀번호만으로는 부족하다. 잠금 해제에 필요한 키들이 키체인이 생성된 맥의 시큐어 앤클레이브에 묶여 있기 때문이다. 복호화 키가 원본 맥의 시큐어 앤클레이브에 저장되어 있으므로, 키체인을 다른 맥에 수동으로 복사한 후 잠금을 해제하는 것은 작동하지 않는다. 키체인의 비밀번호가 올바르더라도, 그 내용을 복호화하는 데 실제로 필요한 키를 대상 맥에서 사용할 수 없는 것이다.
나는 Apple Silicon 맥에서 login.keychain-db 파일을 두 번째 맥(이 경우 macOS 가상 머신)으로 복사한 뒤, 계정의 올바른 비밀번호로 잠금 해제를 시도함으로써 이를 직접 확인할 수 있었다.
참고: macOS 가상 머신을 테스트에 사용한 이유는 가상 머신에는 시큐어 앤클레이브가 없기 때문이다. 이를 통해 키가 원본 맥의 시큐어 앤클레이브에 저장되고 있다면, 가상 머신에서는 그 키에 접근할 수 없다는 것을 검증할 수 있다.
사용한 테스트 절차는 다음과 같다:
- Apple Silicon 맥에 username이라는 사용자 계정을 생성한다.
- Apple Silicon 맥의 username 계정에 로그인한다.
- /Users/username/Library/Keychains에서 login.keychain-db 파일을 찾는다.
- login.keychain-db 파일을 편리한 위치로 복사한다.
- 새로운 macOS 가상 머신을 설치한다.
- macOS 가상 머신에 Apple Silicon 맥의 username 계정과 동일한 비밀번호로 username 사용자 계정을 생성한다.
- macOS 가상 머신의 username 계정에 로그인한다.
- /Users/username/Library/Keychains에서 login.keychain-db 파일을 찾는다.
- macOS 가상 머신의 /Users/username/Library/Keychains에서 기존 login.keychain-db 파일을 제거한다.
- login.keychain-db 파일을 복사한다.