Score:1

ความยาวของข้อความรหัสผ่านใดที่ดีจึงยากที่จะทำลายรหัส PBKDF2 ของ bitcoin

ธง ru

ตาม https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki#From_mnemonic_to_seed

ในการสร้างเมล็ดไบนารีจากตัวช่วยจำ เราใช้ฟังก์ชัน PBKDF2 ด้วยประโยคช่วยในการจำ (ใน UTF-8 NFKD) ที่ใช้เป็นรหัสผ่านและ สตริง "ช่วยจำ" + วลีรหัสผ่าน (อีกครั้งใน UTF-8 NFKD) ใช้เป็นเกลือ จำนวนการวนซ้ำถูกตั้งค่าเป็น 2048 และใช้ HMAC-SHA512 เป็น ฟังก์ชันสุ่มหลอก ความยาวของคีย์ที่ได้รับคือ 512 บิต (= 64 ไบต์)

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

kelalaka avatar
in flag
ความปลอดภัยเป้าหมายของคุณคืออะไร? เราเรียกสิ่งนี้ว่าเป็นการหลอกลวงสำหรับคำถามของคุณได้ไหม [การใช้คำสุ่ม 7-8 คำจากทุกคำของภาษาเป็นรหัสผ่านเป็นความคิดที่ดีหรือไม่](https://crypto.stackexchange.com/q/76701/18298) ถ้าไม่โปรดระบุ
fgrieu avatar
ng flag
คำแนะนำร่วมสมัยใดๆ ในการใช้ PBKDF2 สำหรับการแฮชรหัสผ่านนั้นไร้ความสามารถหรือมีเป้าหมายเพื่อทำให้ระบบเสียหาย เมื่อรวมกับ _"จำนวนการวนซ้ำถูกตั้งค่าเป็น 2048"_ นั่นเป็นการยั่วยุสามัญสำนึก! เดาว่าฉันจัดประเภทคำแนะนำ[นั้น](https://pages.nist.gov/800-63-FAQ/#q-b17)อย่างไร ในแง่ของแบบอย่างเช่น [ขนาดคีย์ DES](https://crypto.stackexchange. com/a/34228/555) และ [Dual_EC_DRBG](https://en.wikipedia.org/wiki/Dual_EC_DRBG)
kelalaka avatar
in flag
@fgrieu ฉันเดาว่าพวกเขาใช้ PBKDF2 เพื่อรวมรหัสผ่านและส่งออกไบนารีซีดที่จะใช้ใน secp256k1 เท่านั้น ไม่ใช่เพื่อความปลอดภัย พวกเขาบอกว่าอนุญาตให้ใช้เอนโทรปีขั้นต่ำ 128 บิตแล้ว OP ต้องใช้ 256 เพื่อให้ได้เอนโทรปี 2560 บิตตั้งแต่ Grover
fgrieu avatar
ng flag
@kelalaka: คำถามถามถึงวิธีเลือกรหัสผ่านโดยมีเจตนาที่จะปกป้องคีย์ส่วนตัว คำถามจะสันนิษฐานว่า "เรารู้จักเมล็ดช่วยจำ 24 คำ" และคีย์สาธารณะจะถูกสันนิษฐานว่ารู้จัก ด้วยเหตุนี้ แต่ละรหัสผ่านจึงไม่สามารถทดสอบได้ด้วย 2048 SHA-512 และการคูณหนึ่งจุดบน secp256k1 ใช่หรือไม่ ถ้าเป็นเช่นนั้น ฉันไม่สามารถเอาผิดกับการยืดเอนโทรปีเล็กน้อยนั้นได้ นั่นเป็นช่องทางสำหรับแครกเกอร์รหัสผ่าน
kelalaka avatar
in flag
@fgrieu ช่วยในการจำคือ _not public_ สามารถใช้ passpharase สำหรับการปฏิเสธที่เป็นไปได้ในกรณีของคำช่วยในการจำ จากนั้นอีกครั้งหนึ่งต้องการเอนโทรปีประมาณ 256 บิต นอกจากนี้ อย่างที่คุณเห็นในลิงค์ของ OP มันสามารถว่างเปล่าได้บางที OP ถาม เนื่องจากผู้โจมตีรู้ 24 คำ...
fgrieu avatar
ng flag
@kelalaka: หากไม่ต้องการรหัสผ่านเพราะมีเอนโทรปี 128 บิตหรือมากกว่านั้นป้อนสิ่งนั้น ฉันก็โอเคกับ PBKDF2 และไม่ว่าจะกี่รอบก็ตาม และโดยมีดโกนของ Occam เสนอให้ทำให้รหัสผ่านว่างเปล่า (หรือ รหัสผ่านแรกที่ยอมรับตามพจนานุกรม) และเรียกมันว่าวัน หากจำเป็นต้องใช้รหัสผ่าน เช่น สำหรับการปฏิเสธที่เป็นไปได้ หรือ/และเนื่องจากเอนโทรปีที่เหลืออาจรั่ว ดังนั้นการใช้ PBKDF2 นั้นไม่ดี การใช้กับ 2048 รอบนั้นแย่กว่า ไม่ว่าในกรณีใด ฉันพบว่าคำถาม/วิธีการไม่คุ้มค่าที่จะพิจารณา
kelalaka avatar
in flag
@fgrieu ให้คำตอบ หากมีสิ่งใดขาดหายไป คุณช่วยแจ้งให้เราทราบได้ไหม
Score:1
ธง in

คีย์ส่วนตัวและคีย์สาธารณะใน ECC

ในการสร้างรหัสสาธารณะใน ECC 256 บิต (Bitcoin ใช้ secp256k1) เราต้องการรหัสสุ่ม 256 บิตที่สม่ำเสมอเพื่อสร้างรหัสลับ $k$ (หมายเลข 256 บิต) และเผยแพร่ $[k]G$เช่น การคูณสเกลาร์กับจุดฐาน $G$ และสิ่งนี้ได้รับการปกป้องโดยปัญหาลอการิทึมที่ไม่ต่อเนื่องบน ECC และหากกลุ่มเส้นโค้งเป็นแบบทั่วไปกว่าการโจมตีที่รู้จักกันดีจะมีค่าใช้จ่าย $2^{128}$. โปรดทราบว่าครั้งหนึ่ง คอมพิวเตอร์ควอนตัมเข้ารหัส ถูกสร้างขึ้น อัลกอริทึมของ Shor เมื่อนำไปใช้กับ DLog ความปลอดภัยจะหายไป!

รหัสผ่านแบบสุ่มจำไม่ยากใช้ Dicewire xkcd936

มนุษย์ยากที่จะจำฐานสิบหกแบบสุ่ม 64 ฐาน ดังนั้นนักวิจัยจึงคิดค้น dicewire และ Bip39 ก็คล้ายกัน ใน Bip39 แทนที่จะจำ 64 ฐานสิบหก เมื่อทอยตัวเลขสุ่ม อาจโดยการโยนเหรียญที่ยุติธรรม หรือรับจาก /dev/urandom เพื่อเลือกคำศัพท์จากรายการคำศัพท์ของ Bip39 เป็นที่ทราบกันดีว่า 24 คำสร้างประมาณเอนโทรปี 256 บิต.

คำที่เลือกจะไม่เปิดเผยต่อสาธารณะ และเก็บเป็นความลับตลอดเวลา

ตอนนี้เราอาจพิจารณาการใช้วลีรหัสผ่านเป็น

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

ถ้าเราอ่านคำถามเป็น,

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

ดังนั้นเราจึงถือว่าคำช่วยจำ 24 คำไม่ปลอดภัย

ประการแรก repo มีอายุประมาณ 8 ปี (created_at": "2013-11-19T17:18:41Z ) เก่ากว่าการแข่งขันการแฮชรหัสผ่านครั้งล่าสุดที่จัดขึ้นในปี 2558 เป็นเรื่องปกติที่พวกเขาจะพูดถึง PBKDF2 ไม่ใช่ Argon2 ดูเหมือนว่าเอกสารนี้จะไม่ได้รับการอัพเดตสำหรับความต้องการในปัจจุบัน! แต่ไม่ใช่เรื่องปกติที่จะแนะนำการทำซ้ำในปี 2048 และยังมีผู้สมัครที่ดีกว่าในเวลานั้น

  • Bcrypt 1999 - การวนซ้ำ ไม่มีความแข็งของหน่วยความจำ
  • PBKDF2 2000 - การวนซ้ำ ไม่มีความแข็งของหน่วยความจำ
  • Scrypt 2009 - การวนซ้ำ มีความแข็งของหน่วยความจำ
  • Argon2 2015 - การวนซ้ำ มีความแข็งของหน่วยความจำและสวนทางกับการขนาน

ประการแรก อย่าใช้อักขระ ให้ใช้ Bip39 หรือ dicewire อีกครั้งเพื่อสร้างข้อความรหัสผ่าน ดังนั้น ด้วยคำ 12 คำ เราสามารถเข้าถึงค่าเอนโทรปีประมาณ 128 บิตได้ และถึงแม้จะใช้แฮชง่ายๆ เช่น SHA1 หรือ SHA256 แทน PBKDF2 หรือ Argon2 ก็ปลอดภัยเพียงพอจาก การประชุมสุดยอด และพลังรวมของนักขุด BitCoin ที่ซึ่งนักขุดเคยไปถึง $\ประมาณ 2^{92.09}$ SHA256d ต่อปีในวันที่ 7 กุมภาพันธ์ 2021 หากเราถือว่านี่คือการรักษาความปลอดภัยเป้าหมายสำหรับรหัสผ่านของคุณ ดังนั้นสำหรับ PBKDF2

  • ใช้การวนซ้ำเช่น 1M เพื่อให้คุณสามารถลดพลังรวมเป็น $\ประมาณ 2^{70}$ และลดยอดสูงสุดเป็นรอบๆ $~2^{50}$*. สิ่งที่ดีเกี่ยวกับการทำซ้ำนี้สามารถปรับเปลี่ยนได้ตามความต้องการของคุณ (สามารถใช้เกณฑ์มาตรฐานของ Hashcat บน NVIDIA RTX 3090 เพื่อปรับการรักษาความปลอดภัยเป้าหมายตามซูเปอร์คอมพิวเตอร์ที่เก็บ RTX จำนวนมาก แทนที่จะเป็นพลังรวมของนักขุด)

    ตัวช่วยจำ 12 คำจะปลอดภัยสำหรับการประชุมสุดยอด Bip39 6 คำจะเอาชนะพลังของมันได้. อย่างไรก็ตาม เรามีทางเลือกอื่นที่ดีกว่า ทั้งตอนนั้นและตอนนี้ - Scrypt และ Argon2!

ใช้ Argon2 ทุกครั้งที่ทำได้

วันนี้นักขุด bitcoin ใช้กันอย่างแพร่หลาย ASIC และ GPU เพื่อทำให้กระบวนการขุดแบบขนานอย่างหนาแน่น ตอนนี้ เรามี Argon2 เหมือนกลไกต่อต้านพวกมัน

  • หน่วยความจำที่ปรับได้ เพื่อให้พลังการค้นหา ASIC และ GPU ลดลง แม้แต่บนพีซีก็ใช่ว่าจะใช้ประโยชน์จากช่วงเวลาการใช้หน่วยความจำได้

  • ความขนานที่ปรับได้ เพื่อให้คอร์ของ CPU ไม่สามารถรันในอินสแตนซ์แบบขนานได้อย่างสมบูรณ์

  • และอีกครั้งที่ จำนวนการวนซ้ำ เพื่อลดระยะเวลาการค้นหาเดียว

    ต้องวัดพารามิเตอร์ Argon2 ก่อนตัดสินใจ และยังคงช่วยจำ 12 คำได้จะค่อนข้างปลอดภัยสำหรับ Argon2 เราสามารถพูดได้ว่า Bip39 6 คำจะปลอดภัยต่อการประชุมสุดยอด

หรือดีกว่านั้นควรเรียงสับเปลี่ยนกี่วิธีจึงจะปลอดภัย?

การอ่านนี้เป็นการเปลี่ยนรูปของคำ 24 คำ แล้วเรามี 24! และโดยใช้ สูตรการประมาณค่าของสตริง $$น! \sim \sqrt{2 \pi n}\left(\frac{n}{e}\right)^n$$ จากนั้นตั้งค่า $n=24$

$$24! \sim \sqrt{2 \pi 24}\left(\frac{24}{e}\right)^{24} \sim 6.2\mathrm{e}{+23} \sim 2^{80}$$

ซึ่งค่อนข้างดี (ประมาณ Bip39 8 คำ) อย่างไรก็ตาม โปรดทราบว่าหากผู้โจมตีรู้การช่วยจำ 24 คำ ดังนั้นเอนโทรปีของคีย์ที่ได้รับ $k$ ประกอบกับข้อความรหัสผ่านไม่สามารถผ่านได้ $2^{80}$. หากคุณใช้เอนโทรปี 80 บิตได้ดี ให้ใช้ Argon2id ที่มีพารามิเตอร์ที่ดี ซึ่งก็เพียงพอแล้วที่จะปลอดภัยจากการค้นหารหัสผ่าน $2^{50}\ll 2^{80}$

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

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


*โปรดทราบว่าตัวเลขเป็นตัวเลขโดยประมาณ ไม่ใช่จำนวนที่แน่นอน เราไม่สามารถแน่ใจได้หากไม่ได้นั่งบนคอนโซลของ The Supercomputer - Summit

fgrieu avatar
ng flag
ฉันยอมรับว่า "การทดสอบยุงเหนือสถานที่กำเนิดตลาดภูเขาชนเผ่าที่ไม่รู้จักการกระทำที่แข็งแกร่งพิจารณา" หรือการเรียงสับเปลี่ยนกับ 1M มากกว่า 512 PBKDF2 จะปลอดภัย แต่ฉันอยากจะใช้เวลา CPU นั้นกับ Argon2, scrypt (นำเสนอในปี 2009, ใช้ได้อย่างกว้างขวางในปี 2013) หรือแม้แต่ bcrypt (1999) และสามารถใช้วลีที่สั้นกว่าพร้อมความปลอดภัยที่เทียบเท่าได้ นอกจากนี้ ฉันจะไม่สามารถจำข้อความรหัสผ่านที่ยาวขนาดนั้นได้อย่างมั่นใจ และฉันมั่นใจว่ามากกว่า 1/4 ของฐานผู้ใช้จะไม่จำหรือจะเขียนข้อความรหัสผ่านนี้ ดังนั้นฉันไม่แนะนำระบบนั้น
kelalaka avatar
in flag
ใช่ นั่นต้องใช้การคำนวณจริงๆ ซึ่งฉันข้ามไปเพราะไม่แม่นยำ อย่างไรก็ตาม 6 ถึง 7 ควรจะเพียงพอ อืม ดูเหมือนว่าฉันลืมเน้นย้ำให้ใช้ Argon2 รหัสผ่านยาว นั่นเป็นปัญหาของมนุษย์ อย่างไรก็ตาม บางคนจดไว้ บางคนลืมไปแล้ว มี ews เกี่ยวกับการลืมรหัสผ่านสำหรับกระเป๋าเงินที่มีเหรียญจำนวนมาก ดูเหมือนว่าขีดจำกัดของเหรียญที่มีอยู่จะเข้าใกล้ 0 เมื่อ n ไปที่อนันต์ ฉันจะอัปเดตคำตอบในภายหลัง ขอบคุณ.
kelalaka avatar
in flag
@fgrieu ฉันเดาว่าจุดประสงค์ที่แท้จริงของวลีรหัสผ่านคือการสร้างคีย์ส่วนตัวและคีย์ที่เกี่ยวข้องมากกว่าหนึ่งคีย์ Bitcoin ใช้คู่กุญแจจำนวนมากต่อผู้ใช้ พวกเขาใช้กระเป๋าเงินแบบระบุลำดับชั้นมากขึ้น BIP0032/BIP0044 ที่เหมาะกับการใช้งานมากขึ้น

โพสต์คำตอบ

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