🖋 블록체인에서 사용하는 대표적인 암호화 기술은 해시함수, 디지털서명, 공개키 암호화 이다.
다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑한 값
이를 이용해 특정한 배열의 인덱스나 위치를 입력하고자 하는 데이터의 값을 이용해 저장하거나 찾을 수 있다. 해시를 이용하면 즉시 저장하거나 찾고자 하는 위치를 참조할 수 있으므로 다른 자료구조들에 비해 탐색 속도가 빠르다.블록체인을 구현하기 위한 핵심 기술이다.
원래의 데이터가 조금만 달라져도 해시가 확연하게 달라지는 특성이 있어 위변조 판별이 쉽고 데이터의 무결성을 지키는 데 도움을 준다.
해시는 기본적으로 복호화가 불가능하다. 즉 출력 데이터를 토대로 입력 데이터를 찾을 수 없다. 이러한 특성으로 사실상 동일한 출력값을 만들어낼 수 있는 입력값의 가지수는 수학적으로 무한개라고 볼 수 있다.
🕊 비둘기집 원리
비둘기가 10마리일 때 상자가 9개 밖에 존재하지 않는다면 아무리 비둘기를 균등하게 분배해도 최소한 한 상자에는 2마리의 비둘기가 들어가게 된다.
대부분의 해시 알고리즘은 고정된 길이의 문자열을 반환한다. MD5 해시 알고리즘은 128비트의 값을 반환하는데, 한 비트 단위가 0 혹은 1 두가지 경우의 수를 가진다는 점에서 총 2^128개 만큼의 문자열을 반환할 수 있다. 이는 매우 큰 숫자이지만 무한은 아니다. 하지만 입력값은 무한하다. 따라서 특정한 두 입력값의 해시 결과값이 동일한 결과가 발생할 수 있다. 이러한 원리에 따라 해시 충돌이 발생할 수 있다.
초당 해시값 계산 횟수의 총합
해시 연산 처리 능력을 측정하는 단위로 일반적으로 해시 속도를 의미한다고 볼 수 있다. 작업 증명(PoW) 알고리즘을 사용하는 모든 암호화폐에서 다루고 있다. 일반적으로 해시레이트가 높아져 연산량이 많아질 경우 더 빠른 채굴이 이루어지기 때문에 채굴 난이도가 높아진다. 채굴의 복잡성이 증가함에 따라 채굴 작업은 경쟁력을 갖추기 위해 해시레이트를 높여야 한다.
해시파워 = 해시레이트 * 해시스피드
블록체인에서 해시함수는 단방향 알고리즘을 사용한다. 또한 해시함수는 결정론적으로 작동하기 때문에 원래의 데이터가 같으면 해시값도 항상 동일하며, 출력값은 가능한 한 고른 범위에 균일하게 분포하는 특성을 가지고 있다. 해시 함수는 보통 그리 복잡하지 않은 알고리즘으로 구현되기 때문에 상대적으로 CPU, 메모리와 같은 시스템 자원을 덜 소모한다. 대표적인 해시 함수로는 MD5, SHA 등이 있다.
해시 함수가 안전성을 갖추기 위해 가져야 하는 성질들은 아래와 같다.
해시 충돌에 대해 안전해야 한다. 같은 해시값을 생성하는 두 개의 입력값을 찾는 것이 계산상 어려워야 한다.
해시함수 h와 y=h(M)이 있을 때, M≠M'이지만 h(M)=h(M')인 M과 M'을 찾기 어렵다.
사실상 충돌을 찾는 것은 매우 어렵다. 이론적으로 충돌이 없는 해시 함수는 존재하지 않지만, 충돌 저항성을 가진 해시 함수는 존재한다.
해시 함수는 단방향 함수이기에 출력된 해시값에 대해 그 해시값을 생성하는 입력값을 찾는 것이 계산상 어렵다.
해시함수 h와 y=h(M)이 있을 때 y=h(M')를 만족하는 M'을 찾기 어렵다.
이러한 성질을 이용한다면 데이터의 원본을 공개하지 않고 그 진위성을 검증할 수 있어 데이터 보호에 유리하다.
입력값에 대해 그 입력의 해시값을 바꾸지 않으면서 입력을 변경하는 것이 계산상 어렵다.
해시함수 h와 y=h(M)이 있을 때, h(M)=h(M')를 만족하는 M'을 찾기 어렵다.
충돌 저항성과 역상 저항성이 복합적으로 작용한 경우이다. 제2 역상 저항성은 충돌 저항성이 전제되어야 한다.
해싱은 블록체인의 핵심 기술이며, 블록체인 시스템 내에서 다양하게 활용되고 있다.
공개키를 해싱한 값을 지갑 주소로 사용하기 때문에 거래를 익명화 할 수 있어, 트랜잭션 기록을 보아도 해당 지갑의 주인이 누구인지 알 수 없다.
작업 증명 방식에서는 특정 조건을 만족하는 해시값을 찾기 위해 입력값이 논스를 찾아야 한다. 이 논스를 가장 먼저 찾는 노드에게 채굴 권한을 준다.
📌 Reference
https://www.upbitcare.com/academy/education/coin/52
https://m.blog.naver.com/moon0819/221950296327
https://continuetochallenge.tistory.com/86
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=furtherme&logNo=220787745958