[Blockchain] 블록체인 해시함수 / 해싱 / SHA-256
해시함수 / 충돌 저항성 / 역상 저항성
해시함수
-
해싱(Hashing) 은 다양한 크기의 입력값을 / 고정된 크기의 출력값으로 생성해 내는 과정이다
-
암호 해시 함수는 블록체인 및 다양한 분산 시스템에 데이터 ‘무결성’과 ‘보안’을 보장하는 데 사용된다
👉 기존의 해싱은 데이터베이스 조회 / 파일 분석 / 데이터 관리
등에 사용되어왔다
👉 암호 해시 함수는 메시지 인증 / 디지털 서명
등 보안 어플리케이션에서 사용될 수 있다
해시 함수는 어떠한 크기의 입력이 들어와도 ‘동일한 크기의 출력’을 뱉는 함수다
‘SHA-256 알고리즘’은 어떤 입력값을 넣어도 256 비트 길이의 값을 출력한다
블록체인에서 해싱의 역할
- 암호 해시 함수는 암호화폐 프로토콜에서 가장 중요한 기술 중 하나이다
👉 사용자에게 익명성을 보장하고
👉 트랜잭션을 하나로 연결 & 압축하며
👉 블록을 연결하는 동시에 그 무결성을 보장하는 역할을 한다
해시값을 사용해 익명성 보장
- 공개키를 해싱한 값을 지갑 주소로 사용하여 거래를 익명화할 수 있다
- 트랜잭션 기록에는 해시값으로 암호화된 지갑 주소와 송금 및 잔액을 확인할 수 있을 뿐, 해당 지갑의 주인이 누구인지 파악할 수 없다
무결성 검증
블록체인에서 해시 함수를 사용해 무결성을 검증하는 경우는 두가지
- 이전 블록의 값을 해싱한 값을 사용해 이전 블록을 가리킵니다. 만약 이전 블록을 해싱한 값이 달라진 경우 해당 블록 또는 가리키고 있던 이전 블록에 위변조가 일어났음을 알 수 있다
- 블록에 저장된 모든 트랜잭션을 ‘머클 트리’ 알고리즘을 사용해 하나의 해시값으로 저장한다 만약 트랜잭션이 하나라도 변한 경우, 블록에 저장된 해시값도 변경됩니다.
해시값을 사용해 채굴 노드를 정함
- 비트코인에서는 PoW(작업 증명) 방식을 사용해 어떤 노드가 블록을 만들지 정한다
- 작업 증명 방식(PoW)에서는 특정 조건을 만족하는 해시값을 만족하기위해 입력값인 논스(Nonce)를 찾아야 한다
- 가장 먼저 찾는 노드에게 ‘블록을 채굴할 권한’을 주며 채굴에 대한 보상으로 비트코인을 제공한다 >
암호 해시 함수
- 블록체인에서 사용되는 해시 함수는 ‘단방향’ 알고리즘을 사용하고,
- 입력값이 조금만 달라져도 아예 다른 형태로 변하기 때문에,
- 해싱된 값을 이용하여 기존의 값을 찾기란 매우 어렵다
충돌
만약에 서로 다른 입력값을 해시 함수에 넣었는데 동일한 출력값을 내뱉는 경우도 있는데, 이를 충돌이라 한다
충돌은 시스템에 심각한 위협이 될 수 있기 때문에
충돌은 해시 함수를 만들 때 가장 중요한 요소 중 하나로 작용한다
암호 해시 함수의 안전성을 평가하는 요소는 3가지이다
- 충돌 저항성
- 역상 저항성
- 제2 역상 저항성
충돌 저항성
-
충돌 저항성은 어떤 해시 함수가 충돌하는 서로 다른 두 입력값을 가지고 있는지 발견되지 않은 상태를 의미한다
👉 마치 ‘사람의 지문’과 같다 -
지문은 완전히 같을 확률이 매우 적기 때문에, 사람을 식별할 때 주민번호를 일일이 입력하는 대신 지문을 사용할 수 있다
-
사실상 해시 함수의 입력값은 그 ‘길이와 종류가 무한’하지만, ‘입력값은 유한’하기 때문에 누군가가 충돌하는 두 입력값을 발견할 가능성이 있다
역상 저항성
-
역상 저항성은 어떤 해시 함수가 특정한 값을 출력하는 입력값을 찾을 ‘확률이 매우 낮을 경우’를 의미한다 (단방향 함수의 성질)
-
단방향 함수는 입력값을 👉 통해 출력값을 얻을 수는 있지만, 출력값을 👉 통해 입력값을 얻을 수는 없는 함수이다
-
역상 저항성은 데이터를 보호하는 데 매우 유리하다
-
메시지의 해시값을 사용하면 해당 메시지의 ‘원본’을 공개하지 않고도 진위성을 검증할 수 있다
⭐ ex) 패스워드에 대한 진위성을 검증할 때
패스워드 원문을 비교하지 않고,
패스워드를 해싱한 값을 사용하여 패스워드가 노출되는 것을 방지한다
제2 역상 저항성
-
제2 역상 저항성은 ‘충돌 저항성’ & ‘역상 저항성’이 복합적으로 작용한 경우이다
⭐ ex) A라는 입력값의 해시값과 / 동일한 해시값을 내는 B 입력값을
누군가가 알고 있지 않은 경우이다
반대로 이 B 입력값을 누군가가 발견한 경우 제2 역상 공격이 가능하다
제2 역상 공격
제2 역상 공격은 A 입력값을 👉 통해 A1 라는 해시값이 나왔을 때,
A1 해시값을 출력하게 만드는 👉 B 입력값을 찾는 것입니다.
따라서 제2 역상 저항성은 충돌 저항성이 전제되어야 한다