[swift] CryptoSwift를 사용한 앱 데이터 보호를 위한 데리베이션 키 생성 방법

이번 블로그 포스트에서는 CryptoSwift라는 오픈 소스 라이브러리를 사용하여 iOS 앱의 데이터를 보호하기 위해 데리베이션 키를 생성하는 방법에 대해 설명하겠습니다.

1. CryptoSwift 라이브러리 추가하기

CryptoSwift는 Swift로 작성된 암호화 및 해시 라이브러리로, CocoaPods 또는 Swift Package Manager를 통해 프로젝트에 추가할 수 있습니다.

CocoaPods를 사용한다면, Podfile에 다음과 같이 추가하고 설치합니다.

pod 'CryptoSwift'

Swift Package Manager를 사용한다면, Xcode 프로젝트의 File -> Swift Packages -> Add Package Dependency를 선택하고, https://github.com/krzyzanowskim/CryptoSwift.git를 입력하여 패키지를 추가합니다.

2. 데리베이션 키 생성하기

CryptoSwift를 사용하여 데리베이션 키를 생성하는 방법을 살펴보겠습니다.

import CryptoSwift

// 입력 값으로 사용할 패스워드
let password = "MySecretPassword"
// 솔트 값
let salt = "MySaltValue"
// 데리베이션 횟수
let iterations = 100000

// 데리베이션 키 생성
guard let derivedKey = try! PKCS5.PBKDF2(password: Array(password.utf8), salt: Array(salt.utf8), iterations: iterations, keyLength: 32, variant: .sha256).calculate() else {
    fatalError("Failed to derive key")
}

위 코드에서 password에는 사용할 패스워드를, salt에는 랜덤한 솔트 값을, iterations에는 데리베이션 횟수를 설정합니다. keyLength는 생성할 데리베이션 키의 길이를 나타냅니다.

데리베이션 키 생성은 높은 수준의 보안을 제공하기 위해 계산량을 증가시키는 작업입니다. 데리베이션 횟수를 늘리면 보다 안전한 키를 생성할 수 있지만, 계산량이 많아질 수 있으므로 적절한 값으로 설정해야 합니다.

3. 암호화에 데리베이션 키 사용하기

데리베이션 키를 생성한 후에는 해당 키를 암호화 작업에 사용할 수 있습니다. 다음은 AES 암호화를 예시로 들어보겠습니다.

import CryptoSwift

let plaintext = "MySecretData"
let iv = "MyInitializationVector"

// 데리베이션 키를 사용하여 AES 암호화 키 생성
let aes = try! AES(key: derivedKey, blockMode: CBC(iv: Array(iv.utf8)), padding: .pkcs7)

// 암호화
let ciphertext = try! aes.encrypt(Array(plaintext.utf8))

// 복호화
let decrypted = try! aes.decrypt(ciphertext)

print("Ciphertext: \(ciphertext)")
print("Decrypted: \(String(bytes: decrypted, encoding: .utf8)!)")

위 코드에서 plaintext에는 암호화할 평문, iv에는 초기화 벡터 값을 설정합니다. derivedKey는 이전 단계에서 생성한 데리베이션 키입니다.

AES 암호화의 경우, 생성된 데리베이션 키를 사용하여 암호화 키를 생성한 뒤, 해당 키로 암호화 작업을 수행합니다. 마지막으로, 암호문을 복호화하여 원래의 평문을 얻을 수 있습니다.

마무리

이번 포스트에서는 CryptoSwift를 사용하여 iOS 앱의 데이터 보호를 위해 데리베이션 키를 생성하는 방법을 소개했습니다. 데리베이션 키 생성 후 암호화 작업에 사용하여 데이터를 안전하게 관리할 수 있습니다.

더 자세한 내용은 CryptoSwift GitHub 저장소를 참고하시기 바랍니다.