[swift] Swift에서 키체인을 사용하여 암호화된 파일 액세스하기

앱에서 암호화된 파일을 안전하게 저장하고 액세스해야 하는 경우가 있습니다. 이를 위해 Swift에서 Keychain 서비스를 사용할 수 있습니다. Keychain은 iOS 기기의 보안 저장소로 사용되며, 중요한 데이터를 안전하게 보호하는 역할을 합니다.

Keychain 서비스 설정

먼저 Keychain 서비스를 사용하려면 앱의 Capabilities 설정에서 Keychain Sharing을 활성화해야 합니다. 이를 위해 다음 단계를 따릅니다:

  1. Xcode에서 프로젝트를 열고, 앱의 타겟을 선택합니다.
  2. 탭 바에서 “Signing & Capabilities”를 선택합니다.
  3. “Capabilities” 섹션에서 “Keychain Sharing”을 활성화합니다.
  4. Keychain 그룹 설정을 위해 “Add Keychain Groups” 버튼을 클릭하고 고유한 그룹 식별자를 추가합니다.

Keychain 서비스에 파일 저장하기

키체인을 사용하여 파일을 저장하는 방법은 다음과 같습니다:

import Foundation
import Security

func saveFileToKeychain(fileData: Data, identifier: String) -> OSStatus {
    let query: [String: Any] = [
        kSecClass as String: kSecClassGenericPassword,
        kSecAttrGeneric as String: identifier,
        kSecAttrAccount as String: identifier,
        kSecAttrService as String: identifier,
        kSecValueData as String: fileData
    ]

    let status = SecItemAdd(query as CFDictionary, nil)
    return status
}

위의 코드에서 saveFileToKeychain 함수는 Keychain에 파일을 저장하는 역할을 합니다. 함수는 파일 데이터와 식별자를 매개변수로 받으며, 저장 결과를 OSStatus로 반환합니다.

Keychain 서비스에서 파일 가져오기

저장된 파일을 Keychain에서 가져오기 위해서는 다음과 같이 코드를 작성할 수 있습니다:

import Foundation
import Security

func getFileFromKeychain(identifier: String) -> Data? {
    let query: [String: Any] = [
        kSecClass as String: kSecClassGenericPassword,
        kSecAttrGeneric as String: identifier,
        kSecAttrAccount as String: identifier,
        kSecAttrService as String: identifier,
        kSecReturnData as String: kCFBooleanTrue!,
        kSecMatchLimit as String: kSecMatchLimitOne
    ]

    var result: AnyObject?
    let status = SecItemCopyMatching(query as CFDictionary, &result)

    if status == errSecSuccess, let data = result as? Data {
        return data
    } else {
        return nil
    }
}

getFileFromKeychain 함수는 Keychain에서 파일 데이터를 가져옵니다. 함수는 식별자를 매개변수로 받고, 가져온 데이터를 Data로 반환합니다. 가져오는 동안 오류가 발생하거나 해당하는 데이터가 없는 경우 nil을 반환합니다.

결론

Swift에서 Keychain 서비스를 사용하여 암호화된 파일을 안전하게 저장하고 액세스할 수 있습니다. Keychain은 중요한 데이터의 보안을 제공하므로 암호화된 파일 처리에 사용할 수 있습니다.