paint-brush
Dev Multiverse를 위한 차세대 FHE 툴체인: TFHE가 우리를 그곳으로 데려가는 방법~에 의해@pascalpaillier
1,235 판독값
1,235 판독값

Dev Multiverse를 위한 차세대 FHE 툴체인: TFHE가 우리를 그곳으로 데려가는 방법

~에 의해 Pascal Paillier23m2024/05/17
Read on Terminal Reader
Read this story w/o Javascript

너무 오래; 읽다

이 기사에서는 TFHE에 투자하여 차세대 FHE 도구 체인을 설계하기 위한 다양한 전략을 살펴봅니다. TFHE를 사용하여 동형 코드를 계측하는 방법에 대한 현재 지식 상태는 이미 그러한 도구를 만들고 개발자가 사용할 수 있도록 함으로써 앱을 구축할 때 기밀 컴퓨팅을 쉽게 통합할 수 있도록 하는 데 충분합니다.

People Mentioned

Mention Thumbnail

Companies Mentioned

Mention Thumbnail
Mention Thumbnail

Coins Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Dev Multiverse를 위한 차세대 FHE 툴체인: TFHE가 우리를 그곳으로 데려가는 방법
Pascal Paillier HackerNoon profile picture

소개

FHE가 게임의 판도를 바꾸고 있으며, 우리 모두가 게임에 초대되었습니다.


내가 무슨 말을 하는지 전혀 모른다면 최근에 바위 밑에서 생활했다는 뜻입니다. FHE.org의 포괄적인 리소스를 탐색한 후 다시 돌아오세요.


FHE가 기술 세계에 약속을 이행하려면 누구나 쉽게 동형 앱을 구축하는 데 사용할 수 있는 개발, 컴파일 및 런타임 실행을 위한 차세대 산업 도구가 함께 제공되어야 합니다.


그러나 현재 FHE 분야의 많은 전문가와 회사는 비전문가를 위한 훌륭한 개발 도구를 구축하는 데 집중하는 대신 여전히 FHE의 암호화를 개선하는 데 대부분의 시간과 노력을 투자하고 있습니다. 제 말을 잘 들어보세요. 핵심 FHE 기능과 성능을 향상시키는 것은 항상 좋은 소식이 될 것입니다. 그러나 큰 계획에서 이러한 점진적인 개선은 기껏해야 전 세계 채택을 미미하게 촉진합니다. 어느 시점에서는 채택에 영향을 미칠 것이지만 지금은 그렇지 않습니다.


제가 서있는 곳에서는 FHE 기반 성공 사례를 발굴하고 FHE를 기술 트렌드에서 디지털 보안 비즈니스의 실제 패러다임 전환으로 전환하기 위해 오늘날 기술 세계에 강력하고 개발자 친화적인 FHE 툴체인이 필요하다는 것이 분명합니다. 나는 과학적으로나 기술적으로나 FHE에 대한 지식의 현재 상태가 이미 이러한 도구를 구축하고 기술에 정통한 대중이 더 이상 지체 없이 사용할 수 있도록 하는 데 충분하다고 믿습니다. 새로운 기능의 지속적인 통합은 시간이 지남에 따라 자연스럽게 전개될 것입니다. 항상 그렇습니다.


그러나 여기에 문제가 있습니다. FHE는 다양한 형태로 제공됩니다. 어떤 암호화 체계를 사용하고 있는지 또는 어떤 특정 용도로 사용하는지에 따라 계산을 표현하고 동형 프로그램을 실행하는 다른 방법이 발생합니다. FHE 계획은 완전히 다른 동물인 것과 같습니다. 하나는 튜링 기계를 제공하고 다른 하나는 람다 미적분학을 제공합니다. 생물다양성은 기술 분야에서나 다른 분야에서나 항상 좋지만 실제로 FHE를 계측할 때 실행 가능한 전략을 세워야 한다는 의미이기도 합니다.


우리 회사 Zama는 TFHE 라는 하나의 특정 FHE 계획에 중점을 두고 있습니다. TFHE는 테이블 조회 네트워크로 표현되는 초고속 부트스트래핑 및 계산과 같은 매우 구체적인 자산을 사용하여 동형 데이터 처리를 달성합니다. 우리는 FHE 공간에서 TFHE를 일종의 약자로 만드는 데 사용되었던 이러한 특성이 어떻게 동형 라이브러리, 컴파일, 가상 머신 또는 하드웨어 가속으로 변환될 수 있는지에 대한 깊은 이해를 얻게 되었습니다.


CKKS , BGV 또는 BFV 와 같은 다른 주요 FHE 경쟁자는 실제 계측에서 매우 다른 개념을 포함합니다. 부트스트래핑은 옵션이 되기에는 너무 느리기 때문에 처리 깊이가 제한되지만 데이터는 대규모 일괄 처리, 다항식 회로로 표현되는 계산 및 - CKKS의 경우 - 결과는 대략적인 것입니다. 따라서 BGV/BFV 및 CKKS를 컴파일러와 런타임으로 변환하려면 도구 빌더와 완전히 다른 사고 방식이 필요합니다.


그러나 개발자는 배포된 동형 애플리케이션에서 쉽게 작동하고 성능 요구 사항을 충족하는 한 FHE 도구 체인 및 런타임 환경을 지원하는 특정 체계가 무엇인지에 대해 크게 신경 쓰지 않을 것입니다. 그들은 창의적인 제작자이며 사용자에게 제공할 수 있는 새로운 경험에 초점을 맞춰야 합니다.


따라서 FHE 기술 지원자의 최종 게임은 개발 다중 세계에서 전성기를 맞이할 준비가 되어 있을 뿐만 아니라 새로운 업계 표준을 설정할 수 있을 만큼 강력한 도구를 구상하고 제공하는 것입니다. 이를 달성하기 위해 그들은 어느 FHE 계획이 더 나은 결과를 가져올지 기회를 잡아야 합니다.


게임하자.


FHE의 복잡성을 전혀 모르지만 동형 애플리케이션을 구축하려는 개발자를 예로 들어보겠습니다. 당신은 여기서 도구 빌더이고, 개발자를 마주하게 됩니다 . 그 개발자에게서는 일반적인 개발 방식과 컴퓨터 과학의 기초에 어느 정도 익숙할 것으로 예상할 수 있지만 그 밖의 모든 것(고급 수학 등)에는 제한이 없습니다. 어떻게 하면 직원들이 스스로 FHE 앱을 성공적으로 제작하게 할 수 있나요?


이 기사에서는 TFHE에 베팅하여 해당 게임에서 승리하기 위한 다양한 전략을 살펴봅니다.


맞춤형 데이터 처리, 신경망, 스마트 계약 또는 범용 프로그래밍 등 애플리케이션의 특성에 따라 TFHE 지원 승리 경로를 탐색합니다. 이 탐구는 우리를 쉬운 길, 힘든 길, 그리고 그 사이의 몇 가지 다른 길로 안내할 것이며 실제 실현에 있어 다양한 수준의 기술적 준비가 되어 있을 것입니다.

TFHE 프로그램이란 무엇입니까?

TFHE는 토러스 FHE의 약자입니다. 발견자의 이름을 따서 CGGI라고도 불리는 TFHE는 FHE 분야에서 독특한 위치를 차지하고 있습니다. 즉, 프로그래밍 가능한 부트스트래핑(PBS)을 활성화하는 가장 잘 알려진 메커니즘입니다.


간단히 말해서 PBS는 동형 테이블 조회입니다. T[x] 의 암호화를 반환합니다. 여기서 T 인덱스 x 의 암호화가 주어지면 선택한 표로 작성된 함수입니다. 실행 속도는 T 의 항목에 의존하지 않고 항목 수에만 의존하며 밀리초 범위에 있습니다. 또한 PBS는 출력 암호문에 포함된 암호화 노이즈를 재설정하므로 동형 응용 프로그램이 항상 깨끗한 암호문을 처리한다는 것을 알고 PBS를 무한정 순서대로 구성할 수 있습니다.

TFHE 네트워크

TFHE가 옹호하는 계산 모델은 본질적입니다.


TFHE 프로그램의 기본 처리 장치는 뉴런과 똑같이 생겼으며 2가지 기본 동형 연산으로 구성됩니다.


  1. 암호화된 입력 E(x_1), …, E(x_n) 및 일반 텍스트 가중치 세트 w_1, …, w_n이 주어지면 E(x) 반환하는 입력의 선형 조합(여기서 x = w_1 x_1 + … + w_n x_n modulo m w_1, …, w_n .


  2. E(x) 에서 E(T[x]) 계산하는 PBS입니다. 여기서 T 크기가 m 인 일반 텍스트 테이블입니다.

TFHE 뉴런


"TFHE 뉴런"에서 m , x_i , w_i 항목과 T[0], …, T[m-1] 항목은 모두 정수이며 "매개변수" m , w_1, …, w_nT . 선형 조합의 비용이 거의 0이라는 점을 감안할 때 효율성 병목 현상은 실행 시간이 모듈러스 m 에만 의존하는 PBS입니다. m 증가하면 속도가 감소합니다. 이는 TFHE 뉴런의 모듈러스에 대해 작은 값(홀수 또는 짝수, 최소 2)을 사용하도록 유도하지만 계산 표현력이 너무 급격히 감소하는 것을 피하기 위해 절충안을 찾아야 합니다.


이제 뉴런이 병렬성과 HPC 트릭의 이점을 얻기 위해 신경망의 레이어로 조립되는 것과 동일한 방식으로 TFHE 네트워크는 TFHE 뉴런의 레이어를 쌓습니다. 각 레이어에는 공통 계수 m 모듈로의 가중치 행렬과 m 크기의 조회 테이블 벡터가 있습니다. 그러나 레이어의 모양과 마찬가지로 모듈러스는 이전 레이어와 다음 레이어에서 자유롭게 다를 수 있습니다.


TFHE 네트워크


그리고 이것으로 TFHE를 마무리합니다! 자, 우리는 기능을 조회 네트워크로 체계적으로 표현하기만 하면 됩니다. 이제 동형 계산 모델이 생겼습니다.


실제로 TFHE는 해당 모델의 여러 확장(하위 수준 연산자의 임의 그래프, 다양한 유형의 암호문, 다중 출력 테이블 조회, 변수 패킹의 다양한 방법 등)을 지원합니다. 그러나 조회 네트워크 비전은 이미 일반 프로그램을 동형 프로그램으로 변환하고 실행할 수 있을 만큼 강력하기 때문에 지금은 이러한 개선 사항을 무시할 수 있습니다. 따라서 우리는 적어도 기술의 첫 번째 반복에서는 이를 수행하는 방법에 집중할 수 있습니다.

TFHE 네트워크를 실행 가능하게 만들기

따라서 TFHE 네트워크는 단지 청사진일 뿐이며 아직 동형 앱 내에서 적절하게 실행될 준비가 되어 있지 않습니다. 모듈러스, 가중치 행렬 및 조회 테이블이 모든 레이어에 대해 완전히 지정되어 있음에도 불구하고 여전히 암호화 매개변수화라는 중요한 요소가 누락되어 있습니다.


암호화 매개변수는 런타임 시 네트워크 내에서 발생하는 일에 대해 가능한 모든 측정항목을 결정합니다. 구체적인 암호문 크기, PBS 내부의 키 전환 및 부트스트래핑 키의 실제 텐서 크기, 하위 수준 동형 연산자 내의 다양한 알고리즘 옵션, 일반 텍스트 정밀도 및 노이즈 방식 수준은 네트워크 전반에 걸쳐 발전하며 궁극적으로 암호화 및 해독 방법의 세부 사항도 달라집니다. 또한 메모리 사용과 성능을 예측합니다.


TFHE 네트워크의 실행을 최적화하는 매개변수 세트를 찾는 것은 번거로울 수 있으며, 모든 것이 모든 것에 달려 있기 때문에 전문가라도 FHE 초기처럼 펜과 종이 스타일을 수행하는 것은 극도로 어려울 수 있습니다. . 또한 여러 최적 세트가 동시에 공존할 수 있으므로 공개 키 크기, 중요 경로 대기 시간 또는 최대 처리량 간의 차익 거래가 필요할 수 있습니다. 다행스럽게도 이 작업을 자동화하는 문제는 지난 몇 년 동안 해결되었으며 이제 특정 TFHE 네트워크의 최상의 암호화 인스턴스화를 신속하게 결정할 수 있는 강력한 최적화 도구가 존재합니다.


TFHE 네트워크의 매개변수화



암호화 매개변수로 인스턴스화되면 TFHE 네트워크는 실제로 실행 가능한 상태가 됩니다. 더 정확하게는 적절한 컴파일 과정을 통해 실제 실행 가능한 상태가 됩니다.

TFHE 프로그램

TFHE 프로그램은 "일반 논리"로 서로 연결된 매개변수화된 TFHE 네트워크 모음입니다.


일반 논리는 다음과 같이 구성됩니다.


  • 일반 텍스트 변수(암호화되지 않은 일반 변수를 의미)에 대해 작동하는 명령어

  • 무조건적이거나 일반 텍스트 술어에 대한 조건부 분기,

  • 일반 텍스트 주소에서 메모리 읽기 및 쓰기, 포인터 연산,

  • 서브루틴/함수 호출.


기본적으로 일반 논리에는 프로그램의 TFHE 부분의 특권인 암호화된 프로그램 변수 수정이라는 단일 사례를 제외하고 언어에서 지원하는 모든 프로그래밍 논리가 포함됩니다. 일반 논리가 암호문 및 TFHE 공개 키와 관련하여 수행할 수 있는 유일한 작업은 마치 별도의 보조 프로세서 또는 컨테이너 내에서 실행되는 것처럼 암호문을 변경하지 않고 이동하여 TFHE 부분에 공급하는 것입니다.


모든 의도와 목적을 위해 이 정의를 준수하는 프로그램은 완전하며 프로그래밍 언어에 관계없이 완전한 동형 애플리케이션이 될 준비가 되어 있습니다. 사용자 지정 컴파일은 이 최종 매핑을 제공하며 결과 개체는 TFHE 지원 런타임 위에서 실행되거나 독립 실행형, 자체 포함 실행 파일로 실행될 수 있습니다.


TFHE 프로그램


전용 언어를 사용하면 일부 DSL 또는 MLIR 방언 과 같은 TFHE 프로그램 표현을 통합하여 동일한 백엔드 컴파일러로 컴파일을 수행할 수 있습니다.


런타임(공유/동적 라이브러리, VM 등)의 정확한 특성은 여기서는 단지 형식일 뿐입니다. 두 가지 옵션 모두 사용자에게 배포 및 노출될 수 있는 작동 가능한 TFHE 기반 동형 앱으로 이어질 것입니다.


이제 잠시 게임 플레이로 돌아가 보겠습니다.


우리는 TFHE 또는 위의 사항에 대해 아무것도 모르지만 동형 애플리케이션을 구축하려는 개발자를 마주하고 있습니다. 위에서 논의한 컴파일러와 TFHE 지원 런타임(있는 경우)을 출시했다고 가정합니다.


우리의 목표는 확정되었습니다. 실행 파일에 도달하려면 TFHE 프로그램만 있으면 됩니다. 하지만... 애초에 개발자가 TFHE 프로그램처럼 구체적인 것을 자체 제작하도록 하려면 어떻게 해야 할까요?

쉬운 길: FHE lib를 출시하고 개발자가 자신의 일을 하도록 하세요.

손쉬운 승리 경로는 다음과 같습니다. 모든 복잡성을 블랙박스 FHE API에 캡슐화하는 것입니다.

일반 프로그램

모든 프로그래밍 언어에서 (일반) 프로그램은 본질적으로 다음 세 가지 요소의 조합으로 볼 수 있습니다.


  • 언어 기본 지침과 범위 지정 구성으로 구성된 프로그래밍 논리

  • 가능한 모든 데이터 유형 중에서 선택된 변수 및 프로그램이 할당하는 데이터 유형의 선택,

  • 프로그램이 변수에 대해 작동하는 데 사용하는 사용 가능한 모든 외부 함수 중에서 선택된 외부 함수를 호출합니다.


데이터 유형에는 이러한 기본 유형을 확장하고 더 높은 수준의 구조화된 유형으로 결합하기 위한 기본 유형과 입력 구문이 혼합된 자체 하위 언어가 있습니다. 유형 시스템은 프로그램이 요구할 수 있는 사실상 모든 데이터 구조를 포괄할 수 있을 만큼 충분한 표현력을 제공하기 위한 것입니다. 외부 함수는 표준 또는 기타 라이브러리에서 제공되는 함수이지만 언어 기본 명령어(모듈식 산술 또는 나눗셈에 대한 연산자를 생각해 보세요)에 의해 암시적으로 호출될 수도 있습니다.


따라서 일반 프로그램은 실제로 "단순"합니다.


본질적으로 단순한 프로그램


여기 내 말을 잘 들어보세요. 다형성, 멤버와 속성이 있는 객체, 클래스 및 계층적 상속, 템플릿, 매크로, 특성, 스레드, 재귀, 구문 설탕, 주석 및 기타 상상할 수 있는 모든 고급 프로그래밍 개념이 비용이 전혀 들지 않는다는 말은 아닙니다. 언어에서 제공하는 추상화는 작업을 단순화하기 위해 발명되었지만 개발자가 처리하기에는 간단해야 합니다.


나는 단지 우리의 목적을 위해 컴파일 타임에 사라지는 무해한 장식일 뿐이라는 것을 말하는 것입니다. 왜냐하면 더 낮지만 동등한 정규 형식의 프로그램 버전이 소스에서 추론되기 때문입니다. IR(중간 표현)로 표현된 해당 버전의 프로그램은 일부 제어 흐름 그래프로 연결된 직선 기본 블록(해당 IR의 기본 명령 시퀀스)으로 구성됩니다.


이제 "간단한" 것은 일반적인 형태의 이 프로그램입니다. 내 말은, 동형 기능을 강화할 수 있을 만큼 충분히 간단하다는 뜻입니다.

사진에 FHE를 던져보세요

언어 기반 FHE 라이브러리를 출시하고 개발자가 이를 가장 잘 사용하는 방법을 다루도록 하면 게임에서 승리할 수 있습니다.


라이브러리는 새로운 데이터 유형(일반 데이터 유형을 보완하기 위해 암호화된 데이터 유형)과 개발자에게 익숙한 일반 기능을 모방하는 동형 함수 컬렉션을 노출하며 암호화된 데이터 유형에서만 작동합니다. 간단히 말해서, 유형 시스템과 라이브러리 생태계를 확장하고 개발자의 지능이 이러한 확장을 사용하여 동형 앱을 만드는 방법을 알아내도록 합니다.


이는 특별히 TFHE와 관련이 없으며 모든 FHE 체계에 적용됩니다. 이것이 바로 다양한 FHE 라이브러리 제공업체가 초점을 맞추고 있는 것입니다. 일반 코딩 경험에 최대한 가깝게 보이고 느껴지는 높은 수준의 동형 함수를 노출하여 FHE의 유용성과 사용자 친화성을 향상시키는 것입니다. 모든 암호화 복잡성은 프로그램이 oracle을 호출할 블랙박스로 추상화됩니다.


물론 개발자에게는 잘 작동할 수도 있습니다. 글쎄요... 당신이 도서관 제공자로서 흥정을 잘한다면 말이죠.


그들은 이제 다음과 같은 동형 프로그램을 알아낼 것입니다.


본질적으로 동형 프로그램


이제 일반 변수와 암호화된 변수가 공존하며 프로그램은 이 두 개체 유형 간에 엄격한 구분을 유지해야 합니다. 이는 일반 인수와 암호화된 인수의 혼합에 함수를 적용할 때 결과가 반드시 암호화되어야 함을 알려주는 FHE 황금률이 있기 때문입니다. 예를 들어 fhe_add(E(x), y)E(x+y) 반환하고 곧. 따라서 일반 변수는 일부 FHE 함수에 들어갈 수 있지만 나올 수는 없습니다. 동형암호는 계산을 통해 접촉하는 모든 것을 "오염"시킵니다.


자, 보세요... 그러면 조건부로 암호화된 변수로 어떻게 분기합니까?


글쎄, 그럴 수 없어. 하지만 전혀 큰 문제가 되지 않습니다.

한 가지 문제: 조건부 분기

FHE 애플리케이션에서 조건부 분기는 암호화된 부울이 아닌 일반 부울에만 작동할 수 있습니다. 암호화된 비트를 기반으로 어디로 점프해야 할지 어떻게 알 수 있나요? 해당 비트를 해독할 수 있는 사용자의 개인 키가 없습니다.


다행히도 FHE는 이 문제를 해결할 수 있는 간단한 방법도 제공합니다.

if를 정규화하는 방법

개발자가 처음에 다음과 같은 작업을 원했다고 가정해 보겠습니다.


 if (x == 0) then y = 3 else z = 7


그러나 그 시점에서 변수 x 실제로 암호화된다는 것을 깨닫습니다. 해당 코드를 어떻게 조정하나요?


가장 먼저 해야 할 일은 멀티플렉싱을 사용하는 동일한 직선 코드 조각을 얻기 위해 일반 if 문을 재작업하는 것입니다.


 bit = (x == 0) // bit = 1 if x == 0 otherwise 0 y = 3 * bit + y * (1 - bit) // y = 3 if bit == 1 otherwise no change z = z * bit + 7 * (1 - bit) // z = 7 if bit == 0 otherwise no change


두 번째 단계에서 개발자는 x 가 암호화된 유형이라는 사실을 후속 라인에 전파해야 합니다.


 bit = fhe_is_equal(x, 0) // bit, y_new and z_new are encrypted y_new = fhe_add(fhe_mul(3, bit), fhe_mul(y, fhe_sub(1, bit))) z_new = fhe_add(fhe_mul(z, bit), fhe_mul(7, fhe_sub(1, bit)))


이것이 개발자의 초기 의도와 기능적으로 동일하다는 것을 확인할 수 있습니다.


프로그래밍 언어에서 기본 연산자의 오버로드를 허용하는 경우 FHE API는 두 번째 스니펫의 명시적 FHE 기능을 불필요하게 만들 수도 있으므로 개발자는 첫 번째 재작성만 수행하면 됩니다.


개발자에게 추가 구문을 제공하기 위해 오버로드된 삼항 연산자 a? b : c 노출할 수도 있습니다. a? b : c 여기서 모든 인수는 암호화되거나 암호화되지 않을 수 있습니다. 코드 조각은 더욱 간단해집니다.


 bit = (x == 0) // bit = 1 if x == 0 otherwise 0 y_new = bit? 3: y // y = 3 if bit == 1 otherwise no change z_new = bit? z: 7 // z = 7 if bit == 0 otherwise no change


이는 임의의 if/switch 문으로 쉽게 일반화됩니다. 확인할 암호화된 조건이 있을 때마다 개발자는 멀티플렉싱을 사용하여 문의 여러 본문을 동일한 직선 코드의 단일 블록으로 융합하면 됩니다.

for/while 루프를 정규화하는 방법

이제 암호화된 조건과 관련된 루프 구성을 동일한 방식으로 정규화할 수 있습니다. 예를 들면


 for (i = 0; i < x; i++) do <body> // i is plain, x is encrypted


여기서 x 암호화된 유형입니다. 먼저, 이를 일반 for 문과 불규칙한 if 문으로 분해합니다.


 for (i = 0; i < known_max_value_of_x; i++) do if (i < x) then <body> // i is plain, x is encrypted


그런 다음 이전과 같이 if 문을 정규화합니다.


 for (i = 0; i < known_max_value_of_x; i++) do bit = (i < x) // i is plain, x and bit are encrypted <new_body> // new body regularized using bit? _ : _


여기에는 즉시 값 known_max_value_of_x 가 필요합니다. x 의 암호화된 유형이 지원하는 최대값은 기본적으로 사용될 수 있지만, 많은 경우 개발자는 총 루프 수를 엄격한 최소값으로 줄일 수 있는 x 에 대한 훨씬 더 나은 상한을 알고 있습니다.


결국 위의 변환은 불규칙한 제어 흐름을 정규화하는 체계적인 방법으로 쉽게 일반화되며, 이는 코더가 쉽게 동화하고 코딩 습관을 추가할 수 있습니다.

예: EVM의 기밀 스마트 계약

Zama의 fhEVM은 EVM(Ethereum Virtual Machine)에서 기밀 스마트 계약의 개발 및 배포를 위한 완전한 오픈 소스 프레임워크입니다. fhEVM 계약은 전통적인 Solidity 툴체인을 사용하여 구축된 간단한 Solidity 계약입니다. 친숙한 개발 경험은 암호화된 데이터 유형과 표준 기능에 대한 FHE 대체를 제공하는 라이브러리 TFHE.sol 통해 FHE로 강화됩니다.


현재 지원되는 암호화된 데이터 유형은 다음과 같습니다.


 ebool, euint4, euint8, euint16, euint32, euint64, eaddress


암호화된 부호 있는 정수도 곧 포함될 예정입니다. 암호화된 변수는 전용 생성자를 사용하여 원시 입력 암호문에서 생성됩니다.


 function mint(bytes calldata encryptedAmount) public onlyContractOwner { euint64 amount = TFHE.asEuint64(encryptedAmount); balances[contractOwner] = balances[contractOwner] + amount; totalSupply = totalSupply + amount; }


Solidity의 기본 연산자 +, -, *, &, |, ^, etc 개발자의 편의를 위해 오버로드 되며 제공된 비교 연산자 eq, ne, gt, lt, ge, le 암호화된 부울 ebool 반환합니다. 동형 삼항 연산자 _? _ : _ select 라고 합니다.


 function bid(bytes calldata encryptedBid) internal { euint32 bid = TFHE.asEuint32(encryptedBid); ebool isAbove = TFHE.le(bid, highestBid); // Replace highest bid highestBid = TFHE.select(isAbove, bid, highestBid); }


런타임 측면에서 fhEVM은 오픈 소스 TFHE-rs Rust 라이브러리의 통합으로 인해 동형 함수가 사전 컴파일된 계약으로 노출되는 TFHE 지원 EVM을 제공합니다.


이에 대한 자세한 내용은 fhEVM 백서를 참조하세요.

TFHE로 FHE API를 구축하려면 무엇이 필요합니까?

실행 가능한 TFHE 프로그램이 일반 논리로 구성된 매개변수화된 TFHE 네트워크처럼 보이는지 기억하십니까? 글쎄요, 개발자의 소프트웨어 로직을 여기에 매핑하는 방법이 필요합니다.


첫 번째 요구 사항은 프로그램 논리가 "일반"인지 확인하는 것입니다. 이것이 바로 우리가 개발자에게 제어 흐름 문을 정규화하여 스스로 생성하도록 가르친 것입니다. 그래서 우리는 실제로 지금 그것에 대해 잘하고 있습니다.


두 번째 요구 사항은 프로그램에서 호출하는 모든 동형 함수가 미리 설정된 매개변수화된 TFHE 네트워크에 매핑되어야 한다는 것입니다. 이는 여러 가지 이유로 보이는 것보다 더 복잡합니다.

1. API 기능을 위한 TFHE 네트워크를 생성해야 합니다.

주어진 기능을 구현하는 매개변수화된 TFHE 네트워크를 사전 구축하는 것이 반드시 쉬운 것은 아닙니다.


2개의 암호화된 64비트 부호 없는 정수를 동형 추가하는 것만으로도 많은 기술 옵션이 제공됩니다. 64비트 입력을 모듈식 정수의 벡터로 어떻게 표현합니까? 정확히 어떤 모듈러스(또는 다중 모듈러스)를 사용합니까? 그렇다면 테이블 조회 레이어가 있는 64비트 추가 회로를 어떻게 실현합니까?


거기에는 많은 선택이 있습니다. 하지만 좋은 엔지니어링과 수많은 실험을 통해 결국 결정을 내리게 될 것입니다.

2. 암호화된 데이터 유형을 정규화해야 합니다.

API의 모든 기능에 대해 TFHE 네트워크를 구현했다고 가정하면 레고 블록처럼 마음대로 구성할 수 있는지 확인하고 싶을 것입니다.


동일한 암호화된 데이터 유형을 표현하는 가장 좋은 방법은 함수마다 다를 수 있으므로 이것이 반드시 보장되는 것은 아닙니다. 따라서 TFHE 네트워크의 효율성을 크게 저하시키지 않으면서 각 암호화된 데이터 유형을 나타내기 위해 공통 산술 형식을 채택해야 합니다.


다시 말하지만, 거기에는 많은 옵션이 있으며 이들 사이에서 차익거래를 해야 합니다.

3. 실제 구성성을 보장해야 합니다.

이제 모든 TFHE 네트워크가 입력/출력 형식에서 완벽하게 호환된다고 가정하면 구성 가능성은 여전히 보장되지 않을 수 있습니다.


이는 하나의 TFHE 네트워크를 인스턴스화하는 암호화 매개변수가 다른 TFHE 네트워크를 인스턴스화하는 데 사용되는 매개변수와 호환되지 않을 수 있기 때문입니다. 특히 실제 구성 가능성을 확인하려면 입력 및 출력 암호문 내의 암호화 노이즈 수준을 조정해야 합니다.


이는 전자 회로의 임피던스와 유사합니다. 임피던스가 일치하지 않으면 한 회로를 다른 회로에 연결할 수 없습니다. 먼저 임피던스 레벨을 정렬해야 하며 여기서도 마찬가지입니다. 이를 수행하는 가장 쉬운 방법은 고정된 매개변수 세트(심지어 하나의 고유한 세트일 수도 있음)를 사용하는 것입니다. 이 매개변수는 모든 API 기능에 걸쳐 정렬되도록 조정됩니다. 이후에는 개발자 코드에 관계없이 사용자 공개 키의 형식과 사용자 암호화 및 암호 해독에 사용되는 매개변수가 수정됩니다.


TFHE 네트워크를 만들고 이를 매개변수화할 때 이러한 3가지 요구 사항을 충족하고 여전히 좋은 전반적인 성능을 달성하는 방법을 찾았다면 축하합니다! 당신은 그것을 뽑아 냈습니다.

그렇다면 왜 FHE 라이브러리만으로는 충분하지 않을까요?

FHE API가 개발자가 기대하는 모든 표준 기능에 대한 동형 대체 기능을 제공할 만큼 충분히 포괄적이고 완전한 구성 가능성이 있다는 가정 하에 일반 목적 프로그래밍에 충분 합니다 .


그러나 전문적인 프로그램에는 충분하지 않을 수 있습니다.


  • 기계 학습과 같은 대규모 컴퓨팅 집약적 기능,

  • 사용자 정의, 비표준 기능.


이때 동형 컴파일이 등장합니다.

힘든 길: 동형 컴파일러 출시

여기서부터 험난한 길이 시작됩니다. 범용 프로그래밍 이외의 게임에서 승리하려면 이제 TFHE 컴파일러를 제공해야 합니다.


컴파일러는 개발자가 스스로 수행하는 방법을 모르는 작업을 처리합니다. 이는 개발자의 입력(그것이 무엇이든 귀하의 호출일 수 있음)에 의해 제공되며 TFHE 프로그램에 도달하려면 누락된 부분을 완료해야 합니다.


비표준 애플리케이션의 일반적인 예를 살펴보겠습니다.

심층 신경망을 사용한 기밀 추론

개발자는 일반 신경망을 동형 등가물로 전환함으로써 사용자 입력 및 출력이 종단 간 암호화되는 동형 추론 서비스를 구축하고 배포합니다.

개발자가 입력으로 제공하는 것

개발자는 훈련된 양자화 모델을 생성하거나 이미 보유하고 있을 만큼 머신러닝에 대한 방법을 잘 알고 있어야 합니다.


양자화가 수행되는 방식에 대한 세부 사항은 여기서 정말 중요합니다. 컴파일러는 모델이 기본적으로 TFHE 네트워크이거나 간단한 재작성을 통해 쉽게 적용할 수 있도록 모델을 요구하기 때문입니다. 사용 가능한 오픈 소스 기술은 사전 훈련된 모델을 사후 양자화하거나 바람직하게는 양자화 인식 훈련(QAT)을 수행하여 이러한 형태의 양자화를 지원하는 것으로 알려져 있습니다. 동일한 데이터 세트에 대해 훈련된 비양자화 모델.


기본적으로 TFHE 네트워크 계층 전체에 사용되는 모듈러스는 2의 가변 거듭제곱이므로 활성화 신호의 정밀도는 비트 단위로 측정됩니다. 가중치는 부호 있는 정수이며 활성화 함수 자체는 테이블 조회로 양자화되고 인스턴스화됩니다. 활성화가 학습된 오프셋을 사용하여 이동된 하드 부호 함수를 표로 작성하는 경우 이 정의에는 BNN , TNN 및 다중 비트 일반화와 같은 모델 유형이 포함됩니다. 그러나 원칙적으로는 활성화 함수에서 임의의 조회 테이블을 자유롭게 사용할 수 있으므로 더 나은 정확도에 도달하기 위해 훈련 중에 학습할 수도 있습니다.


개발자가 수행 방법을 모르는 것은 TFHE 네트워크를 동형 실행 파일로 변환하는 것입니다. 따라서 여기서 누락된 유일한 요소는 해당 네트워크의 암호화 매개변수화이며 이것이 백엔드 컴파일 단계로 진행하기 전에 컴파일러가 수행해야 할 전부입니다.

TFHE 네트워크를 매개변수화하려면 무엇이 필요합니까?

TFHE 네트워크의 매개변수화는 실행 가능한 암호화 인스턴스화를 제공한다는 점을 기억하세요. 또한 사용자 공개 키의 총 크기 및 총 실행 시간과 같이 해당 실행과 관련된 모든 측정항목을 제어합니다. 따라서 개발자가 추론 지연 시간을 최소한으로 줄이기 위해 노력하고 있으므로 여기서 매개변수화는 매우 중요합니다.


TFHE 네트워크의 암호화 매개변수에는 무차별 공격을 가하기에는 자유도가 너무 높습니다. 또한 최적화할 측정항목은 네트워크 외부에 있는 2개의 구성 요소에 따라 달라지며 런타임에서 하위 수준 TFHE 작업을 수행하는 데 사용하는 알고리즘에 따라 달라집니다.


  • 소음 공식 모음입니다 . 잡음 공식은 연산자의 매개변수를 알 수 없는 변수로 사용하여 연산자의 끝점에서 암호화 잡음의 입력 및 출력 분포를 관련시킵니다. 이를 확립하려면 인간의 과학적 분석과 실험적 검증이 필요합니다.

  • 비용 측정항목 모음입니다 . 비용 지표는 매개변수의 함수로서 연산자의 다차원 효율성(메모리 사용, 실행 시간 등)을 예측합니다. 이는 일반적으로 최적합 분석을 통해 벤치마크 측정에서 추론됩니다.


런타임 구현의 모든 변경 사항은 이 두 모듈에 반영되어야 합니다. 둘 다 알고리즘과 하드웨어에 크게 의존하기 때문입니다.


런타임의 노이즈 공식 및 비용 모델은 주어진 TFHE 네트워크와 함께 전체 최적화 문제 클래스의 특정 인스턴스를 공식화하고 이 인스턴스는 전용 최적화 프로그램으로 전달됩니다. 여기서는 여러 목표를 가진 혼합 정수 비선형 프로그래밍에 대해 이야기하고 있으므로 최적의 매개변수 세트의 파레토 프론트를 찾으려면 사소하지 않은 최적화 문제 클래스를 해결해야 합니다.


TFHE 네트워크의 최적 매개변수화 생성

기술적 준비

우수한 과학과 엔지니어링 덕분에 이러한 유형의 최적화 문제는 몇 초 만에 해결되었으며, Concrete 와 같은 TFHE 컴파일러는 이미 효율적인 TFHE 매개변수 최적화 기능을 내부 모듈로 갖추고 있습니다.


다양한 개선을 통해 향후 TFHE 최적화 프로그램의 속도가 더욱 빨라질 수 있지만, 이러한 개선 사항이 없더라도 TFHE 네트워크의 매개변수화는 거의 완료된 거래로 간주될 수 있습니다.

고속 맞춤형 데이터 처리

개발자가 입력으로 제공하는 것

이러한 응용 프로그램은 완전히 다른 종류입니다. 개발자는 정밀도 제약 조건과 함께 구현할 사용자 정의 함수의 수학적 사양을 보유합니다. 예를 들면

여기서 x 0과 1 사이의 실수이고 다음과 같은 경우 GF 근사치를 사용하는 것이 허용됩니다.

개발자는 표준 API 기능을 구성하여 봉투 뒷면에 G 구현하는 것이 너무 차선책일 가능성이 높다는 것을 알고 있습니다.


컴파일러가 수행할 작업은 G 사양을 충족하도록 특별히 설계된 새로운 TFHE 네트워크를 즉석에서 제조하는 것입니다. 그런 다음 이를 매개변수화하고 백엔드 컴파일을 진행하여 동형 앱을 생성합니다.

TFHE 네트워크를 합성하려면 무엇이 필요합니까?

글쎄, 그곳이 갑자기 도로가 훨씬 더 울퉁불퉁해지는 곳입니다.

현재로서는 앞서 언급한 정확한 정의와 함께 TFHE 네트워크가 어떻게 자동으로 합성될 수 있는지에 대한 과학적 지식이 부족합니다. 정수 값 모듈러 연산에 의존하는 인접 유형의 회로 합성에 대한 연구조차 거의 없습니다. 이 작업을 A부터 Z까지 수행할 수 있는 기존 신디사이저는 말할 것도 없습니다.

부울 합성 활용

이 문제를 해결하는 한 가지 방법은 TFHE 네트워크를 부울 회로로 낮추어 컴퓨팅 성능의 일부를 활용하는 것입니다. 예를 들어, TFHE 뉴런은 강제로 삼항 부울 게이트 역할을 할 수 있습니다.


~에 의해

  • 입력 수를 3으로 설정하고 x_1, x_2, x_3 0/1 값으로 부과합니다.
  • 모듈러스를 m = 4 로 설정하고 가중치를 (w_1, w_2, w_3) = (2, -1, 1) 로 설정합니다.
  • 조회 테이블을 [0, 1, 1, 0] 으로 설정합니다.


동일한 모듈러스를 사용하여 가능한 모든 가중치와 테이블을 무차별 대입하면 삼항 게이트를 계산하는 데 사용할 수 있는 TFHE 뉴런 사전을 구성할 수 있습니다. 다음 단계는 다음과 같습니다.


  • 부울 합성 도구를 사용하여 개발자 사양에서 부울 회로를 생성합니다(이 작업을 수행하는 데 사용할 수 있는 많은 오픈 소스 도구).
  • 회로를 사전에 속하는 삼항 게이트로 절단(일명 3방향 LUT 분할)
  • 이러한 삼항 게이트를 등가 뉴런으로 대체하면,
  • 회로를 최소 깊이의 계층형 네트워크로 재구성합니다.


부울 회로에 의존하는 방법이 많기 때문에 이는 많은 전략 중 하나를 보여주는 전략일 뿐입니다. 또한 일반적인 이진 게이트를 고려하고 제한된 TFHE 뉴런을 사용하여 구현할 수도 있습니다. CEA의 Cingulata 와 이후 Google의 FHE 트랜스파일러는 TFHE를 통해 이러한 길을 정확하게 개척했습니다.

기술적 준비

부울 합성은 공격적인 회로 최적화 기술을 사용하며 전반적으로 기술적 문제를 해결합니다. 즉, 컴파일러를 구축하는 사람에게 해당 접근 방식이 건전하고 실용적입니다.


그러나 TFHE 네트워크가 이렇게 생성되면 너비와 깊이가 비정상적으로 높아져 전반적인 성능이 저하될 수 있습니다. 따라서 TFHE 뉴런의 완전히 인위적인 부울 조건을 완화함으로써 완전한 표현력을 활용하고 훨씬 더 작고 얕은 네트워크를 얻을 수 있다는 의심이 널리 퍼져 있습니다.


그러나 이를 수행하는 방법을 명확하게 확인하려면 더 많은 연구가 필요합니다. 기계 학습에서 차용한 적절한 훈련 방법을 사용하여 TFHE 네트워크를 학습하는 것과 같이 완전히 다른 접근 방식이 결국 우수한 결과를 제공할 가능성이 있습니다. 시간이 말해 줄 것이다.

포괄적인 TFHE 컴파일러에 대한 탐구

합성 문제가 해결되어 효율적인 맞춤형 TFHE 네트워크가 생성된다고 가정하면, 움직이는 모든 부분을 하나로 모으고 전체 작업을 수행하는 컴파일러를 설계할 준비가 된 것입니다.


  1. 민감한 변수가 단순히 암호화되었다는 주석이 달린 일반 프로그램을 입력으로 사용합니다.

  2. 사전 훈련된 신경망이나 기타 기계 학습 모델을 수용하고 이를 TFHE 네트워크로 재해석합니다.

  3. 수학적 사양으로만 구성된 기능 모형을 수용하고 즉석 합성을 수행하여 맞춤형 TFHE 네트워크를 생성합니다.

  4. 필요할 때마다 최적화 모듈을 사용하여 컴파일 단위에 남아 있는 매개변수화되지 않은 모든 TFHE 네트워크를 실행 가능한 인스턴스로 전환합니다.

  5. 다양한 대상 TFHE 런타임 및/또는 하드웨어 아키텍처에 대한 컴파일의 백엔드 단계를 수행합니다.

  6. 더 빠른 TFHE 네트워크의 합성 및 매개변수화를 활성화하려면 비용 모델을 통해 특정 하드웨어 가속기를 활용합니다.


지옥, 제어 흐름의 자동화된 정규화에 대한 일부 지원을 제공하여 개발자가 더 이상 신경 쓰지 않아도 되도록 할 수도 있습니다.


이는 FHE 앱 빌더에게 최고의 개발 경험을 제공할 것입니다.

요약

범용 FHE 프로그래밍의 맥락에서 TFHE 라이브러리는 기존 도구 체인을 사용하여 모듈성과 완전히 자율적인 개발 환경을 제공할 수 있습니다.


TFHE는 특히 암호화된 기계 학습 추론과 향후 고속 암호화 데이터 크런칭 및 기타 맞춤형 FHE 애플리케이션에 대한 개발자의 요구 사항을 충족할 수 있는 특정 컴파일 기술을 개척합니다.


전반적으로 TFHE는 소프트웨어 개발 세계에서 큰 성공을 거둘 수 있는 보다 통합되고 적응력이 뛰어난 FHE 도구 체인을 만들고 누구나 전례 없이 쉽게 구축하고 실행할 수 있는 개인 정보 보호 우선 솔루션의 새로운 물결을 탄생시킬 수 있는 명확한 기술 경로를 제공합니다.


TFHE 조회 네트워크에만 집중함으로써 TFHE가 지원할 수 있는 여러 가지 계산 모델 중 하나 를 사용했습니다. 연구가 점차적으로 더 많은 기능을 밝혀냄에 따라 TFHE를 계측하는 새로운 방법이 표면으로 나타날 것이라는 데는 의심의 여지가 없습니다.


어느 것이 언제인지는 또 다른 이야기입니다. 그러나 그 이야기 뒤에는 기밀 컴퓨팅의 미래에 관해 흥미롭고 잠재적으로 계몽적인 질문이 많이 숨어 있습니다.


저자의 약간의 안내와 함께 Midjourney v6에 대한 크레딧