Cryptography

Cryptography

ข่าวและบทความที่เกี่ยวข้อง

All Cryptography

PostType Filter En

บทความ

การเข้ารหัสลับ (Encryption) เบื้องต้น สำหรับนักพัฒนา
บทความ “การเข้ารหัสลับ (Encryption) เบื้องต้น สำหรับนักพัฒนา” นี้ใช้แหล่งข้อมูลส่วนใหญ่จาก e-book ชื่อ Practical Cryptography for Developers อวจ: ที่อยู่ในบทความนั้นย่อมาจาก เอาไว้จำ จุดประสงค์ของผู้เขียนมีไว้เพื่อสรุปความสำหรับผู้อ่านที่มีความเข้าใจอยู่บ้างแล้ว หรืออ่านหัวข้อนั้นแล้วให้สามารถจำนิยามของหัวข้อนั้นได้ สาร ในบทความนี้ไม่ใช่ สารเคมี แต่เป็นข้อความ (message) ในปัจจุบันอินเทอร์เน็ตเข้ามาเป็นส่วนหนึ่งของชีวิตทุกคน แต่กระนั้นความสะดวกสบายที่มาพร้อมกับอินเทอร์เน็ต ก็ไม่ได้นำมาเฉพาะข้อดีเพียงอย่างเดียว หากมองในด้านความปลอดภัยด้วยนั้น อินเทอร์เน็ตจึงเป็นเหมือนดาบสองคม เนื่องจากว่าหากนักพัฒนา หรือผู้ใช้งานขาดความเข้าใจ ก็จะทำให้เกิดช่องโหว่ให้ผู้ไม่ประสงค์ดีโจมตีระบบ หรือเกิดการโจรกรรมทางไซเบอร์ได้ และหนึ่งในหัวใจสำคัญของการสื่อสารระหว่างผู้ใช้งาน (Client) กับแม่ข่าย (Server) นั่นก็คือ การเข้ารหัสลับ (Encryption) โดยบทความนี้จะค่อย ๆ ปูนิยามของศัพท์ต่าง ๆ ที่เกี่ยวข้อง เช่น การเข้ารหัส (Encoding), ฟังก์ชันแฮช (Hashing function) เป็นต้น จนนำไปสู่เรื่องการเข้ารหัสลับ (Encryption) ทีละหัวเรื่อง ดังต่อไปนี้ การเข้ารหัส (Encoding) อวจ: ด <-> d ; เสียง “ด” ในภาษาไทย คือเสียง “d” ในภาษาอังกฤษ ผู้เขียนใช้ภาษาไทยว่า การเข้ารหัส เพื่อแปลคำว่า Encoding และ การเข้ารหัสลับ เพื่อแปลคำว่า Encryption เนื่องจากทั้งสองสิ่งนี้แตกต่างกันอย่างมาก การเข้ารหัสนั้นไม่ได้ทำเพื่อรักษาความลับของสาร แต่ทำเพื่อความสะดวกในการรับส่งสาร หรืออ่านสารได้ง่ายขึ้น ตัวอย่างเช่น การแปลงเลขฐานสองเป็นฐานสิบ หรือการแปลงเลขฐานสิบเป็นสายอักขระ (byte array) หรือการแปลงสายอักขระเป็นสาร base64 เป็นต้น การเข้ารหัสนั้น สามารถย้อนกลับได้ง่ายด้วย การถอดรหัส (Decoding) ถ้าหากเรารู้ว่าสารที่เรารับมาถูกเข้ารหัสมาแบบใด เราก็จะสามารถถอดรหัสสารนั้นเป็นสิ่งที่เราต้องการได้ เช่น การแปลงสาร base64 เป็นสายอักขระ ตัวอย่าง การเข้ารหัสจากสายอักขระเป็นสาร base64 และถอดรหัสจากสาร base64 เป็นสายอักขระ ในภาษา python เกร็ด: ภาษาคาราโอเกะ ภาษาลู หรือคำผวน ก็เป็นการเข้ารหัสเช่นกัน 🙂 ฟังก์ชันแฮช (Hashing function) อวจ: คิดถึง -> 345e28e423062ecb7dad358f1b47e4abb836a0cd77cf9f47cf6e6478f8d43403 ; ให้แฮชของความคิดถึง แทนความซาบซึ้งในใจ (เพราะจำไม่ได้ 555) การแฮชนั้นคล้ายกับการเข้ารหัสตรงที่ ถ้าเรามีสาร และฟังก์ชันการแฮช เราก็สามารถ ผลิต เลขแฮชได้ แต่กลับกัน หากเราได้เลขแฮชมา เราจะไม่สามารถรู้ได้ว่า สารก่อนเข้าฟังก์ชันแฮชเขียนไว้ว่าอย่างไร ซึ่งจะนำไปสู่คุณสมบัติของฟังก์ชันแฮช คุณสมบัติของฟังก์ชันแฮชนั้นมีสองประการ คือ คำว่า แทบจะไม่มีสิทธิ์ชนกัน นั้น แน่นอนว่าอาจจะเกิดการชนกันได้ แต่เกิดขึ้นยาก อภิมหาโคตรยาก เรียกว่า การพยายามจะหาสารสองอันที่จะให้ผลลัพธ์เลขแฮชเดียวกัน ก็เหมือนกับการควานหาฝุ่นในจักรวาลก็ปานนั้น แต่ในอนาคตก็ไม่แน่ว่า Quantum Computer อาจจะทำให้ SHA-2 ที่ได้รับความนิยมอยู่ในปัจจุบันถูกโค่นลงได้สักวัน อันนี้ก็เป็นเรื่องของอนาคตที่เราต้องติดตามกันต่อไป ตัวอย่าง ฟังก์ชันแฮชในภาษา python ในที่นี้ ผู้เขียนขอใช้ตัวอย่างฟังก์ชัน sha256 หรือ SHA-2 มาเป็นตัวอย่าง เกร็ด: ยังมีกลุ่มฟังก์ชันที่มีแนวคิดคล้ายกับฟังก์ชันแฮชอีกสองอย่าง คือ check digit และ checksum แต่ต่างกันตรงความยากในการชนกัน เช่น หมายเหตุ: วิธีการคำนวน check digit นำมาจาก ที่นี่ จะสังเกตว่า การคำนวน check digit นั้นสามารถเกิดผลลัพธ์ที่ชนกัน (หรือเหมือนกันจากในตัวอย่างคือเลข หนึ่ง) ได้ค่อนข้างง่าย ส่วน checksum นั้นจะเกิดผลลัพธ์ที่ชนกันค่อนข้างยาก ตัวอย่างคือ SHA-1 ในอดีตฟังก์ชันนี้ถูกใช้เพื่อเป็นฟังก์ชันแฮชด้วย แต่ปัจจุบันมีผู้ที่สามารถหาผลลัพธ์ที่ทำให้เกิดผลลัพธ์ที่เหมือนกันได้แล้ว ดังนั้น SHA-1 จึงไม่ดีพอที่จะใช้เป็นฟังก์ชันแฮชเพื่อความปลอดภัยอีกต่อไป อย่างไรก็ดี SHA-1 นั้นยังมีการใช้เพื่อทำ checksum เพื่อตรวจสอบความถูกต้องของไฟล์อยู่ ฟังก์ชัน MAC อวจ: mac_func(สาร, รู้กันแค่เรา) -> ตัวเทียบว่าสารถูกต้อง ; นายเอส่งจดหมายรัก(สาร)หาน้องบีโดยใช้กระดาษสองแผ่นเสมอ(รู้กันแค่เรา) แต่วันหนึ่งไปรษณีย์ทำปลิวหายไปแผ่นหนึ่ง น้องบีจึงรู้ว่าจดหมายนั้นไม่ครบถ้วน(ไม่ถูกต้อง)เพราะไม่ครบสองแผ่น MAC ในที่นี้ย่อมาจาก Message Authenticaion Code ไม่ได้เกี่ยวข้องกับ MAC Address หรือ Media Access Control Address แต่อย่างใด MAC มีไว้เพื่อทำหน้าที่พิสูจน์ว่าสารที่เราได้รับมาถูกต้องสมบูรณ์หรือไม่ เนื่องจากการคำนวน MAC โดยวิธีใช้ hash_func(key + msg) นั้นไม่ปลอดภัยจากการโจมตีแบบ Length Extension Attack ดังนั้นฟังก์ชัน MAC ที่ปลอดภัยและได้รับความนิยมคือ HMAC (Hash-based MAC) โดยมีหน้าตาคือ mac = HMAC(key, msg, hash_func) ตัวอย่างฟังก์ชัน HMAC ในภาษา python ฟังก์ชัน KDF อวจ: kdf_func(เกลือ, รหัสผ่าน, อย่างอื่นถ้ามี) -> รหัสผ่านที่แปลงแล้ว KDF ย่อมาจาก Key Derivation Functions ฟังจากชื่อแล้วแอบน่ากลัวว่าจะเกี่ยวกับ Derivative ในคณิตศาสตร์ใช่ไหม แต่ไม่ใช่เช่นนั้น ฟังก์ชันนี้ไม่ได้เกี่ยวกับการคำนวน Derivative ผู้อ่านจึงไม่ต้องกังวล โดยในหัวข้อนี้จะพาผู้อ่านสู่ความเข้าใจ KDF ผ่านการจัดการรหัสผ่านระดับต่าง ๆ  ในการจัดการรหัสผ่าน (password) นั้นแน่นอนว่าเราไม่สามารถหลีกหนีเรื่องความปลอดภัยไปได้ และการเก็บรหัสผ่านของผู้ใช้ที่สามารถนำไปใช้งานกับระบบได้ทันทีก็เปรียบเสมือนการเก็บระเบิดเวลาไว้ในระบบ ผู้เขียนขอกล่าวถึง การจัดการรหัสผ่านโดยเริ่มตั้งแต่ระดับ อย่าหาทำ ไปจนถึงระดับ ควรทำ ระดับ อย่าหาทำ หรือเกรียนสุด วิธีการที่ง่ายสุด (และเกรียนที่สุดด้วย) นั่นคือการเก็บรหัสผ่านแบบ โต้ง ๆ ได้มาอย่างไรก็เก็บไปอย่างนั้นซะเลย ตัวอย่างเช่น ผู้ใช้งานกรอกรหัสผ่านตอนลงทะเบียนมาเป็น “hello123” ก็นำรหัสผ่านนี้เขียนลงในฐานข้อมูลตารางผู้ใช้เป็น “hello123” นั่นเอง แม้ว่าการจัดการรหัสผ่านของผู้ใช้โดยวิธีนี้จะไม่มีความซับซ้อน และไม่ต้องใช้...
27 May 2022

บทความ

Searchable Encryption กลไกการปกป้องข้อมูลบน Cloud ที่คุณไว้วางใจได้
ในสมัยปัจจุบัน Web application ต่าง ๆ ที่เราสามารถเข้าใช้งานได้ผ่าน Internet แม้ว่าจะเราอาจจะเข้าผ่านมือถือ เครื่องคอมพิวเตอร์ หรืออุปกรณ์อิเล็กทรอนิกส์ใดก็ตาม Web application นั้นมักจะดึงข้อมูลจากเครื่อง Server ที่อยู่บน Cloud ซึ่งทำให้เราสามารถเข้าใช้งาน Web application ได้จากทุกที่และทุกเวลา โดยบริการ Cloud เป็นหนึ่งบริการที่ผู้สร้าง Web application สามารถเลือกใช้ได้จากบริษัทชั้นนำ เช่น Google Amazon Microsoft และ National Telecom (NT) โดย Cloud เป็นโครงสร้างพื้นฐานสำคัญสำหรับการให้บริการ Web application โครงการ Health Link มีการเก็บรวบรวมข้อมูลสุขภาพของผู้ยินยอมเข้าร่วมโครงการในฐานข้อมูลบน Cloud ของ NT ซึ่งมี SLA ขั้นต่ำในการให้บริการตลอดเวลาสูงถึง 99.8% และมีการรับรองมาตรฐานการจัดการความปลอดภัยระดับสากล ISO27001 รวมถึงมีมาตรการสำหรับการปฏิบัติงานที่สอดคล้องกับ พ.ร.บ. คุ้มครองข้อมูลส่วนบุคคล อย่างไรก็ตาม การใช้บริการ Cloud มีความเสี่ยง เนื่องจากเครื่อง Server ไม่ได้อยู่ภายใต้ความควบคุมของผู้สร้าง Web application โดยตรง ดังนั้น ผู้สร้าง Web application จึงต้องตระหนักเรื่องความปลอดภัยและความลับของข้อมูล โดยผู้สร้าง Web application สามารถยกระดับความปลอดภัยและปกป้องความลับของข้อมูลที่จะจัดเก็บรวบรวมบน Cloud ได้ด้วยการเข้ารหัสข้อมูล ซึ่งจะทำให้ใครก็ตามที่อาจสามารถเข้าถึงเครื่อง Server ไม่สามารถอ่านและนำข้อมูลไปประยุกต์ใช้ต่อได้ การเข้ารหัสข้อมูลเป็นวิธีปกป้องความลับของข้อมูลที่มีความปลอดภัยสูง แต่ในขณะเดียวกัน การเข้ารหัสข้อมูลจะเพิ่มความท้าทายในการพัฒนา Web application อย่าง Health Link ด้วย โดยปกติ การเข้ารหัสข้อมูลจะทำให้เราไม่สามารถสืบค้นข้อมูลได้เพราะข้อมูลที่ถูกเข้ารหัสจะไม่มีคุณสมบัติใด ๆ ของข้อมูลเดิมเหลืออยู่ หากเรานำกลไกการเข้ารหัสทั่วไปมาใช้ก่อนนำส่งข้อมูลไปบันทึกลงฐานข้อมูลบน Cloud ผู้ใช้จะต้องดึงข้อมูลทั้งหมดลงจาก Cloud มาที่เครื่องผู้ใช้และทำการถอดรหัสข้อมูลทั้งหมดเพื่อที่จะสามารถสืบค้นข้อมูลได้ ซึ่งวิธีนี้ ใช้ทรัพยากรโดยใช่เหตุ โดยเฉพาะสำหรับข้อมูลขนาดใหญ่ (Big Data) โดยทั้งเครื่องผู้ใช้ เครื่อง Server และเครือข่าย (Network) ไม่สามารถรองรับการใช้งานในรูปแบบนี้ได้ รวมถึงผู้ใช้จะสามารถเข้าถึงข้อมูลที่ผู้ใช้ไม่มีสิทธิในการเข้าถึงได้ด้วย อีกทางเลือกหนึ่ง เราสามารถถอดรหัสข้อมูลที่เครื่อง Server ก่อนบันทึกและ/หรือสืบค้น แต่วิธีดังกล่าวจะทำให้ผู้ที่สามารถเข้าถึงเครื่อง Server เรียนรู้เกี่ยวกับข้อมูลได้ ดังนั้น การเข้ารหัสข้อมูลใน Web application อย่าง Health Link จึงต้องอาศัยกลไกการเข้ารหัส Searchable Encryption เพื่อรองรับความปลอดภัยและปกป้องความลับของข้อมูลโดยที่ผู้ใช้ยังสามารถสืบค้นข้อมูลได้อย่างมีประสิทธิภาพ Searchable Encryption Searchable Encryption (SE) คือกลไกการเข้ารหัสข้อมูลที่เราสามารถใช้คำศัพท์เฉพาะ (Key word) ในการสืบค้นข้อมูลได้ เช่น ‘วินิจฉัย’ (Diagnosis) และ ‘หัตถการ’ (Procedure) เป็นต้น โดยการนำ SE ไปประยุกต์ใช้ในระบบอย่าง Health Link จะปกป้องความลับของทั้งข้อมูลที่บันทึกในฐานข้อมูลและ Key word ที่ใช้ในการสืบค้นข้อมูล ลักษณะการใช้งานของ SE แสดงในรูปภาพดังต่อไป จากรูปภาพที่ 1 การใช้ SE จะมีผลกระทบต่อผู้ควบคุมข้อมูล (Data Controller) ผู้ประมวลผลข้อมูล (Data Processor) และเครื่อง Server ที่ตั้งอยู่บน Cloud โดยผู้ควบคุมข้อมูลจะเป็นผู้เข้ารหัสข้อมูลด้วย SE ก่อนนำส่งข้อมูลไปที่ Cloud และผู้ประมวลผลข้อมูลเป็นผู้ที่ได้รับสิทธิในการเข้าถึง สืบค้น และใช้งานข้อมูล โดย Web application จะทำการสร้าง Token เพื่อสืบค้นข้อมูลที่ Cloud จาก Key word ที่ผู้ประมวลผลข้อมูลสืบค้น และทำการถอดรหัสผลการสืบค้นข้อมูลหลังจากที่ได้รับคืนมาจาก Cloud เพื่อให้ผู้ประมวลผลข้อมูลอ่านผลการสืบค้นข้อมูลได้ เพราะฉะนั้น ข้อมูลที่เครื่อง Server บน Cloud ประมวลผลเป็นข้อมูลที่ถูกเข้ารหัสทั้งหมด SE จึงสามารถปกป้องความลับของข้อมูลและการสืบค้นข้อมูลได้อย่างดี การประยุกต์ใช้ Searchable Encryption ในโครงการ Health Link ในการนำ SE มาประยุกต์ใช้ประกอบ Web application ผู้สร้างจะต้องคัดเลือกกลไกเฉพาะของ SE ที่เหมาะสมสำหรับการทำงานของระบบ โดยทั่วไป กลไกการเข้ารหัสสามารถแบ่งเป็น 2 ประเภทหลัก ได้แก่ Symmetric Encryption ซึ่งใช้กุญแจเดียวในการเข้าและถอดรหัส และ Asymmetric Encryption ซึ่งใช้คู่กุญแจ (Key pair) ในการเข้าและถอดรหัส โดยใช้ Public key สำหรับเข้ารหัสและ Private key สำหรับถอดรหัส การเข้ารหัสด้วย SE สามารถแบ่งตาม 2 ประเภทข้างต้นได้เช่นเดียวกัน ในขณะเดียวกัน เราสามารถนำกลไก SAE ที่เรียกว่า proxy re-encryption with keyword search (PRES) มาใช้กับ Health Link ได้ โดยกลไก proxy re-encryption คือการแปลงข้อมูลที่ถูกเข้ารหัสให้สามารถถูกถอดรหัสด้วยกุญแจใหม่ ซึ่งมีประโยชน์ในการจำกัดให้แพทย์ที่กำลังรักษาผู้ป่วยผู้เดียวสามารถค้นหา เรียกดู และถอดรหัสข้อมูลได้ โดยเฉพาะในกรณีฉุกเฉิน เมื่อระบบจำเป็นต้องให้สิทธิแพทย์เข้าถึงข้อมูลเพื่อช่วยชีวิตของผู้ป่วย* (หมายเหตุ: ปัจจุบัน การเข้าถึงข้อมูลผู้ป่วยในกรณีฉุกเฉินขึ้นอยู่กับนโยบายการขอความยินยอมในการเข้าถึงข้อมูลของแต่ละสถานพยาบาลซึ่งเป็นผู้ควบคุมข้อมูล) PRES จึงสามารถทำให้ Health Link มีความปลอดภัยและสามารถปกป้องความลับของข้อมูลได้ดียิ่งขึ้น โครงการ Health Link ให้ความสำคัญกับความปลอดภัยและความลับของข้อมูลเป็นอันดับแรก โดย SE เป็นจุดเริ่มต้นของการยกระดับความปลอดภัยของระบบ และการรับประกันความลับของข้อมูลที่จัดเก็บ สืบค้น และเรียกดูจากฐานข้อมูลบน Cloud ในการนำกลไก SE มาประยุกต์ใช้กับ Web application เราควรประเมินความต้องการของระบบ ร่วมกับคุณสมบัติ ความปลอดภัย ประสิทธิภาพ และข้อจำกัดของการเข้าและถอดรหัส สืบค้น และเรียกดูข้อมูล เพื่อที่เราจะสามารถจัดการความปลอดภัยและความลับของข้อมูลให้ดีและเหมาะสมที่สุดสำหรับระบบของเรา อย่างไรก็ตาม ผู้สร้าง Web application จะต้องตระหนักเรื่องความปลอดภัยของระบบอยู่เสมอ เพราะการปกป้องความปลอดภัยและความลับของข้อมูล...
22 July 2021
PDPA Icon

We use cookies to optimize your browsing experience and improve our website’s performance. Learn more at our Privacy Policy and adjust your cookie settings at Settings

Privacy Preferences

You can choose your cookie settings by turning on/off each type of cookie as needed, except for necessary cookies.

Accept all
Manage Consent Preferences
  • Strictly Necessary Cookies
    Always Active

    This type of cookie is essential for providing services on the website of the Personal Data Protection Committee Office, allowing you to access various parts of the site. It also helps remember information you have previously provided through the website. Disabling this type of cookie will result in your inability to use key services of the Personal Data Protection Committee Office that require cookies to function.
    Cookies Details

  • Performance Cookies

    This type of cookie helps the Big Data Institute (Public Organization) understand user interactions with its website services, including which pages or areas of the site are most popular, as well as analyze other related data. The Big Data Institute (Public Organization) also uses this information to improve website performance and gain a better understanding of user behavior. Although the data collected by these cookies is non-identifiable and used solely for statistical analysis, disabling them will prevent the Big Data Institute (Public Organization) from knowing the number of website visitors and from evaluating the quality of its services.

  • Functional Cookies

    This type of cookie enables the Big Data Institute (Public Organization)’s website to remember the choices you have made and deliver enhanced features and content tailored to your usage. For example, it can remember your username or changes you have made to font sizes or other customizable settings on the page. Disabling these cookies may result in the website not functioning properly.

  • Targeting Cookies

    "This type of cookie helps the Big Data Institute (Public Organization) understand user interactions with its website services, including which pages or areas of the site are most popular, as well as analyze other related data. The Big Data Institute (Public Organization) also uses this information to improve website performance and gain a better understanding of user behavior. Although the data collected by these cookies is non-identifiable and used solely for statistical analysis, disabling them will prevent the Big Data Institute (Public Organization) from knowing the number of website visitors and from evaluating the quality of its services.

Save settings
This site is registered on wpml.org as a development site. Switch to a production site key to remove this banner.