본문으로 건너뛰기
buybitcoinsmart

용어집 / 트랜잭션과 수수료

디지털 서명

별칭은 서명, ECDSA 서명, Digital signature입니다.

디지털 서명이란 무엇입니까?
디지털 서명은 개인 키로 만들어지는 증명으로, 비트코인 트랜잭션을 승인한 사람이 해당 코인이 잠겨 있던 키를 관리하고 있었다는 것과 세부 내용이 변경되지 않았다는 것을 보여 줍니다.

비트코인은 더 이상 ECDSA만 사용하지 않습니다. 1, 3 또는 bc1q로 시작하는 주소의 코인은 71바이트 또는 72바이트의 ECDSA 서명으로 잠금이 해제되고, bc1p 주소의 코인은 2021년 11월부터 가동된 64바이트 Schnorr 서명을 사용합니다. 어느 경우든 서명은 키에 대한 관리 권한을 증명할 뿐, 그 사람이 누구인지는 결코 증명하지 않습니다.

작동 방식

서명을 만들려면 세 가지 재료가 필요합니다. 개인 키, nonce라고 부르는 일회용 난수, 그리고 해당 입력에 선택된 플래그에 따라 잘라낸 트랜잭션의 다이제스트입니다.

결과는 비트코인이 첫 출시부터 사용해 온 타원 곡선인 secp256k1 위에서 계산된 두 개의 수입니다. 검증은 공개 키를 사용해 같은 연산을 역으로 수행하며, 노드는 스크립트 opcode인 OP_CHECKSIG 안에서 이를 실행합니다. 어느 단계에서도 암호화되는 것은 없으며, 서명은 그 뒤에 있는 개인 키에 대해 아무것도 드러내지 않습니다.

현재 사용되는 두 방식은 그 두 개의 수를 서로 다르게 묶습니다. ECDSA 서명은 DER로 감싸이므로 고정 길이가 아니라 71바이트 또는 72바이트가 되며, 마지막 바이트는 서명의 일부가 전혀 아닙니다. 그것은 트랜잭션의 어느 부분이 포함되었는지 알려 주는 플래그입니다. BIP340에 따른 Schnorr 서명은 감싸는 것 없이 고정된 64바이트이며, 기본값이 적용될 때는 플래그 바이트가 아예 빠지므로 65바이트는 서명자가 무언가 특이한 것을 원할 때만 나타납니다.

문제가 생기는 부분은 nonce입니다. 같은 키로 같은 nonce를 두 번 사용하면 중학교 대수만으로 개인 키가 드러납니다. 이는 이론적인 걱정이 아닙니다. 2013년 8월 11일에 bitcoin.org는 영향을 받은 휴대폰의 지갑 앱이 반복되는 값을 생성하게 만드는 Android 결함에 관한 권고를 게시했고, 그 결과 코인이 도난당했습니다. 이제 지갑은 키와 메시지로부터 nonce를 결정적으로 도출하며, ECDSA의 경우 RFC 6979를, BIP340 안에서는 이에 상응하는 규칙을 따릅니다.

확인할 수 있는 곳

여러분이 하는 모든 지출에는 서명이 최소 하나 들어 있습니다. 블록 탐색기에서는 segwit 입력의 witness나 레거시 입력의 잠금 해제 스크립트에 있는 긴 16진수 문자열이며, ECDSA 서명 끝에 붙는 01은 수학의 일부가 아니라 플래그입니다.

서명은 트랜잭션 밖에서도 쓰입니다. 주소 뒤의 키로 일반 메시지에 서명하면 사토시 하나도 옮기지 않고 그 주소를 관리하고 있음을 증명할 수 있습니다. 거래소가 출금 목적지를 확인하는 방식, 준비금 증명 증명서가 구성되는 방식, 개인 간 거래(P2P) 마켓플레이스의 판매자가 특정 주소가 실제로 자신의 것임을 보여 주는 방식이 모두 이것입니다. 원래 형식은 1로 시작하는 주소에서만 작동했습니다. BIP322는 메시지 서명을 오늘날 사용되는 모든 주소 유형으로 일반화합니다.

이 구분은 누군가 서명을 요청할 때마다 중요합니다. 서명된 메시지는 코인을 옮길 수 없습니다. 트랜잭션에 대한 서명은 모든 코인을 옮길 수 있으며, 요청받은 것이 어느 쪽인지 확실히 구별하는 방법은 웹사이트가 아니라 하드웨어 지갑의 화면을 읽는 것뿐입니다.

디지털 서명 vs 서명 해시

서명 해시는 입력이고, 서명은 출력입니다. 지갑은 먼저 트랜잭션의 특정 부분집합을 포함하는 다이제스트를 만들고, 그 다이제스트에 서명합니다. 따라서 서명은 다이제스트가 제외한 부분에 대해서는 아무것도 말하지 않습니다. 이것은 기술적인 사소한 문제가 아닙니다. sighash 플래그가 존재하는 이유 전체가 여기에 있으며, 하나의 트랜잭션에 대한 두 서명이 서로 완전히 다른 것을 보호할 수 있는 이유도 설명해 줍니다.

혼동하기 쉬운 용어

자주 묻는 질문

비트코인 서명은 누군가가 누구인지 증명합니까?

아닙니다. 서명은 그것을 생성한 사람이 그 순간 특정 개인 키를 보유하고 있었음을 증명합니다. 키는 공유되고, 도난당하고, 상속되므로 유효한 서명은 키에 대한 증거일 뿐, 사람에 대한 증거는 결코 아닙니다.

누군가 보낸 메시지에 서명하는 것이 안전합니까?

일반 텍스트 메시지에 서명하는 것은 코인을 옮길 수 없지만, 트랜잭션에 서명하는 것은 모든 코인을 옮길 수 있습니다. 메시지에만 서명한다고 들었는데 하드웨어 지갑 화면에 금액이나 주소가 표시된다면, 그 화면에서 무엇도 승인하지 마십시오.

비트코인은 여전히 ECDSA를 사용합니까?

예. 1, 3 또는 bc1q로 시작하는 모든 주소에 사용되며, 유통 중인 코인의 대부분이 여기에 해당합니다. bc1p로 시작하는 Taproot 주소는 대신 Schnorr 서명을 사용하므로 두 방식이 나란히 작동하며 많은 지갑이 둘 다 생성합니다.

다음에 읽을 글

관련 용어

트랜잭션과 수수료 분야의 다른 용어

이 페이지를 영어로 읽기