일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 컴퓨터구조
- leetcode 819
- wargame.kr
- 올바른 변수명 짓기
- Hadoop
- 문자열 조작
- leetcode 49
- docker로 airflow 설치하기
- 빅데이터를 지탱하는 기술
- 스파크 완벽 가이드
- Hortonworks Sandbox
- leetcode 121
- 데이터레이크와 데이터웨어하우스
- leetcode 937
- airflow docker
- leetcode 15
- leetcode 234
- webcrawler
- leetcode 238
- 배열
- MapReduce 실습
- Python
- leetcode 5
- leetcode 561
- leetcode125
- leetcode
- 머신러닝
- 블로그 이전했어요
- leetcode 344
- ctf-d
- Today
- Total
HyeM
[블록체인] 본문
참고 책 : 엔지니어를 위한 블록체인 프로그래밍
아래 책 이미지 사용함.
Chapter 1 _ About 블록체인
01.블록체인
: 공개된 Network에서, 네트워크에 참가한 사람들에 의해 분산형 합의 구성 & 투명성 거래 구현하는 기술
02. 비트코인
1) 블록체인 기술을 이용하여 구현한 특정 네트워크 (비트코인, 이더리움 등등)
2) 특정 네트워크에서 유통되는 통화(이더리움에서는 '이더')
03. 비트코인 네트워크
: 사토시 나카모토 라고 밝힌 사람이 쓴 논문으로 기반으로 구현됨. 깃허브에서 오픈소스
- 목적 : 가상통화인 비트코인 송금
- 개방적인 네트워크(퍼블릭 블록체인) <-> 프라이빗 블록체인(컨소시엄 블록체인) ex. 하이퍼레저 페브릭
04. 이더리움 (블록체인 네트워크)
- 목적 : '스마트 계약'(;블록체인에서 실행되는 프로그램) 자유롭게 개발 가능
05. 비트코인 네트워크의 구성요소
- P2P
'노드'가 시점에 따라 서버나 클라이언트 역할을 하며, 프로토콜을 구현한 클라이언트 소프트웨어를 통해 네트워크에 참여하여 서로 통신을 주고 받는 네트워크 형태이다. 비트코인 블록체인에서는 거래나 블록을 P2P방식으로 주고 받는다. - 참여자
사용자와 채굴자로 나눌수 있음
- 사용자 : 비트코인을 송금하는 것이 목적
- 채굴자 : 블록을 생성해서 그 대가로 블록체인을 목적 - 거래(트랜잭션)
송금자가 비트코인을 송금하기 위해 발행하는 명령,네트워크 안에서 각 노드를 거쳐 전파됨.
내용은 보내는 사람, 받는 사람, 송금액등이 포함됨. - 블록
여러개의 거래가 담긴 것, 채굴자에 의해 생성됨. 네트워크 안에서 각 노드를 거쳐 전파됨. - 분산장부
비트코인 네트워크에선 모든 블록이 각 노드의 장부(DB)에 저장된다. 노드에 저장된 장부 자체를 '분산장부'라고 부른다.
'실질적 제로 다운타임' : 노드 한두 개가 동작하지 않아도 다른 노드의 분산장부에서 거래확인 가능
'블록 연쇄적 구성' : 노드가 새로운 블록을 받으면, 자신의 분장장부에 이를 저장하고, 앞 블록에 대한 해시값을 저장한다. 분산장부는 불록이 연쇄적으로 연결된 구조를 갖게 된다. - 마이닝(채굴)
블록을 새로 생성하는일, 채굴 성공시 채굴자에 대한 보수로 새로운 블록체인 발행함.
하나의 블록은 한 명의 채굴자에 의해서만 만들어지고 보수도 채굴자만 받게 되어, 보수를 받기 위해 채굴자들은 서로 경쟁한다.
Chapter 2 _ 블록체인 암호기술
01. 해시함수
해시함수 : 출력값은 항상 고정된 길이를 갖고, 입력값이 조금만 달라져도 다른 값이 나온다.
비트코인 네트워크에서는 공개키를 SHA-256으로 생성하고,
이를 다시 RIPEMD-160으로 해시값을 만들어 더 짧게 만든다. 이렇게 만들어진 것을 HASH160이라 부른다.
02. 공개키 암호
암호화 방식의 한 종류로 비밀키와 공개키 이용. 공개키로 암호화하고, 비밀키로 복원한다. <-> 공통키 방식
03. 타원곡선 암호
공개키 암호의 한 종류, 비트코인과 이더리움에서 모두 사용됨.
-타원곡선 : 다음 식으로 나타낼 수 있는 곡선
y^2= x^3 +ax + b |
a와 b에 따라 타원곡선의 모양이 달라지는데, 비트코인에서는 NIST가 정의한 'secp256k1' 이라는 곡선을 이용한다.
y^2 =(x^3 +7) over (Fp) |
위에 식에서 p는 매우 큰 소수로, Fp는 매우 큰 소수 p의 유한체에 정의된 것이다.
(유한체 : 원소 간에 사칙연산이 가능한 유한 개의 원소를 가지는 체)
y^2=x^3+7을 그래프로 나타내면, 다음과 같다.
-타원곡선 덧셈 :
타원 곡선 위의 점 A,B를 더하려면,
1. 두 점을 지나는 직선을 긋고,
2. 직선과 타원곡선의 교점 R를 구하고,
3. x축을 기준으로 R과 대칭인 점 R' 을 A+B로 정의한다.
=> 무한 원점을 O(덧셈의 항등원)로 하는 덧셈을 구성할 수 있다.
-타원곡선 곱셈 :
곱셈은 덧셈으로 나타 낼 수 있다. 예를 들어 A+A를 구한다고 하면,
A=B로 가정하고, A에 대한 접선을 그으면 된다.
G를 타원곡선에 존재하는 베이스포인트로 삼으면,
G를 k배하여 K를 계산할 수있다.
K= k * G
타원곡선 암호는 k값을 무작위로 선택하여 비밀키로 하고,
K를 공개키로 삼는다.
K 공개키는 k와 G값을 알면 되는데, K와 G로부터 비밀키 k를 아는 것은 타원곡선의 이산로그 문제가 되므로, 계산량이 커서 브루트 포스 방식으로도 매우 긴 시간이 걸린다.
다음 책의 그림을 보고 이를 더 자세히 이해해보면,
타원곡선에서 G를 베이스 포인트로 삼고, G를 고정시키고 k를 값을 증가시켜, 소수p로 정해진 범위 안을 움직이는 이미지 이다.
kG(=K)에 있을 때, G로부터 몇 스텝(k) 움직였는지 알 수 없기 때문에, K를 공개키로 공개해도 이로 부터 비밀키 k를 유츄하긴 힘들다.
04. 디지털 서명
공개키 암호를 응용하여 전송받은 데이터의 송신자를 검증하거나 전송 과정에서 변조 되지 않았는지를 확인하는 기술이다.
- 송신자 : 송신할 데이터를 해시값으로 만든뒤, 비밀키로 암호화하여 서명한다. 그리고 데이터와 서명을 수신자에게 송신하다.
- 수신자 : 받은 데이터를 송신자와 같은 해시함수로 해시값을 구하고, 받은 서명을 공개키로 복호화한다. A와 B 두 해시값을 비교하여 일치 여부를 확인하다.
Chapter 3_ 키, 어드레스, 전자지갑
A가 갖고 있는 비트코인을 다른 사람에 이전 하는 과정 비유 :
A가 자신의 '열쇠'로 '자물쇠'를 열어서 새로운 소유자 B의 열쇠로만 열 수 있는 자물쇠를 거는 과정
01. 어드레스
A가 B에게 비트코인을 송금하려 할때, 송금 대상이 되는 것이 '어드레스'이다.
어드레스는 일반적으로 공개키의 해시값으로 만들어진다.
- 어드레스 생성과정 -
- SHA-256으로 공개키의 해시값을 만듦
- 1에서 얻은 해시값을 다시 RIPEMD-160으로 해시값을 만든다. => 공개키 해시
- 2에서 얻은 해시값을 Basa58Check로 인코딩한다.
02. Base58Check 인코딩
Base58은 이메일의 base64인코딩과 유사한 인코딩 방식이다.
- 어드레스 생성과정 (구체적) -
- 공개키 해시값 앞에 Version Prefix 붙임
- 'Version Prefix + 공개키 해시값' 을 SHA-256으로 해시값 계산한다.
- 2에서 만든 해시값을 다시 SHA-256으로 해시값을 계산한다.
- 3에서 만든 해시값 중 처음 4바이트를 Checksum으로 'Version Prefix + 공개키 해시값' 뒤에 붙인다.
- 'Version Prefix + 공개키 해시값'+ Checksum' 을 base58로 인코딩한다.
* Version Prefix : Base58Check로 인코딩하는 데이터 종류를 특정하는 접두사를 말한다. Base58Check로 인코딩한 결과값의 앞글자를 보고 종류를 구별할 수 있다.
Version Prefix(16진수) | 종류 | Base58Check 인코딩 후에 생성되는 값의 일부분 |
00 | 공개키 해시(P2PKH) | 1 |
05 | 스크립트 해시(P2SH) | 3 |
80 | 비밀키 WIF방식 | 5 |
03. 전자 지갑
전자지갑은 좁은 의미로는 비밀키를 관리하는 것(비트코인이 들어있는 것은 아님)이고, 넓은 의미로는 송금, 잔액 확인, 키와 어드레스 관리 등의 기능을 제공하는 애플리케이션을 의미한다.
전자 지갑에 보관된 비밀키를 사용하여 비트코인의 소유권을 이전한다.
04. 전자 지갑의 종류
- PC에 존재하는 전자 지갑 _ 최초 기동시 모든 블록 내려받음, 주요 운영체제에서 지원됨
- 모바일 전자 지갑 _iOS , 안드로이드 단말에서 동작함
- 거래소 전자 지갑 _ 가상통화 거래소에서 만드는 타입, 기존 웹서비스처럼 ID와 PW를 구성된 계정을 사용하여, 직접 비밀키를 관리하지 않는다. 거래소 운영자에게 보안을 맡김
- 페이퍼 월릿 _ 비밀키를 종이에 인쇄해둔 전자 지갑
- 하드웨어 월릿 _ 전용 단말기를 사용하여 비밀키를 보관하는 전자 지갑
'Study > BlockChain' 카테고리의 다른 글
[블록체인] 2_거래 (0) | 2020.08.19 |
---|