[DVT 시리즈] #2: DVT 기술 딥다이브

밸리데이터의 슬래싱 리스크 기술인 DVT의 원리

장민혁
CURG
8 min readApr 21, 2023

--

장민혁 | CURG | mihnhyuk@naver.com

목차

[DVT 시리즈] #1: 분산 키 오퍼레이팅 기술, DVT를 알아보자

[DVT 시리즈] #2: DVT 기술 딥다이브

[DVT 시리즈] #3: DVT 기술 구현체 | SSV, Obol

TL;DR

1. SSS는 어떤 그룹에 일정 수 이상이 없으면 비밀이 공개될 수 없도록 비밀을 배포하기 위한 비밀 공유 알고리즘이다.

2. MPC는 어떤 연산에 필요한 데이터가 여러 곳에 분산되어 있을 때 그 데이터를 서로에게 공개하지 않으면서 원하는 연산과 같은 결과를 얻게 하는 기술이다.

3. DKG는 여러 주체가 참여하여 키를 생성하는 과정에서, 원본 키를 누구도 알 수 없게 만드는 기술이다.

개요

1편에서 알 수 있었듯이, DVT 기술의 목적은 노드의 단일 실패 지점을 예방하여 슬래싱 리스크를 줄이고, 그 과정에서 밸리데이터 키를 안전하게 분배하는 것입니다. 이번 글에서는 DVT 기술을 구체적으로 어떻게 구현하는지 알아보도록 하겠습니다.

draw.io / by Scott Choo

DVT의 핵심 기술은 크게 세 가지로 설명할 수 있습니다. 밸리데이터의 키를 나누는 Shamir’s Secret Sharing, 원하는 계산을 인풋 데이터를 감춘 상태에서 계산할 수 있게 해주는 Multi-Party Computation, 분산 키 암호화 과정에 보안성을 더해주는 Distributed Key Generation입니다.

SSS(Shamir’s Secret Sharing)

SSS는 어떤 그룹에 일정 수 이상이 없으면 비밀이 공개될 수 없도록 비밀을 배포하기 위한 비밀 공유 알고리즘입니다. DVT에서 밸리데이터의 키가 이 비밀에 해당합니다.

draw.io / by Scott Choo

위 그림은 SSS의 원리를 간단하게 설명한 것입니다. 이 그림에서 직선의 y 절편에 해당하는 값 S는 공유하고자 하는 비밀입니다. 그룹 참여자 A, B, C에게는 S를 지나는 직선 위의 값을 각각 공유합니다. 이때, 직선 위의 점들이기 때문에 그룹 참여자 중 둘 이상이 모이면 비밀 S를 복원할 수 있게 됩니다. 비밀을 공유하기 위한 식은 1차 식의 직선이 아닌 더 고차 다항식을 사용하여 비밀 복원에 필요한 임계 값을 조절할 수 있습니다.

그러나 이 방식에는 한 가지 문제가 있습니다. 비밀을 공유 받는 참여자는 자신이 받은 값이 올바른 비밀인지 알 수 없습니다. 비밀을 공유하는 당사자가 악의적으로 잘못된 정보를 줄 수도 있고, 통신 과정에서 데이터가 손상될 수도 있기 때문입니다.

이런 경우를 방지하기 위해 비밀을 공유할 때 방정식의 형태를 공유하는 방법이 있습니다. 예를 들어, 직선의 경우에는 기울기를 알려주는 방식입니다. 그룹 참여자 A, B, C는 각각 공유 받은 데이터와 그래프의 형태를 서로 비교하여 자신의 데이터가 올바른 값이라는 것을 확인할 수 있습니다. 이러한 방식을 Verifiable Secret Sharing(VSS)이라고 합니다. VSS를 사용하면 기본 방식보다 임계 값이 하나 감소하는 것을 알 수 있습니다. 이렇게 SSS는 기본 방식에서 몇 가지 변형된 방식들이 존재하고, 실제로 이러한 변형된 방식들을 주로 사용합니다.

MPC(Multi-Party Computation)

위에서 설명한 SSS 방식만으로는 예상되는 문제점들이 몇 가지 있습니다. 먼저, 공유 받은 분산 키를 이용해 임계 값 이상의 노드들이 담합하게 되면 밸리데이터의 키를 복원할 수 있습니다. 또한, 결국 체인에 유효성 검사를 하고 서명을 제출하기 위해서는 키를 복원해서 서명을 만들어야 하는데, 이 과정이 특정 노드에서 진행된다면, 그 노드가 작동하지 않으면 결국 처음에 예방하고자 했던 단일 실패 지점이 됩니다. 또한, 특정 노드에서 밸리데이터의 키가 복원된다는 것도 문제가 됩니다. 이러한 문제들을 해결하기 위해 Multi-Party Computation(MPC)를 사용합니다.

MPC는 여러 곳에 분산된 데이터를 서로 공개하지 않으면서 연산을 수행하는 개념입니다. 이를 위해 암호학적 알고리즘을 사용하며, 대표적인 예시로 ‘Yao의 백만장자 문제’가 있습니다. 이 문제는 두 부자가 점심값을 계산할 때 자신의 자산 정보를 서로 공개하지 않으면서 누가 더 많은 자산을 가지고 있는지를 알아내는 것입니다. 일반적으로 이를 해결하기 위해서는 제삼자가 필요하지만, 블록체인에서는 믿을 수 없는 제삼자가 없으므로 암호학적 알고리즘을 사용하여 이 문제를 해결합니다.

draw.io / by Scott Choo

MPC는 homomorphic encryption(동형 암호화), secret shaing, garbled circuits(왜곡 회로)을 통해 구현됩니다. 간단히 설명하면, 동형 암호는 데이터를 암호화한 후 연산을 거친 값의 복호화 결과가 암호화하기 전의 데이터 연산 결과와 같아지도록 하는 기술입니다. Secret sharing은 위에서 설명한 SSS와 비슷한 방식입니다. 왜곡 회로는 어떤 연산에 대한 논리 회로 테이블을 만들고, 그 테이블을 임의의 값들로 암호화하는 것입니다.

MPC를 통해, 밸리데이터의 키가 분산 키들을 통해 어디에서도 다시 복원되지 않도록 방지하며, 단일 실패 지점을 예방할 수 있습니다.

DKG(Distrubuted Key Generation)

DKG는 여러 주체가 참여하여 키를 생성하는 과정에서, 원본 키를 누구도 알 수 없게 만드는 기술입니다. DVT 기술에서는 필수적인 기능보다는 보안성을 더 강화해 주는 보조적인 기술로 사용됩니다.

draw.io / by Scott Choo

다음은 DKG를 간단히 설명한 그림입니다. SSS와 비슷해 보이지만, 실제로 SSS에서 사용한 원리도 DKG의 생성 과정에서 사용됩니다. 예를 들어, 노드 A, B, C가 DKG를 통해 분산 키 S를 생성하는 과정을 살펴봅시다.

  1. 각 노드는 개인 키인 Sa, Sb, Sc를 랜덤하게 생성합니다.
  2. 이 개인 키를 이용하여 SSS와 같은 방식으로 분산된 비밀들을 생성합니다. Sa1 ~ Sc3가 이러한 비밀 값들입니다.
  3. 이렇게 생성된 비밀 값을 공유하고, 노드 A에는 Sa1 ~ Sa3, B에는 Sb1 ~ Sb3, C에는 Sc1 ~ Sc3를 전달합니다. (각자 받아야 하는 비밀 값들이 정해져있으므로 P2P 통신으로 직접 하나씩 값을 전달해야 합니다).
  4. 각자 받은 비밀 값들을 합쳐서 S1, S2, S3를 생성합니다.
  5. S1, S2, S3를 통해 S값을 만들어냅니다.

위와 같은 과정을 거치면 완전히 분산된 방식으로 랜덤한 분산 키를 생성할 수 있게 됩니다. 노드 A, B, C는 각자 S1, S2, S3의 값 하나씩만을 가지고 있기 때문에 혼자서는 키를 복원할 수 없기에 강력한 보안성을 갖게 됩니다.

draw.io / by Scott Choo

지금까지 DVT 기술의 동작 과정을 잘 이해하며 따라왔다면, DKG 기술이 실제로 어떻게 쓰이는지에 대해서 의문이 들 수도 있습니다.

필자도 처음 공부할 때 DVT는 결국 밸리데이터의 키를 분산해서 사용하는 기술이라고 이해했는데, DKG를 통해 완전히 랜덤하게 새로 생성된 이 키는 어디에 사용되는지 매우 혼란스러웠습니다. 하지만, 처음에 언급한 것처럼 DKG는 DVT의 핵심적인 기술이 아니라 보안성을 강화해 주는 부수적인 기능입니다.

DVT에서 비밀을 공유 받은 노드들은 비밀을 저장할 때 암호화하여 저장해야 합니다. 이때, 각자의 개인키를 사용한다면, DVT 참여 구성원이 변화가 있을 때(예: 참여 중이던 노드가 그만두는 경우)에도 여전히 비밀을 사용할 수 있습니다. 또한, SSV와 같은 경우 이 비밀을 온체인에 저장하는데, 이때도 당연히 암호화하고 복호화 할 수 있는 키가 필요합니다. DKG는 이 암호화에 사용되는 키를 생성하는 기술입니다.

마치며

이번 글에서는 DVT의 핵심 기술에 대해 살펴보았습니다. DVT를 이루는 SSS, DKG, MPC가 실제로 어떻게 작동되는지 구체적으로 알아보았으며, 이를 통해 키가 분리되고 다시 합쳐지는 과정에서 안정성이 보장되는 것을 알 수 있었습니다. 다음 시리즈에서는 DVT 기술이 적용된 프로토콜인 SSV network와 Obol에 대해 알아보도록 하겠습니다.

DVT 시리즈는 — [DVT 시리즈] #3: DVT 기술 구현체 | SSV, Obol— 에서 이어집니다.

본 글은 CURG의 DVT팀 (박서현, 장민혁, 고정훈, 추교현)이 2023 디퍼런스에서 발표한 [DVT, Operations of distributed key for validator] 내용들을 정리한 글입니다.

Reference

--

--