“가장 강력한 비밀번호”


11

4 자리 PIN으로 보호되는 앱이 있는데 계정이 잠기기 전에 사용자가 5 번 로그인을 시도했습니다.

이제 고객 중 한 명이 보안을 "강화"하고 다른 솔루션을 옹호하려고합니다.

  • 6 자리 PIN
  • 아니오 "서로 같은 숫자": 예 : 11 3945 또는 39 55 94
  • NO "세 가지 실행 수 없습니다": 예 : 123 654 또는 53 789 3

이제 질문에 : 어떤 솔루션이 가장 강력합니까?

4 자리 숫자를 쉽게 계산할 수 있지만 다른 숫자는 어떻게 계산합니까?

감사!

최신 정보

당신은 당신이 원하는 것을 얻습니다-특히 수학을 사용할 때 :)

그래서 내가 요구 한 것은 두 숫자 시퀀스의 조합 수입니다.

답변과 의견을 읽으면 실제로 중요하지 않다는 것이 나에게 분명해졌습니다. 추측이 5 개인 경우 선택할 수있는 10.000 또는 ~ 800.000이 있는지는 중요하지 않습니다. 더 중요한 것은 1234와 생년월일을 배제하는 것입니다. 내 상황에서는 실제로 사용자의 생년월일이 있으므로 확인할 내용이 있습니다.

좋은 토론 감사합니다!


4
역사적 관점에서 Enigma 머신의 암호화 분석에 익숙해 져야합니다. 특히, Enigma 알고리즘은 문자를 자체적으로 암호화하지 않았습니다. 이는 엔지니어가 더 안전하게 만들 것으로 생각되었지만 기계의 보안을 크게 떨어 뜨리는 효과가있었습니다. 이것은 연합국이 수수께끼를 깰 수있는 많은 단계 중 하나였습니다. 나는 어떤 방식 으로든 암호 전문가가 아니지만 일반적인 개념은 키 공간을 최대한 크게 만들고 싶다는 것입니다.
Sycorax는 Reinstate Monica가

2
나는 이것이 여기가 아니라 암호화에 속한다고 생각합니다 .
gung-복직 모니카

2
캐스퍼 (Casper)는 보안 문제로 주로 우려하고 있습니까 (예 : 단순한 가능성 이상과 관련된 고려 사항이있는 경우). 여기에 맞습니까?
Glen_b-복원 모니카

3
이론적으로 (만약 당신이 무차별 대입 공격에만 집중한다면) 더 많은 가능성은 더 많은 보안을 의미하므로 숫자가 같지 않거나 3이 실행되지 않는 등의 제한은 가능성의 수를 줄이므로 엄격하게 약합니다. 그러나 실제로 (user777이 접촉 할 때) 사람들은 임의의 핀을 선택하지 않습니다. 사용자가 편집증보다 게으른 경우 많은 사람들이 "000000"또는 "123456"과 같은 핀을 선택할 수있어 안전성이 떨어집니다.
Gregor Thomas

2
OP의 의도가 아직 명확하지 않다는 이유로이 질문을 명확하지 않은 것으로 (일시적으로) 투표하고 있습니다. @Glen_b의 질문에 대답하는 것을 정말로 선호하므로 이것이 조합 / 확률 질문으로 취급되어야하는지 아니면 더 잘 마이그레이션되는 것으로 간주되는지 알고 있습니다.
Silverfish

답변:


8

통계 포럼에서이 질문에 대한 도움을 요청 했으므로 통계 기반 답변을 제공하겠습니다. 따라서 임의의 PIN을 무작위로 추측 할 확률 (임의의 일부 정의)에 관심이 있다고 가정하는 것이 합리적이지만 제공된 것보다 질문을 더 많이 읽습니다.

내 접근 방식은 모든 가능한 옵션을 제한하지 않고 열거 한 다음 void 옵션을 빼는 것입니다. 그러나 여기에는 포함 제외 원칙이라고하는 날카로운 구석이 있습니다. 이는 같은 것을 두 번 빼고 싶지 않은 직관적 인 아이디어에 해당합니다!

106000000999999: 각 디지트 10 옵션을 갖는다.

"인접한 두 개의 동일한"숫자는 다음과 같습니다. 여기서 A 로 표시된 위치 는 동일하고 X 는 임의의 십진수 일 수 있습니다. 이제 문자열 A A 가 6 자리로 배열 될 수있는 다른 많은 방법을 고려하십시오 . X A A X X X , X X A A X X , X X X A A XX X X X A A엑스엑스엑스엑스엑스엑스엑스엑스엑스엑스엑스엑스엑스엑스엑스엑스엑스엑스엑스엑스엑스. 따라서 특정 순서 (옵션 중 하나)의 경우 최소 조합이 있습니다 . 제한없이 10 개의 4 자리 숫자 가 있기 때문 입니다. 이제 A 에는 몇 가지 선택 이 있습니까? 우리는 10 진수로 작업하고 있으므로 10이 있어야합니다. 따라서 특정 주문에 대해 10 5 개의 선택 이 있습니다 . 이러한 순서는 5 가지이므로이 정의를 만족하는 5 × 10 5 배열이 있습니다. (보안 측면에서 이것이 의미하는 것은 PIN 공간의 엔트로피를 얼마나 줄일 수 있는지에 대한 정보 이론적 측정으로 측정 될 수 있습니다.)1041041055×105

이제 연속 숫자가 어떻게 보이는지 고려하십시오. 문자열 에서 A를 알고 있으면 B와 C *도 알고 있습니다. A가 5이면 B는 6이고 C는 7입니다. 따라서 다음 옵션을 열거 할 수 있습니다.엑스엑스엑스

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

이 시점에서 "랩핑"이 있는지 확실하지 않습니다. 있다면, 우리는 또한 포함

  • 890XXX
  • 901XXX

각 솔루션에는 위와 같은 이유로 관련 조합이 있습니다. 따라서 몇 가지 솔루션이 필요한지 세어보십시오. X A B C X X 와 같은 대체 주문을 계산해야합니다 .10엑스엑스엑스.

이제 우리는 예리한 구석에 도달했습니다. 이것이 포함 제외 원칙입니다. 6 자리 PIN 모두를 세 세트로 만들었습니다.

A. 허용되는 PIN B. "인접 숫자"로 인한 무효 PIN C. "순차 숫자"로 인한 무효 PIN

|에스|=||||||,|에스|=||||||+||,

이 문제가 발생할 수있는 몇 가지 방법이 있습니다.

  • 엑스엑스
  • 엑스

약간 더 진보 된 접근법은 기본 조합 결과와 계산의 기본 정리를 이용하지만, 독자에게 가장 작은 기술적 부담을 주므로이 방법을 선택했습니다.

1|에스|

4 자리 또는 6 자리 체계에는 매우 많은 옵션이 있으며 5 가지의 무작위 랜덤 추측도 낮기 때문에 "잠금 할 때까지 5 번"의 주름은 무단 액세스에 대한 보호 기능이 우수합니다. 성공 확률. 잘 알려진 확률 질문의 경우, 그러한 공격이 성공할 확률을 계산할 수 있습니다.

그러나 일련의 숫자 확률 이외의 다른 요소는 PIN 메커니즘의 보안에 영향을 줄 수 있습니다. 주로 사람들은 임의로 PIN을 선택하지 않는 경향이 있습니다! 예를 들어, 어떤 사람들은 생년월일, 자녀의 DOB 또는 비슷한 개인 관련 번호를 PIN으로 사용합니다. 침입자가 사용자의 DOB를 알고 있다면 아마도 그들이 시도한 첫 번째 일 중 하나 일 것입니다. 따라서 특정 사용자의 경우 일부 조합이 다른 조합보다 가능성이 높습니다.

* 당신이 열거 한 순서는 엄격히 증가하고 있으며, "3 회 실행 횟수"라고 말할 때 증가하고 감소하는지 확실하지 않습니다.


1

닫힌 수식을 얻는 것은 복잡해 보입니다. 그러나 열거하기는 매우 쉽습니다. 568 916두 번째 솔루션에 대한 가능한 코드 가 있습니다. 4 자리 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이나 암호에는 해당되지 않습니다. 이러한 0을 허용하는 정답은 568,916입니다. 그러나 관련 답변은이 제약 된 문제에서 PIN에 대한 공격이 제약 조건을 활용함으로써 훨씬 더 효율적으로 이루어질 수 있다고 생각할 것입니다.이 단순한 가능성 열거는 " 질문에 대한 의견에서 지적했듯이 시스템.
whuber
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.