안녕하세요 여러분. 참새입니다.
가상화폐 = 중앙기관들을 믿어야하는 ‘신용 (trust)’ 없이 ‘암호화 방식 (cryptography)’을 사용하여서 장부 기록들을 믿을 수 있도록 만들어주는 ‘장부 (ledger)’
간단하게, 가상화폐를 거래 기록 장부라고 생각하시면 됩니다. (왜 가상화폐를 장부라고 생각해도 괜찮은지는 비트코인의 원리 시리즈를 통해서 하나씩 알아보도록 하겠습니다!)
‘장부 (ledger)’ 하나만 덩그러니 존재하게 된다면 장부의 기록들을 완전히 신뢰할 수가 없기 때문에 ‘전자서명 (digital signature)’이 함께 필요하게 됩니다. 전자 서명이 어떤 역할을 하기에 장부를 ‘신뢰할 수 있는 장부’로 만들어줄 수 있을까요?
누가 누구한테 얼마를 줬고 받았는지 기록을 할 수 있도록 공용 장부 (communal ledger) 하나를 만들어서 모든 거래 기록들을 기입을 하게되면 장부의 마지막 결과값에 따라서 누가 누구한테 얼마를 줘야하고 받아야하는지에 대한 돈 계산을 끝낼 수 있습니다. 예시를 들어보겠습니다.
(1). 앨리스가 밥한테 $20를 빌려줬습니다.
(2). 밥이 앨리스에게 $30를 빌려줬습니다.
(3). 앨리스가 밥한테 $$5를 빌려줬습니다.
앨리스와 밥이 위의 거래 기록들을 공용 장부에 입력하게 되면 마지막 결과값은:
“앨리스가 밥한테 총 $25를 빌려줬고, 밥이 앨리스에게 총 $30를 빌려줬습니다.”
즉, 3번의 거래들이 있었지만 모든 거래 기록들을 요약하자면 밥이 앨리스에게 $5를 빌려준 것과 동일하기 때문에 나중에 엘리스가 밥한테 $5를 갚으면 되겠죠!
프로토콜 (protocol)이란 따라야 하는 규칙과 약속입니다. 공용 장부를 효과적으로 사용하기 위해서 우선 기본적으로 두 가지 규칙들이 있어야 합니다.
• 공용 장부를 쓰는 모든 사람들은 장부에 거래 기록을 입력할 수 있다.
• 장부의 마지막 결과값에 따라서 돈 계산을 끝낸다. (앨리스가 밥한테 결과적으로 $5만 주면 되는 것처럼요 ^^)
이 두 가지 규칙들을 따르게 된다면 공용 장부를 쓰는 사람들은 훨씬 더 편리하게 돈 거래를 할 수 있을 것입니다.
문제는, 공용 장부를 쓰는 모든 사람들이 장부에 거래 기록을 입력할 수 있기 때문에 ‘조작’이 가능하다는 것입니다. 앨리스가 첫 거래에서 밥한테 $20를 빌려줬는데 밥이 앨리스한테 사기를 치려고 공용 장부에 “앨리스가 밥한테 $20를 빌려줬습니다.” 라는 줄을 삭제하게 되면 밥은 앨리스한테 $20를 줄 필요가 없어집니다. 이러한 문제를 방지하기 위해서 ‘전자서명’이 필요하게 됩니다.
전자서명은 일반적인 서명과 똑같은 역할을 합니다. 거래 기록을 ‘인증’해주는 표시죠. 위의 노란색 박스 안에 나와있는 것처럼, “앨리스가 밥한테 $20를 빌려줬습니다.”라는 줄을 앨리스가 공용 장부에 입력하고 옆에 ‘Alice’라고 서명을 하게 되면 앨리스가 인증한 거래 기록이 공용 장부에 업데이트되기 때문에 밥이 앨리스한테 돈을 받은 적이 없다고 사기를 칠 수가 없겠죠? ^^
일반적인 서명가 진짜인지 가짜인지 판단할 때는 서명의 글씨체로 판단할 수 있습니다. 하지만 전자서명은 숫자로만 이루어진 서명이기 때문에 복사하고 붙이기가 쉽습니다.
“Alice의 전자서명 = 01100001” 이라는 것을 아는 사람들은 앨리스 행세를 하면서 허위 거래 기록을 공용 장부에 입력하고 옆에 ‘01100001’이라고 전자서명을 하게 되면 앨리스가 직접 전자서명한 것처럼 보이겠죠.
전자서명 도용 방지를 위해 프라이빗 키 (private key; sk)와 퍼블릭 키 (public key; pk)가 등장합니다. (인터넷의 원리를 구독해주신 분이라면 프라이빗 키와 퍼블릭 키 모두가 사용될 때 안전하게 정보를 지킬 수 있다는걸 아실겁니다 ㅎㅎ 프라이빗 키는 시크릿 키라고도 부르기 때문에 약자로 ‘sk’로 씁니다.)
거래 기록과 여러분만 알고있는 고유한 프라이빗 키의 조합에 따라서 다른 전자서명이 나타나게 됩니다. 거래 기록이나 프라이빗 키에 조금이라도 다른 점이 있으면 완.전.히. 다른 전자서명이 나타나게 되죠. 즉, 전자서명은 프라이빗 키를 소유하고 있는 본인만 생성할 수 있습니다.
그리고나서, 거래 기록에 포함된 전자서명이 제대로된 전자서명인지 아닌지 (True or False) 판단할 때 퍼블릭 키가 사용됩니다.
아직 무슨 말인지 감이 잘 안잡히시죠? ^^;;
요약하자면, 앨리스는 앨리스만 알고 있는 앨리스의 프라이빗 키가 있기 때문에 앨리스만의 전자서명을 할 수 있고, 앨리스를 포함한 모든 사람들이 앨리스의 전자서명이 맞는지 틀린지 확인할 때는 퍼블릭 키를 사용해서 확인할 수 있습니다.
여기서 궁금하신 점이 있으실 겁니다: “참새님, 앨리스의 전자서명의 경우의 수만큼 일일이 다 입력해보면서 앨리스의 유효한 전자서명을 찾으면 앨리스의 전자서명을 흉내낼 수 있지 않을까요?”
전자서명은 보통 256 비트로 이루어져 있기 때문에 2^256 (2의 256승) 만큼의 경우의 수가 있습니다. 이 모든 경우의 수를 일일이 다 입력해보면서 앨리스의 유효한 전자서명을 찾기란 거의 불가능에 가깝죠 ^^;; 결론적으로, 앨리스의 프라이빗 키를 알고 있는 앨리스만이 앨리스의 전자서명을 생성할 수 있습니다!
특정한 거래 기록과 특정한 전자서명이 있어야지만 유효한 거래 기록으로 인정받을 수 있습니다. 그런데, 여기서 또 한 가지 문제가 생깁니다. “앨리스가 밥한테 $100를 빌려줬습니다.”라는 거래 기록과 앨리스의 고유한 전자서명이 함께 있어야지만 인증된 거래 기록을 공용 장부에 업데이트할 수 있다면, 다른 사람들이 똑같은 거래 기록을 복사+붙이기 할 수 있지 않을까요?
“앨리스가 밥한테 $100를 빌려줬습니다.” + 앨리스의 전자서명 (앨리스가 입력)
“앨리스가 밥한테 $100를 빌려줬습니다.” + 앨리스의 전자서명 (밥이 입력)
“앨리스가 밥한테 $100를 빌려줬습니다.” + 앨리스의 전자서명 (찰리가 입력)
“앨리스가 밥한테 $100를 빌려줬습니다.” + 앨리스의 전자서명 (여러분이 입력)
이런 식으로 누구나 다 앨리스 흉내를 내면서 앨리스가 처음으로 공용 장부에 업데이트한 특정 거래 기록을 무한적으로 공용 장부에 업데이트할 수 있을 겁니다.
이 문제를 방지하기 위해서, 각 거래 기록마다 ‘특정한 ID’가 붙게 됩니다. 위의 그림에 나와있는 것처럼, 5개의 기록들은 모두 똑같은 내용이지만 ‘0, 1, 2, 3, 4’처럼 특정한 ID가 붙기 때문에 5개의 기록들은 모두 완전히 다.른. 거래 기록들입니다. 모두 다른 거래 기록들이기 때문에 전자서명 또한 완전히 다른 전자서명이 되죠! 그렇기 때문에 앨리스가 처음에 공용 장부에 입력한 “앨리스가 밥한테 $100를 빌려줬습니다.”과 앨리스의 고유한 전자서명을 복사+붙이기 하는 것은 불가능합니다.
실생활에서 예시를 들어보겠습니다. 완벽하게 똑같이 생긴 아이폰이더라도 안에 고유 제품번호가 다 다르기 때문에 여러분이 가지고 있는 폰은 제가 가지고 있는 아이폰과 완전히 다른 아이폰입니다. 그러므로 저의 아이폰과 똑같이 생기고 똑같은 기능을 하는 아이폰을 따라 만들 수 있을지는 몰라도 저의 아이폰과 완벽하게 동.일.한. 아이폰을 만드는 것은 불가능하겠죠? 저의 아이폰은 세계에서 유일하니까요 ^^
여태까지의 문제점들과 해결책들을 종합해서 장부를 효과적으로 이용하기 위한 새로운 규칙 (프로토콜)을 추가해보도록 하겠습니다:
• 인증된 전자서명이 된 거래 기록들만이 유효한 거래 기록들이다.
인터넷의 원리 시리즈를 읽고 오신 분들이라면 이해가 빠르시겠지만 굉장히 테크니컬한 내용들이 많아서 쉽게 이해하기 어려운 부분들이 있을 거라고 생각합니다. 최대한 쉽게 풀어서 설명드리고 싶은데 도움이 될 지 모르겠네요 ^^;; 더 노력하도록 하겠습니다 ㅎㅎ
다음 포스팅에서 뵐게요 !
어흥 ~
인터넷의 원리 PART.1: 인터넷이란 무엇인가?
@kim066/part-1
인터넷의 원리 PART 2: 와이어, 케이블, 그리고 와이파이 (Wifi) - 1
@kim066/part-2-wifi-1
인터넷의 원리 PART 3: 와이어, 케이블, 그리고 와이파이 (Wifi) - 2
@kim066/part-3-wifi-3
인터넷의 원리 PART 4: IP 주소 & DNS – (1)
@kim066/part-4-ip-and-dns-1
인터넷의 원리 PART 5: IP 주소 & DNS – (2)
@kim066/part-5-ip-and-dns-2
인터넷의 원리 PART 6: IP 주소 & DNS – (3)
@kim066/part-6-ip-and-dns-3
인터넷의 원리 PART 7: 패킷, 라우팅, 그리고 신뢰성 – (1)
@kim066/part-7-1
인터넷의 원리 PART 8: 패킷, 라우팅, 그리고 신뢰성 – (2)
@kim066/part-8-2
인터넷의 원리 PART 9: TCP/IP와 UDP/IP (번외편)
@kim066/part-9-tcp-ip-udp-ip
인터넷의 원리 PART 10: 암호화와 공개 키– (1)
@kim066/part-9-1
인터넷의 원리 PART 11: 암호화와 공개 키– (2)
@kim066/part-11-2
인터넷의 원리 PART 12: 사이버 보안과 사이버 범죄 – (1)
@kim066/part-12-1
비트코인의 원리 PART 1: 가상화폐란?
@kim066/4urqt9-part-1