คำว่า คีย์ที่แชร์ไว้ล่วงหน้า ปรากฏในเอกสารของ IPsec, OpenVPN และ WireGuard แต่กลับหมายถึงวัตถุสามอย่างที่ต่างกัน อย่างแรกเป็นความลับสำหรับการยืนยันตัวตน อย่างที่สองปกป้องช่องสัญญาณควบคุม และอย่างที่สามเพิ่มวัสดุให้กับการจับมือซึ่งมีอัตลักษณ์อยู่แล้ว การถือว่าสิ่งเหล่านี้ใช้แทนกันได้จะทำให้ได้การเชื่อมต่อที่ล้มเหลวในขั้นตอนที่ไม่มีใครคาดคิด อ่านให้เข้าใจว่าฟิลด์นี้ทำอะไรในโปรโตคอลนั้นก่อนจะคัดลอกค่าลงไป

สามโปรโตคอล สามความหมาย

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

ไม่มีบทบาทใดเหล่านี้ยืนยันตัวตนของมนุษย์ และความสับสนนี้เองที่กินเวลามากที่สุด คีย์ที่แชร์ไว้ล่วงหน้าถูกติดตั้งลงในอุปกรณ์หรือเกตเวย์ก่อนการแลกเปลี่ยน ทุกผู้ถือจึงดูเหมือนกันสำหรับอีกฝ่าย คุณสมบัตินี้เป็นข้อดีสำหรับลิงก์ระหว่างเราเตอร์สองตัว และเป็นความเสี่ยงสำหรับบริการเข้าถึงระยะไกลที่มีพนักงานระบุชื่อ เก็บข้อมูลรับรองบัญชีกับความลับเชิงรหัสไว้ในคอลัมน์แยกกันของเอกสารที่อธิบายการติดตั้ง

IPsec กับ OpenVPN ใช้คำนี้ต่างกัน

IKEv2 ยืนยันฝ่ายตรงข้ามด้วยความลับที่แชร์ไว้ล่วงหน้าแทนใบรับรองได้ และค่าต้องตรงกันทั้งสองด้าน เพราะความลับเดียวกันมักถูกตั้งค่าให้กลุ่มของฝ่าย ผู้ถือคนใดก็สามารถแอบอ้างเป็นคนอื่นได้ และการแลกเปลี่ยนไม่ได้รับความเป็นส่วนตัวไปข้างหน้าจากคีย์อัตลักษณ์ที่ตนไม่เคยมี

ตัวเลือก tls-auth และ tls-crypt ของ OpenVPN ผูกคีย์แบบคงที่เข้ากับช่องสัญญาณควบคุม โดยเพิ่มลายเซ็น HMAC หรือเข้ารหัสการเจรจาเอง คีย์นี้ไม่ใช่รหัสผ่านผู้ใช้และไม่แทนที่ใบรับรองไคลเอนต์ การแยกสองสิ่งนี้สำคัญตอนต่ออายุ เมื่อการเปลี่ยนรหัสผ่านไม่แตะต้องคีย์ของช่องสัญญาณควบคุม

PSK ของ WireGuard เพิ่มให้ ไม่ได้ระบุตัวตน

ฝ่ายของ WireGuard มีคีย์สาธารณะและคีย์ส่วนตัวแบบ Curve25519 อยู่แล้ว และการจับมือยืนยันอัตลักษณ์เหล่านี้ คีย์ที่แชร์ไว้ล่วงหน้าแบบเลือกได้จะถูกผสมเข้าคีย์ลูกโซ่ และเพิ่มวัสดุสมมาตรทับบนการแลกเปลี่ยนคีย์สาธารณะ

คีย์นี้ไม่ได้ให้อัตลักษณ์ของตัวเองและไม่ได้ให้บัญชีผู้ใช้ ผู้ดูแลจึงแยกผู้ถือสองคนด้วย PSK ไม่ได้ ทั้งสองด้านต้องมีค่าเดียวกัน ไม่อย่างนั้นการจับมือจะล้มเหลวโดยไม่มีข้อความข้อผิดพลาดที่เป็นประโยชน์ นี่คือเหตุผลที่ต้องวางแผนการหมุนเวียนให้ทั้งสองฝ่ายพร้อมกัน ไม่ใช่แก้ไฟล์เดียว

ตรวจสอบการแจกจ่าย การหมุนเวียน และการถอดออก

การแจกจ่ายคือจุดอ่อนของทุกการออกแบบที่ใช้ความลับเดียวในหลายที่ ค่าที่ถูกวางในหน้าต่างแชต เก็บในคลัง หรือนำกลับมาใช้ข้ามสภาพแวดล้อม จะสะสมสำเนาที่ไม่มีใครนับได้ และแต่ละสำเนาก็ขยายขอบเขตความเสียหายอย่างเงียบ ๆ

ข้อความ Base64 ไม่ใช่การเข้ารหัส ความลับที่เก็บไว้ข้างใบรับรองสาธารณะในโฟลเดอร์เดียวกันยังคงเป็นความลับในรูปแบบเปิดเผย

openssl rand -base64 32
sudo wg show wg0 preshared-keys
sudo grep -R -n 'psk' /etc/ipsec.d/ 2>/dev/null

หมุนเวียนตามกำหนดการและหลังการรั่วไหลที่ต้องสงสัยทุกครั้ง โดยอัปเดตทุกฝ่ายที่ตั้งใจไว้ก่อนเพิกถอนค่าเก่า จากนั้นทดสอบลิงก์จากทั้งสองด้าน เพราะคีย์ที่ไม่ตรงกันจะล้มเหลวตอนจับมือและดูเหมือนปัญหาของไฟร์วอลล์ทุกประการ

บันทึกว่าความลับใดปกป้องขั้นตอนใด เพื่อให้การรีเซ็ตรหัสผ่านไม่ถูกเข้าใจผิดว่าเป็นการต่ออายุคีย์เชิงรหัส บรรทัดเดียวนี้ประหยัดเวลาหนึ่งชั่วโมงทุกครั้งที่มีคนตรวจสอบการติดตั้ง

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