파이썬 실전/브루트 포스

파이썬 실전) 브루트 포스 프로그램 0. 브루트 포스의 뜻

마리사라 2021. 3. 10. 20:41
반응형

이번시간부터는 파이썬에서 브루트 포스 알고리즘을 이용하는 방법에 대해서 글을 써보려고 합니다.


1. 브루트 포스?

 

2G폰 시절 비밀번호 입력 화면

 

과거 2G폰을 사용했던 사용자라면 위와 같은 화면이 기억나실겁니다. 그때 비밀번호는 4자리의 암호였으며, 친구 휴대폰의 비밀번호를 풀기 위해서 0000부터 9999까지의 경우의 수를 한번씩 입력해서 비밀번호를 풀려고 했던 기억이 있습니다.

 

 

버튼식 자물쇠

 

또는 친구의 버튼식이나 다이얼식 자물쇠를 사용하는 사물함을 열기 위해 가능한 경우의 수를 하나씩 전부 대입해서 자물쇠를 풀었던 기억이 있습니다.

 

이처럼 그 어떤 비밀번호라도 모든 경우의 수를 전부 대입하게 되면 반드시 비밀번호는 풀립니다. 이러한 방식을 브루트 포스 공격(Brute - 난폭한, Force - 힘 / 난폭하게 힘으로 때려맞추는 공격기법)이라고 하며, 번역하면 무차별 대입 공격이라고 합니다.


2. 특징

브루트 포스 기법은 "언젠가는 뚫는다" 라는 특징이 있습니다. 0000부터 9999까지 있는 휴대폰 비밀번호에서 1만개의 비밀번호를 전부 입력한다면 어느 하나에서는 반드시 뚫리는 것 처럼, 브루트 포스 기법은 가장 확실하고 정확한 기법으로 말할 수 있습니다.

 

브루트 포스 기법의 두 번째 특징은 "병렬화가 쉽다" 라는 특징이 있습니다. 친구 4명이 0000부터 9999까지 있는 비밀번호를 한명은 0000부터 2499까지, 한명은 2500부터 4999까지, 또 한명은 5000부터 7499까지, 마지막 한명은 7500부터 9999까지 입력할 수 있다면 비밀번호를 뚫는 시간은 1/4로 줄어들 것 이며, 이를 친구 10명이서 하면 1/10으로 줄어들게 될 것입니다.

 

물론 브루트 포스 기법이 장점만 있는것은 아닙니다. 브루트 포스의 단점적인 특징으로 가장큰 문제점이 바로 "자원의 문제" 가 있습니다. 만약 제가 손가락이 매우 빨라서 8자리의 비밀번호를 입력하는데 1초밖에 걸리지 않는다고 가정하겠습니다. 이러한 사람이 1만명이 있다면 초당 1만개의 비밀번호를 시도할 수 있습니다. 비밀번호는 영어 대문자와 소문자 숫자가 가능하므로 대문자 26개 + 소문자 26개 + 숫자 10개로, 총 62가지의 조합으로 이루어집니다. 비밀번호가 8자리이니 가능한 비밀번호의 조합은 62^8이며, 이는 약 218조개의 조합을 가집니다. 즉, 1만명에서 해당 비밀번호를 모두 시도하려면 218억초의 시간이 걸리며, 이는 약 692년이 걸리는 시간입니다.

 

브루트 포스는 시간과 자원만 충분하다면 반드시 비밀번호를 찾을수 있는 기법이지만, 현실적으로 시간과 자원은 한계가 있기 때문에 실제 해킹에서는 잘 사용되지 않는 기법입니다.


3. 브루트 포스 프로그램

이번 브루트 포스 프로그램은 실제로 해킹하는데 사용하려고 만드는 목적은 아닙니다. 이번 기획의 목적은 브루트 포스의 원리를 이해하고, 여러 방법으로 브루트 포스를 시행할 수 있으며, 최종적으로는 자신의 비밀번호를 뚫는데 얼만큼의 시간이 걸리는지를 확인할 수 있는 프로그램이 될 것입니다.

반응형