
หมายเหตุ: โพสนี้เป็นโพสสุดท้ายบนเว็ปไซต์ Mirror ท่านผู้อ่านสามารถติดตามบทความถัดๆไปได้ที่เว็ปไซต์ paragraph
สวัสดีครับผู้อ่านทุกๆท่าน
หลังจากที่ท่านได้อ่านบทความ Series Part 2.X และ 3.X ผู้อ่านน่าจะพอเห็นประโยชน์ที่ได้รับจาก การใช้งาน products ต่างๆของ Zama แล้ว ไม่มั่นใจว่าผู้อ่านรู้สึกเหมือนผมไหมครับว่าเทคโนโลยี FHE ให้ความรู้สึกเสมือนมายากลสุดพิเศษที่เสกให้พวกเราสามารถคำนวนบนข้อมูลที่ถูกเข้ารหัสไว้ได้ โดยที่ไม่ต้องทำความเข้าใจเบื้องหลัง ที่ถูกสร้างมาอย่างดีด้วยภาษาคณิตศาสตร์ ที่มีเพียงกลุ่มผู้ถูกเลือกเท่านั้นที่จะสามารถถอดความและทำความเข้าใจถึงความสวยงามขอมายากลนี้ได้
โดยในบทความนี้ ผมขออนุญาตเป็นตัวแทนที่เคยเจาะลึกภาษานี้มากว่า 4 ปี พาเพื่อนๆมาทำเข้าใจเบื้องหลังถึงแก่นของมายากลอันสุดวิเศษที่ชื่อ TFHE ที่เป็นเบื้องหลังความสำเร็จของ Zama ผ่านมุมมองที่ผู้เขียนได้ลองศึกษามาข้ามปีครับ
ทาง Zama ได้แนะนำ Document เกี่ยวกับ TFHE ไว้หลากหลายรูปแบบ
ไม่ว่าจะเป็นรูปแบบของ Blog ทั้งหมด 4 Parts, article และ handbook ซึ่งเขียนไว้ได้ดีทุกรูปแบบ ปัญหาคือไม่ว่าจะเป็นแบบไหน ปัจจุบันผู้เขียนก็ยังไม่เจอรูปแบบที่ friendly กับคนที่อาจจะยังไม่ได้ชำนาญคณิตศาสตร์ (ด้วยลักษณะของความซับซ้อนของคณิตศาสตร์ในการทำ Cryptography)
ในบทความนี้ ผู้เขียนจะขมวดบทความ เห็นสั้นและกระชับเพื่อให้ผู้ที่สนใจพอเห็นภาพว่า คณิตศาสตร์เบื้องหลังทำงานอย่างไร โดยวางแผนเขียนบรรยายเพียง 2 หัวข้อหลัก ได้แก่
Building Blocks - จะเป็นการอธิบายส่วนประกอบหลักในการทำ encryption/decryption ระหว่าง plaintexts/ciphertexts
Computations - จะเป็นการอธิบายวิธีการทำบวกและคูณ ซึ่งรวมถึงวิธีการจัดการ noise ที่เกิดขึ้นจากการคำนวนบนข้อมูลที่ถูกเข้ารหัสแล้ว
ผู้อ่านควรทราบ arithmetic สำหรับการ programming ในเบื้องต้น (โดยเฉพาะการทำ modulo)
1.1 Torus and its Discretization
Torus หรือสิ่งที่นักคณิตศาสตร์เรียกมันว่าโดนัท เป็นโครงสร้างสุดอัศจรรย์ ที่มีอิทธิพลและมีประโยชน์มากๆสำหรับการศึกษาคณิตศาสตร์ โดยเฉพาะฝั่งของ Lie Group ที่มีคุณสมบัติทั้งในเชิงของเลขคณิต (arithmetic) และเชิงเรขาคณิต (geometric) รวมไว้ด้วยกัน

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

โดยในฝั่ง cryptography เราจะโฟกัสบน Torus ที่เป็นวงกลม และมองคุณสมบัติเชิง arithmetic ที่ได้เป็นหลัก ซึ่งจะได้ว่า Torus ตัวนี้เป็นเซ็ต/กลุ่มของส่วนที่เป็นทศนิยมของจำนวนจริง
ให้ลองนึกภาพ
จากนั้นเมื่อเราสนใจส่วนที่เป็นทศนิยมของ sqrt 2 นั่นคือการ modulo 1 บนจำนวนจริง และจะได้ว่า
โดย Torus สามารถทำการบวกและคูณ scalar (ที่เป็นจำนวนเต็ม) ได้แต่จะยังไม่สามารถนิยามการคูณระหว่างสมาชิกบน Torus ตรงๆได้ ให้ลองพิจารณา 1/2 = 3/2 บน Torus แต่
ซึ่ง Torus จะมีสมมติฐาน Decisional Learning With Errors ที่ว่า “ภายใต้ตัวเลือกที่ดีมากพอ เราจะไม่สามารถจำแนกความแตกต่างระหว่างตัวอย่างที่สุ่มมา (จาก Torus) กับตัวอย่างสุ่มที่ถูก encrypted/noise added มาแล้ว” ทำให้การทำ FHE บน Torus จะมีความปลอดภัยที่ถูกการันตีมาแล้ว
ซึ่งการคำนวนบนคอมพิวเตอร์ จะต้องมีการแปลงค่าที่ continuous ให้อยู่ในรูปของ discrete และสามารถกำหนดความแม่นยำ ซึ่งสามารถทำได้ผ่านการทำ Discretization ตัว Torus ยกตัวอย่างตัว sqrt 2 บน Torus ซึ่งสามารถเขียนในรูปของฐาน 10
โดยหากต้องการทศนิยมเพียงทศนิยม 3 หลัก
เราจะสามารถประมาณค่า ผ่าน Discretized Torus ที่ฐาน 10, ทศนิยม 3 หลักได้
ซึ่งในการทำงานจริง เราจะทำงานบนฐาน 2 ที่มี bit precision 32, 64 หลัก
ดังนั้น Discretized Torus (modulo q) จะมีหน้าตา
ซึ่งเป็น subset ของ Torus แต่ตอนที่ implementation elements บน Discretized Torus จะพิจารณาเซ็ตที่เป็น modulo ของจำนวนเต็ม (หากไม่เห็นภาพให้นึกถึงชั่วโมงในนาฬิกาที่มี 12 เลข พอเป็น 13:00 (บ่ายโมง) ก็จะกลับมาเป็นเลข 1 อีกครั้ง แต่บนเซ็ต modulo 12 จริงๆแล้วจะเริ่มที่ 0 แล้วจบที่ 11 ) ซึ่งคือ
เวลาทำงานจริง เพราะ 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 หรือบน
โดยที่
มี public parameter = {n, \sigma, p, q }
\sigma = standard deviation ของ normal distribution ที่ e (noise/error) ถูกหยิบขึ้นมาโดยที่ e < 1/|2p| (สำหรับการทำ decryption)
ค่า p หาร q ลงตัว (นั่นคือ set ของ plaintext เป็นซับเซ็ตของ ciphertext หรือตัวส่วน ciphertext มีความละเอียดที่มากกว่า)
และมี 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 บนตัวแปร b คือการที่ private key s ทำหน้าที่สุ่มปิดค่า a_i ที่จะใช้ (เพราะค่า s_i ที่เป็น 0 จะทำให้ผลคูณ s_i, a_i หายไป) เพื่อนำไปรวมกับ plaintext (\mu) เดิมที่มี noise เข้ามา (e) ด้วย
2. Decryption
สังเกตุจากสมการด้านบนได้ว่า
สมมติให้
ได้เพราะ \mu อยู่ใน T_p เมื่อให้สัญลักษณ์ ⌊ x ⌉ แทนการหาจำนวนเต็มที่ใกล้เคียงค่า x ที่สุด จึงได้
เพราะ
ดังนั้นเราจะได้วิธีการ decrypt ผ่านสมการ
1.3 Examples

จากตัวอย่างดังกล่าว เราจะมี plaintext ในรูปแบบ
เป็นวงด้านใน และ ciphertext ในรูปแบบ
ซึ่งเป็นวงด้านนอก/ละเอียดกว่า ทำให้ plaintext จะสามารถเขียนได้ในรูปแบบ
โดยที่ noise จะมีค่าได้ตั้งแต่
จะทำให้เมื่อนำ 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 ค่าเดิมกลับมา
ท่านผู้อ่านสามารถติดตามได้ในเร็วๆนี้
No comments yet