×
Crocus
공부한 내용을 정리하는 블로그로 시작한
Crocus는 2014년 1월 14일 부터 시작하여
현재 월 6만명, 총 1,583,131명의 방문자 수를 기록하고 있습니다.
Donation
이제 많은 사용자들이 이용하는 만큼
더 다양한 서비스 개발/제공을 위해 후원금을 모금하고자 합니다.
후원을 해주시는 분들은 Donators 명단에 성명, 후원금을 기입해드리며
Crocus 블로그가 아닌 다른 곳에 정리해둔 저만의 내용을 공유해 드리고자 합니다.
Account
예금주 : 고관우
신한은행 : 110-334-866541
카카오뱅크 : 3333-01-7888060

👉 후원 페이지 바로가기 Donators
익명 : 5000원(Crocus응원합니다.)
busyhuman: 5000원(유용한 지식 감사합니다.)
익명 : 5000원(알고리즘 학습러)
728x90
반응형

1. 일방향 해시 함수란?

범죄 수사에서는 지문을 이용하는 일이 있다.


특정인 지문과 현장에 남겨진 지문을 대조하여 그 사람이 관련된지 조사하는 방식이다.


이때 컴퓨터로 처리하는 디지털 내부에서도 지문같은 것들이 필요할 때가 있는데 이러한 것을 해시라고 한다.


즉, 데이터의 손실, 변조가 일어났을 때(범죄가 일어나면) 해시를 통해(지문을 통해) 우리는 그 데이터가 타당한지 판별할 수 있다.





2. 일방향 해시 함수를 쓰는 이유


위의 두 그림을 보자. 만약 원본 파일을 복사하게 된다면 우리는 상당한 시간과 엄청난 용량을 요구하게 될 것이다.


하지만 저 파일에 대해 해싱을 하게 된다면 단순한 16진수 값으로 나타낼 수 있기때문에 우리는 해시함수를 이용해서 변조 파일과 대조 할 수 있게 된다.


단적인 예로 변조 파일을 해싱하게 되면 원본 파일 해시값과 다르게 나타나기 때문이다.



이때 원본 파일 혹은 변조 파일은 입력이 되고 해시 값은 출력이 된다.


입력메시지(message, message digest or mg)라 하고, 출력해시 값(hash value)라 한다.


이러한 간단한 해싱 방법에 대해서는 다음 링크를 참조하자.


http://www.crocus.co.kr/1147?category=209527





3. 해시 함수의 성질


입력


- 해시 함수에 입력되는 메시지는 꼭 텍스트가 아니어도 된다.

즉, 화상 파일이거나 음성 파일이어도 상관이 없다는 것이다.


- 일방향 해시 함수는 메시지가 실제로 무엇을 나타내고 있는지 알 필요 없다.

(즉, 해싱이 된 해시 값으로 메시지가 무얼 의미하는지는 알 수 없다.)



출력


해싱을 통해 나온 값은 특정 해시 함수에서 정해준 고정 길이가 나오게 된다.


예를 들면 SHA-1이라는 일방향 해시 함수에서는 항상 해시 값이 160비트가 나오고

SHA-2에서는 항상 256비트의 해시 값이 나온다.



위의 내용을 통해 얻어 낼 수 있는 것으로는


1. 임의의 메시지를 해싱하면 항상 고정된 길이의 해시 값을 얻어낸다.

2. 시지가 다르면 해시 값도 달라진다.

3. 해시는 일방향성을 갖는다.




4. 충돌(collision)


하지만 우리 마음대로 해시 함수를 짠다면 충돌(collision)이 일어 날 수 있다.


예를 들어보자.


a는 해싱하면 1이 되고 b는 해싱하면 2가 되고 c는 해싱하면 3이 된다고 해보자.


그리고 메시지가 들어오면 숫자의 합이 해시값이라 해보자.


ab가 오면 3이되고 abc가 오면 6이 될 것이다.


하지만 c가 오면 3이라 ab와 c가 똑같은 해시 값을 가지게 된다는 것이다.


이렇게 해시 함수를 잘못 짜면 충돌률이 높아지게 된다.


따라서 우리는 충돌 내성(collision resistance)을 가진 일방향 해시 함수가 필요하다.

(이때 충돌 내성이란, 충돌을 발견하는 것이 어려운 성질을 의미한다.)





5. 해시 함수(알고리즘) 종류 및 특징



위의 테이블에서 해시 충돌성이 있는 해시 함수는 위험한 알고리즘이므로 중요한 정보를 저장한다면 지양하는게 좋다.


MD 시리즈는 (Message Digest)를 의미한다.


컴퓨터 성능이 좋기 전까지는 최고의 암호 알고리즘이었지만, 이제는 Brute Force(전수 공격)을 통해 해독이 가능해져 MD 시리즈는 이용해도 되지만, 지양하는 편이다.



SHA 시리즈는 (Secure Hash Algorithm)을 의미한다.


SHA-0, SHA-1까지는 해시 충돌성이 존재하지만, SHA-256, SHA-512는 해시 충돌성이 전혀 없다.


256이 의미하는 내용은 해싱을 하면 2^256개의 해시 값중 하나가 나타나기에 우리가 사는 세상에서 2^256은 아주 큰 값이기에 충돌 우려를 하지 않아도 된다는 것이다. 


SHA-512는 2^512이지만 SHA-256으로 충분히 해결이 가능하고 블록 크기도 1024byte라 아직 이정도는 필요없다.

   

특히 비트코인에서는 해싱을 위해 SHA-256을 한번 돌리고 그다음 RIPEMD-160을 한번 더 돌린다.





반응형