안녕하세요. brody입니다.
이번 블로그에서는 2020/08/02 - [공부/iOS] - iOS - Requesting Access to Protected Resources(보호 자원에 대한 액세스 요청)에 글에 이어서 앱 파일 암호화 문서에 대해서 알아볼게요
애플 문서 원문은 아래에서 확인하실 수 있어요.
글이 길지 않으니 가벼운 마음으로 한번 볼게요 ~
그럼 바로 시작할게요!
Encrypting Your App’s Files(앱 파일 암호화)
디스크에서 암호화하여 iOS의 사용자 데이터를 보호합니다.
OverView
데이터 보호는 앱 파일을 보호하고 무단 액세스를 방지하기 위해 사용하는 iOS 기능입니다.
사용자가 장치의 활성 암호화를 설정할 때 데이터 보호가 자동으로 활성화됩니다.
사용자는 파일을 정상적으로 읽고 쓰지만 시스템은 뒤에서 콘텐츠를 암호화 및 해독합니다.
암호화 및 암호 해독 프로세스가 자동으로 수행되고 하드웨어가 가속화됩니다.
각 파일에 적용할 데이터 보호 수준을 지정할 수 있습니다.
사용 가능한 4가지 레벨이 있으며, 각 레벨은 파일에 액세스 할 수 있는 시기를 결정합니다.
파일을 만들 때 보호 수준을 지정하지 않으면 iOS는 기본 보호 수준을 자동으로 적용합니다.
- No protection
이 파일은 항상 액세스 가능합니다. - Complete until first user authentication(Default)
사용자가 처음으로 device 잠금을 해제 할 때까지 파일에 액세스 할 수 없습니다.
device를 처음 잠금 해제 한 후에는 장치가 종료되거나 재부팅 될 때까지 파일에 액세스 할 수 있습니다. - Complete unless open
device가 잠금 해제 된 경우에만 기존 파일을 열 수 있습니다.
파일이 이미 열려 있는 경우 사용자가 device를 잠근 후에도 해당 파일에 계속 액세스 할 수 있습니다.
device가 잠겨 있거나 잠금 해제되어 있는 동안 새 파일을 만들어 액세스 할수있습니다.
(이게 무슨 소리지... 잠금해제 된 경우에만 기존 파일을 열 수 있는데 마지막에는 잠겨있거나 잠금 해제되어 있는 경우에도 가능하다니..?
다른곳 가서 검색해보니 잠금을 해제하고 파일을 열어놓은 경우 계속 액세스가 가능하다는거 같아요! 틀리면 댓글 부탁드려요) - Completedevice에 잠금이 해제된 경우에만 파일에 액세스 할 수 있습니다.
한번에 새 파일을 만들고 암호화하려면 파일 내용으로 데이터 오브젝트를 구성하고 write(to:options:) method를 사용하세요.
메소드를 호출할 때 파일에 적용할 데이터 보호 옵션을 지정할 수 있습니다.
아래의 Listing 1에서는 데이터 인스턴스의 컨텐츠를 파일에 기록하고 complete 보호 레벨을 사용하여 암호화하는 방법을 보여주는 예시입니다.
기존 파일의 데이터 보호 수준을 변경하려면 NSURL 클래스의 setResourceValue(_:forKey:) 메소드를 사용하면 됩니다.
이 메소드를 호출할 때 새 데이터 보호 옵션을 fileProtectionKey 리소스 키에 할당합니다.
아래의 Listing 2에는 이 키를 기존 파일에 추가하는 예제가 있습니다.
Manage Your Access to Encrypted Files(암호화된 파일에 대한 액세스 관리)
파일 보호 수준에 따라 사용자가 나중에 device를 잠글 때 내용을 읽거나 쓰려는 시도가 실패 할 수 있습니다.
(위의 Complete는 디바이스가 잠기면 액세스 접근할수 없다고 하는데 그거 같아요!)
앱이 파일에 액세스할 수 있도록 하려면 다음을 수행하십시오.
- 필요에 적합한 데이터 보호 수준을 선택해야 합니다
- app delegate에 applicationProtectedDataWillBecomeUnavailable(_:) 및 applicationProtectedDataDidBecomeAvailable(_:) 메소드를 사용하여 complteFileProtection 레벨으로 파일을 닫았다가 다시 여십시오.
앱이 포그라운드에 있을때만 액세스하는 파일에는 complete 보호 수준을 할당하십시오.
(디바이스가 잠기면 complete일때 파일에 액세스가 불가능하니까 포그라운드에서만 액세스 가능한 파일이겠죠?)
앱이 위치 업데이트 처리와 같은 백그라운드 기능을 지원하는 경우 백그라운드에서 액세스 할 수 있게 다른 보호 수준을 할당해야 합니다.
예를들어, 피트니스 앱은 백그라운드에서 위치 이벤트를 기록하는데 사용하는 파일에서는 보호 수준을 complete unless open로 사용해야 합니다.
사용자에 대한 개인 정보가 들어있는 파일이나 사용자가 직접 만든 파일은 항상 가장 강력한 보호 수준을 보장합니다.
사용자 데이터 파일에 complete 보호 수준을 할당하고 app delegate method을 사용하여 해당 파일에 대한 액세스를 관리해야 합니다.
app delegate method를 사용하면 파일을 앱에 액세스 할 수 없게되기 전에 파일을 닫을 수 있습니다.
이번 시간에는 간단하게 앱 파일 암호화에 대해서 알아는데요.
아직 초반 문서라 그런지 엄청 자세하게 나와있지는 않네요.
그냥 애플은 파일을 암호화해줘서 보안에 신경을 쓰는구나...
암호화하는 방법이 4가지 정도 있구나~
파일을 만들때 암호화 방법과 수정할때 암호화 방법이 다르구나~
정도로 가볍게 알고 있으면 되겠네요... 아마 나중에 더 깊게 다루어볼거 같은 느낌이 납니다 ㅋㅋ
그럼 오늘은 여기까지~
ㅅㄱㄹ!