1.
블록체인이 가지는 가장 큰 핵심 가치는 탈중앙화 일 것이다. 어느 한곳에 통제 받지 않고 네트워크를 운영하면서 신뢰성과 투명성을 보장한다는것 것인데 이것은 기술적으로 매우 어려운 부분이다. 아직 완벽한 탈중앙화 된 블록체인을 본적이 없는데 그 이유는 다음과 같다.
1. 블록체인의 크기는 시간이 갈수록 점점 커진다. 현재 비트코인만해도 150기가 이상의 저장공간이 있어야 풀노드 유지가 가능하다.
2. 데이터를 저장하는 것도 일종의 비용이며 크기가 커질수록 비용이 많이 발생한다.
3. 따라서 단순 사용자들은 라이트노드를 사용하게 되는데 라이트 노드는 풀노드로 부터 거래의 무결성을 확인한다.
4. 즉 라이트노드는 풀노드의 의존하게 되는데 이건 기존 서버 클라이언트 모델과 매우 유사하다.
조금만 관점을 다르게 해서 블록체인 네트워크를 들여다 보면 서버가 여러대 있고 클라언트도 여러대 있는데 클라이언트간 데이터 거래를 위해 서버로 부터 인증 혹은 검증을 받는 구조와 유사하다. 단지 서버의 운영의 주체가 누구나 될수 있다 정도가 차별점이라 볼수 있다.
2.
완벽한 탈중앙화를 위해서 필요한 점들을 생각해보면
- 모든 노드가 풀노드여야 한다,(그래야 거래에 대한 검증이 가능함으로)
- 모든 노드는 실시간으로 동기화 되어야 한다.
- 모든 노드는 체인의 기록된 정보를 신뢰할 수 있어여 한다.
- 체인의 기록된 정보는 변조되지 않았음을 확인할수 있어야 한다.
지금은 모든 노드가 거래에 대한 내역을 검증하지 않는다. 필요한 노드에 대한 검증만 진행하고 검증을 진행하고 새로운 블록을 만들면 보상을 주고 보상을 많이 받은 노드를 신뢰할수 있는 노드로 본다. 사실 이건 매우 위험한 방법이다. PoW 나 PoS 같은 방법이 인간성(?)에 의존하여 일을 많이 하거나 많은 보상을 가진 노드는 믿을수 있다 라는 전제로 구현된 알고리즘인데 늘 예외는 있는 법. 조금만 뉴스를 검색하면 아무 생각 없이 돈 뿌리는 사람에 대한 기사들을 쉽게 찾아 볼 수 있다. 블록 체인 네트워크에서도 작정하고 블록체인 네트워크를 망치려는 부자(?) 노드들이 발생하지 않을 이유가 없다.
3.
나의 목표는 탈중앙화 환경에서의 프라이버시 보호다. 일단 앞서 언급한 탈중앙화 부터 구현이 가능할지가 모르겠는데, 앞서 언급한 모든 노드가 풀 노드가 되는 블록체인 네트워크가 일단 필요하다. 아주 작은 크기를 가지는 블록을 설계 해야 하고 거기엔 최대한 많은 데이터를 넣어야 한다. CA가 없이 상호 인증을 위해서 블록체인을 활용하는 방법을 고민하고 있는데 일단 우선적인 요구 사항은 아래와 같다.
- 인가된 사용자만 데이터를 열람할 수 있다.
- 인가된 사용자인지 확인할 수 있어야 한다.
- 인가가 취소된 사용자는 데이터를 열함할 수 없어야 한다.
- 사용자에 거래한 데이터 및 거래 내역에 대한 프라이버시를 보장할 수 있어야 한다.
우선적으로 암호화된 사용자 정보 set 모든 사용자가 가지고 있고, 사용자가 상대방에게 특정정보를 전달하면 상대방은 특정함수에 특정정보를 집어 넣고 특정함수를 암호화된 사용자 정보로 부터 인가된 사용자인지 아닌지 여부를 판단할 수 있는 구조가 있으면 어떨까 한다. 이 암호화 사용자 정보 set을 어떻게 생성하고 업데이트를 고민해봐야 할필요가 있다.
4.
정리하다가 문득든 의문점중에 하나인데 DB의 공간 절약을 위해서 테이블 압축기능이 대부분의 DB 어플리케이션에 포함되어 있다. 암호화 DB의 경우 이런 압축 기능이 사용이 가능한지 의문이다. 이론적으로 암호화된 데이터는 엔트로피가 높은 데이터라 압축할 경우 데이터의 크기가 오히려 증가할 가능성이 있다. 엔트로피가 높은 데이터를 데이터 손실없이 압축하는것은 매우 어려운 문제이다. 암호화 된 DB를 검색할 수 있어도 압축할 수 있는지는 조사가 필요하다.
'기술' 카테고리의 다른 글
블록체인 환경에서 난수 생성 - 1 (0) | 2019.04.22 |
---|---|
RANDAO (0) | 2019.04.15 |
블록체인에서의 난수 생성 (0) | 2019.03.28 |
탈중앙화(Decentralization)에 관하여 (0) | 2019.02.25 |
Postgresql 마이그레이션도구 Ora2Pg 소개 (0) | 2012.07.02 |