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

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

จุดที่บิลด์หยุดเป็นดีเทอร์มินิสติก

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

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

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

InputHow it driftsWhat pins it
SourceBranch moves after releaseCommit hash in the build metadata
ToolchainCompiler patch level differsContainer image digest
PackagingArchive order and mtimes varyNormalised archive settings

สิ่งที่การเปรียบเทียบตรวจจริง

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

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

sha256sum wireguard-installer.msi
gpg --verify wireguard-installer.msi.sig wireguard-installer.msi

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

ทำไมความไม่ตรงกันจึงไม่ใช่หลักฐานการถูกแก้ไข

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

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

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

ข้อกล่าวอ้างบอกอะไรเกี่ยวกับบริการเบื้องหลังแอป

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

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

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

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