เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ · SHA เครื่องคำนวณแฮช
ทำไมคุณต้องไม่จัดเก็บรหัสผ่านแบบธรรมดา SHA-256 แฮช
· เหตุใดจึงสำคัญ
รหัสผ่าน ความปลอดภัย การเข้ารหัส
SHA-256 ได้รับการออกแบบมาให้รวดเร็ว ซึ่งเป็นสิ่งที่คุณไม่ต้องการสำหรับรหัสผ่าน โพสต์นี้จะอธิบายว่าทำไมความเร็วถึงเป็นปัญหา และฟังก์ชันการแฮชรหัสผ่านทำอะไรแตกต่างออกไป
SHA-256 ไม่ใช่ที่เก็บข้อมูลรหัสผ่าน มันเป็นการแฮชอย่างรวดเร็ว Plain SHA-256 ให้ความเร็วในการคาดเดาแก่ผู้โจมตีเท่ากัน ทำให้ไม่เหมาะสมแม้จะเป็นอัลกอริธึมที่แข็งแกร่งในการเข้ารหัสก็ตาม
นักพัฒนาซอฟต์แวร์ใช้ระบบการเข้าสู่ระบบและจัดเก็บรหัสผ่านเป็นแฮช SHA-256 อัลกอริธึมมีการเข้ารหัสที่แข็งแกร่ง และแอปพลิเคชันไม่มีการใช้เกลือ ทำให้โค้ดเรียบง่าย เมื่อผู้ใช้เข้าสู่ระบบ แอปพลิเคชันจะแฮชการส่งและเปรียบเทียบกับค่าที่เก็บไว้ การออกแบบนี้มีความหรูหราในความเรียบง่าย และไม่เหมาะสำหรับการจัดเก็บรหัสผ่านโดยสิ้นเชิง นี่ไม่ใช่ข้อกังวลทางทฤษฎี มันเป็นข้อผิดพลาดร้ายแรงเพียงครั้งเดียวในระบบการตรวจสอบความถูกต้อง การออกแบบนี้ดูป้องกันได้จนกว่าคุณจะพิจารณาว่าผู้โจมตีสามารถทำอะไรกับข้อมูลที่ถูกขโมยได้
ข้อบกพร่องไม่ใช่ว่า SHA-256 อ่อนแอ SHA-256 เป็นอัลกอริธึมการเข้ารหัสที่มีประสิทธิภาพ ได้รับความไว้วางใจจากชุมชนความปลอดภัย และใช้ทั่วทั้งอุตสาหกรรมเพื่อตรวจสอบความสมบูรณ์และการจัดการเนื้อหา ข้อบกพร่องคือ SHA-256 ทำงานเร็ว และความรวดเร็วเป็นสิ่งที่ตรงกันข้ามกับรหัสผ่านที่ต้องการ แฮชรหัสผ่านไม่ได้เป็นเพียงการเข้ารหัสแบบดั้งเดิมเท่านั้น มันเป็นเครื่องมือประเภทเฉพาะที่ออกแบบมาสำหรับปัญหาเฉพาะ: ป้องกันการคาดเดา ความเร็วเป็นคุณลักษณะหนึ่งในเช็คซัม ในรหัสผ่านถือเป็นหายนะ
รวดเร็วคือจุดสำคัญของ SHA-256 — การตรวจสอบความสมบูรณ์ต้องใช้ความเร็ว และผู้โจมตีจะได้ความเร็วเท่ากันในการคาดเดา
เมื่อฐานข้อมูลแฮชรหัสผ่าน SHA-256 ถูกบุกรุก ผู้โจมตีไม่จำเป็นต้องย้อนกลับแฮช ผู้โจมตีสร้างพจนานุกรม: รหัสผ่านทั่วไป เช่น "รหัสผ่าน" "123456" "สวัสดี" และอีกมากมาย ผู้สมัครแต่ละคนจะถูกแฮชด้วย SHA-256 ซึ่งเป็นการดำเนินการที่ไม่สำคัญในการคำนวณ และตรวจสอบกับฐานข้อมูลที่ถูกขโมย ผู้โจมตีสามารถคำนวณค่า SHA-256 ผู้สมัครด้วยค่าพื้นฐานที่รวดเร็วแบบเดียวกับที่ใช้โดยบริการเข้าสู่ระบบ จากนั้นเปรียบเทียบผลลัพธ์แต่ละรายการแบบออฟไลน์โดยไม่มีขีดจำกัดอัตรา อัตราที่แน่นอนขึ้นอยู่กับฮาร์ดแวร์และการใช้งาน ดังนั้นบทความนี้จงใจไม่ทำการคาดเดาต่อวินาทีหรือเวลาละเมิด
ความเร็วคือปัญหาทั้งหมด SHA-256 มีไว้เพื่อความรวดเร็ว นั่นคือจุดประสงค์การออกแบบ ช่วยให้คุณยืนยันการตรวจสอบการดาวน์โหลด คำนวณที่อยู่เนื้อหา และสร้างแผนผัง Merkle โดยไม่ต้องรอ ในแอปพลิเคชันเหล่านั้น ความเร็วถือเป็นคุณสมบัติหนึ่ง สำหรับรหัสผ่าน ความเร็วคือหายนะ เมื่อฐานข้อมูลรหัสผ่านถูกขโมยและแฮชด้วย SHA-256 ผู้โจมตีจะมีความเร็วในการคาดเดาเท่ากับเซิร์ฟเวอร์ที่ถูกต้องในการตรวจสอบ ความสมมาตรนั้นคือสิ่งที่ทำลายความปลอดภัยของรหัสผ่าน เซิร์ฟเวอร์และผู้โจมตีที่ถูกต้องตามกฎหมายจะได้รับประโยชน์จากการสรุปวัตถุประสงค์ทั่วไปที่รวดเร็ว มีเพียงผู้โจมตีเท่านั้นที่สามารถทำซ้ำแบบออฟไลน์ได้โดยไม่ต้องมีการควบคุมการเข้าสู่ระบบของแอปพลิเคชัน
พจนานุกรมและตารางสีรุ้ง - การคำนวณล่วงหน้ากับแฮชที่ไม่ใส่เกลือ และสิ่งที่เกลือเปลี่ยนแปลง
นี่คือจุดที่พจนานุกรมที่คำนวณไว้ล่วงหน้าสามารถใช้งานได้จริง ผู้โจมตีสามารถใช้เวลาทั้งวันและคำนวณ SHA-256 แฮชสำหรับรหัสผ่านที่พบบ่อยที่สุดนับพันรายการ สำหรับรูปแบบทั่วไป เช่น Name1990 หรือสำหรับพจนานุกรมทั้งหมดในหลายภาษา ตารางผลลัพธ์เรียกว่าตารางสายรุ้ง การค้นหาแฮช SHA-256 ที่ถูกขโมยไปเทียบกับตารางที่คำนวณไว้ล่วงหน้าจะทำได้ทันที แม้ว่าจะไม่มีตารางที่คำนวณไว้ล่วงหน้า แต่การคำนวณการเดานับพันล้านครั้งก็เป็นเรื่องเล็กน้อยด้วย GPU-accelerated hashing ค่าใช้จ่ายในการคำนวณสำหรับผู้โจมตีต่ำมากจนแม้แต่รหัสผ่านที่ไม่รัดกุมก็ใช้เวลาเพียงไม่กี่นาที
เครื่องคำนวณแฮช ToolAcre SHA แสดงให้เห็นถึงความเร็วนี้โดยตรง วางข้อความสั้นๆ คลิกปุ่ม SHA-256 และผลลัพธ์จะเกิดขึ้นทันที ผลลัพธ์ทันที—คุณสมบัติที่คุณชื่นชมในเครื่องคำนวณแฮช—คือคุณสมบัติที่ทำให้ SHA-256 แบบธรรมดาไม่สามารถป้องกันรหัสผ่านได้ ผู้โจมตีจะได้รับผลทันทีเหมือนกันทุกครั้งที่เดา สำหรับการตรวจสอบความถูกต้องและการตรวจสอบความสมบูรณ์ ความเร็วนั้นสมบูรณ์แบบ สำหรับรหัสผ่าน เป็นอันตรายต่อความปลอดภัย
ฟังก์ชั่นการแฮชรหัสผ่านใดที่เพิ่มเข้ามา — ปัจจัยการทำงาน ความแข็งของหน่วยความจำ และเกลือต่อผู้ใช้ใน bcrypt, scrypt, Argon2 และ PBKDF2
Salt คือค่าสุ่มที่เพิ่มลงในรหัสผ่านก่อนแฮช ดังนั้น Salt ของผู้ใช้แต่ละคนจึงแตกต่างกัน แม้ว่าผู้ใช้สองคนจะมีรหัสผ่านเดียวกัน แต่พวกเขาก็แฮชค่าที่ต่างกัน สิ่งนี้จะทำลายตารางสายรุ้งที่คำนวณไว้ล่วงหน้า ผู้โจมตีจะต้องคำนวณตารางแยกกันสำหรับเกลือแต่ละชนิด ด้วยเกลือต่อผู้ใช้ที่สร้างขึ้นโดยอิสระ ตารางที่คำนวณล่วงหน้าหนึ่งตารางจะไม่นำไปใช้กับทุกบัญชีอีกต่อไป อย่างไรก็ตาม เกลือจะผลักผู้โจมตีให้คำนวณตารางระหว่างการโจมตีแทนการล่วงหน้า หากการแฮชยังคงรวดเร็ว ผู้โจมตีเพียงคำนวณตารางเพิ่มเติมแบบขนานและคาดเดาแต่ละบัญชีต่อไปด้วยวิธีดั้งเดิมที่รวดเร็ว เกลือเป็นสิ่งจำเป็นแต่ไม่เพียงพอ ป้องกันการใช้พจนานุกรมซ้ำกับเหยื่อ แต่ไม่ทำให้การดำเนินการหลักของผู้โจมตีช้าลง นั่นก็คือการเดา ความเร็วของการแฮชยังคงเป็นความเร็วของการคาดเดา
ตัวอย่างการทำงาน - ความเร็วของ SHA-256 ของรหัสผ่านทั่วไปที่ได้รับการยอมรับเมื่อเทียบกับแฮชของรหัสผ่านที่ปรับแล้ว ซึ่งอธิบายในเชิงคุณภาพ
ฟังก์ชันการแฮชรหัสผ่านใช้แนวทางที่แตกต่างออกไป Bcrypt, scrypt, Argon2id และ PBKDF2 สร้างขึ้นโดยมีจุดประสงค์เพื่อการตรวจสอบรหัสผ่าน ทั้งหมดนี้มีปัจจัยการทำงาน: พารามิเตอร์ที่ทำให้การแฮชมีราคาแพงโดยเจตนา Argon2 นั้นทันสมัยที่สุด จะปรับทั้ง CPU เวลาและการใช้หน่วยความจำ Bcrypt ใช้ปัจจัยต้นทุนที่ปรับได้ซึ่งเพิ่มงานเป็นสองเท่าโดยเพิ่มขึ้นแต่ละครั้ง ทั้งหมดนี้มีการสร้างเกลือในตัว เครื่องมือเหล่านี้ได้รับการออกแบบโดยคำนึงถึงโมเดลของผู้โจมตี ปัจจัยการทำงานเป็นสิ่งสำคัญ
ฟังก์ชันการแฮชรหัสผ่านทำให้ต้นทุนที่กำหนดค่าไว้เป็นส่วนหนึ่งของการตรวจสอบทุกครั้ง ผู้โจมตีที่ต้องการทดสอบผู้สมัครจะต้องจ่ายค่าใช้จ่ายนั้นสำหรับการทายทุกครั้ง ไม่สามารถคัดลอกการกำหนดเวลาที่ชัดเจนได้อย่างปลอดภัยระหว่างการใช้งาน ซึ่งเป็นเหตุผลว่าทำไมส่วนพารามิเตอร์จึงต้องมีการเปรียบเทียบประสิทธิภาพในระดับการผลิตจริงของฮาร์ดแวร์ ความไม่สมดุลนั้นคือสิ่งที่ทำให้การแฮชรหัสผ่านทำงานได้ ปัจจัยการทำงานเปลี่ยนจาก "ความได้เปรียบของผู้โจมตี" เป็น "ความได้เปรียบของกองหลัง"
การย้ายตาราง SHA-256 แบบเดิม — รวมแฮชที่มีอยู่และทำแฮชใหม่ในการเข้าสู่ระบบครั้งถัดไป
การเปรียบเทียบการทำงานยังคงมีคุณภาพเนื่องจากพื้นที่เก็บข้อมูลนี้ไม่มีเกณฑ์มาตรฐานสำหรับฟังก์ชันรหัสผ่านหรือผู้โจมตีโดยเฉพาะ รหัสผ่านทั่วไปจะสร้าง SHA-256 ธรรมดาเหมือนกันทันทีทุกครั้ง ดังนั้นรายการพจนานุกรมที่มีอยู่จึงสามารถระบุได้ด้วยความเท่าเทียมกัน บันทึกรหัสผ่านที่ได้รับการปรับแต่งจะมีพารามิเตอร์เกลือและต้นทุนของตัวเอง และต้องมีงานที่กำหนดค่าไว้สำหรับผู้สมัครแต่ละคน
ความแตกต่างดังกล่าวทำให้เกิดข้อผิดพลาดในการออกแบบโดยไม่ต้องคาดเดาต่อวินาที ฮาร์ดแวร์ การใช้งาน และพารามิเตอร์ที่เลือกจะกำหนดเวลา ข้อสรุปที่ป้องกันได้นั้นไม่เปลี่ยนแปลง: การสรุปวัตถุประสงค์ทั่วไปไม่มีปัจจัยการทำงานหรือต้นทุนหน่วยความจำที่ปรับได้ ในขณะที่ฟังก์ชันการแฮชรหัสผ่านถูกเลือกมาโดยเฉพาะเพื่อกำหนดต้นทุนเหล่านั้น
สิ่งนี้ไม่ครอบคลุม — การเลือกพารามิเตอร์สำหรับแฮชรหัสผ่านเฉพาะ ซึ่งขึ้นอยู่กับฮาร์ดแวร์และรูปแบบภัยคุกคามของคุณ
การเลือกพารามิเตอร์จงใจอยู่นอกเครื่องคิดเลขนี้และบทความนี้ การตั้งค่าที่ถูกต้องขึ้นอยู่กับงบประมาณเวลาในการตอบสนองของเซิร์ฟเวอร์ หน่วยความจำที่มีอยู่ การทำงานพร้อมกัน และโมเดลภัยคุกคามในปัจจุบัน ดังนั้นการคัดลอกค่าคงที่จากการปรับใช้ที่ไม่เกี่ยวข้องจะเปลี่ยนการควบคุมความปลอดภัยให้กลายเป็นนิทานพื้นบ้าน เปรียบเทียบฟังก์ชันรหัสผ่านที่เลือกบนฮาร์ดแวร์ระดับการผลิต และกลับมาตรวจสอบอีกครั้งเมื่อความจุเปลี่ยนแปลง
ToolAcre ไม่สามารถดำเนินการแบบฝึกหัดนั้นได้: แผงของมันยอมรับข้อความและตัวระบุ SHA จากนั้นจะส่งกลับข้อมูลสรุปธรรมดา ไม่เปิดเผยฟิลด์เกลือ การตั้งค่าหน่วยความจำ การควบคุมการวนซ้ำ หรือรูปแบบบันทึกรหัสผ่าน การไม่มีนั้นเป็นสัญญาณขอบเขตที่มีประโยชน์ ไม่ใช่ฟีเจอร์ที่ขาดหายไปในการหลีกเลี่ยงโดยการแฮชรหัสผ่านซ้ำๆ ในกล่องข้อความ
สิ่งสำคัญ: ผลลัพธ์ทันทีคือคำเตือน — เครื่องคำนวณแฮช ToolAcre SHA แสดงให้เห็นว่า SHA-256 นั้นเร็วแค่ไหน ซึ่งเป็นเหตุผลว่าทำไมจึงต้องไม่เก็บรหัสผ่านของผู้ใช้ของคุณ
ระบบเดิมที่เก็บรหัสผ่านเป็นแบบธรรมดา SHA-256 สามารถย้ายไปข้างหน้าได้โดยไม่ต้องให้ผู้ใช้ทุกคนรีเซ็ตทันที เทคนิคคือการ "ห่อ" แฮชเก่า: นำค่า SHA-256 แล้วแฮชอีกครั้งด้วย Argon2 ในการเข้าสู่ระบบครั้งถัดไปของผู้ใช้ ระบบจะตรวจสอบว่า SHA-256 เก่าตรงกันหรือไม่ หากเป็นเช่นนั้น ระบบจะคำนวณ Argon2 มากกว่าผลลัพธ์นั้นและจัดเก็บเวอร์ชันที่รวมไว้ ครั้งถัดไปที่ผู้ใช้เข้าสู่ระบบ ระบบจะตรวจสอบกับ Argon2 โดยตรง การย้ายข้อมูลเกิดขึ้นอย่างโปร่งใสระหว่างขั้นตอนการเข้าสู่ระบบปกติ
วิธีการแบบครอบคลุมนี้ช่วยให้แน่ใจว่ารหัสผ่านเก่าที่ถูกบุกรุกได้รับการปกป้องโดยปัจจัยการทำงาน ผู้โจมตีที่มีฐานข้อมูลเก่า SHA-256 แฮชไม่สามารถถอดรหัสได้อีกต่อไป พวกเขาจะต้องโจมตีเวอร์ชันที่ห่อไว้ ซึ่งรวมถึงค่าใช้จ่ายของ Argon2 ด้วย การย้ายข้อมูลเกิดขึ้นอย่างโปร่งใสกับผู้ใช้ระหว่างขั้นตอนการเข้าสู่ระบบตามปกติ การเข้าสู่ระบบแต่ละครั้งจะสร้างโอกาสในการเสริมความแข็งแกร่งของแฮชโดยไม่รบกวนประสบการณ์ผู้ใช้ การเลือกปัจจัยการทำงานที่ถูกต้องขึ้นอยู่กับฮาร์ดแวร์และรูปแบบภัยคุกคามของคุณ ค่าเริ่มต้นของ Argon2 นั้นสมเหตุสมผล: 19 วนซ้ำ, 512 MB หน่วยความจำ และ 1 ความขนานสำหรับบริการเว็บ