Swift ECB 암호화 모드 사용

ECB 암호화 모드 사용

설명

ECB 모드는 같은 키에서 같은 평문 블록이 항상 같은 암호문 블록으로 암호화되므로 데이터 패턴이 노출될 수 있습니다. 민감 데이터를 암호화할 때 ECB를 사용하면 재사용, 패턴 분석, 사전 공격 위험이 커집니다.

잠재적 영향

  • 암호문 패턴 노출
  • 반복 데이터 식별
  • 민감 데이터 복구 가능성 증가

해결 방법

  1. ECB 대신 AES-GCM 같은 인증 암호화 모드를 사용합니다.
  2. 기존 CBC를 유지해야 한다면 새 예측 불가능한 IV와 별도 키를 사용하는 encrypt-then-MAC을 적용하세요. CTR은 같은 키에서 메시지마다 고유한 nonce와 별도 무결성 보호가 필요합니다.
  3. 레거시 호환용 ECB는 보안 데이터 처리 경로와 분리합니다.

예시

변경 전

변경 전은 CryptoSwift 구성 발췌이며 키와 패딩이 준비되어 있다고 가정합니다. 변경 후는 CryptoKit의 SymmetricKey를 사용하는 별도 API입니다.

swift
let blockMode = ECB()
let aes = try AES(key: key, blockMode: blockMode, padding: padding)

변경 후

swift
import Foundation
import CryptoKit

func encryptAuthenticated(
    data: Data,
    key: SymmetricKey
) throws -> AES.GCM.SealedBox {
    return try AES.GCM.seal(data, using: key)
}

설명:

  • 변경 전: 같은 키를 사용하는 ECB는 같은 평문 블록을 같은 암호문 블록으로 바꾸어 패턴을 노출합니다.
  • 변경 후: CryptoKit의 AES-GCM으로 기밀성과 무결성을 함께 보호하고 nonce 생성도 검증된 API에 맡깁니다.

참조