독자들의 편의를 위해 글 맨 하단에 세 줄 요약 컨텐츠를 추가했습니다.
길지만 꼭 읽어보시고 UPVOTE 부탁드릴게요!
0.
안녕하세요.
저는 포항공과대학교 컴퓨터공학과에 재학중인 학생입니다.
전공이 이 쪽이다 보니 주로 블록체인의 기술적인 부분, 구현사항 등에 관심이 많습니다.
이번 칼럼에서는 Porosity라는 이더리움 디컴파일러에 대해 깊이 분석해보려 합니다.
우선 '디컴파일러'라는 이름이 생소한 분들께 이에 대해 설명해보고, 이 것이 이더리움 시장을 어떻게 바꿀지 알아보겠습니다.
작성자 : 이용우 (CoinPresso 필진 / dragonrain96@postech.ac.kr)
작성자 : 정동건 (CoinPresso 대표 / ceo.jdg@gmail.com)
1. 디컴파일러와 컴파일러란?
디컴파일러(decompiler)가 무엇인지 알기 위해서는 컴파일러(compiler)가 무엇인지 알아야 합니다.
컴파일러는 한 프로그래밍 언어를 다른 프로그래밍 언어로 변환하여 주는 프로그램입니다.
일종의 컴퓨터 언어간 번역기라고 생각할 수 있는데요.
주로 사람이 작성할 수 있는 고수준 언어에서 '컴퓨터스러운' 저수준 언어로 변환해줍니다.
이 과정에서 컴퓨터가 연산을 쾌적하게 할 수 있도록 최적화도 해주는 것이 컴파일러의 역할입니다.
실제로 컴퓨터에서 컴파일러가 돌아가는 장면을 보여드리겠습니다.
1-1. C언어 컴파일러
첫 예시로 사용된 언어는 C언어입니다.
비교적 사람이 읽기 쉬운, 가장 유명한 고수준 언어 중 하나죠.
(1+5, 즉 결과값이 6이 나오는 연산을 수행하는 프로그램입니다)
이젠 컴파일러의 변환을 통해 컴퓨터가 알아듣기 쉽게 저수준 언어로 바꿔둔 결과물을 보겠습니다.
이제 전문 프로그래머가 아니라면 알아보기 힘들게 바뀌었습니다.
1-2. C# 컴파일러와 디컴파일러
C언어는 고수준 언어중에서 아주 고수준이라고 불리지는 않습니다.
시간을 거듭하며 프로그래밍 언어는 사람이 좀 더 작성하기 편하게 바뀌었습니다.
이제는 C#이라는 언어에서의 예시를 보겠습니다.
(1부터 10까지의 수 중, 짝수만 추려낸 뒤, 크기가 작아지는 순으로 배치하고, 이 것의 제곱값을 보여주는 프로그램입니다)
(출력결과는 100, 64, 36, 16, 4로 나타나죠)
컴파일한 모습은 생략하고, 이 컴파일된 내용을 다시 사람이 알아볼 수 있게 만든 디컴파일러의 작업과정을 보겠습니다.
이 문단의 첫 사진을 '컴파일'한 결과물을 다시 '디컴파일'한 결과물입니다.
한 번 바꿨던 것을 다시 되돌리니 원본이 그대로 나오지는 않습니다.
하지만, 프로그래밍 지식이 있는 사람이라면 어떤 코드인지 이해할 수 있죠.
디컴파일러는, 컴파일러가 알아보기 힘들게 컴퓨터 언어로 번역해 둔 것을, 사람이 그나마 쉽게 인지할 수 있는 언어로 바꿔줍니다.
물론, 전문가가 아니라면 이해가 힘들겠지만, 최소한 알아들을 수 있게 바꿔준다는 점에서 큰 의미가 있죠.
2. 이더리움 디컴파일러 Porosity
그렇다면 도대체 왜 이더리움에서 decompiler가 필요한 것일까요?
이더리움의 가장 큰 가치는 스마트 컨트랙트입니다.
스마트 컨트랙트는 이더리움 블록체인상에 프로그래밍 언어로 '계약서'를 올려둘 수 있는 기능이죠.
그런데 이 계약서가 아주 읽기 어렵게 써있다면 신뢰할 수 있을까요?
차후 스마트 컨트랙트 시장이 커지면, 컴파일 된 스마트 컨트랙트의 언어를 다른 프로그래머가 검증할 수 있어야 합니다.
2-1. Porosity 디컴파일러의 작업 결과물
이 것은 Solitidy라는 툴을 이용해 작성되었습니다.
간단한 송금을 처리해주는 스마트 컨트랙트입니다.
컴파일된 결과입니다.
아주 알아보기 힘들고, 지식이 있더라도 읽고싶지 않아지는 외관입니다.
여기서 스마트 컨트랙트에 있는 취약점(해킹 위험 등)을 찾아내는 것은 어렵습니다.
Porosity는 이를 알아보기 쉽게 바꿔주고, 취약점까지 찾아 지적해줍니다.
모양은 달라졌지만, 의미가 동일한 코드입니다.
알아보기 쉬운 것은 물론이고, 12번째 줄에서 보안 취약점까지 발견했습니다.
이 취약점은 이더리움 클래식을 만들어낸 DAO 해킹사태에서의 당시 splitDAO의 취약점과 비슷한 취약점입니다.
정확히 어떻게 취약점이 생기는지 관심있으시다면 다음의 링크를 참조하시기 바랍니다.
http://vessenes.com/more-ethereum-attacks-race-to-empty-is-the-real-deal/
3. Porosity의 가치
스마트 컨트랙트 언어를 공부하지 않은 일반 사용자에게는 Porosity의 가치가 크게 다가오지 않을 수 있습니다.
하지만 Porosity는 코드의 취약점을 보완해줘 튼튼한 스마트 컨트랙트 작성을 돕습니다.
뿐만 아니라, 컴파일되어 알아볼 수 없는 스마트 컨트랙트의 내용 검증을 도와주죠.
따라서 악의를 가진 개발자가 자신에게 유리하도록 코드를 통해 타인을 기만하는 것을 어렵게 만듭니다.
3-1. Porosity로 살펴본 이더리움의 미래
이더리움은 최근 개발자에게 매력적인 플랫폼으로 다가오기 위해 변화하고 있습니다.
다양한 언어(Golang, Python 등)를 통해 스마트 컨트랙트를 작성할 수 있게 하기도 했죠.
Porosity도 이 생태계 구축의 한 부분입니다.
더욱 안전한 dApp을 만들어 이더리움이 사용될 수 있는 범위를 넓히는 것이죠.
이더리움 생태계의 핵심인, 프로그래밍 언어로 작성된 계약서의 신뢰성이 강화된 것이죠.
3-2. 음모론?
그나저나 JP Morgan의 행보가 특이합니다.
Porosity의 개발에 깊이 관여하다니. (세부 개입 사항은 아래 글에서 확인할 수 있습니다)
https://www.coindesk.com/first-ethereum-decompiler-launches-jp-morgan-quorum-integration/
가장 거대한 기성 은행 중 한 곳이 이더리움 스마트 컨트랙트 확산을 위해 기여한다니.
Zcash에도 깊이 관여해있고, 아래 글과 같은 루머도 돌고 있습니다.
https://steemit.com/kr/@chocomuscake/5
이들의 움직임에 주목해야겠습니다.
좋은 글입니다.
업보트 누르고 가요
좋은 정보 감사합니다
이더리움의 장래 가치에 긍정적인 영향을 미칠 수 있을것 같다는 생각이 드네요. 좋은 글 감사합니다.
풀보팅 하고 갑니다. ^^ 잘 보았습니다.
블록체인의 확장성과 미래를 굉장히 긍정적으로 써낸 골드만 삭스 리포트를 본 기억이 납니다(작년).
비단 JP Morgan 뿐만 아니라 골드만삭스나 나머지 대형 IB(Investment Bank)들도 블록체인 기술에 제법 투자를 하고 있습니다.
여러가지 이유들이 있겠지만, 장외 채권시장 등의 거래시에 IB들이 블록체인 컨소시엄에 참여할 예정이기도 하거든요. 원장DB의 중앙집중화에 대한 서비스 및 보안에 대해서도 블록체인을 대안으로 생각하는 사람들이 점점 늘어나고 있어요.
국내에서도 금융투자협회와 증권사들이 블록체인을 어떻게 적용할 지 TF를 만들어서 교육도 하고, 의견도 나누고 있거든요..
잘봤습니다.
중요한 이슈긴 하네요~~ 블록체인비즈니연구회 오픈채팅방에서 뵌 것 같습니다. 반갑습니다~~ 자주 뵈어여~
KR 일일 Top10 랭크 2위에 랭크된 것을 진심으로 축하합니다.