2016년 8월 15일 월요일

정보보안기사 정리 24 - 비트코인과 블록체인

개념, Hashcash, 블록체인에서의 Hashcash 개념, 비트코인 발행 및 거래, 사용자 관리 및 인증, 비트코인 위조, 블록체인 원본 유지방법, 비트코인 장단점, 블록체인의 활용


1. 비트코인이란
- 각 나라별로 다른 화 폐의 가치를 통합하고 온라인상에서 자유롭게 사용할 수 있는 하나의 화폐를 만드는 것을 목적으로 비트코인이라는 화폐가 만들어짐.
- 해시함수를 역으로 계산하여 원래의 값을 찾는 것이 어려운 것을 이용.


2. Hashcash개념
- 암호학적 해시함수의 경우 단방향성을 갖음.
  (해시함수 정리 http://vnfmsehdy.blogspot.kr/2016/06/2-mdc-mac.html 참고)
- 원래의 값 X를 해시함수에 입력하여 결과값 Y를 얻었을 때, Y를 이용하여 해시함수를 역으로 계산해 원래의 값 X를 찾는 다는 것이 거의 불가능하다는 의미.
  예: 암호학적 해시함수 SHA-1을 예를 들면 해싱된 결과값 Y의 길이가 160비트인데 이에 대응되는 정확한 X를 찾는데에는 2^160번의 시도가 필요 함.
  Hashcash에서는 SHA-1(160비트)을 사용하고, 비트코인에서는 SHA-2(256비트)를 사용함.
- 뜬금없지만 Y를 이용해서 X를 계산하는 것을 생각해보면 괴장히 어렵기 때문에 약간의 오차범위를 주는 것을 생각해보자.
  예: 어떤 값 K보다 작은 Y가 나오는 X값을 찾기.
  K가 00...01111..1 일때 맨 앞부터 20비트는 0이고 나머지 140비트는 0또는 1의 아무 숫자나와도 상관없다면
  2^160번의 시도가 아닌 2^20번의 시도로 난이도가 떨어지게 됨.
  즉, 어떤 값 K를 기준으로 이용하여, 앞자리부터 20비트가 0 인 Y를 만드는 X를 찾아내는 것.
- X를 찾아내는 난이도가 하락하면서 역으로 계산하는 것이 어느정도의 노력을 하게되면 가능해지고, 이것이 제약을 만족하는 정답인지를 확인하는 것도 쉬움.
  정답 확인은 계산된 X를 다시 해싱했을 때 앞자리부터 20비트가 0인지만 보면 됨.
- Hashcash의 스팸 필터링: 메일을 보낼때 앞자리부터 20비트가 0인 Y를 만드는 특정값을 포함시켜서 보냄.
  쉽지 않은 계산이 필요하므로 메일을 수신한 측은 특정값으로 해싱하여 결과를 확인하고 정답일 경우 송신자가 정상적인 메일을 보내려고
  노력 했다는 증거(Proof of Work)를 인정함.
  (스팸메일 발송하는데 시간이 오래걸린다면 어느세월에 수만~수십만 통의 메일을 보낼지..)
  송신자측에서는 이러한 특정값을 계산해내야 하는데 이때 사용하는 X값이 아래와 같음.
  Hashcash 예: 버전번호:사용하는 비트수:날짜:수신자 주소::랜덤값:Counter 값
  Counter 값 이전까지는 고정시키고 해싱결과의 앞자리 20비트를 모두 0으로 만드는 Counter 값을 계산하여 Counter 값을 찾음.
  이렇게 완성된 Hashcash 값과 메일 내용을 함께 전공하면 수신측이 Counter 값으로 송신자의 노력을 검사(증명)함.
  그리고 한번 사용된 Counter 값은 수신측이 저장하여 두번 사용안되게 함.
- Hashcash를 통해 신뢰성을 높이고, 검사(검증)는 간단해지며, 제 3자 없이 개인간 검증하는 효과를 만듦.


3. 비트코인에서의 Hashcash
- Hashcash의 아이디어를 공통 장부 관리에 적용한 것이 비트코인.
- 비트코인에서는 SHA-2(256비트)를 사용.
  맨앞자리부터 40비트가 0, 나머지 216비트는 0 또는 1 중 아무 숫자로 정함.
- 위에서 예로 든 Hashcash 값을 블록으로 표현하면 아래와 같음.
왼쪽은 Hashcash의 값을 블록으로 나타낸것. 오른쪽은 Hashcash 볼록의 개념을 블록체인에 도입한 것.
출처: 참고자료
- 블록체인에서는 Counter라는 용어가 Nonce로 바뀜.
- 블록체인에서도 Proof of Work의 개념이 적용되어 "정상적인 블록의 내용임을 보증하는 노력의 증거"를 의미함.
- 만약 블록의 내용이 늘어난다면?
  아래 그림과 같이 이전 블록으로 해싱하여 다음 블록에 삽입함.

출처: 참고자료
  블록 0으로 다음 블록인 블록 1을 계산하는 것은 어려움.
  하지만 블록 1을 알때 블록 0을 검사(검증)하는 것은 쉬움.
  이런 과정은 블록 1이 검사를 완료한 후 사용된다면 이를 사용하는 사람들은 블록 0을 당연히 신뢰할 것이므로 블록 0의 신뢰도를 강화하는 의미를 갖음.
- 블록들의 체인 생성 과정 예
  블록 n은 블록 n-1해시값을 가지고 있음.
  블록 n+1을 계산하는 과정을 보면, 블록 n에 대해 SHA-2(256비트) 해시값의 앞 40비트가
모두 0이되게하는 Nonce 값을 찾고, 그 해시값을 블록 n+1로 전달함.
- 사실 블록 체인 생성시 이전 블록의 전체 내용으로 해시값을 계산하는 것은 효율성이 떨어지므로 payload 부분의 해시값을 계산하여 헤더에 포함하고,
  헤더부분을 해시값으로 만들어 다음 블록에 전달함.
- 따라서 블록 n에 포함되는 것은 블록크기, 버전, 이전블록의 해시값, 현재 블록의 payload의 해시값, nonce, payload(현재 블록의 거래정보) 등이 됨.
- 블록체인을 통해
  새로운 블록을 만들때 Proof of Work로 인해 체인이 길어질수록 신뢰도가 증가하며,
  해시값으로 인해 검증하는 것이 쉬움.
- 참고로 블록의 내용은 Json 타입을 사용 함.

* 블록체인 종류
크게 퍼블릭(public) 블록체인과 프라이빗(private) 블록체인으로 나눌 수 있음
보통 언듭되는 블록체인은 퍼블릭 블록체인으로 비트코인, 이더리움, 라이트코인이 작동하는 블록체인은 모두 퍼블릭 블록체인을 활용한 가상화폐/스마트금융플랫폼.
퍼블릭 블록체인은 공개성, 분산성과 같이 흔히 블록체인에 대해 이야기 할 때 언급하는 특성들을 모두 가짐. 
반면 프라이빗 블록체인은 특정한 기관, 업체들이 자신들의 목적과 특성에 맞게 설계한 블록체인으로 모든 블록체인의 특성을 구현하지 않아도 됨.
프라이빗 블록체인의 지불/결제와 같은 용도로 사용되기 보다 데이터를 분산 관리하는데 적합할 것으로 보임.


4. 비트코인의 화폐발행
- 비트코인이 단일화된 온라인상에서의 화폐이므로 특정 나라에서 비트코인을 관리하고 비트코인을 발행한다는 것은 문제의 소지가 있음.
- 비트코인의 발행은 규칙에 따라 공정하게 생성되고 투명하게 관리되어야 함.
  따라서 비트코인은 시스템을 통제하는 서버 없이 P2P 방식으로 완전히 분산화된 형태로 동작하게 만들어졌고, 누구나 시스템을 사용할 수 있도록 함.
- 비트코인 시스템에서 화폐 발행은 어떤 사용자든 할수 있게 되어 있음.
  화폐 발행을 마이닝(mining, 채굴)이라고 하며, 마이닝 과정은 Hashcash 문제를 해결하는 것을 의미함.
  대략 10분에 한번씩 마이닝이 되고있으며(문제가 풀린다는 의미), 마이닝을 한 시스템 참가자는 보상금을 받음.


5. 사용자 관리와 인증
- P2P 방식으로 동작하는 시스템이므로 중앙 서버가 존재하지 않음.
  사용자는 비트코인 거래를 위해 계좌를 어떻게 생성하고 거래시 본인임을 어떻게 증명하기 위해 "공개키 암호화 방식"을 사용함.
- 공개키 암호화 방식에는 RSA, ECDSA 등이 있는데, 비트코인에서는 ECDSA 방식을 사용함.
  공개키 암호화 방식은 전자서명에서도 사용되며, 사용자는 이를 이용하여 자신을 인증함.
  즉, A가 특정 메시지를 자신의 개인키로 암호화(서명) 하면, 제3자는 A의 공개키로 복호화 해봄으로써 메시지를 작성한 사람이 A 임을 인증게 됨.
  비트코인에서는 공개키를 일종의 일회용 계좌번호처럼 사용함.
  공개키와 개인키 쌍은 누구나 만들수 있기 때문에 사용자나 계좌를 등록하는 정차가 없어지고 공개키 암호화 방식으로 계좌의 소유자를 인증할 수 있는 것.


6. 비트코인 거래
- 거래를 위해서는 지갑(Wallet)을 만들어야 함.
  지갑은 비공개키를 보관하면서 거래를 하는데 사용하는 프로그램.
  거래자는 여러개의 지갑을 생성하여 여러개의 주소로 거래할 수 있음. 지갑을 만들때 인증이 필요없어 익명성이 유지됨.
  지갑의 ID와 PW가 유출되면 해당 계정의 비트코인을 분실할 수도 있음.
- A가 B에게 비트코인을 전송하는 과정은 아래와 같음.
  B는 공개키와 개인키 쌍을 생성해서 A에게 공개키를 전달함.
  A는 B의 공개키로 수표에 해당하는 메시지를 생성하여 P2P 네트워크 전체에 전송함.
  모든 사용자가 메시지를 수신하지만 이 메시지 안에 담긴 비트코인을 사용하는 사람은 개인키를 가진 B 뿐이다.
  (어떻게 A는 B의 공개키가 진짜 B것이라는 것을 확인하는지 모르겠음. 인증서가 있는 것도 아니고...)
- 모든 노드는 전달된 거래의 형식과 내용을 검증하고 검증된 거래만 다른 노드에 전파함.
- 잔고확인: 거래시 가지고 있는 비트코인 만큼만 쓸수 있는데 이러한 잔고를 확인 할 수 있어야 함.
  과거에 생성된 모든 거래내역을 저장하는 것이 바로 블록(위쪽에서 설명한)이고, 이러한 거래내역의 체인을 블록 체인이라고 함.
  블록체인에 모든 거래내역이 포함되어 있다는 것은 거래를 시도하는 사람이 잔고가 있고, 거래를 할 수 있는 사람인지를 증명할 수 있는 것을 의미함.
  블록체인 내에 연결된 블록들의 이전 링크를 따라가면서 이전 블록이 포함하는 비트코인의 양이 새롭게 발행하려는 양보다 큰지를 확인하면
  발행가능한(거래가능한) 금액을 알 수 있는 것.


7. 비트코인 관리 및 위조
- 비트코인 시스템에서는 P2P 네트워크상의 모든 참여자가 블록체인을 보관함. (용량문제가 발생할 듯.)
- 네트워크에서 거래가 발생하면, 블록체인의 이전 링크를 따라가 자신이 가지고 있는 과거의 블록체인과 비교해서 기존에 잔고가 있었던 것이 맞는지 검사하고,
  거래를 걸어온 사람이 발행한 비트코인인지를 블록에 포함된 서명을 이용해 확인하여, 정상적인 것이면 자신이 가지고 있는 블록체인에 저장함.
- 위조의 경우
  위에서 설명한 Hashcash 보면 다음 블록을 생성할 때 Nonce 값을 찾고 해싱하므로 시간이 걸리게 된다고 했음.
  ① 보통 P2P 네트워크의 모든 참여자가 함께 계산할 때 10분정도가 걸리는데 이를 공격자가 위조하기 위해 혼자하게 되면 엄청나게 오래 걸림.
      만일 누군가 Hashcash 문제를 최초에 풀게되어 다음 블록을 생성한다면 생성된 새로운 블록은 네트워크에 전송되고 모든 참여자가 이를 공유하게 됨.
      그리고 새로운 블록을 기반으로 다음 블록을 생성하기 위한 Hashcash문제를 풀기시작 하므로 혼자서 새로운 위조 블록을 만드는 것은 쉽지 않음.
  ② 위에서 설명한 Hashcash 개념이 적용된 블록체인을 보면, 블록 n-1의 해시값이 블록 n에 포함되므로 공격자는 위조를 위해 특정 한블록만 위조해서는 안됨.
      즉, 특정 한블록만 위조가 되면 그 다음에 연결된 블록을 보고 위조가 되었다고 의심되는 이전 블록을 검증하면 바로 들통나기 때문임.
      (해시 함수는 한비트만 바껴도 결과가 서로 다르게 나옴.)
      따라서 블록 하나를 위조하는데 걸리는 시간이 k라면 공격자는 블록체인 전체를 위조해야하므로 블록체인 크키가 a일 경우 k*a의 시간이 필요해짐.


8. 블록체인 원본 유지 방법
- 비트코인의 P2P 네트워크 참가자들이 비트코인을 받기위해 Hashcash 문제를 풀고 있으므로 어느순간 A와 B가 문제를 풀고 서로다른 새 블록을 생성할 수 있음.
- 비트코인에서는 가장 길이가 긴 블록체인을 원본으로 받아들이는 원칙을 사용함.
- A와 B가 서로다른 블록을 생성하면서 각기다른 블록체인이 생성되는데, 나중에 짧은 쪽은 무시가 된다는 것.
  (진짜 무시해도 되는 건가? 정상적인 거래로 생긴것도?)


9. 비트코인의 장단점
- P2P로 운영되기 때문에 계좌동결, 강제인도, 강제신원공개 및 서비스정지 등이 불가능 함.
- 익명성
- P2P 환경으로 인한 DDoS 공격 차단
- 투명성
- 24시간 동작
- MS의 빌 게이츠는 두가지를 지적함.
  첫째, 잘못된 거래를 되돌리기 어렵다는 점. 잘못된 계좌로 돈을 보냈으면 전화를 걸어서 복구 요청을 하는것이 요즘 시스템인데,
  비트코인의 경우 (전화를) 걸 곳이 없음.
  둘째, 분산형 시스템이 지닌 익명성과 정부 통제의 충돌. 마약 거래에 사용되는 대금인지, 세금을 매겨야 하는 거래인지 등 정부가 알고 싶어하는 것들이 많은데
  이를 확인하기 쉽지 않음.
- 블록체인 기술은 구조적으로 뛰어난 보안성을 보여주지만, 운용 행태에 따라 빈틈이 발생함. 2014년 2월 세계 3대 비트코인 거래소로 꼽히던 일본의 마운트곡스가 
  해킹으로 74만4천 비트코인(당시 시세로 약 4128억원)을 잃어버렸고, 파산함.


10. 블록체인의 활용
- 금융권에서 블록체인은 주로 전자화폐, 해외송금, 장외거래, 데이터 저장 및 보호, 메시지 보호 및 전달 등의 형태로 활용.
- 전자화폐: 제 3자 신용기관 없이 사용자 간 인증을 통해 안전하게 유통이 가능하도록 한 가상 화폐 비트코인
- 해외송금: 해외 송금 수수료를 획기적으로 낮츨 수 있음. 비트코인과 문자메시지(SMS)를 결합한 해외송금서비스. 예) 37Coins
- 장외거래: 나스닥 장외주식거래소인 Private market에 블록체인 기술 시범 적용.
  기존 변호사를 통핸 거래승인절차를 블록체인을 통해 자동화 및 안전하게 실물증권을 관리하고 보관함. 예) NASDAQ Private Market
- 데이터 저장 및 보호. 국가토지대장을 블록체인을 통해 기록하여 해킹 및 조작을 원천적으로 방지. 예) 온두라스의 국가 토지 대장
- 메시지 보호 및 저장: 사용자가 만든 P2P 네트워크상에서 상호 주고 받는 메시지를 암호화 및 메시지를 보내고
  받는 당사자의 주소도 추적할 수 없는 형태가 됨. 예) 비트 메시지



* 참고
- 2016.01 SPRI 블록체인의 원리.pdf
- http://www.seunghwanhan.com/2016/07/introduction-to-bitcoin-blockchain.html#!/2016/07/introduction-to-bitcoin-blockchain.html
- http://d2.naver.com/helloworld/8237898
- http://www.hani.co.kr/arti/economy/it/721667.html
- 2015.11 금융보안원 국내외 금융분야 블록체인 활용 동향.pdf

댓글 1개:

  1. [검증완료] MAX88(m88ps.com)

    당신의 판돈은 가상머니가 아닙니다.
    7년운영 안전사이트 소개해드립니다.

    에이전시 상위단계의 국내유일 페이먼트사로
    라이센스는 물론 300억대 마권보험 가입有

    MAX88 주소: m88ps.com
    (별도의 코드없이 가입 가능합니다)

    스포츠북 : 10BET,IBCBET,CMD Sports
    카지노: 아시아게이밍,마이크로게이밍,게임플레이
    슬롯: 게임플레이,마이크로게이밍

    ·페이먼트사로 코드없이 가입가능
    ·슬롯,카지노 모바일 무설치 지원

    한국 외 7개 아시아지역 동시 온라인서비스중!

    MAX88 주소: m88ps.com
    파트너제휴 스카이프 문의: m88partner

    ※ 신규 첫 입금 20% 제공
    ※ 카지노 매일 첫충 15% 롤링2배
    ※ 스포츠 평일 첫충 5% / 주말 10% 롤링1배
    ※ 매일매일 출석이벤트 [4일 연속 출석시 10만 지급]
    ※ 축배팅 등 별도의 배팅 제재 없습니다.
    ※ 신규 첫 입금시 최대 100,000KRW 제공
    ※ 전세계 모든 스포츠 경기 라이브배팅 지원
    ※ 더블찬스 배팅 등 수많은 스페셜배팅 제공

    MAX88 주소: m88ps.com
    파트너제휴 스카이프 문의: m88partner

    답글삭제