เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ · SHA เครื่องคำนวณแฮช
เหตุใด Web Crypto จึงเสนอ SHA-1 ถึง SHA-512 แต่ไม่ใช่ MD5 หรือ SHA-3
· มันทำงานอย่างไร
การเข้ารหัส เบราว์เซอร์-apis sha-256 javascript
ไดเจสต์ของเบราว์เซอร์ API รองรับสี่อัลกอริธึมทุกประการ โพสต์นี้จะอธิบายว่าทำไม MD5 จึงถูกละทิ้ง เหตุใด SHA-3 จึงไม่ได้ถูกเพิ่ม และนั่นหมายความว่าอย่างไรสำหรับเครื่องมือที่ปฏิเสธที่จะจัดส่งสิ่งที่แพลตฟอร์มไม่มีให้
MD5 อยู่ที่ไหน — คำถามแรกจากใครก็ตามที่ย้ายเวิร์กโฟลว์เช็คซัมแบบเดิม
Web Crypto ของเบราว์เซอร์ API มีอัลกอริธึมย่อยสี่แบบ: SHA-1, SHA-256, SHA-384 และ SHA-512 หากคุณเข้าถึงเครื่องคำนวณแฮช ToolAcre SHA ที่คาดหวัง MD5 หรือ SHA-3 คุณจะไม่พบพวกเขา ความเฉพาะเจาะจงนั้นไม่ใช่ข้อจำกัดของเครื่องมือ มันสะท้อนถึงการเลือกแพลตฟอร์มโดยเจตนา การทำความเข้าใจว่าเหตุใดจึงรวมสี่สิ่งนี้เข้าด้วยกัน และเหตุใดทางเลือกยอดนิยมสองรายการจึงถูกละทิ้ง จะบอกคุณได้มากมายเกี่ยวกับวิธีการออกแบบ API ของเบราว์เซอร์
เบราว์เซอร์หลักทุกตัวเปิดเผย crypto.subtle.digest บนต้นทางที่ปลอดภัย เมื่อ JavaScript ของคุณเรียกใช้เมธอดนั้น มันจะผ่านไปยังการใช้งานการเข้ารหัสของแพลตฟอร์ม ซึ่งเป็นโค้ดเนทิฟที่ทำงานด้วยแซนด์บ็อกซ์ความปลอดภัยและการเพิ่มประสิทธิภาพ อัลกอริธึมสรุปที่นำเสนอได้รับเลือกโดย W3C Web Crypto Working Group ที่มีลำดับความสำคัญเฉพาะ: ความเข้ากันได้กับมาตรฐานความปลอดภัยที่มีอยู่ การสนับสนุนที่มีอยู่ในไลบรารีการเข้ารหัส ความสมบูรณ์ และความต้องการด้านความปลอดภัยในทางปฏิบัติของแพลตฟอร์มเว็บ
อัลกอริธึมทั้งสี่ SubtleCrypto.digest รองรับ — SHA-1, SHA-256, SHA-384 และ SHA-512 และไม่มีอะไรอื่นอีก
ToolAcre ยอมรับตัวระบุสี่ตัวเดียวกันที่บังคับใช้โดย digestBytes: SHA-1, SHA-256, SHA-384 และ SHA-512 ชื่อที่ไม่รู้จักจะถูกปฏิเสธก่อนที่จะเรียก Web Crypto และชุดทดสอบผ่าน MD5 โดยเฉพาะเพื่อยืนยันการปฏิเสธนั้น ดังนั้นผู้หยิบจึงอธิบายขอบเขตของผลิตภัณฑ์ที่ได้รับการทดสอบมากกว่าการสำรวจการย่อยทุกครั้งที่เคยสร้างมาตรฐาน
SHA-1 ที่ปรากฏในรายการนั้นไม่ได้ให้คำแนะนำที่เทียบเท่ากันทั้งสี่รายการ ออบเจ็กต์ผลลัพธ์มีแฟล็กที่ใช้งานไม่ได้และอินเทอร์เฟซจะทำซ้ำคำเตือนแบบเดิม อีกสามตัวเลือกคือ SHA-2 ที่มีอยู่ ความพร้อมใช้งานและความเหมาะสมจะต้องแยกจากกันเมื่อใดก็ตามที่เครื่องมือที่เข้ากันได้สร้างค่าเก่าขึ้นมาใหม่โดยไม่สนับสนุนให้มีการพึ่งพาใหม่
MD5 ไม่อยู่ในการใช้งานนี้และ Web Crypto; บทความนี้ไม่ได้เพิ่มเหตุผลมาตรฐานที่ไม่มีแหล่งที่มา
MD5 เป็นฟังก์ชันแฮชสำหรับการเข้ารหัสที่สร้างการย่อยแบบ 128 บิต ทำให้สั้นกว่าและราคาถูกกว่าในการคำนวณมากกว่า SHA-256 เป็นตัวเลือกมาตรฐานสำหรับเช็คซัมและลายเซ็นดิจิทัลมานานหลายทศวรรษ อย่างไรก็ตาม ความต้านทานการชนของ MD5 นั้นพังโดยพื้นฐานแล้ว ใน 2004 นักเข้ารหัสได้สาธิตการชนกันในทางปฏิบัติ—อินพุตสองรายการที่แตกต่างกันและมีข้อมูลสรุปเดียวกัน—และอัลกอริทึมได้ถูกรื้อถอนออกอย่างหมดจดโดยงานวิชาการ ช่องโหว่ทางคณิตศาสตร์มีความแน่นอนและถาวร
ข้อกำหนด W3C Web Crypto ตั้งใจที่จะไม่รวม MD5 เหตุผลนั้นตรงไปตรงมา: การจัดส่งอัลกอริธึมที่เสียหายไปยังผู้ใช้เบราว์เซอร์หลายล้านคนจะทำให้การใช้งานในแอปพลิเคชันใหม่เป็นปกติ แม้ว่าควรปรากฏเฉพาะในสถานการณ์ความเข้ากันได้แบบเดิมเท่านั้น หากแอปพลิเคชันต้องการ MD5 อย่างแท้จริงสำหรับการทำงานร่วมกันกับระบบเก่า โค้ดนั้นจะอยู่ในรันไทม์ฝั่งเซิร์ฟเวอร์ซึ่งมีการทำความเข้าใจและตรวจสอบข้อกำหนด ไม่ใช่ในเบราว์เซอร์ การทำให้อัลกอริธึมที่ใช้งานไม่ได้เข้าถึงได้สะดวกจะสร้างความคาดหวังด้านความปลอดภัยในระบบใหม่
เครื่องคำนวณแฮช ToolAcre SHA ไม่ได้จัดส่งการใช้งาน MD5 เช่นกัน เช่นเดียวกับแพลตฟอร์ม API ที่ใช้ มันปฏิเสธที่จะทำให้อัลกอริทึมที่ใช้งานไม่ได้เข้าถึงได้สะดวก หากแอปพลิเคชันของคุณต้องการ MD5 ซึ่งเป็นระบบ Git ภายนอกที่หายากอย่างยิ่ง การใช้งานนั้นจะอยู่ในโค้ดเบสของคุณเองพร้อมหมายเหตุที่ชัดเจนว่านี่เป็นแผ่นรองความเข้ากันได้ การเข้าถึงทำให้เกิดความคาดหวัง และอัลกอริธึมที่ใช้งานไม่ได้ก็ไม่สมควรคาดหวัง
SHA-3 อยู่นอกเบราว์เซอร์ API และเครื่องมือ ประวัติการรับเลี้ยงบุตรบุญธรรมเป็นหลักฐานนอกพื้นที่เก็บข้อมูล
SHA-3 ได้รับมาตรฐานโดย NIST ใน 2015 หลังจากการแข่งขันสาธารณะอันยาวนาน และมีการเข้ารหัสที่แข็งแกร่ง ใช้โครงสร้างที่แตกต่างโดยพื้นฐานจาก SHA-2 ที่เรียกว่าฟองน้ำ ซึ่งมีคุณสมบัติทางทฤษฎีที่น่าสนใจและการแลกเปลี่ยนประสิทธิภาพโดยขึ้นอยู่กับฮาร์ดแวร์ของคุณ ในระบบสมัยใหม่ SHA-3 สามารถเร็วกว่า SHA-256 ได้ แต่แพลตฟอร์มเบราว์เซอร์ยังไม่เปิดเผยในปัจจุบัน และความล่าช้านี้สะท้อนถึงการตัดสินใจเชิงปฏิบัติเกี่ยวกับความพร้อมของแพลตฟอร์มและอัตราการนำไปใช้
ความล่าช้าในการจัดส่ง SHA-3 สะท้อนถึงความเป็นจริง: Web Crypto ได้รับการออกแบบมาเพื่อครอบคลุมอัลกอริธึมในการใช้งานอย่างแพร่หลายทั่วทั้งเว็บ และใน HTTPS/TLS. ในการสรุปผล API SHA-2 (256, 384, 512) เป็นความเห็นพ้องต้องกันอย่างล้นหลาม สำหรับระบบใหม่และการย้ายไปยัง SHA-3 นั้นเกิดขึ้นช้ากว่าการย้ายจาก MD5 หรือ SHA-1 มาก แอปพลิเคชันส่วนใหญ่ยังไม่ต้องการ SHA-3 ค่าใช้จ่ายในการขยาย API และการทดสอบในทุกเบราว์เซอร์และแพลตฟอร์มนั้นไม่สมเหตุสมผลตามความต้องการเมื่อเปิดตัว
นี่ไม่ใช่การปฏิเสธอย่างถาวร Web Crypto API สามารถพัฒนาได้ หากการนำไปใช้ SHA-3 เร่งขึ้น คณะทำงานก็สามารถเพิ่มการยอมรับได้ ชุดปัจจุบันแสดงถึงอัลกอริธึมที่ได้มาตรฐานและครบถ้วนซึ่ง Web Crypto จำเป็นต้องใช้เพื่อตอบสนองความต้องการด้านความปลอดภัยในทันทีของแพลตฟอร์ม API ของเบราว์เซอร์จะต้องมีเสถียรภาพและได้รับการดูแลอย่างระมัดระวัง การเร่งรีบในการเพิ่มคุณสมบัติก่อนที่จะมีความต้องการอย่างกว้างขวางทำให้เกิดภาระในการบำรุงรักษาและความเสี่ยงด้านความเข้ากันได้ในอีกหลายปีข้างหน้า
เหตุใด SHA-1 จึงยังคงอยู่ — ความต้องการการยืนยันแบบเดิม และความแตกต่างระหว่างข้อเสนอและการแนะนำ
SHA-1 รวมอยู่ใน Web Crypto แม้ว่าจะถูกใช้งานโดยการเข้ารหัสก็ตาม ตัวเลือกที่ขัดกับสัญชาตญาณนี้มักจะทำให้นักพัฒนาประหลาดใจ อัลกอริธึมสร้างการแยกย่อย 160 บิต และการโจมตีการชนกับ SHA-1 สามารถทำได้ในขณะนี้ คุณสามารถสร้างเอกสารสองฉบับที่แตกต่างกันเพื่อแบ่งปันการแยกย่อยเดียวกันได้ การชนกันของคำนำหน้าที่เลือกทำให้ผู้โจมตีสามารถสร้างเอกสารสองฉบับที่มีความหมายทั้งคู่ในขณะชนกัน ซึ่งจะทำให้ลายเซ็นและใบรับรองเสียหาย แต่มันยังคงอยู่ในแพลตฟอร์ม
SHA-1 ยังคงอยู่ใน Web Crypto ด้วยเหตุผลที่จำเป็นประการหนึ่ง: ความเข้ากันได้แบบเดิม ตัวระบุออบเจ็กต์ Git จะขึ้นอยู่กับ SHA-1 และในขณะที่โปรเจ็กต์ Git กำลังเปลี่ยนไปใช้ SHA-256 พื้นที่เก็บข้อมูลที่มีอยู่หลายล้านรายการ การอ้างอิง และระบบการสร้างยังคงปล่อยแฮช SHA-1 ลายนิ้วมือใบรับรอง TLS จากระบบเก่าจะมีการสรุปข้อมูล SHA-1 รายการ API ที่ออกลายเซ็น HMAC-SHA1 เมื่อหลายปีก่อนยังคงต้องมีการตรวจสอบความถูกต้อง ระบบที่ใช้งานเหล่านี้ต้องได้รับการตรวจสอบหรือย้าย แพลตฟอร์มดังกล่าวประกอบด้วย SHA-1 เพื่อให้การทำงานที่จำเป็นนั้นเป็นไปได้
แพลตฟอร์ม API ประกอบด้วย SHA-1 ด้วยความเข้าใจที่ชัดเจนว่าแพลตฟอร์มนี้มีไว้เพื่อความเข้ากันได้ ไม่ใช่การแนะนำ UI ของเบราว์เซอร์มีป้ายกำกับ SHA-1 พร้อมคำเตือน เครื่องคำนวณแฮช ToolAcre SHA จะแสดง "ใช้งานไม่ได้ด้วยการเข้ารหัส" ถัดจากผลลัพธ์ SHA-1 เพื่อให้มั่นใจว่าใครก็ตามที่ใช้เครื่องเข้าใจว่าพวกเขากำลังทำงานกับเนื้อหารุ่นเก่า ความโปร่งใสเป็นสิ่งสำคัญ ผู้ใช้จะต้องไม่เข้าใจผิดว่าความเข้ากันได้ของ SHA-1 สำหรับการรับรอง SHA-1
หากความเข้ากันได้ต้องใช้ MD5 ให้ใช้การใช้งานที่ได้รับการตรวจสอบแล้วภายนอกเครื่องมือนี้ และอย่าเข้าใจผิดว่าความเข้ากันได้ด้านความปลอดภัย
อัลกอริธึมทั้งสี่ใน Web Crypto สอดคล้องกับระบบนิเวศของชุดรหัส TLS และมาตรฐานความปลอดภัยที่สำคัญที่สุด SHA-256 เป็นค่าเริ่มต้นปัจจุบันสำหรับการแฮชเพื่อวัตถุประสงค์ทั่วไป ซึ่งใช้ในการตรวจสอบความสมบูรณ์ของทรัพยากรย่อย การกำหนดที่อยู่เนื้อหา และระบบรักษาความปลอดภัยใหม่ SHA-512 เร็วกว่าบนฮาร์ดแวร์ 64-บิต และนำเสนอข้อมูลสรุปที่กว้างขึ้น SHA-384 เป็นที่รู้จักเป็นหลักสำหรับการใช้งานในชุดการเข้ารหัส TLS
SHA-1 ถูกเก็บไว้เพื่อการทำงานร่วมกัน ไม่ใช่เพราะใครก็ตามควรเริ่มระบบใหม่ด้วย หากคุณกำลังตรวจสอบผลรวมตรวจสอบ SHA-1 ที่มีอยู่ จับคู่ลายนิ้วมือของใบรับรองเก่า หรือสร้างรหัสคอมมิต Git ขึ้นมาใหม่ SHA-1 ใน ToolAcre จะช่วยให้คุณทำเช่นนั้นได้ หากคุณกำลังออกแบบระบบใหม่ SHA-256 คือตัวเลือกที่ชัดเจน อัลกอริธึมที่คุณเลือกจะส่งสัญญาณถึงความเข้าใจของคุณเกี่ยวกับโมเดลความปลอดภัย
สิ่งนี้ไม่ครอบคลุม — รันไทม์ฝั่งเซิร์ฟเวอร์ ซึ่งมักจะเปิดเผยอัลกอริธึมการแยกย่อยอื่นๆ อีกมากมาย
หากแอปพลิเคชันของคุณต้องการ MD5, SHA-3 หรืออัลกอริทึมอื่น ๆ จริงๆ ตัวเลือกนั้นชัดเจน: เก็บโค้ดนั้นไว้ในรันไทม์ฝั่งเซิร์ฟเวอร์ และเปิดเผยเฉพาะผลลัพธ์สุดท้ายต่อเบราว์เซอร์ อย่าจัดส่งการใช้งานอัลกอริธึมการเข้ารหัสลับ JavaScript ของคุณเองสำหรับการใช้งานเบราว์เซอร์ Web Crypto ดั้งเดิมของเบราว์เซอร์นั้นเร็วกว่า ปลอดภัยกว่า และได้รับการตรวจสอบในลักษณะที่ฟังก์ชัน JavaScript ที่เขียนด้วยลายมือไม่สามารถจับคู่ได้ การมอบหมายให้กับแพลตฟอร์มคือตัวเลือกที่ถูกต้องเสมอเมื่อแพลตฟอร์มมอบสิ่งที่คุณต้องการ
สิ่งนี้ใช้ได้กับอัลกอริธึม "แบบง่าย" ด้วยซ้ำ การใช้งาน MD5 ที่เขียนขึ้นเองอาจดูเหมือนไม่เป็นอันตราย เนื่องจาก MD5 ใช้งานไม่ได้อยู่แล้ว แต่อัลกอริทึมที่เสียหายจะไม่มีการไล่ระดับ—เพียงแต่ใช้งานไม่ได้ การจัดส่งหนึ่งรายการจะทำให้การปฏิบัติงานของการเข้ารหัสในโค้ดแอปพลิเคชันเป็นปกติ เบราว์เซอร์มอบสิ่งที่แพลตฟอร์มต้องการ ใช้สิ่งที่มีให้ การเข้ารหัสด้วยมือเป็นแหล่งช่องโหว่ด้านความปลอดภัยที่ใหญ่ที่สุดแหล่งเดียวในเว็บแอปพลิเคชัน เนื่องจากนักพัฒนาประเมินความละเอียดอ่อนและกรณี Edge ต่ำไป
ประเด็นสำคัญ: ข้อจำกัดเป็นส่วนหนึ่งของผลิตภัณฑ์ — เครื่องคำนวณแฮช ToolAcre SHA มีอัลกอริธึมสี่อัลกอริธึมที่เบราว์เซอร์นำไปใช้เอง และเอกสารที่มีขอบเขต
เครื่องคำนวณแฮช ToolAcre SHA จะแสดงข้อจำกัดนี้โดยตรง: คุณจะเห็นว่าอัลกอริธึมทั้งสี่ที่ Web Crypto มอบให้นั้นชัดเจนไม่มากและไม่น้อยไปกว่านี้ หากคุณวางค่าและคิดว่า "ฉันต้องการ MD5" แสดงว่าไม่มีสิ่งใดเกิดขึ้นโดยไม่ได้ตั้งใจ หากคุณต้องการ นั่นเป็นสัญญาณว่าระบบของคุณมีส่วนประกอบแบบเดิมซึ่งจำเป็นต้องมีการจัดการอย่างระมัดระวัง ซึ่งเป็นสิ่งที่เครื่องมือการย้ายฝั่งเซิร์ฟเวอร์โดยเฉพาะ ไม่ใช่ยูทิลิตี้เบราว์เซอร์ ความซื่อสัตย์สุจริตของเครื่องมือเกี่ยวกับสิ่งที่ทำและไม่ได้นำเสนอถือเป็นข้อมูลอันมีค่าในตัวมันเอง
การออกแบบ Web Crypto สะท้อนให้เห็นถึงการปฏิบัติด้านการเข้ารหัสมานานหลายทศวรรษ: อัลกอริธึมที่ได้มาตรฐาน ตรวจสอบ และพิสูจน์แล้วในการใช้งานในวงกว้าง SHA-256 และ SHA-512 เป็นค่าเริ่มต้นที่สมเหตุสมผล SHA-384 มีเชื้อสาย TLS SHA-1 อยู่ที่นั่นเพราะเว็บมีข้อมูลสรุป SHA-1 รายการที่จะต้องได้รับการยืนยันเป็นเวลาหลายปี MD5 และ SHA-3 ไม่อยู่ที่นั่นเนื่องจาก MD5 ใช้งานไม่ได้ และ SHA-3 ยังไม่สำคัญต่อแพลตฟอร์ม