이번 글의 선수지식으로는 개인키와 공개키에 대한 개념이 있어야 합니다. 혹시 개인키와 공개키의 생성원리가 궁금하신 분은 아래 링크를 참고해주세요.
비트코인과 이더리움의 개인키, 공개키 생성원리: 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 |