main: Build and Test
development: Build and Test
Intel Homomorphic Encryption (HE) 가속 라이브러리 for FPGA <br>
Intel:registered: HE Acceleration Library for FPGAs는 Intel FPGAs에서 동형 암호화(homomorphic encryption) 원시 구현을 제공하는 오픈 소스 라이브러리입니다. Intel HE Acceleration Library for FPGAs는 일반적으로 40~60비트의 워드 크기 소수(word-sized primes)를 갖는 정수 산술을 목표로 합니다. Intel HE Acceleration Library for FPGAs는 64비트 부호 없는 정수용 API를 제공하며 Intel FPGA를 대상으로 합니다.
목차 (Contents)
⚠️ [IMG:N]
소개
많은 암호화 응용 프로그램, 특히 동형암호(HE)는 유한체(finite field)에서의 정수 다항식 산술에 의존합니다. 암호화된 데이터 위에서 계산을 가능하게 하는 HE는 일반적으로 차수가 $N$: 2의 거듭제곱이며 대략 범위가 $N=[2^{10}, 2^{14}]$인 다항식을 사용합니다. 이 다항식들의 계수는 단어 크기(word-sized) 소수 $p$를 가진 유한체에 속하며, 최대 $p ext{~} 62$ 비트입니다. 더 정확하게 말하면, 다항식들은 링 $ ext{Z}_p[X]/(X^N + 1)$에 존재합니다. 즉, 두 다항식을 더하거나 곱할 때, 결과의 각 계수는 소수 모듈로 $p$로 축소됩니다. 두 다항식을 곱할 때는, 차수 $2N$인 결과 다항식이 $ ext{X}^N+1$로 나누었을 때의 나머지 값을 취하여 추가적으로 축소됩니다.
많은 HE 애플리케이션에서 주요 병목 현상은 $\text{Z}_p[X]/(X^N + 1)$에서의 다항식-다항식 곱셈입니다. Intel HE Acceleration Library for FPGAs는 다항식 곱셈을 가속화하기 위한 기본 원시 요소(basic primitives)의 실험적 구현을 제공합니다. 저희는 이 기본 원시 요소를 Apache 2.0 오픈 소스 라이선스로 소스 코드로 배포하여, 개발자와 커뮤니티가 다항식 곱셈을 실험할 수 있도록 합니다.
암호문 재선형화(Ciphertext relinearization)와 회전(rotation)은 계산 집약적인 키 스위치(keyswitch) 연산을 필요로 합니다. Intel HE Acceleration Library에서는 키 스위치를 가속화하기 위한 효율적인 FPGA 커널 구현을 포함하며, 다양한 다항식 크기 및 분해된 모듈러스 크기 구성을 지원합니다.
Intel HE Acceleration Library for FPGAs는 다항식 곱셈에 일반적으로 사용되는 음이차원 수론 변환(negacyclic number-theoretic transform, NTT)을 구현합니다. 또한, 이진수 곱셈 알고리즘(dyadic multiplication algorithms)을 사용하여 대체적인 다항식 곱셈도 제공합니다. $\text{NTT}$를 사용하여 두 다항식 $p_1(x), p_2(x)$를 곱하려면, 두 입력 다항식에 대해 순방향 수론 변환(forward number-theoretic transform)을 수행한 다음, 요소별 모듈러 곱셈을 수행하고, 그 결과에 대해 역수론 변환(inverse number-theoretic transform)을 수행합니다.
요약하자면, Intel HE Acceleration Library for FPGAs는 다음과 같은 기능을 구현합니다:
- 이진수 곱셈 (Dyadic multiplication)
- 키 스위치 (KeySwitch)
- 순방향 및 역방향 음이차원 수론 변환 ($ ext{NTT}$)
Intel HE Acceleration Library for FPGAs의 함수들이 정확성을 보장하기 위해 다음 구성들을 지원합니다. Dyadic multiplication은 1024, 2048, 4096, 8192, 16384, 그리고 32768의 암호문 다항식 크기를 지원합니다. Keyswitch는 1024, 2048, 4096, 8192, 16384의 암호문 다항식 크기, 최대 7 이하의 분해된 모듈러스 크기, 그리고 모든 암호문 모듈러스가 52비트를 초과하지 않도록 지원합니다. 독립적인 forward 및 inverse negacyclic number-theoretic transform 함수는 16384의 암호문 다항식 크기를 지원합니다.
각 함수에 대해 라이브러리는 Intel(R) oneAPI를 사용하여 FPGA 구현을 제공합니다.
참고: 이 배포판은 연구원, 개발자 및 커뮤니티가 기본적인 원시 요소(primitives)로 실험할 수 있도록 FPGA 커널 소스 코드에 접근하는 것을 목표로 합니다.
참고: 이 배포판은 dyadic multiplication과 keyswitch를 포함하여 FPGAs에서 실행하기 위한 고성능 커널을 제공합니다. 해당 커널과 호스트 런타임은 호스트와 FPGA 카드 간의 배치(batching) 및 스트리밍을 지원합니다. Intel Homomorphic Encryption Library for FPGAs는 연구원, 개발자 및 커뮤니티가 호스트 API를 통해 타사 동형 암호화 라이브러리에 연결하여 일반적인 동형 암호화 연산을 가속화할 수 있도록 합니다.
참고: 이 배포판은 dyadic multiplication과 keyswitch를 하나의 파일에 구현하는 실험적 통합 커널을 제공합니다. 또한 편의를 위해 단일 함수만을 구현한 커널도 제공합니다. 이러한 FPGA 커널들은 서로 독립적으로 작동하며, 즉 하나가 다른 것을 사용할 필요는 없습니다. 개별 커널들은 단일 원시 요소에 대한 테스트 및 실험을 가능하게 합니다. 예를 들어, forward NTT와 inverse NTT 커널은 오직 실험 및 기능 테스트용입니다.
환경 설정
이 코드를 사용하려면 전제 조건으로 Intel PAC D5005 PCIe 카드와 그 소프트웨어 스택인 Intel Acceleration Stack을 설치해야 합니다. 여기에는 Quartus Prime, Intel FPGA SDK 및 Intel PAC D5005 보드 소프트웨어 패키지가 포함됩니다. 자세한 내용은 PREREQUISITE.md를 참조하십시오. 이미 PCIe 카드를 설치하고 상기 언급된 소프트웨어를 설치했다면 아래 링크의 절차는 건너뛰어도 됩니다. <br>
FPGA PAC D5005 보드 소프트웨어 패키지의 설치 지침은 다음 링크에서 찾을 수 있습니다: <br>
Hardware/Software Installation link
위 링크에 명시된 대로 Hello FPGA 테스트 코드를 실행하여 소프트웨어 환경에서 설치가 정상적으로 작동하는지 확인하십시오. <br>
FPGAs용 Intel HE 가속 라이브러리 빌드
FPGAs용 Intel HE 가속 라이브러리를 빌드하려면 모든 종속성(대부분 cmake 스크립트에 의해 자동으로 처리됨)과 다음 두 가지 별도의 구성 요소가 필요합니다:
- 호스트 애플리케이션 및 관련 종속성.
- 커널에 필요한 FPGA 커널 및 HLS 라이브러리.
사용자 관점에서는 이 두 가지 주요 단계를 거쳐야 합니다. 커널을 빌드하지 않으면 테스트, 벤치마크 및 예제를 실행할 수 없습니다.
종속성
저희는 다음 운영 체제에서 FPGAs용 Intel HE 가속 라이브러리를 테스트했습니다: <br>
- Centos 7.9.2009 <br>
- Centos 7 버전을 확인하려면: <br>
FPGAs용 Intel HE 가속 라이브러리는 다음 종속성을 요구합니다:
빌드 디렉터리 생성 및 cmake 빌드 설정
로컬 영역에 git 저장소를 클론한 후, 다음 명령어를 사용하여 설치 경로를 설정하고 빌드 디렉터리를 만들 수 있습니다. 이 과정에서 호스트와 커널을 빌드하는 데 사용될 cmake 캐시 파일과 make 파일도 생성됩니다. 이전 섹션에서 설명된 대부분의 빌드 옵션은 아래 명령어를 수정하여 활성화하거나 비활성화할 수 있습니다:
cmake -S . -B build -DCMAKE_CXX_COMPILER=dpcpp -DCMAKE_INSTALL_PREFIX=./hexl-fpga-install -DCMAKE_BUILD_TYPE=Release -DENABLE_TESTS=ON -DENABLE_BENCHMARK=ON -DENABLE_DOCS=ON -DENABLE_FPGA_DEBUG=ON
사용자가 전체 빌드 프로세스를 구성할 수 있도록 다양한 cmake 옵션이 제공됩니다. 이 옵션을 통해 사용자는 테스트, 벤치마크 등을 빌드해야 하는지 여부를 제어할 수 있습니다. 참고로 기본 설정에서는 모든 옵션이 꺼져 있으므로, 유용한 코드를 생성하려면 최소한 몇 가지 옵션을 활성화해야 합니다. 권장되는 옵션은 아래에서 확인할 수 있습니다.
세부 옵션 내용은 다음 섹션의 기본 선택과 함께 제공됩니다: <br>
구성 옵션 (Configuration Options)
표준 CMake 구성 옵션 외에도, Intel HE Acceleration Library for FPGAs는 빌드를 구성하기 위한 여러 cmake 옵션을 지원합니다.
편의를 위해 아래에 나열되어 있습니다:
| CMake 옵션 | 값 | | :--- | :--- | :--- | | ENABLE_BENCHMARK | ON / OFF (기본값 OFF) | OFF로 설정하고 Google benchmark를 통해 벤치마크 스위트 활성화 | ...
FPGA용 Intel HE 가속 라이브러리 컴파일하기
FPGA용 HE 가속 라이브러리를 컴파일하려면 두 단계가 필요합니다. C++ 호스트 코드 컴파일과 oneAPI 커널 컴파일입니다. 먼저 커널을 컴파일해야 하는데, 이는 호스트 설치 과정에서 필요하기 때문입니다.
컴파일 및 설치를 진행하기 전에 환경 변수가 Intel PACD5005 소프트웨어 패키지 설치 가이드에 따라 설정되었는지 확인하십시오.
디바이스 커널 컴파일하기
커널은 에뮬레이션(emulation)과 FPGA 두 가지 다른 모드로 컴파일할 수 있습니다. 에뮬레이션 모드는 커널을 CPU에서 실행합니다. 에뮬레이션 모드 컴파일에는 몇 분밖에 걸리지 않습니다. 결과로 생성된 비트스트림은 CPU에서 커널의 기능을 검증하는 데 사용될 수 있습니다. FPGA 모드는 FPGA 카드용 커널 비트스트림을 빌드합니다. FPGA 모드로 커널을 컴파일하는 데는 몇 시간이 걸릴 수 있습니다.
에뮬레이션용 커널 컴파일하기
에뮬레이션 모드에서 실행할 디바이스 커널을 컴파일하려면 다음 명령어를 사용하십시오: <br>
cmake --build build --target emulation
이 명령어는 몇 분 정도 소요됩니다.
참고: 소프트웨어 에뮬레이션 모드에서만 커널을 실행하는 데 관심이 있다면 이 단계로 충분하며 호스트 코드를 빌드하는 단계로 넘어갈 수 있습니다. 실제 FPGA 보드에서 커널을 실행하려면 다음 단계를 따라 FPGA 카드용 비트스트림을 빌드하십시오.
FPGA 비트스트림 생성용 커널 컴파일하기
디바이스 커널을 fpga 모드로 컴파일하려면 다음 명령어를 사용하십시오: <br>
cmake --build build --target fpga
이 명령어는 몇 시간 정도 소요됩니다.
비트스트림은 cmake 명령을 호출할 때 지정한 설치 디렉터리에 위치합니다. (설치는 아래 참조)<br><br>#### 호스트 측 컴파일링
호스트 애플리케이션, 테스트, 벤치마크 및 문서(위에 선택된 옵션에 따라)를 빌드하려면 다음 명령을 실행하세요: