ชุมชนเฟิร์มแวร์โอเพนซอร์สได้ค้นพบอุปสรรคสำคัญในการพัฒนาโซลูชัน BIOS ทางเลือกสำหรับโปรเซสเซอร์เซิร์ฟเวอร์ Turin รุ่นล่าสุดของ AMD แม้ว่า AMD จะเผยแพร่สิ่งที่ควรจะเป็นชุดสมบูรณ์ของ Platform Security Processor (PSP) firmware blobs ที่จำเป็นสำหรับการเริ่มต้นระบบ แต่คอมโพเนนต์สาธารณะเหล่านี้ไม่เพียงพอที่จะบูตฮาร์ดแวร์ได้จริง
Public Firmware Blobs สร้างระบบที่บูตไม่ได้
วิศวกรที่ทำงานในการพอร์ต coreboot ไปยังระบบ Gigabyte MZ33-AR1 Turin ได้ค้นพบว่า PSP blobs ที่เปิดให้สาธารณะของ AMD ใช้งานไม่ได้ เมื่อพยายามสร้างอิมเมจที่บูตได้โดยใช้เฉพาะคอมโพเนนต์อย่างเป็นทางการเหล่านี้ ระบบล้มเหลวในการเริ่มต้นอย่างสมบูรณ์ สาเหตุหลักดูเหมือนจะเกี่ยวข้องกับการตรวจสอบคีย์เข้ารหัสภายในโครงสร้าง PSP firmware
การวิเคราะห์เผยให้เห็นว่า public blobs ใช้ AMD Root Key ID ที่แตกต่างกัน (0x00) เมื่อเปรียบเทียบกับอิมเมจของผู้จำหน่ายที่ใช้งานได้ (0x02) Root Key นี้ทำหน้าที่เป็นรากฐานสำหรับการตรวจสอบคอมโพเนนต์ PSP firmware ทั้งหมดในระหว่างกระบวนการบูต เมื่อมีคีย์ที่ผิด chain of trust ทั้งหมดจะล้มเหลว ป้องกันไม่ให้ CPU ถูกปล่อยจากสถานะรีเซ็ตเริ่มต้น
คอมโพเนนต์เฟิร์มแวร์หลัก:
- โครงสร้างเฟิร์มแวร์แบบฝังตัว ( Embedded Firmware Structure หรือ EFS ): ส่วนหัวไฟล์ที่ระบุตำแหน่งของ PSP blob
- คีย์รูท AMD : คีย์เข้ารหัสลับหลักสำหรับการตรวจสอบ PSP blob (ID 0x00 ในเวอร์ชันสาธารณะเทียบกับ 0x02 ในเวอร์ชันผู้จำหน่าย)
- ไดเรกทอรี PSP : ระบบไฟล์ที่ประกอบด้วยคอมโพเนนต์เฟิร์มแวร์แต่ละตัว 30-50+ ชิ้น
- การฝึกหน่วยความจำ: กระบวนการเริ่มต้นระบบที่ใช้เวลา 2+ นาทีในทุกครั้งที่บูตเซิร์ฟเวอร์ AMD
ชุมชนค้นพบวิธีแก้ไขโดยใช้คีย์ก่อนการผลิต
ความก้าวหน้าเกิดขึ้นเมื่อนักพัฒนาได้รับการเข้าถึง Turin Pi package ของ AMD ซึ่งมี pre-production firmware blobs ที่มีคีย์ลงนามที่แตกต่างกัน คอมโพเนนต์เหล่านี้สามารถบูตระบบได้สำเร็จ ยืนยันว่าฮาร์ดแวร์และการใช้งาน coreboot ทำงานได้อย่างถูกต้องเมื่อมีเฟิร์มแวร์ที่เหมาะสม
มันไม่ใช่เรื่องของการกำหนดค่า แต่เป็นเรื่องของคีย์ที่เบิร์นเข้าไปในซิลิคอน CPU ที่ใช้ในการตรวจสอบคีย์ที่ใช้ใน blobs และลายเซ็นของ blobs
การค้นพบนี้ได้จุดประกายการอภิปรายเกี่ยวกับความพร้อมใช้งานของเฟิร์มแวร์เปิดสำหรับระบบสมัยใหม่ สมาชิกชุมชนแสดงความผิดหวังว่าแม้จะมีความร่วมมือที่ชัดเจนของ AMD ในการเผยแพร่คอมโพเนนต์เฟิร์มแวร์ แต่ความจริงคือโค้ดสามเมกะไบต์ที่ไม่สามารถตรวจสอบได้ยังไม่เพียงพอสำหรับการทำงานพื้นฐานของระบบ
การวิเคราะห์ทางเทคนิคเผยให้เห็นโครงสร้างเฟิร์มแวร์ที่ซับซ้อน
การสืบสวนต้องการการ reverse engineering อย่างกว้างขวางของสถาปัตยกรรม PSP firmware ของ AMD นักพัฒนาได้ปรับปรุงเครื่องมือที่มีอยู่เช่น amdtool และ PSPTool เพื่อแยกวิเคราะห์โครงสร้างเฟิร์มแวร์เฉพาะ Turin อย่างเหมาะสม เปิดเผยความซับซ้อนอย่างมากในวิธีที่โปรเซสเซอร์สมัยใหม่เริ่มต้น
PSP firmware ประกอบด้วยระดับไดเรกทอรีหลายระดับที่มีคอมโพเนนต์แต่ละตัวหลายสิบตัว อิมเมจ BIOS ของผู้จำหน่ายโดยทั่วไปจะรวมรายการมากกว่า 50 รายการในไดเรกทอรี PSP ของพวกเขา เมื่อเปรียบเทียบกับเพียง 30-41 รายการที่มีผ่านช่องทางสาธารณะ ช่องว่างนี้แสดงถึงโค้ดเริ่มต้นที่สำคัญซึ่งยังคงไม่สามารถเข้าถึงได้สำหรับนักพัฒนาอิสระ
การฝึกหน่วยความจำบนแพลตฟอร์มเซิร์ฟเวอร์ AMD เพิ่มความซับซ้อนอีกชั้นหนึ่ง ต้องใช้เวลาเริ่มต้น 2+ นาทีโดยไม่คำนึงถึงประสิทธิภาพ BIOS ไม่เหมือนกับระบบ Intel ที่สามารถข้ามขั้นตอนการเริ่มต้นบางอย่างเพื่อเวลาบูตที่เร็วขึ้น สถาปัตยกรรมของ AMD ทำการฝึกหน่วยความจำแบบเต็มในทุกการบูตเย็น
การเปรียบเทียบ PSP Directory Entry:
- Vendor BIOS: PSP1 (53 entries), PSP2 (48 entries), BIOSL1 (25 entries), BIOSL2 (54 entries)
- Coreboot ที่ใช้ public blobs: PSP1 (30 entries), PSP2 (41 entries), BIOSL1 (11 entries), BIOSL2 (19 entries)
ผลกระทบต่อการพัฒนา Open Hardware
สถานการณ์นี้เน้นย้ำถึงความท้าทายที่ดำเนินต่อไปในการสร้างโซลูชันเฟิร์มแวร์เปิดที่แท้จริงสำหรับฮาร์ดแวร์เซิร์ฟเวอร์สมัยใหม่ ในขณะที่ AMD ได้พยายามสนับสนุนการพัฒนาเฟิร์มแวร์ทางเลือกโดยการเผยแพร่ PSP blobs ข้อจำกัดเข้ารหัสที่สร้างขึ้นในซิลิคอนเองสร้างอุปสรรคที่ไม่สามารถเอาชนะได้ผ่านซอฟต์แวร์เพียงอย่างเดียว
การค้นพบแสดงให้เห็นว่าเฟิร์มแวร์เปิดที่ใช้งานได้สำหรับโปรเซสเซอร์ Turin อาจต้องการ public blobs ที่อัปเดตพร้อมคีย์ลงนามที่ถูกต้องจาก AMD หรือการเข้าถึงคอมโพเนนต์ Turin Pi package ที่จำกัดซึ่งทำงานกับฮาร์ดแวร์การผลิต
อ้างอิง: AMD PSP blob analysis on Gigabyte MZ33-AR1 Turin system