블록체인이란?
하나의 데이터를, 여러 컴퓨터에 저장하는 시스템
정보가 담긴 블록을 체인형태로 묶은 것
블록체인의 필요성
하나의 컴퓨터가 해킹당해 정보가 조작되었더라도,
다른 수많은 컴퓨터가 올바른 정보를 알고 있기에, 올바른 정보를 지킬 수 있다!
블록체인의 특징
해시함수를 사용해서, 블록을 연결한다
해시함수란?
글자를 입력받아, 고정된 길이의 값을 출력하는 함수
( 같은 글자를 입력하면, 같은 값이 나온다.)
( 해시함수 문제로 다른 값이 나올때도 있지만, 가능성희박 )
해시함수의 특징
모든 입력에, 고정된 길이의 해시값을 출력한다
입력값을 아주 조금 바꿔도, 전혀 다른 결과를 출력한다 ( 오류나 변조탐지 쉬움 - 무결성 )
결과 값을 가지고 입력값을 유추하는 것은 불가능에 가깝다
해시함수의 종류 / 해시함수 사용해보기 ( www.convertstring.com/ko/Hash/SHA256 )
SHA 알고리즘
SHA-1
메시지 문자 크기 < 2^64
블록 크기 : 512 비트
해시 결과값 길이 : 160 비트
해시 보안 강도 : 0.625
SHA-256
메시지 문자 크기 < 2^64
블록 크기 : 512 비트
해시 결과값 길이 : 256 비트
해시 보안 강도 : 1
SHA-384
메시지 문자 크기 < 2^128
블록 크기 : 1024 비트
해시 결과값 길이 : 384 비트
해시 보안 강도 : 1.5
SHA-512
메시지 문자 크기 < 2^128
블록 크기 : 1024 비트
해시 결과값 길이 : 512 비트
해시 보안 강도 : 2
해시함수의 한계
해커가 입력할 수 있는 모든 데이터를 입력하고, 그에 따른 결과값을 구한 표(레인보우 테이블)를 가지고 있으면
해시값을 보고도, 입력값을 유추할 수 있다.
이를 방지하기 위해, 입력값에 랜덤값(salt)을 추가해주는 방법을 사용한다.
블록이란?
일정 시간마다 한 번씩 생성하는 데이터 저장용 공간으로,
여러 건의 정보를 하나의 블록으로 묶어 저장한다.
( 비트 코인은 10분마다 1번씩 거래정보를 저장한다 )
블록 해시란?
[ 블록의 이름 ]
블록 내부의 Header 정보를 모두 더하여, SHA256 해시함수에 입력해서 나온 값을 이름으로 쓴다.
( 버전, 이전 블록 해시, 머클 루트, 타임, bits, Nonce )
( 조건에 맞는 Nonce를 찾아내는 것 - 채굴 )
블록에 들어가는 정보
Header
버전 (Version) : 소프트웨어의 버전
이전 블록의 이름 (Previousblockhash) : 이전 블록 해시가 다음 블록을 만들때 사용하므로, 블록이 연결된다.
머클 루트 (Merkle Root) :
Body 부분에 저장된 거래정보를, 가까운 정보(바로옆)끼리 쌍을 지어 해시값을 구한다
구해진 해시값들도, 가까운 해시값끼리 쌍을 지어 하나의 해시값이 만들어질때까지, 해시값을 구한다.
이때, 마지막 남은 해시값을 머클 루트라고 부른다.
거래정보의 오류나 변조감지가 쉽다 (무결성 검증)
타임 (Time) : 블록의 생성 시간 (유닉스 기준)
난이도 목표 (bits, target) : 해시값의 조건(문제)
논스 (Nonce) : Header의 모든정보를 포함하고, 난이도 목표를 충족시키는 입력값
( 버전 + 이전 블록 이름 + 머클 루트 + 타임 + 난이도 목표 + Nonce = 조건에 맞는 해시값 )
Body
거래 정보(Transaction) 등의 데이터
채굴(작업증명) 이란?
블록을 생성하기 위해 컴퓨터가 정한 문제를 푸는 것
블록 해시를 알아내려면, 문제의 정답(Nonce)이 블록헤더에 포함되어야한다
문제 형식 : 문제값보다 작은 해시값을 출력하는 입력값을 찾으세요. ( 입력값에는 Header가 포함되어있어야 함 )
0x000000FFFFFFFFFFFFFFF (문제 : 난이도목표)
0xFFFFFFFFFFFFFFFFFFFFF (큰 값)
0x000000000000FFFFFFFFF (작은 값 : 정답!)
문제 난이도 결정 방식 : 채굴자가 늘어날수록 문제는 어려워진다. (비트코인 : 대략 1시간에 6번 정답)
문제를 풀고 있는 방식 : 0부터 1씩 증가시키면서 입력해서, 조건에 해당하는 해시값을 출력하는 입력값(Nonce)찾기
( 1초에 몇번이나 입력할 수 있는지 : 해시파워 )
Nonce를 찾은 사람은, 이를 네트워크 상에 알리고 다른 사람들에게 정답이 맞는지 확인받는다. (유효성검증)
정답이 맞는지 확인되었다면, 문제를 푼 사람에게 블록을 생성할 수 있는 권한을 준다.
문제를 푼 사람이 블록을 생성하고, 보상을 준다.
모르는 것
매번 같은 해시 알고리즘을 사용하는가? / 해시알고리즘을 매번 변경한다면, 해킹에 더 안전하다.
만들어진 블록 정보는 어디에 저장하는가?
가짜 Nonce를 계속알린다면? / 다른 사람의 연산을 방해하므로, 일정시간이상 Nonce를 알리지 못하도록 처리
새로운 블록을 만들고자 하는 사람이 없다면, 계속 생기는 새로운 정보들을 블록체인상에 안전하게 보관하지 못한다.
조건 : 보상은 무한해야 한다.
무한히 생성되면 가치는 하락한다.
무한히 생성하지 않고, 보상을 무한히 주는 법은, 순환하는 방법 밖에 없다.
대안1 : 거래 수수료를 채굴 보상으로
아직 이해되지 않은 것
채굴자들은 다음 블록을 생성하기 위해 A와 B중 하나의 블록을 선택하여 블록을 생성한다.
다음 블록을 생성하는 채굴자는 A와 B중 하나의 블록에 연결한 블록을 생성한다
또 다시 A를 선택한 채굴자와 B를 선택한 채굴자가 동시에 블록을 생성할 확률은 굉장히 낮다.
나카모토 사토시는 확률 증명을 통해 블록 6개가 대립되는 블록이 계속 생성될 확률은 0에 가깝다는 것을 알려주었다.
일시적으로 합의가 깨질 수 있으나 확률적으로 마지막엔 하나의 블록체인을 합의하게 하는 알고리즘
1시간에 생성되는 블록을 6블록으로 유지
( ai로, 해시함수 알고리즘을 파악해버린다면? 알고리즘을 역으로 실행하여, 작업 수행도 쉬워지지 않을까? )
작업증명의 문제점
정답을 찾는데 필요한 전기량이 너무 많다. ( 에너지 문제 )
채굴장에서, 대규모로 채굴하는 사람이 더 유리한 환경에서 정답을 찾을 수 있으므로, 완전한 탈중앙화가 불가능하다.
확률적 안정성, 블록이 한번 생성되었을 때에 그 사실을 100% 믿을 수 있는가?
6블록 이상 블록이 쌓였을 때에 그 거래를 믿을 수 있는 것으로 본다.
1시간을 기다려야 한다는 것은 실생활에서 결제에 사용되기 불편하다.
51%의 사용자를 해킹함으로써, 확률적 안정성을 깨트릴 수 있다.
이에 따라 지분증명이라는 것을 고안해내기 시작했다.
기존화폐와 암호화폐의 차이점
차이점 | |
기존 화폐 | 암호 화폐 |
은행이 거래정보 소유 | 모든 사람이 거래정보 소유 |
기존화폐와 암호화폐의 문제점
문제점 | |
기존 화폐 | 암호화폐 |
은행서버는 해킹에 대해 얼마나 안전한가? | 과반수 이상의 노드는 해킹에 대해 얼마나 안전한가? |
은행이 정보를 조작할 수도 있다 | 과반수 이상의 사람들이 정보를 조작할 수도 있다 |
은행이 서버를 점검할때, 서비스를 이용할 수 없다. | 노드가 없으면 이용할 수 없다. |
* 노드 : 블록체인을 다운받은 컴퓨터
반응형