[ios] 공개키 및 비밀키

iOS 앱을 보호하고 사용자 데이터를 보안하기 위해 공개키 및 비밀키를 사용할 수 있습니다. 이러한 키는 데이터를 암호화하고 복호화하기 위해 사용됩니다.

공개키 및 비밀키란 무엇인가요?

공개키는 데이터를 암호화하기 위해 사용되며, 암호화된 데이터를 복호화하는 데 사용되지 않습니다. 비밀키는 공개키로 암호화된 데이터를 복호화하는 데 사용됩니다.

iOS에서 공개키 및 비밀키 사용하기

iOS에서 공개키 및 비밀키를 사용하려면 다음과 같은 단계를 따릅니다.

  1. 키 페어 생성
  2. 키 저장
  3. 암호화 및 복호화

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 앱에서 공개키 및 비밀키를 생성하고 키체인에 저장하는 방법을 설명했습니다.

이러한 기술은 앱의 보안을 강화하는 데 도움이 될 수 있습니다.

참고 자료