피니 공격
피니 공격(Finney Attack)이란 이중지불의 레이스 어택을 조금 더 발전시킨 공격 유형이다. 이 공격을 위해서는 공격자가 직접 채굴을 해야 한다. 공격자는 채굴에 성공했을 경우, 생성할 블록에 본인 코인을 본인의 지갑으로 보내는 전송 내역을 포함시킨다. 공격자는 이 블록을 네트워크에 전파시키지 않고 기다린다. 그동안 공격자는 본인 지갑으로 보내는 코인을 이용해 타겟과 서비스 거래를 시도한다. 이때 타겟이 해당 코인의 또 다른 0 컨펌(Confirm) 내역이 있는지 확인하더라도 공격자의 의도를 파악하기 어렵다. 타겟이 0 컨펌 내역을 믿고 서비스 거래를 완료하면, 공격자는 본인의 블록을 네트워크에 전파시킨다. 공격자 본인의 지갑으로 보내는 내역은 1 컨펌이 되고, 타겟과 거래한 내역은 여전히 0 컨펌이므로 이후 타겟과의 거래내역은 취소된다. 피니 어택은 레이스 어택보다 강력하지만, 공격자가 어느 정도의 리스크를 가진다. 만일 공격자가 본인의 블록을 네트워크에 전파시키기 전에 제 3자가 블록을 채굴해버릴 경우 피니 어택은 실패한다. 이 경우 공격자는 블록 채굴 보상만큼의 손실을 보게 된다.
개요[편집]
피니 공격은 최초로 공개키 암호화 기법을 도입한 PGP 개발자 중 한 명인 할 피니(Hal Finney)가 비트코인 포럼에서 처음 언급하여 그의 이름을 따서 명명되었다.[1] 피니 공격은 이중지불 공격의 변형이다. 공격자는 두 가지 트랜잭션을 만든다. 하나는 피해자를 신용하고 다른 하나는 자신을 신용한다. 그들은 첫 번째 거래를 유지하고 두 번째 거래를 한 블록으로 채굴하려고 시도한다. 그들이 성공하면 첫 거래로 빠르게 구매하고 구매한 상품을 얻은 다음 사전 채굴 블록을 해제한다. 이렇게 하면 첫 번째 트랜잭션이 전체 네트워크를 통해 전파되더라도 첫 번째 트랜잭션이 무효가 된다. 피니 공격은 실행하기가 어렵지만 완전히 실행되기 전까지는 탐지할 수 없다. 이러한 공격으로부터 자신을 보호하는 유일한 방법은 구매한 상품을 제공하기 전에 거래에 대해 확인을 하나 이상 요구하고 더 가치 있는 거래에 대해 추가 확인을 요구하는 것이다.[2]
특징[편집]
- 판매자가 확인되지 않은 거래를 수락한 경우에만 작동한다.
- 판매자가 네트워크의 모든 사람이 자신의 지불에 동의했는지 확인하기 위해 몇 초 동안 대기하는 경우에도 여전히 작동한다.
- 공격자는 자신의 블록 컨텐츠를 채굴하고 제어해야 한다. 그러나 이론적으로는 해시 레이트, 특히 네트워크 해시 레이트의 50 %보다 훨씬 적은 해시율로 이를 수행할 수 있다.
피니 공격은 다음과 같이 진행된다.
- 마이너가 공격자 지갑 주소(A)에서 또 다른 공격자 지갑 주소(B)로 보내는 트랜잭션을 포함한 신규 블록을 생성(채굴)하고 이를 브로드캐스트 하지 않고 있는다.
- 공격자의 지갑 주소(A)에서 피해자의 지갑 주소(C)로 지불하며, 환전이나 물건을 구입하거나 서비스를 받고 떠난다.
- 마이너가 신규 블록을 브로드캐스트하면 미확인 트랜잭션(A→C)을 무효로 한다.
공격자가 지불을 보내고 판매자가 승인할 때까지 블록을 찾는데 걸리는 시간이 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
같이 보기[편집]