เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ · SHA เครื่องคำนวณแฮช
การตรวจสอบผลรวมที่ตรงกันไม่ใช่ลายเซ็น: ความสมบูรณ์และความถูกต้อง
· เหตุใดจึงสำคัญ
sha-256 การเข้ารหัส ความปลอดภัย
SHA-256 ที่เผยแพร่แล้วช่วยให้ผู้ใช้ตรวจพบการดาวน์โหลดที่เสียหาย แต่หากผู้โจมตีควบคุมเพจ ก็จะควบคุมการตรวจสอบผลรวมด้วยเช่นกัน โพสต์นี้แยกความสมบูรณ์ออกจากความถูกต้อง และอธิบายว่าลายเซ็นใดที่เพิ่มเข้ามา
การตรวจสอบในหน้าเดียวกับการดาวน์โหลด — เหตุใดจึงป้องกันการเสียหายแต่ไม่ป้องกันโฮสต์ที่ถูกบุกรุก
มีการเผยแพร่ซอฟต์แวร์โดยมีการตรวจสอบ SHA-256 ในหน้าเดียวกับการดาวน์โหลด ผู้ใช้สามารถดึงข้อมูลที่เก็บถาวร แฮช และเปรียบเทียบผลลัพธ์กับค่าที่เผยแพร่ หากตรงกัน การดาวน์โหลดจะไม่เสียหาย นี่คือการตรวจสอบความถูกต้องและเป็นการตรวจสอบจริงและมีประโยชน์ อย่างไรก็ตาม หากผู้โจมตีโจมตีเว็บเซิร์ฟเวอร์ที่โฮสต์รีลีส พวกเขาสามารถแทนที่ไบนารี คำนวณ SHA-256 ของมันใหม่ และอัปเดตการตรวจสอบบนเพจได้ ผู้ใช้ตรวจสอบการตรวจสอบและดูเหมือนว่ามัลแวร์ของผู้โจมตีจะมาจากผู้เผยแพร่ ระบบทำงานตรงตามที่ออกแบบไว้ทุกประการ แต่ไม่สามารถตอบคำถามที่ผู้ใช้คิดว่าตนถามได้
นี่ไม่ใช่ความล้มเหลวของเช็คซัมเอง เป็นการสังเกตที่ถูกต้องว่าเช็คซัมทำอะไรและไม่ทำอะไร ผลรวมตรวจสอบจะพิสูจน์ว่าสำเนาข้อมูลสองชุดเหมือนกัน ไม่ได้พิสูจน์ว่าใครเป็นผู้สร้างข้อมูล นั่นคือความแตกต่างระหว่างความสมบูรณ์และความถูกต้อง และการนำมารวมกันถือเป็นหนึ่งในข้อผิดพลาดด้านความปลอดภัยที่พบบ่อยที่สุดในการตรวจสอบรุ่น ระบบจำนวนมากเสียหายไม่ใช่เพราะเช็คซัมผิด แต่เป็นเพราะผู้ใช้ไว้วางใจให้ตอบคำถามที่พวกเขาไม่สามารถตอบได้
แฮชพิสูจน์ให้เห็นแล้วว่าอินพุตทั้งสองมีไบต์เดียวกัน และไม่มีข้อมูลเกี่ยวกับใครเป็นผู้สร้างมัน
ความสมบูรณ์เป็นคุณสมบัติของข้อมูลเอง หากคุณมีไฟล์และ SHA-256 ของไฟล์นั้น และไฟล์นั้นยังไม่ได้รับการแก้ไข แฮชจะตรงกัน แฮชพิสูจน์ว่าทุกไบต์ไม่มีการเปลี่ยนแปลงจากเมื่อคำนวณ หากไฟล์เสียหายจากข้อผิดพลาดในการส่ง ดิสก์ขัดข้อง หรือการพลิกบิตบนสายเคเบิลเครือข่าย แฮชจะไม่ตรงกัน นี่คือสิ่งที่เช็คซัมทำได้ดี พวกเขาเป็นเลิศในการจับอุบัติเหตุและการทุจริตแบบสุ่ม พวกเขาล้มเหลวกับฝ่ายตรงข้ามที่สามารถคำนวณแฮชได้เช่นกัน
ความถูกต้องเป็นคุณสมบัติของการอ้างสิทธิ์ว่าใครเป็นผู้ผลิตข้อมูล คำถาม "ไฟล์นี้มาจากผู้จัดพิมพ์ที่ฉันเชื่อถือหรือไม่" แตกต่างโดยพื้นฐานจากคำถาม "ไฟล์นี้ได้รับการแก้ไขหรือไม่" แฮชโดยตัวมันเองไม่สามารถตอบคำถามความถูกต้องได้เนื่องจากใครๆ ก็สามารถคำนวณแฮชได้ ผู้โจมตีที่แก้ไขไฟล์สามารถคำนวณแฮชใหม่และโพสต์ได้อย่างง่ายดายเหมือนกับผู้เผยแพร่ที่ถูกต้องตามกฎหมาย การแฮชมีความสมมาตร ทั้งกองหลังและผู้โจมตีมีความสามารถในการคำนวณเหมือนกัน
ข้อกำหนดช่องทางที่เชื่อถือได้ — เหตุใดการตรวจสอบจึงน่าเชื่อถือพอๆ กับที่คุณได้รับเท่านั้น
ข้อกำหนดช่องทางที่เชื่อถือได้คือข้อมูลเชิงลึกที่สำคัญ เช็คซัมจะน่าเชื่อถือพอๆ กับช่องทางที่มันผ่านมาเท่านั้น หากคุณดาวน์โหลดไบนารีของซอฟต์แวร์จาก CDN อย่างเป็นทางการของผู้จัดพิมพ์ และดาวน์โหลดเช็คซัมจากเซิร์ฟเวอร์เดียวกัน แสดงว่าซอฟต์แวร์เหล่านั้นเดินทางไปในเส้นทางเดียวกัน การประนีประนอมกับเซิร์ฟเวอร์หมายความว่าผู้โจมตีจะควบคุมทั้งสองอย่าง การตรวจสอบให้การป้องกันความเสียหายระหว่างการจัดส่ง ไฟล์ที่เสียหายจะไม่ตรงกัน แต่ไม่ใช่กับผู้โจมตีที่ควบคุมแหล่งที่มา เช็คซัมและไฟล์มีจุดล้มเหลวเพียงจุดเดียว
หากมีการเผยแพร่เช็คซัมแยกกันบนเซิร์ฟเวอร์อื่นและมีการควบคุมการเข้าถึงที่แตกต่างกัน จะทำให้มีการป้องกันมากขึ้น ผู้โจมตีที่โจมตีไซต์หลักจะต้องประนีประนอมทั้งสองตำแหน่งเพื่อปลอมคู่ที่ตรงกัน ซึ่งดีกว่า แต่ก็ยังต้องใช้จุดควบคุมอิสระสองจุดที่ยังคงปลอดภัย ผู้โจมตีจะต้องฝ่าฝืนสองระบบแทนที่จะเป็นระบบเดียว ส่งผลให้ต้นทุนการโจมตีเพิ่มขึ้น แต่ก็ยังไม่สามารถพิสูจน์ความถูกต้องได้ มันเป็นเพียงการโจมตีที่มีราคาแพงกว่า
ลายเซ็นจะผูกแฮชเข้ากับข้อมูลประจำตัว — การลงนามไดเจสต์ด้วยคีย์ส่วนตัวจะช่วยเพิ่มความน่าเชื่อถือได้อย่างไร
ลายเซ็นดิจิทัลจะแก้ไขปัญหานี้โดยการผูกข้อมูลเข้ากับข้อมูลประจำตัวโดยใช้การเข้ารหัส ผู้เผยแพร่สร้างคู่คีย์: คีย์ส่วนตัวที่พวกเขาเก็บเป็นความลับและคีย์สาธารณะที่พวกเขาเผยแพร่ พวกเขาเซ็นชื่อไฟล์โดยคำนวณไดเจสต์ จากนั้นเข้ารหัสไดเจสต์นั้นด้วยคีย์ส่วนตัว ผลลัพธ์คือลายเซ็น ผู้ใช้ตรวจสอบลายเซ็นโดยการถอดรหัสด้วยกุญแจสาธารณะของผู้จัดพิมพ์ และตรวจสอบว่าผลลัพธ์ตรงกับข้อมูลสรุปที่คำนวณของไฟล์ที่ได้รับ การเข้ารหัสทำให้เกิดความไม่สมดุลที่เช็คซัมไม่สามารถทำได้
หากวิธีนี้ได้ผล สองสิ่งที่ได้รับการพิสูจน์แล้ว: ข้อมูลตรงกับไดเจสต์ที่ผู้เผยแพร่ลงนาม และคีย์ส่วนตัวที่ใช้ในการลงนามนั้นตรงกับคีย์สาธารณะที่เผยแพร่ นั่นเป็นการพิสูจน์ว่าผู้จัดพิมพ์เป็นผู้สร้างมัน ไม่ใช่แค่ว่าผู้โจมตีทำเท่านั้น รหัสสาธารณะจะต้องผ่านช่องทางที่ปลอดภัย—โดยปกติแล้วคือใบรับรองจากผู้ออกใบรับรองที่เชื่อถือได้—แต่เมื่อคุณมีรหัสสาธารณะแล้ว คุณจะสามารถตรวจสอบลายเซ็นจากผู้เผยแพร่รายนั้นได้อย่างไม่มีกำหนด การโจมตีตอนนี้จำเป็นต้องขโมยคีย์ส่วนตัว ซึ่งยากกว่าการประนีประนอมเว็บเซิร์ฟเวอร์มาก
ตัวอย่างการทำงาน — สถานการณ์ภัยคุกคามสามสถานการณ์ (มิเรอร์ที่เสียหาย, เพจที่ถูกบุกรุก, บุคคลภายในที่ประสงค์ร้าย) และการตรวจสอบผลรวมและลายเซ็นแต่ละอย่างที่จับได้
สถานการณ์ภัยคุกคามสามสถานการณ์แสดงให้เห็นถึงความแตกต่าง สถานการณ์ที่หนึ่ง: มิเรอร์การดาวน์โหลดเสียหายจากข้อผิดพลาดแบบสุ่ม เช็คซัมจับได้ ลายเซ็นจับมัน ทั้งสองทำงานได้ดีพอๆ กันเพราะไม่จำเป็นต้องเอาชนะผู้โจมตี สถานการณ์ที่สอง: มิเรอร์ถูกโจมตีโดยผู้โจมตีที่มาแทนที่ไฟล์และเช็คซัม เช็คซัมล้มเหลวในการป้องกัน ลายเซ็นยังคงใช้งานได้ เนื่องจากผู้โจมตีไม่มีคีย์ส่วนตัวและไม่สามารถปลอมลายเซ็นที่ถูกต้องได้ ผู้โจมตีสามารถโพสต์อะไรก็ได้ แต่ลายเซ็นจะพิสูจน์ได้ว่าไม่ได้มาจากผู้จัดพิมพ์
สถานการณ์ที่สาม: CDN ถูกบุกรุกแต่ลายเซ็นถูกเผยแพร่ผ่านช่องทางอื่น การตรวจสอบความถูกต้องใน CDN ไม่สามารถเชื่อถือได้ แต่การตรวจสอบลายเซ็นยังคงใช้งานได้ เนื่องจากการตรวจสอบความสมบูรณ์จะเชื่อมโยงกับคีย์ของผู้เผยแพร่โดยการเข้ารหัส ไม่ใช่กับช่อง ผู้โจมตีจะต้องปลอมลายเซ็นซึ่งต้องใช้รหัสส่วนตัว ลายเซ็นเป็นเพียงการตรวจสอบเดียวที่รอดพ้นจากการโจมตีของเซิร์ฟเวอร์ นี่คือเหตุผลว่าทำไมลายเซ็นจึงมีความจำเป็นเพื่อความถูกต้อง เป็นเครื่องมือเดียวที่พิสูจน์ตัวตนได้แม้จะมีการประนีประนอมช่องทางก็ตาม
บทบาทของ TLS และข้อจำกัด — ความปลอดภัยของการขนส่งจะปกป้องการดาวน์โหลดระหว่างเดินทาง ไม่ใช่เซิร์ฟเวอร์ของผู้เผยแพร่
ความปลอดภัยในการขนส่งช่วยปกป้องการเชื่อมต่อกับโฮสต์ที่ตั้งชื่อตามใบรับรอง มันสามารถป้องกันไม่ให้ผู้สังเกตการณ์บนเส้นทางแทนที่ไบต์ดาวน์โหลด แต่ไม่สามารถทำให้ต้นทางของผู้เผยแพร่ที่ถูกบุกรุกมีความเที่ยงตรงได้ หากต้นทางนั้นให้บริการไฟล์เก็บถาวรที่ได้รับการแก้ไขและการตรวจสอบผลรวมที่คำนวณใหม่บน TLS ที่ถูกต้อง ทั้งคู่จะมาถึงเหมือนเดิมและยังคงอธิบายเนื้อหาที่ผู้โจมตีควบคุม
นี่คือเหตุผลว่าทำไมการขนส่ง ความสมบูรณ์ และความถูกต้องจึงแยกชั้นกัน TLS รักษาความปลอดภัยของช่อง ข้อมูลสรุปเปรียบเทียบไบต์และลายเซ็นเชื่อมโยงผลการตรวจสอบกับการควบคุมคีย์ส่วนตัว ไม่ควรอธิบายว่าเลเยอร์เป็นการพิสูจน์คุณสมบัติที่มาจากอีกชั้นหนึ่ง แม้ว่าเวิร์กโฟลว์การเผยแพร่จะรวมทั้งสามอย่างสมเหตุสมผลก็ตาม
สิ่งนี้ไม่ครอบคลุมถึง — การแจกจ่ายคีย์และรูทที่เชื่อถือได้ ซึ่งเป็นส่วนที่ยากของลายเซ็น
การแจกแจงคีย์คือขอบเขตที่ยากที่เครื่องคิดเลขแยกย่อยนี้จะไม่ข้าม ผู้ตรวจสอบลายเซ็นยังคงต้องการคีย์สาธารณะหรือสายใบรับรองที่แท้จริง และนโยบายสำหรับการหมุนเวียน การเพิกถอน และอัลกอริธึมที่ยอมรับได้ ลายเซ็นที่ถูกต้องทางคณิตศาสตร์ภายใต้คีย์ที่ไม่น่าเชื่อถือจะพิสูจน์ได้ว่าผู้ถือคีย์ที่ไม่น่าเชื่อถือนั้นเท่านั้นที่ลงนามในไบต์
ดังนั้น สถานการณ์การทำงานจึงหยุดเมื่อมีคีย์ที่เชื่อถือได้อยู่แล้ว พวกเขาไม่ได้กำหนดให้มีการปักหมุดใบรับรอง โครงสร้างพื้นฐานของคีย์สาธารณะ หรือพิธีการเผยแพร่คีย์ ตัวเลือกการใช้งานเหล่านั้นจำเป็นต้องมีการออกแบบที่ผ่านการตรวจสอบแล้ว ToolAcre จัดเตรียมไดเจสต์ธรรมดาที่อาจลงนาม ไม่ใช่รูทที่เชื่อถือได้ที่ใช้ในการตรวจสอบความถูกต้องของข้อมูลประจำตัว
ประเด็นสำคัญ: การตรวจสอบความสมบูรณ์ ลายเซ็นเพื่อความถูกต้อง — เครื่องคิดเลขแฮช ToolAcre SHA คำนวณการแยกย่อย การตรวจสอบว่าใครเป็นผู้เผยแพร่เป็นขั้นตอนแยกต่างหาก
เครื่องคำนวณแฮช ToolAcre SHA จะคำนวณด้านความสมบูรณ์ของการตรวจสอบนี้ ใช้เพื่อแฮชไฟล์ที่ดาวน์โหลดและตรวจสอบกับค่าที่เผยแพร่ หากตรงกัน การดาวน์โหลดจะไม่เสียหาย แต่หากตรงกันเพราะผู้โจมตีเขียนทั้งสองอย่างใหม่ การตรวจสอบความสมบูรณ์เพียงอย่างเดียวจะไม่สามารถตรวจจับได้ เครื่องมือนี้มีความซื่อสัตย์ต่อข้อจำกัดนี้และไม่ได้อ้างสิทธิ์ในการตรวจสอบความถูกต้อง เพื่อความสมบูรณ์เท่านั้น เช็คซัมจะรวดเร็วและดี เพื่อความถูกต้องคุณต้องมีลายเซ็น TLS ให้ความปลอดภัยในการขนส่งสำหรับการดาวน์โหลด การเชื่อมต่อกับเซิร์ฟเวอร์ได้รับการเข้ารหัสและรับรองความถูกต้อง ดังนั้นผู้โจมตีบนเครือข่ายจึงไม่สามารถแก้ไขไฟล์ระหว่างทางได้ อย่างไรก็ตาม TLS จะไม่ช่วยหากเซิร์ฟเวอร์ถูกบุกรุก เซิร์ฟเวอร์ที่ถูกบุกรุกสามารถให้บริการไฟล์ใดก็ได้ผ่านการเชื่อมต่อ TLS ที่ปลอดภัย นี่คือเหตุผลว่าทำไมการยืนยันระดับแอปพลิเคชัน—เช็คซัมและลายเซ็น—จึงมีความสำคัญแยกจากความปลอดภัยของการขนส่ง
รูปแบบทั่วไปในการเผยแพร่ซอฟต์แวร์คือการเผยแพร่ทั้งเช็คซัมและลายเซ็น เช็คซัมสะดวก ผู้ใช้สามารถตรวจสอบได้อย่างรวดเร็วด้วยคำสั่งเชลล์บรรทัดเดียว ลายเซ็นให้ความถูกต้องสำหรับผู้ใช้ที่มีรหัสสาธารณะของผู้จัดพิมพ์ ผู้ใช้อาจตรวจสอบเช็คซัมก่อนเพื่อให้ผ่านความสมบูรณ์อย่างรวดเร็ว จากนั้นตรวจสอบลายเซ็นกับคีย์ที่จัดเก็บไว้ในพวงกุญแจ GPG ของตนเพื่อความถูกต้อง เช็คทั้งสองมีจุดประสงค์ที่แตกต่างกันและสามารถป้องกันชั้นในเชิงลึกได้ ส่วนที่ยากของลายเซ็นคือการเผยแพร่และความไว้วางใจที่สำคัญ คุณต้องมีคีย์สาธารณะของผู้จัดพิมพ์ และคุณต้องมั่นใจว่าคีย์นี้เป็นของพวกเขาจริงๆ นี่คือปัญหาที่หน่วยงานออกใบรับรองมีอยู่ที่ต้องแก้ไข: พวกเขาลงนามในใบรับรองของผู้เผยแพร่ และใบรับรอง CA หลักจะถูกโหลดไว้ล่วงหน้าในเบราว์เซอร์และระบบปฏิบัติการ สำหรับโปรเจ็กต์ขนาดเล็ก คุณอาจเผยแพร่คีย์ GPG บนเว็บไซต์แยกต่างหากที่มีการปรับปรุงประสิทธิภาพ หรือบนเซิร์ฟเวอร์คีย์สาธารณะ เช็คซัมมีราคาถูกในการตรวจสอบ ลายเซ็นจำเป็นต้องมีการจัดการรากของความไว้วางใจ ความซับซ้อนเพิ่มเติมคือราคาของของแท้