ไทย

เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ · SHA เครื่องคำนวณแฮช

SHA-256 กับ SHA-512: ขนาดคำ การปัดเศษ และสาเหตุที่ทำให้ 512 เร็วขึ้นได้

· มันทำงานอย่างไร

sha-256 การเข้ารหัส ผลงาน เบราว์เซอร์-apis

การเปรียบเทียบแบบเคียงข้างกันของคำ 32-บิต และ 64-บิต, 64 กับ 80 รอบ และ 256, 384 และ 512 บิตเอาท์พุต
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

SHA-512 สร้างการแยกย่อยที่ยาวขึ้น แต่มักจะทำงานเร็วกว่าบนฮาร์ดแวร์ 64 บิต โพสต์นี้จะอธิบายความแตกต่างทางโครงสร้างระหว่างทั้งสองและวิธีที่ SHA-384 เข้ากันได้ เพื่อให้คุณสามารถเลือกข้อเท็จจริงได้

แฮชยาวขึ้นวิ่งเร็วขึ้นเหรอ? — การสังเกตสวนทางสัญชาตญาณที่เริ่มต้นการเปรียบเทียบ

SHA-512 สร้างการแยกย่อยที่ยาวกว่าแต่มักจะทำงานเร็วกว่า SHA-256 บนฮาร์ดแวร์ 64 บิต การสังเกตแบบขัดกับสัญชาตญาณมาจากการออกแบบ CPU: โปรเซสเซอร์ที่ได้รับการปรับให้เหมาะสมสำหรับเลขคณิต 64-บิต จะดำเนินการ 64-บิต ได้เร็วกว่าการดำเนินการ 32-บิต บนข้อมูลเดียวกัน SHA-256 ทำงานกับ 32 บิตคำ ในขณะที่ SHA-512 ทำงานกับ 64 บิตคำ บน 64-บิต CPU ส่วนหลังจะเหมาะกับฮาร์ดแวร์มากขึ้นและใช้เวลาน้อยลงในการแปลงขนาดคำและการเติมช่องว่าง

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

32-บิต กับ 64-บิต — ความแตกต่างทางโครงสร้างหลักและเหตุใดจึงเหมาะกับ CPU สมัยใหม่

SHA-256 ทำงานบนคำ 32 บิตตลอดอัลกอริทึม กำหนดการข้อความจะขยายคำ 16 32-บิต เป็น 64 32-คำบิต แต่ละรอบจะอัปเดตตัวแปรการทำงาน 32 บิต 8 ตัว บล็อกข้อความคือ 512 bits (สิบหกคำ 32 บิต) ผลลัพธ์คือ 256 bits (แปดคำ 32 บิต) เลขคณิตทั้งหมดเสร็จสิ้นบนค่า 32-บิต โดยมีการตัดคำล้นที่ 2^32

SHA-512 ทำงานบนคำ 64 บิต กำหนดการข้อความจะขยายคำ 16 64 บิตเป็น 80 64 บิตคำ (ไม่ใช่ 64 เช่นเดียวกับใน SHA-256) แต่ละรอบจะอัปเดตตัวแปรการทำงาน 64 บิตแปดตัว บล็อกข้อความคือ 1024 bits (สิบหกคำ 64 บิต) ผลลัพธ์คือ 512 bits (แปดคำ 64 บิต) เลขคณิตทั้งหมดเสร็จสิ้นบนค่า 64-บิต โดยมีการตัดคำล้นที่ 2^64

64 ปัดเศษกับ 80, 512-บิต เทียบกับ 1024-บิต บล็อก - สิ่งที่เปลี่ยนแปลงต่อบล็อกและต่อไบต์

SHA-256 วิ่ง 64 รอบต่อบล็อก; SHA-512 วิ่ง 80 รอบต่อบล็อก ซึ่งหมายความว่า SHA-512 จะผสมต่อบล็อกมากขึ้น เมื่อมองแวบแรกจะฟังดูช้าลง แต่ขนาดคำที่ใหญ่กว่าและขนาดบล็อกหมายถึง SHA-512 ประมวลผลบิตมากขึ้นต่อรอบ สำหรับไฟล์ 1-เมกะไบต์ SHA-256 ประมวลผล 1048576 / 512 = 2048 บล็อก แต่ละบล็อกมี 64 รอบ รวมเป็น 131072 รอบ SHA-512 ประมวลผล 1048576 / 1024 = 1024 บล็อก แต่ละบล็อกมี 80 รอบ รวมเป็น 81920 รอบ SHA-512 มีจำนวนรอบรวมน้อยลง แม้ว่าจะทำได้มากกว่าต่อบล็อกก็ตาม

ความแตกต่างของเวลานาฬิกาแขวนขึ้นอยู่กับการเพิ่มประสิทธิภาพขนาดคำของ CPU CPU ที่มี 64-บิต ALU (หน่วยทางคณิตศาสตร์-ลอจิก) จะดำเนินการ 64-บิตอย่างมีประสิทธิภาพ หาก CPU เดียวกันต้องแยกย่อยการดำเนินการ 32-บิต SHA-256 ออกเป็นการดำเนินการย่อยหลายรายการ หรือเรียกใช้การดำเนินการบนหน่วยการดำเนินการที่เล็กกว่า ต้นทุนต่อการดำเนินการจะสูงขึ้น โปรเซสเซอร์สมัยใหม่ปรับให้เหมาะสมสำหรับการดำเนินการ 64 บิต ทำให้ SHA-512 มักจะเร็วขึ้นแม้จะมีรอบเพิ่มเติมต่อบล็อกก็ตาม

ขนาดบล็อกและจำนวนรอบอธิบายงานต่อไบต์ ปริมาณงานจริงจำเป็นต้องมีเกณฑ์มาตรฐานของแพลตฟอร์ม

เลขคณิตแบบบล็อกอธิบายว่าเหตุใดเอาต์พุตที่ยาวกว่าจึงไม่จำเป็นต้องหมายถึงงานต่อไบต์ที่มากขึ้น SHA-256 ดำเนินการหกสิบสี่รอบสำหรับทุก ๆ บล็อก 512-บิต ในขณะที่ SHA-512 ดำเนินการแปดสิบรอบสำหรับทุก ๆ บล็อก 1,024-บิต การออกแบบที่สองดำเนินการรอบมากขึ้นในแต่ละบล็อก แต่ใช้อินพุตเป็นสองเท่าทุกครั้งที่ประมวลผลหนึ่งบล็อก

การเปรียบเทียบโครงสร้างนั้นไม่ได้ทำนายเกณฑ์มาตรฐานของเบราว์เซอร์โดยเฉพาะ Web Crypto อาจใช้คำสั่งดั้งเดิม ไลบรารีระบบปฏิบัติการ หรือโค้ดที่ได้รับการปรับปรุงอื่นๆ และความยาวของอินพุตจะเปลี่ยนส่วนแบ่งที่ใช้ในการตั้งค่า วัดสภาพแวดล้อมเป้าหมายจริงเมื่อปริมาณงานมีความสำคัญ พื้นที่เก็บข้อมูลสนับสนุนเฉพาะการกล่าวอ้างเชิงคุณภาพว่าคำที่กว้างกว่านั้นเหมาะสมกับฮาร์ดแวร์ 64-บิต

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

SHA-384 ไม่ใช่อัลกอริธึมที่แยกจากกัน มันคือ SHA-512 โดยมีการเปลี่ยนแปลงสองประการ: ค่าคงที่แฮชเริ่มต้นจะแตกต่างกัน และเอาต์พุตจะถูกตัดทอนเป็น 384 bits (48 bytes) แทนที่จะเป็นแบบเต็ม 512 bits การตัดทอนนี้มีประโยชน์ต่อการโจมตีแบบขยายความยาว: ผู้โจมตีไม่สามารถขยายการแยกย่อยโดยการผนวกข้อมูลเข้ากับข้อความต้นฉบับ เนื่องจากไม่ทราบสถานะ 512-บิตเต็ม (มีเพียง 384 bits เท่านั้นที่ถูกเปิดเผย)

SHA-256 เสี่ยงต่อการโจมตีด้วยการขยายความยาว: หากคุณทราบส่วนย่อยของข้อความและทราบความยาวของข้อความ คุณสามารถผนวกข้อมูลเข้ากับข้อความและคำนวณส่วนย่อยของข้อความที่ขยายโดยไม่ทราบเนื้อหาของข้อความต้นฉบับ สิ่งนี้มีความสำคัญในบริบทด้านความปลอดภัยที่เฉพาะเจาะจง เช่น การใช้งาน HMAC ที่ใช้โครงสร้างที่ไม่มีประสิทธิภาพ SHA-384 แม้ว่าจะขึ้นอยู่กับ SHA-512 แต่ก็ไม่มีช่องโหว่เนื่องจากไม่มีการเปิดเผยสถานะทั้งหมด สิ่งนี้ทำให้ SHA-384 มีประโยชน์ในบริบทที่ SHA-256 ถือว่ามีความเสี่ยง

ตัวอย่างการทำงาน — แฮชอินพุตเดียวกับทั้งสามและเปรียบเทียบความยาวการแยกย่อยแบบเคียงข้างกัน

ขนาดเอาต์พุตคือความแตกต่างที่ตรงไปตรงมาที่สุด SHA-256 สร้าง 32 bytes (64 อักขระฐานสิบหก); SHA-384 สร้าง 48 bytes (96 อักขระฐานสิบหก); SHA-512 สร้าง 64 bytes (128 อักขระฐานสิบหก) สำหรับการจัดเก็บใน URL หรือ JSON การสรุปที่ยาวจะใช้พื้นที่มากขึ้น สำหรับการต้านทานการชนกัน เอาต์พุตที่ยาวขึ้นจะทำให้การค้นหาการชนนั้นยากขึ้นแบบทวีคูณ เอาท์พุตที่กว้างขึ้นจะให้พื้นที่ผลลัพธ์ที่ใหญ่ขึ้น ในขณะที่ผลลัพธ์ที่เกิดขึ้นทันทีนั้นวัดได้ง่ายกว่า: มีไบต์ในพื้นที่จัดเก็บข้อมูล URL และฟิลด์โปรโตคอลมากขึ้น บทความนี้ไม่ได้แนบการประเมินการทำงานของการโจมตี เนื่องจากไม่มีสิ่งใดที่ได้มาจากหลักฐานที่เก็บข้อมูล

ระบบและมาตรฐานบางระบบระบุ SHA-256 อย่างชัดเจน คนอื่นใช้ SHA-512 หรืออนุญาตให้เลือก SSH ลายนิ้วมือเริ่มต้นที่ SHA-256; การสรุปอิมเมจคอนเทนเนอร์อาจเป็น SHA-256 หรือ SHA-512 ผู้จัดการแพ็คเกจเช่น npm ใช้ SHA-512 เพื่อความสมบูรณ์ของทรัพยากรย่อย บ่อยครั้งตัวเลือกนี้ถูกสร้างขึ้นมาเพื่อคุณ แต่การทำความเข้าใจความแตกต่างจะช่วยให้คุณเลือกอย่างชาญฉลาดเมื่อคุณมีสิทธิ์ตัดสินใจ

สิ่งนี้ไม่ครอบคลุมถึง - ตัวเลขปริมาณงานซึ่งขึ้นอยู่กับ CPU คอมไพเลอร์และขนาดอินพุต โพสต์ยังคงมีคุณภาพ

เครื่องคำนวณแฮช ToolAcre SHA มี SHA-256, SHA-384 และ SHA-512 แฮชอินพุตเดียวกันกับทั้งสามและสังเกตความยาวของเอาต์พุต ข้อมูลสรุปทั้งหมดจะแตกต่างกันโดยสิ้นเชิงซึ่งคาดว่าจะเกิดขึ้น: อัลกอริธึมใช้ค่าคงที่การปัดเศษที่แตกต่างกัน ตารางข้อความที่แตกต่างกัน และการดำเนินการผสมที่แตกต่างกัน จำนวนไบต์ที่แสดงข้างไดเจสต์สะท้อนเฉพาะขนาดอินพุต ไม่ใช่ขนาดเอาต์พุต อัลกอริธึมทั้งสามจะประมวลผลไบต์อินพุตเดียวกันเหมือนกันตลอดลำดับการปัดเศษตามลำดับ

การทดสอบบนฮาร์ดแวร์ของคุณเองจะเผยให้เห็นถึงความแตกต่างด้านประสิทธิภาพ แฮชไฟล์ขนาดใหญ่ (กรณีทดสอบหลายเมกะไบต์) กับแต่ละอัลกอริทึมและกำหนดเวลาผลลัพธ์ ในระบบ 64 บิตสมัยใหม่ SHA-512 มักจะเสร็จสิ้นภายในเวลานาฬิกาแขวนที่น้อยกว่า แม้ว่าจำนวนไบต์อาจแนะนำเป็นอย่างอื่นก็ตาม บนระบบ 32 บิตหรือตัวประมวลผลแบบฝัง SHA-256 อาจเร็วกว่าเนื่องจาก CPU ของ ALU ได้รับการปรับให้เหมาะสมสำหรับการดำเนินการ 32 บิต

ประเด็นสำคัญ: เลือกตามขนาดเอาต์พุตและแพลตฟอร์ม — เครื่องคำนวณแฮช ToolAcre SHA มี SHA-256, SHA-384 และ SHA-512 เพื่อให้คุณสามารถเห็นทั้งสามรายการในอินพุตเดียวกัน

ความแรงของการเข้ารหัสแยกจากประสิทธิภาพ ที่เก็บไม่ได้ทำเครื่องหมาย SHA-256 ว่าใช้งานไม่ได้ และเลือกให้เป็นค่าเริ่มต้นสำหรับวัตถุประสงค์ทั่วไป หลักฐานผลิตภัณฑ์ดังกล่าวไม่ได้สนับสนุนการเรียกผลิตภัณฑ์ดั้งเดิมใดๆ ว่ามีความปลอดภัยในระดับสากล ความเหมาะสมยังขึ้นอยู่กับรูปแบบการก่อสร้างและภัยคุกคาม การเปลี่ยนจาก SHA-256 เป็น SHA-512 ไม่ใช่การอัพเกรดความปลอดภัย มันเป็นการแลกเปลี่ยนพื้นที่เก็บข้อมูลและประสิทธิภาพ หากระบบของคุณระบุ SHA-256 และคุณต้องการอัลกอริธึมที่แน่นอน ให้ใช้มัน หากคุณมีทางเลือกและต้องการสรุปให้ยาวขึ้น หรือคุณรู้ว่าแพลตฟอร์มของคุณคือ 64-บิต SHA-512 ก็เป็นตัวเลือกที่ถูกต้อง

การใช้งาน Web Crypto ของเบราว์เซอร์จะคำนวณทั้งสามผ่าน crypto.subtle.digest โหลดอุปกรณ์ เวอร์ชันเบราว์เซอร์ และระบบพื้นหลังของคุณทั้งหมดส่งผลต่อประสิทธิภาพการทำงานที่สังเกตได้ แต่ประเด็นสำคัญยังคงอยู่: SHA-256 และ SHA-512 ไม่ได้แข่งขันกันเพื่อชิงตำแหน่ง "ฟังก์ชันแฮชที่ดีที่สุด" เป็นเครื่องมือที่ออกแบบมาสำหรับความต้องการเอาต์พุตที่แตกต่างกัน และตัวเลือกระหว่างเครื่องมือเหล่านี้จะขึ้นอยู่กับสิ่งที่ระบบของคุณต้องการ ไม่ใช่ตามคำกล่าวอ้างด้านประสิทธิภาพโดยทั่วไป