어제 잠깐 이더리움의 옐로페이퍼를 보았다.
https://docs.google.com/viewer?url=http://gavwood.com/Paper.pdf
논문이고, 익숙하지 않은 부호들이 있어서, 처음에는 읽기가 좀 어려웠지만,
그래도 건성으로 듬성듬성 읽어보니, 아주 좋은 자료였다.
그런데, 이 자료를 읽어보면서, 의문이 생겼다.
(물론 구체적인 기술을 본인이 모르니 아래의 얘기가 다소 공상적일 수는 있다.)
먼저, 서버-클라이언트의 인터넷을 보자,
만약 도스, 디도스 공격이 발생을 하면 이를 막는 수단은 서버 측에서 이들 공격을 판단하여 이들을 선택적으로 차단하는 방법이 있다.
또한 서버의 계산능력이 충분하다면 도스, 디도스 공격을 막을 수 있을 것이다.
예로 평균적으로 서버의 계산능력의 절반만 사용하는 서버 시스템을 갖추고 있다면, 도스, 디도스 공격이 여유분의 계산능력으로 대응이 가능하다면, 이런 공격은 효과가 없을 것이다. 하지만, 이것을 비용부담이 크다.
하지만, 요즘은 클라우드를 사용한다면, 서버의 계산 능력을 능동적으로 조절할 수 있기 때문에 대부분의 도스, 디도스 공격을 방어할 수 있는 것 같다.
------
이제 이더리움을 생각해보자..
이더리움은 자체 네트워크를 보호하기 위해서 개스비를 요구하고 있다.
이는 인터넷 (서버-클라이언트) 시스템에는 없는 기능이다.
어제 이더리움의 실행코드를 실행할 때 꼭 개스비가 필요할까라는 생각을 해보았다.
물론 개스비가 필요한 이유는 도스, 디도스 공격에서 자체 네트워크를 보호하기 위해서이다.
그렇다면, 보는 점을 달리해서, 이더리움을 보자.
노드 하나가 꼭 블럭체인의 전체를 만들어야 할 이유가 있을까?
물론 비트코인의 블럭체인을 이더리움이 이어받았기 때문에 이런 것이 유지되는 것일 수 있다.
즉, 다수의 노드가 블럭을 생성할 노드를 합의하여 매번 다른 하나의 노드가 블럭을 생성하고, 이때 컨트랙트는 다수의 노드가 나누어서 계산을 하고 이를 블럭을 생성하는 노드에게 전달해주는 방법도 생각해볼 수 있다.
이것의 원리는 도스 공격에서 서버의 계산 능력이 부족하면, 서버의 계산 능력을 늘려주면 도스 공격을 무력화 할 수 있는 원리와 같다.
이더리움에서 아무리 많은 컨트렉트가 동시에 실행이 되더라도, 수많은 노드들이 서로 계산을 나누어 계산을 한다면, 도스 공격에 대한 방어를 할 수 있을 것이다.
물론 채굴과 관계가 있기 때문에, 이더의 가격이 낮으면, 적은 노드가 채굴을 하고, 그러면 도스 공격에 취약할 수는 있다..
컨트랙트 실행하다가 개스비가 모자라면 out of gas가 발생을 하고, 처음의 상태로 되돌리는 것을 보고 개스비라는 것이 네트워크에 좋은 점도 나쁜 점도 있다고 생각했다.
물론 미래에는 컨트렉트를 실행하기 전에 도스, 디도스 공격을 파악하여 개스비를 누진적, 또는 차등적으로 부과함으로서, 이런 공격을 누그러트릴 수는 있을 것이다.
하지만, 현재 인터넷을 사용하는 것 자체는 무료이므로, 이더리움 네트워크를 사용하는 것 자체에 게스비를 부과하는 것은 일종의 문턱 역할을 하는 것이 아닌가를 생각을 해보았다.
-------
합의 알고리즘을 만들 때 꼭 노드들이 경쟁을 할 필요는 없죠.
서로 일을 분담하고, 서로 검증하면서 하는 방법이 이더리움의 컨트랙트를 다룰 때 더 유리할 수도 있습니다.
- '다른 노드에 의해 계산된 값을 신뢰할 수 있는가'에 대한 문제가 발생되기에 불가능하다고 생각됩니다.