ตามความเข้าใจของฉัน การได้มาของคีย์คือการที่คุณใช้ข้อมูลบางอย่าง พูดรหัสผ่าน และใช้ฟังก์ชันเพื่อแปลงเป็นตัวเลขที่สามารถใช้เป็นคีย์ลับในการเข้ารหัสแบบวงรี (elliptic curve cryptography)
ใช่ สิ่งนี้ถูกต้อง อย่างไรก็ตาม โปรดทราบว่ารหัสผ่านของคุณควรมีความรัดกุมที่ดีพอที่จะป้องกันการดุร้าย วิธีทั่วไปคือการใช้ ลูกเต๋า หรือ Bip39 เช่นเดียวกับกลไกรหัสผ่าน ดูใน xkc936.
เมื่อคุณได้รับคีย์ $k$นี่คือรหัสส่วนตัวของคุณและ $[k]G$ เป็นรหัสสาธารณะของคุณใน ECC พร้อมจุดฐาน $G$ ของเส้นโค้ง ลบ $k$ หลังจากใช้แล้วอย่าเก็บไว้ในหน่วยความจำและรักษารหัสผ่านของคุณให้ปลอดภัย!
Argon2 ใช้เกลือแบบสุ่มเมื่อทำการแฮช ซึ่งจำเป็นที่แฮชจะต้องแตกต่างกันทุกครั้งแม้จะใช้รหัสผ่านเดียวกันก็ตาม
ใช่ ถูกต้องด้วย คุณอาจพิจารณาเช่นนี้กับพารามิเตอร์ทั้งหมดของ Argon2 คุณเรียกใช้ฟังก์ชันเชิงกำหนด อินพุตเดียวกันจะเป็นผลมาจากเอาต์พุตเดียวกัน นี่คือสิ่งที่เราต้องการจากฟังก์ชันแฮช ฟังก์ชันแฮชรหัสผ่าน และ Random Oracles กำหนด; อินพุตเดียวกันต้องให้ผลลัพธ์เหมือนกัน
การใช้เกลือที่แตกต่างกันใช้สำหรับรับรหัสมากกว่าหนึ่งรหัสจากรหัสผ่าน เกลือในเวลาเดียวกันเป็นมาตรการตอบโต้ที่ดีกับตารางสีรุ้งหากทำได้
หากแฮชต่างกัน จะใช้แทนรหัสลับเดียวกันได้อย่างไร
ในการรับคีย์เดียวกัน คุณต้องใช้พารามิเตอร์เดียวกัน รหัสผ่านเดียวกัน, เกลือเดียวกัน, วนซ้ำเดิม, ใช้หน่วยความจำเดียวกัน, และขนานกัน พารามิเตอร์นอกเหนือจากรหัสผ่านของคุณไม่จำเป็นต้องเป็นความลับ สามารถเก็บไว้อย่างเปิดเผยได้ เช่น ข้อมูลประเภทนี้ถูกเก็บไว้ใน ลูกโหม่งส่วนสำคัญคือการเก็บรหัสผ่านของคุณเป็นความลับตลอดเวลา
ต้องเก็บพารามิเตอร์เหล่านี้เมื่อได้รับคีย์จากรหัสผ่าน
Argon2 ใช้สำหรับการได้มาของคีย์อย่างไร
อันดับแรก ตัดสินใจเลือกความปลอดภัยเป้าหมายของคุณ เช่น.คุณต้องการให้ชีวิตของผู้โจมตียากแค่ไหน ปรับจำนวนการวนซ้ำ ระดับของการขนาน และการใช้หน่วยความจำตามความปลอดภัยเป้าหมายของคุณ เมื่อคุณตัดสินใจแล้ว ให้สร้างเกลือแบบสุ่มที่เหมือนกัน กำหนดขนาดคีย์ที่ต้องการ เช่น 256 บิต (หรือ 32 ไบต์) ตอนนี้คุณพร้อมที่จะใช้ Argon2 กับข้อมูลนี้แล้ว
คุณให้ข้อมูลของคุณกับ Argon และตัดสินใจความปลอดภัยเป้าหมายของคุณ
การใช้งาน: ./argon2 [-h] salt [-i|-d|-id] [-t iterations] [-m memory] [-p parallelism] [-l hash length] [-e|-r] [- v (10|13)]
รหัสผ่านถูกอ่านจาก stdin
พารามิเตอร์:
เกลือ เกลือที่จะใช้อย่างน้อย 8 ตัว
-i ใช้ Argon2i (นี่คือค่าเริ่มต้น)
-d ใช้ Argon2d แทน Argon2i
-id ใช้ Argon2id แทน Argon2i
-t N กำหนดจำนวนการวนซ้ำเป็น N (ค่าเริ่มต้น = 3)
-m N ตั้งค่าการใช้หน่วยความจำของ 2^N KiB (ค่าเริ่มต้น 12)
-p N ตั้งค่าความขนานเป็น N เธรด (ค่าเริ่มต้น 1)
-l N ตั้งค่าความยาวเอาต์พุตแฮชเป็น N ไบต์ (ค่าเริ่มต้น 32)
-e เอาต์พุตแฮชที่เข้ารหัสเท่านั้น
-r ส่งออกเฉพาะไบต์ดิบของแฮช
-v (10|13) เวอร์ชัน Argon2 (ค่าเริ่มต้นเป็นเวอร์ชันล่าสุด ปัจจุบันคือ 13)
-h พิมพ์การใช้งาน argon2
โปรดทราบว่า Argon2 มีสามประเภท;
Argon2d เร็วกว่าและใช้การเข้าถึงหน่วยความจำที่ขึ้นกับข้อมูล การพึ่งพาข้อมูลเปิดใช้งานช่องทางด้านข้างทันที เหมาะสำหรับการเข้ารหัสลับและแอปพลิเคชันที่ไม่มีภัยคุกคามจากการโจมตีช่องทางด้านข้าง
Argon2i ใช้การเข้าถึงหน่วยความจำที่ไม่ขึ้นกับข้อมูล และวิธีนี้เป็นที่นิยมสำหรับการแฮชรหัสผ่านและการสืบทอดคีย์ที่ใช้รหัสผ่าน
Argon2id ในครึ่งแรกของการวนซ้ำครั้งแรกจะทำงานเป็น Argon2i และส่วนที่เหลือจะทำงานเป็น Argon2d สิ่งนี้เปิดใช้งานทั้งการป้องกันช่องทางด้านข้างและการแลกเปลี่ยนหน่วยความจำเวลา
และแบบฟอร์ม ร่าง-irtf-cfrg-argon2-03;
หากคุณไม่ทราบความแตกต่างระหว่างพวกเขา หรือคุณพิจารณาว่าการโจมตีช่องทางด้านข้างเป็นภัยคุกคามที่ทำงานได้ ให้เลือก Argon2id