컨센서스(합의)는 다수의 node가 동기화 상태를 유지하는 것입니다. 컨센서스는 unreliability(신뢰 불필요성)이 필요합니다. 네트워크 문제(딜레이 등), 악의적인 행위자, 버그가 있는 노드 등이 있어도 무관하게 작동해야 한다는 뜻입니다. 컨센서스를 논의하기 위해 앞으로 있을 모든 포스트는 아래를 전제하고 진행합니다.

  1. 인터넷 환경을 전제합니다. 물론 네트워크 지연, DOS 공격이 있다는 점을 인정하지만 그럼에도 여전히, 우리가 개발하는 모든 것은 인터넷 위에 있을 것입니다.
  2. 암호학을 전제합니다. 컨센서스의 논의에는 디지털 서명과 해시 함수가 필요하기 때문입니다. (이 둘은 암호학을 요구합니다.)

 

 

디지털 서명

종이 서류에 서명하는 것과 유사합니다. 3가지 알고리즘을 기반으로 정의됩니다. 여기서 pk는 public key, sk는 secret key 입니다. 또 서명을 다르게 생각해서, 블록체인 네트워크를 향해 발신자가 (서명한다는) 메시지를 보내는 과정으로 생각합시다. (발신자 = 서명하는 사람, 메시지 = 서명에서 동의하는 내용)

  1. 키 생성 알고리듬: (무작위 시드 구문(pk, sk) 페어)
  2. 서명 알고리듬: (메시지, 발신자의 sk인증정보 추가된 버전의 메시지, 서명) 발신자의 서명 과정입니다. 하지만 현실에서의 서명과 다른 점은, 서명하는 메시지가 서명의 일부라는 점입니다. copy-paste attack(내 서명을 원치 않는 메시지의 서명에 가져다 사용하는 공격)을 예방하기 위함입니다.
  3. 검증 알고리듬: (검증 대상 메시지, 검증 대상의 서명, 메시지 생성자의 pkYES or NO) 서명의 validity를 검증하는 알고리듬입니다. YES가 나오기 위해서는 주어진 pk에 맞는 sk를 가진 누군가가 존재하는데 + 그 사람이 주어진 메시지에 대한 주어진 서명을 생성했는지 여부.

 

서명에는 secret key가, 검증에는 public key가 쓰여요.

sk (secret key)는 서명 과정에만 쓰이고, pk (public key)는 검증 과정에만 쓰이는 걸 알 수 있습니다. 우리는 그저 그 사람이 그 서명을 만들 능력이 있다는 것만 보고 싶을 뿐이니까. 또 누구나 검증할 수 있게 하고 싶은 것이기에 pk가 검증 알고리듬에 쓰이는 것이고. 우리는 어떤 서명이라도 pk와 함께 validity를 검증할 수 있습니다.

 

 

 

 

 

숨겨진 가정

디지털 서명을 설명하면서, 생각보다 극단적인 가정을 말하지 않은 점이 있습니다. 전제되었던 가정은 위조 서명은 불가능하다는 가정 (ideal signatures assumption)입니다. secret key를 알지 못하면, valid한 메시지와 서명을 만들어낼 수 없음을 뜻합니다. (여기서 valid란 검증 알고리듬을 통과할 수 있다는 뜻입니다.) 보편적으로 쓰이는 가정이지만, 엄밀하게는 틀린 가정입니다. brute force만 생각해봐도 당연히 틀렸습니다. (물론 제법 길어서 뚫기는 어렵겠지만 이론상으로는요.) 또한 공격자가 reverse engineering을 잘 해낼 수 있다면 또 문제가 있을 수 있는데, 이런 것도 염두에 두지 않았습니다. 게다가 공격자가 운 좋게 찍어서 맞을 수도 있고, 또는 암호학의 한계로 다른 secret key가 같은 서명을 만들 수도 있겠지요. 모두 확률은 무척 낮지만 이런 점을 알고만 넘어갑시다.

 

 


다음 말이 이해가 된다면 다음 포스트로 넘어가셔도 좋아요.

내가 node a고, node b가 있는데, b가 “a야, node c가 blah blah를 말했대!”라고 말하면, 나(A)는 “그럼 그 message에 대한 node c의 sig를 나한테 보여줘”라고 요청해서 검증해낼 수 있어.

마지막으로, 앞으로 이어질 포스트에서 노드가 전송하는 메시지는, 별 말 없으면 디폴트로 서명을 한 상태로 전송한다는 점을 기억해주시기 바랍니다. 다음 글은 컨센서스에 대한 본격적인 고민, SMR (state machine replication) 문제를 다뤄보겠습니다. 궁금한 점은 댓글로 알려주시기 바랍니다 :)

'Foundations of Blockchain 번역' 카테고리의 다른 글

1-1. 블록체인 스택  (0) 2022.09.07
0. (여기서부터) Foundations of Blockchain  (0) 2022.09.04

BELATED ARTICLES

more