“En güçlü şifre”


11

Dört haneli bir PIN ile korunan bir uygulamam var ve kullanıcı hesap kilitlenmeden önce giriş yapmak için beş deneme yaptı.

Şimdi, müşterilerimden biri güvenliği "güçlendirmek" ve başka bir çözüm savunmak istiyor:

  • Altı haneli-PIN
  • NO "yan yana aynı rakam": örneğin: 11 3945 veya 39 55 94
  • NO "üç çalışan numaralar": örneğin: 123 654 veya 53789 3

Şimdi soru: Hangi çözüm en güçlü?

Dört rakamı oldukça kolay hesaplayabilirim, ama diğerini nasıl hesaplayabilirim?

Teşekkürler!

Güncelleme

Ne istersen onu alırsın - özellikle matematikle çalışırken :)

Yani, istediğim, her iki sayı dizisi için kombinasyon sayısıydı.

Cevapları ve yorumları okumak benim için gerçekten önemli değil. 5 tahmininiz varsa, 10.000 veya ~ 800.000 arasında seçim yapmanız önemli değildir. Daha da önemlisi, 1234'ü ve doğum gününü dışlamaktır. Benim durumumda, aslında kullanıcıların doğum günü var, bu yüzden kontrol edilecek bir şey var.

Harika bir tartışma için teşekkürler!


4
Tarihsel bir bakış açısıyla, Enigma makinesinin kriptanaliziyle tanışmalısınız. Özellikle, Enigma algoritması hiçbir zaman kendisine bir harf şifrelemedi. Bunun mühendisleri tarafından daha güvenli hale getirildiği düşünülüyordu, ancak makineyi daha az güvenli hale getirme etkisi vardı. Bu, Müttefik Güçlerin Enigma'yı kırmasına izin veren birçok adımdan biriydi. Hiçbir şekilde kripto konusunda uzman değilim, ancak genel fikir, anahtar alanınızın mümkün olduğunca büyük olmasını istediğinizdir.
Sycorax, Reinstate Monica'ya

2
Bence bu Kriptografiye ait, burada değil.
gung - Monica'yı eski

2
Casper, lütfen açıklayın - öncelikle bir güvenlik sorunu olarak endişe duyuyor musunuz (örneğin, sadece olasılıktan daha fazlası ile ilgili düşünceler var), bu durumda başka bir yere daha uygun olabilir - veya öncelikle bir olasılık sorusu mu soruyorsunuz ( buraya sığar)?
Glen_b-Monica

3
Teorik olarak --- sadece kaba kuvvet saldırılarına odaklanırsanız --- daha fazla olasılık daha fazla güvenlik anlamına gelir, bu nedenle aynı basamaksız veya 3'lü çalışma gibi kısıtlamalar olasılıkların sayısını azaltır ve bu nedenle kesinlikle daha zayıftır. Bununla birlikte, pratik olarak (kullanıcı777'ye dokunduğunda) insanlar rastgele pimler seçmiyor. Kullanıcılar paranoyak olduklarından daha tembelse, birçoğu "000000" veya "123456" gibi pinleri seçebilir ve bu da işleri daha az güvenli hale getirir.
Gregor Thomas

2
OP'nin niyetlerinin henüz açık olmadığı gerekçesiyle bu soruyu belirsiz olarak kapatmak için oy kullanıyorum. @ Glen_b'in sorusunun cevaplandığını gerçekten görmeyi tercih ederim, bu yüzden bunun bir birleştirici / olasılık sorusu veya daha iyi taşınan bir şey olarak ele alınıp alınmayacağını biliyoruz.
Silverfish

Yanıtlar:


8

Bir istatistikçi forumundan bu soru hakkında yardım istediniz, bu yüzden istatistiksel olarak cevap vereceğim. Bu nedenle, rastgele bir PIN tahmin etme olasılığına ilgi duyduğunuzu varsaymak mantıklıdır (rastgele bazı tanımlamalar için), ancak bu soruya sağlandığından daha fazlasını okur.

Yaklaşımım, tüm olası seçenekleri kısıtlamadan numaralandırmak ve daha sonra geçersiz seçenekleri çıkarmak olacaktır. Bununla birlikte, aynı şeyi bir setten iki kez çıkarmak istemediğiniz sezgisel fikre karşılık gelen inklüzyon-dışlama prensibi olarak adlandırılan keskin bir köşesi vardır!

Hiçbir kısıtlama ve ondalık sayı sistemi ile altı haneli bir PIN olarak, orada dan muhtemel kombinasyonlar, 000 000 -e doğru 999 999 : Her rakam 10 seçenekleri vardır.106000000999999:

"İki bitişik, özdeş" rakamın nasıl göründüğünü düşünün: , burada A etiketli konumlar aynıdır ve X herhangi bir ondalık basamak olabilir. Şimdi A A dizesinin altı basamakta başka kaç şekilde düzenlenebileceğini düşünün : X A A X X X , X X A A X X , X X X A A X ve X X X X A AbirbirXXXXbirXbirbirXbirbirXXXXXbirbirXXXXXbirbirXXXXXbirbir. Herhangi bir özel sipariş (bu seçeneklerden biri) Yani, en az orada olmadığından kombinasyonlar, 10 4 kısıtlama olmaksızın basamağı. Şimdi, kaç tane A seçeneği var? Ondalık basamaklarla çalışıyoruz, bu yüzden 10 olmalı. Yani belirli bir sipariş için 10 5 seçenek var . Bu tür beş düzen vardır, bu nedenle bu tanımı karşılayan 5 × 10 5 düzenlemesi vardır. (Güvenlik açısından bunun anlamı, PIN alanının entropisini ne kadar azalttığına dair bilgi teorik bir ölçüsü olarak ölçülebilir.)104104bir1055x105

birBCXXX

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

ve bu noktada "etrafı saran" olup olmadığı belli değil. Varsa, biz de dahil

  • 890XXX
  • 901XXX

103XbirBCXX.

Şimdi keskin bir köşeye varıyoruz ki bu içerme-hariç tutma ilkesi. Altı basamaklı PIN kodlarının tümünü üç set halinde oluşturduk:

A. İzin verilen PIN kodları B. "Bitişik rakamlar" nedeniyle geçersiz PIN kodları C. "Sıralı rakamlar" nedeniyle geçersiz PIN kodları

BC|S|=|bir|-|B|-|C|,|S|=|bir|-|B|-|C|+|BC|,BCBCBC

Bunun birkaç yolu vardır:

  • birbirBCXX
  • birBCXDD

Biraz daha gelişmiş yaklaşımlar temel birleştirici sonuçlardan ve saymanın temel teoreminden faydalanır, ancak okuyucuya en küçük teknik yükü yerleştirdiği için bu caddeyi seçtim.

1|S|

"Kilitlenene kadar beş" kırışıklık kesinlikle izinsiz erişime karşı daha iyi bir koruma, çünkü 4 basamaklı veya 6 basamaklı şemada, çok sayıda seçenek var ve hatta beş farklı, rastgele tahminler düşük başarı olasılığı. İyi bir olasılık sorusu için, böyle bir saldırının başarılı olma olasılığını hesaplamak mümkündür.

Ancak, sayı dizilerinin olasılığı dışındaki diğer faktörler PIN mekanizmasının güvenliğini etkileyebilir. Başlangıçta, insanlar rastgele PIN seçmeme eğilimindedir! Örneğin, bazı insanlar doğum tarihlerini veya çocuk DOB'larını veya kişisel olarak ilgili bazı numaraları PIN olarak kullanırlar. Bir saldırgan kullanıcının DOB'unu biliyorsa, muhtemelen denedikleri ilk şeyler arasında olacaktır. Bu nedenle, belirli bir kullanıcı için, bazı kombinasyonların diğerlerinden daha olası olabilir.

* Listelediğiniz sekanslar kesinlikle artıyor ve "üç çalışan sayı" dediğinizde hem artan hem de azalan belirsiz.


1

Kapalı bir formül elde etmek karmaşık görünüyor. Ancak, bunları numaralandırmak oldukça kolaydır. 568 916İkinci çözüm için olası kodlar vardır . Hangi dört haneli PIN kodu ile çözüm sayısından daha büyük. Bunları numaralandırmak için kod aşağıdadır. Optimize edilmemesine rağmen, çalışması yalnızca birkaç saniye sürer.

Not. Dizinin artan bir sırada olması gerektiğini varsaydım (kolayca değiştirilebilir 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))

Kodda örtülü, ancak açıklamanızda değil, PIN'lerin hiçbir zaman "0" rakamıyla başlamayacağı varsayımıdır. Bu genellikle PIN veya şifreler için geçerli değildir. Bu tür sıfırlara izin veren doğru cevap 568.916'dır. Bununla birlikte, ilgili cevabın bu kısıtlı problemde PIN'e yapılan saldırıların, kısıtlardan yararlanarak çok daha verimli hale getirilebileceğini ve olasılıkların bu şekilde numaralandırılmasının, sistem, soruya yapılan yorumlarda belirtildiği gibi.
whuber
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.