0Pricing
Swift Academy · 강의

데이터 보호 및 암호화

파일을 보호하고 CryptoKit의 기초를 익힙니다.

데이터 보호 및 암호화은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

iOS의 데이터 보호

iOS는 기본적으로 디스크의 파일을 암호화하지만, 데이터 보호 클래스를 사용하여 파일 내용을 언제 해독할 수 있는지 선택할 수 있습니다. 이러한 클래스는 키체인 접근성 클래스가 비밀에 적용하는 것처럼 파일 접근을 기기의 잠금 상태에 연결합니다.

import Foundation
// File-level protection ties decryption to lock state.
// Set a protection class when writing sensitive files.

보호 클래스

주요 파일 보호 수준은 .complete(잠겨 있는 동안 읽을 수 없음), .completeUnlessOpen(잠길 때 이미 열려 있으면 계속 읽을 수 있음), .completeUntilFirstUserAuthentication(처음 잠금 해제한 후 읽을 수 있음) 및 .none입니다.

import Foundation
// FileProtectionType:
//   .complete
//   .completeUnlessOpen
//   .completeUntilFirstUserAuthentication (default)
//   .none
let level = FileProtectionType.complete
_ = level

보호된 파일 쓰기

쓰기 옵션에 .completeFileProtection을 전달하여 파일을 완전히 보호되는 상태로 표시합니다. 기기가 잠겨 있는 동안 OS는 자체 앱에서도 파일 내용에 접근할 수 없도록 합니다.

import Foundation
func writeSecure(_ data: Data, to url: URL) throws {
    try data.write(
        to: url,
        options: [.completeFileProtection])
}

기존 파일에 보호 설정하기

FileManager를 통해 FileAttributeKey.protectionKey 속성을 설정하면 파일을 만든 후에도 파일의 보호 수준을 변경할 수 있습니다. 다른 곳에서 받았거나 이전한 파일의 보호 수준을 강화할 때 유용합니다.

import Foundation
func protect(_ url: URL) throws {
    try FileManager.default.setAttributes(
        [.protectionKey: FileProtectionType.complete],
        ofItemAtPath: url.path)
}

앱 내 암호화를 위한 CryptoKit

직접 데이터를 암호화해야 할 때, 예를 들어 업로드하기 전이나 디스크 보호 위에 계층을 추가할 때는 CryptoKit을 사용하십시오. CryptoKit은 안전한 기본값을 사용하는 현대적이고 오용에 강한 암호화 기본 요소를 제공하며, AEAD 암호에서 IV를 수동으로 관리할 필요가 없습니다.

import CryptoKit
// CryptoKit offers hashing, symmetric & public-key
// crypto with safe, hard-to-misuse APIs.

SHA-256으로 해시하기

무결성 확인과 지문 생성을 위해 SHA256은 고정 크기의 다이제스트를 생성합니다. 해시는 단방향이며 암호화를 대신할 수 없다는 점에 유의하십시오. 솔트와 느린 KDF 없이 암호를 절대 해시하지 마십시오.

import CryptoKit
import Foundation
func fingerprint(_ data: Data) -> String {
    let digest = SHA256.hash(data: data)
    return digest.map { String(format: "%02x", $0) }
        .joined()
}

대칭 키

대칭 암호화는 하나의 공유 키를 사용합니다. SymmetricKey(size: .bits256)은 강력한 무작위 키를 생성합니다. 키는 키체인에 저장하고, 키가 보호하는 암호문과 함께 저장하지 마십시오.

import CryptoKit
let key = SymmetricKey(size: .bits256)
// Persist this key in the Keychain, not in a file.
_ = key

AES-GCM으로 암호화하기

AES.GCM은 인증된 암호화 방식으로, 데이터를 암호화하는 동시에 변조 여부를 감지합니다. seal은 암호문, 논스 및 인증 태그를 함께 묶은 봉인된 상자를 반환합니다.

import CryptoKit
import Foundation
func encrypt(_ data: Data, key: SymmetricKey)
    throws -> Data {
    let sealed = try AES.GCM.seal(data, using: key)
    return sealed.combined! // nonce + ciphertext + tag
}

복호화 및 검증하기

복호화하려면 결합된 데이터에서 SealedBox를 재구성하고 open을 호출하십시오. 암호문이나 태그가 변경되었다면 open은 오류를 발생시킵니다. 인증 태그가 무결성을 보장하므로 손상된 데이터가 조용히 복호화되는 일은 없습니다.

import CryptoKit
import Foundation
func decrypt(_ combined: Data, key: SymmetricKey)
    throws -> Data {
    let box = try AES.GCM.SealedBox(combined: combined)
    return try AES.GCM.open(box, using: key)
}

암호에서 키 도출하기

원시 암호를 키로 사용하지 마십시오. 엔트로피가 높은 입력에는 HKDF를 사용하고, 그렇지 않으면 암호 기반 KDF를 사용하여 키를 도출하십시오. CryptoKit의 HKDF는 키 자료를 확장하고 솔트를 적용하여 적절한 대칭 키로 변환합니다.

import CryptoKit
import Foundation
func deriveKey(from secret: Data, salt: Data)
    -> SymmetricKey {
    return HKDF<SHA256>.deriveKey(
        inputKeyMaterial: SymmetricKey(data: secret),
        salt: salt,
        outputByteCount: 32)
}

방어 계층화하기

강력한 앱은 여러 계층을 결합합니다. 데이터 보호는 잠금 상태에 연동하여 저장된 파일을 암호화하고, 키체인은 생체 인식 뒤에서 키를 보호하며, CryptoKit은 전송 중이거나 클라우드에 있는 데이터에 앱 수준 암호화를 추가합니다. 각 계층은 단독으로 실패해도 안전하게 작동합니다.

import CryptoKit
import Foundation
// 1. Key lives in Keychain (biometric-gated)
// 2. Plaintext file written with .completeFileProtection
// 3. Uploads encrypted with AES.GCM before leaving device
let layers = "defense in depth"
_ = layers

빠른 확인

앱 수준 암호화에 AES-GCM이 선호되는 이유를 떠올려 보십시오.

복습

데이터 보호와 암호화를 학습했습니다.

  • 파일 데이터 보호 클래스(.complete, .completeUntilFirstUserAuthentication)는 디스크 복호화 가능 여부를 기기 잠금 상태와 연결합니다.
  • CryptoKit은 SHA-256 해시, SymmetricKey 생성, 그리고 seal/open을 통한 AES-GCM 인증 암호화를 제공합니다.
  • HKDF로 키를 파생하고, 키는 암호문 옆이 아니라 키체인에 저장해야 합니다.
  • 심층 방어를 위해 데이터 보호, 키체인, CryptoKit을 계층적으로 적용합니다.

자주 묻는 질문

“데이터 보호 및 암호화” 강의는 무료인가요?

네 — “데이터 보호 및 암호화” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“데이터 보호 및 암호화”에서 뭘 배우나요?

파일을 보호하고 CryptoKit의 기초를 익힙니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Swift Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“데이터 보호 및 암호화” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 키체인에 비밀 정보 저장하기
  2. 키체인 접근 제어
  3. 생체 인증
  4. 데이터 보호 및 암호화
← Swift Academy(으)로 돌아가기