[ios] 공개키 및 비밀키
iOS 앱을 보호하고 사용자 데이터를 보안하기 위해 공개키 및 비밀키를 사용할 수 있습니다. 이러한 키는 데이터를 암호화하고 복호화하기 위해 사용됩니다.
공개키 및 비밀키란 무엇인가요?
공개키는 데이터를 암호화하기 위해 사용되며, 암호화된 데이터를 복호화하는 데 사용되지 않습니다. 비밀키는 공개키로 암호화된 데이터를 복호화하는 데 사용됩니다.
iOS에서 공개키 및 비밀키 사용하기
iOS에서 공개키 및 비밀키를 사용하려면 다음과 같은 단계를 따릅니다.
- 키 페어 생성
- 키 저장
- 암호화 및 복호화
1. 키 페어 생성
import Security
func generateKeyPair() throws -> SecKey {
let parameters: [String: Any] = [
kSecAttrKeyType: kSecAttrKeyTypeRSA,
kSecAttrKeySizeInBits: 2048,
]
var publicKey, privateKey: SecKey?
let status = SecKeyGeneratePair(parameters as CFDictionary, &publicKey, &privateKey)
guard status == errSecSuccess else { throw KeyGenerationError.keyGenerationFailed }
return publicKey!
}
2. 키 저장
func saveKeyInKeychain(key: SecKey, tag: String) {
let query: [String: Any] = [
kSecClass: kSecClassKey,
kSecAttrApplicationTag: tag,
kSecValueRef: key
]
let status = SecItemAdd(query as CFDictionary, nil)
guard status == errSecSuccess else { throw KeyStoreError.keyStoreFailed }
}
3. 암호화 및 복호화
func encryptData(data: Data, publicKey: SecKey) throws -> Data {
let blockSize = SecKeyGetBlockSize(publicKey)
var encryptedData = [UInt8](repeating: 0, count: blockSize)
var encryptedDataLength = blockSize
let status = SecKeyEncrypt(publicKey, .PKCS1, data, data.count, &encryptedData, &encryptedDataLength)
guard status == errSecSuccess else { throw EncryptionError.encryptionFailed }
return Data(bytes: encryptedData, count: encryptedDataLength)
}
func decryptData(data: Data, privateKey: SecKey) throws -> Data {
let blockSize = SecKeyGetBlockSize(privateKey)
var decryptedData = [UInt8](repeating: 0, count: blockSize)
var decryptedDataLength = blockSize
let status = SecKeyDecrypt(privateKey, .PKCS1, data, data.count, &decryptedData, &decryptedDataLength)
guard status == errSecSuccess else { throw DecryptionError.decryptionFailed }
return Data(bytes: decryptedData, count: decryptedDataLength)
}
위의 예제에서는 iOS 앱에서 공개키 및 비밀키를 생성하고 키체인에 저장하는 방법을 설명했습니다.
이러한 기술은 앱의 보안을 강화하는 데 도움이 될 수 있습니다.
참고 자료
- Apple Developer Documentation - Keychain Services
- Apple Developer Documentation - Cryptographic Services