อัปเดต: โปรดทราบว่าฉันไม่ได้ถามว่าเกลือคืออะไรตารางสายรุ้งคืออะไรการโจมตีตามพจนานุกรมคืออะไรหรือวัตถุประสงค์ของเกลือคืออะไร ฉันกำลังสอบถาม: หากคุณรู้จักผู้ใช้เกลือและแฮชการคำนวณรหัสผ่านของพวกเขาไม่ใช่เรื่องง่ายหรือ?
ฉันเข้าใจกระบวนการและนำไปใช้ด้วยตนเองในบางโครงการของฉัน
s = random salt
storedPassword = sha1(password + s)
ในฐานข้อมูลที่คุณจัดเก็บ:
username | hashed_password | salt
การใช้เกลือทุกครั้งที่ฉันเห็นจะเพิ่มเกลือที่ส่วนท้ายของรหัสผ่านหรือจุดเริ่มต้น:
hashed_Password = sha1(s + password )
hashed_Password = sha1(password + s)
ดังนั้นการโจมตีด้วยพจนานุกรมจากแฮกเกอร์ที่คุ้มค่ากับเกลือของเขา (ฮ่าฮ่า) จะเรียกใช้คำหลักแต่ละคำเทียบกับเกลือที่เก็บไว้ในชุดค่าผสมทั่วไปที่ระบุไว้ข้างต้น
แน่นอนว่าการใช้งานที่อธิบายไว้ข้างต้นเป็นการเพิ่มขั้นตอนอื่นสำหรับแฮ็กเกอร์โดยไม่ได้แก้ปัญหาพื้นฐานจริงหรือ? มีทางเลือกใดบ้างในการแก้ไขปัญหานี้หรือฉันเข้าใจปัญหาผิด
สิ่งเดียวที่ฉันคิดได้คือมีอัลกอริธึมการผสมที่เป็นความลับซึ่งผูกเกลือและรหัสผ่านเข้าด้วยกันในรูปแบบสุ่มหรือเพิ่มช่องผู้ใช้อื่น ๆ ในกระบวนการแฮชซึ่งหมายความว่าแฮ็กเกอร์จะต้องเข้าถึงฐานข้อมูลและรหัสเพื่อทำการปัก สำหรับการโจมตีพจนานุกรมเพื่อพิสูจน์ว่ามีผล (อัปเดตตามที่ระบุไว้ในความคิดเห็นควรถือว่าแฮ็กเกอร์สามารถเข้าถึงข้อมูลทั้งหมดของคุณได้ดังนั้นจึงอาจไม่ดีที่สุด)
ให้ฉันยกตัวอย่างวิธีที่ฉันเสนอให้แฮ็กเกอร์แฮ็กฐานข้อมูลผู้ใช้ด้วยรายการรหัสผ่านและแฮช:
ข้อมูลจากฐานข้อมูลที่ถูกแฮ็กของเรา:
RawPassword (not stored) | Hashed | Salt
--------------------------------------------------------
letmein WEFLS... WEFOJFOFO...
พจนานุกรมรหัสผ่านทั่วไป:
Common Password
--------------
letmein
12345
...
สำหรับระเบียนผู้ใช้แต่ละรายการให้วนซ้ำรหัสผ่านทั่วไปและแฮช:
for each user in hacked_DB
salt = users_salt
hashed_pw = users_hashed_password
for each common_password
testhash = sha1(common_password + salt)
if testhash = hashed_pw then
//Match! Users password = common_password
//Lets visit the webpage and login now.
end if
next
next
ฉันหวังว่านี่จะอธิบายประเด็นของฉันได้ดีขึ้นมาก
ด้วยรหัสผ่านทั่วไป 10,000 รหัสและบันทึกผู้ใช้ 10,000 รายการเราจำเป็นต้องคำนวณ 100,000,000 แฮชเพื่อค้นหารหัสผ่านผู้ใช้ให้ได้มากที่สุด อาจใช้เวลาสองสามชั่วโมง แต่ก็ไม่ใช่ปัญหาจริงๆ
อัปเดตเกี่ยวกับ Cracking Theory
เราจะถือว่าเราเป็นเว็บโฮสต์ที่เสียหายซึ่งสามารถเข้าถึงฐานข้อมูลของแฮชและเกลือ SHA1 พร้อมกับอัลกอริทึมของคุณเพื่อผสมผสานเข้าด้วยกัน ฐานข้อมูลมีข้อมูลผู้ใช้ 10,000 รายการ
ไซต์นี้อ้างว่าสามารถคำนวณ 2,300,000,000 SHA1 แฮชต่อวินาทีโดยใช้ GPU (ในสถานการณ์จริงอาจจะช้าลง แต่สำหรับตอนนี้เราจะใช้รูปที่ยกมา)
(((95 ^ 4) / 2300000000) / 2) * 10000 = 177 วินาที
กำหนดอักขระ ASCII ที่พิมพ์ได้เต็มช่วง 95 ตัวโดยมีความยาวสูงสุด 4 อักขระหารด้วยอัตราการคำนวณ (ตัวแปร) หารด้วย 2 (สมมติว่าเวลาเฉลี่ยในการค้นหารหัสผ่านโดยเฉลี่ยจะต้องใช้การเรียงสับเปลี่ยน 50%) เป็นเวลา 10,000 ผู้ใช้จะใช้เวลา 177 วินาทีในการคำนวณรหัสผ่านของผู้ใช้ทั้งหมดที่มีความยาว <= 4
มาปรับกันเล็กน้อยเพื่อความสมจริง
(((36 ^ 7) / 1000000000) / 2) * 10000 = 2 วัน
สมมติว่าไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่โดยมีความยาวรหัสผ่าน <= 7 อักขระที่เป็นตัวเลขและตัวอักษรเท่านั้นจะใช้เวลา 4 วันในการแก้ปัญหาสำหรับข้อมูลผู้ใช้ 10,000 รายการและฉันได้ลดความเร็วของอัลกอริทึมลงครึ่งหนึ่งเพื่อสะท้อนถึงค่าใช้จ่ายและสถานการณ์ที่ไม่เหมาะสม
สิ่งสำคัญคือต้องตระหนักว่านี่เป็นการโจมตีด้วยกำลังเดรัจฉานเชิงเส้นการคำนวณทั้งหมดเป็นอิสระจากกันจึงเป็นงานที่สมบูรณ์แบบสำหรับระบบต่างๆในการแก้ปัญหา (IE ง่ายต่อการตั้งค่าคอมพิวเตอร์ 2 เครื่องที่รันการโจมตีจากปลายที่แตกต่างกันซึ่งจะใช้เวลาในการประหารชีวิตเพียงครึ่งเดียว)
ในกรณีของการแฮชรหัสผ่านซ้ำ ๆ 1,000 ครั้งเพื่อให้งานนี้มีราคาแพงในการคำนวณมากขึ้น:
(((36 ^ 7) / 10000000000) / 2) * 1000 วินาที = 10.8839117 ชั่วโมง
นี้แสดงให้เห็นความยาวสูงสุด 7 ตัวอักษรตัวเลขที่น้อยกว่าครึ่งหนึ่งของการดำเนินการความเร็วจากตัวเลขที่ยกมาสำหรับผู้ใช้คนหนึ่ง
การแฮชซ้ำ 1,000 ครั้งบล็อกการโจมตีแบบครอบคลุมได้อย่างมีประสิทธิภาพ แต่การโจมตีแบบกำหนดเป้าหมายบนข้อมูลผู้ใช้ยังคงมีช่องโหว่