App에서 정보를 저장하는 방식
- UserDefaults
- NSCache
- CoreData
- Server-side
- KeyChain
- FileManager
KeyChain
- Apple에서 제공하는 API Collection 중 하나
- 사용자 대신 Chunk Data를 안전하게 저장해주는 것
- → Chunk Data: 큰 데이터를 작은 조각으로 나눈 것
- 사용자의 온라인 계정의 고유 암호를 저장할 때, 간단한 암호를 재활용하는 경우가 있는데, 이는 보안상 안전하지 않은 방법
- KeyChain Service API는 암호화된 데이터 베이스에 사용자의 데이터를 저장하는 메커니즘을 제공하여 이 문제를 해결해줌
- → 암호를 안전하게 저장해준다면 사용자는 더이상 단순한 암호를 재활용하는 것이 아닌, 복잡한 암호를 선택하는 것이 가능해지기 때문임
- KeyChain Service는 단순 암호 뿐만 아니라 사용자의 여러 비밀 정보들을 저장할 수 있음
- 심지어 사용자가 인식하지 못하는 정보 또한 저장함
- iOS에서는 앱은 단일 키체인(iCloud 키체인 포함)에 접근할 수 있음
- 비동기로 처리해야함
- 사용자가 디바이스 잠금 해제하면 자동으로 같이 잠금 해제, 디바이스를 잠그면 자동으로 잠궈짐
- 엡을 삭제해도 정보가 남아 있음
- 앱은 키체인 혹은 앱이 속한 그룹과 공유된 항목에만 접근 가능하며, KeyChain 컨테이너는 직접 관리할 수 없음
Certificate, Key, and Trust Services API
- 안전하고 인증된 데이터 통신을 수행하는 데 사용하는 함수 및 데이터 구조의 컬렉션
- 이를 사용하여 보안 통신에 필요한 암호화 키 및 인증서를 관리하고, 다른 사용자와 장치를 신뢰할 수 있게 설정할 수 있음→ 인증서는 변조 방지 방식으로 소유자를 식별. 이를 사용하여 공개키를 배포하거나, 보안이 된 ID 객체에 private Key와 인증서를 함께 동봉가능→ 인증서에 동봉된 공개 키를 사용 시 “이 인증서를 신뢰할 수 있습니다?”라는 신뢰 정책을 따를지 결정→ 신뢰가능한 원본 키를 획득 시 이를 사용하여 암호화 작업을 할 수 있음
- → 암호화 작업으로 사용자를 인증하거나, 데이터를 안전하게 전송하거나, 서명으로 봉인된 데이터 블록이 변경되지는 않았는지를 확인하는 것들이 있음
- 암호화 키
- 정책 및 신뢰 서비스
- 인증서 및 ID 관리
Security Interface
- 사용자에게 인증서 및 신뢰 설정을 표시할 때와 사용자가 ID를 선택하거나 Keychian 설정을 수정할 때 일관된 환경을 보장해줌
Keychain Item
- KeyChain에 저장한 기밀 정보를 Keychain Item 패키지화하여 저장
- 기밀 정보는 공개된 속성과 함께 key-value 세트로 묶어서 기밀 정보에 대한 검색과 접근을 가능하게 함
- 하기 사진과 같이 KeyChain Service는 KeyChain에서 데이터 암호화 및 저장을 처리함
- 이때 KeyChain은 암호화된 데이터 베이스로서 디스크에 저장됨
- 인증된 프로세스는 KeyChain Service를 사용하여 해당 기밀 정보를 찾고 데이터의 암호 해독을 진행
Certificates
- 디지털 인증서를 관리
- → 디지털 인증서 : 한 쌍의 public/ private key를 절반을 공개적으로 배포하는데 사용되는 데이터 모음
- 인증서에는 발급자와 소유자의 이름, 연락처 정보, 인증서 유효 기간 및 소유자의 public Key가 포함
- extension은 Public Key의 사용 가능 여부와 같은 추가 정보 및 조건을 제공
- 인증서를 조합할 땐 무결성을 보증하기 위해 발급자는 발급자의 고유 ID를 사용하여 디지털 서명을 함
- 인증서 평가 시 지정 알고리즘을 통하여 발급자의 public key를 사용하여 서명을 확인
- 인증서 평가 과정에 있는 leaf certification(리프 인증서)는 유효한 서명을 통해 변경되지 않았음을 확인받음
- → 이때 발급자의 인증서를 신뢰할 수 있는 지 테스트하는 과정을 거쳐야 리프 인증서의 공개 키를 신뢰할 수 있으며, 해당 private key를 소유한 소유자가 인증서를 변경하지 않았음을 신뢰할 수 있음
Certificates Chain
- 인증서를 신뢰할 수 있도록 서명을 하며 만들어진 체인
- 일반적으로 3계층 : 인증서 - 중간 인증서 - Root 인증서로 구성
인증서(Leaf Certificate)
- HTTPS 서비스를 위하여 발급 받은 인증서
- 서비스가 올라간 서버에 적용
- 중간 인증서에 인증서 정보가 Hash된 값을 전달하여 서명(중간 인증서 서버 비공개키로 암호화) 요청
중간 인증서(Intermediate Certificate)
- Root 인증서에 의해 서명 된 상태
Root 인증서(Root Certificate)
- 중간 인증서를 서명해줌
- 본인의 서버 public key로 Self 서명 된 상태
- 브라우저들은 신뢰하는 Root 인증서 리스트를 가지고 있음
- 인증서에 따라 Self 서명이 아닌 다른 Root 인증서와 교차 서명하기도 함
인증 기관(Certificate Authoirty)
- 서명을 해주는 기관
출처 : 인증서 체인 🔗
key
- 암호화 키를 생성, 저장, 사용
- 암호화 키는 보안을 강화하기 위해 특수 수학 연산으로 데이터를 조합하는 바이트 문자열임
- 일반적으로 암호화 및 암호 해독, 디지털 서명 및 확인 시 사용되는 것
- → 안전하지 않은 채녈을 통해 데이터를 전송할 때 데이터를 암호화하여 전달하는데, 이때 사용
- 키는 지원하는 작업의 종류에 따라 성격이 달라지기도 함
- → 대칭 key를 사용하게 되면, 대칭 암호화를 수행함
- → 한 쌍의 public key와 private key를 사용하게 되면, 키는 비대칭 암호화를 수행함
대칭키 : 암호화, 복호화에 사용되는 키가 동일
비대칭키 : 암호화, 복호화에 사용되는 키가 다름
공개키 암호화 → 개인키 복호화 : 데이터를 안전하게 전송할 수 있는 보안 관점
개인키 암호화 → 공개키 복호화 : 신뢰할 수 있는 단체라는 것을 인증하는 관점
Identity
- 인증서와 암호화 키를 ID로 결합
- ID는 보증된 public key를 포함한 인증서와 함께 꾸려진 private key로 구성됨
- Certificate, Key, and Trust Services API를 사용하여 private key 및 인증서에 ID를 만들거나, 암호로 보호된 PKCS #12 파일에서 ID를 가져올 수 있음
- KeyChain에 ID를 저장하거나 검색할 수 있음
Policies
- trust 구축을 위한 정책
- 손상되지 않고 유효한 것으로 간주되는 인증서의 경우 신뢰 정책에 따라 평가됨
- → 신뢰 정책 : 인증서의 특정 field 또는 확장이 특정 용도에 대해 신뢰할 수 있는지 여부에 어떻게 영향을 미치는 지를 나타냄. ex) 인증서가 만료되지 않았는지, 암호화나 코드 서명 등에 유효한지의 여부를 정책에 명시
- 보통 이미 정의된 표준 정책을 사용(X509 policy, SSL policy)
- Certificate, Key, and Trust Services API를 사용하여 사용자 지정 정책을 생성할 수도 있음
Trust
- 지정된 Policies에 따라 trust 평가
- 인증서를 사용하기 전에 특정 목적에 대한 신뢰성을 평가함
- 인증서가 발신인으로 부터 변경되지 않은 상태로 제공되었다는 것을 아는 경우
- 인증서에 포함된 public key도 변경이 되지 않았다고 확신할 수 있음
- public key의 사용목적을 인증서에 기재된 내용대로 확신할 수 있음
참고링크
Certificate, Key, and Trust Services | Apple Developer Documentation
Keychains | Apple Developer Documentation
Keychain Items | Apple Developer Documentation
Preventing Insecure Network Connections | Apple Developer Documentation
Trust | Apple Developer Documentation
728x90
'학습활동' 카테고리의 다른 글
iOS FileSystem 실습 (0) | 2024.01.08 |
---|---|
APFS-iOS File System (0) | 2024.01.08 |
Swift Performance (2) (0) | 2023.12.11 |
Swift Performance (1) (0) | 2023.12.11 |
URL Loading System (0) | 2023.11.30 |