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
- 결제
- 데이터 Storage
암호화폐(송금 내역), 스마트 계약, 물류관리, 지역화폐, 문서관리, 의료정보관리, 저작권관리, 한정판 디지털상품(NFT), 소셜미디어관리, 게임아이템관리, 전자투표, 신원확인 등
3. World Computing
NFT (Non-Fungible Token)
고유성(Unique)
유일성(Only One)
희소성(A scarcity value)
Fully Decentralized VS Semi-Decentralized with Cemtralized Proxy
Summary
- 블록체인은 보안성, 투명성, 무결성, (탈중앙화)의 특징을 가지고 있고, 이 특징으로 어려가지 어플리케이션을 활용할 수 있다.
- 블록체인의 네트워크는 기본적으로 (P2P) 네트워크에서 작동한다.
- 암호화에는 복호화 가능 암호화, 단방향 암호화로 나눠지고, 단방향 암호화는 해시함수로, (SHA256), keccak256등이 있다.
- 암호화에 서명과 확인을 이용해 메시지의 무결성과 송신자를 보증하는 알고리즘을 (전자서명)이라고 한다.
- 이 (ECC) 암호화 알고리즘은 공개키 암호화로 타원곡선 함수를 이용하여 암호화한다.
- 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 |