[Blockchan A-Z] SHA256 - 해시(Hash) 이해하기

bolee·2022년 7월 9일
0

Blockchan A-Z

목록 보기
2/33

MODULE 1 - BLOCKCHAIN INTUITION
02. UNDERSTANDING SHA256 HASH

여기에서는 암호화를 다뤄볼 것이다.
또한 블록체인에서 SHA256 해시 알고리즘의 역할이 무엇인지 이해해볼 것이다.

SHA256 이란?

<그림 1>

사람을 예로 들면, 사람은 지문을 갖고 있고 각자의 지문은 서로 다르다.
동일한 지문을 가진 사람이 있을 가능성은 있지만 아주 적은 확률이며, 약 6천만분의 1의 확률을 가지고 있다.

<그림 2>

따라서 지문은 사람을 식별하는 식별자라고 할 수 있다. 이러한 지문으로 범죄자를 식별하여 법원에 증거로 제출하기도 한다.

같은 원리를 디지털 문서에 적용하면 어떨까?
디지털 문서에도 그런 지문이 존재한다. 이를 SHA256 해시(hash)라고 부른다.

SHA256 알고리즘은 미국국가안보국 NSA에서 개발되었다.
잘 동작하고 굉장히 안전하게 동작하는 알고리즘 중 하나이다.

세계의 많은 애플리케이션에서 비밀번호를 저장할 때나 디지털 문서를 검사할 때, 그리고 블록체인에서도 이용한다.

블록체인의 핵심 요소 중의 하나이며 SHA256 알고리즘의 코드는 완전히 공유되어 있다.
누구나 배울 수 있고 누구나 어떻게 동작하는지 이해할 수 있다.

SHA는 안전한 해시 알고리즘(Secure Hash Algorithm)의 약자이며 256은 메모리를 차지하는 비트 수이다.
해시의 길이는 언제나 64자이고 숫자뿐만 아니라 문자가 올 수 있다. 왜냐하면, 16진법 해시이기 때문이다.

0부터 9까지는 숫자가 오고 그 뒤로 A, B, C, D, E, F 문자가 오며 총 16개이다. 즉, 해시의 문자는 각각 4비트를 차지한다. 2의 4승은 16이고 64에 4를 곱하면 256이기 때문이다.

중요한 것은 이 알고리즘이 텍스트 문서뿐만 아니라 어떤 디지털 문서에도 적용 가능하다는 것이다.
영상에 적용할 수도 있고 텍스트나, 오디오, 실행 파일, 또는 운영 체제에 적용할 수도 있다. 무엇을 적용하든 지문인 SHA256 해시값을 얻을 수 있다.

SHA256 동작 살펴보기

아래 사이트를 통해 실제로 어떻게 동작하는지 살펴보자.

https://tools.superdatascience.com/blockchain/hash/

여기에서는 데이터를 입력하고 해시값을 얻을 수 있다.

같은 데이터를 입력하면 언제나 같은 해시값을 얻는다.
한 사람을 불러서 지문을 확인하고 같은 사람을 또 확인한다고 지문이 바뀌지는 않기 때문이다. 지문이 바뀌는 건 말이 안 된다.

또 다른 것은 만약 아주 작은 심볼을 변경하면 해시값은 완전히 달라진다. 이를 쇄도 효과라고 한다.
즉, 데이터에 약간의 변화가 있을 때 해시값은 완전히 달라진다는 것이다.

말씀드린 것처럼 데이터에는 아무거나 들어갈 수 있는데, 결과값은 항상 256비트를 얻는다.
예를 들어 많은 텍스트를 넣는다고 해도 해시값은 언제나 256비트이다. 즉, 64자의 텍스트를 얻는다.

해시(hash)의 특징

알고리즘에 SHA256만 있는 것은 아니다.
SHA512, SHA3 등이 있고, 다양한 해싱 알고리즘을 만들 수도 있다.
그러나 유용하게 사용하려면 몇 가지 요구사항을 만족해야 한다.

해싱 알고리즘에는 다섯 개의 요구 조건이 있다.

단방향(One-Way)

해시에서 문서로 갈 수는 없다. 즉, 뒤로는 갈 수 없다는 의미이다.
따라서 해시를 바탕으로 문서를 복원하거나 역설계할 수 없다.

단방향 비유
사람의 지문 같이 지문을 갖고 있다고 해도 사람을 복원할 수는 없다.
지문으로 그 사람의 눈 색깔을 알거나 그 어떤 다른 정보도 알 수 없다.
그러나 사람으로부터 지문을 언제나 얻을 수 있다.

결정적(Deterministic)

만약 동일한 문서를 해싱 알고리즘에 적용하면 똑같은 해시값을 얻어야 한다.

연산이 빨라야 한다.(Fast Computation)

해싱 알고리즘을 잘 사용할 수 있을 만큼 연산 속도가 빨라야 한다.

쇄도 효과(The Avalanche Effect)

쇄도 효과를 이미지로 나타내면 눈사태 이미지를 예시로 들 수 있다.

쇄도 효과는 해싱 알고리즘에서 매우 중요한 요건으로 쇄도 효과란 동일한 문서에다가 아주 작은 변화에도 해시값은 완전히 달라지는 것을 의미한다. 쇄도 효과라고 불리는 이유는 알고리즘에 구현된 방식에 있다.

요점은 하나의 변화가 몇 가지의 변화를 유발하고 그 변화가 더 많은 변화를 유발하고 이는 더 많은 변화를 유발한다는 것이다. 즉, 눈사태와 같다.

충돌 저항성(Must withstand collisions)

비유한 지문에서 말했듯 6천만분의 1의 확률로 두 사람의 지문이 같을 수 있다. 해싱 알고리즘에서도 마찬가지다.

해싱 알고리즘은 64비트이다. 이는 매우 제한적으로 다양한 조합을 만들 수 있지만, 제한적인 것은 여전하다.
하지만, 디지털 데이터의 양은 거의 무한하다. 즉, 64자로 표현할 수 있는 다양한 조합의 숫자보다 훨씬 많다.

수학에서는 이러한 원리를 비둘기집 원리라고 한다. 만약 10마리의 비둘기가 있고 집은 9개만 있다면 하나의 집에는 두 마리의 비둘기가 들어가야 한다.
즉, 어떤 것의 양인 A가 슬롯의 개수 B보다 많으면 충돌이 발생할 수밖에 없다. B보다 훨씬 큰 A를 B로 옮기면 자연적으로 충돌이 생기고 비둘기집 원리처럼 우리가 어떻게 할 수 없다.

하지만 그런 일은 드물게 발생하기 때문에 해결할 수 있다. 매우 드물게 발생하고 그럴 가능성은 거의 없으니 가끔 그런 일이 벌어져도 아무런 영향은 없을 것이다.

최종적으로 충돌 저항성 조건이 의미하는 바는 알고리즘이 인위적인 충돌에 견딜 수 있어야 한다는 뜻이다. 즉, 공격자가 충돌을 만드는 법을 알아서 악의로 충돌을 만드는 것을 방지해야 한다는 것이다.

SHA256 알고리즘의 동작 방법을 자세하게 알고 싶다면 아래 링크의 챕터 1 참조
Understanding a SHA256 Hash: Wouter Penard & Tim van Werkhoven, (2008), On the Secure Hash Algorithm family (Chapter 1 of Cryptography in Context)

0개의 댓글