CS/블록체인

CS/블록체인

[블록체인] 12. 비트코인 script (1)

위 그림은 비트코인 output 의 모습을 간단하게 보여준다.이 output 은 2개의 output을 나타내고, 첫번째 output 은 0.015 를 지불하며 이때 output script 는 scriptPubKey 로 위와 같은 문자열이 들어간다. 이 output 이 밥에게 비트코인을 보내는 아웃풋이라면, 밥이 비트코인을 꺼내서 쓸 때는 input script 에 저 output script 의 값이 참이 되도록 하는 값을 제시하도록 한다.위의 빨간색 문자열이 퍼블릭 키 (밥의 비트코인 주소) 를 나타내고, 밥은 이 퍼블릭키에 쌍에 맞는 프라이빗 키로 서명을 제시해서 나중에 비트코인을 꺼낼 수 있다.  인풋을 간단하게 보면 위와 같이 되어있다.위 그림에서는 1개의 인풋만을 보여주고 있으며,output이..

CS/블록체인

[블록체인] 11. 비트코인 트랜잭션

이 그림은 비트코인의 동작을 한 페이지에 정리한 모습을 나타낸다.맨 왼쪽에는 블록체인이 존재한다.제네시스 블록 (높이가 0인 블록) 부터 그 위로 하나씩 블록을 차곡 차곡 쌓으면서 블록 체인이 형성된다.비트코인을 사용한 거래가 발생하여 그에 대한 트랜잭션이 발생하면, 채굴자는 그 트랜잭션을 모아서 블록으로 만들고, 작업 증명에 성공하면 채굴된 블록을 발표한다.만약 이 블록이 다수의 사용자에 의해 받아들여지면 그 블록에 포함된 트랜잭션들은 다수에 의해 인정받는 유효한 트랜잭션이 된다.  비트코인의 트랜잭션은 위와 같이 생겼다.먼저 트랜잭션에는 input, output 부분이 있고, input 에는 비트코인이 빠져나갈 위치가 들어간다.(정확히는 나의 계좌의 최종 잔고를 나타내는 트랜잭션들이 들어간다.)out..

CS/블록체인

[블록체인] 10. 비트코인이 해결하는 문제들

비트코인은 '통신 프로토콜' 이다.사카시 나카모토는 비트코인을 위해 컨센서스, 채굴, 비트코인 생성 방법, 트랜잭션과 같은 내용들을 프로토콜로 만들어 두었고, 비트코인 코어와 같은 소프트웨어가 프로토콜을 실제로 구현한 것과 같다.지금은 비록 사카시 나카모토는 빠졌지만 '비트코인 코어' 는 여전히 권위있는 프로그램이다.그래서 새로운 아이디어가 등장하면 먼저 코어 프로그램에 적용을 하고, 이후에 다른 버전 소프트웨어에도 적용된다. 비트코인 코어와 같은 프로그램을 다운받아서 실행하면, 코인이 생성이 되고, 이 코인을 하나의 어카운트에서 다른 어카운트로 보낼 수 있다.그리고 이 보내는 행위를 '트랜잭션' 이라고 한다.각각의 트랜잭션은 '블록' 에 기록이 되고, 이 블록들이 순서에 따라 연결된 것을 '블록체인' ..

CS/블록체인

[블록체인] 9. 암호학 개념들

암호학(Cryptology)은 비밀 통신과 관련된 과학 분야를 말한다.암호학은 크게 Cryptography 와 Cryptanalysis 로 분류된다.Cryptography는 암호를 만드는 것과 관련된 분야, Cryptanalysis 는 암호를 깨는 것과 관련된 분야이다.위 3개 개념을 통틀어서 Crypto 라고 부르기도 한다. 물론 암호학을 공부하는 사람은 이 두 분야를 모두 공부해야 한다.자신이 만든 암호화 알고리즘이 얼마나 공격에 강력한지 입증하려면 공격 수단에 대한 이해도 필요하기 때문이다. 암호학 분야가 달성하려는 목표는 4가지가 있다. 1. Confidentiality (기밀성)A가 B에게 메세지를 보낼 때, B 이외에는 아무도 이 메세지의 내용을 알 수 없도록 만드는 것현대에는 Symmetri..

CS/블록체인

[블록체인] 8. 비트코인 스크립트

비트코인의 트랜잭션에는 간단한 스크립트 코드를 넣을 수 있다.그래서 비트코인은 프로그래머빌리티가 없다, static 하다, 변하지 않는다고 하면 틀린 말이다.물론 이 스크립트 코드는 turing complete 하지는 않아서 모든 기능을 자유롭게 쓸 수 있지는 않지만, 제한적인 프로그래밍이 가능하다.(참고로 이더리움은 튜링 컴플리트를 지향하는 블록체인 프로젝트이다. 기말고사 범위에서 정리할 예정) 비트코인의 스크립트는 스택 기반으로 실행되는 코드이며,트랜잭션 검증과 서명 검증을 위한 다양한 명령어를 제공한다. 대표적인 스크립트 타입은 다음과 같다.- Pay To Public Key (P2PK) :비트코인의 초창기 트랜잭션 방식, 사카시 나카모토가 고안했던 방식으로 public key hash에 지불한다...

CS/블록체인

[블록체인] 7. 비트코인 네트워크

비트코인 네트워크는 p2p 네트워크이다.비트코인 네트워크를 구성하는 개체를 '노드' 라고 하며, 이 '노드'는 적절한 하드웨어 + 비트코인 프로그램이다.간단히 말하면 컴퓨터에서 돌아가는 비트코인 프로그램을 노드라고 한다고 보면 된다.그리고 대표적인 비트코인 프로그램이 사카시 나카모토가 만든 '비트코인 코어' 이다.(참고로 지금은 비트코인 코어 프로젝트에서 사카시 나카모토는 빠졌고, 20명도 안되는 개발자 그룹에 의해 유지되고 있다.우리도 다양한 이슈를 제기하는 방식으로 프로젝트에 간접적으로 참여할 수도 있다.) 노드의 종류는 다음과 같다. - Full Node비트코인을 통해서 모든 것을 다 할 수 있는 노드제네시스 블록부터 지금까지 생성된 모든 블록 체인과 트랜잭션 정보를 갖고 있는 노드이다.따라서 Fu..

CS/블록체인

[블록체인] 6. Proof-of-Work (Consensus Protocol & Native Currency)

비잔틴 장군 문제 (Byzantine Generals Problem)비잔틴 장군 문제는 분산 시스템을 공부할 때 나오는 유명한 문제로, 1980년에 발표된 람포트라는 컴퓨터 과학자의 논문에서 처음 소개되었다. 그림과 같이 여러 장군들이 하나의 성을 점령하기 위해 일제히 공격을 하려고 한다.그리고 각각의 장군들은 메신저를 보내 메세지를 전달하는 방식으로 통신해야 한다.(현대로 치면 네트워크를 통해서 메세지를 전달하는 것과 같다. 속도는 훨씬 느리겠지만..) 그런데 이 장군들 사이에 스파이가 있다고 해보자.안 그래도 실시간으로 동시에 공격하려면 적절하게 의견을 합의해야하는데, 스파이까지 고려하면서 스파이가 아닌 장군들이 같은 의견을 공유하는 것은 쉽지 않을 것이다.비잔틴 장군 문제는 스파이를 제외하고 정직한..

CS/블록체인

[블록체인] 5. 트랜잭션 포맷

비트코인의 트랜잭션은 하나 이상의 input 과 하나 이상의 output 으로 구성되어있다.비트코인 인풋은 이전 트랜잭션의 아웃풋으로부터 비트코인을 가져온다는 의미이다. 전통적인 은행 시스템에서 돈을 보내는 과정을 생각해보자.내가 국민은행 계좌에 10만원을 갖고 있을 때, 친구의 카카오뱅크 계좌로 5만원을 보낸다고 하면,나는 국민은행 계좌에 로그인해서 국민은행 서버에게 카카오뱅크 계좌로 5만원을 보내라는 트랜잭션을 지시하면 된다.그러면 은행 서버는 이 트랜잭션을 지시하는 사람이 정말 그 계좌의 주인이 맞는지 확인할 것이다. (otp 등 인증수단)그리고 이 확인 절차가 통과되었을 때, 계좌의 잔액을 확인한 뒤, 잔액이 충분하다면 돈이 실제로 이동한다. 전통적인 은행 시스템에서 돈을 보낼 때는, 오로지 현재..

CS/블록체인

[블록체인] 4. 디지털 서명과 비트코인 주소

디지털 서명비트코인에서는 비대칭키 암호화를 이용해 디지털 서명을 남긴다.비대칭키는 공개키와 비밀키라는 2가지 키를 사용한다.이 두가지 키는 랜넘 넘버로부터 만들 수 있다. (우리는 암호학을 공부하는 게 아니므로 구체적인 방법은 넘어가자)이때 비대칭키 암호화 방식은 지난 글에서도 정리한 적 있듯이, 두 가지 용도로 사용될 수 있다.  첫 번째는 공개키로 메세지를 암호화 한 뒤, 비밀키로 이를 해독하는 것이다.만약 앨리스가 밥에게 밥만 알아볼 수 있는 내용으로 암호문을 보내고자 한다면, 밥이 제공하는 공개키로 메세지를 암호화해서 밥에게 보내면 된다. 그 메세지는 밥이 가진 비밀키로만 해독할 수 있기 때문이다.  두 번째는 비밀키로 데이터에 서명을 남긴 뒤, 공개키로 이를 검증하는 것이다.비트코인에서는 이 용..

CS/블록체인

[블록체인] 3. 블록체인의 구조와 해시 함수

이제부터 비트코인과 블록체인의 기술적인 내용을 다루려고 한다.블록체인은 이름 그대로 여러 블록들이 서로서로 고리를 물고 체인처럼 연결된 구조를 하고 있다.이 구조로 어떻게 탈중앙화된 화폐를 만들 수 있을까? 우선 비트코인에는 '트랜잭션' 이라는 개념이 존재한다.이 트랜잭션은 비트코인을 사용해서 발생하는 모든 거래 정보를 나타낸다.Alice가 Bob에게 1비트코인을 지불하고 상품을 받는 거래를 한다고 한다면,'엘리스가 밥에게 1비트코인을 지불한다' 라는 행위가 트랜잭션이 되는 것이다. 이때 비트코인에서 발생하는 모든 트랜잭션에는 '서명'이 필요하다.비트코인은 Permissionless 블록체인이라 누구나 접근할 수 있는 데이터베이스기 때문에,이 트랜잭션이 '내가' 발생시킨 트랜잭션임을 확실하게 서명을 통해..

에버듀
'CS/블록체인' 카테고리의 글 목록 (2 Page)