해싱이란 무엇인가요?

공유
Copied to clipboard!
해싱이란 무엇인가요?
아티클 듣기
00:00 / 00:00

해싱은 가변 크기의 입력값에서 고정된 크기의 출력값을 생성해 내는 과정을 의미합니다. 이는 해시 함수(해싱 알고리즘으로 구현됨)라 알려진 수학적 공식을 따라 진행됩니다. 

모든 해시 함수가 암호 방식을 사용하는 것은 아니지만, 암호화폐의 핵심에는 이른바 암호 해시 함수라 하는 것이 있습니다. 그 덕분에 블록체인과 다른 분산화된 시스템은 상당한 수준의 데이터 무결성과 보안에 도달할 수 있습니다.

기존의 해시 함수와 암호 해시 함수는 모두 결정론적입니다. 결정론적이라는 것은 입력값이 변하지 않는 한, 해싱 알고리즘은 언제나 동일한 출력값(다이제스트 또는 해시라 알려진)을 산출해 낸다는 것입니다.

일반적으로 암호화폐의 해싱 알고리즘은 일방향 함수로 설계되어 상당한 양의 연산 시간과 리소스 없이는 쉽게 이를 되돌릴 수 없습니다. 즉, 입력값에서 출력값을 생성하는 것은 매우 쉽지만, 반대 방향으로 가는 것(출력값만을 가지고 입력값을 생성하는 것)은 상대적으로 어렵습니다. 일반적으로 입력값을 찾기 어려울수록 해싱 알고리즘은 더욱 안전한 것으로 간주됩니다.


해시 함수는 어떻게 작동하나요?

해시 함수에 따라 크기가 서로 다른 출력값이 생성되지만, 각 해싱 알고리즘 출력값의 크기는 항상 일정합니다. 예를 들어, SHA-256 알고리즘은 256비트의 출력값만을 출력할 수 있으며, SHA-1은 언제나 160비트 다이제스트만을 생성할 수 있습니다.

이를 설명하기 위해, SHA-256 해싱 알고리즘(비트코인에 사용됨)을 통해 “Binance”와 “binance”를 입력해 보도록 하겠습니다.

SHA-256

입력값

출력값 (256비트)

Binance

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

binance

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


작은 차이(첫 문자의 대소문자 여부)로 인해 해시값은 완전히 달라졌습니다. 그러나 SHA-256 알고리즘을 사용하기 때문에 출력값의 크기는 입력 크기와 관계없이 언제나 256비트(또는 64자)입니다. 또한 해당 알고리즘을 통해 두 단어를 계속해서 입력해도, 출력값은 동일합니다.

이와 다르게, SHA-1 해싱 알고리즘을 통해 동일한 값을 입력하면 다음과 같은 결과가 나타납니다.

SHA-1

입력값

출력값 (160 비트)

Binance

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

binance

e58605c14a76ff98679322cca0eae7b3c4e08936


SHA는 Secure Hash Algorithms(보안 해시 알고리즘)의 약자입니다. 이는 SHA-2 및 SHA-3 그룹과 함께 SHA-0 및 SHA-1 알고리즘을 포함하는 일련의 암호 해시 함수를 지칭합니다. SHA-256은 SHA-512 및 기타 변형과 함께 SHA-2 그룹에 속합니다. 오늘날 SHA-2 및 SHA-3 그룹만이 안전한 것으로 간주되고 있습니다.


이것이 중요한 이유는 무엇인가요?

기존의 해시 함수는 데이터베이스 조회, 대용량 파일 분석, 데이터 관리 등에 다양하게 사용되었습니다. 반면, 암호 해시 함수는 메시지 인증과 디지털 지문과 같은 정보 보안 애플리케이션에서 광범위하게 사용되고 있습니다. 비트코인에서 암호 해시 함수는 마이닝 과정의 필수적인 부분이며, 새로운 주소와 키 생성에도 사용됩니다.

해싱은 상당한 양의 정보를 다룰 때 무척 유용합니다. 예를 들어, 해시 함수를 통해 대용량 파일과 데이터 세트를 실행한 다음, 해당 출력값을 즉각적으로 데이터 정확성과 무결성을 검증하는 데 활용할 수 있습니다. 이는 입력값이 언제나 단순화되고 압축된 출력값(해시)으로 이어지는 해시 함수의 결정론적인 특징 때문입니다. 해당 기술을 사용하면 많은 양의 데이터를 저장하고 “기억"할 필요가 없습니다.

해싱은 블록체인 기술 측면에서 특히나 유용합니다. 비트코인 블록체인에는 해싱을 포함한 여러 작업이 있는데, 대부분은 마이닝 과정에 포함됩니다. 실제로 거의 모든 암호화폐 프로토콜은 해싱에 기반하여 트랜잭션 그룹을 블록으로 연결하고 압축하며, 각 블록 간 암호화 링크를 생성해 효과적으로 블록체인을 형성합니다.


암호 해시 함수

앞서 언급했던 것처럼, 암호화 기술을 사용하는 해시 함수는 암호 해시 함수로 정의될 수 있습니다. 일반적으로 암호 해시 함수를 해체하기 위해서는 무수히 많은 무차별 대입을 시도해야 합니다. 암호 해시 함수를 “되돌리려면" 해당 출력값이 생성될 때까지 시행착오를 거치며 입력값을 추측해내야 합니다. 그러나 다른 입력값이 동일한 출력값을 생성하는 “충돌"이 발생할 가능성도 있습니다.

엄밀히 따지자면 암호 해시 함수가 실제로 안전한 것으로 간주되려면 다음 세 가지 속성이 필요합니다. 이는 충돌 저항성, 역상 저항성, 제2 역상 저항성으로 설명할 수 있습니다

해당 속성들에 대해 논의하기 전에, 해당 논리를 짧은 문장으로 요약해보겠습니다.

  • 충돌 저항성: 출력값으로 동일한 해시를 출력하는 서로 다른 두 입력값을 찾는 것이 거의 불가능함.

  • 역상 저항성: 해시 함수를 “되돌리는 것”이 거의 불가능함(주어진 출력값에서 입력값을 찾는 것).

  • 제2 역상 저항성: 특정한 입력값과 충돌하는 어떠한 두 번째 입력값을 찾는 것이 거의 불가능함.


충돌 저항성

앞서 언급한 것처럼, 서로 다른 입력값이 동일한 해시를 출력하게 되면 충돌이 발생합니다. 따라서 해시 함수는 누군가 이러한 충돌을 발견하기 전까지는 충돌 저항성을 갖고 있는 것으로 간주됩니다. 충돌은 모든 해시 함수에서 언제나 발생하며, 이는 출력값은 유한한 대신 입력값은 무한하기 때문입니다.

다른 말로 하자면 해시 함수는 충돌을 발견하는 가능성이 매우 낮아 이를 연산하는 데 수백만 년의 시간이 필요할 때 충돌 저항성을 갖고 있습니다. 따라서 충돌이 없는 해시 함수는 없지만, 그 중 일부는 저항성을 갖고 있는 것으로 간주될만큼 강력합니다(예를 들면, SHA-256).

다양한 SHA 알고리즘 중에서 SHA-0과 SHA-1 그룹에서 충돌이 발견되었기에 더는 안전한 것으로 간주되지 않습니다. 현재까지 SHA-2와 SHA-3 그룹은 충돌 저항성을 갖고 있는 것으로 간주되고 있습니다.


역상 저항성

역상 저항성 속성은 일방향 함수의 개념과 연관되어 있습니다. 해시 함수는 특정한 출력값을 출력하는 입력값을 찾을 확률이 매우 낮을 때 역상 저항성을 갖고 있는 것으로 간주됩니다.

해당 속성은 주어진 출력값을 보고 입력값을 추측하기 때문에 이전 속성과는 다릅니다. 충돌은 누군가가 동일한 출력값을 생성하는 두 가지 서로 다른 입력값을 발견했을 때 발생하지만, 어떤 입력값이 사용되었는지는 중요하지 않습니다.

역상 저항성은 데이터를 보호하는 데 유용한데, 메시지의 간단한 해시는 해당 정보를 공개하지 않고도 진위성을 증명할 수 있기 때문입니다. 실제로 많은 서비스 공급자와 웹 애플리케이션은 암호화되지 않은 문자가 아닌 암호에서 출력된 해시를 저장하고 이를 사용합니다.


제2 역상 저항성

간단히 말해 제2 역상 저항성은 앞서 말한 두 가지 특성 사이에 있다고 할 수 있습니다. 제2 역상 공격은 또 다른 입력값의 동일한 출력값을 생성하는 특정한 입력값을 누군가 이미 알고 있는 경우 발생합니다.

즉, 제2 역상 공격은 충돌을 발견하는 과정을 포함하나 동일한 해시를 생성하는 임의의 두 입력값을 찾아내는 대신, 서로 다른 입력값을 통해 생성된 동일한 해시를 생성하는 입력값을 찾습니다.

그러므로 충돌 저항성을 갖고 있는 해시 함수는 제2 역상 공격 저항성을 갖고 있으며, 역상 공격은 언제나 충돌 가능성을 내포하고 있습니다. 그러나 이는 단일 입력값에서 단일 출력값을 찾는 것을 의미하기 때문에 누군가는 여전히 충돌 저항성을 가진 함수에 역상 공격을 감행할 수 있습니다.


마이닝

비트코인 마이닝은 잔고를 확인하고, 트랜잭션 입력값과 출력값을 연결하며, 머클 트리를 형성하기 위해 트랜잭션을 블록 안에 해싱하는 등 해시 함수를 포함한 여러 과정이 수반됩니다. 그러나 비트코인 블록체인이 안전한 주된 이유는 마이너가 다음 블록에 유효한 정답을 찾기 위해 무수히 많은 해싱 작업을 수행해야 하기 때문입니다.

마이너는 특별히 후보 블록에 대한 해시 값을 생성할 때 여러 가지 다양한 입력값을 시도해야 합니다. 기본적으로 특정 수의 0으로 시작하는 해시 출력값을 출력할 때만, 자신들의 블록의 유효성을 검증할 수 있습니다. 0의 개수는 마이닝 난이도를 결정하며, 네트워크에 할당된 해시 레이트에 따라 달라집니다.

이 경우 해시 레이트는 얼마나 많은 컴퓨터 전력이 비트코인 마이닝에 투자되고 있는지를 의미합니다. 네트워크 해시 레이트가 높아지면, 비트코인 프로토콜은 마이닝 난이도를 자동으로 조정해 블록 채굴에 걸리는 시간을 10분에 가깝게 유지합니다. 반면, 일부 마이너들이 마이닝을 그만두기로 결심하여 해시 레이트가 현저하게 떨어지면 채굴 난이도가 보다 쉽게 조절됩니다(평균 블록 시간이 10분으로 돌아올 때까지).

한가지 알아둘 것은 유효한 출력값(특정 수의 0으로 시작하는)으로 생성할 수 있는 다수의 해시가 있기 때문에, 마이너들은 충돌을 찾아낼 필요가 없다는 것입니다. 따라서 특정 블록에 대한 몇 가지 해결책이 있으며, 마이너는 마이닝 난이도에 따라 결정되는 임계값에 따라 그중 하나를 찾아내면 됩니다.

마이너들은 시스템을 속일 이유가 없는데, 이는 비트코인 마이닝이 비용 집약적이어서 상당한 재정적 손실로 이어질 수 있기 때문입니다. 더 많은 마이너들이 블록체인에 참가할수록 규모는 더욱 커지고 강력해집니다.


마치며

해시 함수가 특별히 상당한 양의 데이터를 다룰 때 컴퓨터 과학의 핵심 도구라는 것에는 의심의 여지가 없습니다. 해싱 알고리즘과 암호 방식을 결합하면 다양한 방식으로 보안과 인증이 가능하며 매우 다양하게 사용할 수 있습니다. 이처럼 암호 해시 함수는 거의 모든 암호화폐 네트워크에 필수적이며, 따라서 해당 속성과 작동 메커니즘을 이해하는 것은 블록체인 기술에 관심이 있는 모두에게 분명히 유용한 일입니다.

Loading