해시 (Hash)

Gunter·2024년 1월 29일
0

Cryptography

목록 보기
5/7

해시 함수(Hash Function)는 임의 크기의 데이터를 입력으로 받아서, 고정된 크기의 데이터를 반환하는 함수.

해시 함수의 반환값은 해시 값(Hash Value)라고 부름.

암호학적 해시 함수(Cryptographic Hash Function)는 해시 함수 중 특정 성질을 만족하는 함수.

.
.
.

암호학적 해시 함수

암호학적 해시 함수의 성질

  • 제 1역상 저항성 (Preimage Resistance) : 암호학적 해시 함수 H에 대해 y가 주어졌을 때 H(x) = y 를 만족하는 x를 찾는 것이 어렵다. 이는 함수가 일발향 함수여야 함을 의미.
  • 제 2역상 저항성 (Second Preimage Resistance) : 암호학적 해시 함수 H에 대해 x가 주어졌을 때 x
    찾는 것이 어렵다.
  • 충돌 저항성 (Collision REsistance) :

.

+) 현대에는 눈사태 효과(Avalanche Effect)를 이상적인 해시 함수의 조건 중 하나로 보기도 함.
대칭키 암호 시스템의 확산과 비슷하게 입력에 조그만 변화가 발생하면, 해시값에도 큰 변화가 발생하는 성질

.
.
.

일방향 함수 ( One-way Function )

위 사진과 같이 함수 f, g를 정의하면, 함수 f와 g는 정수를 입력받아 0~999 사이의 값을 반환하는 해시함수.
f는 f(x)=17을 만족하는 x가 x=17, 1017, 2017 ... 임을 쉽게 알 수 있는 반면,
g는 g(x)=17을 만족하는 x를 알아내는 것이 어려움.

이처럼, g와 같이 임의의 인자에 대한 함수 값은 쉽게 계산할 수 있지만, 함수 값으로 부터 함수의 인자를 알아내기 어려운 함수를 일방향 함수라고 함.

암호학적 해시 함수의 사용

  • 암호학적 해시 함수는 어떤 통신의 무결성을 보이기 위해 사용.
  • 무결성(Integrity) : 수신한 데이터가 원본과 같을 때, 데이터가 무결하게 송수신되는 성질
  • 암호학적 해시 함수는 민감한 데이터를 보관할 때 사용 가능 ex) 비밀번호를 해시 값으로 저장하면 DB가 유출되어도 비밀번호의 원본이 알려질 가능성이 매우 적음

.
.
.
.

해시 함수의 종류

MD5

  • MD5 해시 함수는 임의 입력으로부터 128비트(=16바이트)의 값을 생성하는 함수.

  • 임의 길이의 입력을 블록 암호화 비슷하게 512비트 단위로 쪼갠 후 연산을 거쳐 값을 생성.

  • Python hashlib 모듈에는 MD5를 포함한 다양한 해쉬 함수들이 구현되어 있음.

SHA256

  • 미국 표준 기술 연구소(NIST)에서 만들어낸 해시 함수.
  • 취약점이 발견되지 않아 해시가 필요한 대부분의 곳에서 사용되고 있음
  • 256비트(=32바이트)의 출력을 내는 함수.
  • MD5에 비해 길이가 2배로 늘어나 충돌 저항성이 크게 증가

.
.
.

MAC (Message Authentication Code, 메세지 인증 코드)

MAC은 데이터와 함께 보내는 추가적인 정보로, MAC을 통해 데이터의 무결성을 보장할 수 있고 또 현재 통신 중인 상대방이 위장한 공격자가 아니라는 사실 또한 알아낼 수 있다.

MAC을 만들어내기 위해선 메시지와 키가 필요.
키는 송신자와 수신자 사이에서 사전에 공유되어이써야 함.

송신자가 수신자에게 메시지를 보낼 때, 메시지와 키를 이용해 계산된 MAC 값을 같이 보냄.
수신자는 기존에 알고 있던 키를 이용해 수신한 메시지의 MAC을 계산하고, 이를 전송받은 MAC과 일치하는지 비교


.

HMAC

HMAC은 해시 함수를 기반으로 하는 MAC.
실제 표준으로 정의된 HMAC은 키의 길이, 블록의 길이를 인자로 하는 복잡한 함수.
H, M, AC 함수가 있다고 하면,

HMAC(K, M) = H(K||M)

||는 비트 배열을 연결하는 연산자. ex) 01 || 110 = 01110
이 함수는 키와 메시지를 붙인 것의 해시 값으로 HMAC을 생성.

HMAC을 사용하면, 메세지를 도청당해도 역상 저항성으로 인해 공격자가 HMAC에 사용된 키를 알아낼 수 없으며, 메세지를 위조하면 위조한 메세지에 대한 올바른 HMAC을 생성할 수 없음.

0개의 댓글