비트코인/암호학

[비트코인 암호학] 5. 슈노르 서명(Schnorr signature)

라이튼 2023. 1. 16. 16:30
 

[비트코인 암호학] 3.2 공개키와 개인키

[비트코인 암호학] 3.1 공개키 암호화 [비트코인 암호학] 2.3 타원곡선의 스칼라 곱셈 [비트코인 암호학] 2.2 유한체에서의 타원곡선 [비트코인 암호학] 2.1 유한체 [비트코인 암호학] 1.3 타원곡선의

kwjdnjs.tistory.com

 

[비트코인 암호학] 4.2 ECDSA - 1

[비트코인 암호학] 4.1 디지털 서명 [비트코인 암호학] 3.2 공개키와 개인키 [비트코인 암호학] 3.1 공개키 암호화 [비트코인 암호학] 2.3 타원곡선의 스칼라 곱셈 [비트코인 암호학] 2.2 유한체에서의

kwjdnjs.tistory.com

 

[비트코인 암호학] 4.3 ECDSA - 2

이번 글에서는 이전 글에서 생성했던 서명을 검증해보겠습니다. [비트코인 암호학] 4.2 ECDSA - 1 지금까지 알아봤던 내용들을 정리해보겠습니다. 먼저 타원곡선과 점 덧셈 그리고 유한체 타원곡선

kwjdnjs.tistory.com

 

 이번 글에서는 보다 효율적인 다중서명을 위해 2021년 탭루트 소프트포크를 통해 도입된 슈노르 서명에 대해 알아보겠습니다.

 

 슈노르 서명에서 사용하는 개인키와 공개키 생성방식은 ECDSA와 같습니다. 따라서 이전에 공개키를 생성했던 공식을 가져오겠습니다.

 

 

 위 공식에서 d는 개인키, G는 생성점, P는 공개키를 의미합니다. 다중 서명을 위해서는 여러 개의 개인키와 공개키가 필요합니다. 따라서 다음과 같이 2개의 개인키와 공개키를 생성해 보겠습니다.

 

 

 서명을 생성하는 가장 첫 단계는 ECDSA와 같습니다. 개인키와 공개키 각각 마다 무작위값 k를 생성하여 R값을 구합니다.

 

 

 그다음 s값을 구해야 합니다. s값을 구하는 공식은 ECDSA에서 사용했던 공식과 조금 다릅니다. 슈노르 서명에서는 다음과 같은 공식을 사용합니다. 무작위값 k와 해시값 e 그리고 개인키 d를 이용해 s값을 구합니다. 이때 사용하는 해시값 e는 R, P 그리고 메시지 m을 이용하여 구합니다. R, P 값은 각각 R1과 R2, P1과 P2를 더하여(점 덧셈) 구할 수 있습니다.

 

 

 위 공식을 이용하여 두 키에 대한 s값을 구해보겠습니다. 해시값 e는 같은 값을 사용합니다.

 

 

 이제 위 식들을 이용해 다음과 같이 P, R, s 값에 대한 식을 정의해 보겠습니다.

 

 

 최종적으로 구한 (R, s)가 바로 서명이 됩니다.

 

 마지막으로 서명을 검증해 보겠습니다. 서명 검증을 위해 s와 G를 이용하여 다음과 같은 식을 유도해 보겠습니다.

 

 

 ECDSA와 유사하게 s값 생성에 개인키 d와 무작위값 k가 필요하므로, 공개키에 해당하는 개인키를 보유한 사람만이 위 식에 해당하는 올바른 R값과 s값을 생성할 수 있음을 알 수 있습니다. 즉, 서명(R, s)이 위 식을 만족한다면 해당 서명이 올바름을 알 수 있습니다. 슈노르 서명에서의 서명검증은 이러한 방식으로 이뤄집니다.

 

 이제 두 개의 키를 이용하여 다중서명이 어떻게 이뤄지는지 알아보겠습니다. sG에 대한 식은 다음과 같이 적을 수 있습니다.

 

 이를 전개하여 정리하면 다음과 같습니다.

 

 

 결론적으로 다음과 같은 식을 얻을 수 있습니다.

 

 

 최종적으로 얻은 식을 확인해 보면 하나의 서명 s를 이용하여 두 개의 공개키 P1과 P2를 검증할 수 있음을 알 수 있습니다. 이것이 바로 슈노르 서명이 가진 강력한 장점 중 하나인 단일 서명을 이용한 다중서명검증입니다.

 

 지금까지 슈노르 서명에 대해 알아봤습니다. 감사합니다.