ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 비트코인 트랜잭션의 인증(Validation)
    Cryptography 2021. 10. 15. 22:18
    반응형

    트랜잭션 인증

    비트코인 트랜잭션의 검증과정(verification process)은 비트코인 노드를 통해서 수행됩니다. 노드들은 하나의 트랜잭션을 검증할 때에 아래 3가지를 체크하게 됩니다:

     

    • 먼저, 해당 트랜잭션 인풋이 이전에 지불된 적이 없는지 체크합니다. 이 검증 단계는 해당 트랜잭션 인풋이 중복 지불되지 않도록 합니다.

     

    • 트랜잭션 아웃풋의 합계가 트랜잭션 인풋의 합계보다 크지 않은지 체크합니다. "인풋의 합계 >= 아웃풋의 합계"여야 하는데요. 이를 통해, 비트코인이 출처가 없이 생성되는 것을 막습니다.

     

    • 디지털 서명이 유효한지 확인하여 script가 유효함을 확인합니다.

     

    비록 트랜잭션 생성과 인증이 일반적으로 안전한 프로세스이긴하나, 비트코인에는 아래와 같은 몇 가지 취약점이 존재합니다.

     

    트랜잭션 버그

    아래의 2가지는 널리 알려진 비트코인의 주요 취약점입니다.

     

    트랜잭션 연성(malleability)

    트랜잭션 연성은 비트코인에 대한 공격(attack)으로 비트코인 구현체의 버그로 인한 것이었습니다. 이 버그 때문에, 공격자가 트랜잭션의 ID를 변경하는 것이 가능하였고, 특정 트랜잭션이 실행될 수 없는 상황을 낳게 되었습니다.

     

    이러한 점은 중복 예금이나 출금이 발생하는 것을 가능하게 하기도 합니다. 정확히는, 이 버그는 비트코인 트랜잭션이 확정되기 전에 유니크 ID를 변경하는 것을 가능하게 합니다. 만약 트랜잭션을 비유효하게 만들지 않고 확정 전에 ID가 변경된다면, 트랜잭션이 전혀 발생하지 않은 것으로 인식되었고 트랜잭션이 아예 실행된 적이 없는 것으로 보여 중복 예금과 출금을 허용하게 됩니다.

     

    Value Overflow

    이 건은 비트코인 역사 상 가장 널리 알려진 사례입니다. 2010년 8월 15일 하나의 트랜잭션이 대략 1840억개 비트코인을 생성한 것이 발견되었습니다. 이 문제는 비트코인 코드 안의 양을 표시하는 필드가 unsigned 정수 대신 signed 정수로 정의되어 정수 overflow 버그로 인한 것이었습니다. 이 버그는 양이 음수가 될 수 있어서 아웃풋이 너무 커서 최종 가치가 overflow가 되는 상황이 발생하게 하였습니다. 비트코인 코드 상의 검증 로직에서는, 모두 정상적으로 인식되어서 수수료 또한 양수인 것으로 보이게 되었습니다. 이 버그는 soft fork 이후 수정되었습니다.

     

     

    Reference

    [1] Mastering Blockchain

    [2] https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2010-5139 

    [3] https://bitcoincore.org/en/2019/11/08/CVE-2017-18350/

    [4] https://bitcoincore.org/en/2018/09/20/notice/

    반응형
Kaden Sungbin Cho