Score:6

สร้างรหัสผ่านที่แข็งแกร่งและจำง่ายโดยใช้การเข้ารหัสแบบคลาสสิกหรือไม่

ธง cn

รหัสผ่านอาจจำยาก ตัวอย่างเช่น:

H7535637353959595*9608J614625C1313^398583I0397897j^

Bob จึงต้องการสร้างและใช้รหัสผ่านที่ดีสำหรับ GPG ที่เขาไม่ต้องจำ เขาจะไม่ค่อยใช้รหัสผ่านนี้ (การเข้ารหัสแบบอสมมาตรสำหรับการจัดเก็บแบบออฟไลน์) เมื่อเขาต้องการรหัสผ่าน เขาจะสร้างรหัสผ่านด้วยดินสอและกระดาษจากข้อมูลสำคัญบางอย่างที่เก็บไว้ในที่เดียว: หัวของเขา

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

ที่สำคัญเขาต้องการหลีกเลี่ยง "ความปลอดภัย" ผ่านการทำให้งงงวย

ลักษณะและหลักการบางประการที่อยู่เบื้องหลัง รหัส VIC อยู่ในใจ (อยู่แล้ว):

  1. ตัวเลข 5 หลัก (สุ่มอย่างแท้จริง)

67106 ขยายเป็น 10 หลัก 67106 + (6+7=3) + (7+1=8) ฯลฯ 6710638169

  1. วลีสั้น ๆ ที่จดจำ: ปรัชญาเชิงวิจารณ์ (ใช้อักษร 20 ตัวแรก) ที่เกิดขึ้นใน 5169827304 และ 2159346708

เพื่อให้เรื่องยาวสั้นโดยทำตามกระบวนการของ Bob ซึ่งส่วนใหญ่เหมือนกับรหัส VIC (การเติมลูกโซ่, การสร้างการเรียงสับเปลี่ยนของ 1 ถึง 0, การบวกตัวเลขโดยไม่ถือ) เรามาถึงที่นี่:

    5730481269
    ไม่มี ADIEUS
  3 BCFGHJKLMP
  9 QRTVWXYZ
  1. บ๊อบใช้แป้นพิมพ์คร่อมบนวลียาวที่เขาจำได้:

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

เพิ่มพริกไทย ถ้าคุณต้องการ ที่ส่วนท้ายของแถวการเคลื่อนย้าย: *^^ และ 11=A, 22=B ฯลฯ 111=a 222=b ฯลฯ 1111=! 2222=@ ฯลฯ

ผลลัพธ์: H7535637353959595*9608J614625C1313^398583I0397897j^

ด้วยการฝึกฝนเล็กน้อย การจดจำกระบวนการเช่นรหัส VIC ใช้นั้นไม่ใช่เรื่องยาก

คำถาม:

  1. วิธีการเช่นนี้สามารถสร้างรหัสผ่านที่รัดกุมพอที่จะใช้ใน GPG ได้หรือไม่

  2. วิธีการที่แข็งแกร่งโดยใช้การเข้ารหัสแบบคลาสสิกสำหรับการสร้างรหัสผ่านจะมีลักษณะอย่างไร

jjj avatar
cn flag
jjj
เมื่อผู้โจมตีรู้ว่าคุณสร้างรหัสผ่านอย่างไร (และคุณควรคิดไว้เสมอ) อัลกอริทึมที่ใช้กับคีย์จะไร้ประโยชน์ในแง่ของความปลอดภัย การขยายคีย์ไม่ได้เพิ่มความปลอดภัยใดๆ เลย คุณสามารถทำให้จดจำได้มากขึ้นเท่านั้น ซึ่งจะทำให้ใช้คีย์สุ่มเริ่มต้นได้นานขึ้น (ซึ่งเป็นสิ่งเดียวที่คุณควรใส่ใจ)
in flag
@jjj เอาล่ะ ฟังก์ชันการหาค่าคีย์ที่มีราคาแพงในการคำนวณจะเพิ่มความปลอดภัยเพราะทำให้การบังคับดุร้ายใช้เวลามากขึ้น แต่แน่นอน การคำนวณฟังก์ชันดังกล่าวด้วยมือเพียงครั้งเดียวก็ต้องใช้เวลาหลายปี หากไม่ใช่หลายล้านปี
lu flag
*"... [รหัสผ่าน] ที่เขาไม่ต้องจำ .... เมื่อเขาต้องการ เขาจะสร้างรหัสผ่านของเขา [จาก] ข้อมูลสำคัญบางอย่างที่เก็บไว้ในที่เดียว: หัวของเขา"* แล้วคุณอยากให้บ๊อบไม่ต้องจำอะไร....โดยจำอะไรได้ไหม? ดูเหมือนว่าไม่มีจุดหมายจริงๆ เพียงเลือก[รหัสผ่านที่เหมาะสม](https://xkcd.com/936/) แทนที่จะใช้อักขระสุ่ม 51 ตัว (ตามตัวอย่างแรก) ซึ่งยาวเกินความจำเป็นสำหรับวิธีโจมตีที่เป็นไปได้
tj flag
สิ่งนี้ทำให้ฉันนึกถึงคำถามที่ผ่านมาของฉัน: [การแฮช PHP ที่แข็งแกร่งโดยไม่มีเกลือ](https://security.stackexchange.com/questions/142659/strong-php-hashing-without-salt) TL;DL มีจุดประสงค์เพื่อใช้ข้อมูลส่วนบุคคลเพื่อสร้างรหัสผ่าน ซึ่งฉันสามารถสร้างซ้ำได้อีกครั้ง
Score:21
ธง in

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

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

เคล็ดลับความจำ - ดี

การยืดปากกาและกระดาษ - ไม่มีจุดหมาย

jp flag
(สมมติว่าผู้โจมตีรู้ว่าคุณทำอะไร)
Meir Maor avatar
in flag
นั่นเป็นการปฏิบัติที่ดีที่สุด และคำถามระบุอย่างชัดเจนถึงความปรารถนาที่จะไม่พึ่งพาความปลอดภัยโดยทำให้งงงวย
Score:7
ธง ng

หากไม่มีขอบเขตบนของความยาวของรหัสผ่านที่จะใช้ คำแนะนำทั่วไปที่ฉันทราบในการสร้างรหัสผ่านที่รัดกุมและจดจำง่าย (สำหรับคำจำกัดความของคำว่า "ง่าย") คือ เครื่องลูกเต๋า.

แนวคิดพื้นฐานเบื้องหลังคือ เลือกแต่ละคำผ่านการม้วน 5 d6 (เช่น แต่ละคำมี $6^5= 7765= 2^{12.92}\ประมาณ 2^{13}$ ตัวเลือก). รหัสผ่านทั้งหมดคือชุดค่าผสมของ $k$ คำอิสระให้รหัสผ่านด้วย $\ประมาณ {13k}$ บิตของเอนโทรปี จากนั้นคุณสามารถเลือก $k = 6$ (หรือตัวเลือกอื่นๆ ที่คุณต้องการ) เพื่อรับรหัสผ่านด้วย $\ประมาณ 80$ บิตของเอนโทรปี

ฉันเพิ่งสร้างรหัสผ่าน:

ปีประณีตแย่ที่สุดไม่เรียงลำดับแสดงว่าสกิปเปอร์

ฉันสามารถจดจำได้ทันทีหรือไม่ ไม่ ฉันขอสร้างเรื่องใน $\ประมาณ 10$ นาทีเพื่อช่วยในการท่องจำอย่างมากมาย? อาจจะ. นอกจากนี้ยังมีประโยชน์ (มหาศาล) ที่แม้แต่ผู้ใช้ที่ไม่ก้าวหน้าทางเทคโนโลยีก็สามารถจำรหัสผ่านที่สร้างขึ้นได้ นอกจากนี้ยังมีข้อดี (อีกครั้งมาก) ที่เป็นเพียงการเข้ารหัสมาตรฐาน $\ประมาณ 80$ บิตรหัสผ่านโดยใช้รายการคำ (สาธารณะ) เพื่อช่วยเหลือ มนุษย์ การท่องจำ ในทางคณิตศาสตร์ ไม่มีอะไรที่ไม่สำคัญเกิดขึ้นซึ่งอาจถูกโจมตีได้

John Smith avatar
ru flag
ไม่จำเป็นต้องใช้ซอฟต์แวร์ เพียงเลือกเพลงที่คุณจำคำศัพท์ทั้งหมดเพื่อใช้เป็นสตริงคำ จักรวาลของเพลงนั้นใหญ่พอ จากนั้นเลือกอัลกอริทึมที่จดจำได้ง่ายและเก็บไว้เป็นส่วนตัว ("ตัวอักษรตัวที่สองและสามของทุกคำที่ขึ้นต้นด้วยพยัญชนะ") และคุณจะไม่มีปัญหาในการรักษาสตริงหลายร้อยอักขระที่เดายากอย่างเหมาะสม ยาวอยู่ในหัวของคุณ คุณยังสามารถเขียนลงไปได้ว่าเพลงใดเข้ารหัสรหัสผ่านใด โดยไม่ต้องมีโครงร่างที่มาจากแหล่งที่มา แม้ว่านั่นจะไม่เพียงพอต่อการบังคับเดรัจฉานอย่างแนบเนียนก็ตาม
Mark avatar
ng flag
@JohnSmith หากคุณกำลังจะจัดเก็บข้อมูลเกี่ยวกับรหัสผ่านของคุณ ไม่ควรเป็นแบบเฉพาะกิจ --- เพียงใช้ตัวจัดการรหัสผ่าน หากคุณต้องการให้มาสเตอร์คีย์มาจากรูปแบบเฉพาะกิจบางอย่างก็ไม่เป็นไร แต่ฉันเห็นว่าไม่มีเหตุผลที่จะทำเช่นนั้น เนื่องจากเป็นการยากที่จะโต้แย้งความเข้มงวด *ในเชิงปริมาณ* ของรหัสผ่านของคุณ ยิ่งไปกว่านั้น การฝึกตัวเองให้พิมพ์คำว่า "ผิด" ในลักษณะที่สัมพันธ์กับรหัสผ่านของคุณดูน่าสงสัยพอสมควร
Score:1
ธง cn
Leo

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

ฉันจะถือว่าผู้ใช้สามารถจำคำหลายคำที่มีความยาวต่างกันได้ เป็นต้น ["ลอนดอน", "อิสตันบูล", "เชฟฟิลด์"].

คุณสามารถใช้รหัส Vigenere กับคีย์หลายตัวได้ เมื่อคุณทำเช่นนี้ คีย์สำหรับการเข้ารหัสจะยาวเท่ากับคำหลักที่ใช้กันน้อยที่สุด จากตัวอย่างคำ เราได้รับ 72 ตัวอักษร

จากนั้นเราเริ่มต้นด้วยสตริง 72 "เอ" อักขระแล้วเข้ารหัสโดยใช้รหัส Vigenere กับคำสำคัญแต่ละคำ

คำสำคัญ: ['ลอนดอน', 'อิสตันบูล', 'เชฟฟิลด์']
ตัวคูณร่วมน้อย: 72
คีย์เริ่มต้น: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
เข้ารหัสด้วยลอนดอน: ลอนดอนลอนดอนลอนดอนลอนดอนลอนดอนลอนดอนลอนดอนลอนดอนลอนดอนลอนดอนลอนดอนลอนดอนลอนดอนลอนดอนลอนดอนลอนดอน
เข้ารหัสด้วย ISTANBUL: TGGDBOFZVVHNYPHOWFEOAEIYTGGDBOFZVVHNYPHOWFEOAEIYTGGDBOFZVVHNYPHOWFEOAEIY
เข้ารหัสด้วย SHEFFIELD: LNKIGWJKYNORDUPSHIWVEJNGXRJVISKEDZSQQWLTBNIZDWPCYLOHMRXGZAMVCAKGDJJTIITB
ผลลัพธ์สุดท้าย: LNKIGWJKYNORDUPSHIWVEJNGXRJVISKEDZSQQWLTBNIZDWPCYLOHMRXGZAMVCAKGDJJTIITB

นี่คือรหัส Python บางส่วนที่ทำสิ่งนี้

#!/usr/bin/env python3
นำเข้าคณิตศาสตร์
นำเข้าระบบ

ตัวอักษร = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

ไวเจเนียร์ = {}

สำหรับฉัน ตัวอักษรในการแจกแจง(ALPHABET):
    a = รายการ(ตัวอักษร)
    สำหรับ _ ในช่วง (i):
        ก.ต่อท้าย(a.pop(0))
    vigenere[ตัวอักษร] = ก

คำหลัก = [x.upper() สำหรับ x ใน sys.argv[1:]]

พิมพ์ ("คำหลัก:", คำหลัก)

key_len = math.lcm(*[len(x) สำหรับ x ในคีย์เวิร์ด])
พิมพ์("ตัวคูณร่วมน้อย:", key_len)

key = ["A"] * key_len

พิมพ์ ("คีย์เริ่มต้น:", "".join (คีย์))
สำหรับคำหลักในคำหลัก:
    สำหรับฉันในช่วง (key_len):
        key_letter = คีย์เวิร์ด[i % len(คีย์เวิร์ด)]
        ดัชนี = ALPHABET.index (คีย์ [i])
        คีย์[i] = vigenere[key_letter][ดัชนี]
    พิมพ์ (f"เข้ารหัสด้วย {keyword}:", "".join(key))

พิมพ์ ("ผลลัพธ์สุดท้าย:", "".join (คีย์))
Score:1
ธง am

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

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

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

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

ดังนั้น TL;DR คุณจะมีรหัสผ่านและตำแหน่งที่ต้องจำเพียง N-เท่า และอย่างอื่นจะเป็นแบบสุ่ม จึงไม่สามารถบังคับได้ในเวลาที่เหมาะสม และปลอดภัยจากการโจมตีจากพจนานุกรม + หากคุณไม่เปิดเผยตำแหน่ง แม้ว่า รหัสผ่านของคุณรั่วไหล (วิศวกรรมสังคมหรือการคัดลอกวางในแชทผิดพลาด) ผู้โจมตียังคงต้องได้รับ "หีบสมบัติ" กุญแจที่ไม่มีรูกุญแจก็เป็นแค่ของไม่มีค่า

และมันเป็นสิ่งที่ดีที่สุดสำหรับการท่องจำ เพราะคุณไม่จำเป็นต้องจำรหัสผ่าน GPG หรือ algo ที่สร้างรหัสผ่านขึ้นมา

Patriot avatar
cn flag
ฉันเข้าใจประเด็นแรกของคุณ แต่นั่นเป็นสาเหตุที่กรณีการใช้งานเป็นที่เก็บข้อมูลออฟไลน์ ฉันเห็นสิ่งที่คุณพูดในการสนทนาครั้งหลังของคุณ

โพสต์คำตอบ

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