Salt ในแฮชรหัสผ่าน Linux คืออะไร และเหตุใดจึงสำคัญ?

การปรับปรุงครั้งล่าสุด: 04/12/2025
ผู้แต่ง: ไอแซก
  • เกลือคือสตริงสุ่มที่ถูกเพิ่มลงในรหัสผ่านก่อนแฮชเพื่อให้ได้ค่าแฮชที่ไม่ซ้ำกันต่อผู้ใช้แต่ละคน
  • ลินุกซ์ มันจัดเก็บแฮช ซอลต์ และอัลกอริทึมใน /etc/shadow เพื่อเพิ่มความปลอดภัยต่อการโจมตีแบบพจนานุกรมและตารางเรนโบว์
  • แนวทางปฏิบัติที่ดีต้องใช้เกลือที่ยาว สุ่ม และไม่ซ้ำกัน รวมถึงอัลกอริทึมแฮชที่แข็งแกร่งและ ฐานข้อมูล ได้รับการปกป้องอย่างดี
  • การใส่รหัสผ่านแบบซอลต์ควรจะรวมไว้ในนโยบายความปลอดภัยที่กว้างขึ้น ซึ่งรวมถึงรหัสผ่านที่แข็งแกร่ง MFA และตัวจัดการรหัสผ่าน

เกลือในแฮชรหัสผ่านใน Linux

หากคุณทำงานกับระบบ GNU/Linux หรือเพียงแค่กังวลเกี่ยวกับความปลอดภัยของบัญชีของคุณ คุณอาจเคยได้ยินเกี่ยวกับเรื่องนี้ เกลือในแฮชรหัสผ่านเป็นแนวคิดหนึ่งที่ถูกกล่าวถึงบ่อยครั้ง แต่บ่อยครั้งที่เข้าใจเพียงครึ่งเดียว ฟังดูเหมือนเป็นเรื่องเทคนิค แต่ในความเป็นจริงแล้ว มันสร้างความแตกต่างระหว่างระบบที่ง่ายต่อการถอดรหัสกับระบบที่ต้านทานการโจมตีได้มากกว่ามาก

สรุปแล้วเกลือเป็น องค์ประกอบสำคัญในการทำให้แฮชรหัสผ่านไม่สามารถคาดเดาได้ระบบทำงานโดยการเพิ่มข้อมูลแบบสุ่มก่อนใช้อัลกอริทึมแฮช เพื่อให้แม้ว่าผู้ใช้สองคนจะมีรหัสผ่านเดียวกัน ผลลัพธ์ที่เก็บไว้ในฐานข้อมูลก็จะแตกต่างกัน จากนั้น การใช้งานเฉพาะใน Linux ความสัมพันธ์กับ /etc/shadow เครื่องมืออย่าง mkpasswd และแนวปฏิบัติด้านความปลอดภัยที่ดีที่สุดในปัจจุบัน ล้วนเป็นโลกทั้งใบในตัวของมันเอง ซึ่งเราจะมาเจาะลึกกันในรายละเอียด

เกลือในแฮชรหัสผ่านคืออะไรกันแน่?

คำจำกัดความของเกลือในแฮชรหัสผ่าน

ในการเข้ารหัส เกลือ (เกลือ) คือ สตริงอักขระแบบสุ่ม ซึ่งจะถูกผนวกเข้ากับรหัสผ่านของผู้ใช้ก่อนใช้ฟังก์ชันแฮช เป้าหมายคือเพื่อให้แฮชที่ได้ไม่ซ้ำกัน แม้ว่ารหัสผ่านแบบข้อความธรรมดาจะเหมือนกันสำหรับผู้ใช้หลายคนก็ตาม

เมื่อผู้ใช้สร้างหรือเปลี่ยนรหัสผ่าน ระบบจะสร้าง เกลือแบบสุ่มโดยจะรวมเข้ากับรหัสผ่าน (ก่อน หลัง หรือในรูปแบบเฉพาะ ขึ้นอยู่กับรูปแบบ) และใช้อัลกอริทึมแฮชกับชุดค่าผสมนั้น เช่น SHA-256 o SHA-512รหัสผ่านไม่ได้ถูกเก็บไว้ในฐานข้อมูลแต่เป็น แฮชของ (รหัสผ่าน + เกลือ)และในโครงการส่วนใหญ่ เกลือยังถูกเก็บไว้พร้อมกับแฮชด้วย

เทคนิคนี้ทำให้หลายๆ เทคนิคการโจมตีที่อิงตามแฮชที่คำนวณไว้ล่วงหน้าเช่น ตารางสายรุ้ง และทำให้การโจมตีแบบพจนานุกรมและบรูทฟอร์ซในวงกว้างมีความซับซ้อนมากขึ้น ผู้โจมตีไม่สามารถใช้ประโยชน์จากข้อเท็จจริงที่ว่าผู้ใช้หลายคนใช้รหัสผ่านร่วมกันได้อีกต่อไป เพราะแต่ละคนจะมีแฮชที่แตกต่างกัน

สิ่งสำคัญคือต้องเข้าใจว่าเกลือไม่ใช่ความลับในตัวเอง: ไม่ใช่รหัสผ่านหรือคีย์ส่วนตัวหน้าที่ของมันคือการเพิ่มความสุ่มและความไม่ซ้ำกันในกระบวนการแฮช ความปลอดภัยยังคงขึ้นอยู่กับการใช้งาน รหัสผ่านที่คาดเดายาก y อัลกอริทึมแฮชที่เหมาะสมโดยออกแบบมาโดยเฉพาะสำหรับรหัสผ่าน (เช่น bcrypt, scrypt, Argon2) แม้ว่าระบบ Linux คลาสสิกหลายระบบจะใช้ SHA-256 หรือ SHA-512 ก็ตาม

วิธีการทำงานของการใส่รหัสผ่านแบบทีละขั้นตอน

การใส่เกลือรหัสผ่านทำงานอย่างไร

กระบวนการเกลือสามารถสรุปได้เป็นขั้นตอนที่ค่อนข้างง่าย แต่ด้วย ส่งผลกระทบต่อความปลอดภัยอย่างมาก:

  วิธีตรวจจับกระบวนการที่เป็นอันตรายด้วย Process Explorer และ VirusTotal

ประการแรก เมื่อผู้ใช้ลงทะเบียนหรือเปลี่ยนรหัสผ่าน ระบบจะสร้าง เกลือที่มีเอกลักษณ์และสุ่ม สำหรับข้อมูลประจำตัวนั้น เกลือนั้นมักจะมีความยาวเพียงพอ (เช่น 16 ไบต์หรือมากกว่า) และได้มาจากตัวสร้างตัวเลขสุ่มที่ปลอดภัยทางการเข้ารหัส

จากนั้นรหัสผ่านที่ผู้ใช้เลือกจะถูกรวมกับเกลือเพื่อสร้างเป็น โซ่กลางการผสมผสานนี้อาจทำได้ง่ายๆ เพียงแค่เชื่อมต่อ salt กับรหัสผ่าน หรืออาจมีรูปแบบที่ซับซ้อนกว่าที่กำหนดโดยรูปแบบแฮช สิ่งสำคัญคือผู้ใช้แต่ละคนจะได้การผสมผสานที่แตกต่างกัน

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

ในที่สุดเมื่อผู้ใช้เข้าสู่ระบบ ระบบจะดึงรหัสผ่านที่ป้อนเข้ามาอีกครั้ง เกลือที่เกี่ยวข้อง จากฐานข้อมูล ระบบจะทำซ้ำกระบวนการรวมและแฮชแบบเดียวกัน และเปรียบเทียบผลลัพธ์กับแฮชที่เก็บไว้ หากตรงกัน ระบบจะรู้ว่ารหัสผ่านถูกต้องโดยไม่จำเป็นต้องรู้ข้อความธรรมดา

กลไกนี้ช่วยให้มั่นใจได้ว่าแม้ว่าฐานข้อมูลจะรั่วไหล ผู้โจมตีจะเห็นเพียง แฮชแต่ละอันมีเกลือของตัวเองการหยุดการโจมตีไม่ใช่สิ่งมหัศจรรย์ แต่จะทำให้ต้องใช้การประมวลผลเพิ่มมากขึ้นอย่างมีนัยสำคัญ แทนที่จะใช้ชุดแฮชที่เปรียบเทียบได้

ข้อดีของการใช้เกลือในการแฮชรหัสผ่าน

ข้อดีของการใช้เกลือในรหัสผ่าน

เหตุผลหลักในการใช้เกลือคือ เสริมสร้างความปลอดภัยให้กับรหัสผ่านที่จัดเก็บไว้ ต่อต้านการโจมตีที่หลากหลาย แต่ควรอธิบายรายละเอียดเกี่ยวกับประโยชน์เฉพาะเจาะจงด้วย

ประการแรกการใส่เกลือช่วยให้ ความต้านทานต่อการโจมตีด้วยพจนานุกรมหากไม่ใช้ Salt ผู้โจมตีสามารถเตรียมรายการรหัสผ่านทั่วไปและค่าแฮชจำนวนมาก แล้วนำไปเปรียบเทียบกับฐานข้อมูลที่ถูกขโมยได้อย่างง่ายดาย เมื่อใช้ Salt เฉพาะสำหรับแต่ละผู้ใช้ ค่าแฮชที่คำนวณไว้ล่วงหน้าเหล่านี้จะไร้ประโยชน์ เพราะรหัสผ่านและ Salt แต่ละชุดจะสร้างค่าที่แตกต่างกัน

ประการที่สอง การใช้เกลือจะทำลายประสิทธิภาพของ โต๊ะสายรุ้งนี่เป็นเพียงฐานข้อมูลแฮชที่คำนวณไว้ล่วงหน้าสำหรับรหัสผ่านยอดนิยม เพื่อเร่งการกู้คืนข้อมูล อีกครั้ง เนื่องจากผลลัพธ์ขึ้นอยู่กับค่า salt เฉพาะ ตารางเหล่านี้ที่ออกแบบมาสำหรับแฮชแบบ unsalt จึงไร้ประโยชน์ หรืออย่างน้อยที่สุดก็ไม่มีประสิทธิภาพอย่างมาก

ข้อดีที่ชัดเจนอีกประการหนึ่งคือมันช่วยปรับปรุง ความเป็นส่วนตัวในกรณีที่เกิดการรั่วไหลแม้ว่าผู้บุกรุกจะสามารถเข้าถึงตารางผู้ใช้ด้วยแฮชและซอลต์ได้ พวกเขาก็จะไม่สามารถระบุได้อย่างรวดเร็วว่าใครมีรหัสผ่านเดียวกันกับผู้อื่น หรือสามารถโจมตีแบบกลุ่มได้อย่างง่ายดาย แต่ละบัญชีจำเป็นต้องได้รับการดูแลเป็นรายบุคคล ซึ่งมักจะไม่สามารถทำได้ในทางปฏิบัติในวงกว้าง

  แจ้งเตือนการหลอกลวง WhatsApp ใหม่: Bizum และวิดีโอคอลเพื่อขโมยบัญชีและเงิน

นอกจากนี้การใส่เกลือยังเพิ่มความซับซ้อนให้กับ การโจมตีด้วยกำลังดุร้ายแทนที่จะสามารถทดสอบรหัสผ่านที่สมัครกับแฮชทั้งหมดได้ในคราวเดียว ผู้โจมตีกลับถูกบังคับให้พิจารณาค่า Salt ของผู้ใช้แต่ละคน ซึ่งเพิ่มภาระงานทั้งหมด หากใช้อัลกอริทึมแฮชที่ช้าและกำหนดค่าพารามิเตอร์ได้ (เช่น bcrypt หรือ Argon2) ต้นทุนการโจมตีก็จะยิ่งเพิ่มขึ้นไปอีก

สุดท้ายนี้ การใส่เกลือเป็นเทคนิคที่ปรับให้เข้ากับวิวัฒนาการทางเทคโนโลยีได้เป็นอย่างดี แม้ว่าอุปกรณ์คอมพิวเตอร์จะพัฒนาขึ้นและมีการโจมตีใหม่ๆ เกิดขึ้น การผสมผสานระหว่างแฮชที่แข็งแกร่งและเกลือที่เป็นเอกลักษณ์ มันรักษาระดับความยากที่สูงและปรับขนาดได้: คุณสามารถเพิ่มความยาวของเกลือ, เสริมความแข็งแกร่งให้กับอัลกอริทึม, เพิ่มต้นทุนการคำนวณ ฯลฯ

Linux นำการใส่รหัสผ่านแบบ Salting มาใช้อย่างไร (/etc/shadow)

ในระบบ Linux และ *NIX เวอร์ชันอื่นๆ รหัสผ่านผู้ใช้จะไม่ถูกเก็บไว้ใน /etc/passwd แต่จะถูกเก็บไว้ในไฟล์ / etc / shadowไฟล์นี้เข้าถึงได้เฉพาะผู้ใช้ระดับสูงเท่านั้น โดยจะจัดเก็บแฮชรหัสผ่านพร้อมกับข้อมูลเพิ่มเติม และเป็นที่ที่สามารถใช้ salt และอัลกอริทึมแฮชได้อย่างชัดเจน

บรรทัดใน /etc/shadow มีโครงสร้างคล้ายกับ:

ผู้ใช้:$id$sal$hash:additional_fields…

สัญลักษณ์ $ แยกส่วนต่างๆ ออก ส่วนแรกหลังชื่อผู้ใช้ระบุ ประเภทของอัลกอริทึม ใช้ ตัวอย่างเช่น $ 1 $ โดยทั่วไปจะแสดงถึง MD5 $ 5 $ SHA-256 และ $ 6 $ SHA-512 เป็นอัลกอริทึมที่พบได้บ่อยที่สุดในระบบการแจกจ่ายสมัยใหม่ เนื่องจากมีความปลอดภัยมากกว่ารูปแบบเก่าๆ ที่ใช้ DES หรือ MD5

หลังจากตัวระบุอัลกอริทึมปรากฏขึ้น พะยอมแล้วก็ แฮชที่เกิดขึ้นทั้งหมดนี้อยู่ในฟิลด์เดียวกัน เมื่อตรวจสอบรหัสผ่านแล้ว ระบบจะอ่านรหัสประจำตัวนั้น ซึ่งก็คือ salt แล้วใช้อัลกอริทึมที่สอดคล้องกับรหัสผ่านที่ป้อน และเปรียบเทียบค่าแฮชที่คำนวณได้กับค่าแฮชที่เก็บไว้

หากคุณต้องการตรวจสอบอย่างรวดเร็วว่าผู้ใช้รายใดมีรหัสผ่านที่เข้ารหัสและมีการใช้อัลกอริทึมใด คุณสามารถใช้คำสั่งเช่น grep '\$' /etc/shadowในบริบทนี้ เครื่องหมายดอลลาร์ ($) ถูกใช้เพื่อระบุตำแหน่งบรรทัดที่มีแฮชในรูปแบบปัจจุบัน ต้องใช้แบ็กสแลชเพื่อซ่อนสัญลักษณ์นี้ เนื่องจากในนิพจน์ทั่วไป สัญลักษณ์นี้หมายถึง "สิ้นสุดบรรทัด"

บัญชีที่ไม่มีรหัสผ่านหรือบัญชีที่ถูกล็อกโดยปกติจะแสดงค่าเช่นนี้ในฟิลด์นั้น ! o * แทนที่จะใช้แฮชกับดอลลาร์ ซึ่งระบุว่าไม่สามารถยืนยันตัวตนโดยใช้รหัสผ่านมาตรฐานได้ โครงสร้างนี้ทำให้สิ่งหนึ่งชัดเจนขึ้น: Linux ได้รวมการใส่เกลือไว้ในรูปแบบของ การเก็บรักษา รหัสผ่าน โดยกำเนิด

ความแตกต่างระหว่างการแฮชรหัสผ่านและการใส่เกลือ

สิ่งสำคัญคือต้องแยกแยะความแตกต่างระหว่างสองแนวคิดที่บางครั้งสับสนกันอย่างชัดเจน: hashing y เกลือการแฮชรหัสผ่านคือกระบวนการที่รหัสผ่านถูกแปลงเป็นค่าที่ไม่สามารถจดจำได้โดยใช้อัลกอริทึมแบบทางเดียว เซิร์ฟเวอร์ไม่จำเป็นต้องทราบรหัสผ่านเดิม เพียงแต่ต้องตรวจสอบว่าผู้ใช้ทราบรหัสผ่านที่ถูกต้องหรือไม่ เพราะระบบจะสร้างแฮชแบบเดียวกัน

  WINUX คืออะไร: Linux ที่มีจิตวิญญาณอิสระและมีรูปลักษณ์และความรู้สึกแบบ Windows

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

การใส่เกลือเข้ามาเพื่อแก้ไขจุดอ่อนนั้นโดยเฉพาะ: มันเกี่ยวกับ เพิ่มข้อมูลสุ่มลงในรหัสผ่าน ก่อนที่จะแฮช ผลลัพธ์ก็คือ แม้ว่าผู้ใช้สองคนจะเลือก "casa" เป็นรหัสผ่าน แต่ค่าแฮชในฐานข้อมูลก็จะแตกต่างกันอย่างสิ้นเชิง เพราะผู้ใช้คนหนึ่งจะมี "casa+7Ko#" และอีกคนจะมี "casa8p?M" เป็นสตริงก่อนแฮช

ดังนั้น การแฮชและการใส่เกลือจึงไม่แข่งขันกัน แต่กลับเสริมซึ่งกันและกัน การแฮชให้ คุณสมบัติทิศทางเดียว และความสะดวกในการตรวจสอบ เกลือให้ ความเป็นเอกลักษณ์และความยืดหยุ่นต่อการโจมตีครั้งใหญ่การใช้งานการจัดเก็บรหัสผ่านที่ปลอดภัยจะรวมเทคนิคทั้งสองเข้าด้วยกัน โดยควรใช้อัลกอริทึมที่ออกแบบมาเพื่อจุดประสงค์นี้โดยเฉพาะ โดยมีต้นทุนที่สามารถกำหนดค่าได้

การใช้ salt ใน Linux ด้วย mkpasswd

ในสภาพแวดล้อม GNU/Linux และระบบอื่น ๆ ยูนิกซ์วิธีปฏิบัติที่เป็นประโยชน์อย่างยิ่งในการทดลองการใส่เกลือคือเครื่องมือ mkpasswdคำสั่งนี้ใช้เพื่อสร้าง รหัสผ่านที่เข้ารหัส อย่างปลอดภัย และโดยทั่วไปจะรวมเข้าในกระบวนการสร้างผู้ใช้ สคริปต์การดูแลระบบ ฯลฯ

รูปแบบพื้นฐานของ mkpasswd ช่วยให้คุณระบุรหัสผ่านที่จะเข้ารหัสและชุดตัวเลือก เช่น ประเภทของอัลกอริทึม (เช่น des, md5, sha-256, sha-512) โดยใช้ตัวเลือก -mในระบบสมัยใหม่ สิ่งที่ควรทำคือเลือก SHA-512 อย่างน้อยที่สุด หรือด้วยโครงการที่แข็งแกร่งยิ่งขึ้น หากการกระจายรองรับ

ตัวเลือกที่น่าสนใจโดยเฉพาะอย่างยิ่งในบริบทของการใส่เกลือคือ -Sซึ่งช่วยให้ เติมเกลือ รหัสผ่านก่อนทำการเข้ารหัส หากไม่ได้ระบุด้วยตนเอง mkpasswd อาจสร้าง เกลือสุ่มในแต่ละการดำเนินการดังนั้นแม้จะใช้รหัสผ่านในการเข้าสู่ระบบเดียวกัน แฮชที่ได้ก็จะแตกต่างกันในแต่ละครั้ง

สามารถตรวจสอบได้ง่ายๆ: หากคุณเข้ารหัส "password123" หลายครั้งด้วย mkpasswd โดยใช้ SHA-512 และ salt แบบสุ่ม คุณจะได้ค่าแฮชที่แตกต่างกันโดยสิ้นเชิง อย่างไรก็ตาม หากคุณส่งค่า salt เดียวกันโดยใช้ -S ค่าแฮชจะเหมือนกันเสมอ เนื่องจากค่ารหัสผ่านและ salt จะไม่เปลี่ยนแปลง

ด้วยเครื่องมือนี้มันง่ายมาก เตรียมรหัสผ่านที่เข้ารหัสด้วยเกลือ เพื่อเพิ่มไฟล์การกำหนดค่า จัดการผู้ใช้ด้วยตนเอง หรือทดสอบพฤติกรรมการซอลต์โดยไม่ต้องเขียนโปรแกรมอะไรเลย

สุขอนามัยดิจิทัลคืออะไร?
บทความที่เกี่ยวข้อง:
สุขอนามัยดิจิทัล: ความปลอดภัย ความเป็นอยู่ที่ดี และความเป็นระเบียบในชีวิตออนไลน์ของคุณ