HeYStRanGeR
article thumbnail

 

(2022.04.09)

네보실 4주차 실습 정리

 


Hash function

: 가변길이의 데이터를 입력받아 고정길이의 데이터로 변환하는 것

(가변길이의 데이터는 적절하게 padding 된다)

 

- 일방향 함수이므로, 해시값을 통해 원본 데이터를 알아낼 수 없다.

- 입력데이터가 달라지면, 해시 값도 달라진다.

---> 무결성을 보장하는데 주로 이용 (암호화보다는 메시지의 위변조 확인 용도)

 

 

hash funciton 특징

  1. 압축 및 고정 길이
  2. 계산 용이성 및 확장성
  3. 일방향성) 역상 저항성
  4. 충돌 저항성

 

hash의 사용사례

  1. password 비교
  2. 파일 무결성 증명
  3. git에서 자료구조 차원에서 SHA-1 사용

 

암호학적 해시 vs 비 암호학적 해시

1. 암호학적 해시

  - 역상 저항성과 충돌 저항성이 증명된 해시 함수

  - MAC, 전자서명에 사용

 

2. 비암호학적 해시

  - 암호학적 안성정이 보장되지 않는 해시 함수

  - 자료구조(해시 테이블), 오류 검출, CRC 등 에 사용

 

 

hash collision 해시 충돌

: 해시 함수가 서로 다른 두 입력 값에 대해 동일한 해시 값을 갖는 현상

 

가변길이의 데이터를 입력받아 고정 길이를 출력하는 해시 함수는 당연하게도 충돌이 발생하게 된다.

==> 비둘기 집 원리  : N개의 비둘기 집과 N+1 마리의 비둘기가 있을 때, 모든 비둘기가 집에 들어가 있다면 어느 비둘기집은 반드시 2마리 이상의 비둘기가 있다.

 

 

 

hash function's resistance

(+ 역상 preimage: Hash(M)=H를 만족하는 M을 해시값 H의 역상이라고 함)

 

  • 제 1 역상저항성
  • 제 2 역상저항성 (약한 충돌저항성)
  • 충돌 저항성 (강한 충돌저항성)

---> 역상을 찾는 것보다 충돌을 찾는 것이 더 쉽다.

 

 

 

attack for hash

- birthday paradox 를 통한 birthday attack이 해시함수 공격에 많이 이용된다. (충돌을 찾기 위한 해시 값의 개수는 생각보다 많지 않다)

- 무차별 공격, 일치 블록 연쇄 공격, 중간자 연쇄 공격 등등

 


MD5 (Message Digest alogorithm 5)

- 128 bit hash 값 생성하는 hash 함수

- 해시 충돌을 찾아내는 방법이 발견되어 비암호학적 해시 함수로 취급

 

 

 


SHA  (Secure Hash Algorithm)

- 미연방 정부 기관에서 사용하기 위해 NIST 가 표준화한 해시 함수

 


 

MAC (Message Authentication Code) - 메시지 인증코드

- 메시지의 무결성을 보장한다 --> 메시지가 변경되지 않음을 확인한다

- 발신자의 인증을 제공한다.

- but, 메시지의 기밀성을 보장하지 못한다. --> 재생공격, 중간자 공격에 취약하다.

(재생공격을 방지하기 위해서 순서번호, 타임스탬프, 난수를 이용한다.)

 

 

HMAC (Hash-based Message Authentication Code) 

- MAC 알고리즘으로 해시함수를 사용하는 것이다.

- 키 있는 해시함수를 사용하여 무결성과 인증성을 확인할 수 있다.

- HMAC에서 메시지길이가 충분히 크다면, HMAC은 안전하다.

 

--> 키 있는 해시 함수 (keyed-hash function)

해시함수는 공개되어 있어서 아무나 해시값을 생성할 수 있다. -> 특정값 M은 반드시 특정값 H로 해싱됨을 알 수 있다.

그리하여, 아무나 동일한 해시값을 생성해 볼 수 없도록 하기 위해서 나온 것이 키 있는 해시함수이다.

원본 데이터에 key를 더하여 해시값을 출력한다.

단순히 key를 덧붙여서 해시값을 생성하는 것이 아니라 별도의 운영방식이 존재한다. (RFC 2104)

 


추가 정리

 

 

 

 

 

 

 

728x90
profile

HeYStRanGeR

@HeYStRanGeR

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!