본문 바로가기
Bitcoin

비트코인의 디지털 서명

by PudgeKim 2021. 3. 25.

이번 글의 선수지식으로는 개인키와 공개키에 대한 개념이 있어야 합니다. 혹시 개인키와 공개키의 생성원리가 궁금하신 분은 아래 링크를 참고해주세요.

비트코인과 이더리움의 개인키, 공개키 생성원리: up-to-date-items.tistory.com/98

 

개인키는 자신만이 아는 비밀 정보이고 공개키는 다른 사용자들에게 공개되도 상관없는 정보입니다.

이 두가지를 잘 이용하면 상대방은 자신이 받은 정보가 정말 자기가 예상하는 사람으로부터 온건지에 대한 것을 확인할 수 있습니다. 예를 들어 Tony가 Alice의 transaction을 발견했는데 Tony는 이게 정말 Alice의 transaction이 맞는지에 대한 의심이 들 수 있습니다.
이 때 비밀키, 공개키를 잘 활용하면 A로부터 온게 맞다는 것을 확신할 수 있는 방법이 있습니다. (사실 해쉬함수도 쓰입니다.)

즉, 사용자가 공개키의 주인임을 알리기 위해 디지털 서명이 쓰이는 것입니다.

 

그럼 이제 자세히 알아보겠습니다.

Fsig = signing algorithm
Fhash = hashing function 일때 아래와 같은 식을 사용합니다.

Sig = Fsig(Fhash(transaction), private key)

예를들어 Alice가 transaction을 만든다고 가정해보겠습니다.

Alice는 자신의 transaction을 해쉬함수에 넣습니다. 그리고 이 결과값과 자신이 가지고 있는 비밀키를 Fsig에 넣으면 디지털서명이 완성됩니다.

이러한 디지털 서명은 공개키를 이용하여 풀어낼 수 있습니다. Alice가 만들어낸 디지털 서명은 Alice의 공개키로 풀 수 있다는 뜻입니다.

 

자 이제 Alice가 자신이 만든 transaction(input, output이 존재하는)을 위 과정을 통해 만들어낸 디지털서명과 자신의 공개키와 함께 비트코인 네트워크에 전파합니다.

이 transaction이 정말 Alice로부터 왔다는 것을 확인하기 위해서는 아래 과정을 거치면 됩니다.

Tony가 Alice의 transaction을 발견했다고 가정해봅시다. 

Tony는 Alice의 공개키를 이용하여 디지털서명을 풀어냅니다. 이 풀어낸 값을 H라고 하겠습니다.

Tony는 이제 Alice의 transaction을 해쉬함수에 넣습니다. 이 값을 H`이라고 하겠습니다.

이제 이 H와 H`이 같다면 Tony는 Alice로부터 왔다는 것을 확신할 수 있습니다.

 

이러한 공개키-비밀키를 이용한 방법은 비트코인뿐만 아니라 여러 곳에서 쓰이기 때문에 잘 알아두시면 좋습니다.

'Bitcoin' 카테고리의 다른 글

비트코인의 transaction과 script language  (1) 2021.03.27
비트코인의 51% attack  (0) 2021.03.24
비트코인의 Mining pool  (0) 2021.03.22
비트코인의 채굴심화 (Extra Nonce)  (0) 2021.03.22
비트코인에서의 분기  (0) 2021.03.21