해시값을 사용해 익명성 보장
공개키를 해싱한 값을 지갑주소로 사용하여 거래를 익명화 할 수 있다. 트랜잭션 기록에는 해시값으로 암호화된 지갑 주소와 송금 및 잔액을 확인할 수 있을 뿐, 해당 지갑의 주인이 누구인지 파악할 수는 없다.
무결성 검증
블록체인에서 해시함수를 사용해 무결성을 검증하는 2가지 경우가 있다.
1. 이전 블록의 값을 해싱하여 가르킨다. 이전 블록을 해싱한 값이 달라진 경우 해당블록 또는 이전블록에 위변조가 일어난것을 알 수 있다.
2. 블록에 자정된 모든 트랜잭션을 머클트리 알고리즘을 사용해 하나의 해시값으로 저장한다. 트랜잭션이 하나라도 변경되면 해시값이 변경되므로 위변조를 알 수 있다.
해시값을 사용해 채굴노드를 정함
비트코인은 PoW방식을 사용해 어떤노드가 블록을 만들지 정한다. 특정조건을 만족하는 해시값을 만족하는 입력값인 논스(nonce)를 가장 먼저 찾는 노드에세 블록을 채굴한 권한을 주고 보상으로 비트코인을 제공한다.
일반적으로 암호 해시 함수를 복호화하기 위해서는 수많은 무차별 대입을 시도해야 한다.
해시 함수의 출력값은 입력값이 조금만 달라져도 아예 다른 형태로 변하기 때문에, 출력값을 통해 입력값을 유추하는 것은 매우 어렵다.
서로 다른 입력값을 해시함수를 통해 나온 출력값이 동일한 것이 충돌이라한다.
충돌 저항성은 서로 다른 두 입력값이 해시함수를 통해 같은 출력값을 가지게 되는 현상이 아직 발견되지 않은 상태를 말한다.
사실상 해시 함수의 입력값은 그 길이와 종류가 무한하지만, 입력값은 유한하기 때문에 누군가가 충돌하는 두 입력값을 발견할 가능성도 있다.
SHA-256의 출력값의 경우의 수는 2^256가 되므로 사실상 충돌하기 어렵다.