반응형
모바일 앱에서는 사용자 데이터를 안전하게 보호하기 위해 암호화가 필수적입니다. 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 프레임워크를 활용하여 강력한 암호화 기능을 구현할 수 있습니다.
반응형
'클라이언트' 카테고리의 다른 글
[Combine] Combine의 기본 개념 및 예제 (0) | 2025.02.16 |
---|---|
[iOS] iOS 앱 보안을 위한 최적화 방법 (0) | 2025.02.16 |
[iOS] UserDefaults 동작 방식과 보안 (0) | 2025.02.15 |
[iOS] 앱 성능 최적화 및 메모리 관리: ARC, 메모리 릭, Instruments 관련 (0) | 2025.02.15 |
[Swift] Swift6의 주요 내용 (0) | 2025.02.15 |