본문 바로가기
모의해킹 침해대응 과정/본 과정

암호학 / 해시(Hash)함수

by 알거음슴 2021. 6. 30.

해시 함수

파일의 지문이라고도 함. 파일 또는 메시지를 입력받아 고정된 길의의 해시을 구하는 알고리즘에 따라 해당 객체의 대한 고유해시값을 출력하는 함수, 주로 메시지의 오류 또는 변조를 탐지할 수 있는 무결성을 제공하기 위헤 사용된다.

즉 어떠한 객채의 입력값이 아주 일부만 변경되도 고정된 해시값의 출력결과는 다르기에 변조여부를 탐지할 수 있다.

 

 

해시 함수의 성질

1) 고정된 길이의 출력

어떠한 크기의 메시지라도 크기에 관계없이 입력으로 사용할 수 있다, 또한 어떠한 메시지를 입력으로 주더라도 해시함수는 짧은 해시값을 생성한다.

2) 빠른 계산 속도

해시 값의 계산은 고속이어야 한다, 메시지가 길어지더라도 해시값을 구하는 시간이 일부 길어지는건 어쩔수 없으나 물리적인 현실 시간 내에서 계산할 수 있어야 한다.

3) 메시지가 다르면 해시값도 다르다

메시지의 내용중 단 1bit라도 변화하면 해시값은 매우 높은 확률로 다른값으로 출력을 한다.

4) 일방향성을 갖는다

해시값으로부터 메시지를 역산할수없다, 메시지 -> 해시 로 변화하는건 간단히 진행할 수 있으나 해시 -> 메시지로 역산하는것은 불가능하다

 

무결성 검사

예시로 어제 저장한 파일과 오늘의 파일을 비교 공격자의 의한 변조가 있었는지 등의 여부로 활용할 수 있음. 전일 저장된 파일과 당일 불러온 파일의 해시값이 동일하다면 무결성을 보장받을 수 있다.

 

 

해시함수의 활용

1. 소프트웨어의 변경 검출

자신이 입수한 소프트웨어가 변경 되었는지를 확인하기 위해 일방향 해시 함수를 사용하는 방법

응용 소프트웨어를 각종 미러 사이트를 통해서 베포가 된다고 할때 공격자에 의해 파일이 변조가 일어날 수 있다. 이 경우를 위해 최초 제작자가 베포한 소프트웨어와의 해시값을 비교하여 무결성의 대해서 검사할 수 있다.

 

2. 패스워드를 기초로 한 암호화

패스워드를 기초로 한 암호화 PBE(Password Based Encryption)에서도 활용 PBE에서는 패스워드를 섞은 결과의 해시값을 구해 그것을 암호화 키로 사용하여 Dictionary Attack등을 방어하는데 활용된다.

 

3. 메시지 인증 코드 (MAC, Message Authetication Code)

송신자와 수신자만 공유하고 있는 키와 메시지를 혼합하여 값을 계산한 값 통신중의 오류 또는 수정 그리고 Spoofing을 검출하는데 활용됨 SSL/TLS 등에 활용

 

4. 디지털 서명

현실 사회의 서명(사인)이나 날인에 해당하는 온라인 상의 서명 처리시간 단축을 위해 일방향 해시 함수를 사용해서 메시지의 해시 값을 일단 구하고, 그 해시 값에 대해 디지털 서명을 수행

 

5. 의사난수 생성기(PRNG)

암호 기술에 필요한 난수 "과거의 난수열로부터 미래의 난수열을 예측하는 것은 사실상 불가능"이라는 성질이 필요

그 예측 불가능성을 보증하기 위해 일방향 해시 함수의 일방향성을 이용

 

6. 일회용 패스워드

일회용 패스워드, 원타임 패스워드(One-Time Password)

정당한 클라이언트인지 아닌지를 서버가 인증할 때에 사용 일방향 해시 함수를 써서 통신 경로 상에 흐르는 패스워드를 1(one-time)만 사용하도록 고안 패스워드가 도청되어도 악용될 위험성이 없다.

 

 

해시 함수의 종류

1. MD5

Rivest가 1991년에 만든 일방향 해시함수, 128bit의 해시값을 가지고 있다.

아쉽게도 현제 내부 구조의 일부에 대한 공격방법이 몇가지 발견되어 사용을 권하지 않는 추세.

 

2. SHA(Secure Hash Algorithm)

1) SHA-1 (충돌 발견됨)

 입력: 메시지 길이 상한 264bits 미만

 출력: 160 bits 해시값

 블록크기: 512 bits

2) SHA-224,256 (충돌 발견됨)

 입력: 메시지의 길이 상한 264 bits 미만

 출력: 256 bits 해시 값(32 bytes)

3) SHA-384

 입력: 메시지의 길이 상한 2128 bits 미만

 출력: 384 bits 해시 값(48 bytes)

4) SHA-512

 입력: 메시지의 길이 상한 2128 bits 미만

 출력: 512 bits 해시 값(64 bytes)

 

[참고] 일방향 해쉬함수의 대한 공격

충돌 공격(https://ko.wikipedia.org/wiki/충돌_공격)

역상 공격(https://ko.wikipedia.org/wiki/역상_공격)

생일 공격(https://ko.wikipedia.org/wiki/생일_공격)

무차별 대입 공격(https://ko.wikipedia.org/wiki/무차별_대입_공격)

레인보우 테이블(https://ko.wikipedia.org/wiki/레인보_테이블)

부채널 공격(https://ko.wikipedia.org/wiki/부채널_공격)