CS지식

BlockChain이란?

hminor 2023. 6. 2. 00:25

BLOCKCHAIN

BLOCK + CHAIN

CHAIN

Hash Function으로 만든다

Cryptography

SHA256

256은 비트

Hello World! -> BF21D9C9B5EE25E28C7EADA0F9C709FEC09016A8E0AC3F695530C1B1E205E4C0 
Hello World! -> BF21D9C9B5EE25E28C7EADA0F9C709FEC09016A8E0AC3F695530C1B1E205E4C0 
Hello World! -> 67FD612D914172387FCCEA7B87013779A732D6ECA794299596E7691C588D4E5F

 

 

HASH Function

y = f(x)
y = 2x + 1
x가 1이면 y는 3
x가 2이면 y는 5

그럼 y가 7이면 f(x)는?
브루트 포스 : 쓸만한것을 모두 입력해보는 해킹 방법

대칭키 암호화 Symmetric Encryption

AES
ARIA, SEED
취약점 : 키가 털리면 다 털림

공개키 암호화 Asymmetric Encryption

RSA(소인수분해 이용), ECC
https
잠그는데만 쓰는 공개 키
여는 데만 쓰는 개인 키(비밀 키)
aws 암호화 방식 - RSA
요청한 사람한테 온건지 인증하는게 필요해서 전자 서명 생김

Digital Signature

공개키 알고리즘에 해시함수의 무결성을 더한 알고리즘을 더했다.
취약점 개인 키 관리, 비용과 느리다

BLOCKCHAIN NETWORK

인터넷 네트워크
web, P2P, 어둠의 웹

P2P
- 모두가 블록체인의 정보를 가지고 있다
- transaction 주문 발생시 확인
- 소유주, 잔고 등을 확인 후 풀에 들어가고 합의를 하는데 이를 하기 위해 채굴을 한다.
이 연산이 GPU연산이 빠르다. 10분에 1개 CPU중심이었다.

Data in Block

블록이 100번째인데 80번째 블록의 거래 정보를 해킹하려고 하면
해시가 다 바뀌면서 전체 다 바뀌어서
다 해킹을 진행해야 하기 때문에 이론적으로 블록체인 해킹이 어렵다고 표현

최근 블록은 valid되기 때문에 담기지 않는다

51% consensus → 블록생성 성공 → 정식적인 새로운 블록 생성

APPLICATIONS

  1. 결제
  2. 데이터 Storage

암호화폐(송금 내역), 스마트 계약, 물류관리, 지역화폐, 문서관리, 의료정보관리, 저작권관리, 한정판 디지털상품(NFT), 소셜미디어관리, 게임아이템관리, 전자투표, 신원확인 등
   3. World Computing

NFT (Non-Fungible Token)

고유성(Unique)
유일성(Only One)
희소성(A scarcity value)

Fully Decentralized VS Semi-Decentralized with Cemtralized Proxy

Summary

  1. 블록체인은 보안성, 투명성, 무결성, (탈중앙화)의 특징을 가지고 있고, 이 특징으로 어려가지 어플리케이션을 활용할 수 있다.
  2. 블록체인의 네트워크는 기본적으로 (P2P) 네트워크에서 작동한다.
  3. 암호화에는 복호화 가능 암호화, 단방향 암호화로 나눠지고, 단방향 암호화는 해시함수로, (SHA256), keccak256등이 있다.
  4. 암호화에 서명과 확인을 이용해 메시지의 무결성과 송신자를 보증하는 알고리즘을 (전자서명)이라고 한다.
  5. 이 (ECC) 암호화 알고리즘은 공개키 암호화로 타원곡선 함수를 이용하여 암호화한다.
  6. ECC + 전자서명 = ECDSA

 

Public Chain(Ethereum)

  • Public Chain은 누구나 접근 가능하고
  • 진정한 의미의 탈중앙화라는 장점이 있음
  • 한편으로는 데이터를 저장하는 것이 매우 비싸고
  • Transaction이 발생할 때마다 비용을 지불해야 한다
  • 다소 복잡한 Smart Contract의 배포 비용 (0.5 ETH)

이더리움의 장점

  • Middle man의 제거가 가능해짐
  • 닷컴 버블 이후 가장 성장한 비즈니스는 광고 플랫폼 등 Middle man이 필요한 산업
  • Smart Contract는 바로 이 Middle man의 개입 없이 공정한 분배가 이루어질 수 있음

이더리움은 무적인가? 오라클 문제

  • Oracle이란 블록체인 밖의 데이터를 블록체인 안(On-chain)으로 가져오는 것을 의미
  • 비가오면 Jhon에게 10$를 주겠다비가 왔다는 정보
  • 주사위를 던져서 3보다 큰 수가 나오면 1$를 지불한다코드로 구현 가능
  • 10월 11일이 되면 이 빌딩의 소유권을 Paul에게 양도한다10월 11일이 되었다는 정보

Private Chain

  • Private Chain은 DB에 준하는 빠른 속도
  • 사전에 약속된 사용자만 참가 가능
  • 주로 Hyperledger fabric을 사용한다
  • 사용자가 인지할 수 없는 사이에 블록체인 활용 가능

메타마스크?

  • 쉽게 사용할 수 있는 크롬 익스텐션
  • Key를 보관하고 서명을 안전하게 하는 역할을 한다
  • Web3을 이용해서 쉽게 서명할 수 있다
  • 개발자는 추상화 된 추상화된 API를 이용해서 쉽게 개발 가능

프론트엔드에서 블록체인과 통신하는 법

  • Web.js를 이용한다
  • 직접 private key를 이용해서 서명하는 것도 가능하지만
  • metamask와 같은 서비스를 이용하는 것이 안전함
  • 다른 사람의 지갑 주소로 ETH를 전송하거나
  • Smart Contract과 통신해서 데이터를 받아오는 것도 가능

ABI

  • Application Binary Interface
  • API와 닮은 모습
  • Binary 형태로 컴파일 된 Smart Contract와 통신하기 위한 Interface

How to deploy?

  • bytecode와 abi를 이용해서 deploy 한다
  • Remix가 있지 않나요?
const MyContract = new web3.eth.Contract(abi); 

let deploy = MyContract.deploy({
    data: bytecode,
    from: send_account}).encodeABI()
                                });

Payable modifier

  • 이더리움에 깔려있는 전제가 하나 있다
  • 핵심 로직은 이더리움을 이용한 결제를 통해 발생한다
  • 이더리움이 스마트 컨트랙에 입금될 때의 로직을 만들고 싶다면?
  • payable modifier를 붙여준다면 구현 가능하다!
  • (이더리움) 모임 통장 만들기, 경매, 안전 거래 등등
  • 대부분의 핵심 로직은 payable modifier를 이용해서 구현한다

Q. 블록체인에 영상을 저장하고 싶어요

  • 이더리움의 블록 코기는 1~8MB 수준
  • 여기에 영상을 저장할 수 있을까?
  • 텍스트 형태의 데이터라도 200개 이상 저장하는 것이 어렵다
  • 그렇다면 어떤 방법이 있을까?
  • IPFS를 활용한다

이더리움 vs 자체코인

  • 화폐의 가치는 그 화폐를 사람들이 얼마나 신용하는지에 따라서 결정된다
  • 코인의 가치 혹은 블록체인의 가치도 사람들의 신용도에 따라서 결정
  • 이더리움은 많은 사람들이 사용하기 때문에 신용도가 높고 가치도 높다
  • 우리가 만든 자체 코인은 자유도가 높지만 신용도는 매우 낮을 것
  • 하지만 사람들은 가치를 떠나서 그냥 받는 것을 좋아하기도 한다

Wrapper Class?

  • Web3j를 이용해서 Smart Contract와 통신하기 위해서
  • Wrapper Class를 생성해야 한다
  • Compile된 Binary로부터 Wrapper Class를 생성함
  • Compile된 Binary가 조금이라도 변경된다면
  • Wrapper Class를 다시 만들어야 한다
  • 주석, 공백을 포함해서 어떤 것이 바뀌어도 Wrapper Class는 다시 만들어야 한다
  • Jenkins 같은 자동화된 빌드 도구를 사용하는 것이 좋은 방법

유저가 블록체인을 불편해 할 때?

  • 서비스 제공자가 사용자 별로 키를 보관하고 관리해줄 수 있다
  • 신규 유저가 생기면 지갑을 생성하고 보관한다
  • 로그인 인증을 통해서 유저를 확인하고 대신 서명을 한다
  • 일반적인 거래소들이 많이 활용하는 방법
  • 대부분의 유저들에게 블록체인을 이해시키기 어렵기 때문에 사용한다

프론트엔드 vs 백엔드 어디서 처리할까?

  • 완전한 탈중앙화를 추구한다면 프론트엔드에서 유저에게 서명하는 것이 옳다
  • 그러나 유저 입장에서는 블록체인에 익숙하지 않기 때문에
  • 우리 서비스의 백엔드에서 대신 관리해주는 것도 가능하다
  • 구조를 설계할 때에 반드시 미리 결정해야 하는 부분이 이곳이다

어떤 네트워크를 사용할 것인가?

  • 우리만 사용할 수 있는 Private Network를 구성하는 것도 가능
  • Ropsten와 같은 Public하게 구성된 테스트넷들이 많이 있다
  • 실제로 이더리움 메인넷과 동일환 환경인 테스트넷을 사용하는 것이 가능하다
  • 실 서비스를 운영한다면 이더리움 메인넷에 배포해야 할 것

'CS지식' 카테고리의 다른 글

게임 제작 방법 노하우  (0) 2023.06.02
AWS 보안 가이드  (0) 2023.06.02
Data Flow  (0) 2023.06.02
AWS 배포에 필요한 구조  (0) 2023.06.02
AP의 조건  (0) 2023.06.01