การเข้ารหัสการบีบแตรการเติมเกลือ – ความแตกต่างคืออะไร

การเข้ารหัส, การแปลงแป้นพิมพ์, การเติมเกลือ - ความแตกต่างคืออะไร

การเข้ารหัสการแฮชและการเค็มเป็นเทคนิคที่เกี่ยวข้องทั้งหมด แต่แต่ละกระบวนการเหล่านี้มีคุณสมบัติที่ให้ยืมเพื่อวัตถุประสงค์ที่แตกต่างกัน.

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

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

การเติมเกลือเกี่ยวข้องกับการเพิ่มข้อมูลแบบสุ่มก่อนที่จะใส่ผ่านฟังก์ชั่นแฮชการเข้ารหัส. ส่วนใหญ่จะใช้เพื่อรักษารหัสผ่านที่ปลอดภัยระหว่างการจัดเก็บข้อมูล แต่ยังสามารถใช้กับข้อมูลประเภทอื่นได้.

การเข้ารหัสคืออะไร?

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

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

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

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

ดูสิ่งนี้ด้วย: อธิบายประเภทการเข้ารหัสทั่วไป

อัลกอริธึมการเข้ารหัสทั่วไป

  • เลขซีซาร์ นี่เป็นรหัสง่ายๆที่เกี่ยวข้องกับตัวอักษรแต่ละตัวที่ถูกย้ายไปตามจำนวนที่แน่นอน หากเลขศูนย์ของ Caesar มีการเปลี่ยนแปลงของสามทุก “a” จะกลายเป็น “d” ทุกคน “b” จะกลายเป็น “e” ทุก “c” จะกลายเป็น “f” และอื่น ๆ มันตั้งชื่อตาม Julius Caesar ซึ่งเป็นบุคคลแรกที่ถูกบันทึกไว้เพื่อใช้โครงการ.
  • AES – มาตรฐานการเข้ารหัสขั้นสูงเป็นอัลกอริทึมแบบสมมาตร – คีย์ที่ซับซ้อนซึ่งรักษาความปลอดภัยส่วนสำคัญของการสื่อสารสมัยใหม่ของเรา มันเกี่ยวข้องกับขั้นตอนที่ซับซ้อนจำนวนมากและมักจะใช้ในการเข้ารหัสข้อมูลใน TLS, แอพส่งข้อความ, พักผ่อนและในสถานการณ์อื่น ๆ เราดำดิ่งลึกลงไปในการเข้ารหัส AES ที่นี่.
  • 3DES – Triple DES ขึ้นอยู่กับอัลกอริทึม DES เมื่อเพิ่มพลังคอมพิวเตอร์ทำให้ DES ไม่ปลอดภัย 3DES ได้รับการพัฒนาเป็นอัลกอริธึมเสริม ใน 3DES ข้อมูลจะถูกเรียกใช้ผ่านอัลกอริทึม DES สามครั้งแทนที่จะเป็นเพียงครั้งเดียวซึ่งทำให้ยากที่จะถอดรหัส 3DES สามารถนำไปใช้กับสิ่งต่าง ๆ มากมายเช่นเดียวกับ AES แต่การใช้งานบางอย่างเท่านั้นที่ถือว่าปลอดภัย.
  • อาร์เอส – รหัส Rivest-Shamir-Adleman เป็นรูปแบบแรกของการเข้ารหัสคีย์สาธารณะที่ใช้กันอย่างแพร่หลาย ช่วยให้หน่วยงานสื่อสารอย่างปลอดภัยแม้ว่าจะไม่ได้พบหรือมีโอกาสแลกเปลี่ยนกุญแจ สามารถใช้ในโปรโตคอลความปลอดภัยที่แตกต่างกันจำนวนมากเช่น PGP และ TLS เรามีคำแนะนำเชิงลึกเกี่ยวกับการเข้ารหัส RSA ที่นี่.
  • ECDSA – อัลกอริทึมลายเซ็นดิจิตอล Elliptic Curve เป็นตัวแปรของ DSA ที่ใช้การเข้ารหัสแบบวงรีรูปไข่ ในฐานะที่เป็นอัลกอริธึมกุญแจสาธารณะมันสามารถนำไปใช้ในสถานการณ์ที่คล้ายกับ RSA ได้แม้ว่าจะมีการนำไปใช้น้อยกว่าทั่วไปเนื่องจากปัญหาด้านความปลอดภัยบางอย่าง.

การเข้ารหัสที่ใช้งานจริง

เพื่อให้ทราบถึงวิธีการทำงานของการเข้ารหัสเราจะใช้รหัสซีซาร์เป็นตัวอย่าง หากเราต้องการเข้ารหัสข้อความของ “ มากินกันเถอะ” ด้วยการเปลี่ยนสาม,“L“จะกลายเป็น”O”,“อี“จะกลายเป็น”ชั่วโมง” เป็นต้น สิ่งนี้ทำให้เราได้รับข้อความเข้ารหัสของ:

โอ้ว hdw

ในการถอดรหัสข้อความผู้รับจะต้องรู้ว่าอัลกอริธึมการเข้ารหัสนั้นเกี่ยวข้องกับการเปลี่ยนแปลงสามครั้งจากนั้นย้อนกลับแต่ละตัวอักษรด้วยตัวอักษรสามตัว หากเราต้องการเราสามารถเปลี่ยนรหัสโดยเลื่อนตัวอักษรแต่ละตัวด้วยตัวเลขที่แตกต่างกัน เราสามารถใช้อัลกอริทึมที่ซับซ้อนกว่านี้ได้อีก.

ตัวอย่างหนึ่งคือ AES ถ้าเราใช้เครื่องคิดเลขออนไลน์ AES 128 บิตเพื่อเข้ารหัส“มากินกันเถอะ” ด้วยคีย์ของ“1234” มันทำให้เรา:

FeiUVFnIpb9d0cbXP / Ybrw ==

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

สิ่งที่คร่ำครวญ?

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

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

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

ใช้แฮชทำอะไร?

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

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

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

ฟังก์ชันแฮชการเข้ารหัสทั่วไป

  • MD5 – นี่คือฟังก์ชันแฮชที่เผยแพร่ครั้งแรกในปี 1991 โดย Ron Rivest ตอนนี้ถือว่าไม่ปลอดภัยและไม่ควรใช้เพื่อวัตถุประสงค์ในการเข้ารหัส อย่างไรก็ตามเรื่องนี้ก็ยังสามารถใช้ในการตรวจสอบความสมบูรณ์ของข้อมูล.
  • SHA-1 – Secure Hash Algorithm 1 ใช้งานมาตั้งแต่ปี 1995 แต่ไม่ได้รับการพิจารณาว่าปลอดภัยตั้งแต่ปี 2005 เมื่อมีการโจมตีชนหลายครั้งที่ประสบความสำเร็จ ขอแนะนำให้ใช้งาน SHA-2 หรือ SHA-3 แทน.
  • SHA-2 – นี่คือตระกูลของฟังก์ชันแฮชที่ทำหน้าที่เป็นตัวตายตัวแทนของ SHA-1 ฟังก์ชั่นเหล่านี้มีการปรับปรุงมากมายซึ่งทำให้มีความปลอดภัยในแอพพลิเคชั่นที่หลากหลาย อย่างไรก็ตามเรื่องนี้ SHA-256 และ SHA-512 มีความเสี่ยงต่อการโจมตีแบบขยายความยาวดังนั้นจึงมีสถานการณ์บางอย่างที่ดีที่สุดที่จะใช้ SHA-3.
  • SHA-3 – SHA-3 เป็นสมาชิกใหม่ล่าสุดของตระกูล Secure Hash Algorithm แต่ถูกสร้างขึ้นค่อนข้างแตกต่างจากรุ่นก่อน ในขั้นตอนนี้ยังไม่ได้แทนที่ SHA-2 แต่ให้ตัวเลือกรหัสลับอีกตัวหนึ่งที่สามารถเพิ่มความปลอดภัยในสถานการณ์บางอย่าง.
  • RIPEMD – RIPEMD เป็นอีกกลุ่มของหน้าที่ที่ได้รับการพัฒนาโดยชุมชนวิชาการ มันขึ้นอยู่กับความคิดมากมายจาก MD4 (บรรพบุรุษของ MD5) และไม่ได้ถูก จำกัด โดยสิทธิบัตรใด ๆ RIPEMD-160 นั้นยังถือว่าปลอดภัย แต่ก็ไม่เห็นว่ามีการนำไปใช้อย่างแพร่หลาย.
  • น้ำวน – วังวนเป็นฟังก์ชันแฮชจากตระกูลตัวเลขบล็อกสี่เหลี่ยม มันขึ้นอยู่กับการดัดแปลงของ AES และไม่อยู่ภายใต้สิทธิบัตรใด ๆ มันถือว่าปลอดภัย แต่ค่อนข้างช้ากว่าทางเลือกอื่นซึ่งนำไปสู่การยอมรับอย่าง จำกัด.

ฟังก์ชันการแปลงแป้นพิมพ์ทำงานจริง

เมื่อคุณเข้าใจฟังก์ชันแฮชแล้วถึงเวลาที่ต้องนำไปปฏิบัติ ถ้าเราใส่ข้อความเดียวกันของ“มากินกันเถอะ” เป็นเครื่องคิดเลขออนไลน์ของ SHA-256 มันทำให้เรา:

5c79ab8b36c4c0f8566cee2c8e47135f2536d4f715a22c99fa099a04edbbb6f2

หากเราเปลี่ยนตัวละครแม้แต่ตัวเดียวในตำแหน่งเดียวมันจะเปลี่ยนแฮชทั้งหมดอย่างมาก พิมพ์ผิดเช่น“พบกันกิน” ให้ผลลัพธ์ที่แตกต่างอย่างสิ้นเชิง:

4be9316a71efc7c152f4856261efb3836d09f611726783bd1fef085bc81b1342

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

ฟังก์ชันแฮชและรหัสผ่าน

ฟังก์ชันแฮชมีการใช้งานทั่วไปอีกอย่างที่เรายังไม่ได้กล่าวถึง พวกเขายังเป็นองค์ประกอบสำคัญของ รักษารหัสผ่านของเราให้ปลอดภัยในระหว่างการจัดเก็บ.

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

บริษัท เช่น Facebook หรือ Google เก็บรหัสผ่านผู้ใช้หลายพันล้านรายการ หาก บริษัท เหล่านี้เก็บรหัสผ่านเป็นข้อความธรรมดาผู้โจมตีใด ๆ ที่สามารถทำงานในฐานข้อมูลรหัสผ่านจะสามารถเข้าถึงทุกบัญชีที่พบ.

นี่จะเป็นหายนะด้านความปลอดภัยที่ร้ายแรงทั้งสำหรับ บริษัท และผู้ใช้ หากทุกรหัสผ่านถูกเปิดเผยต่อผู้โจมตีบัญชีและข้อมูลผู้ใช้ทั้งหมดของพวกเขาจะอยู่ในอันตราย.

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

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

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

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

เกลือคืออะไร?

เกลือเป็นหลัก การเพิ่มข้อมูลสุ่มก่อนที่จะใส่ผ่านฟังก์ชันแฮช, และมักใช้กับรหัสผ่าน.

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

รหัสผ่านที่อ่อนแอ

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

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

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

ตารางสายรุ้งคล้ายกับตารางแฮชยกเว้นว่าจะใช้พื้นที่น้อยกว่าด้วยค่าใช้จ่ายในการคำนวณที่มากกว่า.

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

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

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

วิธีการทำงานของเกลือในทางปฏิบัติ

ตัวอย่างเช่นสมมติว่าคุณมีบัญชีอีเมลและรหัสผ่านของคุณคือ“1234” เมื่อเราใช้เครื่องคิดเลขออนไลน์ SHA-256 เราจะได้ค่าต่อไปนี้เป็นค่าแฮช:

03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4

แฮชนี้คือสิ่งที่จะถูกเก็บไว้ในฐานข้อมูลสำหรับบัญชีของคุณ เมื่อคุณป้อนรหัสผ่านของ“1234” มันถูกแฮชแล้วเปรียบเทียบค่ากับค่าที่เก็บไว้ เนื่องจากทั้งสองค่าเหมือนกันคุณจะได้รับสิทธิ์การเข้าถึง.

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

ตารางแฮชจะบอกพวกเขาว่า:

03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4

สอดคล้องกับ:

1234

ผู้โจมตีจะรู้ว่ารหัสผ่านของคุณคือ“1234” พวกเขาสามารถใช้รหัสผ่านนี้เพื่อเข้าสู่บัญชีของคุณ.

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

ลองสุ่มตัวอย่างเกลือ 16 ตัวอักษรของข้อมูล:

H82BV63KG9SBD93B

เราเพิ่มเข้าไปในรหัสผ่านง่าย ๆ ของ“1234” ชอบมาก:

1234H82BV63KG9SBD93B

เฉพาะตอนนี้ที่เราได้ใส่เกลือเราจะใช้ฟังก์ชั่นแฮชแบบเดียวกับที่เราทำมาก่อนซึ่งจะคืนค่า:

91147f7666dc80ab5902bde8b426aecdb1cbebf8603a58d79182b750c10f1303

แน่นอนว่าค่าแฮชนี้จะไม่ซับซ้อนหรือยาวกว่าค่าก่อนหน้านี้อีกต่อไป แต่นั่นไม่ใช่ประเด็น ในขณะที่พวกเขาทั้งสองมีความยาวเท่ากัน“1234H82BV63KG9SBD93B” เป็นรหัสผ่านทั่วไปที่น้อยกว่ามากดังนั้นจึงมีโอกาสน้อยที่แฮชจะถูกเก็บไว้ในตารางแฮช.

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

แฮ็คฐานข้อมูลทั้งหมด

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

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

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

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

ศักยภาพของจุดอ่อนของเกลือ

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

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

อัลกอริทึม salting ทั่วไป

เราไม่แนะนำให้ใช้ฟังก์ชั่นแฮชปกติในการจัดเก็บรหัสผ่าน แต่ฟังก์ชั่นจำนวนมากได้รับการออกแบบด้วยคุณสมบัติเฉพาะที่ช่วยเพิ่มความปลอดภัย เหล่านี้รวมถึง Argon2, scrypt, bcrypt และ PBKDF2.

Argon2

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

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

Scrypt

ออกเสียง“ESD crypt” นี่เป็นอัลกอริทึมการแฮชรหัสผ่านอายุน้อยที่สุดอันดับสองที่ใช้งานทั่วไป ออกแบบในปี 2009 scrypt ใช้หน่วยความจำขนาดใหญ่ แต่ปรับได้ในการคำนวณ ลักษณะที่ปรับได้ของมันหมายความว่ามันยังสามารถทนต่อการโจมตีได้แม้ในขณะที่พลังการประมวลผลเติบโตขึ้นตามกาลเวลา.

bcrypt

bcrypt ได้รับการพัฒนาในปี 1999 และมีพื้นฐานมาจากรหัส Blowfish มันเป็นหนึ่งในอัลกอริธึมที่ใช้บ่อยที่สุดในการแฮ็กรหัสผ่านเป็นเวลาหลายปี แต่ตอนนี้มีความเสี่ยงมากขึ้นต่ออาร์เรย์เกท (FPGA) นี่คือเหตุผลว่าทำไม Argon2 จึงเป็นที่ต้องการในการนำไปใช้ใหม่.

PKFD2

ฟังก์ชันการสืบทอดคีย์นี้ถูกพัฒนาขึ้นเพื่อแทนที่ PBKDF1 ซึ่งมีความยาวคีย์ที่สั้นกว่าและปลอดภัยน้อยกว่า แนวทางของ NIST ในปี 2560 ยังคงแนะนำ PKFD2 สำหรับการแฮ็ชรหัสผ่าน แต่ Argon2 เน้นเรื่องความปลอดภัยและอาจเป็นตัวเลือกที่ดีกว่าในหลาย ๆ สถานการณ์.

การเข้ารหัส, การแปลงแป้นพิมพ์และการปรับแต่ง: บทสรุป

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

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

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

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

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

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

เทคโนโลยี-1 โดย tec_estromberg ภายใต้ มอนส์ CC0

About the author