해시 충돌

비트코인을 비롯한 거의 모든 블록체인 시스템은 해시 함수의 collision을 찾기가 어렵다는 사실을 전제하고 있습니다. 비트코인은 SHA256, 이더리움은 Keccak 해시 함수를 사용하고 있는데, 만약 이들 해시 함수에 collision이 발견되면 비트코인이나 이더리움의 안정성을 담보할 수 없게 됩니다.

비트코인 스크립트 언어를 이용하면 hash collision을 찾았을 때 자동으로 상금(bounty)를 지급하는 스크립트를 작성할 수도 있습니다. 2013년 Peter Todd가 실제로 이러한 바운티 프로그램을 제안하였고, SHA1, SHA256, RIPEMD160과 같은 해시 함수 뿐만 아니라RIPEMD160(SHA256()), SHA256(SHA256())와 같은 더블 해시에도 바운티를 걸었습니다.

자세한 내용은 아래 링크에서 볼 수 있습니다.

https://bitcointalk.org/index.php?topic=293382.0

일례로, SHA1에 대한 스크립트는 다음과 같습니다.

scriptPubKey: OP_2DUP OP_EQUAL OP_NOT OP_VERIFY OP_SHA1 OP_SWAP OP_SHA1 OP_EQUAL
scriptSig: <preimage1> <preimage2>

두 개 의 서로 다른 메시지를 넣어서 각각 SHA1 해시를 구한 다음 비교했을 때 같은 값이 나오면 SHA1 해시에 collision이 발생한 것이고, lock script가 풀리게 됩니다.

그리고 2017년 2월에 실제로 누군가가 SHA1 바운티를 풀어서2.48 비트코인을 상금으로 가져갔습니다!

https://blockchain.info/address/37k7toV1Nv4DfmQbmZ8KuZDQCYK9x5KpzP

다행히 비트코인은 SHA1이 아닌 SHA256 해시 함수를 사용하고 있기 때문에 SHA1 해시가 풀린 사건이 비트코인에 직접적으로 영향을 미치지는 않습니다. 다만, 이 사건은 해시 함수의 안정성이 얼마나 중요한지를 잘 보여주고 있습니다. 관련 내용은 아래 레딧 링크에서 보실 수 있습니다.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s