본문 바로가기
블록체인

[블록체인] 해시함수(알고리즘) 란?

by tyrannojung 2020. 10. 2.
반응형

 안녕하세요 tyrannoCoding입니다.

 

 해시함수를 이해하기에 앞서 블록체인의 정보보안 3요소에 대해 이해해 보겠습니다.

 

정보보안 3요소

CIA

 

 CIA라고도 하며

기밀성(Confidentiality), 가용성(Availability), 무결성(Integrity) 이 있습니다.

 

기밀성 - 허가된 자만 데이터에 접근할 수 있다.

가용성 - 서비스가 항상 원활하게 제공되어야 한다.

무결성 - 특정한 데이터를 보호해서 데이터를 정상적인 상태로 유지해야 한다. 혹은 그런 성질.

 

 블록체인 같은 경우 각 개인의 블록체인 지갑에는 고유한 개인키를 가지고 있기 때문에 자신이 아닌 다른 사람이 나의 암호화폐를 인출할 수 없으므로 기밀성을 보장받을 수 있고, 또한 모든 거래내역을 전 세계 컴퓨터에서 동일하게 보유하고 있다는 점에서 가용성을 보장받을 수 있으며, 블록체인은 해시라는 알고리즘을 사용했기 때문에 누구도 장부를 변조할 수 없습니다. 시스템 전반에 이 해시의 개념을 잘 적용했다는 점에서 무결성을 지켰다고 볼 수 있습니다.

 

MD5 알고리즘

 md5 알고리즘은 128비트로 구성된 결과로 32자리의 16진수로 반환한다는 특징을 가지고 있습니다. 문자열의 길이는 변함없이 항상 32자리인 게 해시의 특징입니다. 먼저 128비트는 수학적으로 어떤 의미를 갖고 있을까요?

일반적으로 한 비트는 0 또는 1입니다. 그러면 128비트는 2^128의 경우의 수를 가지고 있는 비트의 크기입니다. 2^128승은 = 340 간입니다. ( 조, 경, 해 보다 높은 단위입니다) 그렇지만 여기서 중요한 점은, 무한이 아니기 때문에 2^128 보다 더 많은 입력값을 넣었다면 그중 한 개쯤 동일한 결과가 나올 수 있습니다. 이런 걸 쉽게 설명할 수 있는 개념이 비둘기집 원리입니다.

 

비둘기집 원리

Pigeonhole Principle

 비둘기집이 9개가 있는데 10마리를 한 마리도 빠짐없이 넣고 싶다고 가정해봅니다. 이때 두 마리는 어쩔 수 없이 같은 집에 들어갑니다. 비둘기 집의 원리는 N+1개의 물건을 N개의 상자에 넣고자 할 때, 최소한 한 개의 상자에는 두 개 이상의 물건이 들어가 있는 원리입니다. 해시 알고리즘도 수학적으로 비둘기집의 원리를 따를 수밖에 없기 때문에(확률이 희박하더라도) 결과가 동일한 입력값은 존재할 수 밖에 없습니다. 해시 결과 값이 동일한 충돌이 발생하는 거죠.

 

 충돌이 적게 발생할수록 좋은 해시 알고리즘입니다. 또한 무차별 대입이 아닌, 수학적 연산과정으로 원하는 문자열에 해시 결괏값을 만들어 낼 수 있다면 그 해시 알고리즘은 무결성을 보장할 수 없다는 점에서 더 이상 사용하지 않게 됩니다. 뿐만 아니라 해시는 기본적으로 복구 화가 불가능합니다. 입력값은 무한이 될 수 있는데, 출력 값은 2^128승 밖에 안되므로 복구화를 할 수 없죠.

 

MD5, SHA-1, SHA-256?

 MD5는 128비트의 고정길이를 가진 암호화 해시로 10년이 넘는 긴 시간 동안 컴퓨터 시스템에서 다방면으로 사용했었습니다. 해시 알고리즘의 아버지와 같은 존재죠. 하지만 MD5는 최근에 개인 컴퓨터 1대로 수초 내에 해시 충돌을 찾을 수 있을 정도로 효율적인 공격 알고리즘이 발견되어, 무결성을 보장할 수 없게 되었습니다. 그래서 학문적으로는 의미가 있지만, 현재로써는 많이 사용되지 않는 해시 알고리즘입니다. 미국 국가 안보국인 NSA에서 이러한 MD5를 개선한 SHA(Secure Hash Algorithm)-1 알고리즘을 개발했지만, 충돌이 발견된 적이 있다는 점에서 요즘에는 SHA-256 알고리즘을 사용하고 있고 권장하고 있습니다.(MD5처럼 치명적인 공격 알고리즘이 발견된 건 아닙니다.)

 

 SHA-256은 md5보다 두배 더 긴 256비트로 구성되어 있고, 총 64자리의 문자열을 반환하게 됩니다. md5보다 2배 더 길기 때문에 충돌이 발생할 확률이 기하급수적으로 더 낮고, 아직까지도 어떠한 충돌도 발견되지 않았습니다. 하지만 기억해야 할 건, 무차별 대입을 계속하게 되면 언젠가는 충돌이 발생된다는 점입니다.

하지만 블록체인에서는 해시 알고리즘의 취약점이 발견된다 하더라도, 하드 포크와 같은 알고리즘 개선 기법이 존재하기 때문에, 블록체인에 기반이 되는 해시 알고리즘들은 현재로써 안전하다는 게 다수 전문가들의 견해입니다.

 

해시의 특징

1. 역상 저항성 - 입력한 A에 의해 B가 출력되었다면 출력된 B값만 주어졌을 때 입력값인 A값을 찾는 것이 계산적으로 불가능함을 의미합니다.

 

2. 제2 역상 저항성 - 입력값 A와 출력 값 B가 모두 주어졌을 때, 똑같은 B를 반환하는 A2를 찾아내거나 만들어 내는 것이 계산적으로 불가능합니다.

 

3. 압축 효과 - 암호화 해시 함수가 반환하는 일정한 길이의 작은 해시값만으로 크기가 거대한 대이터의 무결성을 보장할 수 있는 외부효과를 의미한다. 예를 들어 SHA-256의 경우 100GB의 파일도 단 256bit의 해시값으로 그 내용의 무결성을 보장할 수 있습니다.

 

4. 눈사태 효과 - 입력한 값이 아주 작은 변화로도 결괏값이 전혀 다르게 도출되는 효과이며 변경되는 부분에 있어서는 어떠한 규칙성도 찾을 수 없습니다.

 

 만약 블록체인에서 블록들이 선형(직선 모양)적으로 줄줄이 이어져 있는 모양이라고 가정해봅시다. 그리고 앞선 블록들은 어떤 목적을 위해 포함하고 있는 내용들을 절대 변경하면 안 된다는 규칙을 정합니다. 이를 실현하기 위해, 각 블록들은 자기 자신의 '내용' + 이전 블록의 해시값을 참조하여 그것을 해싱해서 해시값을 갖습니다. ( 이전 블록의 해시값을 다음 블록이 참조한다라는 것은 체인을 거는 비유의 실체이다.) 혹시 어떤 나쁜 사람이 자신의 이익을 위해 과거 블록의 내용을 변경하게 된다면 그 블록의 해시값이 변경되고, 그 이후 블록은 이전 블록을 해시값으로 참조하고 있기 때문에 연결이 단선되고 맙니다. 그 나쁜 사람이 변경된 내용을 거래에 참여하는 모든 사람들에게 인정받고자 한다면 그 이후 모든 블록들의 해시값을 전부 다시 만들어 내야 할 겁니다.

 

핵심요약

블록체인의 해시함수는 각 블록을 연결시키는 체인의 용도로써, 또 과거 이력의 변경을 감지하는 역할로써 사용한다라고 정리해 볼 수 있습니다.

반응형

댓글