피니 공격
피니 공격(Finney Attack)이란 이중지불의 레이스 어택을 조금 더 발전시킨 공격 유형이다. 이 공격을 위해서는 공격자가 직접 채굴을 해야 한다. 공격자는 채굴에 성공했을 경우, 생성할 블록에 본인 코인을 본인의 지갑으로 보내는 전송 내역을 포함시킨다. 공격자는 이 블록을 네트워크에 전파시키지 않고 기다린다. 그동안 공격자는 본인 지갑으로 보내는 코인을 이용해 타겟과 서비스 거래를 시도한다. 이때 타겟이 해당 코인의 또 다른 0 컨펌(Confirm) 내역이 있는지 확인하더라도 공격자의 의도를 파악하기 어렵다. 타겟이 0 컨펌 내역을 믿고 서비스 거래를 완료하면, 공격자는 본인의 블록을 네트워크에 전파시킨다. 공격자 본인의 지갑으로 보내는 내역은 1 컨펌이 되고, 타겟과 거래한 내역은 여전히 0 컨펌이므로 이후 타겟과의 거래내역은 취소된다. 피니 어택은 레이스 어택보다 강력하지만, 공격자가 어느 정도의 리스크를 가진다. 만일 공격자가 본인의 블록을 네트워크에 전파시키기 전에 제 3자가 블록을 채굴해버릴 경우 피니 어택은 실패한다. 이 경우 공격자는 블록 채굴 보상만큼의 손실을 보게 된다.
개요
피니 공격은 최초로 공개키 암호화 기법을 도입한 PGP 개발자 중 한 명인 할 피니(Hal Finney)가 비트코인 포럼에서 처음 언급하여 그의 이름을 따서 명명되었다.[1] 피니 공격은 이중지불 공격의 변형이다. 공격자는 두 가지 트랜잭션을 만든다. 하나는 피해자를 신용하고 다른 하나는 자신을 신용한다. 그들은 첫 번째 거래를 유지하고 두 번째 거래를 한 블록으로 채굴하려고 시도한다. 그들이 성공하면 첫 거래로 빠르게 구매하고 구매한 상품을 얻은 다음 사전 채굴 블록을 해제한다. 이렇게 하면 첫 번째 트랜잭션이 전체 네트워크를 통해 전파되더라도 첫 번째 트랜잭션이 무효가 된다. 피니 공격은 실행하기가 어렵지만 완전히 실행되기 전까지는 탐지할 수 없다. 이러한 공격으로부터 자신을 보호하는 유일한 방법은 구매한 상품을 제공하기 전에 거래에 대해 확인을 하나 이상 요구하고 더 가치 있는 거래에 대해 추가 확인을 요구하는 것이다.[2]
특징
피니시 공격은 이중지불 유형 중 하나이다. 요컨대 공격자는 일정량의 네트워크 해시를 제어한다. 공격자가 그의 주소 A에서 그의 다른 주소 B로 약간의 코인을 보냈다고 하자. 그는 이 거래로 블록을 찾으려고 할 것이고, 그것을 발견하는 즉시 같은 코인의 상품, 즉 그의 주소 A부터 판매자 C까지 거래를 할 것이다. 판매자가 거래 확인을 기다리지 않고 화물을 발송할 경우, 공격자는 충분한 용량이 확보되면 자체 조작으로 단위를 선택하고 확정한다. 그리고 판매자에게 보낸 것은 무효로 남을 것이다.
- 판매자가 확인되지 않은 거래를 수락한 경우에만 작동한다.
- 판매자가 네트워크의 모든 사람이 자신의 지불에 동의했는지 확인하기 위해 몇 초 동안 대기하는 경우에도 여전히 작동한다.
- 침입자는 자신의 블록 컨텐츠를 마이닝하고 제어해야 한다. 그러나 이론적으로는 해시 레이트, 특히 네트워크 해시 레이트의 50 %보다 훨씬 적은 해시율로 이를 수행할 수 있다.
다음과 같이 진행됩니다.
- 공격자는 정상적으로 블록을 채굴한다. 그가 찾고자하는 블록에, 그는이 거래를 방송하지 않고 자신의 동전을 자신에게 돌려주는 거래를 포함한다.
- 블록을 찾으면 브로드 캐스트하지 않는다. 대신, 그는 물건이나 서비스를 위해 같은 동전을 상인에게 보낸다.
- 상인이 지불을 수락하고 돌이킬 수없는 서비스를 제공 한 후에 공격자는 자신의 블록을 브로드 캐스트한다. 이 블록에 포함 된 코인을 자신에게 보내는 거래는 확인되지 않은 지불을 판매자에게 재정의한다.
공격자가 지불을 보내고 판매자가 승인할 때까지 블록을 찾는데 걸리는 시간이 t이고 블록을 찾는 평균 시간이 T 인 경우이 블록에서 다른 블록이 네트워크에서 발견 될 가능성은 t / T입니다 시각; 이 경우 공격은 실패, 그리고 공격자는 B의 블록 보상을 잃게된다. 이는 공격 시도의 평균 비용이 약 (t / T) * B임을 의미한다. 경험상, 상인은 적어도 t = V * T / B (V는 거래의 가치)를 기다려서 그에 대한이 공격을 시도하는 것이 수익성이 없는지 확인해야 한다. 민첩한 공격자가 여러 공격에 동일한 블록을 사용하여 잠재적으로 총 가치를 얻을 수 있기 때문에 이것은 충분하지 않을 수 있다. 공격자의 해시율이 낮을수록 공격을 수행할 기회가 줄어든다. 공격이 일부 비유동 상품을 얻기위한 것이라면, 이 상품에 대한 필요성이 블록을 찾는 것과 일치하는 것은 어렵다. 액체가 무언가를 얻기위한 공격이라면 (예 : 비트코인을 다른 돈으로 교환) 기회는 항상 존재하지만 상인은 몇 가지 확인을 요구할 것이다. 이로 인해 실제로 공격을 사용하기가 어렵다.[2]
대안
비트코인 초창기 시절에는 새로운 블록을 생성하는 난이도가 낮았기 때문에 이런 방식을 시도할 수 있었지만, 현재의 난이도와 해시파워를 생각했을때에는 시도조차 못할 공격 방법이다. 새로운 블록을 만드는 과정이 어렵고 새로운 블록을 생성한 댓가의 '보상'이 경제적으로 더 이득이며 거래에 큰 금액을 지불해야 된다면 충분히 확인을 하고 돈을 지불할 것이기 때문이다. 또한 타임스탬프상의 순간적인 하드포크를 이용한 이 공격방법은 일시적으로 이중지불이 성공한 것으로 보일 수 있지만 곧 다른 노드들에게 적발되게 되며, 전송은 무효화 된다.
각주
- ↑ 어미새, 〈할 피니(Hal Finney) & 피니어택에 관한 개념정리.〉, 《네이버 블로그》, 2018-03-16
- ↑ 2.0 2.1 Murch, 〈What is a Finney attack?〉, 《StackExchange》, 2012-10-04
참고자료
- Murch, 〈What is a Finney attack?〉, 《StackExchange》, 2012-10-04
- dezmond, 〈What is Finney's attack?〉, 《steemit》, 2018-07-05
- ebrary, 〈Finney Attack〉, 《Ebrary.net》
- 〈블록체인〉, 《나무위키》
- 어미새, 〈할 피니(Hal Finney) & 피니어택에 관한 개념정리.〉, 《네이버 블로그》, 2018-03-16
- Hal Finney, 〈Bitcoin and me (Hal Finney)〉, 《Bitcoin Forum》, 2013-03-19
- 한승환, 〈할 피니, 최초의 비트코인 수령자 그리고 마지막 편지〉, 《Brunch》, 2016-12-24
- KINGSMAN, 〈# 24 할 피니(Hal Finney), 피니어택에 관한 개념정리.〉, 《Blockchainhub》, 2019-01-11
같이 보기