เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ · SHA เครื่องคำนวณแฮช
แฮชที่เข้ารหัสเทียบกับเช็คซัม: สิ่งที่ CRC32 และ xxHash ไม่สามารถสัญญาได้
· พื้นหลัง
sha-256 การเข้ารหัส ความปลอดภัย
CRC32, FNV และ xxHash ต่างก็เป็นแฮชเช่นกัน แต่ก็ไม่ได้ให้คำมั่นสัญญากับฝ่ายตรงข้าม โพสต์นี้จะอธิบายสิ่งที่แยกแฮชการเข้ารหัสออกจากเช็คซัม และวิธีการเลือกตามกรณีการใช้งาน
แฮชไหนสำหรับงานไหน? — ทางเลือกระหว่างความเร็วและความปลอดภัยของฝ่ายตรงข้าม
ฟังก์ชันแฮชมีสามประเภท: การตรวจสอบเพื่อตรวจจับข้อผิดพลาดโดยไม่ตั้งใจ แฮชที่ไม่เข้ารหัสสำหรับการเผยแพร่และประสิทธิภาพ และแฮชที่เข้ารหัสเพื่อความปลอดภัย แต่ละหมวดหมู่มีการรับประกันที่แตกต่างกันและการแลกเปลี่ยนความเร็วและขนาดการแยกข้อมูลที่แตกต่างกัน การตรวจสอบเช่น CRC32 นั้นรวดเร็วและสั้น (4 bytes, 8 อักขระฐานสิบหก) แต่ไม่มีการป้องกันการแก้ไขโดยเจตนา แฮชที่ไม่ใช่การเข้ารหัส เช่น xxHash หรือ MurmurHash นั้นรวดเร็วและมีประโยชน์สำหรับตารางแฮชและการกระจายข้อมูล แต่ไม่มีการป้องกันฝ่ายตรงข้ามที่ต้องการทำให้เกิดการชนกัน แฮชที่เข้ารหัสลับอย่าง SHA-256 จะช้ากว่าและสร้างการแยกย่อยที่ยาวกว่า (32 bytes, 64 อักขระฐานสิบหก) แต่ให้ความต้านทานก่อนอิมเมจและความต้านทานการชนกัน ซึ่งเป็นคุณสมบัติด้านความปลอดภัยที่ป้องกันฝ่ายตรงข้าม
การเลือกฟังก์ชันแฮชที่ไม่ถูกต้องสำหรับกรณีการใช้งานของคุณถือเป็นข้อผิดพลาดด้านความปลอดภัยที่พบบ่อย การใช้ CRC32 เพื่อตรวจสอบการดาวน์โหลดไฟล์จากแหล่งที่ไม่น่าเชื่อถือนั้นไม่ได้ผล ผู้โจมตีสามารถแก้ไขไฟล์ได้อย่างง่ายดายและคำนวณ CRC32 ใหม่ การใช้ SHA-256 เป็นฟังก์ชันแฮชแบบเร็วในตารางแฮชความถี่สูงถือเป็นการสิ้นเปลือง CRC32 หรือแฮชที่ไม่เข้ารหัสที่รวดเร็วก็เพียงพอและถูกกว่า
ตรวจสอบข้อผิดพลาดโดยไม่ตั้งใจ — การออกแบบของ CRC สำหรับการตรวจจับการพลิกบิตในการส่งสัญญาณ
เช็คซัมได้รับการออกแบบมาเพื่อการตรวจจับข้อผิดพลาดระหว่างการส่งหรือการจัดเก็บ โดยที่ข้อผิดพลาดจะถือว่าเป็นแบบสุ่มและไม่ได้ตั้งใจ CRC (Cyclic Redundancy Check) เดิมทีได้รับการออกแบบมาเพื่อตรวจจับการพลิกบิตในการสื่อสาร A CRC32 สร้างการแยกย่อย 32 บิต หากเฟรมเสียหายจากการพลิกบิตแบบสุ่มระหว่างการส่งสัญญาณ CRC32 เกือบจะเปลี่ยนแปลงอย่างแน่นอน โดยแจ้งเตือนผู้รับให้ร้องขอการส่งสัญญาณซ้ำ CRC สามารถตรวจจับข้อผิดพลาดบิตได้สูงสุดถึงจำนวนหนึ่ง ขึ้นอยู่กับพหุนาม สำหรับกรณีการใช้งานทั่วไป การพลิกเพียงเล็กน้อยหรือการพลิกไม่กี่บิตจะถูกตรวจจับได้อย่างน่าเชื่อถือ
CRC ถูกกำหนดไว้แต่ไม่ใช่การเข้ารหัส เมื่อได้รับไฟล์และ CRC32 ของมัน ผู้โจมตีสามารถแก้ไขไฟล์และคำนวณ CRC32 ใหม่เพื่อให้ตรงกับค่าที่คาดไว้ สำหรับฝ่ายตรงข้ามที่มีความรู้เกี่ยวกับพหุนาม CRC การสร้างการชนกันนั้นตรงไปตรงมา CRC ไม่เคยมีเจตนาต่อต้านการแก้ไขโดยเจตนา มีไว้เพื่อการตรวจจับข้อผิดพลาดโดยไม่ตั้งใจเท่านั้น ระบบประวัติ เช่น ไฟล์ ZIP และไฟล์ JPEG ใช้ CRC เพื่อจุดประสงค์นี้ โปรโตคอลสมัยใหม่ใช้ CRC เพื่อการตรวจจับข้อผิดพลาดที่รวดเร็วภายในช่องทางที่เข้ารหัสหรือรับรองความถูกต้อง ไม่ใช่เป็นการตรวจสอบความสมบูรณ์แบบสแตนด์อโลน
แฮชที่ไม่ใช่การเข้ารหัสสำหรับการแจกจ่าย — FNV, MurmurHash และ xxHash ในตารางแฮชและการแบ่งพาร์ติชัน
แฮชที่ไม่ใช่การเข้ารหัส เช่น FNV-1a, MurmurHash และ xxHash ได้รับการออกแบบมาเพื่อความเร็วและความสม่ำเสมอในตารางแฮชและการแบ่งพาร์ติชันข้อมูล มีเวลาในการตอบสนองต่ำมากและใช้ในสถานการณ์ที่คุณต้องการแบ่งพาร์ติชันข้อมูลระหว่างเซิร์ฟเวอร์หรือบัคเก็ตโดยไม่สนใจคุณสมบัติด้านความปลอดภัย หากคุณกำลังสร้างแคชและจำเป็นต้องแมปคีย์กับหมายเลขบัคเก็ต การใช้แฮชแบบเร็วก็เหมาะสม MurmurHash ได้รับการออกแบบมาอย่างชัดเจนสำหรับการใช้งานตารางแฮชและเร็วกว่า SHA บนฮาร์ดแวร์ส่วนใหญ่ xxHash ใหม่กว่าและปรับให้เหมาะสมสำหรับ CPU สมัยใหม่ที่มีแคชขนาดใหญ่และการทำเวกเตอร์
แฮชเหล่านี้ไม่ใช่การเข้ารหัสเนื่องจากไม่ต่อต้านการโจมตีพรีอิมเมจ (การค้นหาอินพุตที่สร้างไดเจสต์เฉพาะ) หรือการโจมตีการชนกัน (ค้นหาอินพุตที่แตกต่างกันสองรายการที่สร้างไดเจสต์เดียวกัน) ผู้โจมตีสามารถคำนวณอัลกอริธึมแฮชและค้นหาอินพุตที่ชนกันหรือสร้างเอาต์พุตเป้าหมาย ภายในสภาพแวดล้อมที่เชื่อถือได้ (คลัสเตอร์ที่โหนดทั้งหมดอยู่ภายใต้การควบคุมของคุณ) นั่นเป็นที่ยอมรับ หากผู้ใช้ที่ไม่น่าเชื่อถือสามารถควบคุมอินพุตได้ แฮชที่ไม่ใช่การเข้ารหัสจะเสี่ยงต่อการถูกโจมตีด้วยการชนกันซึ่งทำให้ประสิทธิภาพลดลง (กรณีที่แย่ที่สุดคือการค้นหาเชิงเส้นเมื่อคีย์ทั้งหมดชนกัน) หรือก่อให้เกิดผลข้างเคียงอื่นๆ
สิ่งที่แฮชในการเข้ารหัสเพิ่ม - การต้านทานภาพล่วงหน้าและการชนกับผู้โจมตีโดยเจตนา
แฮชที่เข้ารหัสเช่น SHA-256, SHA-384 และ SHA-512 ให้การต่อต้านพรีอิมเมจ: เมื่อพิจารณาถึงไดเจสต์ การคำนวณจะเป็นไปไม่ได้ในการคำนวณที่จะค้นหาอินพุตใดๆ ที่สร้างไดเจสต์นั้น นอกจากนี้ยังให้ความต้านทานการชนกันด้วย: เป็นไปไม่ได้ในการคำนวณที่จะค้นหาอินพุตที่แตกต่างกันสองรายการที่สร้างข้อมูลย่อยเดียวกัน คุณสมบัติเหล่านี้ป้องกันผู้ไม่หวังดีที่ต้องการปลอมแปลงการดาวน์โหลด สร้างใบรับรองปลอม หรือแก้ไขข้อความ ค่าใช้จ่ายคือความเร็ว: SHA-256 ช้ากว่า CRC32 และช้ากว่า xxHash บนฮาร์ดแวร์ส่วนใหญ่
SHA-1 ใช้งานไม่ได้ด้วยการเข้ารหัส (การชนกันเกิดขึ้นได้จริง) และไม่ควรใช้เพื่อวัตถุประสงค์ด้านความปลอดภัยใหม่ แต่ยังคงคำนวณเพื่อความเข้ากันได้แบบเดิม SHA-256, SHA-384 และ SHA-512 ยังคงแข็งแกร่งและเป็นตัวเลือกมาตรฐานสำหรับการแฮชการเข้ารหัส "2" ใน SHA-2 ระบุตระกูลที่สองของอัลกอริธึม SHA (ตระกูลแรกคือ SHA-1 ดั้งเดิม; SHA-3 เป็นตระกูลใหม่กว่า แต่ไม่ค่อยได้ใช้เพื่อวัตถุประสงค์นี้)
แฮชที่เข้ารหัสจะเพิ่มคุณสมบัติของฝ่ายตรงข้าม บทความนี้หลีกเลี่ยงการอ้างสิทธิ์เกี่ยวกับความเร็วสัมพัทธ์ที่ไม่รองรับ
การจับคู่ห้าสถานการณ์ให้เหมาะกับตระกูลแฮชที่ถูกต้อง ประการแรก เฟรมเครือข่ายที่ส่งผ่านช่องทางที่เชื่อถือได้ซึ่งเข้ารหัสด้วย AES: CRC32 นั้นเหมาะสม การเข้ารหัสป้องกันการดัดแปลง และ CRC ตรวจพบความเสียหายโดยไม่ตั้งใจ ประการที่สอง ตารางแฮชหรือการแฮชที่สอดคล้องกันสำหรับการทำโหลดบาลานซ์: แฮชที่ไม่เข้ารหัสเช่น xxHash นั้นเหมาะสม ความเร็วมีความสำคัญและสภาพแวดล้อมได้รับความไว้วางใจ ประการที่สาม การตรวจสอบความสมบูรณ์ของการดาวน์โหลดจากแหล่งที่ไม่น่าเชื่อถือ: จำเป็นต้องมี SHA-256 ผู้โจมตีสามารถแก้ไขไฟล์และเช็คซัมได้ แต่ไม่ใช่แฮชที่เข้ารหัสลับโดยไม่ทำลาย SHA-256
ประการที่สี่ ลายเซ็นดิจิทัลและใบรับรอง: จำเป็นต้องมี SHA-256 และรวมกับอัลกอริทึมแบบอสมมาตร เช่น RSA หรือ ECDSA ลายเซ็นพิสูจน์ว่าแฮชไม่ได้รับการแก้ไขหลังจากการลงนาม ประการที่ห้า การขจัดไฟล์ที่ซ้ำซ้อนที่ผู้ใช้อัปโหลด: จำเป็นต้องมี SHA-256 เนื่องจากผู้ใช้สามารถจงใจอัปโหลดไฟล์ที่ออกแบบมาเพื่อขัดแย้งกับไฟล์ที่มีอยู่ในแฮชที่ไม่เข้ารหัส หากการขจัดข้อมูลซ้ำซ้อนขึ้นอยู่กับ xxHash ผู้โจมตีสามารถอัปโหลดไฟล์ที่มีแฮชเดียวกันกับไฟล์อื่น แต่มีเนื้อหาต่างกัน ทำให้ระบบละทิ้งการอัปโหลดอย่างไม่ถูกต้อง
ตัวอย่างการทำงาน — จับคู่ห้าสถานการณ์ (เฟรมเครือข่าย, แฮชแมป, การตรวจสอบการดาวน์โหลด, ลายเซ็น, การขจัดข้อมูลซ้ำซ้อนของการอัปโหลดของผู้ใช้) เข้ากับกลุ่มที่เหมาะสม
ค่าใช้จ่ายในการเลือกแฮชที่เข้ารหัสสำหรับทุกกรณีการใช้งานคือค่าใช้จ่ายด้านประสิทธิภาพ SHA-256 ช้ากว่า CRC และช้ากว่า xxHash ในฮอตลูป ซึ่งเป็นโค้ดชิ้นหนึ่งที่ดำเนินการหลายล้านครั้งต่อวินาที ค่าใช้จ่ายดังกล่าวจะสังเกตเห็นได้ชัดเจน ในขั้นตอนการตั้งค่าหรือในการดำเนินการแบบแบตช์ จะไม่มีนัยสำคัญใดๆ กรอบการตัดสินใจคือ ฝ่ายตรงข้ามมีแรงจูงใจที่จะทำให้เกิดการชนกันหรือไม่? หากใช่ ให้ใช้ SHA-256 ถ้าไม่ และหากความเร็วเป็นสิ่งสำคัญ ให้ใช้แฮชที่เร็วกว่า หากความปลอดภัยสำคัญกว่าความเร็ว ให้ใช้ SHA-256 โดยไม่คำนึงถึง
ข้อผิดพลาดทั่วไปคือการใช้ MD5 ซึ่งเป็นแฮชการเข้ารหัสแบบเก่าที่ตอนนี้ใช้งานไม่ได้แล้ว MD5 ได้รับการออกแบบใน 1992 และการชนกันแสดงให้เห็นใน 2004 การใช้ MD5 เพื่อจุดประสงค์ด้านความปลอดภัยนั้นไม่ปลอดภัย บางครั้งพบเห็นได้ในระบบเดิมและในสถานการณ์ที่ให้ความสำคัญกับความเร็ว แต่ไม่มีสถานการณ์ใดที่ MD5 เป็นตัวเลือกที่เหมาะสมในปัจจุบัน: หากคุณต้องการความเร็ว ให้ใช้ xxHash; หากคุณต้องการความปลอดภัย ให้ใช้ SHA-256 ห้ามใช้ MD5
การแม็ปสถานการณ์จะยังคงรักษาคุณภาพไว้ เนื่องจากปริมาณงานและพฤติกรรมการชนกันจำเป็นต้องมีหลักฐานเฉพาะการใช้งาน
การแฮชรหัสผ่านเป็นหมวดหมู่ที่สี่ แตกต่างจากทั้งเช็คซัมและการแฮชการเข้ารหัสเพื่อวัตถุประสงค์ทั่วไป อย่าใช้ SHA-256 เพื่อแฮรหัสผ่าน ให้ใช้ฟังก์ชันการแฮชรหัสผ่านเช่น bcrypt, scrypt หรือ Argon2 แทน ซึ่งจงใจช้าและรวมเกลือไว้ด้วย แฮชการเข้ารหัสที่รวดเร็วเช่น SHA-256 ทำให้การเดารหัสผ่านถูก: ผู้โจมตีสามารถลองเดานับล้านครั้งต่อวินาที ฟังก์ชันการแฮชรหัสผ่านได้รับการออกแบบมาเพื่อทำให้การเดาแต่ละครั้งมีราคาแพงใน CPU และหน่วยความจำ ดังนั้นการเดารหัสผ่านที่รัดกุมยังคงใช้เวลานานเกินกว่าที่ผู้โจมตีจะรอได้ การแฮชรหัสผ่านเป็นกรณีการใช้งานพิเศษที่มีข้อกำหนดของตัวเอง
เครื่องคำนวณแฮช ToolAcre SHA ไม่รองรับการแฮชรหัสผ่าน และจงใจไม่ให้ MD5 ไม่มีพารามิเตอร์ที่กำหนดเอง และไม่มีแฮชแบบเร็ว เป็นเครื่องมือสำหรับการคำนวณมาตรฐาน SHA ย่อยสำหรับการตรวจสอบและการตรวจสอบความสมบูรณ์ ไม่ใช่สำหรับการตรวจสอบสิทธิ์หรือการจัดเก็บรหัสผ่าน
ประเด็นสำคัญ: ฝ่ายตรงข้ามหรือไม่มีศัตรู - เข้าถึงเครื่องคำนวณแฮช ToolAcre SHA เมื่อมีคนอาจยุ่งเกี่ยวกับข้อมูล
ตัวเลือกอัลกอริธึมแฮชคือการตัดสินใจขั้นพื้นฐานที่ส่งผลต่อทั้งประสิทธิภาพและความปลอดภัยทั่วทั้งระบบ การสรุปข้อมูลจะเชื่อถือได้พอๆ กับอัลกอริธึมที่สร้างข้อมูลนั้นเท่านั้น หากคุณเลือก CRC32 สำหรับการตรวจสอบไฟล์ ข้อมูลสรุปจะไม่มีการป้องกันการแก้ไขโดยเจตนา หากคุณเลือก SHA-256 สำหรับตารางแฮช คุณกำลังสิ้นเปลืองทรัพยากร การทราบคุณสมบัติและข้อด้อยของแต่ละหมวดหมู่ทำให้คุณสามารถเลือกได้อย่างถูกต้อง
เครื่องคำนวณแฮช ToolAcre SHA ให้ SHA-1 ถึง SHA-512 ซึ่งครอบคลุมแฮชที่เข้ารหัสลับที่สำคัญสำหรับกรณีการใช้งานส่วนใหญ่ โดยไม่ได้เสนอ CRC32, xxHash หรือ MD5 เนื่องจากแต่ละรายการเป็นตัวเลือกที่ถูกต้องในบริบทเฉพาะ (CRC สำหรับการตรวจจับข้อผิดพลาดในช่องทางที่เชื่อถือได้ xxHash สำหรับประสิทธิภาพในสภาพแวดล้อมที่มีการควบคุม ไม่มีสิ่งใดสำหรับ MD5) และการเสนอโดยไม่เน้นว่าจะใช้เมื่อใดจะกระตุ้นให้เกิดข้อผิดพลาด เครื่องคิดเลขนี้ใช้สำหรับการคำนวณการแยกย่อยการเข้ารหัสลับมาตรฐาน ใช้บรรทัดคำสั่งกับ `crc32`, `xxh64` หรือเครื่องมือที่เทียบเท่า หากคุณต้องการแฮชเหล่านั้น สำหรับการตรวจสอบการดาวน์โหลด ลายนิ้วมือของใบรับรอง การคอมมิตคอมไพล์ และกรณีการใช้งานที่คล้ายกันซึ่งผู้ไม่หวังดีอาจยุ่งเกี่ยวกับข้อมูล ให้เข้าถึง SHA-256 ผ่านเครื่องคำนวณแฮช ToolAcre SHA