브루트 포스(Brute-Force)
Brute는 짐승같은, 난폭한이라는 의미이고, Brute-force는 난폭한 힘, 폭력이라는 뜻이다.
암호학에서도 무차별 대입 공격이라고 부르고, 실제로 암호학에서도 쓰이는 방법이다. 간단하게 말해서
문제를 해결하기 위해 모든 가능한 경우의 수를 직접 조합 및 대입하여 해보는 방법이라고 할 수 있다.
브루트 포스의 예
쉽게 예를 들어 집 비밀번호는 4자리 숫자로 이루어져 있고 비밀번호가 9999라면
도둑은 0001 ~ 9999까지 하나하나 비밀번호를 입력해야하는 것이 브루트 포스의 쉬운 예라고 할 수 있다.
브루트 포스의 단점
위의 도둑의 예제를 다시 들자면 0001 ~ 9999까지의 비밀번호를 입력하는데 시간은.. 사람마다 다르겠지만 어마어마하게 많은 비용이 발생한다.
브루트 포스의 단점의 예
프로그래밍 상으로 1 ~ 100까지의 합을 구하는 것은 금방 구할 수 있지만 단위가 커질 수록 자원가 시간의 소모가 기하급수적으로 늘어날 수 있다. 또하나의 예를 들자면 5자리의 숫자가 암호가 있다.
암호의 수를 조합하려면 아래와 같은 방식으로 For문을 돌려야 하며 비밀번호 패턴에 따라 문자(대소문자) + 특수문자 + 숫자를 조합해야 하니 자리수가 1개만 늘어나도 자원의 소모가 클 수밖에 없다.
아래와 같이 5자리의 수를 구하기 위해선 For문을 5번이나 돌려야하는데.... 그 시간은 ..?
for(int i=0; i <= 9; i++) { for(int j=0; j <= 9; j++) { for(int k=0; k <= 9; k++) { for(int a=0; a <= 9; a++) { for(int b=0; b <= 9; b++) { } } } } }
보안상에서의 브루트 포스
브루트 포스 공격은 무차별 대입 공격이라는 것으로 모든 암호 조합을 무차별 시도하는 기초적인 해킹 공격이다.
한 가지 예를 들어 모든 비밀번호는 대부분 해쉬 암호화되어 알 수 없지만 비밀번호의 조합은 회원 가입을 통해 알 수 있으니 패턴과 자원 시간만 알 수 있다면 100% 해결할 수 있다.
정리
브루트 포스는 모든 경우의 수를 하나하나 직접해야하는 노가다적인 알고리즘이다.
출처 :
https://steemkr.com/kr-dev/@gyeryak/easyalgo-2-bruteforce
https://namu.wiki/w/%EB%B8%8C%EB%A3%A8%ED%8A%B8%20%ED%8F%AC%EC%8A%A4
'알고리즘 및 자료구조 > 이론' 카테고리의 다른 글
빅오 표기법 개념과 예제 (0) | 2018.10.01 |
---|