기본 콘텐츠로 건너뛰기

MD5와 Brute force attack

MD5는 해시함수이다. 따라서 알고리즘에 버그가 있지 않는 이상, 해시 결과값을 알았다고 해서 원문을 알아낼 수 없다. 이런 특성을 이용하여 인증처리할 때 암호를 MD5로 변환하여 사용하는 방법이 많다.

이러한 MD5 방식은 원본 문자열을 알 수 없지만 다른 원본 문자열에 대해 동일한 해시 결과값이 분명히 존재한다. 따라서 해커는 원본문자열을 찾으려고 하지 않는다. MD5 해시 결과값을 얻어냈다면 동일 조건에서 같은 해시값을 만드는 다른 원본 문자열을 가장 무식하고 가장 위험한 방법인 brute force attack으로 얻어낸다.

예를 들어 'abcd'의 MD5 해시값이 'F0F0'이며 'hacker_killer_0029'의 MD5 해시값 역시 동일한 'F0F0'이다. 이렇다면 해커는 단순히 'abcd'라는 원본 문자열을 찾을 필요 없이 암호에 'hacker_killer_0029'를 넣으면 동일한 해시로 인해 일반적인 인증에서 무사히 통과할 것이다.

brute force attack은 문자열을 차례대로 조합하면서 일일이 대입하는 공격법인데 단점이라면 보통 시간이 많이 걸린다는 것이다. 이러한 단점은 컴퓨터가 빨라지면서 사라지고 있다. 게다가 컴퓨터가 여러개라면 병렬처리해서 작업해야할 문자열을 나눠서 대입할 수도 있다. 검색해보면 해당 논의가 엄청나고 툴도 다양하다는 것을 쉽게 알 수 있다.

결론 1. 해시값을 감춰야할 것이다.
결론 2. 젝필드 삼종세트!! ㅡ_-)b 막고 품는데 장사 없다.

댓글

이 블로그의 인기 게시물

Bash Array, Map 정리

Bash에서 Array, Map에 대한 정리. (매번 찾기 귀찮) 찾아보진 않았지만, Bash에서 Array든 Map이든 동일하게 Map(C++에서 Unordered Map)으로 동작하는 것 같다. 왜냐하면, Array의 Index가 연속하지 않아도 동작한다. 그저 Key가 0 이상의 정수인 Map이랑 비슷하게 동작한다. 예) 1, 2, 3, 9, 10 Array # 생성 declare -a empty_array declare -a ar=(haha hoho baba "long string haha hoho") # 접근 echo "ar[0]=${ar[0]}" echo "all as array=${ar[@]}" # 큰따옴표 안에서 각 원소를 따로따로 전달한다. echo "all as one=${ar[*]}" # 큰따옴표 안에서 각 원소를 문자열 하나로 합쳐 전달한다. echo "indexes=${!ar[@]}" echo "indexes=${!ar[*]}" echo "length=${#ar[@]}" echo "length=${#ar[*]}" echo "last=${ar[-1]}" echo "last=${ar[@]: -1}" # 콜론 뒤에 빈 칸이 꼭 필요하다. 옛 방식 # 현재 상황 declare -p ar #(출력) declare -a ar=([0]="haha" [1]="hoho" [2]="baba" [3]="long string haha hoho") ar[100]=hello # 인덱스를 건너 뛰어도 동작한다. declare -p ar #(출력) declare -a ar=([0]="haha" [1]="hoho" [2]="baba" [3]=...

설치한 패키지에서 RPM 추출하기

오래된 패키지를 관리할 저장소가 없어졌고, 기존 패키지로 다른 서버를 세팅해야할 일이 생겼다면 RPM의 리패키지 기능을 이용해보자. $ rpm -e --repackage [PACKAGE_NAME] 위와 같이 리패키지하면, /var/spool/repackage/ 에 생성한 RPM파일이 있다. :-)