แฮช/การเข้ารหัส

Argon2 Hash + Verify

แฮชรหัสผ่านด้วย Argon2 (ผู้ชนะ Password Hashing Competition, RFC 9106) — รองรับ d/i/id พร้อมตรวจสอบกับแฮชที่มีอยู่


                    

Argon2 is the Password Hashing Competition winner and the algorithm recommended in RFC 9106 for hashing passwords. Unlike bcrypt, it deliberately demands a lot of memory, not just CPU time, which makes attacks on specialized hardware (GPUs, ASICs) much harder.

How to use it

Common uses

Things to keep in mind

The memory parameter is Argon2's main defense: the more memory hashing requires, the more expensive it is for an attacker to parallelize an attack on a GPU with limited fast memory per chip.

Argon2id is recommended for most cases: Argon2i resists side-channel attacks better, Argon2d resists GPU attacks better, and id combines both approaches.

บทความเกี่ยวกับเครื่องมือนี้: Argon2: เหตุใดอัลกอริทึมนี้จึงชนะการแข่งขันแฮชรหัสผ่าน

คำถามที่พบบ่อย

ทำไม Argon2 ถึงได้รับการแนะนำมากกว่าแฮชรุ่นเก่าอย่าง MD5 หรือ SHA-256 สำหรับรหัสผ่าน?

Argon2 ถูกออกแบบให้ช้าและใช้หน่วยความจำมากโดยตั้งใจ ทำให้การบรูทฟอร์สและการเจาะด้วย GPU/ASIC มีต้นทุนสูงขึ้นมาก ต่างจากแฮชอเนกประสงค์ที่เร็วอย่าง MD5 หรือ SHA-256 ซึ่งไม่เหมาะกับการเก็บรหัสผ่าน

พารามิเตอร์หน่วยความจำ จำนวนรอบ และความขนานควบคุมอะไร?

ต้นทุนหน่วยความจำกำหนดว่าแต่ละครั้งที่ลองแฮชต้องใช้ RAM เท่าไร จำนวนรอบกำหนดว่าจะรันกี่รอบ และความขนานกำหนดจำนวนเธรด การเพิ่มค่าใดค่าหนึ่งจะเพิ่มต้นทุนการเจาะแต่ทำให้แฮชช้าลง

ควรใช้ Argon2 แบบไหน — d, i หรือ id?

Argon2id เป็นค่าเริ่มต้นที่แนะนำสำหรับแฮชรหัสผ่าน เพราะรวมความทนทานต่อการโจมตีแบบ side-channel ของ Argon2i เข้ากับความทนทานต่อการเจาะด้วย GPU ของ Argon2d

Argon2 กลายเป็นมาตรฐานได้อย่างไร?

Argon2 ชนะการแข่งขัน Password Hashing Competition ในปี 2015 ซึ่งเป็นการแข่งขันเปิดของนักวิทยาการรหัสลับที่มีเป้าหมายเพื่อค้นหาอัลกอริทึมที่ดีที่สุดสำหรับการแฮชรหัสผ่าน นับแต่นั้นมา OWASP จึงแนะนำให้เป็นตัวเลือกอันดับแรกเหนือ bcrypt

พารามิเตอร์ความขนานเร่งเฉพาะการแฮชเท่านั้นหรือไม่?

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

บทความ: แฮช/การเข้ารหัส

Hash Generator: MD5, SHA-1 และ SHA-256 ต่างกันอย่างไร

เหตุใด MD5 จึงยังใช้ตรวจสอบความถูกต้องของไฟล์ แต่ไม่ใช้กับรหัสผ่าน

Checksum Verifier: วิธีตรวจสอบว่าไฟล์ไม่เสียหาย

เหตุใด checksum ที่ตรงกันจึงยืนยันความถูกต้องของไฟล์ แต่ไม่ยืนยันว่าใครเป็นผู้สร้าง

HMAC: แฮชที่มีคีย์ต่างจากแฮชธรรมดาอย่างไร

เหตุใด SHA-256 ธรรมดาจึงไม่ป้องกันการปลอมแปลงข้อความ แต่ HMAC ป้องกันได้

Bcrypt: เหตุใดรหัสผ่านจึงถูกแฮชอย่างช้า ๆ ไม่ใช่เร็ว

เหตุใด SHA-256 ที่เร็วจึงเป็นตัวเลือกที่แย่สำหรับรหัสผ่าน และ bcrypt ที่ช้าจึงเป็นตัวเลือกที่ถูกต้อง

UUID: ตัวระบุที่แทบไม่เคยซ้ำกันถูกสร้างขึ้นอย่างไร

เหตุใด UUID v4 จึงสามารถสร้างแยกกันได้บนเครื่องนับล้านเครื่องโดยไม่มีความเสี่ยงชนกัน

Password Generator: อะไรที่ทำให้รหัสผ่านแข็งแกร่งจริง ๆ

เหตุใดรหัสผ่านยาวที่ประกอบจากคำในพจนานุกรมจึงแข็งแกร่งกว่ารหัสผ่านสั้นที่มีสัญลักษณ์และตัวเลข

AES: การเข้ารหัสแบบสมมาตรทำงานอย่างไร

เหตุใดคีย์เดียวกันจึงเข้ารหัสและถอดรหัสข้อมูลใน AES และสิ่งนี้ต่างจากการเข้ารหัสแบบอสมมาตรอย่างไร

Scrypt: เหตุใดอัลกอริทึมนี้จึงต้องการหน่วยความจำมากขนาดนั้น

เหตุใด scrypt จึงต้องการหน่วยความจำมากโดยตั้งใจเพื่อให้การเดารหัสบนอุปกรณ์ ASIC ยากขึ้น

TOTP: รหัสใช้ครั้งเดียวในแอปยืนยันตัวตนทำงานอย่างไร

เหตุใดรหัสใน Google Authenticator จึงทำงานได้โดยไม่มีอินเทอร์เน็ตและซิงค์กับเซิร์ฟเวอร์ผ่านเวลาเท่านั้น

PBKDF2: มาตรฐานการยืดคีย์ที่เก่าแก่ที่สุด

เหตุใดจำนวนรอบการวนซ้ำที่แนะนำสำหรับ PBKDF2 จึงเพิ่มขึ้นทุกปี

X.509: ภายในใบรับรอง SSL มีอะไรบ้าง

เบราว์เซอร์ตรวจสอบอะไรในใบรับรองของเว็บไซต์ก่อนแสดงกุญแจสีเขียว

PGP: การเข้ารหัสด้วยกุญแจสาธารณะและกุญแจส่วนตัวทำงานอย่างไร

เหตุใดจึงสามารถแชร์กุญแจสาธารณะ PGP ได้อย่างอิสระ แต่ห้ามแชร์กุญแจส่วนตัวเด็ดขาด