티스토리 뷰
Alchemy university - ethereum bootcamp
이건 무료라고한다.
크립토 좀비가 보니까 좀 옛날 버전이라서 구글에 ethereum foundation officially recommend courses
하고 검색을 해봤는데 검색 결과가 다음과 같았다.

그래서 맨 앞에 나온 A로 시작하는 Alchemy University에 들어왔다.
원래 모르는 식당 가면 맨 위에 있는 메뉴 먹으면 실패 확률이 적다고 했다. 그래서 나는 중국집 가면 짜장면을 가장 먼저 먹는다.
여튼..
시작해 보기로 하였다.

7주차 과정이라고 하고, 중급 수준의 난이도에 사전에 자바스크립트를 알고 있는게 좋다고 한다.
7주면 너무 긴 데, 조금 더 빠르게 열심히 해서 짧게 끝내보고싶구나.

학업 계획표도 보여준다. 한 주에 한 코스인가보다.

1주차 내용인가보다.
첫 페이지 가면 조금 더 자세하게 설명돼 있다.

1
What is the purpose of blockchain?
- is to have a network of comupters agree upon a common state of data. (consensus)
- 블록체인은 데이터의 특정 상태에 대해 동의하는 네트워크들을 말하고, 어떤 사람이나 기관도 참여할 수 있지미나, 그 어떤 사람이나 기관도 이 네트워크를 컨트롤 할 수는 없다.
cryptocurrency
- the most commmon use-case of blockchains
설명 되게 재미있게 해준다.
철이, 순이, 영호가 셋이 있는데, 각각 돈이 10만큼 있다.
여기 계모임 같은거라고 해볼까.
| 이름 | 잔고 |
| 철이 | 10 |
| 순이 | 10 |
| 영호 | 10 |
나는 장부 기재 담당이다. 총무라고 하자.
철이가 순이 생일이라고 5를 보내고싶다고 했다.
그래서 나는 오케이~ 하고 철이 잔고에서 5를 빼서 순이 잔고에 5를 더해줬다.
| 이름 | 잔고 |
| 철이 | 5 |
| 순이 | 15 |
| 영호 | 10 |
이제 철이 잔고는 5가됐고 순이 잔고는 15가 됐다. 영호는 순이랑 별로 안친한가보다. 그냥 가만히 있는다. 순이가 생일 안챙겨줬나보다.
자, 이렇게 간단한데, 왜 암호화폐 (cryptocurrency)가 필요하지? 할 수 있다.
1. 철이, 순이, 영호는 나(총무)가 그들을 속이지 않을거라고 생각해야 한다. 신뢰의 문제.
2. 철이, 순이, 영호는 최신 잔소를 쉽게 확인할 수 있어야 한다.
3. 철이, 순이, 영호는 더 많은 친구들을 이 계모임에 초대해서 총무가 일이 엄청 많아진다.
2번이랑 3번 같은 경우는 프로그래밍 실력으로 쉽게 커버가 된다. 예쁜 UI 그리고 API 가져다가 쓰면 된다.
요새 나오는 클로드 코드나 커서 가지고 몇시간이면 뚝딱 나올듯.
그런데 중요한건 1번. 신뢰의 문제를 어떻게 해결하느냐인데, 이에 대한 답이 2008년 사토시 나카모토 블록체인 백서에서 나왔다.
강의 원문을 좀 가져와보자면,
In, 2008, such a system was imagined. A person or persons, under the pseudonym Satoshi Nakamoto released a whitepaper for Bitcoin. In this paper they described a system that would create a peer-to-peer network for exchanging value. This system would combine years of cryptographic research and game theoretical financial incentives to create a secure, scalable network. The paper describes a chain of blocks tied together cryptographically. This would later be coined the blockchain.
To tie it altogether, blockchain was invented to solve for trust. To create a system that is completely neutral and resistant to any censorship or bribe.
그리하여 신뢰의 문제를 해결하는~ 블록체인!
Cryptographic Hash Function
우선 해쉬 함수부터 보면, 해쉬 함수는 입력값을 고정된 길이의 출력값으로 변환해주는 함수다.
A hash function is a function which takes an input of any size and turns it into a fixed size output.
해쉬 함수 알고리즘은 되게 다양한데, 크립토그래픽 해쉬 함수 같은 경우는 다음의 다섯 가지 특징을 가진다.
- Deterministic : 어떤 특정한 입력값은 항! 상! 같! 은! 특정한 출력값으로 변환된다.
- Pseudorandom : It is not possible to guess the output based on the ouput of similiar input. '가' 넣어서 'A' 나왔다고 '나' 넣어서 'B' 나올거라 추측할 수 없다.
- One-way : If someone gives you a new output, you could not determin an input without guessing. 추측 말곤 답이 없다. 아웃풋 뭐 주고 입력값 알아봐, 하면 그냥 랜덤 추측 하는 수 밖에.
- Fast to Compute : must be a quick calculation for a computer. 컴퓨터가 계산하기 빨라야하고
- Collision-resistant : the change of collision should be infinitely small. 충돌 날 확률은 겁나 적어야한다.
https://emn178.github.io/online-tools/sha256
SHA256
This SHA256 online tool helps you calculate hashes from strings. You can input UTF-8, UTF-16, Hex, Base64, or other encodings. It also supports HMAC.
emn178.github.io
여기서 해쉬 함수 이것 저것 실험해 볼 수 있다.
두 개의 중요한 해쉬함수 용도
1. commitments (protocol & smart contract)
2. proof of work
테스트 ... 풀기... 레인보우 테이블..
const { sha256 } = require("ethereum-cryptography/sha256");
const { toHex, utf8ToBytes } = require("ethereum-cryptography/utils");
// the possible colors that the hash could represent
const COLORS = ['red', 'green', 'blue', 'yellow', 'pink', 'orange'];
var colorHash = {}
for (var color of COLORS) {
var hashValue = toHex(sha256(utf8ToBytes(color)));
colorHash[hashValue] = color;
}
// given a hash, return the color that created the hash
function findColor(hash) {
const hexValue = toHex(hash)
const color = colorHash[hexValue];
return color;
}
module.exports = findColor;
다음은 Public Key Cryptography에 대해 배운다.
그립토그래피에 대해 궁금하다면?
https://en.wikipedia.org/wiki/Cryptography#History_of_cryptography_and_cryptanalysis
Cryptography - Wikipedia
From Wikipedia, the free encyclopedia Practice and study of secure communication techniques "Secret code" redirects here. For the Aya Kamiki album, see Secret Code. Lorenz cipher machine, used in World War II to encrypt communications of the German High C
en.wikipedia.org
1970년대 이전까지는 메세지를 가로채이더라도 해독이 안되게 암호화하는데 초점을 맞췄다. 주로 군사 기밀 전달 같은데 사용됐다.
초기 암호화 방식은 메세지에 함수를 적용해서 출력문을 만드는거였다. 예를 들어 abc 라는 메세지가 있고 적용하는 함수가 한 글자씩 밀기라면, bcd로 보내는 식.
그러다가 메세지 교환 전에 두 당사자가 비밀 키를 미리 공유하는 방식이 소개됐고, 메세지를 보내는 사람과 받는 사람이 모두 같은 키를 사용하는 이 방식을 대칭 키 암호방식 (Symmetric-key criptography)라고 부른다.
근데 여기 어려움이 있다. 비밀키,. 이거 어떻게 또 안전히 보관하지? 그리고 막 비밀이야기 나눌 사람들의 수가 늘어나면... 그 비밀키 갯수도 점점 많아진다. 예를 들어 10명이서 이야기 나눌래면, 비밀키 45개가 필요하다. 100명이 이야기 나눌려면? 100*99/2 = 4950개 키가 필요해.
이 분야는 쭈우욱 발전을 하다가 1976년 Whitefield Diffie가 제안하는 public key 아이디어에 다다른다. 사람들은 듣고 췟! 했을거다. 아니 암호의 핵심은 모르게 하는건데!! 공개키라니??!!
사고실험을 해 본다.
철수한테 공개키랑 비밀키가 있다. 철수가 공개키를 만천하에 공개해 뒀다. 그리고 비밀키는 깊숙하게 냉동실에 넣어둬서 철수만 알 수 있다. 철수가 이 비밀키를 이용해서 메세지를 암호화하고, 공개한다. 영희가 이 메세지를 봤다. 누구의 메세지인가 확인해보려고 공개된 만인의 공개키를 다 사용해보다가 철수꺼가 먹혔다. 그럼 영희는 한 치의 의심도 없이, 이 메세지가 철수가 작성한 것임을 알 수 있다. 이렇게 생각해보니 인증 수단으로 작동할 수 있음을 알겠다. 명명백백히! 이건 철수가 쓴거다!!! 이렇게. 철수 인증 완료.

반대로, 누군가 철수의 공개키로 암호화를 한 메세지를 어딘가에 올려놨다. 그 메세지 풀면 보물이 숨겨진데를 알려준다고 한다. 그래서 영희랑 철수랑 영호랑 등등 모든 유치원생들이 모두 다 달려들어서 그 메세지를 자기 비밀키로 풀어본다. 철수만 풀 수 있다. 사실 철수의 주작이었던 것이다. 이렇게 생각해보니 이건 효과적인 암호화 수단임을 알겠다. 내가 영희 공개키로 인크립션 해서 인터넷에 올려두고, 누구든 읽을 수 있게 해 둬도, 오직 영희만 읽을 수 있는 메세지가 되는거다. 영호가 아무리 애써도 풀 수가 없는거다.
사고실험 끝!
이건 비대칭 암호화라고 한다. 왜냐면 한쪽만 비밀키에 대해 접근이 가능하기 때문! 그리고 그냥 간단하게 공개키 암호화라고도 부른다.
const { keccak256 } = require("ethereum-cryptography/keccak");
const { utf8ToBytes } = require("ethereum-cryptography/utils");
function hashMessage(message) {
const bytes = utf8ToBytes(message);
const hash = keccak256(bytes);
return hash;
}
module.exports = hashMessage;
퀴즈 풀었다.
- Total
- Today
- Yesterday
- 테스트넷
- 터틀포인트
- gili
- til
- 선라이즈 패들보트
- 플러터
- 김영한
- 솔리디티
- Flutter
- 티스토리챌린지
- 공부좀열심히해라
- vscode
- 크립토좀비
- setState
- 이더리움
- 스파르타코딩클럽
- zksync
- 길리
- 패들보트
- web2
- contains
- 세폴리아
- web2web3비교
- 찾아봄
- prettier
- 길리여행
- web3
- 오블완
- 세상만사새옹지마
- DART
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |