Crypto

HASH에 관하여

총알 2022. 11. 3. 11:30
728x90

HASH란 메시지의 위변조를 방지하기위해 데이터를 읽어 어떠한 값을 출력하는 것을 말한다.

이러한 역할을 수행하기위해 HASH함수를 구현해야 한다.

 

HASH 함수는 다양하게 만들 수 있는데 예를 들어 test라는 문구가 있다고 가정해보자.

아스키표를 참조하면 0x74 + 0x65 + 0x73 + 0x74 = 0x01c0(448)이라는 값이 나온다.

여기서 256으로 나눠서 나머지 값을 활용할 수도 있다. 만드는 방법은 다양하다.

하지만 이렇게 단순한 방법으로 만들게 되면 위변조에 취약하다.

따라서 HASH함수의 경우 아래의 조건을 충족해야 한다.

1. HASH함수는 메시지의 위변조를 막아야 하며, TLS의 경우 메시지를 주고 받을 때마다 호출된다. 따라서 속도가 빨라야 한다.

2. 메시지를 바꿨을 경우 같은 HASH값을 만들 수 없어야 한다.

3. HASH값을 활용해 원래 데이터로 복원할 수 없어야 한다.

 

HASH함수의 특징으로는 아래와 같다.

1. 데이터가 같으면 반환되는 HASH값도 같아야 한다.

2. HASH값의 길이는 데이터에 상관없이 일정해야 한다.

3. 서로 다른 데이터일 경우 동일한 HASH가 나올 확률은 매우 낮아야한다.

 

그럼 이어서 HASH의 종류를 알아보자

주요 알고리즘으로는 MD5/SHA1, SHA2(SHA-224, SHA-256, SHA-384,SHA-512, SHA-512/224, SHA-512/256),
SHA3(SHA3-224, SHA3-256, SHA3-384,SHA3-512) 등이 있다.

 

1. SHA1

SHA1의 경우 임의의 길이의 데이터를 160비트의 출력 데이터로 바꾸는 것이다. SHA1은 서명문 생성을 위한 알고리즘으로 현재 인터넷 보안 프로토콜과 공개키 인증서에서 적용되고 있다. 현재 암호화를 공부하는 이유로 TLS를 활용한 프로젝트를 진행하기 위해서인데 TLS이외에도 IPSec, SMIME, SSH 등 많은 곳에 활용한다고 한다. 

특징은 아래와 같다.

1. 데이터를 512비트 블록 단위로 처리하며 160비트의 출력값을 생성한다.

2. 데이터 길이 상한은 2⁶⁴

3. 512 비트 단위로 불록을 처리하기 때문에 512비트 정수배로 만들기 위해 피딩이 필요하다.

 

2. MD5

MD5는 임의의 길이의 데이터를 입력받아 128비트의 출력 데이터로 바꾸는 것이다. 입력데이터는 512 비트 블록단위로 처리하며 512비트로 떨어지지 않는다면 패딩을 해줘야한다. MD5의 경우 1996년 설계상의 결함이 발견되었고 이를 고안하기위한 알고리즘이 앞서 설명한 SHA1이다. 그래서 암호학자들은 MD5대신 SHA1을 사용할 것을 권장하고 있다. 따라서 자세한 설명이나 특징은 생략하도록 하겠다.

 

3. SHA2

SHA2가 나오게 된 계기는 SAH1에 대한 공격이 이뤄졌고 이에 대응하기위해  미국 국가안보국(NSA)가 고안한  가장 대중화 된 알고리즘이다. SHA2의 경우 암호화 함수들의 집합으로 무결성을 파악할 수 있다고 한다. 예를 들면 다운로드한 파일의 HASH를 계산하고 이전에 게시한 HASH 결과물을 비교하면 다운로드 한 파일이 조작되었는지 알 수 있다고 한다. 해당 알고리즘의 경우 충돌 회피가 잘 되어있다고 하며 동일한 HASH 출력 결과가 있는 두개의 다른 입력데이터를 알아낼 수 없다고 한다.

특징은 아래와 같다.

SHA-224: SHA-256으로 계산하다가 마지막에 출력을 224비트로 줄이는 알고리즘. SHA-256보다는 효율이 떨어짐.

SHA-256: 어떠한 데이터를 입력하더라도 256의 고정된 값을 출력.

SHA-384: 384비트의 HASH값을 생성하고, 현재 표준 알고리즘으로 널리 사용중

SHA-512: SHA-512는 단점이 많아 사용되지 주로 사용되지 않는 것으로 보여 자세한 설명은 생략.

SHA-512/224: SHA-512의 단점을 보완해 나온 축소버전으로 HASH 결과 값이 SHA224와 동일하다.현재까지 크게 보안위협은 없었다고 한다.

SHA-512/256: 이 역시 SHA512의 축소버전으로 출력비트는 SHA-256과 동일하며 64비트 프로세서에서 계산이 빠르기 때문에 개발된 알고리즘이라고 한다. SHA-512/224와 출력 HASH값을 제외하고는 동일하다.

 

4. SHA3

SHA3의 경우에는 아직 사용을 권장하지 않고 있다고 한다. 이유로는 아래와 같다.

1. SHA-3을 지원하는 소프트웨어 또는 하드웨어가 사실상 전무

2. SHA-1에서 SHA-2의 마이그레이션 계획이 수립된 시점에서 SHA-3이 나왔다. 이 당시 SHA-2가 표준이었다.

3. SHA-3은 SHA-2에 비해 현저히 느린 속도

 

여기까지해서 HASH에 대해 알아보았고 여기서 마무리 하도록하겠다.

 

728x90