클라이언트

[iOS][Swift] iOS Swift에서 사용할 수 있는 암호화 방식

애기공룡훈련병 2025. 2. 16. 06:11
반응형

모바일 앱에서는 사용자 데이터를 안전하게 보호하기 위해 암호화가 필수적입니다. iOS에서는 다양한 암호화 기술을 제공하며, Swift에서 이를 쉽게 활용할 수 있습니다. 이번 글에서는 iOS에서 사용할 수 있는 대표적인 암호화 기법과 예제 코드를 함께 살펴보겠습니다.

 

1. 암호화의 기본 개념

암호화는 데이터를 안전하게 보호하기 위한 과정으로, 크게 대칭 키 암호화비대칭 키 암호화로 나뉩니다.

1) 대칭 키 암호화 (Symmetric Encryption)

  • 하나의 키를 사용하여 데이터를 암호화 및 복호화
  • 속도가 빠르고 효율적
  • 키가 노출될 경우 보안 위협 발생
  • 대표적인 알고리즘: AES (Advanced Encryption Standard)

2) 비대칭 키 암호화 (Asymmetric Encryption)

  • 공개 키(Public Key)와 개인 키(Private Key)를 사용
  • 데이터 암호화에는 공개 키, 복호화에는 개인 키 사용
  • 보안성이 뛰어나지만 속도가 느림
  • 대표적인 알고리즘: RSA (Rivest-Shamir-Adleman)

3) 해시 함수 (Hashing)

  • 데이터 무결성을 확인하기 위한 암호화 방식
  • 암호화된 결과값(해시 값)은 복호화가 불가능
  • 대표적인 알고리즘: SHA (Secure Hash Algorithm)
  • https://terry-some.tistory.com/139
 

2. iOS에서 사용할 수 있는 암호화 기법

1) AES (Advanced Encryption Standard)

AES는 대칭 키 암호화 방식으로, iOS에서는 CommonCrypto 프레임워크를 사용하여 구현할 수 있습니다.

AES 암호화 예제 (Swift)

import CommonCrypto
import Foundation

class AESUtil {
    static func encrypt(data: Data, key: Data, iv: Data) -> Data? {
        return crypt(data: data, key: key, iv: iv, operation: kCCEncrypt)
    }
    
    static func decrypt(data: Data, key: Data, iv: Data) -> Data? {
        return crypt(data: data, key: key, iv: iv, operation: kCCDecrypt)
    }
    
    private static func crypt(data: Data, key: Data, iv: Data, operation: Int) -> Data? {
        let keyLength = kCCKeySizeAES256
        let options: CCOptions = kCCOptionPKCS7Padding
        
        var numBytesEncrypted: size_t = 0
        let bufferSize = data.count + kCCBlockSizeAES128
        var buffer = Data(count: bufferSize)
        
        let cryptStatus = buffer.withUnsafeMutableBytes { bufferPtr in
            data.withUnsafeBytes { dataPtr in
                key.withUnsafeBytes { keyPtr in
                    iv.withUnsafeBytes { ivPtr in
                        CCCrypt(CCOperation(operation), CCAlgorithm(kCCAlgorithmAES), options,
                                keyPtr.baseAddress, keyLength,
                                ivPtr.baseAddress,
                                dataPtr.baseAddress, data.count,
                                bufferPtr.baseAddress, bufferSize,
                                &numBytesEncrypted)
                    }
                }
            }
        }
        
        guard cryptStatus == kCCSuccess else { return nil }
        return buffer.prefix(numBytesEncrypted)
    }
}

2) RSA (Rivest-Shamir-Adleman)

RSA는 비대칭 키 암호화 방식으로, iOS에서는 Security 프레임워크를 사용하여 구현할 수 있습니다.

RSA 키 생성 및 암호화 예제

import Security
import Foundation

class RSAUtil {
    static func generateKeyPair() -> (SecKey?, SecKey?) {
        let attributes: [String: Any] = [
            kSecAttrKeyType as String: kSecAttrKeyTypeRSA,
            kSecAttrKeySizeInBits as String: 2048
        ]
        
        var publicKey: SecKey?
        var privateKey: SecKey?
        
        let status = SecKeyGeneratePair(attributes as CFDictionary, &publicKey, &privateKey)
        
        guard status == errSecSuccess else {
            return (nil, nil)
        }
        
        return (publicKey, privateKey)
    }
}

3) SHA (Secure Hash Algorithm)

SHA는 데이터 무결성을 확인하는 데 사용되는 해시 함수입니다.

SHA-256 해싱 예제

import CommonCrypto
import Foundation

func sha256(data: Data) -> String {
    var hash = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))
    data.withUnsafeBytes { buffer in
        _ = CC_SHA256(buffer.baseAddress, CC_LONG(data.count), &hash)
    }
    return hash.map { String(format: "%02x", $0) }.joined()
}
 

3. 정리

  • AES: 대칭 키 암호화로 빠르고 효율적
  • RSA: 비대칭 키 암호화로 보안성이 뛰어남
  • SHA: 데이터 무결성을 확인하는 해시 함수

iOS에서는 CommonCrypto, Security 프레임워크를 활용하여 강력한 암호화 기능을 구현할 수 있습니다. 

반응형