# Zama: Part 4.1, Simple Brief to TFHE - Building Blocks 

By [lordachita](https://paragraph.com/@lordachita) · 2025-10-12

---

สวัสดีครับผู้อ่านทุกๆท่าน

หลังจากที่ท่านได้อ่านบทความ Series Part 2.X และ 3.X ผู้อ่านน่าจะพอเห็นประโยชน์ที่ได้รับจาก การใช้งาน products ต่างๆของ Zama แล้ว ไม่มั่นใจว่าผู้อ่านรู้สึกเหมือนผมไหมครับว่าเทคโนโลยี FHE ให้ความรู้สึกเสมือนมายากลสุดพิเศษที่เสกให้พวกเราสามารถคำนวนบนข้อมูลที่ถูกเข้ารหัสไว้ได้ โดยที่ไม่ต้องทำความเข้าใจเบื้องหลัง ที่ถูกสร้างมาอย่างดีด้วยภาษาคณิตศาสตร์ ที่มีเพียงกลุ่มผู้ถูกเลือกเท่านั้นที่จะสามารถถอดความและทำความเข้าใจถึงความสวยงามขอมายากลนี้ได้

โดยในบทความนี้ ผมขออนุญาตเป็นตัวแทนที่เคยเจาะลึกภาษานี้มากว่า 4 ปี พาเพื่อนๆมาทำเข้าใจเบื้องหลังถึงแก่นของมายากลอันสุดวิเศษที่ชื่อ TFHE ที่เป็นเบื้องหลังความสำเร็จของ Zama ผ่านมุมมองที่ผู้เขียนได้ลองศึกษามาข้ามปีครับ

Introduction
------------

ทาง Zama ได้แนะนำ Document เกี่ยวกับ TFHE ไว้หลากหลายรูปแบบ

[

TFHE deep dive | TFHE-rs
------------------------

TFHE is a fully homomorphic encryption scheme that enables fast homomorphic operations on booleans, integers and reals. By enabling both leveled and bootstrapped operations, TFHE can be used for a wide range of usecases, from homomorphic boolean circuits to homomorphic neural networks.

https://docs.zama.ai

![](https://storage.googleapis.com/papyrus_images/e826c398564ac997278637fd2087b486b0783bdcaed836ed89d885e116b84519.png)

](https://docs.zama.ai/tfhe-rs/explanations/tfhe-deep-dive)

ไม่ว่าจะเป็นรูปแบบของ Blog ทั้งหมด 4 Parts, article และ handbook ซึ่งเขียนไว้ได้ดีทุกรูปแบบ ปัญหาคือไม่ว่าจะเป็นแบบไหน ปัจจุบันผู้เขียนก็ยังไม่เจอรูปแบบที่ friendly กับคนที่อาจจะยังไม่ได้ชำนาญคณิตศาสตร์ (ด้วยลักษณะของความซับซ้อนของคณิตศาสตร์ในการทำ Cryptography)

ในบทความนี้ ผู้เขียนจะขมวดบทความ เห็นสั้นและกระชับเพื่อให้ผู้ที่สนใจพอเห็นภาพว่า คณิตศาสตร์เบื้องหลังทำงานอย่างไร โดยวางแผนเขียนบรรยายเพียง 2 หัวข้อหลัก ได้แก่

1.  **Building Blocks** - จะเป็นการอธิบายส่วนประกอบหลักในการทำ encryption/decryption ระหว่าง plaintexts/ciphertexts
    
2.  **Computations** - จะเป็นการอธิบายวิธีการทำบวกและคูณ ซึ่งรวมถึงวิธีการจัดการ noise ที่เกิดขึ้นจากการคำนวนบนข้อมูลที่ถูกเข้ารหัสแล้ว
    

### Prerequisite

ผู้อ่านควรทราบ arithmetic สำหรับการ programming ในเบื้องต้น (โดยเฉพาะการทำ modulo)

Overview
--------

### 1\. Building Blocks

**1.1 Torus and its Discretization**

Torus หรือสิ่งที่นักคณิตศาสตร์เรียกมันว่าโดนัท เป็นโครงสร้างสุดอัศจรรย์ ที่มีอิทธิพลและมีประโยชน์มากๆสำหรับการศึกษาคณิตศาสตร์ โดยเฉพาะฝั่งของ [Lie Group](https://en.wikipedia.org/wiki/Lie_grouphttps://en.wikipedia.org/wiki/Lie_group) ที่มีคุณสมบัติทั้งในเชิงของเลขคณิต (arithmetic) และเชิงเรขาคณิต (geometric) รวมไว้ด้วยกัน

![ตัวอย่างประเภทต่างๆของ Lie Group ซึ่งผู้อ่านที่ยังไม่รู้ภาษาคณิตศาสตร์ไม่จำเป็นต้องใส่ใจ โดย Torus จะเข้ามาช่วยในการจำแนกประเภทของ Lie Group โดยที่เราสามารถสรุปได้ว่า Connected Abelian Compact Lie group นั่นคือ Torus https://www.mathphysicsbook.com/mathematics/lie-groups/](https://storage.googleapis.com/papyrus_images/4f1d4d51e3868c87de0a8e17b046c10b32fd6f7be0307dc251a5b99cb6e6968d.png)

ตัวอย่างประเภทต่างๆของ Lie Group ซึ่งผู้อ่านที่ยังไม่รู้ภาษาคณิตศาสตร์ไม่จำเป็นต้องใส่ใจ โดย Torus จะเข้ามาช่วยในการจำแนกประเภทของ Lie Group โดยที่เราสามารถสรุปได้ว่า Connected Abelian Compact Lie group นั่นคือ Torus https://www.mathphysicsbook.com/mathematics/lie-groups/

โดยเหตุผลหลักๆที่ทำให้ Torus ถูกเรียกว่าโดนัท เพราะว่ามีเคสเฉพาะของมันที่เราสามารถมองเป็นรูปโดนัทได้จริงๅ

![Torus - https://en.wikipedia.org/wiki/Torus](https://storage.googleapis.com/papyrus_images/c88b6fa1dcce6b1727adb983b47a7a4fed5b1981c82718b5086fb05a82e7088b.png)

Torus - https://en.wikipedia.org/wiki/Torus

โดยในฝั่ง cryptography เราจะโฟกัสบน Torus ที่เป็นวงกลม และมองคุณสมบัติเชิง arithmetic ที่ได้เป็นหลัก ซึ่งจะได้ว่า Torus ตัวนี้เป็นเซ็ต/กลุ่มของส่วนที่เป็นทศนิยมของจำนวนจริง

$$\\mathbb{T} = \\mathbb{R} / \\mathbb{Z}$$

ให้ลองนึกภาพ

$$\\sqrt(2) = 1.4142…$$

จากนั้นเมื่อเราสนใจส่วนที่เป็นทศนิยมของ sqrt 2 นั่นคือการ modulo 1 บนจำนวนจริง และจะได้ว่า

$$\\sqrt(2) (mod 1) = (1 + 0.4142…) (mod 1)= 0.4142…$$

โดย Torus สามารถทำการบวกและคูณ scalar (ที่เป็นจำนวนเต็ม) ได้แต่จะยังไม่สามารถนิยามการคูณระหว่างสมาชิกบน Torus ตรงๆได้ ให้ลองพิจารณา 1/2 = 3/2 บน Torus แต่

$$1/2 \\times 1/2 = 1/4 \\neq 3/4 = 3/2 \\times 1/2$$

ซึ่ง Torus จะมีสมมติฐาน **Decisional Learning With Errors** ที่ว่า “**_ภายใต้ตัวเลือกที่ดีมากพอ_** เราจะ**_ไม่สามารถจำแนกความแตกต่าง_**ระหว่างตัวอย่างที่สุ่มมา (จาก Torus) กับตัวอย่างสุ่มที่ถูก encrypted/noise added มาแล้ว” ทำให้การทำ FHE บน Torus จะมีความปลอดภัยที่ถูกการันตีมาแล้ว

ซึ่งการคำนวนบนคอมพิวเตอร์ จะต้องมีการแปลงค่าที่ continuous ให้อยู่ในรูปของ discrete และสามารถกำหนดความแม่นยำ ซึ่งสามารถทำได้ผ่านการทำ Discretization ตัว Torus ยกตัวอย่างตัว sqrt 2 บน Torus ซึ่งสามารถเขียนในรูปของฐาน 10

$$\\sqrt(2) (mod 1)= 0.4142… = 4 \* 10^{-1} + 1 \* 10^{-2} + 4 \* 10^{-3} +…$$

โดยหากต้องการทศนิยมเพียงทศนิยม 3 หลัก

$$\\sqrt(2) (mod 1) \\approx 4 \* 10^{-1} + 1 \* 10^{-2} + 4 \* 10^{-3}$$

เราจะสามารถประมาณค่า ผ่าน Discretized Torus ที่ฐาน 10, ทศนิยม 3 หลักได้

$$\\mathbb{T}\_{10^3} = { 0, \\frac{1}{1000},…,\\frac{1000-1}{1000} = \\frac{999}{1000} }$$

ซึ่งในการทำงานจริง เราจะทำงานบนฐาน 2 ที่มี bit precision 32, 64 หลัก

$$\\mathbb{T}\_{2^\\Omega} = { 0, \\frac{1}{2^\\Omega},…,\\frac{2^\\Omega-1}{2^\\Omega}}, , \\Omega = {32, 64}$$

ดังนั้น Discretized Torus (modulo q) จะมีหน้าตา

$$\\mathbb{T}\_{q} = \\frac{1}{q} \\mathbb{Z} / \\mathbb{Z} = { 0, \\frac{1}{q}, ... ,\\frac{q-1}{q} }$$

ซึ่งเป็น subset ของ Torus แต่ตอนที่ implementation elements บน Discretized Torus จะพิจารณาเซ็ตที่เป็น modulo ของจำนวนเต็ม (หากไม่เห็นภาพให้นึกถึงชั่วโมงในนาฬิกาที่มี 12 เลข พอเป็น 13:00 (บ่ายโมง) ก็จะกลับมาเป็นเลข 1 อีกครั้ง แต่บนเซ็ต modulo 12 จริงๆแล้วจะเริ่มที่ 0 แล้วจบที่ 11 ) ซึ่งคือ

$$\\mathbb{Z} / q \\mathbb{Z} = {0, 1,..., q - 1 }$$

เวลาทำงานจริง เพราะ preserve การบวกและการคูณ scalar คล้ายกับคุณสมบัติ (Discretized) Torus ที่มีอยู่แล้ว ซึ่งเป็นการคำนวนที่เกิดขึ้นบนตัวเศษของเศษส่วนบนนั้น (numerator)

**1.2 Encryption and Decryption - Secured by Torus**

เมื่อเราทำความเข้าใจ Torus และการทำ Discretization แล้ว ขั้นตอนถัดมาจะเข้าสู่ขั้นตอนของการทำ encryption/decryption ผ่านการใช้งาน Torus

โดย space เริ่มต้นของข้อมูล plaintext นั้นจะอยู่บน T\_p (Discretized Torus, modulo p) เพื่อที่จะเตรียม encrypt ผ่านฟังก์ชั้น TLWE ไปเป็น ciphertext ที่เป็น n-dimensional tuples บน Discretized Torus, modulo q หรือบน

$$\\mathbb{T}\_q^{n} = \\underbrace{(\\mathbb{T}\_q, \\ldots, \\mathbb{T}\_q)}\_{n\\ \\text{times}}$$

โดยที่

1.  มี public parameter = {n, \\sigma, p, q }
    
2.  \\sigma = standard deviation ของ normal distribution ที่ e (noise/error) ถูกหยิบขึ้นมาโดยที่ e < 1/|2p| (สำหรับการทำ decryption)
    
3.  ค่า p หาร q ลงตัว (นั่นคือ set ของ plaintext เป็นซับเซ็ตของ ciphertext หรือตัวส่วน ciphertext มีความละเอียดที่มากกว่า)
    
4.  และมี secret key/private key = s = (s\_1,…,s\_n) โดยที่ s\_i = 0, 1
    

เราจะสร้างวิธี

1\. Encryption

ของ plaintext \\mu บน T\_p (ซึ่งเป็นค่าบน T\_q ด้วย จากการที่ p หาร q ลงตัว) ผ่านการนำ a\_1,…,a\_n ที่สุ่มมาจาก T\_q มาใช้งานกับค่า b ที่ผ่านการ encrypt แล้ว ผ่านสมการ

$$Encrypt\_{sk}(\\mu) = TLWE\_s(\\mu) = (a\_1,…,a\_n,b), \\ b = \\sum\_{i = 1}^{n} (s\_i \\cdot a\_i) + \\mu + e$$

โดยความหมายคือการ encrypt บนตัวแปร b คือการที่ private key s ทำหน้าที่สุ่มปิดค่า a\_i ที่จะใช้ (เพราะค่า s\_i ที่เป็น 0 จะทำให้ผลคูณ s\_i, a\_i หายไป) เพื่อนำไปรวมกับ plaintext (\\mu) เดิมที่มี noise เข้ามา (e) ด้วย

2\. Decryption

สังเกตุจากสมการด้านบนได้ว่า

$$\\mu + e = b - \\sum\_{i = 1}^{n} (s\_i \\cdot a\_i)$$

สมมติให้

$$\\mu = \\frac{m}{p}$$

ได้เพราะ \\mu อยู่ใน T\_p เมื่อให้สัญลักษณ์ ⌊ x ⌉ แทนการหาจำนวนเต็มที่ใกล้เคียงค่า x ที่สุด จึงได้

$$\\lfloor p \\cdot (\\mu + e) \\rceil = \\lfloor m + p \\cdot e \\rceil = m + \\lfloor p \\cdot e \\rceil = m$$

เพราะ

$$p \\cdot e < \\frac{1}{2} \\cdot \\frac{p}{|p|} \\Rightarrow p \\cdot e < \\frac{1}{2} , , , p \\cdot e > - \\frac{1}{2}$$

ดังนั้นเราจะได้วิธีการ decrypt ผ่านสมการ

$$Decrypt\_{sk}(c) = \\frac{\\lfloor p \\cdot (b - \\sum\_{i = 1}^{n} (s\_i \\cdot a\_i)) \\rceil \\text{ mod p}}{p}$$

**1.3 Examples**

![https://eprint.iacr.org/2021/1402.pdf](https://storage.googleapis.com/papyrus_images/4a8fed3f0a058b0e88ef1e0a075b175607a7fa9bffedd873da888b0b0e543a9b.png)

https://eprint.iacr.org/2021/1402.pdf

จากตัวอย่างดังกล่าว เราจะมี plaintext ในรูปแบบ

$$\\mathbb{T}\_4 = { 0, \\frac{1}{4}, \\frac{2}{4}, \\frac{3}{4} }$$

เป็นวงด้านใน และ ciphertext ในรูปแบบ

$$\\mathbb{T}\_{64} = { 0, \\frac{1}{64}, \\frac{2}{64}, \\frac{3}{64},..., \\frac{63}{64}}$$

ซึ่งเป็นวงด้านนอก/ละเอียดกว่า ทำให้ plaintext จะสามารถเขียนได้ในรูปแบบ

$${ 0, \\frac{1}{4}, \\frac{2}{4}, \\frac{3}{4} } ={ 0, \\frac{16}{64}, \\frac{32}{64}, \\frac{48}{64} }$$

โดยที่ noise จะมีค่าได้ตั้งแต่

$$e < \\frac{1}{|2p|} = \\frac{8}{64} \\Rightarrow e = -\\frac{7}{64},...,\\frac{7}{64}$$

จะทำให้เมื่อนำ plaintext ไปบวกกับค่า noise แล้วจะไม่ตกช่องสีดำที่ไม่สามารถ decrypt ค่าได้

สมมติค่า private key = 0, plaintext = 1/4, error = 3/64 ทำให้เมื่อทำการ encrypt ตัว plaintext จะได้ค่า b จะเป็น plaintext + error = 19/64 และเมื่อจะดำเนินการ decrypt ค่ากลับ ทำให้สามารถดำเนินการที่ค่า b ได้เลย และจะได้ ⌊4 \* (19/64)⌉ mod 4 / 4 = ⌊19/16⌉ mod 4 / 4 = 1/4 ค่าเดิมกลับมา

### 2\. Computations

ท่านผู้อ่านสามารถติดตามได้ในเร็วๆนี้

---

*Originally published on [lordachita](https://paragraph.com/@lordachita/zama-part-4-1-simple-brief-to-tfhe-building-blocks)*
