검수요청.png검수요청.png

"피니 공격"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
(개요)
잔글
 
(다른 사용자 한 명의 중간 판 4개는 보이지 않습니다)
2번째 줄: 2번째 줄:
  
 
== 개요 ==
 
== 개요 ==
피니 공격은 최초로 공개키 암호화 기법을 도입한 [[PGP]] 개발자 중 한 명인 [[할 피니]](Hal Finney)가 [[비트코인 포럼]]에서 처음 언급하여 그의 이름을 따서 명명되었다.<ref>어미새, 〈[http://a.to/19o2G8r 할 피니(Hal Finney) & 피니어택에 관한 개념정리.]〉, 《네이버 블로그》, 2018-03-16</ref> 피니 공격은 [[이중지불]] 공격의 변형이다. 공격자는 두 가지 [[트랜잭션]]을 만든다. 하나는 피해자를 신용하고 다른 하나는 자신을 신용한다. 그들은 첫 번째 거래를 유지하고 두 번째 거래를 한 [[블록]]으로 [[채굴]]하려고 시도한다. 그들이 성공하면 첫 거래로 빠르게 구매하고 구매한 상품을 얻은 다음 사전 채굴 블록을 해제한다. 이렇게 하면 첫 번째 트랜잭션이 전체 [[네트워크]]를 통해 전파되더라도 첫 번째 트랜잭션이 무효가 된다. 피니 공격은 실행하기가 어렵지만 완전히 실행되기 전까지는 탐지할 수 없다. 이러한 공격으로부터 자신을 보호하는 유일한 방법은 구매한 상품을 제공하기 전에 거래에 대해 확인을 하나 이상 요구하고 더 가치있는 거래에 대해 추가 확인을 요구하는 것이다.<ref name="Murch">Murch, 〈[https://bitcoin.stackexchange.com/questions/4942/what-is-a-finney-attack What is a Finney attack?]〉, 《StackExchange》, 2012-10-04</ref>
+
피니 공격은 최초로 공개키 암호화 기법을 도입한 [[PGP]] 개발자 중 한 명인 [[할 피니]](Hal Finney)가 [[비트코인 포럼]]에서 처음 언급하여 그의 이름을 따서 명명되었다.<ref>어미새, 〈[http://a.to/19o2G8r 할 피니(Hal Finney) & 피니어택에 관한 개념정리.]〉, 《네이버 블로그》, 2018-03-16</ref> 피니 공격은 [[이중지불]] 공격의 변형이다. 공격자는 두 가지 [[트랜잭션]]을 만든다. 하나는 피해자를 신용하고 다른 하나는 자신을 신용한다. 그들은 첫 번째 거래를 유지하고 두 번째 거래를 한 [[블록]]으로 [[채굴]]하려고 시도한다. 그들이 성공하면 첫 거래로 빠르게 구매하고 구매한 상품을 얻은 다음 사전 채굴 블록을 해제한다. 이렇게 하면 첫 번째 트랜잭션이 전체 [[네트워크]]를 통해 전파되더라도 첫 번째 트랜잭션이 무효가 된다. 피니 공격은 실행하기가 어렵지만 완전히 실행되기 전까지는 탐지할 수 없다. 이러한 공격으로부터 자신을 보호하는 유일한 방법은 구매한 상품을 제공하기 전에 거래에 대해 확인을 하나 이상 요구하고 더 가치 있는 거래에 대해 추가 확인을 요구하는 것이다.<ref name="Murch">Murch, 〈[https://bitcoin.stackexchange.com/questions/4942/what-is-a-finney-attack What is a Finney attack?]〉, 《StackExchange》, 2012-10-04</ref>
  
 
== 특징 ==
 
== 특징 ==
피니시 공격은 [[이중지불]] 유형 중 하나이다. 요컨대 공격자는 일정량의 [[네트워크]] [[해시]]를 제어한다. 공격자가 그의 주소 A에서 그의 다른 주소 B로 약간의 코인을 보냈다고 하자. 그는 이 거래로 블록을 찾으려고 할 것이고, 그것을 발견하는 즉시 같은 코인의 상품, 즉 그의 주소 A부터 판매자 C까지 거래를 할 것이다. 판매자가 거래 확인을 기다리지 않고 화물을 발송할 경우, 공격자는 충분한 용량이 확보되면 자체 조작으로 단위를 선택하고 확정한다. 그리고 판매자에게 보낸 것은 무효로 남을 것이다.
 
 
* 판매자가 확인되지 않은 거래를 수락한 경우에만 작동한다.
 
* 판매자가 확인되지 않은 거래를 수락한 경우에만 작동한다.
 
* 판매자가 네트워크의 모든 사람이 자신의 지불에 동의했는지 확인하기 위해 몇 초 동안 대기하는 경우에도 여전히 작동한다.
 
* 판매자가 네트워크의 모든 사람이 자신의 지불에 동의했는지 확인하기 위해 몇 초 동안 대기하는 경우에도 여전히 작동한다.
* 침입자는 자신의 블록 컨텐츠를 마이닝하고 제어해야 한다. 그러나 이론적으로는 해시 레이트, 특히 네트워크 해시 레이트의 50 %보다 훨씬 적은 해시율로 이를 수행할 수 있다.
+
* 공격자는 자신의 [[블록]] 컨텐츠를 채굴하고 제어해야 한다. 그러나 이론적으로는 [[해시 레이트]], 특히 [[네트워크]] 해시 레이트의 50 %보다 훨씬 적은 해시율로 이를 수행할 수 있다.
  
다음과 같이 진행됩니다.
+
피니 공격은 다음과 같이 진행된다.
  
# 공격자는 정상적으로 블록을 채굴한다. 그가 찾고자하는 블록에, 그는이 거래를 방송하지 않고 자신의 동전을 자신에게 돌려주는 거래를 포함한다.
+
# 마이너가 공격자 지갑 주소(A)에서 또 다른 공격자 지갑 주소(B)로 보내는 [[트랜잭션]]을 포함한 신규 블록을 생성(채굴)하고 이를 [[브로드캐스트]] 하지 않고 있는다.
# 블록을 찾으면 브로드 캐스트하지 않는다. 대신, 그는 물건이나 서비스를 위해 같은 동전을 상인에게 보낸다.
+
# 공격자의 지갑 주소(A)에서 피해자의 지갑 주소(C)로 지불하며, 환전이나 물건을 구입하거나 서비스를 받고 떠난다.
# 상인이 지불을 수락하고 돌이킬 수없는 서비스를 제공 한 후에 공격자는 자신의 블록을 브로드 캐스트한다. 이 블록에 포함 된 코인을 자신에게 보내는 거래는 확인되지 않은 지불을 판매자에게 재정의한다.
+
# 마이너가 신규 블록을 브로드캐스트하면 미확인 트랜잭션(A→C)을 무효로 한다.
  
공격자가 지불을 보내고 판매자가 승인할 때까지 블록을 찾는데 걸리는 시간이 t이고 블록을 찾는 평균 시간이 T 인 경우이 블록에서 다른 블록이 네트워크에서 발견 될 가능성은 t / T입니다 시각; 이 경우 공격은 실패, 그리고 공격자는 B의 블록 보상을 잃게된다. 이는 공격 시도의 평균 비용이 약 (t / T) * B임을 의미한다. 경험상, 상인은 적어도 t = V * T / B (V는 거래의 가치)를 기다려서 그에 대한이 공격을 시도하는 것이 수익성이 없는지 확인해야 한다. 민첩한 공격자가 여러 공격에 동일한 블록을 사용하여 잠재적으로 총 가치를 얻을 수 있기 때문에 이것은 충분하지 않을 수 있다. 공격자의 해시율이 낮을수록 공격을 수행할 기회가 줄어든다. 공격이 일부 비유동 상품을 얻기위한 것이라면, 이 상품에 대한 필요성이 블록을 찾는 것과 일치하는 것은 어렵다. 액체가 무언가를 얻기위한 공격이라면 (예 : 비트코인을 다른 돈으로 교환) 기회는 항상 존재하지만 상인은 몇 가지 확인을 요구할 것이다. 이로 인해 실제로 공격을 사용하기가 어렵다.<ref name="Murch"></ref>
+
공격자가 지불을 보내고 판매자가 승인할 때까지 블록을 찾는데 걸리는 시간이 t이고 블록을 찾는 평균 시간이 T 인 경우이 블록에서 다른 블록이 네트워크에서 발견될 가능성은 t / T입니다 시각; 이 경우 공격은 실패, 그리고 공격자는 B의 블록 보상을 잃게 된다. 이는 공격 시도의 평균 비용이 약 (t / T) * B임을 의미한다. 경험상, 상인은 적어도 t = V * T / B (V는 거래의 가치)를 기다려서 그에 대한이 공격을 시도하는 것이 수익성이 없는지 확인해야 한다. 민첩한 공격자가 여러 공격에 동일한 블록을 사용하여 잠재적으로 총 가치를 얻을 수 있기 때문에 이것은 충분하지 않을 수 있다. 공격자의 해시율이 낮을수록 공격을 수행할 기회가 줄어든다. 공격이 일부 비유동 상품을 얻기 위한 것이라면, 이 상품에 대한 필요성이 블록을 찾는 것과 일치하는 것은 어렵다. 액체가 무언가를 얻기 위한 공격이라면 (예 : 비트코인을 다른 돈으로 교환) 기회는 항상 존재하지만, 상인은 몇 가지 확인을 요구할 것이다. 이로 인해 실제로 공격을 사용하기가 어렵다.<ref name="Murch"></ref> 피니 어택에는 하드웨어 마이닝과 완벽한 타이밍이 필요하기 때문에 이 또한 어지간해서는 해내기 힘들다.
  
 
== 대안 ==
 
== 대안 ==
[[비트코인]] 초창기 시절에는 새로운 [[블록]]을 생성하는 [[난이도]]가 낮았기 때문에 이런 방식을 시도할 수 있었지만, 현재의 난이도와 [[해시파워]]를 생각했을때에는 시도조차 못할 공격 방법이다. 새로운 블록을 만드는 과정이 어렵고 새로운 블록을 생성한 댓가의 '보상'이 경제적으로 더 이득이며 거래에 큰 금액을 지불해야 된다면 충분히 확인을 하고 돈을 지불할 것이기 때문이다. 또한 [[타임스탬프]]상의 순간적인 [[하드포크]]를 이용한 이 공격방법은 일시적으로 [[이중지불]]이 성공한 것으로 보일 수 있지만 곧 다른 [[노드]]들에게 적발되게 되며, 전송은 무효화 된다.
+
[[비트코인]] 초창기 시절에는 새로운 [[블록]]을 생성하는 [[채굴 난이도]]가 낮았기 때문에 이런 방식을 시도할 수 있었지만, 현재의 채굴 난이도와 [[해시파워]]를 생각했을 때에는 시도조차 못 할 공격 방법이다. 새로운 블록을 만드는 과정이 어렵고 새로운 블록을 생성한 대가의 '보상'이 경제적으로 더 이득이며 거래에 큰 금액을 지불해야 한다면 충분히 확인 하고 돈을 지불할 것이기 때문이다. 또한 [[타임스탬프]]상의 순간적인 [[하드포크]]를 이용한 이 공격 방법은 일시적으로 [[이중지불]]이 성공한 것으로 보일 수 있지만, 곧 다른 [[노드]]들에게 적발되게 되며, 전송은 무효화 된다.
  
 
{{각주}}
 
{{각주}}

2022년 3월 17일 (목) 08:47 기준 최신판

피니 공격(Finney Attack)이란 이중지불레이스 어택을 조금 더 발전시킨 공격 유형이다. 이 공격을 위해서는 공격자가 직접 채굴을 해야 한다. 공격자는 채굴에 성공했을 경우, 생성할 블록에 본인 코인을 본인의 지갑으로 보내는 전송 내역을 포함시킨다. 공격자는 이 블록을 네트워크에 전파시키지 않고 기다린다. 그동안 공격자는 본인 지갑으로 보내는 코인을 이용해 타겟과 서비스 거래를 시도한다. 이때 타겟이 해당 코인의 또 다른 0 컨펌(Confirm) 내역이 있는지 확인하더라도 공격자의 의도를 파악하기 어렵다. 타겟이 0 컨펌 내역을 믿고 서비스 거래를 완료하면, 공격자는 본인의 블록을 네트워크에 전파시킨다. 공격자 본인의 지갑으로 보내는 내역은 1 컨펌이 되고, 타겟과 거래한 내역은 여전히 0 컨펌이므로 이후 타겟과의 거래내역은 취소된다. 피니 어택은 레이스 어택보다 강력하지만, 공격자가 어느 정도의 리스크를 가진다. 만일 공격자가 본인의 블록을 네트워크에 전파시키기 전에 제 3자가 블록을 채굴해버릴 경우 피니 어택은 실패한다. 이 경우 공격자는 블록 채굴 보상만큼의 손실을 보게 된다.

개요[편집]

피니 공격은 최초로 공개키 암호화 기법을 도입한 PGP 개발자 중 한 명인 할 피니(Hal Finney)가 비트코인 포럼에서 처음 언급하여 그의 이름을 따서 명명되었다.[1] 피니 공격은 이중지불 공격의 변형이다. 공격자는 두 가지 트랜잭션을 만든다. 하나는 피해자를 신용하고 다른 하나는 자신을 신용한다. 그들은 첫 번째 거래를 유지하고 두 번째 거래를 한 블록으로 채굴하려고 시도한다. 그들이 성공하면 첫 거래로 빠르게 구매하고 구매한 상품을 얻은 다음 사전 채굴 블록을 해제한다. 이렇게 하면 첫 번째 트랜잭션이 전체 네트워크를 통해 전파되더라도 첫 번째 트랜잭션이 무효가 된다. 피니 공격은 실행하기가 어렵지만 완전히 실행되기 전까지는 탐지할 수 없다. 이러한 공격으로부터 자신을 보호하는 유일한 방법은 구매한 상품을 제공하기 전에 거래에 대해 확인을 하나 이상 요구하고 더 가치 있는 거래에 대해 추가 확인을 요구하는 것이다.[2]

특징[편집]

  • 판매자가 확인되지 않은 거래를 수락한 경우에만 작동한다.
  • 판매자가 네트워크의 모든 사람이 자신의 지불에 동의했는지 확인하기 위해 몇 초 동안 대기하는 경우에도 여전히 작동한다.
  • 공격자는 자신의 블록 컨텐츠를 채굴하고 제어해야 한다. 그러나 이론적으로는 해시 레이트, 특히 네트워크 해시 레이트의 50 %보다 훨씬 적은 해시율로 이를 수행할 수 있다.

피니 공격은 다음과 같이 진행된다.

  1. 마이너가 공격자 지갑 주소(A)에서 또 다른 공격자 지갑 주소(B)로 보내는 트랜잭션을 포함한 신규 블록을 생성(채굴)하고 이를 브로드캐스트 하지 않고 있는다.
  2. 공격자의 지갑 주소(A)에서 피해자의 지갑 주소(C)로 지불하며, 환전이나 물건을 구입하거나 서비스를 받고 떠난다.
  3. 마이너가 신규 블록을 브로드캐스트하면 미확인 트랜잭션(A→C)을 무효로 한다.

공격자가 지불을 보내고 판매자가 승인할 때까지 블록을 찾는데 걸리는 시간이 t이고 블록을 찾는 평균 시간이 T 인 경우이 블록에서 다른 블록이 네트워크에서 발견될 가능성은 t / T입니다 시각; 이 경우 공격은 실패, 그리고 공격자는 B의 블록 보상을 잃게 된다. 이는 공격 시도의 평균 비용이 약 (t / T) * B임을 의미한다. 경험상, 상인은 적어도 t = V * T / B (V는 거래의 가치)를 기다려서 그에 대한이 공격을 시도하는 것이 수익성이 없는지 확인해야 한다. 민첩한 공격자가 여러 공격에 동일한 블록을 사용하여 잠재적으로 총 가치를 얻을 수 있기 때문에 이것은 충분하지 않을 수 있다. 공격자의 해시율이 낮을수록 공격을 수행할 기회가 줄어든다. 공격이 일부 비유동 상품을 얻기 위한 것이라면, 이 상품에 대한 필요성이 블록을 찾는 것과 일치하는 것은 어렵다. 액체가 무언가를 얻기 위한 공격이라면 (예 : 비트코인을 다른 돈으로 교환) 기회는 항상 존재하지만, 상인은 몇 가지 확인을 요구할 것이다. 이로 인해 실제로 공격을 사용하기가 어렵다.[2] 피니 어택에는 하드웨어 마이닝과 완벽한 타이밍이 필요하기 때문에 이 또한 어지간해서는 해내기 힘들다.

대안[편집]

비트코인 초창기 시절에는 새로운 블록을 생성하는 채굴 난이도가 낮았기 때문에 이런 방식을 시도할 수 있었지만, 현재의 채굴 난이도와 해시파워를 생각했을 때에는 시도조차 못 할 공격 방법이다. 새로운 블록을 만드는 과정이 어렵고 새로운 블록을 생성한 대가의 '보상'이 경제적으로 더 이득이며 거래에 큰 금액을 지불해야 한다면 충분히 확인 하고 돈을 지불할 것이기 때문이다. 또한 타임스탬프상의 순간적인 하드포크를 이용한 이 공격 방법은 일시적으로 이중지불이 성공한 것으로 보일 수 있지만, 곧 다른 노드들에게 적발되게 되며, 전송은 무효화 된다.

각주[편집]

  1. 어미새, 〈할 피니(Hal Finney) & 피니어택에 관한 개념정리.〉, 《네이버 블로그》, 2018-03-16
  2. 2.0 2.1 Murch, 〈What is a Finney attack?〉, 《StackExchange》, 2012-10-04

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 피니 공격 문서는 보안에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.