[swift] Swift CryptoSwift로 비대칭 암호화를 통한 안전한 파일 저장하기

지금은 모든 종류의 데이터가 디지털 형태로 저장되는 시대입니다. 그러나 이러한 편리함은 동시에 보안 위험을 야기할 수 있습니다. 개인정보나 중요한 파일들이 외부로 유출될 경우 큰 문제가 발생할 수 있습니다. 이러한 문제를 해결하기 위해 암호화 기술이 사용되고 있습니다.

Swift에서는 CryptoSwift 라이브러리를 활용하여 간단하게 비대칭 암호화를 통한 안전한 파일 저장 기능을 구현할 수 있습니다. 비대칭 암호화는 공개키와 개인키를 사용하여 암호화와 복호화를 처리하는 방식입니다.

이제 CryptoSwift를 사용하여 Swift에서 안전한 파일 저장을 구현하는 방법을 알아보겠습니다.

CryptoSwift 설치하기

먼저 CryptoSwift를 Swift 프로젝트에 추가해야 합니다. CocoaPods를 사용하여 CryptoSwift를 설치하려면 Podfile에 다음과 같이 추가합니다:

pod 'CryptoSwift', '~> 1.4.0'

추가한 후 터미널에서 pod install을 실행하여 종속성을 설치합니다.

또는 Swift 패키지 매니저를 사용하여 CryptoSwift를 설치할 수도 있습니다. 프로젝트 디렉토리에서 다음 명령을 실행하세요:

swift package init --type executable
echo "import PackageDescription
let package = Package(
    name: \"YourPackageName\",
    dependencies: [
        .package(url: \"https://github.com/krzyzanowskim/CryptoSwift.git\", from: \"1.4.0\"),
    ],
    targets: [
        .target(
            name: \"YourTarget\",
            dependencies: [\"CryptoSwift\"]),
    ]
)
" > Package.swift
swift build

CryptoSwift를 설치했다면 이제 비대칭 암호화를 통한 파일 저장 기능을 구현할 준비가 되었습니다.

비대칭 암호화를 통한 파일 저장

다음은 파일을 암호화하여 안전하게 저장하는 예제 코드입니다.

import Foundation
import CryptoSwift

// 비대칭 키 생성
guard let privateKey = try? CC.RSA.generatePrivateKey(keySizeInBits: 2048) else {
    fatalError("Failed to generate private key")
}

let publicKey = CC.RSA.getPublicKey(fromPrivateKey: privateKey)

// 암호화할 데이터
let dataToEncrypt = "This is a secret message".data(using: .utf8)!

// 데이터 암호화
let encryptedData = try! CC.RSA.encrypt(dataToEncrypt, publicKey: publicKey)

// 복호화할 때 사용할 비밀키 저장
let encryptedPrivateKey = try! JSONEncoder().encode(privateKey)
let encryptedPrivateKeyURL = FileManager.default.temporaryDirectory.appendingPathComponent("private_key.json")
try! encryptedPrivateKey.write(to: encryptedPrivateKeyURL)

// 암호화된 데이터와 비밀키 저장
let encryptedDataURL = FileManager.default.temporaryDirectory.appendingPathComponent("encrypted_data")
try! encryptedData.write(to: encryptedDataURL)

print("Data encrypted and saved successfully.")

이 예제 코드에서는 CryptoSwift의 RSA 기능을 사용하여 비대칭 암호화를 수행합니다. 우선 비대칭 키를 생성한 다음, 암호화할 데이터를 준비합니다. 데이터를 암호화한 후 암호화된 데이터를 파일에 저장하고, 복호화할 때 사용할 비밀키도 따로 저장합니다.

파일 복호화

다음은 저장된 암호화된 데이터를 복호화하는 예제 코드입니다.

import Foundation
import CryptoSwift

// 암호화된 데이터와 비밀키 불러오기
let privateKeyURL = FileManager.default.temporaryDirectory.appendingPathComponent("private_key.json")
let encryptedDataURL = FileManager.default.temporaryDirectory.appendingPathComponent("encrypted_data")

let encryptedPrivateKey = try! Data(contentsOf: privateKeyURL)
let encryptedData = try! Data(contentsOf: encryptedDataURL)

// 비밀키 복구
let privateKey = try! JSONDecoder().decode(CC.RSA.PrivateKey.self, from: encryptedPrivateKey)

// 데이터 복호화
let decryptedData = try! CC.RSA.decrypt(encryptedData, privateKey: privateKey)

// 복호화된 데이터 출력
if let decryptedText = String(data: decryptedData, encoding: .utf8) {
    print("Decrypted data: \(decryptedText)")
} else {
    print("Failed to decrypt data")
}

위 예제 코드에서는 저장된 암호화된 데이터와 비밀키를 불러온 후, 비밀키를 복구합니다. 그런 다음 비밀키를 사용하여 데이터를 복호화하고, 복호화된 데이터를 출력합니다.

결론

Swift CryptoSwift를 활용하여 비대칭 암호화를 통한 안전한 파일 저장 기능을 구현하는 방법에 대해 알아보았습니다. 이를 통해 프로젝트에서 중요한 데이터를 안전하게 보호할 수 있습니다. CryptoSwift의 다른 암호화 기능도 활용하여 추가적인 보안 기능을 구현할 수 있습니다.

참고 문서: CryptoSwift GitHub 페이지