Gidhub BE Developer

Mining Term

2018-02-22
goodGid

Mining Term

  • 이 글을 참고하여 작성하였다.

Index

  1. 해쉬와 블럭이란?

  2. SHA256과 암호화 해시함수란?

  3. 하드포크란?

  4. POW

  5. POS

  6. POW/POS

  7. POI

  8. Zero-Knowledge Proof


1. 해쉬와 블럭이란?

해쉬란 어느 것이든 그다지 「의미 없는」것이고,

컴퓨터에서는 블록 길이(block length)에 맞추기 위해서

메모리에 기입된 의미 없는 정보를 표시한다.

Hash Example
0000000000000756af69e2ffbdb930261873cd71

여기서 블럭

해쉬(Hash)를 보유한 사람이

코인을 얻을 수 있는 블럭(Block)을 의미한다.


이러한 블럭(Block)이 생성되는 시간을 일정하게 하기 위해서

‘난이도’라는 개념이 존재하게 된다.

전체 해쉬의 양이 늘어나면 난이도가 증가하게되고,

이 난이도에 따라 블럭을 찾는데 더 많은 해쉬가 필요해지기 때문에

블럭 자체가 생성되는 시간은 일정하게 유지됩니다.

흔히 볼 수 있는 confirm이라는 개념이

현재 블럭이 발견되고 다음 블럭으로 넘어갈 때 완료가 된다.


하지만 코인의 분배, 블럭생성 등 많은 부분이

‘해쉬’와 밀접하게 연관되어 있기 때문에

‘해쉬’로 인한 문제가 발생하기 쉽다.

51% Attack : 
전체 해쉬의 50%가 넘는 해쉬를 보유한 집단이 나타나면 
전체 코인 이동 정보(Block Chain)에 잘못된 정보가 전달되거나 
혹은 잘못된 정보를 실제정보로 만들어버리는 일이 가능해진다.

탈중앙화에 반하는 중앙화 : 
ASIC(반도체 업체가 사용자의 주문에 맞춰 설계ㆍ제작해 주는 주문형 반도체)가 나타나면서 
점점 소수의 집단으로 해쉬가 대량으로 뭉치는 현상이 강화됨에 따라 
이러한 부분에 대한 우려의 목소리도 커지고 있다.

연합채굴의 모순점 : 
반감기 도래, 가격하락 등의 이유로 
전체 해쉬가 일정 이상 내려가게 될 경우 
발생할 수 있는 보안문제를 막기 위해 
연합채굴(Merged Mining) 등의 방법을 도입해서 
해쉬를 유지하는 방법도 현재 사용되고 있다. 

개인 채굴자의 어려움 : 
'일정 이상의 해쉬를 유지하는 것'이 
한 개개인에게 점차 어려워 지기 때문에 
소수에게 독점되어 가는 현상이 발생하고 
이를 우려하는 목소리가 발생하고 있다. 

경제성 문제 : 
채굴이 끝난 시점에서 '해쉬'를 유지하면서 얻을 수 있는 이득은 
오직 거래 중계료(Transaction Fee)이다. 
하지만 거래 중계료로 얻을 수 있는 이익보다 
장비를 유지하는데 들어가는 비용이 더 클 가능성이 높기 때문에 
이 부분에 대한 대책이 요구되고 있다.

2. SHA256과 암호화 해시함수란?

SHA256이란 SHA 알고리즘의 일종이다.

Secure Hash Algorithm,

안전한 해시 알고리즘으로

이 함수들은 서로 관련된 암호학적 해시 함수들의 모음이다.


암호화 해시함수(cryptographic hash function)는 해시 함수의 일종으로,

해시 값으로부터 원래의 입력값과의 관계를 찾기 어려운 성질을 가지는 경우를 의미한다.

암호화 해시 함수가 가져야 하는 성질은 다음과 같다.

  1. 역상 저항성(preimage resistance) : 주어진 해시 값에 대해, 그 해시 값을 생성하는 입력값을 찾는 것이 계산상 어렵다. 즉, 제 1 역상 공격에 대해 안전해야 한다. 이 성질은 일방향함수와 연관되어 있다.

  2. 제 2 역상 저항성(second preimage resistance) : 입력 값에 대해, 그 입력의 해시 값을 바꾸지 않으면서 입력을 변경하는 것이 계산상 어렵다. 제 2 역상 공격에 대해 안전해야 한다.

  3. 충돌 저항성(collision resistance) : 해시 충돌에 대해 안전해야 한다. 같은 해시 값을 생성하는 두 개의 입력값을 찾는 것이 계산상 어려워야 한다.


3. 하드포크란?

하드포크라는 것은 어떤 코인에 치명적인 버그가 있거나,

핵심 알고리즘의 변화가 필요해서

기존 지갑과의 호환성 단절을

감수하고 새지갑을 만드는 것이다.


“포크”라는 건 보통 오픈소스에서 개발에서 참여하기 위해 자신만의 특정 카피본을 만드는 것인데,

여기에 “하드”가 붙는 것은

기존의 소스와 호환성이 단절된다는 것을 의미한다.

하드포크가 된 카피본이 존재하는 상황에서

기존판을 한쪽에서 계속 사용하게 되면

두개의 호환불가능한 블럭체인이 존재하게 되고

이는 곧 그 코인의 파탄을 의미한다.

그렇기 때문에 하드포크는

모든 풀과 사용자들의 지갑을 한꺼번에 다 업데이트해야 되는 대규모 작업이 된다.


4. POW (Proof of Work)

/assets/img/block_chain/mining_term_1.png)

POW는

 1. 프로토콜(컴퓨터간에 정보를 주고받을 때의 통신방법에 대한 규칙과 약속.)이자 프로그램 함수이다.

 2. 이는 proof-of-work의 줄임말로 작업 증명 방식을 의미한다.

 3. POW는 많은 해쉬(Hash)를 보유한 사람이 코인을 얻을 수 있는 블럭(Block)을 더 많이 발견할 수 있는 시스템을 의미한다.

 4. 서비스 거부 공격과 네트워크 상에서 스팸과 같은 서비스 남용들을 처리 시간을 요구하는 서비스 요청으로 몇가지 작업을 요구함으로써 마음을 접게 만드는 경제적인 수단이다.

 5. 한마디로 인터넷 상에서 양아치들이 와서 장사하는데에 모래 뿌리고 훼방놓으려고하면 돈을 내야하게 만들어서 마음을 접게 만드는 방식으로 보면 이해하기 쉽다.

 6. 현재 ‘채굴’이 가능한 모든 코인은 POW이다. 또한, 현재 가장 대중적이며, 시장이 크고, 인프라가 지속적으로 확대되고 있는 코인들은 대부분 POW 방식이다. (비트코인, 라이트코인, 도기코인 등 알고리즘을 풀어서 코인을 보상으로 얻는 개념의 모든 코인은 다 POW 코인이다.)

 7. 가상화폐가 POW 코인인 비트코인에서 출발했기 때문에 현재 주류는 당연히 POW 코인이고, 시장의 규모는 POW가 POS에 비해 압도적으로 크다. 보유한 사람들에게도 코인의 가치가 큰 폭으로 상승하는 경향을 보여줬다.


5. POS (Proo of Stake)

/assets/img/block_chain/mining_term_1.png)

 1. 도입된 이유 : POW의 가장 큰 문제인 ‘채굴에 들어가는 많은 비용 및 유지비 (전력사용, 장비 구입비) 절약’, ‘해쉬의 독점으로 인한 보안상의 문제’를 해결하고자 만들어진 방식이다.

 2. 준비물 : POS의 경우 인터넷이 연결된 PC 1대만 있으면 모든 준비가 끝이 난다. 더 좋은 CPU ? 더 좋은 GPU ? 더 이상 추가적인 필요가 없다.

 3. 코인을 얻는 방법?: 각 코인마다 얻은 방식, 양은 다르지만 기본적으로 POS는 가지고 있는 코인양이 많을수록 더 많은 코인을 지속적으로 얻게 된다.(이자와 같은 개념으로 받아들이셔도 무방하다.) POS라는 이름과 같이 전체 코인에 대한 많은 지분(Stake)를 보유한 사람이 추가적으로 발행되는 코인에서 많은 분량을 가져가게 된다.

 4. 해쉬의 기능의 대체물 : POW에서는 ‘해쉬’가 이러한 기능을 했다면, POS 는 보유한 ‘코인’의 양이 기준이 된다. 그래서 POS 방식에는 보안을 위해서 대규모의해쉬가 필요하지 않고, 각 개개인이 코인을 보유하고, 지갑을 연동시켜 놓는 것 만으로 강한 보안 장벽을 만들어낼 수 있다.

 5. Pump&Dump의 가능성 : 또한 런칭 초기에 대량의 코인이 단기간에 발행되며 차차 줄어드는 POW와는 다르게 늘 일정한 양이 조금씩 발행되기 때문에 가격의 Pump & Dump가 더 적다는 장점이 있다.

 6. 경제성 : 또한 채굴에 소모되는 대량의 전기 및 채굴기가 필요 없기 때문에 더 많은 사람이 쉽게 코인을 접하고, 사용할 수 있다.

 7. 약점 : 하지만 가격의 상승폭이 크지 않기 때문에 ‘대량의 자금’이 유입되지 않았다는 점(굳이 지금 보유할 필요가 적기 때문에), ‘자금’이 많은 사람이 쉽게 독점할 수 있다는점, 채굴을 통한 이득이 POW보다 적은 점 초기 코인의 유포가 공평하지 못한 점 등의 이유가 약점으로 존재한다.

 8. 최근 대두되는 이유 : 그 동안은 큰 주목을 받지 못하다 POW 류 코인의 해쉬 상승으로 인한 보안 문제 및 유지비 문제가 점점 이슈가 되면서 다시금 재조명이 되고 있다.


6. POW/POS

 1. 코인 분배 방식 : POW를 통해서 일정량은 채굴을 하고 그 이후에는 POS방식을 선택해서 보유한 사람들에게 지속적으로 일정량의 코인을 배분하는 방식을 채택하는 것이다. (Black Coin이 대표적)

 2. 동시에 POW와 POS를 가동하는가? : PoW 와 PoS 를 동시에 유지하는게 아니라 초기 일정기간은 PoW 로 많은 마이너들이 캘 수 있도록 하고, 그 이후는 순수 PoS로 전환함으로써 PoS 장점을 유지하고자 하는 모델들이 주류를 이루고 있다.

 3. 등장하게된 배경 : 전문채굴기가 빗코의 암호화 방식인 SHA256 를 넘어서서 라이트코인의 방식인 Scrypt로 확장됨에 따라 이런 전문 채굴기가 채굴하기 어려운 새로운 암호화 방식의 Pow 또는 Pow / Pos 복합 모델들이 등장하기 시작했다.


7. Zero-Knowledge Proof

현실에서는 그런데 우리의 현실 세계에서는 정보를 공개하지는 못하지만

자신이 그것을 알고 있다는 것을 증명해야 할 경우가 많다.

검증자가 자신이 가지고 있는 비밀정보(패스워드)를 노출하는 대신

자신이 그 비밀정보를 알고 있음을 증명하여

검증하는 프로토콜로 암호학에서 매우 중요한 역할을 하는 프로토콜이다.


자신이 가진 비밀정보를 보여주면

물론 그 비밀정보를 알고 있다는 증명이 되지만,

한 번 노출시키면 그 정보는 더 이상 비밀정보가 아니다.

자신의 정보를 노출시키지 않으면서

그것을 알고 있다는 것을 증명하는 것을 영지식 증명이라고 한다.


다음의 동굴 그림은 영지식 증명을 설명하기 위해 사용되는 대표적인 예제이다.

갑순이는 동굴의 입구로부터 반대쪽에 있는 비밀문을 열 수 있는 암호를 알고 있다.

갑순이는 이 암호를 을돌이에게 알려주지 않고 이것을 알고 있다는 것을 증명하려고 한다.

어떻게 하면 이것이 가능할까?

갑순이와 을돌이는 다음과 같은 게임을 한다.


영지식 증명을 설명하는 동굴 예제

/assets/img/block_chain/mining_term_2.png) /assets/img/block_chain/mining_term_3.png) /assets/img/block_chain/mining_term_4.png)

을돌이를 동굴 입구에서 기다리게 하고

갑순이는 갈라지는 지점에서 A 또는 B방향을 임의로 선택하여 들어가서 비밀문 앞으로 간다.

이때 을돌이는 갑순이가 어느 방향으로 갔는지 알 수 없다.

을돌이는 동굴이 갈라지는 지점까지 와서

  1. 갑순이에게 A 또는 B의 어느 한 방향으로 나오도록 큰 소리로 말한다.

  2. 갑순이는 을돌이의 요구에 따라 A 또는 B의 방향으로 을돌이에게 간다.

  3. 갑순이는 필요한 경우 암호를 이용하여 비밀문을 열고 반대편으로 갈 수 있다.

  4. 1~3의 게임을 을돌이가 동의할 때까지 n회 반복한다.

여기에서 갑순이는 비밀문을 열 수 있는 암호를 알고 있으므로

을돌이가 원하는 방향으로 항상 나타날 수 있다.

그러면 을돌이는 자신이 요구하는 방향에서 갑순이가 나타나면

갑순이가 암호를 알고 있다는 것을 얼마나 믿을까?

만일 갑순이가 비밀문의 암호도 모르면서 A 또는 B의 방향을 임의로 선택하여 갔다면

을돌이의 임의의 요구에 맞춰서 나타날 수 있는 확률은 2분의 1밖에 되지 않을 것이다.


그러나 이런 게임을 n회 반복하여 갑순이가 모두 성공적으로 응답을 했다면,

갑순이가 암호를 모르면서 성공할 확률은

n번 모두 우연히 을돌이의 선택과 똑같은 선택을 하는 경우이며,

확률은 1/2n 밖에 되지 않는다.

그러므로 n번 모두 갑순이가 성공했다면

을돌이는 갑순이가 암호를 알고 있다는 것을 높은 확률로 확신하게 된다.


이러한 영지식 증명 프로토콜은

통신 프로토콜에서 사용자가 자신의 비밀정보를 알려주지 않으면서

그것을 알고 있다는 것을 보여주는 목적으로 사용된다.

비밀정보를 알려주지 않으면서 증명을 할 수 있으면

같은 비밀정보를 반복해서 사용할 수 있다.


사용자가 공개키 암호 시스템을 사용하는 경우,

개인키는 자신이 안전하게 보관하면서 공개키는 인증기관으로부터 인증을 받아 오랫동안 사용하게 되는데,

자신의 비밀키는 어떤 경우라도 남에게 보여주지 않아야 한다.

비밀키가 노출된다면 발급된 인증서를 취소하고

새로운 키 쌍을 만들어 인증서를 받아 사용해야 하는데,

이것은 관리적 측면에서도 매우 부담이 큰 과정이다.


원격 서버에 로그인할 때, 사용자는 패스워드를 직접 전송하는 것이 아니라,

공개키 암호 시스템을 이용하여

다음과 같은 질의·응답(challenge-response)방식으로 자신의 신분을 인증할 수 있다.


  1. 사용자는 서버에 인증을 요청한다.
  2. 서버는 사용자에게 사용자의 개인키를 이용하여 특정 계산을 해서 응답할 것을 요구한다.
  3. 사용자는 자신의 개인키를 이용하여 요청된 계산을 수행하여 그 결과를 전송한다.
  4. 서버는 사용자의 계산이 맞는지 사용자의 공개키를 이용하여 검증한다. 검증이 맞으면 로그인을 허용한다.

사용자는 자신의 개인키를 노출하는 것이 아니므로 반복하여 인증에 사용할 수 있다.

서버는 인증기관에 의해 인증된 공개키를 이용하여 검증을 하므로

사용자의 신분을 확신할 수 있다.


영지식 증명 기법은 두 사용자 간의 상호작용을 통하여 비밀정보를 노출하지 않고도

그 정보를 가지고 있다는 것을 상대방에게 증명하는 방법이다.

복잡한 과정을 거쳐야 하는 프로토콜 수행에서

매 단계가 원래의 약속대로 잘 진행된다는 것을 확신하게 하는 데 이용할 수 있으며,

프로토콜의 건전성·검증성·신뢰성을 보장하기 위한 용도에 사용된다.


Recommend

Index