- 새 Swift 오픈소스 패키지인
swift-homomorphic-encryption
공개 - 동형 암호화(HE)는 암호화된 데이터를 복호화하지 않고도 연산할 수 있는 암호화 기술
- 클라이언트가 암호화된 데이터를 서버에 보내고, 서버는 이를 연산하여 결과를 반환
- 서버는 원본 데이터를 복호화하거나 복호화 키에 접근하지 않음
- 클라우드 서비스에서 사용자 데이터의 프라이버시와 보안을 보호하는 새로운 기회 제공
Apple의 활용 사례
- iOS 18의 새로운 기능인 Live Caller ID Lookup에 동형 암호화 사용
- Live Caller ID Lookup은 암호화된 쿼리를 서버에 보내 전화번호에 대한 정보를 제공
- 서버는 요청의 특정 전화번호를 알지 못함
-
live-caller-id-lookup-example
패키지를 통해 기능 테스트 가능
주요 기능
- Swift on Server, Hummingbird HTTP 프레임워크 및 크로스 플랫폼 지원
- Benchmark 라이브러리를 통한 쉬운 벤치마킹
- Swift Crypto의 성능 좋은 저수준 암호화 프리미티브
Private Information Retrieval (PIR)
- Live Caller ID Lookup은 Private Information Retrieval(PIR)에 의존
- 클라이언트가 서버에 키워드를 보내고 관련 값을 검색
- 서버가 키워드를 알지 못하도록 구현
- 동형 암호화를 사용하여 대규모 데이터베이스를 효율적으로 처리
동형 암호화
- 동형 암호화는 복호화 없이 암호화된 데이터에 연산 가능
- 일반적인 워크플로우:
- 클라이언트가 민감한 데이터를 암호화하여 서버에 전송
- 서버는 암호문에 대해 연산 수행
- 서버는 결과 암호문을 클라이언트에 전송
- 클라이언트는 결과를 복호화
- Brakerski-Fan-Vercauteren (BFV) HE 스킴 구현
- BFV는 양자 저항성을 가진 RLWE 문제 기반
동형 암호화 사용 예시
- 다양한 프라이버시 보호 애플리케이션에 유용
- 예시 코드:
import HomomorphicEncryption // Bfv 체계에 대한 몇 가지 암호화 파라미터를 선택하는 것으로 시작 // *이 암호화 파라미터는 안전하지 않으며 테스트용으로만 적합* let encryptParams = try EncryptionParameters(from: .insecure_n_8_logq_5x18_logt_5) // 매개변수를 사용하여 HE 계산을 위한 사전 계산을 수행 let context = try Context(encryptionParameters: encryptParams) // Coefficient 인코딩을 사용하여 N 값을 인코딩 let values: [UInt64] = [8, 5, 12, 12, 15, 0, 8, 5] let plaintext: Bfv.CoeffPlaintext = try context.encode(values: values, format: .coefficient) // 비밀 키를 생성하고 이를 사용하여 일반 텍스트를 암호화 let secretKey = try context.generateSecretKey() let ciphertext = try plaintext.encrypt(using: secretKey) // 일반 텍스트를 해독하면 원래 값을 얻을 수 있음 let decrypted = try ciphertext.decrypt(using: secretKey) let decoded: [UInt64] = try decrypted.decode(format: .coefficient) precondition(decoded == values)
GN⁺의 정리
- 동형 암호화는 데이터 프라이버시를 보호하면서 클라우드 서비스의 새로운 가능성을 열어줌
- Apple의 iOS 18 기능에 적용되어 실용성을 입증
- Swift 커뮤니티에서 다양한 프라이버시 보호 애플리케이션 개발 가능
- 유사한 기능을 제공하는 다른 프로젝트로는 Microsoft SEAL, IBM HELib 등이 있음
Hacker News 의견
- 전화번호 조회는 동형 암호화가 실제로 작동하지 않는 교과서적인 예시임
- 동형 암호화는 시뮬레이션을 접근할 수 없는 평행 우주로 이동시키는 것처럼 흥미로움
- FHE에 관심 있는 사람은 최근 실용적인 FHE를 만든 Zama.ai를 확인해야 함
- 이는 HE의 첫 번째 실제 사용 사례일 것임. 일반적으로 너무 느려서 유용하지 않다고 여겨졌지만, 이는 훌륭한 사용 사례임
- 이는 장기적으로 매우 중요한 발표임, 즉각적으로 느껴지지는 않을 것임
- 이는 AI와 PII 관련 사용 사례에 대한 대규모 발표임
- Zama.ai의 FHE와 비교하면 어떨지 궁금함
- FHE는 멋지지만 실제로 얼마나 많은 사용 사례에 적합한지 궁금함. 사용자에게 더 나은 보안 보장을 제공하지만, 조직이 클라우드에서 안전한 실행 환경을 약속한다고 해서 사용자가 정말로 신경 쓸까?
- 또한 엔지니어링 관점에서 FHE를 사용하려면 흐름을 리팩토링하고 모든 다운스트림 처리를 고정적으로 약속해야 함. 법률이 이를 의무화하지 않는다면 조직이 충분한 동기를 가질까?
- 이름이 웃김, 왜냐하면 HME는 여러 차원에서 전혀 빠르지 않음
- 진정한 해결책은 보안 인클레이브라고 생각하지만, 그것도 어려움이 있음
- FHE에 대해 항상 알고 싶은 점: 현대 암호화의 금본위는 IND-CCA 보안임. FHE는 정의상 그 기준을 충족할 수 없음 (암호문을 변경하여 평문에 예측 가능한 영향을 미치는 것이 선택 암호문 공격의 정의임). 그래서 현대 FHE 스킴은 얼마나 가까운가? 즉, FHE의 장점을 얻기 위해 얼마나 많은 보안을 희생하는가?
- 서버가 키를 알지 못한 채 암호문을 값과 일치시킬 수 있는 방법을 이해하지 못함. 서버가 암호문이 특정 값에 해당한다고 어떻게 결정하는가? 서버가 이 암호문-값 데이터베이스를 구성하면, 값을 암호문으로 만들고 저장하는 데 어떤 알고리즘을 사용해야 하는지 어떻게 아는가?