# Swift, Homomorphic Encryption(동형 암호화) 패키지 공개

> Clean Markdown view of GeekNews topic #16112. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=16112](https://news.hada.io/topic?id=16112)
- GeekNews Markdown: [https://news.hada.io/topic/16112.md](https://news.hada.io/topic/16112.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-08-01T08:37:32+09:00
- Updated: 2024-08-01T08:37:32+09:00
- Original source: [swift.org](https://www.swift.org/blog/announcing-swift-homomorphic-encryption/)
- Points: 12
- Comments: 1

## Summary

Swift의 새로운 오픈소스 패키지 `swift-homomorphic-encryption`은 데이터를 복호화하지 않고도 연산할 수 있는 동형 암호화 기술을 제공합니다. 이 패키지는 클라우드 서비스에서 사용자 데이터의 프라이버시와 보안을 보호하며, Apple의 iOS 18 기능인 Live Caller ID Lookup에 적용되어 실용성을 입증했습니다.

## Topic Body

- 새 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 문제 기반  
  
#### 동형 암호화 사용 예시  
  
- 다양한 프라이버시 보호 애플리케이션에 유용  
- 예시 코드:  
  ```swift  
  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 등이 있음

## Comments



### Comment 27725

- Author: neo
- Created: 2024-08-01T08:37:32+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=41111129) 
- 전화번호 조회는 동형 암호화가 실제로 작동하지 않는 교과서적인 예시임
- 동형 암호화는 시뮬레이션을 접근할 수 없는 평행 우주로 이동시키는 것처럼 흥미로움
- FHE에 관심 있는 사람은 최근 실용적인 FHE를 만든 Zama.ai를 확인해야 함
- 이는 HE의 첫 번째 실제 사용 사례일 것임. 일반적으로 너무 느려서 유용하지 않다고 여겨졌지만, 이는 훌륭한 사용 사례임
- 이는 장기적으로 매우 중요한 발표임, 즉각적으로 느껴지지는 않을 것임
  - 이는 AI와 PII 관련 사용 사례에 대한 대규모 발표임
- Zama.ai의 FHE와 비교하면 어떨지 궁금함
- FHE는 멋지지만 실제로 얼마나 많은 사용 사례에 적합한지 궁금함. 사용자에게 더 나은 보안 보장을 제공하지만, 조직이 클라우드에서 안전한 실행 환경을 약속한다고 해서 사용자가 정말로 신경 쓸까?
  - 또한 엔지니어링 관점에서 FHE를 사용하려면 흐름을 리팩토링하고 모든 다운스트림 처리를 고정적으로 약속해야 함. 법률이 이를 의무화하지 않는다면 조직이 충분한 동기를 가질까?
- 이름이 웃김, 왜냐하면 HME는 여러 차원에서 전혀 빠르지 않음
  - 진정한 해결책은 보안 인클레이브라고 생각하지만, 그것도 어려움이 있음
- FHE에 대해 항상 알고 싶은 점: 현대 암호화의 금본위는 IND-CCA 보안임. FHE는 정의상 그 기준을 충족할 수 없음 (암호문을 변경하여 평문에 예측 가능한 영향을 미치는 것이 선택 암호문 공격의 정의임). 그래서 현대 FHE 스킴은 얼마나 가까운가? 즉, FHE의 장점을 얻기 위해 얼마나 많은 보안을 희생하는가?
- 서버가 키를 알지 못한 채 암호문을 값과 일치시킬 수 있는 방법을 이해하지 못함. 서버가 암호문이 특정 값에 해당한다고 어떻게 결정하는가? 서버가 이 암호문-값 데이터베이스를 구성하면, 값을 암호문으로 만들고 저장하는 데 어떤 알고리즘을 사용해야 하는지 어떻게 아는가?
