“ รหัสผ่านที่แข็งแกร่งที่สุด”


11

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

ตอนนี้ลูกค้ารายหนึ่งของฉันต้องการ "เสริมสร้าง" ความปลอดภัยและสนับสนุนวิธีแก้ไขปัญหาอื่น:

  • หกหลัก PIN
  • ไม่ "ตัวเลขเดียวกันถัดจากกันและกัน": เช่น: 11 3945 หรือ 39 55 94
  • ไม่ "หมายเลขที่ทำงานสาม": เช่น: 123 654 หรือ 53 789 3

ตอนนี้สำหรับคำถาม: โซลูชันใดแข็งแกร่งที่สุด

ฉันสามารถคำนวณตัวเลขสี่หลักได้ง่าย แต่ฉันจะคำนวณอีกหลักได้อย่างไร

ขอบคุณ!

ปรับปรุง

คุณได้สิ่งที่คุณขอโดยเฉพาะอย่างยิ่งเมื่อทำงานกับคณิตศาสตร์ :)

สิ่งที่ฉันขอคือจำนวนชุดค่าผสมสำหรับลำดับเลขทั้งสอง

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

ขอบคุณสำหรับการสนทนาที่ยอดเยี่ยม!


4
จากมุมมองทางประวัติศาสตร์คุณควรทำความคุ้นเคยกับ cryptanalysis ของ Enigma machine โดยเฉพาะอย่างยิ่งอัลกอริทึม Enigma ไม่เคยเข้ารหัสตัวอักษรกับตัวเอง นี่เป็นความคิดที่ทำให้วิศวกรมีความปลอดภัยมากขึ้น แต่ก็มีผลทำให้เครื่องมีความปลอดภัยน้อยลง นี่เป็นหนึ่งในหลาย ๆ ขั้นตอนที่อนุญาตให้ฝ่ายสัมพันธมิตรทำลายอินิกมา ฉันไม่ใช่ผู้เชี่ยวชาญใน crypto แต่อย่างใดความคิดทั่วไปคือคุณต้องการให้ keyspace ของคุณมีขนาดใหญ่ที่สุดเท่าที่จะเป็นไปได้
Sycorax พูดว่า Reinstate Monica

2
ฉันคิดว่านี่เป็นของCryptographyไม่ใช่ที่นี่
gung - Reinstate Monica

2
แคสเปอร์โปรดอธิบาย - คุณมีความกังวลเกี่ยวกับเรื่องนี้เป็นหลักในเรื่องความปลอดภัย (เช่นมีการพิจารณาที่เกี่ยวข้องกับความน่าจะเป็นมากกว่า) ในกรณีนี้มันอาจจะเหมาะสมกว่าที่อื่น - หรือคุณกำลังถามคำถามความน่าจะเป็นหลัก เหมาะกับที่นี่)?
Glen_b -Reinstate Monica

3
ในทางทฤษฎี --- หากคุณมุ่งเน้นไปที่การโจมตีด้วยกำลังดุร้าย --- ความเป็นไปได้ที่มากขึ้นหมายถึงความปลอดภัยที่มากขึ้นดังนั้นข้อ จำกัด เช่นไม่มีหลักเดิมหรือไม่มีการวิ่งของ 3 ลดจำนวนความเป็นไปได้ อย่างไรก็ตามในทางปฏิบัติผู้ใช้ไม่ได้เลือกพินแบบสุ่ม หากผู้ใช้นั้นขี้เกียจกว่าพวกเขาหวาดระแวงผู้ใช้หลายคนอาจเลือกพินเช่น "000000" หรือ "123456" ซึ่งทำให้สิ่งต่าง ๆ มีความปลอดภัยน้อยลง
Gregor Thomas

2
ฉันลงคะแนนให้ (ปิด) ชั่วคราวเพื่อปิดคำถามนี้โดยไม่มีความชัดเจนเนื่องจากความตั้งใจของ OP ยังไม่ชัดเจน ฉันชอบที่จะเห็นคำถามของ @ Glen_b ตอบดังนั้นเราจึงรู้ว่าสิ่งนี้ควรได้รับการพิจารณาว่าเป็นคำถาม combinatorics / น่าจะเป็นหรือเป็นสิ่งที่อพยพได้ดีกว่า
Silverfish

คำตอบ:


8

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

วิธีการของฉันจะระบุตัวเลือกที่เป็นไปได้ทั้งหมดโดยไม่ จำกัด แล้วลบตัวเลือกโมฆะ แม้ว่าจะมีมุมที่คมชัดเรียกว่าหลักการการรวม - การแยกซึ่งสอดคล้องกับแนวคิดที่ใช้งานง่ายที่คุณไม่ต้องการลบสิ่งเดียวกันออกจากชุดสองครั้ง!

ใน PIN หกหลักที่ไม่มีข้อ จำกัด และระบบเลขฐานสิบมีการรวมกันที่เป็นไปได้จากถึงแต่ละหลักมี 10 ตัวเลือก 000 000 999 999 :106000000999999:

พิจารณาว่าตัวเลข "สองตัวที่อยู่ติดกันและเหมือนกัน" มีลักษณะอย่างไร:โดยที่ตำแหน่งที่ระบุว่าเหมือนกันและสามารถเป็นเลขทศนิยมใด ๆ ก็ได้ ตอนนี้พิจารณาวิธีการหลายวิธีอื่น ๆ สตริงสามารถจัดในตัวเลขหกหลัก: , ,และXXXXAAดังนั้นสำหรับการสั่งซื้อใด ๆ โดยเฉพาะ (หนึ่งในตัวเลือกเหล่านั้น) มีชุดค่าผสมอย่างน้อยเนื่องจากมีตัวเลขหลักโดยไม่มีข้อ จำกัด ทีนี้มีตัวเลือกของอยู่กี่ตัว? เรากำลังทำงานกับตัวเลขทศนิยมดังนั้นจะต้องมี 10 ดังนั้นจึงมีX X X X X X X X X X X X X X X X X 10AAXXXXAXAAXAAXXXXXAAXXXXXAAXXXXXAA10 4 10 5 5 × 10 5104104A105ตัวเลือกสำหรับการสั่งซื้อโดยเฉพาะ มีการเรียงลำดับห้าครั้งดังนั้นจึงมีการเตรียมที่ตรงตามคำนิยามนี้ (สิ่งนี้หมายความว่าในแง่ของความปลอดภัยอาจถูกวัดในแง่ของการวัดข้อมูลเชิงทฤษฎีว่าจะลดปริมาณเอนโทรปีของพื้นที่ PIN ได้มากน้อยเพียงใด)5×105

ตอนนี้ลองพิจารณาว่าตัวเลขที่อยู่ติดกันเป็นอย่างไร ในสตริงถ้าเรารู้ A เราก็รู้จัก B และ C *: ถ้า A คือ 5 แล้ว B คือ 6 และ C คือ 7 ดังนั้นเราสามารถแจกแจงตัวเลือกเหล่านี้ได้:ABCXXX

  • 012XXX
  • 123XXX
  • 234XXX
  • 456XXX
  • 789XXX

และ ณ จุดนี้ก็ไม่มีความชัดเจนหากมี "การพันรอบ" หากมีเรายังรวมถึง

  • 890XXX
  • 901XXX

แต่ละวิธีมีการรวมกันที่เกี่ยวข้องด้วยเหตุผลเดียวกันกับข้างต้น ดังนั้นแค่นับว่าต้องมีวิธีแก้ปัญหากี่ข้อ โปรดจำไว้ว่าให้นับการเรียงลำดับทางเลือกเช่น X B C X X103XABCXX.

ตอนนี้เราไปถึงมุมที่เฉียบแหลมซึ่งเป็นหลักการของการรวมเข้าด้วยกัน เราได้จัดทำ PIN หกหลักทั้งหมดเป็นสามชุด:

A. PIN ที่อนุญาตได้ B. PIN เป็นโมฆะเนื่องจาก "ตัวเลขที่อยู่ติดกัน" C. PIN เป็นโมฆะเนื่องจาก "ตัวเลขที่ต่อเนื่องกัน"

แต่มีความละเอียดอ่อนเพิ่มเติมซึ่งก็คือว่ามีบางส่วนที่ตัวเลข 6 หลักซึ่งสามารถจัดสรรให้กับทั้งและCดังนั้นหากเราคำนวณเราจะลบตัวเลขเหล่านั้นสองครั้งและคำตอบของเราไม่ถูกต้อง การคำนวณที่ถูกต้องคือที่คือชุดขององค์ประกอบในทั้งและCดังนั้นเราต้องพิจารณาว่าตัวเลขตกอยู่ในทั้งและได้กี่วิธีC | S | = | A | - | B | - | C | , | S | = | A | - | B | - | C | + | B C | , B C B C B CBC|S|=|A||B||C|,|S|=|A||B||C|+|BC|,BCBCBC

มีหลายวิธีที่สามารถเกิดขึ้นได้:

  • AABCXX
  • ABCXDD และอื่น ๆ ดังนั้นคุณต้องหาวิธีที่เป็นระบบสำหรับสิ่งนี้รวมถึงวิธีการติดตามการสั่งซื้อทางเลือก ด้วยการใช้ตรรกะเดียวกับที่ฉันได้ใช้ข้างต้นนี้ควรจะง่ายมากถ้าน่าเบื่อเล็กน้อย เพียงจำไว้ว่ามีวิธีอื่นอีกกี่วิธีในการตอบสนองทั้ง B และ C

แนวทางขั้นสูงที่สูงขึ้นเล็กน้อยจะใช้ประโยชน์จากผลลัพธ์ของ combinatoric พื้นฐานและทฤษฎีพื้นฐานของการนับ แต่ฉันเลือกถนนสายนี้เพราะมันเป็นภาระทางเทคนิคที่เล็กที่สุดในเครื่องอ่าน

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

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

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

* ลำดับที่คุณลิสต์เพิ่มขึ้นอย่างเข้มงวดและไม่ชัดเจนว่าทั้งการเพิ่มและการลดลงเมื่อคุณพูดว่า "สามหมายเลขที่กำลังทำงานอยู่"


1

การรับสูตรปิดดูเหมือนซับซ้อน อย่างไรก็ตามมันค่อนข้างง่ายที่จะระบุ มี568 916รหัสที่เป็นไปได้สำหรับโซลูชันที่สอง ซึ่งใหญ่กว่าจำนวนโซลูชันด้วยรหัส PIN สี่หลัก รหัสที่จะระบุพวกเขาอยู่ด้านล่าง แม้ว่าจะไม่ได้รับการปรับปรุง แต่ใช้เวลาเพียงไม่กี่วินาทีในการเรียกใช้

บันทึก. ฉันคิดว่าลำดับต้องเพิ่มขึ้น (ซึ่งสามารถแก้ไขได้ง่ายthree_running)

N = 999999

candidates = range(N)

def same_consecutive_digits(x):
    x_string = str(x).zfill(6)
    for i in range(1,len(x_string)):
        if x_string[i] == x_string[i-1]:
            return True
    return False

def three_running(x):
    x_string = str(x).zfill(6)
    for i in range(2,len(x_string)):
        if int(x_string[i]) == int(x_string[i-1]) + 1 and int(x_string[i-1]) == int(x_string[i-2]) + 1:
            return True
    return False

def valid(x):
    return not same_consecutive_digits(x) and not three_running(x)

assert(same_consecutive_digits(88555))
assert(same_consecutive_digits(123))
assert(not same_consecutive_digits(852123))
assert(three_running(123456))
assert(not three_running(4587))
assert(valid(134679))
assert(not valid(123894))
assert(not valid(111111))
assert(not valid(151178))
assert(valid("031278"))

accepted = [i for i in range(N) if valid(i)]
print(len(accepted))

โดยนัยในรหัส แต่ไม่ใช่ในคำอธิบายของคุณเป็นข้อสันนิษฐานว่า PIN จะไม่เริ่มต้นด้วยตัวเลข "0" ซึ่งโดยปกติจะไม่เป็นจริงสำหรับ PIN หรือรหัสผ่าน คำตอบที่ถูกต้องซึ่งอนุญาตให้เป็นศูนย์ดังกล่าวคือ 568,916 อย่างไรก็ตามขอให้ระลึกไว้เสมอว่าคำตอบที่เกี่ยวข้องจะพิจารณาว่าการโจมตี PIN ในปัญหาที่มีข้อ จำกัด นี้สามารถทำได้อย่างมีประสิทธิภาพมากขึ้นโดยการใช้ประโยชน์จากข้อ จำกัด ซึ่งหมายความว่าการแจงนับความเป็นไปได้นี้ไม่ได้หมายถึง "ความแข็งแกร่ง" ของ ระบบดังที่ระบุไว้ในความคิดเห็นของคำถาม
whuber
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.