ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [iOS] Certificate & Provisioning
    야매 iOS 2023. 8. 7. 07:20

    사전 지식

    비대칭키 암호화

    Public key로 암호화 하면 Private key로 복호화한다.

    iOS 개발에서 자주 사용하는 비대칭키 암호화 방식은

    1. RSA
    2. ECDSA

    암호화 해시 함수

    메시지를 받아 해시 함수를 거치면 고정된 길이의 변환된 텍스트(digest)가 생성된다

    one way function

    • 암호화된 텍스트 복호화 안됨

    original digest와 생성한 digest를 비교해서 변조됐는지 알 수 있다.

    전자서명

    전자서명을 통해 메시지가 믿을 만한 사람으로부터 생성되고 메시지가 변조되지 않았다는 것을 알 수 있다

    → 문서 또는 메시지를 믿을 수 있는지 (믿을 만한 사람 & 내용 변조 ㄴ)

    위에 두 기술을 사용해 전자 서명 생성할 수 있다.

    전자 서명은 비대칭키 암호화와 다르게 private key로 암호화 하고 public key로 복호화 한다.

    전자 서명 플로우

    1. 메시지에 해시 함수를 적용해 digest를 생성한다.
      → digest를 사용해 signature를 생성하는 것이 전체 메시지를 사용하는 것보다 효율적이다
    2. Private key를 사용해 digest를 암호화 하고 signature를 생성한다
      → sigining
    3. Receiver에게 signature, public key 그리고 메시지를 전달한다.
    4. Receiver는 메시지에 해시 함수를 적용해 digest를 생성한다
    5. public key를 사용해 signature를 복호화해 Sender가 생성한 digest를 얻는다
    6. Receiver가 생성한 digest와 Sender가 생성한 digest를 비교해서 똑같은지 확인한다.

    애플리케이션이 실행되기 위한 플로우

    1. Xcode 설치
    2. Apple Developer 계정
    3. App ID 생성 (다른 앱과 구분 지을 수 있는 identifier)
      • Apple Developer Website에서 생성
      • 필요한 capability 활성화
    4. 인증서 생성
      • app을 sign 할 수 있게 DevelopmentDistribution 인증서 생성
    5. Provisioning Profile 생성
      • 어느 기기에서 앱을 실행할 것인지, 어느 인증서를 사용해 앱을 sign 할 것인지 app의 entitlement 등에 대한 정보
    6. 현재 환경설정에 맞는 provisioning profile 선택
    7. 컴파일하고 실행

    Code Signing

    sign한 이후 앱의 변조된 내용이 없다는 것을 보증한다.

    💡 기기에 앱을 설치하기 전에, 앱 스토어에 제출하기 전에 애플에서 발급한 인증서를 통해 sign해야 한다.
    사전 지식에 있는 전자 서명처럼 코드 서명

    iOS 앱과 전자 서명

    iOS 앱 개발에서 메시지는 전체 앱 코드

    Xcode가 코드를 sign하고 App Store에 제출 또는 다른 기기에 배포한다(TestFlight)

    하지만 다른 사람들이 public key, 메시지, signature를 생성할 수 있으므로 public key가 믿을 수 있는 사람으로부터 받았는지를 알기 위해 전자 인증서를 사용한다.

    Certificate

    Public Key Certificate(digital certificate)는 public key의 유효성을 증명할 수 있다.

    CA에서 제공받은 digital certificate로 신원을 확인한다.

    인증서는 유효 기간을 가지며 그 시간이 지나면 인증서로서 기능할 수 없다.

    Certificate 종류

    Development Certificates

    개발과 테스트할 때 사용

    • 개발자가 설치하고 디바이스에서 실행할 수 있도록 함

    Distribution Certificates

    배포할 때 사용

    • AppStore에 제출 또는 TestFlight

    기타 타입

    https://en.wikipedia.org/wiki/Public_key_certificate

    인증서 구성 요소

    인증서의 여러 포맷이 존재하지만 그 중 iOS 개발에서 가장 많이 사용되는건 .cer과 .p12

    cer

    X.509 포맷 인증서

    Apple Developer Website에서 다운로드를 받을 때 얻는 인증서 타입

    구성품

    • public key
      • sign된 앱을 복호화해서 앱의 무결성을 확인할 때 사용
      • private key는 주로 키체인에 저장된다.
    • Information
      • 앱 정보 또는 개발자 저오
    • 전자 사명
      • CA에서 얻으며 인증서가 믿을만 하다는 것을 입증한다.

    p12

    PKCS #12 포맷 인증서

    private key와 X.509 인증서를 포함한다

    • Xcode에서 인증서를 생성하거나 누군가 키체인에서 인증서를 추출해 공유할 때 이 포맷 형태를 띈다.

    Certificate Authority (CA)

    CA는 인증서를 관리하는 기관

    iOS 개발자의 인증서는 end-entity certificate 또는 leaf certificate

    • Apple Worldwide Developer Relations Certifications Authority(AppleWWDRCA)에서 발급 받음

    AppleWWDRCA

    Apple Root CA가 발행한 intermediate certificate

    개발자가 제출한 앱의 signature를 입증할 때 사용

    • Xcode를 설치할 때 자동으로 사용된다.

    Apple Root CA

    iPhone, MAC 또는 다른 애플 기기에 디폴트로 있는 최상위 CA

    인증 플로우

    각 Certificate가 상위 node의 sign을 받아 마지막 노드에서 sign을 받으면서 인증 절차를 수행한다.

    → Chain of trust

    1. signature은 private key를 이용해 sign 된다.
      • CA의 public key를 사용해 복호화 한 결과로 owner의 public key와 정보를 얻을 수 있다.
    2. 인증서에 있는 정보가 1 단계에서 얻은 정보와 같은지 비교한다.
      • 만약 같다면 인증서는 믿을 만한 소스에서 받아온 것이고 public key도 믿을 만하다.

    이 과정을 통해 owner의 public key가 공인되었다는 정보를 얻을 수 있다.

    하지만 이때까지의 정보로 코드 서명이 인가 된 사람은 누구인지, 누가 다운로드 받을 수 있는지는 알 수 없다.

    이러한 정보를 provisoning profile에 저장되어 있으며 archive할 때 같이 패키징 된다.

    Provisioning Profile

    Provisioning Profile은 pList

    • 개발과 배포에 필요한 config 정보를 갖는다

    Flow

    1. Xcode는 App ID, entitlements 그리고 인증서가 provisioing profile과 일치하는 지 확인한다.
    2. archive할 때 Xcode는 .ipa 파일 내부에 provisioing profile을 포함한다.
      • iOS 기기는 앱의 config가 provisioning profile과 일치하는지 확인한다.
    3. App Store에 앱 제출했을 때 App Store는 앱이 제대로 sign되었는지 그리고 config가 provisioning profile과 일치하는지 확인한다.

    Development Provisioning Profile

    • 테스트 기기에 개발 앱 설치 가능하도록 함
    • 설치할 수 있는 기기 리스트를 가짐
    • 여러 개발 인증서 포함

    Distribution Provisioing Profile

    전체 프로세스

     

    '야매 iOS' 카테고리의 다른 글

    [Swift] Copy on Write  (0) 2023.08.07
    [iOS/Swift] SwiftUI 계산기  (0) 2023.08.07
    [Swift] some & any  (0) 2023.08.07
    [Swift] Protocol Oriented Programming  (0) 2023.08.07
    [iOS/Swift] @StateObject vs @ObservedObject  (0) 2023.08.07
Designed by Tistory.