KR102316620B1 - 관계형 데이터베이스들을 이용한 블록체인 시스템 및 블록체인 관리 방법 - Google Patents
관계형 데이터베이스들을 이용한 블록체인 시스템 및 블록체인 관리 방법 Download PDFInfo
- Publication number
- KR102316620B1 KR102316620B1 KR1020200048880A KR20200048880A KR102316620B1 KR 102316620 B1 KR102316620 B1 KR 102316620B1 KR 1020200048880 A KR1020200048880 A KR 1020200048880A KR 20200048880 A KR20200048880 A KR 20200048880A KR 102316620 B1 KR102316620 B1 KR 102316620B1
- Authority
- KR
- South Korea
- Prior art keywords
- block chain
- blockchain
- control device
- user
- relational database
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/221—Column-oriented storage; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0816—Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
- H04L9/0819—Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s)
- H04L9/0825—Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s) using asymmetric-key encryption or public key infrastructure [PKI], e.g. key signature or public key certificates
-
- H04L2209/38—
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Health & Medical Sciences (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
관계형 데이터베이스들을 이용한 블록체인 시스템은 클라이언트 장치의 요청에 따라 관계형 데이터베이스 장치가 블록체인의 노드로 동작하도록 제어하는 제1 제어 장치, 상기 제1 제어 장치에 연결되고, 상기 제1 제어 장치의 제어를 받는 제1 관계형 데이터베이스 장치, 상기 제1 제어 장치와 통신하여 자신이 제어하는 관계형 데이터베이스 장치가 블록체인 노드로 동작하도록 제어하는 제어 장치들 및 상기 제어 장치들 각각에 연결되고, 상기 제어 장치들 각각의 제어를 받는 복수의 관계형 데이터베이스 장치들을 포함한다.
Description
이하 설명하는 기술은 종래 관계형 데이터베이스들을 이용하여 블록체인을 제공하는 기법에 관한 것이다.
블록체인은 탈중앙화 구조를 가져 높은 신뢰성을 제공한다. 개발자는 이와 같은 블록체인 특성을 활용하여 다양한 분야에서 애플리케이션을 개발하고 있다.
종래 블록체인은 구조적인 문제로 복수의 노드들에서 일정한 연산처리에 시간이 많이 소요된다. 또한, 개발자도 블록체인별로 개발 언어 내지 도구를 알아야 하는 어려움도 있었다. 나아가, 블록체인은 구조적으로 데이터를 공유하여 불필요하게 데이터 공개가 된다는 한계도 있었다.
이하 설명하는 기술은 종래 관계형 데이터베이스(Relational Database, 이하 RDB라 함)를 활용하여 블록체인 시스템을 제공하고자 한다. 이하 설명하는 기술은 RDB에서 블록체인 특성 및 동작을 수행하는 엔진(engine)을 이용하여 복수의 RDB에 기반한 블록체인을 제공하고자 한다.
관계형 데이터베이스들을 이용한 블록체인 시스템은 클라이언트 장치의 요청에 따라 관계형 데이터베이스 장치가 블록체인의 노드로 동작하도록 제어하는 제1 제어 장치, 상기 제1 제어 장치에 연결되고, 상기 제1 제어 장치의 제어를 받는 제1 관계형 데이터베이스 장치, 상기 제1 제어 장치와 통신하여 자신이 제어하는 관계형 데이터베이스 장치가 블록체인 노드로 동작하도록 제어하는 제어 장치들 및 상기 제어 장치들 각각에 연결되고, 상기 제어 장치들 각각의 제어를 받는 복수의 관계형 데이터베이스 장치들을 포함한다.
상기 제1 제어 장치는 상기 클라이언트 장치로부터 전달되는 요청에 따라 상기 제1 관계형 데이터베이스 장치에 적어도 하나의 제1 블록체인 테이블을 생성 및 관리하되, 상기 복수의 관계형 데이터베이스 장치들과의 블록체인 합의(consensus) 알고리즘에 기반하여 상기 제1 블록체인 테이블을 생성 및 관리한다. 상기 제어 장치들은 상기 제1 제어 장치로부터 전달되는 정보에 따라 상기 복수의 관계형 데이터베이스 장치들 각각이 상기 제1 블록체인 테이블과 동일한 블록체인 테이블을 저장하도록 제어한다.
관계형 데이터베이스들을 이용한 블록체인 관리 방법은 제어 장치가 클라이언트 장치로부터 블록체인 사용자 생성 요청과 함께 사용자의 공개키를 수신하는 단계, 상기 제어 장치가 상기 블록체인 사용자 생성 요청에 대하여 다른 제어 장치들과 일정한 블록체인 합의 알고리즘에 따른 합의를 하고, 성공 메시지를 수신하는 단계, 상기 제어 장치가 자신에 제어하는 관계형 데이터베이스 장치에 관계형 데이터베이스의 프로토콜에 따르는 사용자 생성을 요청하는 단계 및 상기 제어 장치가 상기 관계형 데이터베이스 장치에 저장되는 사용자 테이블에 상기 식별자 및 상기 공개키를 저장하도록 상기 관계형 데이터베이스 장치에 요청하는 단계를 포함한다. 상기 공개키는 상기 클라이언트 장치가 장치 식별자 및 사용자 식별자 중 적어도 하나를 기준으로 생성하는 비밀키에 대응된다. 상기 제어 장치들은 각각 상기 블록체인 사용자 생성 요청에 따라 자신이 제어하는 관계형 데이터베이스 장치들에 사용자 생성 및 상기 사용자 테이블과 동일한 테이블을 생성하도록 제어한다.
이하 설명하는 기술은 종래 RDB를 활용하기 때문에, 개발자가 블록체인에 대한 별도의 지식 없이 RDB의 언어인 SQL(Structured Query Language)을 이용하여 블록체인 기반 애플리케이션을 개발하게 한다. 따라서, 이하 설명하는 기술은 블록체인의 장점과 종래 RDB의 장점을 결합한 서비스 제공이 가능하다.
도 1은 관계형 데이터베이스에 기반한 블록체인 시스템 구성에 대한 예이다.
도 2는 클라이언트 장치와 데이터베이스의 제어 장치의 구조에 대한 예이다.
도 3은 제어 장치에 대한 하드웨어 구조에 대한 예이다.
도 4는 블록체인 사용자 권한 생성 요청을 처리하는 과정에 대한 흐름도의 예이다.
도 5는 블록체인 테이블 생성 요청을 처리하는 과정에 대한 흐름도의 예이다.
도 6은 블록체인 테이블 및 머클 트리에 대한 예이다.
도 7은 블록체인 테이블 삽입 요청을 처리하는 과정에 대한 흐름도의 예이다.
도 8은 블록체인 테이블에서 항목 선택을 처리하는 과정에 대한 흐름도의 예이다.
도 2는 클라이언트 장치와 데이터베이스의 제어 장치의 구조에 대한 예이다.
도 3은 제어 장치에 대한 하드웨어 구조에 대한 예이다.
도 4는 블록체인 사용자 권한 생성 요청을 처리하는 과정에 대한 흐름도의 예이다.
도 5는 블록체인 테이블 생성 요청을 처리하는 과정에 대한 흐름도의 예이다.
도 6은 블록체인 테이블 및 머클 트리에 대한 예이다.
도 7은 블록체인 테이블 삽입 요청을 처리하는 과정에 대한 흐름도의 예이다.
도 8은 블록체인 테이블에서 항목 선택을 처리하는 과정에 대한 흐름도의 예이다.
이하 설명하는 기술은 다양한 변경을 가할 수 있고 여러 가지 실시례를 가질 수 있는 바, 특정 실시례들을 도면에 예시하고 상세하게 설명하고자 한다. 그러나, 이는 이하 설명하는 기술을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 이하 설명하는 기술의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
제1, 제2, A, B 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 해당 구성요소들은 상기 용어들에 의해 한정되지는 않으며, 단지 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 이하 설명하는 기술의 권리 범위를 벗어나지 않으면서 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소도 제1 구성요소로 명명될 수 있다. 및/또는 이라는 용어는 복수의 관련된 기재된 항목들의 조합 또는 복수의 관련된 기재된 항목들 중의 어느 항목을 포함한다.
본 명세서에서 사용되는 용어에서 단수의 표현은 문맥상 명백하게 다르게 해석되지 않는 한 복수의 표현을 포함하는 것으로 이해되어야 하고, "포함한다" 등의 용어는 설명된 특징, 개수, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것이 존재함을 의미하는 것이지, 하나 또는 그 이상의 다른 특징들이나 개수, 단계 동작 구성요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 배제하지 않는 것으로 이해되어야 한다.
도면에 대한 상세한 설명을 하기에 앞서, 본 명세서에서의 구성부들에 대한 구분은 각 구성부가 담당하는 주기능 별로 구분한 것에 불과함을 명확히 하고자 한다. 즉, 이하에서 설명할 2개 이상의 구성부가 하나의 구성부로 합쳐지거나 또는 하나의 구성부가 보다 세분화된 기능별로 2개 이상으로 분화되어 구비될 수도 있다. 그리고 이하에서 설명할 구성부 각각은 자신이 담당하는 주기능 이외에도 다른 구성부가 담당하는 기능 중 일부 또는 전부의 기능을 추가적으로 수행할 수도 있으며, 구성부 각각이 담당하는 주기능 중 일부 기능이 다른 구성부에 의해 전담되어 수행될 수도 있음은 물론이다.
또, 방법 또는 동작 방법을 수행함에 있어서, 상기 방법을 이루는 각 과정들은 문맥상 명백하게 특정 순서를 기재하지 않은 이상 명기된 순서와 다르게 일어날 수 있다. 즉, 각 과정들은 명기된 순서와 동일하게 일어날 수도 있고 실질적으로 동시에 수행될 수도 있으며 반대의 순서대로 수행될 수도 있다.
RDB는 종래 관계형 데이터베이스이다. 관계형 데이터 모델은 일반적으로 데이터를 2차원 테이블 형태로 표현하고 관리한다. 테이블은 행(row) 및 열(column)로 구성되고, 항목들의 정보 및 항목들 간의 관계를 저장한다. 테이블의 행은 하나의 객체(entity)와 관련된 필드 값들로 구성된다.
SQL은 관계형 데이터베이스와 통신하는데 사용하는 기본 인터페이스이다. 사용자는 SQL을 이용하여 데이터의 행 추가, 업데이트, 삭제 및 검색 등을 할 수 있다. 이하 설명하는 기술은 종래 SQL을 이용하여 블록체인 애플리케이션을 개발하게 하는 플랫폼에 해당한다. 이하 해당 플랫폼은 BCSQL(Blockchain SQL) 플랫폼이라고 명명한다. 따라서, 개발자는 BCSQL 플랫폼을 활용하면 종래 SQL로 블록체인 애플리케이션을 개발할 수 있다.
블록체인은 복수의 노드에 누구나 열람할 수 있는 정보(장부)를 분산 저장하는 구조를 갖는다. 블록체인은 공개 범위에 따라 몇 가지 유형으로 구분된다. 퍼블릭 블록체인(public blockchain)은 승인없이 누구나 인터넷에 연결된 장치를 통해 블록체인 네트워크에 참여 가능한 블록체인이다. 프라이빗 블록체인(private blockchain)은 일정하게 허가받은 사용자만 블록체인 네트워크에 참여할 수 있는 블록체인이다. 복수의 집단이 참가할 수 있는 컨소시엄 블록체인(consortium blockchain)도 프라이빗 블록체인의 한 종류에 해당한다. 이하 설명하는 기술은 블록체인 유형에 관계없이 적용 가능하다.
블록체인은 합의 알고리즘(consensus algorithm)을 사용하여 데이터(블록)의 무결성을 검증한다. 블록체인 유형에 따라 다양한 합의 알고리즘이 개발되었다. 퍼블릭 블록체인에 대한 합의 알고리즘은 PoW(Proof of Work), PoS(Proof of Stake), DPoS(Delegated PoS), PoI(Proof of Importance), Casper 등이 있다. 프라이빗 블록체인에 대한 합의 알고리즘은 PBFT(Practical Byzantine Fault Tolerance), Sieve, PoET(Proof of Elapsed Time), PoA(Proof of Authority), Tendermint, Raft, Hotstuff 등이 있다. 이하 설명하는 기술은 전술한 시스템 특성이나 서비스 특성에 따라 다양한 합의 알고리즘 중 적어도 하나를 사용할 수 있다.
블록은 블록체인에서 특정 정보를 저장하는 개체를 의미한다. 기본적으로 생성된 블록은 변경될 수 없다. 새로운 블록은 종전 블록에 연결되는(linked) 형태로 생성되고 유지된다.
이하 설명하는 기술은 RDB를 활용하므로, 블록체인에서의 블록과 같은 구조를 갖기 어렵다. 이하 설명하는 기술을 전통적인 테이블(table)을 이용하여 블록을 구현한다. 이하 블록체인을 구현하는 테이블을 블록체인 테이블이라고 명명한다.
도 1은 관계형 데이터베이스에 기반한 블록체인 시스템 구성(100)에 대한 예이다. 도 1은 BCSQL 플랫폼을 구성하는 시스템에 해당한다.
도 1은 4개의 RDB들(118, 128, 138 및 148)로 구성되는 시스템에 대한 예이다. 개별 RDB가 하나의 블록체인 노드에 해당한다. 도 1에 도시한 4개의 RDB들은 하나의 예시이며, 블록체인을 구성하는 RDB들의 개수는 다양할 수 있다. RDB는 표준 SQL을 처리할 수 있는 장치이다. 따라서, RDB들은 동일한 회사의 제품일 필요는 없다.
각각의 RDB들(118, 128, 138 및 148)은 각각의 코어 엔진(core engine)들(115, 125, 135 및 145)과 하나의 노드를 구성한다. 코어 엔진은 일반적인 RDB가 블록체인 노드로 동작하도록 제어하는 구성이다. 코어 엔진은 클라이언트 장치의 요청을 중간에서 분석하고 처리하여 복수의 RDB가 블록체인으로 동작하게 한다. 예컨대, 코어 엔진은 클라이언트 장치로부터 블록 생성에 해당하는 요청을 받으면, 블록 체인을 구성하는 블록체인 테이블을 RDB에 생성한다.
또한, 코어 엔진은 다른 코어 엔진들과 협력하여 블록체인 합의를 수행한다. 이를 통해 코어 엔진은 동일한 블록체인 테이블이 다른 RDB에도 생성되게 한다. 결국, 코어 엔진은 다른 코어 엔진들과 협력하여 블록체인 노드로 동작하는 RDB들에 동일한 블록체인 테이블을 생성하고 관리한다.
한편, 코어 엔진은 다양한 형태로 구현될 수 있다. (1) 예컨대, 코어 엔진은 데이터베이스와 별도의 서버(코어 엔진 서버)로 구현될 수 있다. 이 경우, 코어 엔진 서버는 클라이언트 장치의 요청을 처리하여 관계형 데이터베이스가 이해하는 SQL 기반의 명령을 개별 RDB에 전송할 수 있다. 또한, 코어 엔진 서버는 RDB로부터 질의(query)에 대한 응답을 수신하여 클라이언트 장치에 전송할 수 있다. (2) 또한, 코어 엔진은 물리적으로 데이터베이스와 같은 장치로 구현될 수도 있다. 예컨대, 코어 엔진은 RDB와 동일한 장치에 임베딩되는 프로그램 형태일 수 있다. 이 경우, 코어 엔진은 RDB의 연산 장치가 실행하는 프로그램(미들 웨어)이 될 수 있다. 또는 코어 엔진은 프로그램이 임베딩된 칩셋 형태의 장치일 수 있다. 이 경우, 코어 엔진은 RDB에 장착된(installed) 또는 연결된(connected) 별도의 장치로 구현될 수 있다.
도 1은 4개의 클라이언트 장치들(111, 121, 131 및 141)을 도시하였다. 클라이언트 장치는 BCSQL 플랫폼을 이용하여 블록체인 애플리케이션을 개발하는 개발자단의 장치이다. 또는, 클라이언트 장치는 BCSQL 플랫폼 기반 블록체인 애플리케이션을 사용하는 사용자단의 장치일 수도 있다.
도 1에서 4개의 클라이언트 장치들(111, 121, 131 및 141) 각각이 4개의 코어 엔진들(115, 125, 135 및 145)과 연결된 형태로 도시하였다. 이는 설명의 편의를 위한 것이고, 개별 클라이언트 장치는 블록체인 노드를 구성하는 어느 RDB의 코어 엔진(115, 125, 135 또는 145)과 통신할 수 있다.
클라이언트 장치(111, 121, 131 또는 141)는 SQL을 포함하는 요청을 코어 엔진(115, 125, 135 또는 145)에 전달한다. 이때 요청에 포함되는 SQL은 다양할 수 있다. 예컨대, SQL은 사용자 권한 생성, 블록체인 테이블 생성, 블록체인에 항목 삽입, 블록체인의 항목 선택일 수 있다. 코어 엔진(115, 125, 135 또는 145)은 클라이언트 장치로부터 전달되는 패킷을 파싱(parsing)하여, 요청을 분석하고 RDB(118, 128, 138 또는 148)에서 처리가능한 SQL 명령으로 가공하여 RDB에 전달할 수 있다.
코어 엔진(115, 125, 135 또는 145)은 블록체인에 관계된 요청만 중간에서 처리한다. 블록체인 관계된 요청은 SQL 형태를 갖는다. 블록체인 관계된 요청은 BCSQL이라고 명명한다. BCSQL은 SQL 표준 구문에 기반한다. BCSQL과 구분하여 종래 SQL을 기본 SQL이라고 명명한다. BCSQL은 사용자 권한 생성, 블록체인 테이블 생성, 블록체인에 항목 삽입 및 블록체인의 항목 선택 중 어느 하나의 요청에 해당한다. 따라서, 코어 엔진(115, 125, 135 또는 145)은 클라이언트 장치가 전달하는 요청 중 관계형 데이터베이스가 직접 처리할 수 있는 기본 SQL은 개별 RDB(118, 128, 138 또는 148)에 그대로 전달(bypass)한다.
한편, 코어 엔진(115, 125, 135 또는 145)은 생성된 블록체인 테이블에 대하여 항목 삽입(insert) 및 선택(select) 연산만을 허용한다. 코어 엔진(115, 125, 135 또는 145)은 블록체인 테이블에 대한 갱신(update), 데이터 삭제(delete), 드롭(drop) 및 테이블 초기화(truncate)와 같은 요청을 허용하지 않는다. 따라서, 코어 엔진(115, 125, 135 또는 145)이 클라이언트 장치로부터 이와 같은 요청을 수신하면 에러 메시지를 전송한다.
코어 엔진(115, 125, 135 또는 145)은 전술한 바와 같이 다양한 블록체인 합의 알고리즘 세트 중 어느 하나를 이용하여 다른 코어 엔진들과 합의를 수행한다. 블록체인 합의 알고리즘 세트는 PBFT, Sieve, PoET, PoA, Tendermint, Raft, Hotstuff 등을 포함할 수 있다. 코어 엔진(115, 125, 135 또는 145)은 클라이언트 장치의 요청 또는 임의로 블록체인 합의 알고리즘 세트 중 어느 하나를 선택하여 합의를 할 수 있다. 코어 엔진(115, 125, 135 또는 145)은 특정 블록체인 테이블에 대하여 특정 블록체인 합의 알고리즘을 적용할 수 있다. 코어 엔진(115, 125, 135 또는 145)은 블록체인 애플리케이션별로 서로 다른 블록체인 합의 알고리즘을 적용할 수도 있다. 또는, 코어 엔진(115, 125, 135 또는 145)은 동일한 블록체인 애플리케이션에 대해서 클라이언트 장치의 요청, 요청의 종류, 사용자의 식별자, 클라이언트 장치의 식별자 등에 따라 서로 다른 블록체인 합의 알고리즘을 적용할 수도 있다.
코어 엔진은 기본적으로 프로그램(일종의 미들웨어) 형태로 구현될 수 있다. 전술한 바와 같이 코어 엔진은 서버 장치, RDB 장치 또는 별도의 칩셋에 임베딩된 형태로 구현될 수 있다. 결국, 코어 엔진은 저장 장치 및 연산 장치를 갖는 특정한 장치에서 동작하는 미들웨어이다. 코어 엔진이 구동하는 장치는 이하 제어 장치라고 명명한다. 따라서, 제어 장치는 서버, RDB 장치, RDB에 내장 또는 연결되는 칩셋 등과 같은 형태이다. 이하, 제어 장치는 코어 엔진과 동일한 의미로 사용한다.
도 2는 클라이언트 장치(200)와 데이터베이스의 제어 장치(300)의 구조에 대한 예이다.
클라이언트 장치(200)는 도 1의 클라이언트 장치(111, 121, 131 또는 141)에 대응한다. 클라이언트 장치(200)는 PC, 스마트기기, 서버, IoT 디바이스 등과 같이 다양한 장치 중 어느 하나일 수 있다. 제어 장치(300)는 도 1의 코어 엔진(115, 125, 135 또는 145)이 설치된 장치에 해당한다.
클라이언트 장치(200)는 클라이언트 애플리케이션(210) 및 SDK(Software Development Kit, 220)를 포함한다. 클라이언트 장치(200)가 개발자 장치라면, 클라이언트 애플리케이션(210)은 SQL 기반하여 블록체인 애플리케이션을 개발하는 소프트웨어이다. SDK(220)는 일반 SQL 인터페이스를 이용하되, 블록체인 시스템에 관련된 요청을 BCSQL로 변환하는 소프트웨어에 해당한다.
제어 장치(300)는 클라이언트 장치(200)로부터 일정한 요청을 수신한다. 제어 장치(300)는 클라이언트 장치(200)로부터 수신한 기본 SQL은 RDB로 전달한다. 제어 장치(300)는 클라이언트 장치(200)의 SDK(220)로부터 수신한 BCSQL은 일정하게 처리한다.
제어 장치(300)는 SQL 파싱부(310), 주처리부(320), 사용자 관리부(330), 합의 처리부(340) 및 DB 인터페이스부(350)를 포함한다. 도 2는 제어 장치(200)의 논리적 기능에 따라 구성을 구분한 것이다. 따라서, 제어 장치(300)는 도 2와 다른 구성을 가질 수도 있다. 제어 장치(300)에 대한 물리적 구성은 도 3에서 설명한다.
SQL 파싱부(310)는 SDK(220)로부터 수신한 패킷을 파싱한다. 주처리부(320)는 BCSQL에 따른 요청을 처리하는 주된 제어부 구성이다. 주처리부(320)는 파싱된 패킷에서 BCSQL을 식별한다. 주처리부(320)는 BCSQL에서 따른 동작을 수행하고, BCSQL 구문 중 일반 SQL을 추출하여 RDB가 처리하게 한다.
사용자 관리부(330)는 블록체인 애플리케이션을 사용하는 사용자 권한을 생성하고 관리하는 구성이다. 합의 처리부(340)는 BCSQL에 따른 동작을 하면서, 블록체인을 구성하는 다른 RDB의 제어 장치와 합의를 수행하는 구성이다. DB 인터페이스부(350)는 RDB에 SQL을 전달하고, 일정한 응답을 수신하는 구성이다.
클라이언트 장치(200)와 제어 장치(300)가 수행하는 구체적인 동작은 후술한다.
도 3은 제어 장치(400)에 대한 하드웨어 구조에 대한 예이다. 제어 장치(600)는 클라이언트 장치로부터 블록체인 구성(애플리케이션 개발)을 요청받고, 수신한 요청을 일정하게 처리하고 RDB와 통신하여 블록체인을 구성한다. 또한, 제어 장치(600)는 클라이언트 장치로부터 블록체인 이용(애플리케이션 이용)을 요청받고, 수신한 요청을 일정하게 처리하고 RDB와 통신하여 블록체인을 이용한 서비스를 제공한다.
제어 장치(400)는 물리적으로 다양한 형태로 구현될 수 있다. 예컨대, 제어 장치(400)는 PC, 컴퓨터 장치, 네트워크의 서버, 데이터 처리 전용 칩셋 등의 형태로 구현될 수 있다.
제어 장치(400)는 저장장치(410), 메모리(420), 연산장치(430), 인터페이스 장치(440) 및 통신장치(450)를 포함할 수 있다.
저장장치(410)는 코어 엔진이 수행하는 동작을 정의하고 제어하는 프로그램을 저장할 수 있다. 저장장치(410)는 블록체인 합의를 위한 블록체인 합의 알고리즘 또는 블록체인 합의 알고리즘 세트를 저장할 수 있다.
저장장치(410)는 클라이언트 장치로부터 수신하는 패킷을 저장할 수 있다. 저장장치(410)는 클라이언트 장치로부터 수신하는 BCSQL, BCSQL을 후처리한 SQL 구문, RDB로부터 수신한 데이터 등을 저장할 수 있다.
메모리(420)는 제어 장치(400)가 BCSQL 처리 과정에 필요한 데이터 및 생성되는 임시 데이터를 저장할 수 있다.
인터페이스장치(440)는 일정한 정보 및 데이터를 입력받거나 전달하는 장치이다. 인터페이스장치(440)는 물리적으로 연결된 채널을 통해 데이터를 주고받는 장치를 의미한다. 예컨대, 인터페이스장치(440)는 RDB에 BCSQL 관련한 요청을 전달할 수 있다. 인터페이스장치(440)는 연산장치가 BCSQL을 후처리한 SQL을 RDB에 전달할 수 있다. 인터페이스장치(440)는 클라이언트 장치가 전달하는 일반적인 SQL을 그대로 RDB에 전달할 수 있다. 인터페이스장치(440)는 RDB로부터 질의에 대한 응답 데이터를 입력받을 수 있다. 또한, 인터페이스장치(440)는 BCSQL 처리를 위한 프로그램을 입력받을 수도 있다.
통신장치(450)는 유선 또는 무선 네트워크를 통해 일정한 정보를 수신하고 전송하는 구성을 의미한다. 통신장치(450)는 클라이언트 장치로부터 일정한 요청을 수신할 수 있다. 통신장치(450)는 RDB와 일정한 정보를 주고받을 수도 있다. 통신장치(450)는 다른 제어 장치와 일정한 정보를 주고받을 수 있다. 통신장치(450)는 BCSQL 관련된 응답 데이터를 클라이언트 장치에 전송할 수도 있다.
연산 장치(430)는 클라이언트 장치가 전달하는 패킷을 파싱한다. 연산 장치(430)는 클라이언트 장치가 전달하는 요청이 블록체인 관련된 BCSQL인지 식별한다. 연산 장치(430)는 BCSQL은 별도의 동작으로 처리하고, 필요한 경우 BCSQL을 후처리한 SQL을 생성한다. 연산 장치(430)는 클라이언트 장치가 전달하는 요청일 기본 SQL인 경우 인터페이스 장치(440)를 통해 RDB에 전달한다.
연산 장치(430)는 BCSQL 구문에 따라 요청에 맞는 동작을 수행한다. BCSQL은 사용자 권한 생성, 블록체인 테이블 생성, 블록체인에 항목 삽입 및 블록체인의 항목 선택 중 어느 하나의 요청에 해당한다. BCSQL에 따른 구체적인 동작은 후술한다.
연산 장치(430)는 생성된 블록체인 테이블에 대하여 항목 삽입(insert) 및 선택(select) 연산만을 허용한다. 연산 장치(430)는 블록체인 테이블에 대한 갱신(update), 데이터 삭제(delete), 드롭(drop) 및 테이블 초기화(truncate)와 같은 요청을 수행하지 않는다.
연산 장치(430)는 사용자 권한 생성, 블록체인 테이블 구성 및 항목 추가 등 블록의 내용이 변경되는 동작에 대해서는 다른 제어 장치들과 블록체인 합의를 수행해야 한다. 연산 장치(430)는 사용자 설정, 클라이언트 장치 요청, 애플리케이션 종류, 블록체인 테이블 식별자에 따라 특정한 블록체인 합의 알고리즘을 사용할 수 있다.
연산 장치(430)는 블록체인 테이블 생성과 관련된 동작도 수행한다. 블록체인 테이블은 항목별로 해시값(hash value)을 갖는다. 연산 장치(430)는 블록체인 테이블에 저장되는 해시값을 연산할 수 있다. 또한, 전체 블록체인 테이블은 변경 내지 해킹 여부를 검증하기 위하여 별도의 검증값을 사용하는데, 연산 장치(430)는 전체 블록체인 테이블을 검증하기 위한 검증값도 연산할 수 있다. 전체 블록체인 테이블을 검증하는 방법은 다양한 방법이 활용될 수 있다. 예컨대, 연산 장치(430)는 블록체인 테이블에서 각 행에 있는 해시값을 기준으로 머클 트리(merkle tree) 또는 희소 머클 트리(sparse merkle tree)를 구성하여 테이블에 변경이 있는지 확인할 수 있다.
연산 장치(430)는 데이터를 처리하고, 일정한 연산을 처리하는 프로세서, AP, 프로그램이 임베디드된 칩과 같은 장치일 수 있다.
이하 제어 장치를 중심으로 RDB에 저장되는 블록체인 테이블을 이용하여 블록체인을 구성하는 동작 및 관리 동작에 대하여 설명한다. BCSQL은 사용자 권한 생성, 블록체인 테이블 생성, 블록체인에 항목 삽입 및 블록체인의 항목 선택이 있다. 이하, 순서대로 각 동작을 설명한다. 이하 설명에서 각 동작을 수행하는 객체를 클라이언트 애플리케이션(A), SDK(B), 제어 장치(C) 및 RDB(D)로 표시한다.
이하 설명에서 BCSQL은 SQL 구문에서 "BLOCKCHAIN"이라는 키워드가 들어간다고 전제한다. 다만, 아래 설명하는 BCSQL 구문은 하나의 예이며 다른 형태의 구문이 사용될 수도 있다. 제어 장치는 BCSQL에서 해당 구문이 블록체인 관련된 구문임을 식별할 수 있으면 충분하다.
도 4는 블록체인 사용자 권한 생성 요청을 처리하는 과정(500)에 대한 흐름도의 예이다. 사용자 권한 생성은 블록체인 테이블 생성, 항목 삽입 및 항목 선택 중 적어도 하나를 수행할 수 있는 사용자 정보를 생성 및 등록하는 과정이다.
클라이언트 애플리케이션(A)은 'CREATE BLOCKCHAIN USER u1'이라는 BCSQL를 생성하여 SDK(B)에 전달한다(511). 이때 BCSQL은 다음과 같은 구문일 수 있다.
상기 구문에서 'u1'은 'u1'이라는 특정 사용자를 의미한다. 'bc options'는 사용자 u1에 부여할 권한의 종류를 나타낸다. 상기 구문은 u1에 블록체인 테이블 생성(CREATION), 항목 삽입(INSERTION) 및 항목 선택(SELECTION) 권한을 부여하는 예이다.
클라이언트 장치의 SDK(B)는 현재 클라이언트 장치의 식별자(device_id) 또는/및 사용자 식별자(user_id)를 추출한다(512).
클라이언트 장치의 SDK(B)는 사용자 u1에 대한 비밀키와 공개키를 생성한다(513). 클라이언트 장치의 SDK(B)는 사용자 식별자 또는 장치 식별자+사용자 식별자를 기준으로 비밀키와 공개키를 생성할 수 있다. 클라이언트 장치의 SDK(B)는 사용자 식별자와 함께 비밀키를 저장한다.
클라이언트 장치의 SDK(B)는 추출한 식별자, 공개키 및 BCSQL을 제어 장치(C)에 전달한다(514).
제어 장치(C)는 SDK(B)가 전달한 패킷을 파싱하고, 파싱한 정보 중 장치 식별자를 식별한다(521). 제어 장치(C)는 장치 식별자를 RDB(D)에 전달하면서 해당 장치에 사용자가 등록되어 있는지 확인할 수 있다. 또는 제어 장치(C)는 파싱한 정보 중 장치 식별자 및 사용자 식별자를 RDB(D)에 전달하면서 해당 장치에 사용자가 등록되어 있는지 확인할 수도 있다.
RDB(D)는 장치별로 사용자 정보를 관리하는 사용자 테이블을 보유한다고 전제한다. RDB(D)가 최초로 사용자 권한 생성을 요청받는 경우, RDB(D)는 사용자 테이블을 생성할 수 있다. 아래 표 1은 사용자 테이블에 대한 예이다.
인덱스 | device_id | user_id | user_pubkey | user_auth |
1 | device1 | user_1 | pubkey1 | CREATION INSERTION SELECTION |
2 | device1 | user_2 | pubkey2 | SELECTION |
. . . |
. . . |
. . . |
. . . |
. . . |
n | device n | user_10 | pubkey10 | CREATION INSERTION SELECTION |
device_id는 클라이언트 장치의 식별자 필드이다. user_id는 사용자 식별자 필드이다. user_pubkey는 사용자의 공개키 필드이다. user_auth는 사용자의 권한 필드이다.
BCSQL 플랫폼 설정에 따라 하나의 클라이언트 장치가 하나의 사용자를 의미할 수도 있다. 이 경우 사용자 식별자는 별도로 없을 수도 있다. 이 경우, 사용자 공개키는 장치 식별자를 기준으로 생성될 수도 있다.
BCSQL 플랫폼 설정에 따라 복수의 사용자가 하나의 클라이언트 장치에 접근할 수도 있다. 이 경우 클라이언트 장치 식별자별로 사용자 권한이 설정될 수 있다. 사용자 공개키는 전술한 바와 같이 클라이언트 장치의 SDK(B)가 생성한 정보이다.
user_auth는 사용자별로 설정될 수 있다. 상기 표 1에서 device1의 user_1은 블록체인 테이블 생성(CREATION), 항목 삽입(INSERTION) 및 항목 선택(SELECTION) 권한을 모두 갖는다. 이에 반하여, device1의 user_2은 항목 선택(SELECTION) 권한만을 갖는다.
제어 장치(C)는 장치 식별자 또는 장치 식별자와 사용자 식별자를 RDB(D)에 질의하고(522), 질의 결과를 수신할 수 있다(523).
제어 장치(C)는 질의한 식별자가 이미 사용자 테이블에 있는 경우(해당 장치 또는 해당 장치에 접근한 사용자가 이미 등록된 사용자인 경우, 524의 Yes) 에러 메시지를 클라이언트 애플리케이션(A)에 전달한다(525).
제어 장치(C)는 질의한 식별자가 사용자 테이블에 없는 경우(524의 No), 해당 사용자 권한을 사용자 테이블에 등록하도록 제어한다.
사용자 테이블은 상기 표 1과 달리, 장치 식별자별로 별도의 테이블로 관리될 수도 있다. 이 경우, 제어 장치(C)는 장치 식별자를 기준으로 RDB(D)로부터 사용자 테이블을 수신하고, 수신한 테이블에서 해당 사용자가 있는지 확인할 수도 있다.
제어 장치(C)는 블록체인 사용자 u1에 대한 정보를 다른 노드(RDB)에 등록하기 위하여 블록체인 합의 알고리즘을 수행한다(531). 제어 장치(C)는 CREATE BLOCKCHAIN SQL을 다른 RDB를 제어하는 제어 장치(들)에 전달한다. 각 제어 장치는 사용자 u1에 대한 사용자 테이블을 각 RDB에 저장한다. 이를 통해 블록체인을 구성하는 모든 RDB에 동일한 사용자 테이블이 공유된다.
합의 알고리즘이 성공하면, 제어 장치(C)는 BCSQL을 후처리하여 SQL을 RDB(D)에 전달한다(541). 예컨대, 제어 장치(C)는 "CREATE BLOCKCHAIN USER u1" 중에서 'BLOCKCHAIN' 키워드를 제외한 나머지 스트링인 CREATE USER u1을 RDB(D)로 전달한다(541). RDB(D)는 수신한 SQL 구문에 따라 사용자 u1에 대한 정보를 기록한다(542).
제어 장치(C)는 사용자 테이블에 사용자 권한을 추가하기 위하여 사용자 테이블 정보를 RDB(D)에 전달한다(551). 사용자 테이블 정보는 장치 식별자, 사용자 식별자, 공개키, 사용자 권한 등에 대한 정보를 포함할 수 있다. RDB(D)는 사용자 테이블에 사용자 u1에 대한 항목을 추가한다. 이때 RDB(D)는 사용자 테이블에 장치 식별자(없는 경우), 사용자 식별자, 공개키, 사용자 권한을 저장한다(552).
제어 장치(C)는 성공적으로 사용자 권한 정보가 생성되었음을 클라이언트 애플리케이션(A)에 알린다(561).
도 5는 블록체인 테이블 생성 요청을 처리하는 과정(600)에 대한 흐름도의 예이다. 블록체인 테이블은 RDB의 테이블이 블록과 같은 기능을 수행하도록 일정한 추가 정보를 저장한다. 대표적으로 블록체인 테이블은 정보가 생성된 시간인 타임 스탬프 및 해당 행에 대한 해시값을 저장한다. 도 5는 RDB에 블록체인 테이블을 생성하는 과정에 해당한다.
클라이언트 애플리케이션(A)은 'CREATE BLOCKCHAIN TABLE t1'이라는 BCSQL 생성하여 SDK(B)에 전달한다(611). 이때 BCSQL은 다음과 같은 구문일 수 있다.
상기 구문에서 u1은 특정 사용자를 나타낸다. t1은 생성할 테이블을 나타낸다. 'db options'은 사용자 u1에 대한 블록체인 테이블 생성임을 나타낸다.
클라이언트 장치의 SDK(B)는 현재 클라이언트 장치의 식별자(device_id) 또는/및 사용자 식별자(user_id)를 추출해서(612) BCSQL과 함께 제어 장치(C)에 전달한다(613).
제어 장치(C)는 SDK(B)가 전달한 패킷을 파싱하고, 파싱한 정보 중 장치 식별자 또는 장치 식별자/사용자 식별자를 식별한다(621).
제어 장치(C)는 장치 식별자 또는 장치 식별자/ 사용자 식별자를 RDB(D)에 전달하여, 해당 사용자에 대한 권한을 확인한다. 제어 장치(C)는 장치 식별자 또는 장치 식별자와 사용자 식별자를 RDB(D)에 질의하고(622), 질의 결과를 수신할 수 있다(623). 또는 제어 장치(C)는 장치 식별자 또는 사용자 식별자를 RDB(D)에 전송하여, 해당 사용자의 정보가 저장된 사용자 테이블을 불러올 수도 있다.
제어 장치(C)는 해당 사용자가 테이블 생성 권한이 없는 경우(624의 NO), 에러 메시지를 클라이언트 애플리케이션(A)에 전달한다(625).
해당 사용자가 테이블 생성 권한이 있는 경우(624의 YES), 제어 장치(C)는 먼저 블록체인 테이블을 생성하기 위한 블록체인 합의 알고리즘을 수행한다(631). 제어 장치(C)는 'CREATE BLOCKCHAIN TABLE t1'이라는 BCSQL을 다른 제어 장치들에 전달하고, 블록체인을 구성하는 모든 RDB에 동일한 블록체인 테이블이 생성되도록 한다.
합의 알고리즘이 성공하면, 제어 장치(C)는 BCSQL을 후처리하여 SQL을 RDB(D)에 전달한다(641). 이때, 제어 장치(C)는 블록체인 테이블의 필드값으로 인덱스, 항목(term), 타임 스탬프, 해시값을 추가로 전달한다. 이를 위해 제어 장치(C)는 해당 행의 해시값을 미리 연산해야 한다.
인덱스, 항목 및 타임 스탬프는 합의 알고리즘에 필요하다. 타임 스탬프는 블록체인 테이블 생성을 요청받은 시점과 같이 특정 시점을 나타낸다. 제어 장치(C)는 인덱스, 항목 및 타임 스탬프의 값을 다른 제어 장치(들)에도 전송하여, 각 RDB의 블록체인 테이블이 동일한 타임 스탬프 값을 갖도록 해야 한다.
행의 해시값은 'CREATE BLOCKCHAIN TABLE t1'이라는 BCSQL 구문 자체를 해싱한 값일 수 있다. 행의 해시값은 행의 필드 중 어느 하나(예컨대, 타임 스탬프의 값)를 더 이용하여 연산될 수도 있다.
제어 장치(C)는 테이블 생성 정보를 RDB(D)에 전달한다(641). 제어 장치(C)는 "CREATE BLOCKCHAIN USER t1" 중에서 'BLOCKCHAIN'을 제외한 나머지 스트링인 CREATE TABLE u1을 RDB(D)로 전달하고, 추가적으로 인덱스, 항목, 타임 스탬프 및 해시값을 RDB(D)에 전달한다(641). RDB(D)는 수신한 SQL 구문에 따라 사용자 u1에 대한 블록체인 테이블 정보를 기록한다.
제어 장치(C)는 블록체인 테이블에 대한 메타 정보를 저장하는 별도의 테이블을 관리할 수 있다. 이 테이블을 블록체인 메타 테이블이라고 명명한다. 블록체인 메타 테이블은 아래 표 2와 같은 항목을 저장할 수 있다.
필드 | 내용 |
db_table name | 블록체인 테이블 이름 또는 식별자 |
owner_id | 블록체인 생성한 사용자 정보 |
merkle_root | 블록체인 테이블에 대한 머클트리 루트 값 |
bc_smt_table_name | 블록체인 테이블에 대한 머클 트리 정보를 저장하는 머클 트리 데이블 이름 또는 식별자 |
제어 장치(C)는 블록체인 메타 테이블을 구성하는 정보를 RDB(D)에 전달한다(651). RDB(D)는 db_table_name = t1, owner_id = bc_user_id, merkle_root = 0, smt_table_name = bc_smt_t1이라는 값을 갖는 블록체인 메타 테이블을 저장한다(652).
머클 트리 또는 희소 머클 트리는 블록체인 테이블 검증을 위하여 사용하는 별도의 구조이다. 이하 희소 머클 트리를 기준으로 설명한다. 초기 머클 트리의 루트값은 0이다. 또한, 희소 머클 트리는 별도의 테이블로 정의된다. 이 테이블은 머클 트리 테이블이라고 명명한다.
제어 장치(C)는 머클 트리 테이블을 구성하는 정보를 RDB(D)에 전달한다(661). RDB(D)는 주어진 정보에 따라 머클 트리 테이블을 생성한다(662). 초기 머클 트리 테이블은 항목이 없는 비어 있는 테이블이다. 머클 트리 테이블은 아래 표 3과 같은 항목을 저장할 수 있다. letft_hash, right_hash, merkle_hash는 블록체인 테이블의 항목 개수에 따라 개수가 늘어난다. 머클 트리 테이블은 하위 레벨과 상위 레벨을 구분하기 위하여 블록체인 테이블의 인텍스 필드를 가질 수도 있다.
필드 | 내용 |
bc_smt_table_name | 머클 트리 데이블 이름 또는 식별자 |
time_stamp | 최근 머클 트리 생성 또는 갱신 시간 |
left_hash | 좌측 자식 노드 해시값 |
right_hash | 우측 자식 노드 해시값 |
merkle_hash | 좌측 자식 노드 해시값과 우측 노드 해시값 |
제어 장치(C)는 성공적으로 블록체인 테이블이 생성되었음을 클라이언트 애플리케이션(A)에 알린다(671).
도 6은 블록체인 테이블 및 머클 트리에 대한 예이다. 블록체인 테이블은 인덱스(index), 항목(term), 타임 스탬프(time stamp), 서명(signature) 및 해시값(hash) 필드를 갖는다. 블록체인 테이블은 하나의 행에 기본적으로 인덱스, 항목, 타임 스탬프 및 해시값을 포함한다. 서명은 해당 항목이 생성될 때 클라이언트 장치로부터 전달되는 암호화된 값일 수 있다. 서명은 클라이언트 장치의 SDK가 자신의 비밀키로 암호화한 값일 수 있다. 해시값은 각 행에 대한 값이다. 해시값은 제어 장치가 일정한 기준에 따라 테이블의 항목이 추가될 때 연산하는 값이다.
희소 머클 트리는 블록체인 테이블이 생성될 때 생성된다. 희소 머클 트리는 블록체인 테이블에 항목이 삽입될 때 갱신된다. 희소 머클 트리는 새롭게 삽입된 항목(리프)을 기준으로 상위 트리 방향으로 해시값을 새롭게 연산하여 갱신된다.
희소 머클 트리는 항목 선택 연산할 때 전체 블록체인 테이블의 값이 변경이 생겼는지를 검증하는데 사용된다.
나아가, 희소 머클 트리 외에 블록체인 테이블의 값이 변경되었는지를 확인할 수 있는 다양한 검증 기법이 사용될 수도 있다. 예컨대, 제어 장치는 블록체인 테이블 전체 행의 해시값 또는 블록체인 각 행의 필드 중 적어도 하나를 이용하여 전체 해싱값을 연산할 수도 있다.
도 7은 블록체인 테이블 삽입 요청을 처리하는 과정(700)에 대한 흐름도의 예이다. 도 7은 블록체인 테이블 생성 후에 항목을 삽입하는 과정에 대한 예이다.
클라이언트 애플리케이션(A)은 'INSERT BLOCKCHAIN into t1'이라는 BCSQL 생성하여 SDK(B)에 전달한다(711). 이때 BCSQL은 다음과 같은 구문일 수 있다. t1은 블록체인 테이블을 나타낸다.
클라이언트 장치의 SDK(B)는 현재 클라이언트 장치 식별자(device_id) 또는/및 사용자 식별자(user_id)를 추출한다(712). 클라이언트 장치의 SDK(B)는 수신한 BCSQL을 기저장된 사용자 비밀키로 암호화하여 서명을 생성한다(712). SDK(B)는 사용자 비밀키 외에 장치 식별자를 더 이용하여 서명을 생성할 수도 있다.
클라이언트 장치의 SDK(B)는 장치의 식별자 또는 장치 식별자/사용자 식별자와 함께 BCSQL을 제어 장치(C)에 전달한다(713).
제어 장치(C)는 SDK(B)가 전달한 패킷을 파싱하고, 파싱한 정보 중 장치 식별자 또는 장치 식별자/사용자 식별자를 식별한다(721).
제어 장치(C)는 장치 식별자 또는 장치 식별자/ 사용자 식별자를 RDB(D)에 전달하여, 해당 사용자에 대한 권한을 확인한다. 제어 장치(C)는 장치 식별자 또는 장치 식별자와 사용자 식별자를 RDB(D)에 질의하고(722), 질의 결과를 수신할 수 있다(723). 또는 제어 장치(C)는 장치 식별자 또는 사용자 식별자를 RDB(D)에 전송하여, 해당 사용자의 정보가 저장된 사용자 테이블을 불러올 수도 있다.
제어 장치(C)는 해당 사용자가 항목 삽입 권한이 없는 경우(724의 No), 에러 메시지를 클라이언트 애플리케이션(A)에 전달한다(725).
해당 사용자가 테이블 생성 권한이 있는 경우(724의 Yes), 제어 장치(C)는 요청한 블록체인 테이블이 있는지 확인한다. 제어 장치(C)는 장치 식별자 또는 장치 식별자와 사용자 식별자를 RDB(D)에 질의하고(731), 질의 결과를 수신할 수 있다(732). 또는 제어 장치(C)는 장치 식별자 또는 사용자 식별자를 RDB(D)에 전송하여, 해당 사용자의 정보가 저장된 사용자 테이블을 불러올 수도 있다.
제어 장치(C)는 요청받은 블록체인 테이블이 없는 경우(733의 No), 에러 메시지를 클라이언트 애플리케이션(A)에 전달한다(734).
요청받은 블록체인 테이블이 있는 경우(733의 Yes), 제어 장치(C)는 블록체인 테이블에 있는 사용자 공개키를 획득한다. 제어 장치(C)는 획득한 사용자 공개키를 이용하여 서명을 복호한다(741). SDK(B)의 암호화 방식에 대응되도록, 제어 장치(C)는 사용자 공개키와 장치 식별자를 모두 이용하여 서명을 복호할 수도 있다(741).
한편, 제어 장치(C)는 항목 삽입(INSERT)과 함께 항목 선택(SELECT)이라는 구문을 처리하지 않는다. 기본 SQL에서 INSERT~SELECT~라는 구문은 먼저 특정 항목을 선택해서 그 결과를 테이블에 삽입하는 구문이다. 이 경우, 한 번에 블록체인 테이블에 복수의 행이 들어가기 때문에 이를 허용하지 않는다. BCSQL이 INSERT~SELECT~라는 구문으로 구성되면 제어 장치(C)는 에러 메시지를 클라이언트 애플리케이션(A)에 전달한다.
제어 장치(C)는 복호한 결과와 쿼리(BCSQL)가 다른 경우(751의 No), 에러 메시지를 클라이언트 애플리케이션(A)에 전달한다(752).
복호한 결과와 쿼리(BCSQL)가 동일한 경우(751의 Yes), 제어 장치(C)는 동일한 항목이 삽입되도록 블록체인 합의 알고리즘을 수행한다(761). 제어 장치(C)는 'INSERT BLOCKCHAIN into TABLE t1'이라는 BCSQL을 다른 제어 장치들에 전달하고, 블록체인을 구성하는 모든 RDB에 동일한 블록체인 테이블이 생성되도록 한다.
제어 장치(C)는 'INSERT BLOCKCHAIN into TABLE t1' 중에서 'BLOCKCHAIN'을 제외한 나머지 스트링인 INSERT into TABLE t1을 RDB(D)로 전달한다(771). 제어 장치(C)는 삽입될 항목에 대한 정보도 함께 전달한다. RDB(D)는 블록체인 테이블 t1에 항목을 새로운 행에 삽입한다(772). 제어 장치(C)는 테이블 삽입 정보(테이블 식별자, 타임 스탬프, 해시값 등)을 결정하여 같이 전달한다.
제어 장치(C)는 블록체인 테이블에 삽입된 정보를 선택하여 다시 읽는다(781). 제어 장치(C)는 새로운 블록체인 테이블의 행을 기준으로 머클 트리를 연산한다(782). 이때 제어 장치(C)는 새로운 행이 구성하는 리프 노드의 상위 노드에서만 해시값이 다시 연산한다.
제어 장치(C)는 머클 트리에서 갱신된 내용을 담는 머클 트리 테이블 정보를 RDB(D)에 전달한다(783).
RDB(D)는 머클 트리 테이블에 새롭게 전달된 정보를 갱신 및 추가한다(754). 또한 RDB(D)는 머클 트리 루트 값을 저장하는 블록체인 메타 테이블에 새로운 머클 트리 루트 값을 저장한다.
모든 과정이 끝나면, 제어 장치(C)는 성공적으로 항목이 삽입되었음을 클라이언트 애플리케이션(A)에 알린다(791).
도 8은 블록체인 테이블에서 항목 선택을 처리하는 과정(800)에 대한 흐름도의 예이다. 도 8은 생성된 블록체인 테이블에서 특정 항목을 검색하여 선택하는 과정에 대한 예이다.
클라이언트 애플리케이션(A)은 'SELECT BLOCKCHAIN option FROM t1'이라는 BCSQL 생성하여 SDK(B)에 전달한다(811). 이때 BCSQL은 다음과 같은 구문일 수 있다. t1은 블록체인 테이블을 나타낸다.
클라이언트 장치의 SDK(B)는 현재 클라이언트 장치 식별자(device_id) 또는/및 사용자 식별자(user_id)를 추출한다(812). 클라이언트 장치의 SDK(B)는 장치의 식별자 또는 장치 식별자/사용자 식별자와 함께 BCSQL을 제어 장치(C)에 전달한다(813).
제어 장치(C)는 SDK(B)가 전달한 패킷을 파싱하고, 파싱한 정보 중 장치 식별자 또는 장치 식별자/사용자 식별자를 식별한다(821).
제어 장치(C)는 장치 식별자 또는 장치 식별자/ 사용자 식별자를 RDB(D)에 전달하여, 해당 사용자에 대한 권한을 확인한다. 제어 장치(C)는 장치 식별자 또는 장치 식별자와 사용자 식별자를 RDB(D)에 질의하고(822), 질의 결과를 수신할 수 있다(823). 또는 제어 장치(C)는 장치 식별자 또는 사용자 식별자를 RDB(D)에 전송하여, 해당 사용자의 정보가 저장된 사용자 테이블을 불러올 수도 있다.
제어 장치(C)는 해당 사용자가 항목 삽입 권한이 없는 경우(824의 No), 에러 메시지를 클라이언트 애플리케이션(A)에 전달한다(825).
해당 사용자가 테이블 생성 권한이 있는 경우(824의 Yes), 제어 장치(C)는 요청한 블록체인 테이블이 있는지 확인한다. 제어 장치(C)는 장치 식별자 또는 장치 식별자와 사용자 식별자를 RDB(D)에 질의하고(831), 질의 결과를 수신할 수 있다(832). 또는 제어 장치(C)는 장치 식별자 또는 사용자 식별자를 RDB(D)에 전송하여, 해당 사용자의 정보가 저장된 사용자 테이블을 불러올 수도 있다.
제어 장치(C)는 요청받은 블록체인 테이블이 없는 경우(833의 No), 에러 메시지를 클라이언트 애플리케이션(A)에 전달한다(834).
블록체인 테이블이 있는 경우(833의 Yes), 제어 장치(C)는 해당 블록체인 테이블에서 요청받은 항목을 선택한다. 제어 장치(C)는 'SELECT BLOCKCHAIN option FROM t1' 중에서 'BLOCKCHAIN'을 제외한 나머지 스트링인 INSERT into TABLE t1을 RDB(D)로 전달한다(841). 제어 장치(C)는 해당 항목의 해시값도 추가로 요청한다. 제어 장치(C)는 선택한 항목 및 해당 항목의 행에 저장된 해시값을 전달받는다(842).
제어 장치(C)는 선택한 항목 행의 해시값을 기준으로, 머클 트리 테이블에서 상위 레벨 해시값을 연산하기 위해 필요한 값(예컨대, 선택한 항목이 좌측 자식 노드라면, 해당 레벨의 우측 자식 노드의 값)을 불러온다. 그리고, 제어 장치(C)는 선택한 항목 행의 해시값(리프 노드)를 기준으로 상위 레벨의 노드들의 해시값을 연산한다. 제어 장치(C)는 머클 트리에서 상위 노드의 해시값을 연산하면서, 머클 트리 테이블을 참조하여 해당 상위 노드의 저장된 해시값이 연산한 해시값과 같은지 비교한다(851).
최종적으로, 제어 장치(C)는 머클 트리 루트 노드의 해시값을 연산하고, 블록체인 메타 테이블에 저장된 루트 노드의 해시값과 비교하여 값이 동일한지 검증한다(852). 만약, 제어 장치(C)가 연산한 상위 노드 값 또는 루트 노드 값이 RDB의 해당 테이블에 저장된 값과 동일하지 않다면, 현재 블록체인 테이블에 저장된 내용이 변경되었음을 의미한다. 따라서, 제어 장치(C)는 블록체인 테이블의 내용이 변경되었음을 클라이언트 애플리케이션에 알릴 수 있다. 이 경우, 제어 장치(C)는 블록체인 프로토콜에 따라서 다른 노드에 저장된 검증된 항목을 찾아 클라이언트 애플리케이션(A)에 전달할 수도 있다.
모든 과정이 끝나면, 제어 장치(C)는 성공적으로 항목이 삽입되었음을 클라이언트 애플리케이션(A)에 알린다(861).
한편, 제어 장치(C)는 클라이언트 애플리케이션(A)에서 생성하는 SQL에 "BLOCKCHAIN"이라는 키워드가 없는 경우 해당 SQL을 기본 SQL로 판단하고, 전체 SQL을 RDB(D)로 전달한다.
또한, 상술한 바와 같은 RDB 기반 블록체인 구성 방법, 블록체인 애플리케이션 제공 방법, BCQL 기반 블록체인 관리 방법(사용자 권한 설정, 블록체인 테이블 생성, 항목 삽입 및 항목 선택)은 컴퓨터에서 실행될 수 있는 실행가능한 알고리즘을 포함하는 프로그램(또는 어플리케이션)으로 구현될 수 있다. 상기 프로그램은 일시적 또는 비일시적 판독 가능 매체(non-transitory computer readable medium)에 저장되어 제공될 수 있다.
비일시적 판독 가능 매체란 레지스터, 캐쉬, 메모리 등과 같이 짧은 순간 동안 데이터를 저장하는 매체가 아니라 반영구적으로 데이터를 저장하며, 기기에 의해 판독(reading)이 가능한 매체를 의미한다. 구체적으로는, 상술한 다양한 어플리케이션 또는 프로그램들은 CD, DVD, 하드 디스크, 블루레이 디스크, USB, 메모리카드, ROM (read-only memory), PROM (programmable read only memory), EPROM(Erasable PROM, EPROM) 또는 EEPROM(Electrically EPROM) 또는 플래시 메모리 등과 같은 비일시적 판독 가능 매체에 저장되어 제공될 수 있다.
일시적 판독 가능 매체는 스태틱 램(Static RAM,SRAM), 다이내믹 램(Dynamic RAM,DRAM), 싱크로너스 디램 (Synchronous DRAM,SDRAM), 2배속 SDRAM(Double Data Rate SDRAM,DDR SDRAM), 증강형 SDRAM(Enhanced SDRAM,ESDRAM), 동기화 DRAM(Synclink DRAM,SLDRAM) 및 직접 램버스 램(Direct Rambus RAM,DRRAM) 과 같은 다양한 RAM을 의미한다.
본 실시례 및 본 명세서에 첨부된 도면은 전술한 기술에 포함되는 기술적 사상의 일부를 명확하게 나타내고 있는 것에 불과하며, 전술한 기술의 명세서 및 도면에 포함된 기술적 사상의 범위 내에서 당업자가 용이하게 유추할 수 있는 변형 예와 구체적인 실시례는 모두 전술한 기술의 권리범위에 포함되는 것이 자명하다고 할 것이다.
Claims (16)
- 클라이언트 장치의 요청에 따라 관계형 데이터베이스 장치가 블록체인의 노드로 동작하도록 제어하는 제1 제어 장치;
상기 제1 제어 장치에 연결되고, 상기 제1 제어 장치의 제어를 받는 제1 관계형 데이터베이스 장치;
상기 제1 제어 장치와 통신하여 자신이 제어하는 관계형 데이터베이스 장치가 블록체인 노드로 동작하도록 제어하는 제어 장치들; 및
상기 제어 장치들 각각에 연결되고, 상기 제어 장치들 각각의 제어를 받는 복수의 관계형 데이터베이스 장치들을 포함하되,
상기 제1 제어 장치는 상기 클라이언트 장치로부터 전달되는 요청에 따라 상기 제1 관계형 데이터베이스 장치에 적어도 하나의 제1 블록체인 테이블을 생성 및 관리하되, 상기 복수의 관계형 데이터베이스 장치들과의 블록체인 합의(consensus) 알고리즘에 기반하여 상기 제1 블록체인 테이블을 생성 및 관리하고,
상기 제1 블록체인 테이블은 항목(term), 타임 스탬프 및 해시값을 필드들로 갖는 복수의 행(row)을 포함하고,
상기 제1 관계형 데이터베이스 장치는 상기 제1 블록체인 테이블에 대하여 상기 복수의 행 각각에 대한 해시값을 기준으로 통합 해시값 또는 머클 트리(merkle tree)를 생성하여 관리하고,
상기 제어 장치들은 상기 제1 제어 장치로부터 전달되는 정보에 따라 상기 복수의 관계형 데이터베이스 장치들 각각이 상기 제1 블록체인 테이블과 동일한 블록체인 테이블을 저장하도록 제어하는 관계형 데이터베이스들을 이용한 블록체인 시스템. - 삭제
- 삭제
- 제1항에 있어서,
상기 제1 제어 장치는
상기 제1 블록체인 테이블에 새로운 항목이 추가되는 경우, 상기 통합 해시값 또는 상기 머클 트리를 업데이트하고,
상기 클라이언트 장치로부터 상기 제1 블록체인 테이블에 저장된 항목에 대한 선택(select)이 있는 경우, 상기 선택된 항목을 기준으로 해싱을 수행하여 상기 통합 해시값 또는 상기 머클 트리에 저장된 해싱값과 동일한지 검증하는 관계형 데이터베이스들을 이용한 블록체인 시스템. - 제1항에 있어서,
상기 제1 제어 장치는 상기 클라이언트 장치로부터 상기 제1 관계형 데이터베이스 장치의 일반 테이블에 대한 제어 명령을 수신하면, 상기 제어 명령을 상기 제1 관계형 데이터베이스 장치에 전달하고,
상기 제1 제어 장치는 상기 클라이언트 장치로부터 상기 제1 블록체인 테이블에 대한 생성, 삽입 및 선택 중 적어도 하나의 대한 블록체인 명령을 수신하면, 상기 블록체인 명령에 대응되는 상기 제1 블록체인 테이블 생성, 항목 삽입 또는 항목 선택 중 어느 하나의 동작으로 수행하는 관계형 데이터베이스들을 이용한 블록체인 시스템. - 제1항에 있어서,
상기 제1 제어 장치는 상기 클라이언트 장치로부터 블록체인 사용자 생성, 상기 제1 블록체인 테이블에 대한 생성, 상기 제1 블록체인 테이블에 항목 삽입 및 상기 제1 블록체인 테이블의 항목 선택 중 어느 하나의 요청을 수신하고,
상기 블록체인 사용자 생성, 상기 제1 블록체인 테이블에 대한 생성 및 상기 제1 블록체인 테이블에 항목 삽입에 대한 요청은 상기 제어 장치들과의 블록체인 합의가 성공하는 경우 수행하는 관계형 데이터베이스들을 이용한 블록체인 시스템. - 제1항에 있어서,
상기 제1 제어 장치는 블록체인 합의 알고리즘 세트 중 어느 하나를 이용하여 상기 제1 블록체인 테이블에 대한 상기 제어 장치들과 블록체인 합의를 수행하는 관계형 데이터베이스들을 이용한 블록체인 시스템. - 제7항에 있어서,
상기 제1 블록체인 테이블이 복수인 경우, 상기 제1 제어 장치는 상기 복수의 제1 블록체인 테이블에 대하여 서로 다른 블록체인 합의 알고리즘으로 상기 제어 장치들과 블록체인 합의를 수행하는 관계형 데이터베이스들을 이용한 블록체인 시스템. - 제1항에 있어서,
상기 클라이언트 장치는 제어 프로그램이 설치되며,
상기 제어 프로그램은 상기 클라이언트 장치의 식별자를 기준으로 상기 제1 관계형 데이터베이스 장치에 블록체인 사용자 생성 및 상기 제1 블록체인 테이블 생성을 요청하는 관계형 데이터베이스들을 이용한 블록체인 시스템. - 제어 장치가 클라이언트 장치로부터 블록체인 사용자 생성 요청과 함께 사용자 식별자 및 공개키를 수신하는 단계;
상기 제어 장치가 상기 블록체인 사용자 생성 요청에 대하여 다른 제어 장치들과 일정한 블록체인 합의 알고리즘에 따른 합의를 하고, 성공 메시지를 수신하는 단계;
상기 제어 장치가 자신에 제어하는 관계형 데이터베이스 장치에 관계형 데이터베이스의 프로토콜에 따르는 사용자 생성을 요청하는 단계;
상기 제어 장치가 상기 관계형 데이터베이스 장치에 저장되는 사용자 테이블에 상기 사용자 식별자 및 상기 공개키를 저장하도록 상기 관계형 데이터베이스 장치에 요청하는 단계; 및
상기 제어 장치가 상기 클라이언트 장치로부터 블록체인 테이블 생성 요청을 수신하고, 상기 블록체인 테이블 생성 요청에 대하여 다른 제어 장치들과 일정한 블록체인 합의 알고리즘에 따른 합의를 하고, 상기 합의에 대한 성공 메시지를 수신하면 상기 관계형 데이터 베이스 장치에 항목(term), 타임 스탬프 및 해시값을 필드들로 갖는 행(raw)을 포함하는 블록체인 테이블의 생성을 요청하는 단계를 포함하되,
상기 블록체인 테이블은 상기 행이 복수 개이고, 상기 관계형 데이터베이스 장치는 상기 복수의 행 각각에 대한 해시값을 기준으로 상기 복수의 행 전체에 대한 통합 해시값 또는 머클 트리(merkle tree)를 생성하고,
상기 공개키는 상기 클라이언트 장치가 상기 사용자 식별자를 이용하여 생성되는 비밀키에 대응되고,
상기 제어 장치들은 각각 상기 블록체인 사용자 생성 요청에 따라 자신이 제어하는 관계형 데이터베이스 장치들에 사용자 생성 및 상기 사용자 테이블과 동일한 테이블을 생성하도록 제어하는 관계형 데이터베이스들을 이용한 블록체인 관리 방법. - 제10항에 있어서,
상기 제어 장치는
상기 블록체인 사용자 생성 요청에 해당하는 스트링 중 관계형 데이터베이스의 질의(SQL)에 부합하는 스트링만 추출하여 상기 관계형 데이터베이스 장치에 사용자 생성을 요청하는 관계형 데이터베이스들을 이용한 블록체인 관리 방법. - 삭제
- 제10항에 있어서,
상기 사용자 테이블은 사용자 권한을 더 저장하고,
상기 제어 장치는 상기 클라이언트 장치로부터 생성된 블록체인 테이블에 항목 삽입 요청을 수신하는 단계;
상기 제어 장치는 상기 사용자 테이블에서 상기 사용자 식별자를 기준으로 삽입 권한이 있는지 확인하는 단계;
상기 삽입 권한이 있는 경우, 상기 제어 장치는 상기 항목 삽입 요청에 대하여 다른 제어 장치들과 일정한 블록체인 합의 알고리즘에 따른 합의를 하고, 성공 메시지를 수신하는 단계; 및
상기 제어 장치는 상기 블록체인 테이블에 항목, 타임 스탬프 및 해시값을 저장하도록 제어하는 단계를 더 포함하는 관계형 데이터베이스들을 이용한 블록체인 관리 방법. - 제13항에 있어서,
상기 제어 장치는 상기 블록체인 테이블에 기저장된 공개키로 상기 클라이언트 장치가 전달하는 서명을 복호하고, 복호한 결과와 상기 항목 삽입 요청 또는 항목 삽입 요청에 포함된 쿼리가 동일한 경우에만 상기 삽입 요청에 대한 동작을 진행하는 관계형 데이터베이스들을 이용한 블록체인 관리 방법. - 제13항에 있어서,
상기 제어 장치는 상기 블록체인 테이블의 필드들 중 적어도 하나의 필드를 기준으로 상기 블록체인 테이블 전체 행에 대한 상기 통합 해시값 또는 상기 머클 트리를 생성하여 상기 관계형 데이터베이스 장치에 저장하는 단계; 및
상기 제어 장치는 상기 삽입 요청에 따라 상기 블록체인 테이블에 행이 추가되면, 추가된 행의 해시값을 기준으로 상기 통합 해시값 또는 상기 머클 트리를 갱신하여 상기 관계형 데이터베이스 장치에 저장하는 단계를 더 포함하는 관계형 데이터베이스들을 이용한 블록체인 관리 방법. - 제10항에 있어서,
상기 관계형 데이터베이스 장치는 블록체인 테이블의 필드들 중 적어도 하나의 필드를 기준으로 상기 블록체인 테이블 전체 행에 대한 상기 통합 해시값 또는 상기 머클 트리를 저장하고, 상기 사용자 테이블은 사용자 권한을 더 저장하고,
상기 제어 장치는 상기 클라이언트 장치로부터 생성된 블록체인 테이블에서 항목 선택 요청을 수신하는 단계;
상기 제어 장치는 상기 사용자 테이블에서 상기 사용자 식별자를 기준으로 선택 권한이 있는지 확인하는 단계;
상기 선택 권한이 있는 경우, 상기 제어 장치는 상기 블록체인 테이블에서 선택 요청받은 항목이 있는 행에서 해시값을 기준으로 상기 블록체인 테이블에 대한 상기 통합 해시값 또는 상기 머클 트리 중 적어도 일부 값을 연산하여 기저장된 상기 통합 해시값 또는 상기 머클 트리 중 대응되는 값과 비교하여 상기 선택 요청받은 항목을 검증하는 단계; 및
상기 검증이 성공하면, 상기 제어 장치는 상기 선택 요청받은 항목을 상기 클라이언트 장치에 전달하는 단계를 더 포함하는 관계형 데이터베이스들을 이용한 블록체인 관리 방법.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020200048880A KR102316620B1 (ko) | 2020-04-22 | 2020-04-22 | 관계형 데이터베이스들을 이용한 블록체인 시스템 및 블록체인 관리 방법 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020200048880A KR102316620B1 (ko) | 2020-04-22 | 2020-04-22 | 관계형 데이터베이스들을 이용한 블록체인 시스템 및 블록체인 관리 방법 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR102316620B1 true KR102316620B1 (ko) | 2021-10-25 |
Family
ID=78258534
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020200048880A KR102316620B1 (ko) | 2020-04-22 | 2020-04-22 | 관계형 데이터베이스들을 이용한 블록체인 시스템 및 블록체인 관리 방법 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR102316620B1 (ko) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20190077765A (ko) * | 2017-12-26 | 2019-07-04 | 경희대학교 산학협력단 | 데이터를 블록체인을 이용하여 저장하는 방법 및 클라우드 시스템 |
KR20190110082A (ko) | 2017-01-19 | 2019-09-27 | 주식회사 케이티 | 블록 체인을 이용하여 데이터를 관리하는 장치 및 방법 |
KR20190130933A (ko) * | 2018-05-15 | 2019-11-25 | 바이노드 피티이. 엘티디. | 블록체인 기반의 데이터 구성 방법 및 장치 |
CN110912937A (zh) * | 2019-12-23 | 2020-03-24 | 杭州中科先进技术研究院有限公司 | 一种基于区块链的数字存证平台和存证方法 |
CN111026767A (zh) * | 2020-01-04 | 2020-04-17 | 天津金农企业管理咨询合伙企业(有限合伙) | 区块链的数据存储方法、装置及硬件设备 |
-
2020
- 2020-04-22 KR KR1020200048880A patent/KR102316620B1/ko active IP Right Grant
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20190110082A (ko) | 2017-01-19 | 2019-09-27 | 주식회사 케이티 | 블록 체인을 이용하여 데이터를 관리하는 장치 및 방법 |
KR20190077765A (ko) * | 2017-12-26 | 2019-07-04 | 경희대학교 산학협력단 | 데이터를 블록체인을 이용하여 저장하는 방법 및 클라우드 시스템 |
KR20190130933A (ko) * | 2018-05-15 | 2019-11-25 | 바이노드 피티이. 엘티디. | 블록체인 기반의 데이터 구성 방법 및 장치 |
CN110912937A (zh) * | 2019-12-23 | 2020-03-24 | 杭州中科先进技术研究院有限公司 | 一种基于区块链的数字存证平台和存证方法 |
CN111026767A (zh) * | 2020-01-04 | 2020-04-17 | 天津金农企业管理咨询合伙企业(有限合伙) | 区块链的数据存储方法、装置及硬件设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11811911B2 (en) | Method and system for partitioned blockchains and enhanced privacy for permissioned blockchains | |
US12045372B2 (en) | Securing access to confidential data using a blockchain ledger | |
US11716357B2 (en) | Data access policies | |
CN110495132B (zh) | 用于在分布式网络节点内生成、上传和执行代码区块的系统和方法 | |
US10002151B2 (en) | Client computer for updating a database stored on a server via a network | |
US20210109917A1 (en) | System and Method for Processing a Database Query | |
US9990391B1 (en) | Transactional messages in journal-based storage systems | |
CN112559627A (zh) | 一种基于联盟链的链上-链下协同电子病历数据共享方法 | |
US20090234880A1 (en) | Remote storage and management of binary object data | |
US10108658B1 (en) | Deferred assignments in journal-based storage systems | |
US11316706B2 (en) | Method and system for using dynamic private keys to secure data file retrieval | |
CN111506589B (zh) | 基于联盟链的区块链数据服务系统、访问方法及存储介质 | |
KR102564106B1 (ko) | 개인정보 보호를 위해 개선된 스마트 컨트랙트 기반의 지능형 중개를 위한 장치 및 방법 | |
GB2576160A (en) | Distributed ledger system | |
KR102316620B1 (ko) | 관계형 데이터베이스들을 이용한 블록체인 시스템 및 블록체인 관리 방법 | |
CN101464902B (zh) | 一种外包数据库查询结果验证方法及其系统 | |
CN118210785B (zh) | 一种基于数据校验的数据库迁移方法及系统 | |
JP2005032271A (ja) | オブジェクト指向データベース管理システム及び方法 | |
Dindoliwala Vaishali | Enhancing Data Consistency Through Referential Integrity In Document Oriented NoSQL Databases | |
Demertzis | Improving Efficiency, Expressiveness and Security of Searchable Encryption | |
CN117667124A (zh) | 一种应用管理方法、计算设备及存储介质 | |
CN117494166A (zh) | 基于知识图谱的数据权限控制方法及系统 | |
CN117194482A (zh) | 数据查询方法、装置、计算机设备和存储介质 | |
Cebollero et al. | Triggers | |
JP2000232444A (ja) | データ管理システム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |