2017년 1월 17일 화요일

Brute Force Attack, Frequency Analysis

Brute Force Attack

다음은 무차별 대입공격(Brute Force Attack)에 대한 코드로 126개의 알파벳을 생성하는 코드이다. 예를 들어 카이사르 암호 도구와 같은 경우는 문자열들을 하나씩 밀어서 분명 문장내에서 특정 내용을 확인할 수 있으며, 참고 하고 있는 화이트 해커를 위힌 암호화 해킹에서의 문자열을 입력하여 코드를 실행하면 다음과 같은 결과를 확인할 수 있다.

def makeDisk(k):
    dec_disk={}
    for i in range(26):
        alp = (i+k)%26 + 65
        dec_disk[chr(alp)] = chr(i+65)
    return dec_disk

def caesar(msg, key):
    ret = ''
    msg = msg.upper()
    disk = makeDisk(key)
    for c in msg:
        if c in disk:
            ret += disk[c]
        else:
            ret += c
    return ret

def attack(msg):
    for key in range(1, 26):
        decmsg = caesar(msg, key)
        print('SHIFT[%d]: %s' %(key, decmsg))

if __name__ == '__main__':
    msg = 'UGAMKZMBSMGQAVCUJMZBPZMMNQDMWVMBPZMM'
    attack(msg)

다음 코드를 실행하면 아래와 같은 결과 값을 얻을 수 있으며, 해당 내용 중 해독된 의미를 확인할 수 있다. SHIFT[1]: TFZLJYLARLFPZUBTILYAOYLLMPCLVULAOYLL SHIFT[2]: SEYKIXKZQKEOYTASHKXZNXKKLOBKUTKZNXKK ... SHIFT[8]: MYSECRETKEYISNUMBERTHREEFIVEONETHREE ... SHIFT[24]: WICOMBODUOISCXEWLOBDRBOOPSFOYXODRBOO SHIFT[25]: VHBNLANCTNHRBWDVKNACQANNORENXWNCQANN [Finished in 0.0s]

이를 통해서 확인할 수 있는 것은 8만큼 이동한 가이사르 암호문인 것을 확인할 수 있다.

이럴 때 사용하면 진짜 유용하겠군! 흠..암호란..

빈도수 분석(Frequency Analysis)

문자 확률 문자 확률
A 0.082 N 0.067
B 0.015 O 0.075
C 0.028 P 0.019
D 0.043 Q 0.001
E 0.127 R 0.060
F 0.022 S 0.063
G 0.020 T 0.091
H 0.061 U 0.028
I 0.070 V 0.010
J 0.002 W 0.023
K 0.008 X 0.001
L 0.040 Y 0.020
M 0.024 Z 0.001

유독 확률이 높은 문자열(0.05이상): A, E, H, I, N, O, R, S, T

빈도수 분석은 우선, 암호화된 문자열의 빈도수를 확인한 후 가장 많이 사용된 문자열을 E로 다음을 T로 생각하여 복원시킨다. TE하면 생각나는 영어면! THE가 있을 것이다. 그럼 H에 해당 하는 값을 확인할 수 있고 하나하나 유추가 가능하다.

하지만 브포나 빈도수 분석은 불규칙적인 암호문에서는…?ㅠㅠ 여튼 그래도 이런 방법이 있구나 하고 넘어가자! 이단 여기서는 위에 빈도수 표가 있다는 것을 확인할 수 있었고 추후에 사용할 일이 있지 않을까 싶다!

해쉬 값을 크랙하기 좋은 사이트 : crackstation

대상 사이트를 들어가면 15기가 혹은600메가에 달하는 해쉬값 데이터를 가지고 있는 파일을 공유하고 있다.

댓글 없음:

댓글 쓰기