Score:2

Argon2 ใช้สำหรับการได้มาของคีย์อย่างไร

ธง us

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

kelalaka avatar
in flag
สิ่งนี้ตอบคำถามของคุณหรือไม่ [เข้ารหัสไฟล์ด้วย AES โดยใช้คีย์ลับที่ได้มาจาก Argon2](https://crypto.stackexchange.com/questions/75021/encrypt-a-file-with-aes-using-a-secret-key-derived-with -argon2) และคุณเก็บข้อมูลพิเศษไว้
DannyNiu avatar
vu flag
สิ่งที่คุณอธิบายในคำถามนั้นพบได้ทั่วไปกับ KDF ทั้งหมดที่รองรับเกลือ@kelalaka ในขณะที่ฉันเห็นด้วยกับคำถามที่เชื่อมโยงมีบางส่วนที่ทับซ้อนกับคำถามนี้ การตั้งค่าและบริบทค่อนข้างแตกต่างจากมุมมองความเข้าใจ
kelalaka avatar
in flag
@DannyNiu ฉันได้กล่าวไปแล้วว่าเมื่อ _keep ข้อมูลนี้กับ..._ หาก OP ถามว่าทำไมเราถึงจำเกลือได้ คำตอบนั้นชัดเจน PBKDF และ KDF ล้วนถูกกำหนดขึ้น ดังนั้นหากคุณป้อนค่าเดียวกัน คุณจะได้รับผลลัพธ์เดียวกัน นี่คือสิ่งที่เราต้องการจาก Random Oracles เมื่อเราได้รับค่าสำหรับอินพุต เราต้องการค่าเดียวกันเมื่อเราถามด้วยอินพุตเดียวกัน และส่วนสุดท้าย `ใช้เกลือสุ่มสำหรับการแฮชเสมอ`... ฉันคิดว่าฉันครอบคลุมทั้งหมดแล้ว
kelalaka avatar
in flag
@DannyNiu เขียนหนึ่งครอบคลุมทั้งหมด ฉันอาจพลาดบางส่วน แม้ว่าบางส่วนจำเป็นต้องคัดลอกและวาง...
Manglemix avatar
us flag
@kelalaka คำถามนั้นตอบคำถามของฉันจริง ๆ ขอบคุณ
Score:2
ธง in

ตามความเข้าใจของฉัน การได้มาของคีย์คือการที่คุณใช้ข้อมูลบางอย่าง พูดรหัสผ่าน และใช้ฟังก์ชันเพื่อแปลงเป็นตัวเลขที่สามารถใช้เป็นคีย์ลับในการเข้ารหัสแบบวงรี (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

Score:2
ธง cn

เป็นความจริง คุณใช้เกลือที่สร้างขึ้นแบบสุ่มกับ argon2i/argon2d/argon2id อย่างไรก็ตาม เกลือสุ่มจะต้องสร้างเพียงครั้งเดียวเท่านั้น คุณจำเป็นต้องทราบเกลือและพารามิเตอร์ที่ใช้ในการสร้างแฮชของ argon2 เพื่อตรวจสอบแฮชนั้นในภายหลัง

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

การพูดคุยเรื่อง Defcon นี้เป็นเรื่องล่าสุดและอธิบายถึงการใช้งานทางเทคนิคบางส่วนเกี่ยวกับ argon2: https://youtu.be/4Tn71-1GN20?t=1271

โพสต์คำตอบ

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