데이터 베이이스는 체계화된 데이터를 저장, 조작 관리하는 방법을 의미하며 사용하는 방법에 따라, 계층형, 관계형, NoSQL 데이터 베이스등이 있습니다. 비트코인에서는 데이터를 저장하기 위한 수단으로 기존에 사용되어왔던 데이터 베이스 기술 방식이 아닌 블록체인 기술을 활용하였습니다.
중앙 집중형 시스템에서 자주 사용되어왔던 데이터베이스는 수정, 삭제하기 매우 쉬웠기 때문에 일부 권한을 가지고 있는 사용자들만이 데이터를 관리해야했습니다. 하지만 탈 중앙화된 금융 시스템을 만들기 위해서는 누구나 네트워크에 참여할 수 있으며, 모든 참여자가 데이터 베이스에 접근할 수 있고 데이터를 기록할 권한을 가지고 있어야 합니다. 그렇기때문에 기존의 중앙 집중형 시스템에서 자주 사용되어왔던 데이터 베이스의 형태가 아닌 새로운 데이터 베이스가 필요했습니다.
* 관계형 데이터 베이스 : 키(key)와 값(value)들의 간단한 관계를 테이블화 시킨 매우 간단한 언칙의 전산 정보 데이터베이스다. 1970년 에드거 F. 커드가 제안한 관계형 모델에 기초하는 디지털 데이터베이스이다.
* NoSQL 데이터 베이스 : 전통적인 관계형 데이터베이스 보다 덜 제한적인 일관성 모델을 이용하는 데이터의 저장 및 검색을 위한 메커니즘을 제공하며, 단순 검색 및 추가 작업을 위한 매우 최적화된 키 값 저장 공간으로 높은 성능 이익을 내는 것이 목적이다. NoSQL 데이터베이스는 빅데이터와 실시간 웹 애플리케이션의 상업적 이용에 널리 쓰이고 있다.
블록체인 기술은 분산 컴퓨팅 기술 기반의 데이터 위변조 방지 기술로써, 데이터를 '블록' 단위로 관리하며, 시간의 흐름순으로 블록을 체인(링크드 리스트)형태로 연결한 분산되고, 독립적인 공통 장부(원장, Ledger) 관리 기술입니다. 블록체인은 별도의 중앙 서버 없이 P2P 네트워크 환경에서의 비가역적 공유 데이터 베이스 역할을 수행합니다.
블록체인 기술은 분산되고, 독립적인 데이터 관리를 가능하도록 도와주며, 네트워크에 연결된 모든 사용자들이 블록체인 데이터의 변경 결과를 열람할수 있으며, 합의 알고리즘에 의해 새롭게 추가되는 블록의 검증이 이루어지고, 검증된 블록만을 기존의 블록체인에 연결하여 데이터 위변조를 방지할수 있게됩니다. 이러한 블록체인 기술을 통해 중앙권력 없이 순수하게 사용자들로만 이루어진, 그러나 조작이나 통제가 불가능한 금융 시스템을 만들수 있게되었습니다.
* 비가역성 : 변화를 일으킨 물질이 본디의 상태로 돌아오지 아니하는 성질, 즉 블록체인에서 비가역적 공유 데이터베이스의 의미는 이미 저장된 데이터를 수정하거나, 삭제할 수 없는 상태를 의미함.
탈 중앙화된 금융시스템을 꿈꾸던 비트코인은 앞서 언급한 기존의 데이터 베이스 시스템이 아닌 블록체인 기술을 도입하여 탈 중앙화된 금융 시스템을 만들수 있게 되었습니다. 비트코인 시스템에 적용된 블록체인의 '블록'은 평균 10분에 한번식 생성될 수 있도록 설게되었으며, 블록의 크기는 1MB로 약 1800 - 4200건의 거래내역을 담을 수 있습니다. 비트코인의 블록체인에 저장되는 '블록'은 크게 블록 헤더정보와, 블록 바디정보로 구분할수있습니다.
블록 헤더 : 블록 헤더는 전반적인 블록의 상태 정보를 나타내며, 버전(Version), 이전 블록 해시(Previous block hash), 머클 루트(Merkle Root), 타임(Time), 난이도 목표(bits), 논스(Nonce) 정보로 구성됩니다.
블록 바디 : 블록 바디에는 다수의 거래 정보(트랜잭션)로 구성됩니다.
* 비트코인에 적용된 블록체인 기술에 대한 이해와, 블록 구성요소의 역할에 대한 명확한 이해를 위해서는 먼저 '해시 함수'에 대한 개념정리가 필요합니다.
해시함수는 메시지의 오류나 변조를 쉽고 빠르게 탐지할 수 있습니다. 또한, 데이터의 무결성을 제공하기 위해 사용되며, 매우 빠른 데이터 검색을 위한 소프트웨어에서도 널리 사용됩니다. 비트코인에서는 SHA-256 방식의 해시 함수를 사용하고 있습니다. 해시함수는 아래와 같은 특징을 가지고 있습니다.
1번의 특징인 어떤 입력 값에도 항상 고정된 길이의 해시값을 출력하는 특징에 대해서 먼저 살펴보겠습니다. 어떠한 데이터를 입력하여도 항상 고정된 256bit의 결과 값을 출력한다는 의미이며, 이는 방대한 데이터를 256bit로 축약할 수 있다는 의미가됩니다. 2번의 특징인 입력 값의 아주 일부만 변경되어도 전혀 다른 결과 값을 출력한다는 특징을 활용하여 입력값의 위변조를 쉽고 빠르게 확인할 수 있습니다.
SHA 256 해시 함수는 입력 값의 데이터가 아무리 길어도 항상 고정된 길이의 256bit의 결과 값으로 변환해주며, 입력된 결과 값 중 일부만 변경되어도 전혀 다른 결과 값을 출력하기 때문에 256bit의 데이터 비교만을 통해 데이터의 위변조 사실을 알아낼 수 있습니다. 즉 메시지의 오류나 변조를 아주 빠르게 탐지할 수 있는 무결성을 제공할 수 있다는 의미입니다.
* 만약 책 한 권의 데이터를 한 글자씩 비교하여 변조되었는지 확인한다면 아주 오랜 시간이 소요될 것입니다, 하지만 해시함수의 2가지 특징으로 인하여 방대한 데이터를 256bit로 축약하고, 축약된 데이터가 서로 같은지 비교할 경우 아주 빠르게 원본 데이터의 변조 사실을 탐지할 수 있게 됩니다.
대다수의 웹사이트에서는 데이터 저장 시 보안의 요소로 해시함수를 많이 사용하고 있습니다. 그 이유는 해시 함수의 3번째 특징인 출력된 결과 값을 토대로 입력 값을 유추할 수 없다는 점, 4번째 특징인 입력 값은 항상 동일한 해시 값을 출력한다는 점을 활용하여 데이터 암호화에 많이 사용되고 있습니다.
대다수의 웹사이트에서는 데이터 저장 시 보안의 요소로 해시함수를 많이 사용하고 있습니다. 그 이유는 해시 함수의 3번째 특징인 출력된 결과 값을 토대로 입력 값을 유추할 수 없다는 점, 4번째 특징인 입력 값은 항상 동일한 해시 값을 출력한다는 점을 활용하여 데이터 암호화에 많이 사용되고 있습니다.
예를 들어 우리가 어떤 특정 사이트에 회원 가입을 했다고 가정해보겠습니다. 가입 시 입력한 패스워드가 데이터 베이스에 그대로 저장된다면 관리자들은 사용자의 패스워드 정보를 확인할 수 있고, 해킹을 당했을 경우에는 모든 패스워드 정보를 분실할 수 있습니다. 그렇기 때문에 패스워드는 반드시 암호화되어 데이터 베이스에 저장되어야 합니다. 또한 암호화 방식에 규칙이 있고 관리자가 알 수 있다면 해커 또한 해킹을 통해 암호화 방식을 탈취하여 데이터 베이스에 저장된 암호화된 패스워드를 해독할 수 있다는 의미가 됩니다. 그렇기 때문에 암호화 방식은 그 누구도 알 수 없는 방식으로 데이터 베이스에 저장되어야 합니다.
웹 사이트 가입 시 패스워드를 abc
라고 입력했고, 입력 값을 해시함수를 통해 해시 결과 값으로 0xfx...
와 같은
256bit의 해시 결과 값을 데이터 베이스의 패스워드로 저장하게된다면, 해시함수의 특징중 하나인 결과 값을 토대로 입력 값을 유추할 수 없다는 특징으로인하여
관리자는 저장된 패스워드 0xfx...
을 토대로 사용자가 어떤 입력 값을 넣었는지 알 방법이 없으며, 해커 또한 탈취한 패스워드의 해시 결과
값을 토대로 사용자가 입력한 원본 패스워드를 알 수 없게 됩니다.
또한, 동일한 입력값엔 항상 같은 결과 값을 출력하는 해시 함수의 특징을 활용하여 사용자는 웹사이트 로그인 시 로그인 창에 자신의 패스워드를 입력하고, 로그인을 요청하게됩니다.
사용자가 로그인을 위해 로그인 창에 자신의 원본 패스워드 데이터를 입력하고, 로그인을 요청하게 되면 시스템 내부에서는 입력한 패스워드를 해시 함수를 통해 해시 결과 값으로 변경 후 데이터 베이스에 저장된 패스워드와 해시 결과 값이 같은지 비교하여 같을 경우 로그인을 정상적으로 처리하게 됩니다. (동일한 입력 값엔 항상 같은 해시 결과 값을 출력하는 특징때문에 사용자가 동일한 패스워드를 입력하게되면 항상 같은 해시 결과 값이 출력됩니다.)
* 탈 중앙화된 금융 시스템을 유지하기 위해서는 모든 네트워크 구성원들에게 분산되고, 독립적인, 데이터 저장 기술이 필요했으며, 비트코인 네트워크는 블록체인 기술을 활용하여 분산되고, 독립적인 데이터 관리가 가능해졌습니다.
* 해시 함수의 특징을 활용하여 블록의 위변조를 쉽고 빠르게 확인할 수 있었으며, 다양한 암호학 알고리즘, 작업 증명 방식의 합의 알고리즘 등을 통하여 네트워크의 신뢰도를 향상시킬 수 있었습니다.