HEonGPU: GPU 기반 동형암호 라이브러리
요약
HEonGPU는 GPU의 병렬 처리 능력을 활용하여 완전 동형암호(FHE) 연산을 최적화한 고성능 라이브러리입니다. CUDA를 이용해 BFV, CKKS, TFHE 등 다양한 FHE 방식을 지원하며, 멀티스트림 아키텍처와 사용자 친화적인 C++ 인터페이스를 제공하여 대규모 암호화 연산의 성능과 효율성을 높였습니다.
핵심 포인트
- GPU 병렬 처리를 활용한 FHE 가속 라이브러리입니다.
- BFV, CKKS, TFHE 등 주요 FHE 방식을 지원합니다.
- 멀티스트림 아키텍처로 데이터 전송 오버헤드를 최소화했습니다.
- 집단 부트스트래핑 및 동형 부호 없는 산술을 추가 지원합니다.
🚀 HEonGPU - GPU 기반 동형암호(Homomorphic Encryption) 라이브러리
HEonGPU는 GPU에서 완전 동형암호(Fully Homomorphic Encryption, FHE) 연산을 최적화하도록 설계된 고성능 라이브러리입니다. GPU의 병렬 처리 능력을 활용하여 복잡한 연산들을 동시에 실행함으로써 FHE의 계산 부하를 크게 줄입니다. 이 라이브러리의 멀티스트림 아키텍처는 효율적인 병렬 처리를 가능하게 하고, CPU와 GPU 간 데이터 전송 오버헤드를 최소화합니다. 이러한 특징들 덕분에 HEonGPU는 대규모 암호화 연산에 이상적이며, 지연 시간 감소와 성능 향상을 제공합니다.
HEonGPU의 목표는 다음과 같습니다:
- CUDA의 병렬 처리 기능을 활용하여 FHE 방식인
BFV,CKKS, 그리고TFHE를 실행하기 위한 고성능 프레임워크 제공. - GPU 프로그래밍에 대한 사전 지식이 필요 없는 사용자 친화적인 C++ 인터페이스 제공. 모든 CUDA 커널은 사용하기 쉬운 클래스 안에 캡슐화됩니다.
- 효율적인 메모리 관리와 GPU 상에서 암호화 연산의 동시 실행을 보장하는 최적화된 멀티스트림 아키텍처 제공.
HEonGPU에 대한 더 많은 정보:
현재 HEonGPU의 기능 및 방식
<div align="center">| 기능 / 방식 | HEonGPU |
|---|---|
| BFV | ✓ |
| ... |
뉴스
🚨 새로운 기능: 집단(분산) 부트스트래핑
HEonGPU 라이브러리는 이제 BFV와 CKKS 모두에 대해 Collective Bootstrapping을 제공합니다. 이는 Mouchet et al. 및 Balle et al.에 의해 소개된 설계를 기반으로 합니다. 간소화된 CUDA 경로는 공유 생성(share creation)과 재암호화(re-encryption)를 단일 실행(single launch)으로 통합하여, 깊은 다자간 워크로드(deep multi-party workloads)가 노이즈 초기화를 위해 멈출 필요 없이 GPU 상에서 완전히 계속 실행되도록 합니다.
🚨 새로운 방식: TFHE (Torus Fully Homomorphic Encryption)
HEonGPU 라이브러리가 이제 GPU 가속을 지원하는 TFHE (Torus Fully Homomorphic Encryption) 방식을 포함합니다. 이를 통해 빠른 게이트 부트스트래핑(gate bootstrapping)과 저지연 병렬 실행을 사용하여 현대의 CUDA 지원 GPU에서 불리언 회로를 효율적으로 평가할 수 있습니다.
현재 구현은 128비트 보안을 목표로 하는 고정 파라미터 세트를 지원합니다. 향후 출시에서는 다음 기능을 계획하고 있습니다:
- 파라미터를 완전히 구성 가능하게 만들기,
- 128비트, 192비트, 및 256비트 보안 수준에 대한 기본 파라미터 세트 제공.
- 개선된 CUDA 커널과 병렬성 전략을 통해 TFHE 구현을 더욱 최적화하고 가속화하기,
- 새로운 타입(
huint8,huint16,huint32,huint64,huint128, 및huint256)을 통해 **동형 부호 없는 산술(homomorphic unsigned arithmetic)**에 대한 네이티브 지원 도입.
| uint8 | uint16 | uint32 | uint64 | uint128 | uint256 | |
|---|---|---|---|---|---|---|
| TFHE-rs | 31.53 | 31.54 | 31.55 | 32.03 | 33.74 | 58.32 |
| ... |
표: STD128 파라미터 세트를 기반으로 TFHE-rs, 문헌(Literature), 그리고 HEonGPU 간의 다양한 비트 크기에서의 지연 시간(Latency) 비교 (GPU 기준).
모든 벤치마크는 NVIDIA RTX 4090 GPU에서 수행되었습니다.
마지막 두 행은 TFHE-rs와 문헌(Literature) 대비 HEonGPU의 속도 향상률을 보여줍니다.
🚨 새로운 기능: 직렬화 모듈 (Serialization Module)
새로운 직렬화(serializer) 모듈이 HEonGPU에 성공적으로 통합되었습니다. 이 모듈은 동형암호 객체(Context, Secretkey, Publickey, Relinkey, Galoiskey, Plaintext, Ciphertext 등)를 원시 바이너리 또는 선택적 Zlib-압축 형식으로 고성능 직렬화 및 역직렬화를 제공합니다. 이 개선 사항은 매우 빠른 디스크 I/O, 끊김 없는 클라이언트-서버 전송, 그리고 최대 60%의 저장 공간 및 대역폭 감소를 가능하게 합니다.
🚨 새 기능: [RNGonGPU] 통합
RNGonGPU가 HEonGPU에 성공적으로 통합되었습니다. RNGonGPU는 NIST의 Deterministic Random Bit Generators를 사용한 난수 생성 권고안에 따라 설계된 안전한 Deterministic Random Bit Generator (DRBG) 기능을 제공합니다. 이 통합은 GPU 기반의 난수 생성을 향상시켜 높은 성능과 강력한 보안을 모두 보장합니다.
🚨 새 애플리케이션: GPU에서의 개인 정보 검색(Private Information Retrieval, PIR) ([PIRonGPU])
PIRonGPU는 Private Information Retrieval (PIR)을 통해 GPU에서 안전한 데이터 검색 기능을 향상시키는 고성능 라이브러리입니다. HEonGPU를 사용하여 SealPIR 프로토콜을 수정함으로써, 신속하고 기밀성이 유지되는 쿼리를 달성하며 개인 정보에 민감한 애플리케이션을 위한 효율적이고 확장 가능한 솔루션을 제공합니다.
🚨 **새 기능: 논리 연산 및 3가지 추가 CKKS 부트스트래핑 유형
HEonGPU는 이제 BFV와 CKKS 암호화 방식 모두에서 논리 연산(logic operations)에 대한 포괄적인 지원을 제공합니다. 또한, 최신 업데이트를 통해 세 가지 새로운 CKKS Bootstrapping 유형이 도입되었습니다. 이 중 두 가지는 Bit Bootstrapping과 Gate Bootstrapping 기술을 활용하며, 나머지 하나는 Regular Bootstrapping보다 훨씬 효율적인 방법인 Slim Bootstrapping을 사용합니다. 이러한 개선 사항들은 HEonGPU의 기능을 확장할 뿐만 아니라, 노이즈 관리 및 GPU 플랫폼에서의 효율적이고 안전한 계산을 가능하게 함으로써 성능도 크게 향상시킵니다.
지원되는 논리 연산:
- NOT, AND, NAND, OR, NOR, XOR, XNOR
3가지 추가 CKKS Bootstrapping 유형:
SlimBootstrapping (실수(Real Numbers)만 지원)BitBootstrapping (이진수(Binary Numbers)만 지원)GateBootstrapping (이진수(Binary Numbers)만 지원)- AND, NAND, OR, NOR, XOR, XNOR
HEonGPU Bootstrapping 연산 실행 시간 비교 (RTX 4090 기준)
<table> <tr> <th>Bootstrapping 유형</th> <th>N</th> <th>Slot 개수</th> <th>남은 레벨</th> <th>총 시간</th> <th>평균 시간</th> <th>정밀도 (bits)</th> </tr> <tr> <td rowspan="1"><b>Regular Bootstrapping</b></td> <td>2<sup>16</sup></td> <td>2<sup>15</sup></td> <td>9 Level</td> <td>109.28 ms</td> <td>3.33 µs</td> <td>17.95</td> </tr> <tr> <td rowspan="3"><b>Slim Bootstrapping</b></td> <td>2<sup>16</sup></td> <td>2<sup>15</sup></td> <td>0 Level</td> <td>38.55 ms</td> <td>1.18 µs</td> <td>20.47</td> </tr> <tr> <td>2<sup>16</sup></td> <td>2<sup>15</sup></td> <td>9 Level</td> <td>70.59 ms</td> <td>2.15 µs</td> <td>20.47</td> </tr> <tr> <td>2<sup>16</sup></td> <td>2<sup>15</sup></td> <td>15 Level</td> <td>94.58 ms</td> <td>2.89 µs</td> <td>20.47</td> </tr> <tr> <td rowspan="2"><b>Bit Bootstrapping</b></td> <td>2<sup>16</sup></td>HEonGPU 부트스트래핑 연산 실행 시간 (RTX 5090 기준)
<table> <tr> <th>부트스트래핑 유형</th> <th>N</th> <th>슬롯 개수</th> <th>남은 레벨</th> <th>총 시간</th> <th>평균 시간</th> <th>정밀도 (비트)</th> </tr> <tr> <td rowspan="1"><b>일반 부트스트래핑 (Regular Bootstrapping)</b></td> <td>2<sup>16</sup></td> <td>2<sup>15</sup></td> <td>9 Level</td> <td>63.51 ms</td> <td>1.94 µs</td> <td>17.94</td> </tr> <tr> <td rowspan="3"><b>슬림 부트스트래핑 (Slim Bootstrapping)</b></td> <td>2<sup>16</sup></td> <td>2<sup>15</sup></td> <td>0 Level</td> <td>23.92 ms</td> <td>0.73 µs</td> <td>20.47</td> </tr> <tr> <td>2<sup>16</sup></td> <td>2<sup>15</sup></td> <td>9 Level</td> <td>40.03 ms</td> <td>1.22 µs</td> <td>20.48</td> </tr> <tr> <td>2<sup>16</sup></td> <td>2<sup>15</sup></td> <td>15 Level</td> <td>56.45 ms</td> <td>1.72 µs</td> <td>20.58</td> </tr> <tr> <td rowspan="2"><b>비트 부트스트래핑 (Bit Bootstrapping)</b></td> <td>2<sup>16</sup></td> <td>2<sup>15</sup></td> <td>0 Level</td> <td>35.70 ms</td> <td>1.09 µs</td> <td>27.40</td> </tr> <tr> <td>2<sup>16</sup></td> <td>2<sup>15</sup></td> <td>8 Level</td> <td>52.13 ms</td> </tr> </table> <table> <tr> <td>1.59 µs</td> <td>27.40</td> </tr> <tr> <td rowspan="2"><b>게이트 부트스트래핑*</b></td> <td>2<sup>16</sup></td> <td>2<sup>15</sup></td> <td>0 Level</td> <td>40.35 ms</td> <td>1.23 µs</td> <td>27.67</td> </tr> <tr> <td>2<sup>16</sup></td> <td>2<sup>15</sup></td> <td>7 Level</td> <td>59.50 ms</td> <td>1.82 µs</td> <td>27.67</td> </tr> </table>Dense 비밀 키 (h=192)와 임시 희소 비밀 키 (h=32)를 사용했으며, 5회 실행의 중앙값입니다. 남은 레벨(Remaining Level)은 다음 부트스트래핑 전까지 남아 있는 레벨 수입니다.
- : 타이밍은 모든 게이트에 대한 것이며, 정밀도는 AND 예제를 사용하여 측정되었습니다.
🚨 새 기능: CKKS 정규 부트스트래핑
HEonGPU는 이제 CKKS Regular Bootstrapping 지원을 포함하여 높은 정밀도와 보안성을 갖춘 깊은 계산 회로의 효율적인 평가를 가능하게 합니다. NVIDIA RTX 4090에서 N=65536에 대한 CKKS 정규 부트스트래핑을 약 110 ms 만에 수행합니다.
🚨 새 기능: 다자간 계산 (MPC) 지원
HEonGPU는 이제 다자간 계산 (Multiparty Computation, MPC) 프로토콜 지원을 포함하여 암호화된 계산을 위한 안전하고 협력적인 프레임워크를 제공합니다. 다자간 동형 암호화 (Multi-party Homomorphic Encryption, MHE) 기능을 통합함으로써, 이 라이브러리는 N-out-of-N과 같은 임계값 암호화 모델을 가진 분산 계산을 가능하게 합니다. 구현은 GPU 환경에 완벽하게 최적화되어 협업 환경에서 최소 지연 시간과 최대 성능을 제공합니다.
설치
요구 사항
외부 의존성(Third-Party Dependencies)
HEonGPU는 GPU-NTT, GPU-FFT, RMM, GoogleTest와 같은 외부 의존성을 자동으로 처리합니다. 기본 CUDA 아키텍처는 80;86;89;90입니다. 필요한 경우 -D CMAKE_CUDA_ARCHITECTURES=<...>로 재정의할 수 있습니다.
빌드 및 설치(Build & Install)
HEonGPU를 빌드하고 설치하려면 아래 단계를 따르세요. 여기에는 CMake를 사용하여 프로젝트를 구성하고, 소스 코드를 컴파일하며, 라이브러리를 시스템에 설치하는 과정이 포함됩니다.
<div align="center">| GPU 아키텍처 | 컴퓨팅 능력 (CMAKE_CUDA_ARCHITECTURES 값) |
|---|---|
| Volta | 70, 72 |
| ... |
$ cmake -S . -B build -D CMAKE_BUILD_TYPE=Release
$ cmake --build ./build/
$ sudo cmake --install build
사용 가능한 빌드 유형: Debug, Release (기본값), RelWithDebInfo, MinSizeRel. -D CMAKE_BUILD_TYPE=<유형>으로 재정의할 수 있습니다. 이 설정은 모든 번들된 라이브러리(GPU-FFT, GPU-NTT, RNGonGPU)에 전파됩니다.
제거(Uninstall)
HEonGPU와 외부 라이브러리를 제거하려면:
$ cd build
$ sudo make uninstall
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub GameDev의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기