Encrypting Your App’s Files

Panther·2021년 8월 10일
0

https://developer.apple.com/documentation/uikit/protecting_the_user_s_privacy/encrypting_your_app_s_files

"Protect the user’s data in iOS by encrypting it on disk."

디스크에서 암호화함으로써 iOS에서 사용자의 데이터를 보호합니다.

Overview

데이터 보호는 앱의 파일을 보호하기 위해 사용하는 iOS 기능이며, 인증되지 않은 접근을 방지합니다. 데이터 보호는 사용자가 기기에서 활성화 패스코드를 설정할 때 자동으로 활성화됩니다. 정상적으로 파일을 읽고 쓸 수 있지만, 시스템은 씬 뒤에서 컨텐트를 암호화하고 암호해독을 합니다. 암호화 및 암호해독 과정은 자동이며, 하드웨어 가속화됩니다.

각 파일에 대해 적용하고자 하는 데이터 보호 수준을 구체화할 수 있습니다. 네 가지 수준이 있으며, 각각은 파일 접근 시 결정합니다. 파일 생성 시 보호 수준을 구체화하지 않으면, iOS는 기본값 보호 수준을 자동으로 적용합니다.

  • No protection. 파일은 항상 접근 가능합니다.
  • Complete until first user authentication. (기본값) 파일은 사용자가 처음으로 기기를 해제하기 전까지 접근이 불가능합니다. 처음 기기를 해제한 후 파일은 기기가 꺼지거나 재부팅 될 때까지 접근 가능한 상태로 남습니다.
  • Complete unless open. 기기가 잠겨있지 않을 때에만 기존 파일을 열 수 있습니다. 만약 이미 열려있는 파일을 갖고 있다면, 사용자가 기기를 잠근 이후에도 해당 파일 접근을 계속합니다. 기기가 잠겨있거나 잠겨있지 않은 동안 새 파일을 생성할 수도 있고 접근할 수도 있습니다.
  • Complete. 파일은 기기가 잠겨있지 않을 때에만 접근이 가능합니다.

한 단계에서 새 파일을 생성하고 암호화하려면, 파일의 컨텐츠를 갖는 데이터를 구성하고, write(to:options:) 메소드를 호출해야 합니다. 이 메소드를 호출할 때, 파일에 적용하고자 하는 데이터 보호 옵션을 구체화해야 합니다. Listing 1은 Data 인스턴스의 컨텐츠를 파일에 쓰는 방법과 완전한 보호 수준을 사용해 암호화하는 방법을 보여주고 있습니다.

Listing 1 Encrypting a file on first write

do {
   try data.write(to: fileURL, options: .completeFileProtection)
}
catch {
   // Handle errors.
}

기존 파일의 데이터 보호 수준을 변경하려면, NSURLsetResourceValue(_:forKey:) 메소드를 사용해야 합니다. 이 메소드를 호출할 때, fileProtectionKey 리소스 키에 새로운 데이터 보호 옵션을 할당해야 합니다. Listing 2는 기존 파일에 이 키를 추가하는 예시를 보여줍니다.

Listing 2 Encrypting an existing file on disk
do {
   try (fileURL as NSURL).setResourceValue( 
                  URLFileProtection.complete,
                  forKey: .fileProtectionKey)
}
catch {
   // Handle errors.
}

Manage Your Access to Encrypted Files

파일의 보호 수준에 따라 사용자가 이후에 기기를 잠글 때 컨텐츠 읽기 혹은 쓰기 시도가 실패할 수 있습니다. 앱이 파일에 접근 가능하도록 하려면 아래처럼 하시기 바랍니다.

  • 필요에 맞게 올바른 데이터 보호 수준을 선택해야 합니다.
  • 앱 딜리게이트의 applicationProtectedDataWillBecomeUnavailable(_:), applicationProtectedDataDidBecomeAvailable(_:) 메소드를 사용해서 completeFileProtection 수준으로 파일을 닫거나 다시 열도록 합니다.

포어그라운드에 있을 때에만 앱이 접근하는 파일은 complete 보호 수준을 할당하시기 바랍니다. 만약 앱이 위치 업데이트 처리와 같은 백그라운드 기능을 제공하고 있다면, 백그라운드에서도 접근할 수 있도록 파일에 대한 다른 보호 수준을 할당해야 합니다. 예를 들어 피트니스 앱은 백그라운드에서 로그 위치 이벤트를 사용하고자 하는 파일에 complete unless open 보호 수준을 사용할 것입니다.

사용자에 대한 개인 정보를 포함하는 파일 혹은 사용자에 의해 직접적으로 생성된 파일은 항상 보호의 가장 강한 수준을 보장받아야 합니다. 사용자 데이터 파일에 complete 보호 수준을 할당해야 하고, 앱 딜리게이트 메소드를 사용해서 해당 파일들에 대한 접근을 관리해야 합니다. 앱 딜리게이트 메소드는 앱에서 접근이 불가능한 상태가 되기 전에 파일을 닫을 수 있는 시간을 줄 것입니다.

See Also


Supporting Privacy

Requesting Access to Protected Resources

보호된 리소스에 대한 접근이 왜 필요한지 사용자에게 설명하는 목적 스트링을 제공합니다.

https://developer.apple.com/documentation/uikit/protecting_the_user_s_privacy/requesting_access_to_protected_resources
https://velog.io/@panther222128/Requesting-Access-to-Protected-Resources


0개의 댓글