글 출처 : http://conanoc.egloos.com/6506494
대표적인 기업용 블록체인 시스템인 하이퍼레저 패브릭에서 블록체인의 변조는 가능한지, 얼마나 신뢰할만한지, 그리고 이것이 과연 블록체인 시스템이기는 한 것인지 검토해보자.
하이퍼레저 패브릭은 허가된 특정 기업들만 참여할 수 있는 시스템을 가정한다. 참여 기업들은 정해져있고 검증된 기업들이지만 서로를 신뢰할 필요는 없다. 즉, 누군가 조작을 시도할 수도 있고 해킹을 당할 수도 있을 것이다. 이들은 블록체인에 원장을 공유하고 사전에 검증된 스마트 컨트렉트 코드를 공유하고 이걸 이용해 데이타를 변경한다. 기업들은 각자 한 개 이상의 peer node를 구동해서 블록체인을 유지하고, 블록의 생성은 orderer 라는 node를 통해서만 이뤄진다. 블록체인을 활용하는 client는 peer node를 통해 스마트 컨트렉트를 실행하지만 orderer에 직접 트렌젝션 생성을 요청해야 하는 등 좀더 다양한 작업을 해야 하고 client 역시 사전 등록을 거쳐야만 한다.
우선 블록 생성을 orderer 라는 별도의 node가 한다는 점을 보자. orderer를 운영하는 기업을 하나 혹은 여러 개 정해야 하지만 이건 신뢰성에 문제가 되지 않는다. 비트코인이나 이더리움에서 블럭 생성은 아무나 할 수 있다. 누가 하건 문제가 되지 않는데 그 이유는 블럭의 생성은 새로 추가되는 블럭을 만들 뿐 기존의 블럭을 바꾸는 것은 아니라는 점 (엄밀하게는 그렇지 않을수 있지만 여기선 그냥 넘어가자), 블럭에 포함되는 트렌젝션들은 모두 사이닝이 되어 있기 때문에 변조가 불가능하다는 점 (블록의 변조와 트렌젝션의 변조를 혼동하지 않기 바람) 때문이다. 다만, orderer의 문제는 시스템 안정성에 영향을 줄 수 있다. orderer가 다운되면 블록 생성이 멈추기 때문에 시스템 자체가 동작을 못하게 될 것이고, orderer 운영을 특정 기업이 독점해서 다른 기업의 트랜젝션만 거부한다던가 하는 우려를 만들 수도 있을 것이다.
orderer는 블록체인을 가지고 있지 않고, 기존의 블록들을 포함한 블록체인은 peer 들만이 가지고 있다. 각 peer 들이 가지고 있는 블록체인은 변조가 불가능한가? 앞 글에서 하나의 노드가 가지고 있는 블록체인은 얼마든지 변조가 될 수 있다고 언급했듯이 당연히 변조가 가능하다. 하나의 peer가 가지고 있는 블록체인이 변조된 경우 이 변조를 검출하거나 해당 peer를 네트워크에서 제외하는 매커니즘은 있을까? 변조의 검출은 부분적으로 가능하고, 문제의 peer를 네트워크에서 제외하는 메커니즘은 없다. 일단 패브릭에서 블록체인의 변조 여부는 검출되지 않는다. 다만 world state DB가 변조된 경우 이 peer의 체인코드 실행결과와 다른 peer의 체인코드 실행결과가 달라질 수 있어서 endorsement 단계에서 문제가 발견될 수는 있다. endorsement 정책이 한 개 peer의 endorsement만 요구하는 경우에는 문제가 발견되지 않을 것이다. 문제가 발견된 이후의 대책은 이 시스템 내에는 없다. 관련 기업들이 조사하고 협의해서 문제를 해결해야 한다.
패브릭에서 world state DB와 블록체인의 관계를 살펴보자. 블록체인에는 트랜젝션들의 이력이 모두 포함되어 있고, 이 트랜젝션들을 처음부터 순차적으로 실행시키면 world state DB의 현재 상태가 만들어진다. 체인코드를 실행할때는 현재의 world state만 참고하지 블록체인은 참고하지 않는다. 블록체인이 데이타 변조를 막는 마법을 부리지 못한다면 패브릭에서 블록체인은 단순한 로그파일에 지나지 않는다. 해커 역시 굳이 블록체인을 변조할 필요없이 world state DB만 변조해도 소기의 목적을 달성할 수 있을 것이다.
블록체인이 데이타 변조를 막지 못하고, 블록체인의 역할이 로그 데이타일 뿐 없어도 그만이라면 하이퍼레저 패브릭을 블록체인 시스템이라고 부를 수 있을 것인지 의문이다. 패브릭은 immutable ledger 라기 보다는 shared ledger 라는 관점으로 보아야 할 것 같다. 분산 DBMS 제품들이 있기는 하지만 보통은 하나의 기업에서 사용하는 것이지 여러 기업에서 같이 사용할 수 있는건 아니다. 데이타 변경을 임의로 하지 않고 체인코드라는 사전에 공유된 코드를 통해서만 하도록 제한하는 것 역시 유용할 지도 모른다. 체인코드를 등록하는 것도 일종의 트랜젝션으로 관리되고 변경 이력은 로그로 남는다. 그래서인지 모르지만 기업용 블록체인 진영에서는 블록체인이라는 용어보다는 DLT(Distributed Ledger Technology) 라는 용어를 선호하는 듯 하다. 블록체인 자료 구조를 아예 제거하고 단순히 블록 로그만 유지해도 달라질건 없는데다가 사이닝된 블록 로그를 유지하거나 혹은 world state만 사이닝해서 로깅해둬도 지금 보다 더 안전한 시스템이 될 수 있겠지만 그럴 일은 없을 것 같다. 블록체인이 아주 중요한 마케팅 용어가 됐으니 말이다.
물론 기업용 블록체인 시스템은 계속 발전 중이다. 퍼블릭 블록체인의 구성을 좀더 잘 벤치마킹하고 개선해서 기존 블록체인 시스템의 장점은 살리고 단점은 개선하는 시스템으로 발전 할 수도 있을 것이다. 그러려면 블록체인에 대한 오해와 한계를 염두에 두어야 할 것이다.