[swift] Swift를 사용한 암호화 기술

암호화는 개인 정보와 기밀 데이터를 보호하기 위해 중요한 요소입니다. Swift 언어는 iOS 및 macOS 애플리케이션 개발에 널리 사용되는 언어이며, 데이터를 암호화하여 보호하는 기술을 제공합니다. 이 글에서는 Swift를 사용하여 데이터를 안전하게 암호화하는 방법을 알아보겠습니다.

1. AES (Advanced Encryption Standard)

AES는 현재 가장 일반적으로 사용되는 대칭키 암호화 알고리즘입니다. Swift에서 AES를 사용하기 위해 CryptoKit 프레임워크를 사용할 수 있습니다. CryptoKit은 iOS 13 이상에서 사용할 수 있으며, AES256 암호화를 지원합니다.

import CryptoKit

func encryptData(data: Data, key: SymmetricKey) throws -> Data {
    let sealedBox = try AES.GCM.seal(data, using: key)
    return sealedBox.combined
}

func decryptData(data: Data, key: SymmetricKey) throws -> Data {
    let sealedBox = try AES.GCM.SealedBox(combined: data)
    return try AES.GCM.open(sealedBox, using: key)
}

let key = SymmetricKey(size: .bits256)
let dataToEncrypt = "Hello, World!".data(using: .utf8)!
let encryptedData = try encryptData(data: dataToEncrypt, key: key)
let decryptedData = try decryptData(data: encryptedData, key: key)

위의 코드에서 encryptData 함수는 데이터를 암호화하고, decryptData 함수는 암호화된 데이터를 복호화합니다. SymmetricKey는 암호화 및 복호화에 사용되는 키입니다.

2. RSA (Rivest-Shamir-Adleman)

RSA는 공개키 암호 시스템으로, 대칭키 알고리즘에 비해 안전한 키 교환을 위해 사용됩니다. Swift에서 RSA를 사용하기 위해 Security 프레임워크를 사용할 수 있습니다.

import Security

func encryptDataWithPublicKey(data: Data, publicKey: SecKey) throws -> Data {
    var error: Unmanaged<CFError>?
    guard let encryptedData = SecKeyCreateEncryptedData(publicKey, .rsaEncryptionOAEPSHA256, data as CFData, &error) as Data? else {
        throw error!.takeRetainedValue() as Error
    }
    return encryptedData
}

func decryptDataWithPrivateKey(data: Data, privateKey: SecKey) throws -> Data {
    var error: Unmanaged<CFError>?
    guard let decryptedData = SecKeyCreateDecryptedData(privateKey, .rsaEncryptionOAEPSHA256, data as CFData, &error) as Data? else {
        throw error!.takeRetainedValue() as Error
    }
    return decryptedData
}

let publicKey: SecKey = ... // 공개키
let privateKey: SecKey = ... // 개인키
let dataToEncrypt = "Hello, World!".data(using: .utf8)!
let encryptedData = try encryptDataWithPublicKey(data: dataToEncrypt, publicKey: publicKey)
let decryptedData = try decryptDataWithPrivateKey(data: encryptedData, privateKey: privateKey)

위의 코드에서 encryptDataWithPublicKey 함수는 공개키를 사용하여 데이터를 암호화하고, decryptDataWithPrivateKey 함수는 개인키를 사용하여 암호화된 데이터를 복호화합니다. RSA 암호화에서는 공개키와 개인키 쌍을 사용하여 암호화와 복호화를 수행합니다.

3. HTTPS 통신

데이터를 네트워크를 통해 안전하게 전송하기 위해 HTTPS (HyperText Transfer Protocol Secure)를 사용할 수 있습니다. Swift에서는 URLSession을 사용하여 HTTPS 통신을 수행할 수 있습니다.

import Foundation

func performRequest(url: URL) {
    let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
        if let error = error {
            print("Error: \(error)")
        } else if let data = data {
            // 데이터를 받아와서 처리
        }
    }
    task.resume()
}

let url = URL(string: "https://example.com")!
performRequest(url: url)

위의 코드에서 URLSession을 사용하여 HTTP 요청을 보내고 응답을 처리합니다. HTTPS를 사용하면 데이터가 암호화되어 전송되므로, 중간에 데이터를 가로채더라도 내용을 알아볼 수 없습니다.

참고 자료