정보보안

해시(Hash)란?

닉네임못짓는사람 2022. 1. 29. 21:03
반응형

Hash?


해시라는 것은 임의의 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑한 것을 말한다.

이 과정에서 원본 데이터를 키(Key), 매핑하는 과정을 해싱(Hashing), 결과물로 나온 데이터를 해쉬값(Hash value)라고 한다.

또한 이렇게 데이터를 해싱하는 함수를 해시 함수(Hash function)이라고 한다.

 

해시의 특징은 아래와 같은 것들을 말할수 있다.

  1. 임의 길이의 데이터로부터 고정된 길이의 해시값을 계산한다.
  2. 해시값을 고속으로 계산할 수 있다.
  3. 일방향성을 갖기 때문에(단방향 암호화) 해시값으로부터 Key를 역산할 수 없다.
  4. Key가 다르면 해시값도 달라져야 한다.
    (서로 다른 Key가 같은 해시값을 가지는 것을 '충돌'이라고 한다.)

Hash function


위에서 말했듯이 해시 함수는 Key를 해시값으로 바꾸는 함수인데, 예시로 아래의 두 함수를 들 수 있다.

 

1. MD-5

MD는 Message Digest의 약자로, 입력된 데이터를 각 512비트의 블록들로 나누어 처리하여

128비트 길이의 해시값을 출력하는 해시함수이다.

1996년, 2004년 당시 MD5의 결함들이 발견되었고,

2006년에는 노트북 한 대의 연산 능력으로 1분 안에 충돌을 발견할 수 있는 알고리즘이 개발되었다.

현재는 MD-5를 보안을 위해 사용하는것은 권장되지 않는다.

 

2. SHA

Sha는 Secure Hash Algorithm의 약자로, 입력 데이터를 나누는 블록의 크기,

계산되는 해시값의 크기, 최대 입력 데이터 길이, 단계 수 등이 다른 여러 가지의 버전이 있다.

SHA-1의 경우 이미 보안상 취약점이 발견되어 사용을 지양하는것을 추천하고,

SHA-256또는 SHA-512를 사용하는 것이 권장된다.

https://passwordsgenerator.net/sha256-hash-generator/

 

SHA256 Hash Generator Online

This online tool allows you to generate the SHA256 hash of any string. SHA256 is designed by NSA, it's more reliable than SHA1. Enter your text below:

passwordsgenerator.net

위 사이트에서 SHA256해시 함수를 사용해 볼 수 있다.

 

응용 분야


해시 함수는 같은 Key에서 항상 동일한 해시값을 계산해내기 때문에 이를 통해 여러 가지 분야에서 활용될 수 있다.

  1. 무결성 점검
  2. 소프트웨어 변경 검출
  3. 메시지 인증 코드
  4. 전자서명

 

해시에 대한 공격


1. 무차별 공격

해시 함수의 `약한 충돌 내성`을 깨고자 하는 공격 기법이다.

약한 충돌 내성이란?

공격자가 원본 Key와 이를 통해 계산된 해시값을 가로챈 뒤,

h(Key) = h(key`)를 만족하는 key`를 생성하여 데이터를 위조하는 것이 어렵다는 특성이다.

무차별 공격이라는 이름처럼 자신이 원하는 해시값을 계산해낼 때 까지

모든 Key를 대입시켜 계산시키는 공격 기법을 말한다.

 

2. 일치블록 연쇄공격, 사전 공격

무차별 공격에서 말한 Key`를 사전에 다양하게 만들어 놓은 뒤,

공격하고자 하는 Key의 해시값과 대조하여 일치하는 Key`를 골라서 사용하는 공격 기법이다.

MD-5, SHA-1, SHA-2등의 해시 함수를 사용해서 만들어낼 수 있는

해시값을 대량으로 저장해 놓은 `레인보우 테이블`이라는 것이 존재한다.

 

3. 중간자 연쇄공격

전체 해시값이 아니라 해시 중간의 결과에 대한 충돌쌍을 찾는 공격기법이다.

특정 포인트를 공격 대상으로 한다.

 

4. 생일 공격

특정 해시값을 생성하는 Key를 구하는 것이 아니라, 어떤 해시값이든

서로 동일한 해시값을 생성하는 2개의 Key를 구하는 것이다.

해시 함수의 `강한 충돌 내성`을 깨고자 하는 공격이다.

강한 충돌 내성이란?

공격자가 동일한 해시값을 가지는 서로 다른 2개의

Key를 구하지 못하도록 하는 특성이다.

충돌이 발생할 확률이 약한 충돌 내성의 경우보다

상대적으로 높기 때문에 강한 충돌 내성이라고 한다.

 

Salt


위에서 말한 사전 공격에 대한 대응방법으로 사용할 수 있는 방법이다.

해시값을 계산하려는 원본 Key에 임의의 데이터를 추가로 덧붙여서 해시값을 계산하는 것을 말한다.

여기서 임의의 데이터를 덧붙이는것을 소금을 치는것같다고 하여 Salt라고 부른다.

사용 예로는 사이트 등에 로그인할 때 아이디와 패스워드를 입력하게되는데,

이때 패스워드의 유출을 막기 위하여 원본 패스워드의 해시값을 계산하여 관리한다.

이렇게 계산되는 해시값을 공격자의 사전 공격으로부터 보호하기 위하여

원본에 salt를 덧붙여서 해시값을 계산하여 보관한다.

 

즉, 본래는 123456이라는 Key에서 해시값을 계산한다고 하면

salt, 임의의 데이터 abc를 덧붙여서 123456abc라는 Key에서 해시값을 계산하도록 한다.

 

레인보우 테이블과 같이 해시값을 미리 계산해놓는 테이블을 가진 공격의 경우

Key가 클 수록 해시값을 계산하는 시간도 오래 걸리기 때문에, salt를 덧붙여 Key자체를 크게 만듬으로써

이러한 공격 기법에 대한 대응책이 될 수 있다.

반응형

'정보보안' 카테고리의 다른 글

Stack Buffer OverFlow 공격  (0) 2020.11.14
레이스 컨디션(Race Condition) 공격  (0) 2020.11.07
Buffer OverFlow 대응방안  (1) 2020.10.04