[swift] Swift CryptoSwift로 비대칭 암호화된 데이터의 무결성 보장하기

비대칭 암호화는 암호화와 복호화에 사용되는 다른 키를 가지고 있는 암호화 방법입니다. 이를 사용하여 데이터를 암호화하면 데이터의 무결성을 보장할 수 있습니다. 이번에는 Swift 언어와 CryptoSwift 라이브러리를 사용하여 비대칭 암호화된 데이터의 무결성을 보장하는 방법을 알아보겠습니다.

CryptoSwift 라이브러리 설치하기

CryptoSwift는 Swift에서 암호화 관련 작업을 수행하기 위한 라이브러리입니다. 이 라이브러리를 사용하기 위해 먼저 프로젝트에 추가해야 합니다.

  1. 프로젝트의 Podfile에 다음과 같이 CryptoSwift를 추가합니다.
pod 'CryptoSwift'
  1. 터미널을 열고 프로젝트가 있는 디렉토리로 이동한 후 다음 명령어를 실행하여 라이브러리를 설치합니다.
pod install

비대칭 암호화된 데이터의 무결성 보장하기

  1. 비대칭 암호화된 데이터를 생성합니다.
import CryptoSwift

// 암호화할 데이터
let data = "Hello, World!".data(using: .utf8)!

// 개인 키 생성
let privateKey = try! RSA.Key.generate(bits: 2048).private

// 공개 키 생성
let publicKey = privateKey.publicKey

// 데이터 암호화
let encrypted = try! data.encrypt(cipher: RSA(publicKey: publicKey))
  1. 무결성을 보장하기 위해 HMAC을 사용하여 데이터에 서명을 추가합니다.
// HMAC 키 생성
let hmacKey = SymmetricKey(size: .bits256)

// 데이터에 서명 추가
let signedData = try! HMAC(key: hmacKey).authenticate(encrypted)

// 서명된 데이터를 전송 또는 저장합니다.
  1. 데이터의 무결성을 검증합니다.
// 저장된 서명된 데이터
let storedData: Data = ...

// 서명된 데이터에서 HMAC 서명과 암호화된 데이터를 추출합니다.
let hmacSig = storedData[..<256]
let encryptedData = storedData[256...]

// HMAC 서명을 검증합니다.
let isValid = try! HMAC(key: hmacKey).authenticate(encryptedData) == hmacSig

if isValid {
    // 데이터 무결성이 보장되었습니다.
    let decryptedData = try! encryptedData.decrypt(cipher: RSA(privateKey: privateKey))
    let decryptedString = String(data: decryptedData, encoding: .utf8)!
    print("Decrypted String: \(decryptedString)")  
} else {
  print("Data integrity compromised!")  
}

CryptoSwift를 사용하여 비대칭 암호화된 데이터의 무결성을 보장하는 방법을 알아보았습니다. 이를 통해 데이터를 안전하게 전송하고 저장할 수 있습니다.

참고 자료