How to introduce Perfect Forward Secrecy

บทนำ (Overviews)

Perfect Forward Secrecy หรือ Forward Secrecy (FS) มีลักษณะเป็น Key-Agreement Protocol เพื่อทำให้มั่นใจได้ว่าการติดต่อสื่อสารที่ผ่าน ๆ มาจะยังคงเป็นความลับอยู่ ถึงแม้ว่า Private key จะถูกขโมยไปเพื่อใช้ในการถอดรหัสในภายหลังก็ตาม โดยหลักการจะมีการสร้าง Session key ที่ไม่ซ้ำกันในตั้งแต่เริ่มต้นที่ติดต่อสื่อสารกันในแต่ละ Session ดังนั้นเมื่อเกิด Session Key หลุดรั่วไป ก็จะไม่มีผลกระทบต่อข้อมูลอื่น ที่ใช้ Session key ที่แตกต่างกัน โดยการป้องกันของ Perfect Forward Secrecy จะป้องกันกันข้อมูลบน Transaction Layer

ขยายความ (Details)

ก่อนที่จะมี Perfect Forward Secrecy

ก่อนที่จะมีการติดตั้ง Perfect Forward Secrecy ข้อมูลทั้งหมดที่ส่งระหว่าง Server และ Client สามารถถูกถอดรหัสได้ถ้า Private key ที่อยู่บน Server side โดนขโมยไป โดย Attacker อาจจะเก็บข้อมูลที่ Encrypt ไว้ก่อนช่วงเวลาหนึ่ง จนกระทั่งวันนึงพบ Private key จึงนำมาถอดรหัสข้อมูลทั้งหมดได้

  • ในตอนเริ่มต้น Handshake ในฝั่ง Client สร้างบางสิ่งที่เรียกว่า Pre-Master Secret
  • โดย Pre-Master Secret จะถูก Encrypt โดยใช้ Public Key ของ Server จากนั้นถูกส่งไปยังฝั่ง Server
  • ที่ฝั่ง Server จะรับ Pre-Master Secret และถอดรหัสด้วย Private Key ดังนั้นจะทำให้มี Pre-Master Secret ชุดเดียวกัน
  • จากนี้ ทั้ง Client และ Server จะสร้าง Symmetric session key ที่ใช้สำหรับการแลกเปลี่ยนข้อมูลอันเดียวกันนั้นคือ Master Secret
  • เนื่องด้วย Pre-Master Secret ถูก Encrypted โดย Public key ของ Server และการหลุดรั่วของ Private key จะอนุญาตให้ Attacker สามารถ Decrypt ข้อมูลได้ทุกอย่างในอนาคต และข้อมูลในอดีตที่เคยได้เก็บรวบรวมมา

***ด้วยเหตุข้างต้น ถ้า Attacker ทำการ Man in the middle เป็นข้อมูลขนาดใหญ่ แล้ววันหนึ่ง Private key หลุดรั่วออกมา Secret ก็จะอยู่ในข้อมูลที่ Encrypt นั้นด้วยสามารถถอดรหัสข้อมูลได้ทันที


Perfect Forward Secrecy ช่วยอย่างไร

เมื่อเปิดใช้งาน Perfect Forward Secrecy ทั้ง Client และ Server จะทำให้วิธีการสร้าง Secret Key จะเปลี่ยนไป

  • จากเดิม Client  จะต้องส่ง Pre-master Secret ไปครั้งเดียว (แบบเดิม)
  • เป็นการแลกเปลี่ยน Parameter ระหว่าง Client และ Server ต่อให้ดักจับข้อมูลที่เป็น Plain Text (ที่ยังไม่เข้ารหัสโดย Public key) ก็ไม่สามารถทราบ Secret key ถ้าไม่ทราบ Secret Integer ดังภาพข้างล่าง

ดังนั้นจะต้องมีใช้ Cipher suite ที่สามารถใช้งาน Diffie-Hellman Key exchange ได้ และสำคัญที่สุด นั้นคือ Key ต้องเป็นลักษณะชั่วคราว ดังนั้นหมายความว่า Client และ Server จะต้องสร้างชุด parameter ของ Diffie-Hellman ของแต่ละ Session และชุด parameter จะไม่ถูกใช้ซ้ำหรือเก็บไว้ที่ใด ๆ เป็นข้อตกลงกันระหว่าง Client และ Server จึงเรียกว่า Key-Agreement Protocol หรือ Protocol ที่มี party ตั้งแต่ 2 party ขึ้นไปมีการตกลงในการใช้ key ร่วมกัน

Diffie-Hellman อัลกอลิทึม ทนต่อการโจมตี Bruteforce เนื่องจาก Session ถูกสร้างมาจากคณิตศาสตร์ที่มีความซับซ้อน โดยตัวดำเนินการต่างทางคณิตศาสตร์ (Operations) จะมี  number ถูกแลกเปลี่ยนกันระหว่าง Client และ Server ด้วย ทำให้ผู้โจมตีมีความยากในการชี้ไปถึงจุดของข้อมูลที่ถูกนำมาใช้สำหรับในการสร้าง Sesison key แม้ว่า Private key ของ Server จะถูกโขมยไป และไม่ช่วยให้ Attacker สามารถ Decrypt ข้อมูลใด ๆ เพราะว่า Public key ไม่ได้ถูกใช้ Protect อะไรเลย

  • Server จะสร้างชุด Parameter ของ Diffie-Hellman ในแต่ละ Session
  • Client และ Server จะสร้าง Shared secret key  ที่ไม่ซ้ำกันในแต่ละ Session
  • ถ้า Attacker สามารถขโมย Secret key จะสามารถ ถอดรหัสได้เฉพาะข้อมูลภายใน Session นั้นเท่านั้น

***ต่อให้ทำ Man in the middle ข้อมูล Parameter ที่ไม่ได้เข้ารหัส ก็จะไม่สามารถทราบ Secret Key ที่แท้จริงได้จนกว่า Secret Integer จะถูกเปิดเผย แต่ถ้าถูกเปิดเผย ก็จะแกะได้เฉพาะ Session key นั้น ๆ เท่านั้น


จะเปิดใช้งาน Perfect Forward Secrecy ได้อย่างไร

ควรใช้งานโปรโตคอลล่าสุด TLS1.2 จากนั้นเลือก Cipher suites แข็งแรงและมีการจัดลำดับอย่างถูกต้อง โดยทุก ๆ Diffie-Hellman Key exchange จะมี Forward Secrecy มาให้ แต่ควรเลือก แต่ควรเลือก Epheneral key exchange เพราะจะสร้าง Session key  ใหม่ทุก ๆ session ซึ่งทั้งหมดนี้จะอยู่ในรูปของ Cipher suites คือ DHE, EDH และ  Elliptic Curv DHE เราสามารถตั้งค่าให้ Web server เรียงลำดับ Cipher ที่มีความแข็งแรงสูงดังนี้

  • Nginx
    ssl\_prefer\_server\_ciphers on;
    
  • Apaches
    SSLHonorCipherOrder on
    

อ้างอิง

 

ใส่ความเห็น