IT General
น้องๆ เคยคิดมั้ยว่า ถ้าเราอยากให้คนอื่นช่วยคำนวณข้อมูลของเรา แต่ไม่อยากให้เค้ารู้ข้อมูลดิบของเราเลย จะทำยังไง? Homomorphic Encryption (HE) นี่แหละคือคำตอบ! มันเป็นเทคนิคการเข้ารหัสที่ทำให้เราสามารถทำการคำนวณบนข้อมูลที่เข้ารหัสแล้วได้ โดยที่คนคำนวณไม่ต้องเห็นข้อมูลดิบเลย เจ๋งป่ะล่ะ
สมัยผมทำร้านเน็ตฯ ใหม่ๆ เรื่องความปลอดภัยของข้อมูลยังไม่บูมเท่าสมัยนี้ แต่พอเริ่มมี Cloud Computing อะไรพวกนี้ คนก็เริ่มกังวลเรื่องความเป็นส่วนตัวมากขึ้น เพราะข้อมูลเราไปอยู่บน Server คนอื่นนี่นา HE เลยเริ่มเป็นที่สนใจ เพราะมันตอบโจทย์เรื่อง Privacy ได้ดีมากๆ
ทำไมมันถึงสำคัญ? ลองนึกภาพนะ สมมติเรามีข้อมูลทางการแพทย์ที่ละเอียดอ่อนมากๆ แล้วเราอยากใช้ AI ช่วยวิเคราะห์เพื่อหาแนวทางการรักษา แต่เราไม่อยากให้บริษัท AI รู้ข้อมูลผู้ป่วยเลย HE จะช่วยให้เราส่งข้อมูลที่เข้ารหัสไปให้ AI วิเคราะห์ได้ ผลลัพธ์ที่ได้ก็เข้ารหัสอยู่ แต่เราสามารถถอดรหัสออกมาดูได้โดยที่ AI ไม่เคยเห็นข้อมูลดิบเลย นี่แหละคือพลังของ HE!
พื้นฐานเลยคือเรื่องการเข้ารหัส (Encryption) และถอดรหัส (Decryption) เราต้องมี Key สองชุด คือ Public Key สำหรับเข้ารหัส และ Private Key สำหรับถอดรหัส ใครมี Public Key เราก็ส่งข้อมูลที่เข้ารหัสให้เค้าได้ แต่คนที่จะถอดรหัสได้ต้องมี Private Key เท่านั้น
สมัยก่อนผมเคยเขียนโปรแกรมเข้ารหัสง่ายๆ ด้วย XOR (Exclusive OR) แต่พวกนั้นมันไม่ปลอดภัยหรอกนะ โดน Hack ง่ายมาก สมัยนี้เค้าใช้ Algorithm ที่ซับซ้อนกว่าเยอะ เช่น AES หรือ RSA แต่หลักการพื้นฐานก็คล้ายๆ กัน
# ตัวอย่างการเข้ารหัสแบบง่าย (XOR) - ไม่ปลอดภัยนะ!
def xor_encrypt(data, key):
encrypted_data = bytearray()
for i in range(len(data)):
encrypted_data.append(data[i] ^ key[i % len(key)])
return bytes(encrypted_data)
data = b"Hello, SiamCafe!"
key = b"MySecretKey"
encrypted_data = xor_encrypt(data, key)
print(f"Encrypted: {encrypted_data}")
# การถอดรหัสก็ทำ XOR เหมือนเดิม
decrypted_data = xor_encrypt(encrypted_data, key)
print(f"Decrypted: {decrypted_data}")
หัวใจสำคัญของ HE คือคุณสมบัติ Homomorphic ที่ทำให้เราสามารถทำการคำนวณบนข้อมูลที่เข้ารหัสได้ คุณสมบัติหลักๆ มีสองแบบคือ:
HE บางแบบรองรับแค่ Additive หรือ Multiplicative อย่างเดียว แต่บางแบบ (Fully Homomorphic Encryption - FHE) รองรับทั้งคู่ ทำให้เราสามารถทำการคำนวณที่ซับซ้อนได้มากขึ้น
HE ไม่ได้ง่ายเหมือนเข้ารหัสแบบธรรมดา ต้องใช้ Library เฉพาะทาง และต้องเข้าใจ Concept พอสมควร แต่ไม่ต้องกลัว ผมจะแนะนำให้
มี Library HE ให้เลือกใช้หลายตัว แต่ละตัวก็มีข้อดีข้อเสียต่างกันไป ขึ้นอยู่กับ Use Case ของเรา เช่น:
ผมแนะนำให้เริ่มจาก SEAL ก่อน เพราะ Documentation ดี และมี Examples เยอะ SiamCafe Blog มีบทความเกี่ยวกับ SEAL ด้วยนะ ลองไปอ่านดูได้
การติดตั้งก็แล้วแต่ Library บางตัวต้อง Compile เอง บางตัวมี Package ให้ Download แต่ส่วนใหญ่ก็ต้องใช้ C++ เป็นหลัก
ตัวอย่างการติดตั้ง SEAL บน Linux:
git clone https://github.com/microsoft/SEAL
cd SEAL
cmake .
make
sudo make install
หลังจากติดตั้ง Library แล้ว ก็ถึงเวลาเขียน Code เข้ารหัสข้อมูล และทำการคำนวณ ตัวอย่างการบวกเลขที่เข้ารหัสด้วย SEAL:
#include "seal/seal.h"
#include
using namespace seal;
using namespace std;
int main()
{
EncryptionParameters parms(scheme_type::BFV);
size_t poly_modulus_degree = 4096;
parms.set_poly_modulus_degree(poly_modulus_degree);
parms.set_coeff_modulus(CoeffModulus::BFVDefault(poly_modulus_degree));
parms.set_plain_modulus(256);
SEALContext context(parms);
KeyGenerator keygen(context);
PublicKey public_key = keygen.public_key();
SecretKey secret_key = keygen.secret_key();
Encryptor encryptor(context, public_key);
Decryptor decryptor(context, secret_key);
Evaluator evaluator(context);
Plaintext x_plain("5");
Plaintext y_plain("7");
Ciphertext x_encrypted, y_encrypted, result;
encryptor.encrypt(x_plain, x_encrypted);
encryptor.encrypt(y_plain, y_encrypted);
evaluator.add(x_encrypted, y_encrypted, result);
Plaintext decrypted_result;
decryptor.decrypt(result, decrypted_result);
cout << "x = 5" << endl;
cout << "y = 7" << endl;
cout << "x + y = " << decrypted_result.to_string() << endl;
return 0;
}
Code นี้จะทำการเข้ารหัสเลข 5 และ 7 แล้วบวกกัน ผลลัพธ์ที่ได้ก็จะถูกถอดรหัสออกมาเป็น 12 โดยที่ Code ไม่เคยเห็นเลข 5 และ 7 เลย
HE ไม่ใช่ทางเลือกเดียวในการปกป้อง Privacy ยังมีเทคนิคอื่นๆ อีก เช่น:
แต่ละเทคนิคก็มีข้อดีข้อเสียต่างกันไป HE เหมาะกับกรณีที่เราต้องการให้คนอื่นช่วยคำนวณข้อมูลของเรา โดยที่เราไม่ต้องไว้ใจเค้าเลย
| เทคนิค | ข้อดี | ข้อเสีย | Use Case |
|---|---|---|---|
| Homomorphic Encryption | ปกป้อง Privacy ได้สูงสุด | คำนวณช้า, ซับซ้อน | คำนวณข้อมูลละเอียดอ่อนบน Cloud |
| Differential Privacy | ใช้งานง่าย, มี Library ให้ใช้เยอะ | สูญเสียความแม่นยำของข้อมูล | เปิดเผยข้อมูลสถิติโดยไม่ระบุตัวบุคคล |
| Secure Multi-Party Computation | คำนวณได้หลากหลาย, ไม่ต้องไว้ใจใคร | ต้องมีการสื่อสารระหว่างหลายฝ่าย | ประมูลออนไลน์แบบไม่เปิดเผยราคา |
หวังว่าน้องๆ จะเข้าใจ HE มากขึ้นนะ ถ้ามีคำถามอะไรเพิ่มเติม ถามมาได้เลย SiamCafe Blog มีบทความเกี่ยวกับ Privacy อีกเยอะ ลองไปอ่านดูนะ
เฮ้ น้องๆ มาต่อกันเรื่อง Homomorphic Encryption (HE) คราวนี้มาดู Best Practices กันบ้าง สมัยผมทำร้านเน็ต SiamCafe เนี่ย ความปลอดภัยของข้อมูลลูกค้าสำคัญสุดๆ HE นี่แหละตอบโจทย์ แต่ไม่ใช่ว่าเอามาใช้ปุ๊บปั๊บแล้วจะเทพเลยนะ ต้องมีเทคนิคกันหน่อย
คิดง่ายๆ เหมือนเราใส่กุญแจหลายชั้น ถ้ากุญแจไม่ดี โจรก็ไขง่าย HE ก็เหมือนกัน ถ้าตั้งค่าไม่ดี ก็ไม่ปลอดภัยเท่าที่ควร เดี๋ยวจะหาว่าพี่ไม่เตือน
1. เลือก Library ที่ใช่: สมัยก่อน Library HE ยังไม่เยอะเท่าสมัยนี้ แต่ปัจจุบันมีให้เลือกเพียบ แต่ละตัวก็มีจุดเด่นจุดด้อยต่างกันไป ศึกษาให้ดีก่อนเลือกใช้ บางตัวเหมาะกับงานคำนวณทางสถิติ บางตัวเหมาะกับ AI เลือกให้ตรงกับงานของเรา
# ตัวอย่าง (pseudo-code)
import HE_library # สมมติว่ามี Library นี้
# เลือก scheme ที่เหมาะสม (เช่น BFV, CKKS)
params = HE_library.create_parameters(scheme='BFV')
# สร้าง keys
secret_key, public_key = HE_library.generate_keys(params)
2. Parameter Selection is KEY: HE มันมี Parameter ให้ปรับเยอะมากกกก (ก.ไก่ล้านตัว) เหมือนปรับแต่งรถแข่งอ่ะน้อง ตั้งค่าไม่ดีก็วิ่งไม่ออก แถมอาจจะชนอีกต่างหาก Parameter พวกนี้มีผลต่อความปลอดภัยและประสิทธิภาพโดยตรง ศึกษาพวก security level, polynomial modulus degree, coefficient modulus bitsize ให้ดีๆ
3. Noise Management: HE มันจะมี "Noise" สะสมในการคำนวณ ยิ่งคำนวณเยอะ Noise ก็เยอะตาม ถ้า Noise เยอะเกินไป ข้อมูลก็จะ decrypt ไม่ได้ เหมือนเราพิมพ์งานแล้วหมึกหมด อ่านไม่ออกเลย ทีนี้ก็ซวยเลย ต้องมีเทคนิคในการ Manage Noise เช่น Modulus Switching หรือ Rescaling
4. Hybrid Approach: ไม่จำเป็นต้องใช้ HE 100% เสมอไป บางทีการผสมผสานกับเทคนิคอื่นๆ เช่น Differential Privacy หรือ Secure Multi-Party Computation (SMPC) อาจจะได้ผลลัพธ์ที่ดีกว่า คล้ายๆ ทำอาหารอ่ะน้อง ใส่เครื่องปรุงหลายๆ อย่าง รสชาติมันจะกลมกล่อม
เคยเจอเคสลูกค้า SiamCafe อยากทำระบบวิเคราะห์ข้อมูลลูกค้า แต่ไม่อยากให้ข้อมูลส่วนตัวรั่วไหล ผมแนะนำให้ใช้ HE ร่วมกับ Differential Privacy คือ HE เอาไว้ encrypt ข้อมูล ส่วน Differential Privacy เอาไว้เพิ่ม Noise ในผลลัพธ์ ทำให้ไม่สามารถระบุตัวตนลูกค้าได้ แม้จะถอดรหัสข้อมูลออกมาแล้วก็ตาม
iCafeForexจริง! สมัยก่อนช้าโคตรๆ แต่ปัจจุบันเร็วขึ้นเยอะมากกกก แต่ก็ยังช้ากว่าการคำนวณแบบปกติอยู่ดี ต้อง Trade-off ระหว่างความปลอดภัยกับความเร็ว เลือกเอาว่าจะเอาชัวร์หรือเอาเร็ว
ได้! มีงานวิจัยเยอะมากที่ใช้ HE กับ Machine Learning แต่ก็ต้องปรับ Algorithm กันหน่อย เพราะ Algorithm ML ส่วนใหญ่มันออกแบบมาให้ทำงานกับข้อมูลแบบปกติ ไม่ได้ออกแบบมาให้ทำงานกับข้อมูลที่ Encrypt เอาไว้
ไม่มีอะไร 100% หรอกน้อง HE ก็เหมือนกัน ถ้า Parameter ตั้งค่าไม่ดี หรือมีช่องโหว่ใน Library ที่ใช้ แฮกเกอร์ก็เจาะได้อยู่ดี ต้อง Update Library อยู่เสมอ และต้อง Monitor ระบบอย่างสม่ำเสมอ
SiamCafe BlogHomomorphic Encryption เป็นเทคโนโลยีที่น่าสนใจมากๆ สามารถช่วยให้เราประมวลผลข้อมูลที่ Encrypt เอาไว้ได้ โดยไม่ต้อง Decrypt ข้อมูลก่อน แต่ก็ต้องระวังเรื่อง Performance และ Parameter Selection ศึกษาให้ดีก่อนเอาไปใช้งานจริง จะได้ไม่เสียเงินฟรี
หวังว่าน้องๆ จะได้ประโยชน์จากบทความนี้นะ ถ้ามีคำถามอะไรเพิ่มเติม ถามมาได้เลย พี่บอมยินดีตอบเสมอ