본문 바로가기

학습활동

KeyChain

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

UserDefaults | Apple Developer Documentation

대칭키 / 비대칭키 양방향 암호화 기법

[week14] KeyChain

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