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

อาการชี้ไปที่การเข้ารหัส ไม่ใช่การเข้ารหัสลับ

เมื่อปลายทั้งสองถือไบต์ต่างกัน การเจรจาก็ยังสำเร็จ แต่การพิสูจน์ล้มเหลวหลังจากนั้น. บันทึกจะรายงานความล้มเหลวของความสมบูรณ์หรือ HMAC แทนที่จะเป็นอัลกอริทึมไม่ตรงกัน เพราะมีการเลือกข้อเสนอแล้วและขั้นยืนยันตัวตนไม่ตรงกัน บรรทัดนั้นไม่เคยเอ่ยถึงรูปร่างของความลับ

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

ความลับเดียว สามวิธีที่ไฟล์อ่านมันได้

สำหรับค่าสี่ไบต์ key1 ฐานสิบหกและ Base64 คือการเข้ารหัสซ้ำสองแบบของไบต์เดียวกัน และมีเพียงอักขระนำหน้าเท่านั้นที่บอกตัวแยกวิเคราะห์ว่ากำลังถืออันไหน swanctl ก็ใช้ธรรมเนียมเดียวกัน ค่าที่ถูกย้ายระหว่างสองอินเทอร์เฟซจึงรักษาความหมายไว้ได้ก็ต่อเมื่อคำนำหน้าเดินทางไปด้วย

10.20.0.5 %any : PSK "key1"
10.20.0.5 %any : PSK 0x6b657931
10.20.0.5 %any : PSK 0sa2V5MQ==

รายละเอียดสองอย่างในบล็อกนั้นกินเวลามากที่สุด หลักฐานสิบหกรับได้ทั้งตัวพิมพ์ใหญ่และเล็ก ดังนั้น 0x6b657931 กับ 0x6B657931 จึงเป็นค่าเดียวกัน แต่จำนวนอักขระที่เป็นคี่จะถูกอ่านผิดอย่างเงียบ ๆ แทนที่จะถูกปฏิเสธ ซึ่งเลื่อนทุกไบต์หลังจุดตัด การเติมเต็มของ Base64 เป็นส่วนหนึ่งของค่า ข้อความที่วางโดยไม่มีเครื่องหมาย = ปิดท้ายจึงถูกถอดรหัสเป็นไบต์อื่นแทนที่จะล้มเหลวอย่างดัง

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

ข้อความ Base64 มาจากไหน

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

ทั้งสองทิศทางเป็นคำสั่งละหนึ่งคำสั่ง และควรเก็บไว้ในตั๋วเป็นปฏิบัติการที่แน่นอนซึ่งสร้างค่าที่เก็บไว้ รันตามลำดับนี้:

printf '%s' 'a2V5MQ==' | base64 -d
printf '%s' 'key1' | base64

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

ยืนยันว่าแต่ละคู่ใช้ไบต์ใดจริง

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

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

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

แก้ไขไฟล์โดยไม่ซ่อนผลลัพธ์

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

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

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