지난 포스팅들을 통해서 블록체인의 개념과 원리에 대해서 알아봤어요. 이번 포스팅에서는 블록체인 기술을 이해하는데 꼭 필요한 기술 용어들에 대해서 알아볼거에요. 이를 이해해야 블록체인에 대해서 더 깊게 이해할 수 있어요.
해시(hash)
해시(hash) 개념 이해하기
사전적 정의는 ‘데이터를 고정된 크기의 고유한 값으로 변환하는 과정 또는 그 결과값’ 이에요. 특정한 값을 ‘해시 함수’에 넣으면 ‘해시값’이 나온다고 표현할 수 있어요. 여기서 해시 함수는 사용되는 알고리즘에 따라 종류가 다양하고, 사용된 해시 알고리즘이 다르면 값도 다르게 나와요.
마법의 터널이 있다고 상상해주세요. 이 마법의 터널을 지나면 값이 변하고, 고유한 값이 나와요. 해시는 ‘마법의 터널’ 같은 거에요. 마법의 터널이 종류는 다양하게 존재하겠지만 원리는 모두 똑같아요. 이 터널을 지나면 고유한 값이 나오는거죠.
실제로 어떠한 값을 해시 함수에 넣고, 결과로 나온 해시값을 볼게요.
값: hello
MD5라는 마법의 터널을 지나면 나오는 값: 5d41402abc4b2a76b9719d911017c592
SHA1라는 마법의 터널을 지나면 나오는 값: aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
입력된 정보가 같다면 동일한 마법의 터널을 지나면 항상 동일한 값이 나와요. hello 를 MD5라는 터널에 1000번 넣으면 100번 모두 5d41402abc4b2a76b9719d911017c592 라는 값이 나오는거에요.
해시(hash)의 특성
해시의 특성에 대해서 알아 볼게요.
결정론적(Deterministic)
동일한 입력값은 항상 동일한 해시 값을 출력한다는 특성이에요. 위 예시에서 hello 라는 값을 동일한 마법의 터널에 1000번 넣으면 1000번 모두 동일한 값이 나온다고 말씀드렸던 특성이에요.
고속성(Fast Computation)
해시 함수의 계산은 빨라야해요. 입력의 크기가 아무리 커도 해시값이 느리게 나온다면 사용이 어려워요.
충돌 저항성(Collision Resistance)
마법의 터널을 지나면 ‘고유한’ 값이 나온다고 말씀 드렸어요. hello 를 넣으면 나오는 값은 그 어떤 다른 값을 넣어도 나오면 안되는거에요. 다시 말하면 hello1 을 넣어서 나온 값과 hello2를 넣어서 나온 값이 같으면 ‘충돌’이 발생한 것이고 고유하지 않다는 것이기 때문에 해시를 신뢰할 수 없게 되어요.
왜냐하면 해시의 사용 목적은 ‘고유함’이 매우 중요하기 때문이에요. 그래서 해시는 충돌할 가능성이 매우 낮다는 특성이 있어요.
역산 불가능성(Pre-image Resistance)
해시 값을 보고 역산을 해서 입력 값을 알아내는 것이 어려워야해요. 위 예시에서 aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d 라는 값만 보고 ‘hello 를 입력했구나’ 라고 추론할 수 없어야해요. 입력값 -> 해시값의 흐름에서 반대로 역산이 불가능한 구조여야해요.
민감성(Sensitivity)
입력값이 약간이라도 달라지면 결과값이 완전히 바뀌어야하는 특성이에요. 역산 불가능성을 설명 드렸는데 같은 맥락이에요. 즉, hello1과 hello2의 해시값이 유사하면 입력값을 계속해서 바꿔가면서 입력 값을 추론해가며 찾을 수 있겠죠? 그러니 입력값이 조금이라도 다르면 결과값이 완전히 달라야만해요.
해시(hash) 정리
딱 알아둬야할 해시의 개념과 특징만 뽑아서 정리해보면 아래와 같아요. 블록체인을 이해하기 위해서 알아야할 해시의 개념은 이것이 전부에요.
- 해시는 동일한 입력값에 대해서 동일한 ‘고유값’으로 변환 시키는 마법의 터널이다.
- ‘고유값’ 이란 말 그대로 ‘고유’하다는 뜻이다. 독립적이고 유일하다.
- 마법의 터널은 종류가 다양하다(해시 알고리즘의 종류는 여럿이다)
- 이 터널은 하나의 방향으로만 통과할 수 있다.(거슬러 돌아갈 수 없다)