บิลด์ที่ทำซ้ำได้สำหรับแอป VPN: การตรงกันพิสูจน์อะไร
การสร้างใหม่ที่ตรงกันเชื่อมโยงไบนารีที่เผยแพร่กับซอร์สและเครื่องมือที่ประกาศไว้ แต่ไม่บอกอะไรเกี่ยวกับบริการ VPN ที่อยู่เบื้องหลังไบนารีนั้นหรือบันทึกของบริการนั้น
ความสามารถในการทำซ้ำเป็นคุณสมบัติของห่วงโซ่อุปทาน อินพุตที่ประกาศไว้ชุดเดียวกันต้องสร้างอาร์ติแฟกต์เดียวกัน สำหรับไคลเอนต์ VPN ข้อความนี้ผูกตัวติดตั้งที่คุณดาวน์โหลดไว้กับซอร์สโค้ดและชุดเครื่องมือที่ใครก็สามารถสร้างใหม่ได้ แต่ไม่บอกอะไรเกี่ยวกับบริการที่ไคลเอนต์เชื่อมต่อ
คำถามที่มีประโยชน์จึงแคบและตอบได้ โครงการเผยแพร่ขั้นตอนหรือไม่ และอาร์ติแฟกต์เฉพาะของคุณตรงกับขั้นตอนนั้นหรือไม่
จุดที่บิลด์หยุดเป็นดีเทอร์มินิสติก
คอมไพเลอร์ฝังเวลาที่สร้าง เส้นทางแบบสัมบูรณ์ และชื่อโฮสต์ที่ใช้บิลด์ เว้นแต่จะสั่งห้ามไว้ อาร์ไคฟ์บันทึกลำดับไฟล์และเวลาที่แก้ไข ลิงก์เกอร์ให้ผลลัพธ์ต่างกันตามเวอร์ชันของชุดเครื่องมือ และการบีบอัดแบบขนานอาจเรียงบล็อกใหม่ได้ สิ่งใดสิ่งหนึ่งเหล่านี้ทำให้บิลด์สองครั้งจากซอร์สเดียวกันต่างกันในระดับไบต์โดยไม่มีอะไรน่ากลัวเกิดขึ้น ความเป็นดีเทอร์มินิสต์ถูกออกแบบเข้าไปในบิลด์เสมอ ไม่เคยสืบทอดมาโดยปริยาย
โครงการที่อ้างว่าทำซ้ำได้ต้องระบุการปรับมาตรฐานที่ใช้ ได้แก่ เวลาที่สร้างแบบคงที่ เส้นทางที่แมปไว้ รายการอาร์ไคฟ์ที่เรียงแล้ว และเวอร์ชันคอมไพเลอร์กับดีเพนเดนซีที่ตรึงไว้ หากไม่มีรายการนี้ จะตีความความไม่ตรงกันไม่ได้ เพราะขอบเขตของการแปรผันที่ชอบด้วยเหตุผลไม่ได้ถูกนิยาม
อินพุตที่ประกาศไว้ต้องครบถ้วนด้วย URL ของรีโพซิทอรีที่ไม่มีแท็กไม่ใช่รีวิชัน ไฟล์ล็อกที่ไม่มีแฮชไม่ใช่ชุดดีเพนเดนซี และสคริปต์บิลด์ที่ดาวน์โหลดเครื่องมือตอนรันมีอินพุตที่ไม่มีใครตรึงได้ ทุกช่องว่างกลายเป็นความแตกต่างในภายหลัง ทำให้รายการครบก่อนเปรียบเทียบอะไร เพราะรายการที่ไม่ครบไม่สามารถล้มเหลวในแบบที่มีความหมายได้
| Input | How it drifts | What pins it |
|---|---|---|
| Source | Branch moves after release | Commit hash in the build metadata |
| Toolchain | Compiler patch level differs | Container image digest |
| Packaging | Archive order and mtimes vary | Normalised archive settings |
สิ่งที่การเปรียบเทียบตรวจจริง
ฝ่ายอิสระสร้างใหม่ในสภาพแวดล้อมที่ประกาศไว้และเปรียบเทียบผลลัพธ์กับอาร์ติแฟกต์ที่เผยแพร่ ความเหมือนระดับบิตคือรูปแบบที่แข็งแรง ส่วนขั้นตอนปรับมาตรฐานที่มีเอกสารกำกับ ซึ่งความต่างที่บันทึกไว้ถูกย้อนกลับแล้วผลลัพธ์จึงตรงกัน เป็นรูปแบบที่อ่อนกว่าแต่ยังมีประโยชน์
การเปรียบเทียบเกี่ยวกับไบนารี ลายเซ็นตอบคำถามอีกข้อ คือผูกการเผยแพร่กับกุญแจ และผูกกุญแจกับตัวตน และโครงการอาจมีลายเซ็นที่ใช้ได้บนอาร์ติแฟกต์ที่ไม่มีใครสร้างใหม่ การตรวจสองอย่างนี้ซ้อนกัน ไม่ใช่แทนกัน
sha256sum wireguard-installer.msi gpg --verify wireguard-installer.msi.sig wireguard-installer.msi
รันทั้งสองก่อนติดตั้ง และเปรียบเทียบแฮชกับค่าที่เผยแพร่สำหรับการเผยแพร่และแพลตฟอร์มเดียวกัน แฮชที่ตรงกับหน้าผู้จำหน่ายพิสูจน์ว่าการดาวน์โหลดมาถึงอย่างสมบูรณ์ ส่วนไบนารีที่สร้างใหม่ซึ่งตรงกับแฮชที่ผู้จำหน่ายเผยแพร่พิสูจน์สิ่งที่แข็งแรงกว่าเกี่ยวกับวิธีที่มันถูกสร้าง
ทำไมความไม่ตรงกันจึงไม่ใช่หลักฐานการถูกแก้ไข
ความไม่ตรงกันส่วนใหญ่มาจากอินพุตที่ไม่มีใครควบคุม เวอร์ชันแพตช์ของคอมไพเลอร์ที่ต่างกัน เส้นทางบิลด์ที่รั่วเข้าไปในสัญลักษณ์ดีบัก โลแคลที่เปลี่ยนลำดับการเรียง หรือขั้นตอนแพ็กเกจจิ้งที่ใช้หลังการเปรียบเทียบ ล้วนให้แฮชต่างจากงานที่สุจริต
ด้วยเหตุนี้ต้องอ่านความไม่ตรงกันเทียบกับขั้นตอนที่มีเอกสารก่อนจะกลายเป็นเรื่องเล่า หากขั้นตอนตรึงทุกอย่างและความต่างยังอธิบายไม่ได้ นั่นคือข้อค้นพบจริงที่ควรแจ้งต่อโครงการ หากขั้นตอนไม่พูดถึงแพ็กเกจจิ้ง ความต่างอาจเป็นสิ่งที่คาดหมายได้ทั้งหมด
ความสมมาตรก็สำคัญเช่นกัน: ความสมมาตรก็สำคัญเช่นกัน: แต่พิสูจน์เพียงว่าไบนารีสอดคล้องกับซอร์สนั้น โค้ดที่ตรวจสอบมาดีกับโค้ดที่ทำซ้ำได้เป็นคุณสมบัติคนละอย่าง และโครงการอาจมีอย่างหนึ่งโดยไม่มีอีกอย่าง
ข้อกล่าวอ้างบอกอะไรเกี่ยวกับบริการเบื้องหลังแอป
ไคลเอนต์คือโปรแกรมบนอุปกรณ์ของคุณ ส่วนบริการคือเซิร์ฟเวอร์ ระบบบัญชี และนโยบายการเก็บรักษาที่อยู่ที่อื่น ความสามารถในการทำซ้ำจำกัดอย่างแรกและไม่บอกอะไรเกี่ยวกับอย่างหลัง ไม่ว่าตัวติดตั้งจะถูกตรวจสอบละเอียดเพียงใด
การกำหนดค่าปลายทางอาจเปลี่ยนหลังติดตั้งได้เช่นกัน ผ่านการตั้งค่าทางไกลหรือโปรไฟล์ที่ผู้ให้บริการควบคุม การเปลี่ยนแปลงเหล่านั้นมาทางเครือข่ายและไม่ถูกครอบคลุมด้วยแฮชใดที่คุณคำนวณก่อนเชื่อมต่อ
อ่านข้อกล่าวอ้างตามขอบเขตจริง แล้วตรวจคำถามข้างเคียงแยกต่างหาก คือผู้ให้บริการบันทึกอะไรและอยู่ภายใต้เขตอำนาจใดในการตอบคำขอ ไบนารีที่ตรวจสอบแล้วกับบริการที่ยังไม่ได้ตรวจสอบอยู่ร่วมกันได้ และนั่นคือกรณีที่การตรวจห่วงโซ่อุปทานออกแบบมาเพื่อทำให้มองเห็น ไม่ใช่เพื่อแก้ไข