해시(Hash)라는 단어를 들으면 제일 먼저 어떤게 생각나나요? 저는 맥도날드에서 판매하는 해시브라운이 제일 먼저 생각납니다. 해시라는 단어의 기본적인 뜻이 다지다, 으개다 라는 뜻을 가지고 있기 때문이죠. 감자를 익혀 잘게 다져 만든 해시 브라운 처럼 해시 함수는 단방향 성질을 가지고 암호학에 사용됩니다.
해시 함수는 한번 진행되면 이전 값으로 돌아가기 매우 힘든 성질을 가지고 있습니다. 즉, 대표적인 단방향 암호화 알고리즘입니다. 또한 다양한 길이의 데이터를 고정된 길이의 출력값으로 변환하게 됩니다. 이 두가지 성질이 해시 함수를 잘 설명하고 있습니다.
현재, 해시 함수로 가장 많이 사용되는 알고리즘은 SHA(Secure Hash Algorithm)-256입니다. SHA-256은 어떤 입력값에 대해서도 256비트 출력값을 반환합니다. SHA-1은 160비트의 고정된 출력값을 반환합니다.
해시 함수의 장점
블록체인에서 해시 함수는 큰 비중을 차지하고 있습니다. 원본으로 돌리기 힘들다는 성질과 고정된 길이를 출력하는 성질로 2가지 장점을 취할 수 있기 때문입니다.
익명성 보장
블록체인에서는 월렛을 통해 코인을 거래할 수 있게 됩니다. 지갑의 주소는 공개키를 해싱한 값을 사용하게 됩니다. 이를 통해 지갑의 주인이 누구인지 알지 못하게 할 수 있습니다. 참여자들은 지갑 주소와 송금 잔액만 알 수 있고 지갑의 주인이 누구인지 파악할 수 없습니다.
무결성 검증
해시 함수는 고정된 길이의 출력값을 반환합니다. 또한 1bit만 달라져도 출력값 전체가 바뀌게 됩니다. 이를 통해 대용량의 데이터가 위변조 되었는지 한번에 확인이 가능합니다. 대표적으로 블록체인 머클트리에서 해시 알고리즘을 사용하고 있습니다.
채굴 노드 결정
비트코인과 이더리움 모두 작업증명(PoW) 합의 알고리즘을 사용하고 있습니다. 이더리움은 22년 8월 부터 지분증명(PoS)로 변경한다고 합니다. 여튼 작업증명에서는 가장 많은 해시 파워를 증명한 노드가 블록을 생성하고 체인에 연결할 권리를 얻게 됩니다. 이 때 증명하는 방법이 바로 임의의 해시값에 대한 논스(Nounce)값을 찾는 것입니다. 무작위 대입법(Brute-Force) 방식을 사용해 논스값을 찾고 소비한 해시 파워를 증명합니다. 이에 대한 보상으로 비트코인을 지급받습니다.
해시함수는 안전할까?
블록체인에 전방위적으로 사용되는 해시 함수도 분명 취약점을 가지고 있습니다. 항상 고정된 길이의 출력값을 반환하기 때문에 서로 다른 값을 넣었음에도 동일한 출력값이 나올 가능성을 배제할 수 없습니다. 이를 해시 충돌이라고 합니다. 그럴 가능성은 굉장히 낮지만 한번 발생하면 치명적인 위협이 됩니다. 해시 함수의 안정성을 평가하는 요소는 충돌 저항성, 역상 저항성, 제2 역상 저항성 3가지 입니다. (말이 어렵네요. 저만 그런가요?)
충돌 저항성
해시 함수에서 충돌이란 서로 다른 입력값에 동일한 해시 결과를 가지게 되는 것입니다. 충돌 저항성이란 해시 함수가 충돌하는 경우 두개의 입력값이 발견되지 않는 성질입니다. 충돌 저항성은 지문과 유사합니다. 대부분의 사람은 지문이 다릅니다. 하지만 지문이 같을 수도 있습니다. 그 확률이 640억 분의 1입니다. 하지만 지문이 같은 사람이 만나는 확률은 훨씬 낮아지게 됩니다. 이 때 지문에서 충돌 저항성이 있다고 할 수 있습니다.
해시 함수도 마찬가지 입니다. 예를 들어 가장 많이 사용되는 SHA-256 알고리즘은 256비트(16진수 64자리) 출력값을 반환합니다. 경우의 수는 2^256(약 10^78 정도)입니다. 우주의 모든 원자 개수가 10^80이라고 하니 엄청난 숫자입니다. 지문이 같을 확률보다 10^67배 정도 낮습니다. 이런 낮은 확률에도 불구하고 같은 값은 나올수도 있지만 같은 입력값을 2개 동시에 찾는다는 건 불가능에 가깝습니다.
역상 저항성
어떤 해시 출력값을 가지고 입력값을 찾을 수 있는 확률이 낮다는 성질입니다. 감자로 해시 브라운을 만들 수는 있지만 해시 브라운으로 감자를 만들수는 없습니다. 해시 함수의 역상 저항성을 사용하면 데이터를 공개하지 않더라도 진위 여부를 판단할 수 있어 보안성이 높다고 할 수 있습니다.
해시 함수의 역상 저항성이 사용되는 곳은 우리가 흔히 사용하는 로그인 기능입니다. 패스워드를 노출하지 않고 해싱한 값으로 인증을 처리할 수 있게 됩니다.
제2 역상 저항성
해시함수의 충돌 저항성과 역상 저항성의 복합 개념입니다. 특정 입력의 해시출력값과 동일한 해시값을 출력하는 또 다른 입력값을 누군가가 알지 못한다는 성질입니다. 만약 A 입력값에 대해 A` 해시 출력값이 나온 경우 A` 해시 출력값을 가지는 B 입력값을 찾는 것이 제2 역상 공격입니다. 제2역상 공격을 방어하기 위해서는 설계하고자 하는 해시 함수의 충돌 저항성이 강해야 합니다.
'Blockchain' 카테고리의 다른 글
[Blockchain] 스마트 컨트랙트 월렛(Contract Account)? (0) | 2022.06.21 |
---|---|
[Blockchain] 핫 월렛 콜드 월렛 차이 (암호화폐 지갑이란?) (0) | 2022.06.21 |
[Security] 디지털 서명(Digital Signature)이란? 검증 확인 원리 (0) | 2022.06.20 |
[Security] 대칭키 비대칭키 암호화 방식 비교 (0) | 2022.06.20 |
[Security] 암호학(Cryptography), 정보 보안 3요소 (0) | 2022.06.20 |
댓글