블록체인품질평가지표(안) 및 블록체인의 취약점 분석...

39
블 록 체 인 품 질 평 가 지 표 (안) 및 품질측정방법보고서 블록체인의 취약점 분석 및 개선을 위한 품질 평가지표 개발 홍익대학교 (주)이 노 블 록

Transcript of 블록체인품질평가지표(안) 및 블록체인의 취약점 분석...

Page 1: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

블 록 체 인 품 질 평 가 지 표 ( 안) 및 품 질 측 정 방 법 보 고 서

블록체인의 취약점 분석 및 개선을 위한 품질 평가지표 개발

홍익대학교

( 주) 이 노 블 록

Page 2: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

제 출 문

(주)이노블록 대표이사 귀하

본 보고서를 블록체인의 취약점 분석 및 개선을 위한 품질 평가지표 개발의 블록체인 품질평거자표(안) 및 품질측정방법 보고서로 제출합니다.

2019 년 8월 7일

수 탁 기 관 : 홍익대학교 세종캠퍼스 산학협력단

수 탁 기 관 장 : 박경문 연 구 책 임 자 : 김영철참 여 연 구 원 : 박보경, 서채연, 문소영,

장우성, 박영식

Page 3: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

목 차

제 1 장 서론 ······························································································ 1

제 2 장 관련 연구 ···················································································· 22.1 블록체인 기반 시스템 평가 기준 ····································································· 22.2 블록체인 기반 소프트웨어 품질 평가 ··························································· 13

제 3 장 블록체인 품질 평가 지표 ······················································ 16

제 4 장 블록체인 품질 측정 방법 ······················································ 274.1 Java 기반 블록체인 소프트웨어의 품질 측정 ············································· 274.2 Go 기반 블록체인 소프트웨어의 품질 측정 ················································ 31

제 5 장 결론 ···························································································· 35

참고문헌 ···································································································· 36

Page 4: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 1 -

제 1 장 서론

국내외 주요 기관들은 블록체인 기술의 중요성에 대해 인식하여, 미래의 생

활을 바꿀 수 있는 핵심 기술로 주목받고 있다. 세계 경제 포럼(WEF, 다보스

포럼)은 글로벌 리스크 보고서에서 보다 나은 과학기술 정책이 요구되는 유

망기술로 “블록체인”을 선정하였다. 전 세계 은행의 80%가 블록체인을 도입

할 것으로 예상되며, 2023년에는 전 세계 정부에서 블록체인 거래로 세금을

징수할 것으로 전망된다. 또한 글로벌 금융기업과 ICT 기업은 블록체인의 파

급력을 인식하고 원천기술에 대한 개발 및 투자가 진행되고 있다.

[그림 1] 기업용 블록체인 시장 규모[1]

블록체인 기술이 미래 산업으로 각광받으면서 다양한 분야에서 활용되고

있으나 블록체인을 활용한 시스템을 평가하거나 중앙 집중형 시스템과 비교

할 수 있는 기준이 부재하다. 중앙 집중형 시스템에 비해 블록체인 시스템은

품질, 성능, 보안 등과 관련되어 체계적인 평가 시스템이 구성되어 있지 않아

블록체인 활성화의 저해 요인으로 인식되고 있다. 블록체인 시스템은 중앙 집

중형 시스템과 다르고, 블록체인 시스템 환경이 유동적이어서 전체 시스템 평

가가 매우 어렵다. 또한 블록체인 시스템은 다양한 노드가 서로 유기적으로

동작하여 연결 방식, 네트워크 구성, 노드 개수 등에 따라 시스템 환경이 변

하기 때문에 전체 시스템 평가가 어렵다.

블록체인 플랫폼 기술의 평가를 위해서는 평가 기준 정의가 필요하다. 즉,

중앙 집중형 시스템과 소프트웨어 평가 기준을 기반으로 블록체인 기술의 특

성에 맞게 보완이 필요하다.

본 보고서는 국내외 블록체인 품질평가지표를 조사⋅분석하고, 블록체인의

품질평가지표와 품질측정방법을 제시한다.

Page 5: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 2 -

제 2 장 관련 연구

이번 장에서는 관련 연구로 블록체인 소프트웨어 평가 모델을 소개한다. 전

세계적으로 블록체인 소프트웨어(시스템)의 품질을 평가하는 모델 및 방법론연

구는 미비하다. 일본 경제산업성이 발표한 “블록체인 기반 시스템 평가 기준”과

한국의 와이즈스톤에서 발표한 “블록체인 기반 서비스의 품질모델”을 소개한다.

2.1 블록체인 기반 시스템 평가 기준

2.1.1 개요

블록체인이 미래 산업의 기술로 각광받으면서 다양한 분야에서 활용되고 있

으나 블록체인을 활용한 시스템을 평가하거나 중앙집중형 시스템과 비교할 수

있는 기준이 부재한 상황이다[2,3]. 이에 일본의 경제산업성은 “블록체인 기술

을 활용한 시스템 평가 기준”을 마련하였다.

2.1.2 평가 기준 도입 배경

블록체인 기술은 비트코인과 같은 가상화폐 거래에 사용되는 새로운 유형의

기술이다. 블록체인 기술의 중요한 특징은 기존 시스템에 비해 위조가 극도로

어렵고, 실제로 다운타임을 일으키지 않는 저렴한 시스템을 구축할 수 있다는

점이다. 따라서, 이 기술들은 다양한 분야에서 적용될 것으로 예상된다. 그러

나 기술의 특징을 적절히 평가하고 기존 시스템과 비교하기 위한 평가 지표나

기준은 확립되지 않았다. 이것은 대중의 불안, 오해, 그리고 기술을 차단하려는

불합리한 희망을 야기시키고, 그 기술을 도입하는 것을 꺼릴 가능성이 있다.

중앙집중형 시스템은 중앙에 위치한 시스템의 평가만으로 전체 시스템의 평

가 결과를 얻을 수 있어 평가가 용이하고 국제적인 논의가 활발히 진행되고

있다[2]. 블록체인 시스템은 중앙집중형 시스템과 달리 환경이 유동적이기 때

문에 전체 시스템 평가가 어렵고 평가에 대한 논의가 활발히 진행되지 않고

있다. 다양한 노드가 서로 유기적으로 동작하여 연결 방식, 네트워크 구성, 노

드 개수 등의 요소에 따라 시스템 환경이 변화하기 때문에 전체 시스템의 평

가가 어렵다. ISO/IEC25000(SQuaRE, Software Quality and Requirement

Evaluation)1)와 같은 시스템 평가를 위한 국제표준이 이미 마련되어 있다. 그

러나 이 모델은 블록체인 구조(예: 여러 노드 간의 합의)로 인한 고유한 트래

이드오프 때문에 블록체인 기반 시스템에 직접 사용할 수 없다.

1) 소프트웨어 품질 평가를 위한 국제 표준 문서로써 소프트웨어의 전반적인 품질을 평가할 수 있는 표준이다.

Page 6: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 3 -

구분

중앙집중형 시스템 블록체인 시스템

특징

Ÿ 이러한 종류의 시스템 성능은 단일 장비의 사양으로 평가될 수 있는데, 이는 일반적으로 이 장비나 그 수를 구성하는 컴퓨터 하드웨어의 성능에 따라 크게 다르기 때문이다.

Ÿ 이러한 유형의 시스템 및 관련 소프트웨어의 품질에 관한 논의가 진전되어, ISO/IEC 25000(SQuaRE)으로 일련의 국제 표준이 제정되었다.

Ÿ 이러한 종류의 시스템의 성능은 합의 알고리즘이나 노드 수 등 다양한 고유한 트레이드오프 특성에 따라 달라지기 때문에 하나의 단일 값으로 평가하기 어렵다.

Ÿ 이러한 유형의 시스템의 품질 평가에 대한 논의는 아직 일본 안팎에서 시작되지 않았다.

최종 목표

기존 시스템과의 비교성 및 이해도를 고려하여 평가항목 간의 절충을 검토함으로써 세계 최초의 블록체인 기반 시스템 평가 형태를 확립

[표 1] 중앙집중형과 블록체인 시스템 특징[2]

2.1.3 평가 양식 구축 전략

평가 양식은 다음과 같은 전략에 따라 블록체인 기반 시스템의 글로벌 조사

및 실제 사용사례 및 전문가 연구 위원회에서 논의를 통해 수립되었다. 평가

양식은 4가지 주제(평가의 범위, 플랫폼 분류, 구성요소, 블록체인 특성 고찰)

로 구분하여 연구되었다.

[그림 2] 평가 양식 구축 전략[2,3]

Page 7: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 4 -

(1) 평가의 범위

평가 양식의 범위는 전체 시스템(블록체인 플랫폼 + 관련 서브시스템)으로

정의하였다. 주요 사용 사례에서 “시스템 전체”의 기능이나 성과를 평가하는

것이 중요하다고 가정한다.(예: 시스템 벤더에 의한 평가 및 시스템 사용자에

의한 투자 결정). [그림 3]은 평가 양식의 범위를 도식화한 것이다.

[그림 3] 평가 양식의 범위[2]

(2) 플랫폼 분류

공공/컨소시엄/프라이빗 블록체인은 지배구조, 이용자 정체성 등에 있어서

다르고, 특성도 다르다. 평가 양식은 이러한 모든 패턴을 다루는 것을 목표로

한다. 이러한 차이로 인한 평가 지점은 각 평가 항목에 대해 설명된다. [그림

4]는 블록체인 플랫폼의 거버넌스 체계에 의한 일반적인 분류이다.

[그림 4] 블록체인 플랫폼의 분류

Page 8: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 5 -

(3) 구성요소

블록체인 기술 및 특성과 밀접한 관련이 있는 품질평가 항목은 ISO/IEC

25010(시스템 및 소프트웨어 품질모델)에서 참고하였다. 유지관리/운영 평가

항목은 IPA에서 발췌하였다.(시스템 참조 매뉴얼, 4장 “유지관리 및 운영”),

(4) 블록체인 특성의 고려사항

블록체인 특성은 관련 평가항목을 고려해야 한다. 다양한 항목과 특징들이

절충 관계에 있다.

[그림 5] 블록체인 특성과 관련 평가 항목의 예[2]

2.1.4 평가 기준 활용 방안

중앙집중형 시스템을 블록체인 시스템으로 교체할 경우 중앙시스템과 블록

체인 시스템의 평가⋅비교를 통해 블록체인 기술 도입의 타당성을 확보할 수

있다. 즉, 중앙집중형 시스템 평가는 ISO/IEC25010과 IPA의 시스템 레퍼런스

메뉴얼에 따른 시스템 평가이며, 블록체인 시스템 평가는 블록체인 기술과 관

련성이 높은 품질, 보수⋅운용, 비용과 관려된 사항을 동 기준을 기반으로 평

가한다.

블록체인 시스템 간 시험 평가는 서로 다른 블록체인 플랫폼을 적용한 시스

템 간의 비교를 통해 블록체인 플랫폼 결정 시 반영할 수 있다. 시스템 시험

의 목적 또는 요구사항과 관련된 지표를 평가하고 나열하여 평가 결과를 비교

할 수 있다.

Page 9: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 6 -

중항목 소항목 필요성 관련 기술 및 특성 평가 기준을 활용할 때의 유의점

효율성

처리 성능

Ÿ 처리 성능은 사용자가 인식하는 중요 평가항목으로 처리 성능에 대한 사용자 요구사항 만족 여부를 확인할 필요

Ÿ 블록의 처리 기법에 따른 트레이드 오프가 발생할 수 있어 다른 평가 항목 간의 유기적인 고려가 요구됨(예: 블록 사이즈의 크기를 늘려 처리 성능을 향상할 경우 데이터 전송 시간과 응답 시간 증가)

Ÿ 블록 사이즈Ÿ 트랜잭션 사이즈Ÿ 합의 방식Ÿ 블록 생성시간

Ÿ 노드 구성, 네트워크 환경, 합의 방식 등의 요구사항을 명확히 함

Ÿ 처리 성능의 정의를 명확히 함Ÿ 예) 트랜잭션 처리 성능 등Ÿ 다른 평가 항목과의 트레이드오프 관계를 유의

네트워크 성능

Ÿ 네트워크 환경은 시스템 전체 성능에 큰 영향을 줌

Ÿ 네트워크 성능에 변화를 줄 수 있는 기법(전용망 설치 등)이 있으나 이에 따른 트레이드오프가 발생할 수 있어 다른 평가 항몪 간의 유기적인 고려가 요구(예: 전용망 설치를 통해 네트워크 성능을 향상할 경우 비용 증가)

Ÿ 네트워크 환경Ÿ 노드 분산

Ÿ 네트노드 구성, 네트워크 환경, 합의 방식 등의 요구사항을 명확히 함

Ÿ 처리 시간의 정의를 명확히 함예) 임의의 2개 노드의 데이터 처리 시간 등

블록 확정 성능

Ÿ 블록체인 시스템의 블록 확정은 합의 방식(PoW, PBFT 등)에 따라 결정

Ÿ 합의 방식Ÿ 네트워크 환경Ÿ 노드 분산

Ÿ 블록이 확정될 때까지 걸리는 시간 등 처리 시간의 정의를 명확히 함

Ÿ 블록이 확정되는 데 걸리는 시간 또는 블록이 시

2.1.5 블록체인을 활용한 시스템의 평가 기준

o 품질: 품질은 효율성, 호환성, 확장성, 신뢰성, 보안, 이식성 항목으로 분류하고 총 20개의 소항목으로 평가 기준 구성

Page 10: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 7 -

Ÿ 각 합의 방식에 따른 특징, 성능 등의 차이가 있어 적용 시 고려

간 내에 확정될 확률 등 사용하는 합의 방식의 특징⋅트레이드오프 관계를 확인

Ÿ 다른 평가 항목과의 트레이드오프 관계 유의

참조 성능Ÿ 블록체인에 저장된 거래내역 등을

참조하는데 소요되는 시간 확인

Ÿ 노드 분산Ÿ 네트워크 환경Ÿ 블록구조

Ÿ 특정 블록 또는 전송을 참조할 때의 성능, 노드 구성, 네트워크 환경 등의 요구 조건을 명확히 함

호환성

중앙집중형 시스템과의

호환성

Ÿ 블록체인 시스템이 기존의 중앙

집중형 시스템과 연계할 경우

시스템 간의 호환 여부를 확인

Ÿ 데이터 구조Ÿ API 사양

Ÿ 시스템 간 상호 운용을 위한 전제조건을 명확히 함Ÿ 기존 시스템과의 연계 방식 확인

다른 블록체인

시스템과의 호환성

Ÿ 블록체인 시스템이 또 다른 블

록체인 시스템과 연계할 경우

시스템 간의 호환 여부를 확인

Ÿ 데이터 구조Ÿ 합의 방식Ÿ API 사양

Ÿ 시스템 간 상호 운용을 위한 전제조건을 명확히 함Ÿ 다른 블록체인 기술을 활용한 시스템과의 호환성

과 연계 방식 확인

확장성

처리 성능 향상

가능성

Ÿ 사용량/데이터 증가 등으로 인해 발생할 수 있는 제한적인 데이터 처리/전송 속도 문제의 해결을 위해 처리 성능과 네트워크 성능의 향상 가능성에 대해 확인

Ÿ 블록사이즈Ÿ 트랜잭션 사이즈Ÿ 합의방식Ÿ 블록 생성 시간

Ÿ 처리 성능을 향상 시킬 방법과 그에 따라 발생할 수 있는 트레이드오프를 확인

네트워크 성능 향상

가능성

Ÿ 노드 수Ÿ 네트워크 환경Ÿ P2P 프로토콜

Ÿ 네트워크 성능 향상을 저해하는 부분을 확인하고 성능 향상을 위한 방안 마련

용량 확장성

Ÿ 블록의 용량(사이즈)을 확장할 경우 합의에 참여 가능한 노드의 수가 감소(예: 저성능 노드 등의 제외)할 수 있어 합의의 신뢰성 저하가 우려되므로 이를 고려한 용량 확장성의 평가가 필요

Ÿ 블록사이즈Ÿ 트랜잭션 사이즈Ÿ 합의방식Ÿ 블록 생성 시간

Ÿ 데이터 축적에 의해 보전해야할 데이터 용량이 증가하여 일정 기간 후의 데이터 용량을 추정하고 확보하는 방안 마련

Page 11: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 8 -

노드 확장 정도

Ÿ 노드 수의 증가로 인해 네트워크가 동시에 처리/전송할 수 있는 노드의 수를 초과할 경우 처리/전송되지 않는 노드가 발생할 수 있어 네트워크 성능을 고려한 노드 확장성의 평가가 필요

Ÿ 데이터 용량Ÿ 합의 방식

Ÿ 각종 노드(Full Node, Lite Node 등)에 대한 확장의 한계성을 확인하고 노드의 수가 증가할수록 처리 성능을 초과하는 전송이 발생할 가능성이 있어 처리 성능에 맞는 노드의 수를 명확히 함

Ÿ 다른 평가 항목에 따른 트레이드오프 관계에 유의

신뢰성

성숙성

Ÿ 해당 시스템에 사용되는 기존 또는 신규 기술의 안정성, 활용도 및 가동 실적 등을 평가하여 블록체인 시스템의 성숙성을 평가

Ÿ 기존 기술(암호화 등)Ÿ 새로 연구된 기술 (합의 방

식 등)

Ÿ 블록체인 시스템은 기존 기술(암호화 등)과 합의 방식 또는 처리 성능 향상을 위해 연구·개발된 새로운 기술을 결합하였기 때문에 개별 기술의 실제 성과, 유사 시스템 또는 테스트 환경에서의 가동 실적 등에 따라 시스템 성숙성을 확인

가용성Ÿ 블록체인 시스템 및 각 구성요소

가 서비스 가용성을 보장하는지를 평가

Ÿ 단일 장애의 유무Ÿ 단일 장애점이 되는 노드의 유무 확인Ÿ 단일 장애점이 없는 경우 어떤 노드가 시스템의

신뢰성에 영향을 미치는 지 명확히 함

Ÿ 합의 방식Ÿ 적절한 합의를 선정할 조건(노드 수 등)을 명시Ÿ 합의로 인한 부정공격(51% 공격*) 등으로 인해 합

의가 동작하지 않는 경우를 명시

장애허용성

Ÿ 하드웨어 또는 소프트웨어 장애가 발생한 경우에도 블록체인 시스템 및 각 구성요소가 의도한 대로 동작(정상 가동)하는지 여부를 평가

Ÿ 노드 장애 허용성Ÿ 네트워크 장애, 분단 공격

허용성

Ÿ 정상 가동의 정의를 명확히 함Ÿ 정상 가동을 위한 노드·네트워크 조건을 확인Ÿ 네트워크 분단 등에 따른 포크(Fork) 발생 후 메

인체인의 결정 방법을 명확히 함

회복성Ÿ 블록체인 시스템 중단 또는 장애 발

생 시 데이터를 복구하고 정상 상태로 복원할 수 있는 정도를 평가

Ÿ 노드 장애의 회복성(회복방법, 회복시간 등)

Ÿ 네트워크 환경 또는 데이터 양 등의 전제조건을 확인

보안 기밀성Ÿ 블록체인 시스템이 권한이 없는

자가 데이터에 접근하는 것을 방Ÿ 접근 관리

Ÿ 데이터에 접근할 권리(읽기, 쓰기 등)의 관리 방법, 설정 등을 명확히 함

Page 12: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 9 -

지하는지 여부를 평가

Ÿ 데이터 암호화Ÿ 데이터 암호화의 유무를 명확히 함Ÿ 암호화 대상, 범위를 명확히 함Ÿ 암호화 데이터의 제3자에 의한 검증방법을 명확히 함

Ÿ 트랜잭션 암호화Ÿ 트랜잭션 암호화의 유무를 명확히 함Ÿ 암호화 대상, 범위를 명확히 함Ÿ 암호화 데이터의 제3자에 의한 검증방법을 명확히 함

무결성Ÿ 블록체인 시스템이 권한이 없는

자가 데이터를 수정하는 것을 방지하는지 여부를 평가

Ÿ 멤버 관리 Ÿ 멤버 관리 기능의 유무를 명확히 함

Ÿ 접근 관리Ÿ 데이터에 접근할 권리(읽기, 쓰기 등)의 관리 방법,

설정 등의 명시

부인 방지

Ÿ 블록체인 시스템에서 처리된 행위에 대해 부인할 수 없도록 해당 행위가 발생했음을 증명할 수 있는 정도(부인 방지)를 평가

Ÿ 합의 방식Ÿ 합의 방식에 따른 블록 확정 여부와 포크(Fork)

발생 후 메인체인의 결정 방법을 명확히 함

Ÿ 하드 포크 정책Ÿ 하드포크*와 관련된 규칙, 방법, 영향 범위를 명확

히 함

진정성

Ÿ 블록체인 시스템 내 분산 노드들 간에 동일한 자원(데이터 등)이 저장되고 기화되는 것을 보장하는지 여부를 평가

Ÿ 동기화 방식Ÿ 분산 노드 간의 데이터 동기화 수행 방법과 동기

화된 데이터 결정 방식을 명확히 함

Ÿ 합의 방식Ÿ 합의 방식에 따른 블록 확정 여부와 포크(Fork)

발생 후 메인체인의 결정 방법을 명확히 함

이식성

적응성Ÿ 블록체인 플랫폼 또는 서브시스템

의 기존시스템으로의 적용 가능 여부에 대한 분석이 필요

Ÿ 하드웨어 적응성 Ÿ 노드와 관련된 조건을 명확히 함

Ÿ 애플리케이션 적응성 Ÿ 애플리케이션과 관련된 조건을 명확히 함

치환성Ÿ 기존에 활용 중인 블록체인 플랫

폼 또는 서브시스템의 대체 가능성에 대한 분석이 필요

Ÿ 기존 시스템의 치환성 Ÿ 기존 시스템과 치환 가능 여부를 명확히 함Ÿ 다른 블록체인 시스템Ÿ 과의 치환성

Ÿ 다른 블록체인 시스템과 치환 가능 여부를 확인

Page 13: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 10 -

중항목 소항목 필요성 관련 기술 및 특성 평가 기준을 활용할 때의 유의점

보수⋅운용성

모듈성

Ÿ 하나의 구성요소(모듈)에 대한 변경이 다른 구성요소에 미치는 영향이 최소화되도록 모듈화되어 있는지 여부를 평가

Ÿ 높은 모듈성을 가지고 있는 전체 시스템은 블록체인 플랫폼과 서브시스템이 독립적으로 구성되어 교체·수정 시의 영향 범위가 작아 교체 비용 및 예상되는 결함 또는 위험을 감소

Ÿ 블록체인 플랫폼Ÿ 블록체인 플랫폼의 구성요소, 기술의 모듈성에 관

해 명확히 함 예) 합의 방식은 높은 모듈성을 가지고 있어 다른 방식으로의 변경이 쉬움

Ÿ 서브시스템Ÿ 서브시스템의 구성요소, 기술의 모듈성에 관해 명

확히 함

Ÿ 스마트 계약 Ÿ 스마트 계약의 사양(기술 언어 등) 명시

재사용성

Ÿ 블록체인 플랫폼 또는 서브시스템을 다른 새로운 시스템 구축 시 재사용 가능한지 여부를 평가

Ÿ 재사용성이 높은 블록체인 플랫폼과 서브시스템은 다른 시스템으로의 적용이 용이하여 비용 절감이 가능

Ÿ 블록체인 플랫폼Ÿ 합의 방식의 재사용성을 명확히 함 예) A블록체인

플랫폼에 구현된 합의 방식은 B블록 체인 플랫폼에도 구현 가능

Ÿ 서브시스템Ÿ 서브시스템 재사용성을 명확히 함 예) A서브시스템은 X시스템에서 이용 가능

Ÿ 스마트 계약 Ÿ 스마트 계약의 사양(기술 언어 등)을 명확히 함

해석성

Ÿ 시스템의 모니터링을 통하여 분산 환경 에서의 장애 감지, 장애 원인 파악, 장애 영향 범위 분석 등의 활동이 가능 한지 평가

Ÿ 장애 감지

Ÿ 장애 발생 시 장애를 감지하는 기능의 유무를 명확히 함

Ÿ 장애 발생 위치(노드 장애, 네트워크 장애 등)를 감지하는 기능의 유무를 명확히 함

Ÿ 장애의 영향 범위를 확인할 수 있는 기능의 유무를 명확히 함

o 보수⋅운용: 일본정보처리추진기구(IPA, International-technology Promotion Agency)가 정리한 중앙집중형 시스템 평

가 방법에서 블록체인 기술과 관련 있는 항목 추출

Page 14: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 11 -

Ÿ 성능 분석Ÿ 데이터 처리, 네트워크, 확장성 등의 성능 모니터

링 수행 유무를 명확히 함

수정성

Ÿ 블록체인 기술은 새로운 결함의 발견으로 비교적 빈번한 수정이 이루어짐

Ÿ 분산 환경에서의 결함의 영향 범위와 수정 진행 사항, 스마트 계약의 결함, 부정(不定) 접근에 의한 부정 블록 발생 등의 대처 방안의 고려가 필요

Ÿ 버그 대응 ⦁버그 수정 방법과 책임 소재를 명확히 함

Ÿ 스마트 계약Ÿ 블록체인 시스템은 등록된 내용을 수정할 수 없기

때문에 스마트 계약에 버그가 발생했을 경우의 대응 방안을 명확히 함

Ÿ 하드 포크

Ÿ 블록체인 시스템은 등록된 내용을 수정할 수 없기 때문에 버그 또는 권한이 없는 접근에 따른 부정 데이터가 발생했을 경우 블록의 복구 기능에 대해 명확히 해야 함

시험성

Ÿ 블록체인의 동작 구조상 확정된 블록은 취소할 수 없어 스마트 계약에 관한 충분한 시험이 가능한지 고려가 필요

Ÿ 분산 환경에서 동작하는 블록체인은 어떤 분산 환경에서 어떤 시험이 가능한지 여부의 파악이 요구

Ÿ 블록체인 플랫폼

Ÿ 노드 구성, 네트워크 구성에 따라 시험 결과에 영향을 미칠 수 있어 특정 환경에서 어떠한 기능, 성능 시험이 가능한지 환경 변화에 따라 어떤 시험을 수행할지 명확히 해야 함

Ÿ 노드/네트워크 장애Ÿ 확장성Ÿ 합의 방식

Ÿ 분산 환경에서는 노드 또는 네트워크 장애에 대한 내성, 용량 또는 노드의 확장성 시험, 합의 방식의 시험이 필요하여 어떠한 시험이 수행 가능한지 명확히 해야 함

Ÿ 스마트 계약Ÿ 블록체인 시스템은 등록된 내용을 수정할 수 없기

때문에 스마트 계약의 충분한 시험이 필요하여 이와 관련된 시험이 가능한지 명확히 해야 함

Page 15: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 12 -

중항목 소항목 필요성 관련 기술 및 특성 평가 기준을 활용할 때의 유의점

연구개발

블록체인 엔진 요소 연구 개발

Ÿ 블록체인 기술을 중앙집중형 시스템에 적용할 경우 블록체인 플랫폼과 서브시스템의 연구개발이 필요

Ÿ 기업의 요구사항을 만족시키기 위한 연구개발 수준을 명확히 하고 그에 소요되는 비용 추측이 필요

Ÿ 새로운 합의 방식Ÿ 고속의 P2P 프로토콜 개발

Ÿ 성능향상 등을 위한 블록체인 플랫폼 기술 연구 개발 비용 추정

Ÿ 기존 기술의 기능·성능 수준을 정리하고 목표하는 기능·성능을 정의하고 명확히 함

서브시스템 연구 개발

Ÿ 애플리케이션 개발Ÿ 계약 개발 환경

Ÿ 적용 분야의 확장을 위한 서브시스템의 개발 비용 추정

Ÿ 기능·성능을 명확히 예측

구현

HW 비용 Ÿ 하드웨어(각 노드의 비용, 서브시스템 장비 비용 등), 소프트웨어(블록체인 플랫폼, 서브시스템 운용을 위한 소프트웨어, 애플리케이션 비용 등), 구현(설치비용 등)에 따른 적절한 비용 제시가 필요

Ÿ 노드Ÿ 네트워크Ÿ 서브시스템

Ÿ 비용 대상과 범위를 명확히 함Ÿ 블록체인 플랫폼의 분류(퍼블릭형, 컨소시엄형, 프

라이빗형 등)에 따른 대상, 범위에 대한 차이를 명확히 함

SW 비용Ÿ OSŸ 미들웨어Ÿ 애플리케이션

Ÿ 비용 대상과 범위를 명확히 함

시스템 구현 비용

Ÿ 조립, 구현, 실험 Ÿ 비용 대상과 범위를 명확히 함

보수운용

운용비용Ÿ 블록체인 시스템은 노드가 분산된

시스템으로 네트워크 또는 노드의 유지보수 및 운영비용 부담 주체의 확인

Ÿ 노드Ÿ 네트워크Ÿ 합의 비용

Ÿ 비용 대상과 범위를 명확히 함

보수비용 Ÿ 버그 수정Ÿ 비용 대상과 범위를 명확히 함Ÿ 수정 또는 대응을 위한 기술 수준을 명확히 함

o 비용: 시스템 운영 업체가 비용으로 인식하는 사항으로 연구 개발, 구현, 보수⋅운영 측면으로 분류하여 평가 기준을

구성함

Page 16: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 13 -

품질 특성 품질 부특성 평가 항목명 평가 항목의 목적

기능 적합성(Functional suitability)

완전성(Completeness)

기능 구현 완전성블록체인 시스템이 명시된 기능 및 시나리오가 모두 구현되었는지 여부를 평가

정확성(Correctness)

기능 구현 정확성블록체인 시스템에 구현된 기능 및 시나리오가 정상적으로 동작하는지 여부를 평가

적절성(Appropriateness)

피어/노드 검색 알고리즘 적절성

피어/노드를 검색하는 데 이용되는 알고리즘에 대한 평가. 노드가 네트워크의 일부가 되기 위해서는 다른 노드와 연결돼야 하는데 중앙 서버 없이 네트워크 내의 다른 노드/피어를 검색하는 알고리즘(근접 피어 우선 검색 등)에 대한 검증이 필요

가스 및 가스 제한량 설정값 적절성

가스와 가스 제한량을 적절하게 설정했는지에 대한 평가. 트랜잭션을 위해 네트워크에 지불하는 사용료이자, 네트워크를 유지하는 노드들의 보상으로 쓰이는 것으로 너무 낮게 책정하면 트랜잭션이 처리가 안될 수도 있고, 너무 높으면 사용자가 너무 비싼 이용료를 지불하게 됨.

개임 키 보관/백업 정책 적절성

개인 키를 보관하고 백업하는 정책이 적절한지에 대한 평가

성능 효율성(Performanc e efficiency)

시간 효율성(Time behaviour)

블록 생성 시간 효율성

블록을 생성하는 데 소요되는 시간을 평가. 블록 생성 시간에는 트랜잭션 생성 및 브로드캐스팅 시간, 합의 증명 시간, 블록 브로드캐스팅 시간 및 로컬 디스크의 블록체인에 블록이 추가되는 시간 등 여러 요소 중 선택/조합할 수 있음

합의 증명 시간 효율성

블록을 생성하기 위한 요건인 합의 증명을 완료하는 데 소요되는 시간을 평가. 합의

2.2 블록체인 기반 소프트웨어 품질 평가

2.2.1 블록체인 기반 소프트웨어 품질 평가

TPS(Transaction Per Second: 초당 트랜잭션 처리량)과 같은 성능만으로는

신뢰성과 보안성이 강점인 블록체인 시스템의 품질을 판단할 수는 없다. 그러

나 블록체인의 품질에 관한 국제 표준이나, 플랫폼 선택의 판단 기준, 그리고

블록체인 플랫폼을 기반으로 하는 서비스의 품질 확보 방안이 아직 논의 중이

다. ICT시험인증연구소(㈜와이즈스톤 부속 품질인증연구소)에서는 이러한 문제

들의 해법으로 블록체인 기반 소프트웨어 품질 평가 모델을 제시했다[4]. 이 모

델은 개발과정에서 블록체인의 품질을 확보할 수 있는 하나의 방안으로 블록체

인의 품질 요소를 ISO/IEC 25023 품질 특성, 품질 부특성에 매핑한 블록체인

서비스의 품질모델이다. [표 2]는 블록체인 기반 소프트웨어 품질 모델이다.

Page 17: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 14 -

증명 알고리즘마다 합의 증명시간에 영향을 주는 요소가 다를 수 있으므로 각각의 요소에 대하여 명확히 정의하고 사용해야 함

브로드캐스트 응담 시간 효율성

트랜잭션 및 블록에 대한 브로드캐스트 응답 시간을 평가. P2P 네트워크의 품질 및 성능에 따라 영향 받음

조회 시간 효율성블록의 트랜잭션을 조회하기 위해 요청해서 결과가 출력되는 시간을 평가

용량(Capacity)

트랜잭션 처리량

지정된 시간동안 완료되는 트랜잭션 수에 대한 평가. 초당 트랜잭션 수(Transaction Per Second)로 표시하며, 총 완료된 트랜잭션을 총 소요시간(초)으로 나누어 계산

조회 처리량

지정된 시간동안 완료되는 조회 작업 수에 대한 평가. 초당 조회 수(Read Per Second)로 표시하며, 총 조회 작업을 총 소요시간(초)으로 나누어 계산

처리 성능 확장성

처리 성능을 향상 시킬 방법과 그에 따른 트로에드오프를 고려하였는지를 평가. 블록 사이즈, 블록 채굴 난이도, 가스 제한량, 트랜잭션 사이즈 등 처리성능을 향상 시킬 방법에 대하여 정의하고 각각 적용시 품질 전반에서 미치는 영향을 확인함

호환성(Compatability)

상호운용성(Interoperability)

외부 시스템과의 연결성

비트코인 전자지갑, 스마트 계약 호출 등 블록체인 기반의 서비스에 접근하기 위한 REST API 등, 외부 인터페이스(중앙집중형 시스템 또는 타 블록체인 시스템)가 다양하게 노출되어 있고 정상 작동하는지 평가

자료 구조 교환성블록체인 내부에서 사용되는 여러 가지 자료 구조 중 타 시스템과 교환하여 사용 가능한 비율이 적절한지 평가

사용성(Usability)

운영성(Operability)

사용자 인터페이스 맞춤성

사용자가 인터페이스를 임의로 맞추어 변경할 수 있는지를 평가

공용키/개인키 사용 용이성

공용 키와 개인 키의 사용자 인터페이스가 사용이 용이한지 평가. 공용 키와 개인 키는 기존 웹 서비스의 ID와 PW처럼 사용되지만 기반 지식이 없는 사용자에게는 생소함

송금 주소 사용 편이성 및 소유자 확인 편이성

송금 주소가 사용하기 편리한지 여부를 평가. 블록체인은 공용 키를 일종의 계좌번호처럼 사용하므로 사용하기가 힘들며, 주소의 소유자를 인식하기 어려움

사용자 오류방지성(User error protection)

입력 유효성 점검성

사용자의 입력이 유효한지 점검하는 비율을 평가. 한 번 암호화된 트랜잭션은 되돌릴 수 없으므로 사용자의 입력 유효성 점검이 최대한 필요함

Page 18: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 15 -

신뢰성(Reliability)

성숙성(Maturity)

테스트 커버리지 확보성

블록체인 기반 서비스의 기능에 대한 테스트 커버리지가 확보되는 정도를 평가

가용성(Availability)

단일 장애점 회피성

블록체인 구성요소 중 단일 장애점이 될 요소의 존재 가능성을 평가. 단일 장애점은 단일 지점이 동작하지 않으면 시스템 전체가 중단되는 요소

결함허용성(Fault tolerance)

노드 장애 허용성

악의적인 노드 또는 고장난 컴퓨터가 존재해도 블록체인이 정상 가동될 수 있는지를 평가하는 것으로 정상 가동을 위한 조건이 정의되어야 함

복구성(Recoverability)

평균 회복 시간블록체인 시스템이 결함으로부터 회복하는 시간 평가

보안성(Security)

기밀성(Confidentiality)

접근 통제성블록체인 시스템이 비인가 접근으로부터 기밀 데이터를 보호할 수 있는 정도를 평가

데이터 암호화 정확도

데이터 및 트랜잭션의 암호화 복호화가 요구 사항대로 정확히 구현되어 있는지를 평가

암호화 알고리즘 강도

데이터 및 트랜잭션의 암호화 알고리즘의 강도가 충분한지를 평가

무결성(Integrity)

데이터 무결성블록체인 시스템이 비인가 접근으로부터 데이터를 수정하는 것을 방지하는 정도를 평가

유지보수성(Maintainability)

모듈성(Modularity)

컴포넌트 결합도블록체인 시스템의 컴포넌트들이 독립성을 유지하는 정도 및 다른 컴포넌트에 주는 변경의 영향을 받지 않는 정도를 평가

재사용성(Reusability)

코딩 규칙 준수성소스코드가 표준 코딩 규칙을 준수하여 작성된 정도를 평가

분석성(Analysability)

시스템 로그 추적성

블록체인 시스템에서 발생된 로그로 해당 행위를 추적할 수 있는 정도를 평가

이식성(Portability)

적응성(Adaptability)

하드웨어 환경 적응성

기존 시스템이 블록체인 기반 시스템의 하드웨어 환경에 충분히 적응하는 정도를 평가

소프트웨어 환경 적응성

기존 소프트웨어가 블록체인 기반 시스템의 소프트웨어 환경에 충분히 적응하는 정도를 평가

대체성(Replaceability)

사용 유사성다른 블록체인 시스템으로 대체할 경우에도 사용자 기능이 추가적인 작업없이 수행되는 정도를 평가

제품 품질 동등성다른 블록체인 시스템으로 교체한 후에 품질 수준이 만족되는 정도를 평가

[표 2] 블록체인 기반 소프트웨어 품질 모델

Page 19: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 16 -

public class DataCoupling{DataCallee c;

제 3 장 블록체인 품질 평가 지표

개발 소프트웨어의 현재 품질수준을 객관적으로 평가하기 위한 지표 설정이

필요하다. 소스 코드의 내부 구조와 품질을 측정하는 지표로는 결합도와 응집

도가 있다2). 결합도와 응집도, Bad Smell을 설명하고, 각 항목에 대한 예시코

드를 설명하여 어떻게 데이터베이스에서 자료를 추출해야 하는지까지 다룬다.

(1) 결합도(Coupling)

결합도는 모듈 간의 상호의존하는 정도 또는 두 모듈 사이의 연관관계를 의

미한다. 독립적인 모듈이 되기 위해서는 각 모듈간의 결합도가 약해야 하며

의존하는 모듈이 적어야 한다.

[그림 6] 결합도 스펙트럼

o 자료 결합도(Data Coupling): 모듈간의 인터페이스가 자료 요소만으로

구성된 결합도이다. 한 모듈이 다른 모듈을 호출하면서 매개 변수나 인

수로 데이터를 넘겨주고, 호출 받은 모듈은 받은 데이터에 대한 처리

결과를 돌려주는 방식으로 모듈 간의 내 용을 전혀 알 필요가 없고 다

른 모듈에 전혀 영향을 미지치 않는 가장 바람직 한 결합도이다. 간단

히 말하면, 모듈 간 파라미터로 기본 자료형(int, long, float, double,

char, short, byte, boolean) 데이터를 전달한다.

2) So Young Moon, Chae Yun Seo, R. Youngchul Kim, “A Survey for Software Visualization”, JOURNAL OF PLATFORM TECHNOLOGY, Vol. 4, No. 3, 22-29, 2016.9

Page 20: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 17 -

void Data_Caller(){int i = 1;int j = 2;c.Data_Callee(i);

}}public class DataCallee{

void Data_Callee(int i){System.out.println(i);

}}

[그림 7] 자료 결합도 추출 예시

o 스탬프 결합도(Stamp Coupling): 모듈간의 인터페이스로 배열이나 레코

드 등의 자료 구조가 전 달되는 결합도이다. 두 모듈이 동일한 자료 구

조를 조회하는 방식이며 자료 구 조의 변화는 실제로 조회하지 않는

모듈에까지도 영향을 미치게 된다. 다시 말하면, 모듈 간 파라미터로

기본 자료형이 아닌 복잡한 자료 구조(배열, 객체)이다.

public class StampCoupling{StampCallee s;

void Stamp_Caller(){s.Stamp_Callee(int[] i);

}}

public class StampCallee{

void Stamp_Callee(int[] i){System.out.println(i);

}}

[그림 8] 스탬프 결합도 추출 예시

- select class, symbol_name, ref_class, ref_symbol, ref_argument_types,

filename, ref_type from RefersTo where ref_type <> 'ma' and ref_type

<> 'e' and ref_type <> 'ec' and class <> '#' and ref_argument_typ

Page 21: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 18 -

es <> ‘’

- 호출/참조 관계 정보를 저장한 ‘RefersTo’ 테이블의 정보를 select한다. 단, 참조

타입이 ‘ma(Macros, 매크로)’, ‘e(Enums, 열거형)’, ‘ec(Enum Values, 열거형 변

수)’인 경우는 제외하고 class의 이름이 ‘#’으로 불명확한 경우도 제외한다. 자료

결합도와 스탬프 결합도는 파라미터가 자료형인지 아닌지에 따라 구분할 수 있기

때문에 파라미터가 ‘’로 없을 시는 제외한다.

o 제어 결합도(Control Coupling): 논리적인 흐름을 제어하는 데 사용하

는 제어 요소 (Function Code, Switch , Tag, Flag)가 전달되는 결합도

이다. 상위 모듈이 하위 모듈의 상세한 처리 절차를 알고 통제하는 경

우나 처리 기능이 두 모듈에 분리되어 설계된 경우이다. 즉, 모듈 간

파라미터가 모듈의 제어를 지시하는 데이터로 사용한다. 호출 파라미터

가 if문이나 switch문 같은 분기 조건으로 사용된다.

public class ControlCoupling{ControlCallee con;

void Control_Caller(){con.Control_Callee(“TRUE”);

}}

public class ControlCallee{

void Control_Callee(String s){if(s.equals(“TRUE”) System.out.println(“TRUE);else System.out.println(“FALSE”);

}}

[그림 9] 제어 결합도 추출 예시

- sselect class, symbol_name, ref_class, ref_symbol, filename, ref_type from Refer

sTo " where ref_type <> 'ma' and ref_type <> 'e' and ref_type <> 'ec' a n d

class <> '#' and ref_type <> 'lv' and ref_type <> 'cl' and ref_type <> 't'

- 호출/참조 관계 정보를 저장한 ‘RefersTo’ 테이블의 정보를 select한다. 단, 참조

타입이 ‘ma(Macros, 매크로)’, ‘e(Enums, 열거형)’, ‘ec(Enum Values, 열거형 변

수)’인 경우는 제외하고 class의 이름이 ‘#’으로 불명확한 경우도 제외한다. 제어

Page 22: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 19 -

결합도는 파라미터로 boolean 자료형과 같은 논리 자료형이 전달되는 경우로 참

조 타입이 ‘lv(Lacal variables, ’지역 변수‘)’, ‘cl(Classes, ’클래스‘)’, ‘t(Typedefs, ’

선언자‘)’ 인 경우는 제외시킨다.

o 외부 결합도(External Coupling): 한 모듈에서 외부로 선언한 데이터(변

수)를 다른 모듈에서 참조 하는 결합도이다. 모듈 간에 외부 자료를 공

유한다. 호출 파라미터에 File, Font, HTTP와 같은 외부 데이터를 전달

한다.

public class ExtCoupling{ExtCallee con;File f;

void Ext_Caller(){if(f.exists(){

e.Ext_Callee(f);}

}}

public class ExtCallee{

void Ext_Callee(File f){f.delete();

}}

[그림 10] 외부 결합도 추출 예시

- select class, symbol_name, ref_class, ref_symbol, caller_argument_types, f i len

ame, ref_type from RefersTo where ref_type <> 'ma' and ref_type <> 'e' a

nd ref_type <> 'ec' and ref_type <> 'lv' and ref_type <> 'gv' and class <> '#'

- 호출/참조 관계 정보를 저장한 ‘RefersTo’ 테이블의 정보를 select한다. 단, 참조

타입이 ‘ma(Macros, 매크로)’, ‘e(Enums, 열거형)’, ‘ec(Enum Values, 열거형 변

수)’인 경우는 제외하고 class의 이름이 ‘#’으로 불명확한 경우도 제외한다. 외부

결합도는 파라미터로 file자료형과 같은 외부 데이터가 전달되는 경우로 참조 타

입이 ‘lv(Lacal variables, ’지역 변수‘)’, ‘gv(Global variables, ’전역 변수‘)’인 경우

는 제외시킨다.

Page 23: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 20 -

o 공유 결합도(Common Coupling): 공유되는 공통 데이터 영역을 여러

모듈이 사용할 때의 결합도 이다. 공통 데이터 영역의 내용을 조금만

변경하더라도 이를 사용하는 모든 모듈에 영향을 미치게 되므로 독립

성이 약하다. 호출 시 static으로 선언된 메소드를 호출한다.

public class CommonCoupling{

void Common_Caller(){CommonCallee.Common_Callee();

}}public class CommonCallee{

static int a;

public static void Common_Callee(){System.out.println();

}}

[그림 11] 공유 결합도 추출 예시

- Select class, symbol_name, ref_class, ref_symbol from RefersTo where ref_t

ype = 'gv'

- 호출/참조 관계 정보를 저장한 ‘RefersTo’ 테이블의 정보를 select한다. 공통 결합

도는 하나의 데이터를 여러 모듈에서 공통적으로 사용하는 것을 의미한다. 따라

서 참조 타입이 ‘gv(Global variables, ’전역 변수‘)’인 경우는 제외시킨다.

o 내용 결합도(Content Coupling): 한 모듈의 다른 모듈의 내부 기능 및

그 내부 자료를 직접 참조 하거나 수정할 때의 결합도이다. 특정 모듈이

다른 모듈의 내부 기능이나 내부 자료를 참조한다. 호출 시 get/set 메

소드를 호출하고 해당 메소드가 있는 클래스에 private형 변수가 있다.

Page 24: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 21 -

public class ContentCoupling{ContentCallee c;

public void Content_Caller(){c.setC(1);c.getC();

}}

public class ContentCallee{private int c;

void setC(int x){c = x;

}void getC(){

return c;}

}

[그림 12] 내용 결합도 추출 예시

- select R.class, R.symbol_name, R.ref_class, R.ref_symbol, R.filename, R.ref

_type, R.position from RefersTo as R LEFT JOIN Meth

odImplementations as M on R.ref_symbol = M.name where R.ref_type = ' u d '

and R.class <> '#' and M.name IS NULL and R.ref_argument_types = '' a n d

R.access <> 'p' order by R.class, R.symbol_name, R.position

- 호출/참조 관계 정보를 저장한 ‘RefersTo’ 테이블의 정보를 select한다. 내용 결합

도는 참조 시에 파라미터가 존재하지 않고 접근 지정자와 같이 다른 모듈 내의

자료에 직접적으로 접근하는 경우를 의미한다. 따라서 메소드 구현 정보를 저장

한 ‘MethodImplementation’ 테이블의 정보도 select한다. 조건절을 통해서 ‘access

(접근지정자)’가 ‘p(passed)’인 경우만을 선택한다.

(2) 응집도(Cohesion)

응집도는 정보 은닉 개념을 확장한 것으로 모듈 안의 요소들 이 서로 관련

되어있는 정도, 즉 모듈이 독립적인 기능으로 정의되어 있는 정도를 의미한다.

Page 25: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 22 -

[그림 13] 응집도 스펙트럼

o 기능적 응집도 : 특정 모듈안의 모든 요소들이 한 가지 기능과 관련된

다. 이런 모듈은 오직 하나의 기능을 수행함으로써 이해하기 쉽고 수정

하기 쉽다. 모든 Statement에서 대입되는 변수가 공통적으로 사용되거

나 메소드 호출이 한번 실행된다.

- Sample 1

public class Functional{

double computePay(float hours, float wage(){double pay;

pay = wage * 40.0;pay = pay + (wage * 1.5 * (hours – 40.0));

return pay;}

}

- Sample 2

public class Functional2{

double squareRoot(double rear){double result = Math.sart(rear);return result;

}}

Page 26: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 23 -

o 순차적 응집도 : 모듈 내 한 구성요소의 출력이 다른 구성요소의 입력이

된다. 메소드의 반환 값이 다음 메소드의 입력 파라미터로 사용된다.

- Sample 1

public class Sequential{

void processGrade(){int numberGrade;int letterGrade;

//1.Get the number grade from the usernumberGrade = getGrade();

//2. Convert it from number to letterletterGrade = computeLetter(numberGrade);

//3. Display the resultsdisplayLetter(letterGrade);

}}

o 교환적 응집도 : 모듈의 모든 요소들이 공통된 데이터에 의해서 관련

없는 기능들을 수행한다. → 여러 메소드 호출에서 전달되는 파라미터가

동일하다.

- Sample 1

public class Communicational{

void Compute_Matrix(int transform_matrix[][], int inverse_matrix[][]){int[][] aMatrix = { {0}, {0} };

for(int i=0;i<5;i++){for(int j=0;j<5;j++){

aMatrix[i][j] = i+j;}

}transform_matrix = trans(aMatrix);

inverse_matrix = inverse(aMatrix);}

}

Page 27: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 24 -

o 절차적 응집도 : 모듈 내 요소들이 연관성이 있고 특정 순서에 의해 수

행된다. 하나의 클래스에 있는 메소드 여러 개를 호출한다.

- Sample 1

public class Procedural extends Letter{

void sendLetter(){//1. Insert the content of the letterwriterBody();

//2. writer salutationwriteSalutation();

//3. send letter to recipientsend();

}}

o 시간적 응집도 : 모듈 내 요소들이 서로 다른 기능을 같은 수행에 실행

한다. 초기화 모듈은 흔히 볼 수 있는 시간적 응집도 모듈이다. 메소드

호출은 일어나지 않고 변수의 초기화만 실행한다.

- Sample 1

public class Temporal{

int no_student;int no_department;String university_name;

void Init_Variables(){no_student = 0;no_department = 0;university_name = “University”;

}}

Page 28: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 25 -

범위 항목 설명

메서드

1)Long Parameter List 메서드 파라미터의 개수가 너무 많음

2)Feature Envy 다른 클래스의 속성을 빈번히 사용

3)Message Chains 메서드의 호출 연결고리가 복잡

o 논리적 응집도 : 모듈 내 요소들이 논리적으로 연관된 기능이나 비슷한

기능을 수행한다. 서로 다른 기능이지만 많은 부분이 중복된다.

- case에 따라 비슷한 기능을 수행하는 switch문이 논리적 응집도에 포함

된다.

- Sample 1

public class Logical{long solve_equation(int no_equ, long x){

long y = 0;switch(no_equ){

case 1:y = 5 * x * x;break;

case 2:y = 6 * x * x * x;break;

case 3:y = 7 * x * x * x * x;break;

}y = y + 6 * x + 4;return y;

}}

(3) Bad Smell Pattern

Bad Smell은 Martin Fowler가 정의한 코드 리팩토링이 필요한 코드에 대한

정의이다. 리팩토링은 코드의 기능을 그대로 유지한 채 수정하는 것으로 코드

의 복잡도를 줄일 수 있다. 다음 표는 코드에서 추출할 수 있는 Bad Smell에

대해 설명이다.

Page 29: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 26 -

4)Middle Man 클래스가 위임을 많이 함

5)Comments 주석이 너무 많음

6)Switch Statements 스위치문이 너무 많음

7)Temporary Field객체의 인스턴스 변수가 특정 상황에서만 세팅되는 경우

클래스

8)Lazy Class 사용하지 않는 기능이 존재

9)Data Class 필드에 get, set 메서드만 존재

10)Large Class 클래스의 인스턴스 변수가 많음

11)Refused Bequest 상속받은 메서드를 모두 사용하지 않음

[표 3] Bad Smell Pattern 항목 및 설명

Page 30: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 27 -

제 4 장 블록체인 품질 측정 방법

블록체인 시스템은 다양한 언어로 구현되고 있다. 그 중에서 Java 기반 블록

체인 시스템과 웹 어플리케이션 부분에 많이 사용되고 있는 Go 기반 블록체인

시스템도 존재한다. 블록체인 품질 측정 방법으로 Java와 Go로 구현된 블록체

인 시스템의 품질 측정 방법(코드 가시화)을 설명한다.

4.1 Java 기반 블록체인 소프트웨어의 품질 측정

4.1.1 툴체인 구성

o [그림 14]는 Java 기반 자동 가시화 체계이다[5]. 이를 툴체인

(Tool-Chain)이라 한다. 기존의 툴체인은 정적 분석 도구로 Source

Navigator(SN)를 사용한다[6]. 소스 네비게이터를 이용하여 Java 코드를

분석하게 되면 Java 코드 분석 정보인 SNDB 파일들을 읽는다. 하지만

SNDB 파일은 읽을 수 없는 바이너리 코드로 작성되어 있다. 분석된

결과는 데이터베이스(SQLite)에 저장된다[7]. SQLite는 다른 데이터베이

스에 비해 비교적 가볍기 때문에 툴체인에 사용한다. 데이터베이스에

저장된 정보들을 추출하여 DOT 스크립트를 작성한다. 쿼리를 이용하여

추출된 데이터를 DOT 스크립트로 생성한 다음 시각화 도구인

Graphviz에서 실행시킨다. 그 결과 분석된 코드가 종류별 가시화 그래

프로 출력된다.

[그림 15] Java 기반 자동 코드 가시화 체계

o 기존 툴체인에 사용하던 소스 네비게이터는 C, Java 언어 분석이 가능

하다. 그러나 소스 네비게이터는 Java 코드의 정적 분석 시, 데이터가

Page 31: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 28 -

부족하여 취약성 추출 및 가시화가 어렵다. 이런 문제를 해결하기 위

해, 향후의 툴체인에는 JavaParser를 적용하여 Java 코드를 분석한다.

o [그림 16]은 데이터베이스의 테이블 구성도로, JavaParser를 이용하여

Java 코드를 정적 분석한 정보이다. 이 구성도를 이용하여 모든 구문

에서의 상속 관계, 변수 선언, 메서드 선언, 호출 관계 등의 정보를 추

출하였다.

[그림 16] 데이터베이스 테이블 구조도

4.1.2 결합도/응집도 가시화

o Java 코드 내에서의 결합도 수준별 가시화를 설명한다. 결합도는 자료

결합도부터 내용 결합도까지 6개로 구성되어 있으며, 메서드간의 호출

시 주고받는 매개변수에 의하여 결합도 지수를 측정할 수 있다.

[그림 17] 결합도 수준별 지표

o [그림 18]은 자료 결합도에 대한 예제 코드와 추출된 그래프이다. 왼쪽

Page 32: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 29 -

의 예제 코드에서 Read 클래스와 Print 클래스가 있다. Read 클래스에

는 read_and_Print 메서가 있고, Print 클래스에 선언된 print_char 메서

드를 호출한다. 호출하는 read_and_Print가 print_char에게 매개변수로

char 값을 보낸다. 이런 방식으로 int, double, float 등의 자료형 변수를

매개변수로 주고받을 경우를 자료 결합도로 간주한다. 오른쪽 그래프는

Read 클래스에서 Print 클래스로 호출하는데, [DT]*1=1에서 DT가 1번

존재하고 결합도 지수가 1이라는 의미이다. 이런 방식으로 스탬프/제어

/외부/공통/내부 결합도를 정의하여 결합도 그래프를 추출할 수 있다.

[그림 18] 자료 결합도의 예제 코드와 추출된 그래프

o [그림 19]와 [그림 20]은 예제 코드의 결합도와 응집도 측정 결과이다.

두 그림은 결합도와 응집도 측면에서 코드의 복잡도를 가시화한다.

o [그림 19]는 응집도 측면에서 코드의 복잡도를 가시화한 것이다.

- DBManager 클래스에는 메서드가 20개 있고, 이들의 응집도는 메서드

명 앞에 있는 값의 합을 개수로 나누면 된다.

- 즉, (m1 + m2 +... m19 + m20) / 20 = (0.04+0.24+1.0+1.0+....

+1.0+0.77).20=0.5185이다.

o [그림 20]은 차량용품 관리 시스템의 결하볻 결과이다.

- SellSearchPanel 클래스는 DBManager와의 결합도가 0.94이다.

Page 33: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 30 -

[그림 19] 차량용품 관리 시스템의 응집도

[그림 15] 차량용품 관리 시스템의 결합도

Page 34: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 31 -

4.2 Go 기반 블록체인 소프트웨어의 품질 측정

4.2.1 툴체인 구성

o [그림 16]은 Go 기반 블록체인 코드의 자동 가시화 툴체인이다. Go 코

드의 정보를 추출하여 시각화 그래프를 추출한다.

- Go 라이브러리에서 기본으로 제공하는 GoParser를 이용하여 Go 코드

의 AST 구조에서 정보를 추출한다.

- 분석된 결과를 데이터베이스에 저장한다. 저장할 때 쓰는 데이터베이스

는 Java와 마찬가지로 SQLite를 사용하고 데이터베이스에 저장된 정보

들을 추출하여 DOT 스크립트를 작성한다. 이때, 필요한 데이터를 추출

하기 위한 쿼리를 종류별로 작성한다.

- 쿼리를 이용하여 추출된 데이터를 DOT 스크립트로 생성한 후 시각화

도구인 Graphviz에서 실행시키면, 분석된 코드가 종류별 가시화 그래

프로 출력된다.

[그림 16] Go 코드의 정적 분석을 위한 툴체인 구성도

4.2.2 GoParser 트리 구조 분석

o GoParser는 코드를 AST 구조로 파싱만하기 때문에 필요한 분석 데이

터를 추출하여 데이터베이스에 저장할 수 있도록 재구성해야 한다. [그

림 17]은 GoParser로 분석한 Go 코드의 구조이다.

Page 35: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 32 -

[그림 17] GoParser로 분석한 Go 코드의 구조

o Go 코드의 분석 결과

- Go 파일은 *ast.File로 묶여 있고, *ast.GenDecl과 *ast.FuncDecl로 분리

할 수 있다.

- *ast.GenDecl은 *ast.ValueSpec과 *ast.TypeSpec, *ast.ImportSpec의 정보

가 담겨있는 ast.Spec 배열로 이루어 진다.

- ValueSpec에는 Names, Type, Values로 분류되어 있다. Names는 변수

의 이름에 대한 정보이고, Type은 변수의 타입 정보, Values는 변수의

값에 대한 정보가 있다.

- *ast.FuncDecl은 함수의 정보로 이루어져 있다. *ast.FuncType은 함수의

타입 정보가 저장되고, *ast.BlockStmt는 함수의 내용에 관한 정보가 들

어있다.

- BlockStmt는 함수 내에 선언되어 있는 내용들이 여러 개의 Statement

로 이루어진다.

4.2.3 결합도 가시화

o Go 코드 내에서의 결합도는 함수끼리의 호출 시 주고받는 매개변수에

의하여 결합도 지수를 측정할 수 있다.

o [그림 18]은 스탬프 결합도의 예제 코드와 추출 그래프이다. Read_and

Print 함수와 Read_Array 함수, Print_Array 함수가 있다.

Read_and_Print 함수에서 Read_Array함수와 Print_Array 함수를 호출

하고 있다. Read_Array 함수와 Print_Array 함수는 모두 매개변수로

string 포인터를 받고 있고 Read_and_Print 함수는 string 배열 값을 보

Page 36: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 33 -

내고 있다. 이와 같이 배열이나 슬라이스 등의 변수를 매개변수로 주고

받을 경우 스탬프 결합도로 체크한다. 오른쪽의 그래프는

Read_and_Print 함수에서 Read_Array 함수와 Print_Array 함수로 호출

이 있는데 [ST]가 1번 존재하고 결합도 지수가 2이라는 표시이다. 자료

결합도는 Stamp Coupling이기 때문에 [ST]라는 약자로 마크한다. 또한

스탬프 결합도는 자료결합도의 2배이기 때문에 하나의 결합도 지수가

2이다. 이런 방식으로 자료/제어/외부/공통/내부 결합도를 정의하여

결합도 그래프를 추출할 수 있다.

[그림 18] Go 코드의 스탬프 결합도 예제 코드와 추출 그래프

o 다음은 Coupling을 가시화하기 위한 예제 Go 코드이다. [그림 19]는 전

체 예제 코드를 그래프로 가시화한 결과이다.

- 자동 가시화 툴체인으로 전체 예제 코드를 분석하면 Coupling이 가시

화된 그래프가 생성된다. 6개 Coupling 결과가 모두 표시된다.

- 각 결합도에 대한 약어 정보를 6칸을 표시하고 각 패키지를 사각형, 각

함수를 타원형으로 가시화한다.

- 각 함수 간의 호출 정보를 통해 서로의 결합도를 자동으로 가시화하고

리팩토링을 통해 호출에 필요한 정보를 다른 패키지나 함수가 아닌 자

기의 함수로 옮길 수 있다.

- 따라서 결합도는 감소할 것이고 코드의 취약점은 줄어들 것이다.

Page 37: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 34 -

[표 4] 예제 코드 중 Stamp 패키지의 코드

[그림 19] Go 전체 예제 코드의 결합도 가시화 그래프

Page 38: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 35 -

제 5 장 결론

o 블록체인 품질평가지표(안) 및 품질측정방법 보고서에서는 국내외 블록체

인의 품질 평가 모델 및 측정 방법에 대한 연구와 기술 자료를 조사하고

분석하였다.

o 블록체인의 품질평가모델은 국내외에서 일본 경제산업성의 모델과 한국

와이즈스톤사의 모델 외에는 구체화된 사례는 없었다. 현재 블록체인 소프

트웨어의 품질에 관한 연구가 아직은 초기 단계라 할 수 있다.

o 블록체인 소프트웨어의 품질을 측정하기 위해서는 블록체인의 보안적 측

면뿐만 아니라 코드에서부터 소프트웨어공학적 방법으로 접근이 필요하고,

코드의 복잡도 제거 및 고품질 방법에 대한 연구가 필요할 것이다.

o 아직까지 블록체인 코드의 정적/동적 분석 도구 및 연구가 부족한 실정이

다. 본 보고서에서는 소프트웨어공학의 역공학 가시화 메커니즘을 통해 블

록체인 소프트웨어의 품질 측정 방법을 제시하였다.

- 이 가시화 체계는 Java 및 Go 버전의 블록체인 소프트웨어 소스 코드를

정적 분석할 수 있다.

- Java와 Go 코드 모두를 분석할 수 있는 파서는 존재하지 않기 때문에 기존

도구를 확장하여 객체지향 코드 분석에 맞는 정적 분석 도구를 적용하였다.

- 이는 다양한 품질지표를 통하여 Java 및 Go 버전의 블록체인 코드의 품질

을 분석하고 가시화가 가능하게 도와준다.

- 또한 코드 내부를 가시화하기 때문에 개발자가 쉽게 코드의 복잡도를 줄일

수 있으며, 코드의 버그 발생 가능성을 예방할 수 있다.

- 궁극적으로 블록체인 시스템의 고품질화가 가능할 것으로 기대한다.

o 향후에는 Smart Contract에 사용되는 언어들인 Lua와 Solidity 언어에 대

한 분석 및 적용이 필요할 것이다.

Page 39: 블록체인품질평가지표(안) 및 블록체인의 취약점 분석 …selab.hongik.ac.kr/down/project_c/block3.pdf블록체인품질평가지표(안) 및 품질측정방법보고서

- 36 -

[참 고 문 헌]

[1] Blockchain for Enterprise Applications(2015), Tractica

[2] 일본 경제산업성, “블록체인 기술을 활용한 시스템의 평가 기준 정비 등의

조사”, 2017.03

[3] 금융보안원, “일본 경제산업성의 블록체인 기반 시스템 평가 기준 소개 및

시사점”, 보안연구부-2017-016.

[4] 와이즈스톤 ICT시험인증연구소, http://tecel.kr/research/block-chain

[5] 박보경, 권하은, 손현승, 김영수, 이상은, 김영철, “소프트웨어 가시화를 통

한 품질 개선 사례 연구”, 정보과학회 논문지, Vol.41, No.11, pp.935-942.

2014

[6] Source Navigator, http://sourcenav.sourceforge.net/

[7] SQLite, https://www.sqlite.org/index.html