본문 바로가기

Server Infra/Security

보안 스터디 - 해시 함수 (2/?)

728x90

이전 글에서 이야기 한것처럼 이번 장에서는 해시 함수(Hash Function)을 정리해보고자 한다. 우선 아래의 두 유투브를 보고 오자

https://www.youtube.com/watch?v=67UwxR3ts2E 

https://www.youtube.com/watch?v=HraOg7W3VAM 

사실 해시 함수, 해시 테이블이란건 Key-Value 기반의 데이터 스토리지 또는 Map, HashMap 객체를 쓰는 개발자들이라면 알게 모르게 모두들 사용하고 있는 기법이다. 다만 암호화에서는 어떤 프로그램을 다운로드 할때 sha256sum이라는 파일을 다운 받는 경우가 있을것이다. 이건 해당 파일의 무결성을 확인하기 위해 digest를 비교하여 파일이 무결한지 확인하기 위해 서로 문자열을 비교한다. 

 

아마 파일 Up/Down load를 하는 프로그램 또는 서비스를 개발했다면 OpenSSL을 사용해서 아래의 명령어를 엄청 수행했을 것이다.

openssl dgst -sha256 download_file_path

그렇다면 해시 함수가 무엇인가에 대해 정리를 시작해 보겠다.

해시 함수란?

해시 함수란 대표적인 단방향 암호화에서 사용되는 기법이다. 이 해시 함수는 3가지 보안 속성을 가지고 있다.

  1. 역상 저항성(pre-image resistance)
    1. 이것은 단방향 암호화 방식의 특징으로 역 함수를 만들 수 없는 성질을 의미한다.
  2. 제2 역상 저항성(second pre-image resistance)
    1. 위에서 digest에 대해 간략하게 넘어갔다. 이 속성은 digest를 만드는 또 다른 입력을 찾을 수 없다는 뜻이다.
  3. 충돌 저항성(collision resistance)
    1. 아무도 동일한 출력을 만드는 다른 두가지 입력 방식을 생성 할 수 없도록 보장한다는 의미다.

따라서 단방향 암호화를 사용하는 경우 입력 값을 해시 암호화 하여 암호화로 출력된 digest 값을 비교하는 식으로 서로의 메시지를 확인한다. 다만 이런 속성으로 몇가지 제약이 있다. 첫번째로 이 암호화 알고리즘을 공개되어 있기 때문에 공격자가 무작위로 암호화 하여 비교하는 방식으로 평문(PlainText)을 찾을수 있다는 의미다. 따라서 최근 sha128 같은 경우는 사실상 보안이 취약하다는 이야기가 있다.

자 그렇다면 표준화된 해시 함수를 알아보자

지금까지 sha 알고리즘에 대해서만 이야기 했지만 CRC32, MD5 같이 다양한 해시 함수가 있다. 물론, 위에서 이야기 한듯 과거에 나옴 암호화 알고리즘이라서 sha-1과 md5는 현재 뚫린것으로 보고 있다. 따라서 개선된 알고리즘은 sha-2와 sha-3를 알아보겠다.

SHA-2 Hash Function

sha-2는 4가지 버전으로 나뉜다. 아마 sha224 sha256 sha384 sha512등으로 알고 있을것이다. 주로 sha256을 사용하는데 조금 보안이 까다로운 곳에서는 sha512를 사용하기도 한다. 이 알고리즘의 특징음 압축 함수이다. 암호화를 하는 대상 외의 다른 데이터를 더 받아 한쪽 입력의 크기에 해당되는 값을 출력한다.

이때 사용되는 연산이 우리가 전산시간에 지겹도록 배운 XOR 연산이다.

데이비스-메이어 구조를 사용한 압축 함수 도식화

sha256은 위의 방식을 지속적으로 반복하여 메시지를 해시하는 merkle-damgard 구조다. 자세한 방식은 역시 위키피디아를 보자

https://en.wikipedia.org/wiki/Merkle%E2%80%93Damg%C3%A5rd_construction

 

Merkle–Damgård construction - Wikipedia

From Wikipedia, the free encyclopedia Method of building collision-resistant cryptographic hash functions In cryptography, the Merkle–Damgård construction or Merkle–Damgård hash function is a method of building collision-resistant cryptographic hash

en.wikipedia.org

SHA-3 Hash Function

사실 SHA-2에서 사용하는 merkle-damgard 구조는 내부에서 message block에 length padding 추가하는 방식으로 길이 확장 공격(length extension attack)에 취약하다. 그래서 sha-3이라는 해시 함수가 나왔다.

sha-3는 순열 위에 구축된 암호화 알고리즘이다. 참고로 이런 알고리즘 방식은 과거 2차세계 대전시 추축국인 독일에서 이미 구축해서 실제로 사용했었다. https://ko.wikipedia.org/wiki/%EC%97%90%EB%8B%88%EA%B7%B8%EB%A7%88_%EA%B8%B0%EA%B3%84

 

에니그마 기계 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 배전반 에니그마의 회전자(Roter) 에니그마(독일어: Enigma)는 회전자로 작동하는 암호 기계의 한 종류로, 그 이름은 고대 그리스어로 '수수께끼'를 뜻하는 아이니

ko.wikipedia.org

sha-3은 물론 위의 기계처럼 설계 되어 있진 않다. 같은 순열 방식 위에 있지 sha-3은 keccak-f라는 특정 순열을 기반으로 한다. 이 함수는 데이비스 메이어 구조와 동일하기 특정 순열 함수 사이에 XOR연산을 수행한다. 

https://en.wikipedia.org/wiki/SHA-3

 

SHA-3 - Wikipedia

From Wikipedia, the free encyclopedia Set of cryptographic hash functions SHA-3(Keccak)DesignersGuido Bertoni, Joan Daemen, Michaël Peeters, and Gilles van Assche.First published2016; 7 years ago (2016)Series(SHA-0), SHA-1, SHA-2, SHA-3CertificationFIPS

en.wikipedia.org

따라서 구조를 보자면 위의 위키에 나온 그림과 같이 아래의 구조 형태로 구성된다. 이 구성을 보면 스펀지와 같이 XOR연산을 수행해 흡수하고 출력값을 생성하기위한 짜내기(squeezing)를 수행하여 스펀지 구조로라고도 이야기 한다.

 

자 그렇다면 이란 단방향 암호화는 어디서 사용할 수 있을지 알아보자. 파일의 체크섬을 확인하는 방법도 있지만 개발하는 개발자들은 대표적으로 인증 서비스(로그인 서비스) 개발할때 계정의 암호를 저장하고 암호를 인증하는 방식에서 자주 사용할듯 하다.

  1. 사용자가 비밀번호 입력
  2. 비밀번호 암호화
  3. 암호화된 비밀번호를 데이터와 비교

여기까지 단방향 암호화 해시 함수에 대해 알아보았다. 다음은 MAC에 대해 알아보려 한다. MAC Address가 아니다 Message Authentication Code이다. 아마 Web 개발 하는 사람들이라면 다들 알고 있는 Cookies에 대한 내용일듯 하다.

 

이 책 공부중입니댜. https://product.kyobobook.co.kr/detail/S000200629765

728x90