https://www.youtube.com/watch?v=bBC-nXj3Ng4&feature=emb_title&ab_channel=3Blue1Brown 

 
암호화 화폐 (Cryptocurrency)

요약 : 기존의 화폐 거래에서는, 항상 중간에서 거래를 중개해 주는 제3자(공인 금융기관; 은행)가 있었다. 인터넷의 특징인 익명성 때문에 거래 과정을 완전히 신뢰할 수 없었기에 이런 중개자의 역할은 필수적인 것으로 여겨졌으나, 디지털 화폐의 등장으로 점점 기존의 패러다임이 도전을 받고 있다.

 

암호 화폐는 암호학(Cryptography)에서 파생된 수학적 방법을 활용해 거래의 정당성과 신뢰성을 확보했고, 탈 중앙화된/운영 주체를 믿을 필요가 없는 검증 방식(Decentralized trustless verification)으로 개인 간 거래를 훨씬 간편하게 만들었다.

 

* 'trustless'에 대한 해석

https://www.preethikasireddy.com/post/what-do-we-mean-by-blockchains-are-trustless

 

What do we mean by “blockchains are trustless”?

Many of us are guilty of describing blockchains as “trustless” systems. However, I’ve come to realize that the term “trustless” is ambiguous, confusing, and most importantly, inaccurate. Blockchains don’t actually eliminate trust. What they do

www.preethikasireddy.com

 


1. 장부 (Ledger)와 디지털 서명 (Digital signatures)

거래에 참여하는 개개인은 공개 장부에 자신의 거래 내역을 마음대로 기록할 수 있다.

예) 갑이 을에게 100만 원을 송금함.

 

하지만, 저 내용을 진짜 '갑'이 직접 기록한 정당한 거래 내역이라고 말할 수 있을까? '을'이 돈을 뜯으려고 기록한 것일 수도 있잖아.

→ 각자가 장부에 거래 내역을 기록할 때, 조작이 절대 불가능한 서명을 같이 첨부하는 방법

(디지털 서명을 통해 거래의 진위를 보장)

 

디지털 서명

다음과 같은 특징이 필요하다.

1) 내 서명은 나만 쓸 수 있어야 한다. 즉, 다른 사람이 내 서명을 조작할 수 없어야 한다.

2) 서명된 거래 내역을 조작한다면, 서명이 조작되었음을 알 수 있어야 한다.

3) 제3자가 서명이 진짜인지 아닌지 확인할 수 있어야 한다.

 

위 특징을 충족하기 위해, 공개키 암호화 알고리즘을 사용한다.

모두에게 오픈된 공개키가 있고, 개개인에게 주어지는 개인키가 있다. 암호화는 '일방향 해시 함수'로 이루어지는데, 개인키와 메시지를 인자로 받아서 일련의 규칙에 따라 서명을 만들어 뱉는다. 제3자는 모두에게 공개된 공개키를 사용하여 해당 메시지에 있는 서명을 복호화 하여 진위 여부 확인이 가능하다.

Sign(Message, secret_key) = Signature
Verify(Message, Signature, public_key) = T/F
 

해시 함수에 들어가는 메시지 혹은 개인키가 조금이라도 달라지면 서명이 달라지기 때문에,

개인키를 완벽히 알고 있지 않는 이상 서명 자체 혹은 서명된 메시지의 조작이 불가능하다 (1번 2번 해결)

 

 

Q. 근데 Sign(Message, secret_key) = Signature 라며? 반대로 서명과 메시지만 있으면 역산해서 개인키를 찾아낼 수 있지 않아?

→ 여기서 '일방향 해시 함수'는 이름 그대로 역산이 확률적으로 불가능하다 (irreversible).

해시 함수에 메시지와 개인키(Message, sk)를 넣어 서명을 만드는 건 쉽지만, 반대로 서명과 메시지만 가지고 개인키를 알아내는 건 확률적으로 불가능하다.

일일이 키를 해시 함수에 넣어서 나오는 서명이 같은지 비교하는 방법밖에 없다.


해시 함수 중 하나인 SHA-256 함수의 경우 2^256 종류의 해시가 존재한다. 즉, 2^256 가지 경우의 수를 다 뒤져야 해시를 만들어낸 원래 개인키가 뭔지 알 수 있다는 뜻이다.

그러나, 2^256 은 터무니없이 큰 숫자이기 때문에, 현재의 컴퓨팅 파워로는 절대 역산이 불가능하다.

따라서 디지털 서명이 조작되었을 가능성은 매우 낮다.

 

(아래는 그냥 통계학적으로 생각해 본 건데 틀릴 수도 있음)

만약 귀무 가설을 '이 디지털 서명은 A가 자신의 개인키를 가지고 만든 정당한 서명이다'라고 둘 때, 대립 가설을 '이 디지털 서명은 공개키를 이용해 일일히 경우의 수를 뒤져보며 찾은 조작된 서명이다 (즉 정당하지 않은 서명이다)' 라고 둘 수 있다. 이때, 대립 가설이 참일 확률이 조~오온나 낮기 때문에, 귀무 가설을 기각할 수 없다. 이렇게 공개 장부에 기록되는 기록의 정당성을 확인할수 있는것.

 

결론 : 공개키-개인키 암호화 알고리즘 (예 SHA-256)를 이용해서 공개 장부에서의 거래 기록의 신뢰성을 확보할수 있다.

 

https://www.crocus.co.kr/1211?category=198068 

 

일방향 해시 함수

1. 일방향 해시 함수란? 범죄 수사에서는 지문을 이용하는 일이 있다. 특정인 지문과 현장에 남겨진 지문을 대조하여 그 사람이 관련된지 조사하는 방식이다. 이때 컴퓨터로 처리하는 디지털 내

www.crocus.co.kr

https://www.crocus.co.kr/1236

 

공개키 암호(Public Key Cryptography)

목차 1. 공개키 암호(Public Key Cryptography)란? 2. 공개키 암호화 모델링 및 이용 방법 3. 공개키 암호의 문제점 1. 공개키 암호(Public Key Cryptography)란? 공개키 암호학이 생기기 전에는 대칭키를 이용하..

www.crocus.co.kr

 

https://velog.io/@zuyonze/%ED%95%B4%EC%8B%9C%ED%95%A8%EC%88%98%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC%ED%95%98%EA%B8%B0

 

해시함수에 대한 개념 정리하기

이전 게시글 제목의 오타가 url로 고정이 되어 조금 보완하여 새롭게 작성하였습니다. 해시함수란 해시함수는 임의의 길이의 데이터를 입력받아 일정한 길이의 비트열로 반환 시켜주는 함수이

velog.io

 


2. 암호 화폐 (Cryptocurrency)

 

이제 암호화폐의 개념으로 들어가보자.

장부에 거래를 기록하고 정산하는 등의 일련의 규칙(프로토콜)을 누가 관리할까?

→ 현실의 화폐라면 은행이 통제. 하지만, 암호 화폐는 중간자를 배제하기 위해 모든 참여자가 각각 개인만의 장부를 가짐. 그리고, 거래 내역이 갱신될때마다 모든 다른 개인들에게 알림으로써 (broadcasting) 장부를 채워나가는거지.

 

Q. 이렇게 장부를 분산해서 개인마다 다르게 보관하고 있으면 데이터 일치성 문제 (data inconsistancy)가 발생하지 않을까? 어떤 장부가 맞는건지 어떻게 확인해?

 '작업 증명(Proof of Work)' 의 개념이 등장함. 일련의 거래를 장부에 기록해서 모아둔 걸 블록(block)이라고 하자. 매 시간마다 우리는 블록을 정산해서 거래를 확정지어야 함. 그리고 블록의 정당성을 확보하기 위해 암호화 알고리즘을 사용한다.

 

간단히 예를 들어, 256자리의 해쉬 값 중 맨 앞 60개 자리의 숫자가 0이 되도록 하는 해쉬를 만드는 숫자(Proof of Work)를 찾아서 블록의 맨 뒤에 붙이는거임. 근데, 해쉬 함수가 역산이 불가능하기 때문에, 이 작업은 엄청난 수의 경우의 수를 일일히 체크하는, computationally complex한 문제가 됨.

어찌 저찌 해서 원하는 숫자를 찾아서 블록 맨 뒤에 붙이고 다른 사람들에게도 알렸다고 치자. 그럼, 그게 바로 새로운 블록을 만든 것이고, 보상으로 새 비트코인을 받을 수 있게 됨. 이 작업을 채굴(mining)이라고 한다.

 

그리고 이 채굴 작업은 엄청나게 어렵기 때문에, 현재까지 계산된 가장 긴 블록을 '가장 최신 장부'로 받아들이고 다른 장부들을 이에 맞춰 업데이트한다.

왜? 가장 길다는 말은 상상할수도 없이 많은 컴퓨팅 파워가 투입되었다는 뜻이므로, 조작 가능성이 가장 낮은, 신뢰성 있는 최신 장부라고 할 수 있다.

 

Q. 만약 누군가 블록 내 거래 내역을 조작한 후, 엄청난 컴퓨터파워를 바탕으로 해쉬 함수를 속여서 진짜 장부인 것처럼 사람들을 속일수도 있지 않냐? 화폐 거래가 될 정도의 신뢰성이 있는거야?

1. 기존 거래 내역을 조작하는 경우

- Proof of Work는 블록의 거래 내역과도 연결되어 있다. 즉, 거래 내역이 조금이라도 바뀌면 해쉬 값도 완전히 달라지게 되고, 이러면 또 작업증명을 조작하는 과정을 반복해야겠지. 이 작업은 엄청 힘들고.

- 또, 각 블록의 순서를 유지하기 위해, 이전 블록의 해시 값을 함께 저장한다. 따라서, 한 블록의 해시 값을 바꾸면, 이후 오는 블록들의 해시 값이 전부 바뀌어서(내용이 조금이라도 바뀌면 해시 값이 완전히 바뀜) 작업 증명을 다시 해야함. 웬만한 컴퓨팅 파워로는 어림도 없다.

 

2. 운 좋게 한 두번 작업 증명을 조작하여 새 블록을 쌓았다고 해보자. 근데 이 블록은 분명 정상적인 거래 내역을 담고 있는 다른 블록과 다를텐데, 조작된 블록 체인을 계속 쌓아갈 수 있을까?

현재의 컴퓨팅 파워로서 불가능하다는게 결론. 언젠가는 지구 상의 다른 참여자들의 정상적인 블록체인이 이 조작된 블록체인보다 길어져서 버려지게 될 것임.

 

결론 : 암호 화폐 결제 내역인 블록을 만들어 정산하고 보상을 받으려는(채굴) 수많은 참여자들이 존재하는 한, 거래 내역을 조작하는 건 현재 존재하는 컴퓨팅 파워로는 불가능하기 때문에 거래의 신뢰성이 보장된다. 즉, 암호 화폐 거래에 참여하는 개개인들 덕에 중앙 시스템 없이 믿을만한 화폐 거래가 가능한 것.

 


이 '작업 증명' 알고리즘의 굉장히 간단한 허점은, 누군가가 엄청난 컴퓨팅 파워로 SHA-256 알고리즘을 뚫고 작업 증명을 마구마구 위조한다면 신뢰가 붕괴된다는 점이다. 양자 컴퓨터 같은 엄청난 컴퓨팅 파워의 기계가 나온다던지, 몇개 국가가 짜고 슈퍼컴퓨터를 엄청 많이 돌려서 맘먹고 주작하면 이 허점을 공략할 수 있지 않을까? (그러나 현대의 많은 보안체계가 공개키 암호화 알고리즘을 사용한다는 점을 생각해볼때, 이런 시대가 오면 보안은 비단 비트코인만의 문제가 아니게 될 것이다)

 

암호화폐의 신뢰성이 현재로썬 '참여자들의 지속적인 참여'에 전적으로 의존한다는 사실이 새롭기도 하면서 의문점이 든다.

암호화폐의 발행 총량은 정해져있고, 시간이 지날수록 블록 완성 보상으로 주어지는 화폐도 반토막 나고 있다. 만약 가까운 미래에 채굴꾼들이 채굴을 그만둔다면, 조작된 블록체인이 진짜 장부로 받아들여질 날이 올지도 모른다.

 

Q1. 암호 화폐 말고, 블록 체인의 다른 활용도? 파일 공유 등에 쓰이는 것 같던데

Q2. 기존의 P2P (토렌트, 프루나 등)와 다른점이 뭐야?

 

+ Recent posts