용어집 / 주소와 키
개인 키
- 개인 키란 무엇입니까?
- 개인 키는 비트코인 출력에서 자금을 사용할 권한을 부여하는 256비트의 비밀 숫자입니다. 이를 알게 된 사람은 누구든 코인을 옮길 수 있으며, 누구도 이를 다시 발급할 수 없습니다.
비트코인의 소유권은 누군가의 장부에 기록된 항목이 아니라 키의 보유입니다. 키는 대략 1.16 곱하기 10의 77제곱보다 작은 무작위 수이며, 그래서 키를 추측하는 것은 위협이 되지 않지만 키를 잘못 생성하는 것은 위협이 됩니다. 현대 지갑은 키를 절대 보여 주지 않습니다. 지갑은 12개 또는 24개 단어의 백업 문구에서 모든 키를 도출하며, 보호해야 하는 것은 바로 그 문구입니다.
작동 방식
개인 키는 32바이트이며, 보통 64자의 16진수 문자로 표기되고, 1부터 secp256k1 곡선의 위수 바로 아래 범위에서 무작위로 선택됩니다. 그 위수는 115,792,089,237,316,195,423,570,985,008,687,907,852,837,564,279,074,904,382,605,163,141,518,161,494,337이며, 78자리 수입니다. 사실상 모든 32바이트 값이 유효한 키이며, 그래서 생성이 이렇게 단순하고 무차별 대입에 의한 탈취가 이렇게 절망적입니다.
키가 하는 일은 서명뿐입니다. 출력을 사용하려면 지갑이 키를 사용해 트랜잭션에 대한 서명을 생성하며, 모든 노드는 그 서명을 출력이 요구하는 공개 키와 대조해 검증합니다. 서명은 키를 노출하지 않고 키가 존재함을 증명하므로, 확인된 지출은 서명을 공개할 뿐 그 뒤의 비밀은 결코 공개하지 않습니다. 비트코인은 Taproot 전까지 ECDSA만 사용했습니다. BIP-340에 명시된 Schnorr 서명은 Taproot 지출에서 같은 역할을 수행합니다.
진짜 취약점은 무작위성에 있습니다. 키 공간은 탐색할 수 없지만, 잘못된 소프트웨어로 그 공간을 줄일 수는 있습니다. 2013년 8월에 Bitcoin 프로젝트는 안드로이드의 난수 생성기 결함으로 영향을 받은 휴대폰의 키를 예측할 수 있게 되었다는 보안 권고를 발표했고, 그 직접적인 결과로 코인이 탈취되었습니다. 사람이 지어낸 문구에서 키를 만드는 브레인 월렛은 공격자들이 사전을 미리 계산하기 시작하자 조직적으로 비워졌습니다. 두 실패는 모두 엔트로피에 관한 것이지 암호학이 깨진 것에 관한 것이 아닙니다.
비트코인을 구매할 때 이것이 중요한 이유
거래소에서 구매한다고 해서 키를 받는 것은 아닙니다. 받는 것은 거래소 자체 직원이 관리하는 키 아래 거래소가 보유한 코인으로 뒷받침되는, 거래소 데이터베이스의 잔액입니다. 이는 거래하는 동안에는 지극히 정상적인 방식이며, 저축에는 나쁜 방식입니다. Mt. Gox는 출금을 동결하고 2014년 2월에 파산 절차에 들어갔으며, 채권자들은 2024년 7월에야 첫 변제를 받았습니다.
출금이 바로 수탁이 실제로 이전되는 순간입니다. 지갑은 시드에서 키를 도출하고 그에 맞는 주소를 제시하며, 거래소의 트랜잭션이 확인되면 사용자와 코인 사이에 어떤 회사도 존재하지 않습니다. 그 시점부터 실패 방식은 사용자의 몫입니다. 백업 분실, 시드 문구 촬영, 지갑을 "검증"하라고 요구하는 피싱 사이트가 그것입니다.
세 가지 습관이 대부분의 위험을 막아 줍니다. 키를 위해 만들어진 기기에서 키를 생성해, 비밀이 절대 내보내지지 않는 하드웨어 안에서 생성되고 사용되게 하십시오. 복구 문구는 물과 불을 견디는 것에 백업하고, 사진이나 클라우드 메모로는 절대 백업하지 마십시오. 그리고 키나 시드 문구를 요구하는 모든 요청은 예외 없이 공격으로 취급하십시오. 어떤 거래소, 지갑 업체, 지원 담당자도 그것을 쓸 일이 없습니다.
첫 구매의 각 단계에서 키가 있는 곳
구매 하나를 처음부터 끝까지 따라가 보면 개인 키는 매우 구체적인 순서로 움직입니다. 사용자가 거래소에 돈을 보내고 구매합니다. 아직 사용자를 위한 키는 없고 장부의 한 행만 있을 뿐입니다. 출금 주소를 붙여 넣습니다. 지갑은 시드에서 도출한 키로 그 주소를 생성했으며, 키는 기기 밖으로 나간 적이 없습니다. 거래소가 사용자의 주소에 코인을 잠그는 트랜잭션을 전파합니다. 키는 여전히 아무 일도 하지 않았습니다. 몇 달 뒤 사용자가 지출을 결정하고, 그때서야 키가 첫 서명을 생성하며, 네트워크가 이를 검증하고 영구히 기록합니다.
이 순서에서 두 가지가 따라옵니다. 키는 한 번이라도 사용되기 전에 수년 동안 코인을 관리할 수 있으므로, "아무 일도 하지 않은" 지갑이 유휴 상태이거나 만료된 것은 아닙니다. 그리고 소유권 이전은 구매가 아니라 출금에서 일어났으므로, 두 번 확인할 가치가 있는 단계는 출금 단계입니다.
개인 키 vs 시드 문구
개인 키는 코인 한 묶음을 관리하고, 시드 문구는 키로 가득한 지갑 전체를 생성합니다. 문구는 BIP-32 계층 구조 뒤의 엔트로피를 사람이 읽을 수 있게 부호화한 것입니다. 12개 단어는 128비트를, 24개 단어는 256비트를 담고, 지갑은 그 뿌리에서 도출 경로를 따라 수십억 개의 키를 도출합니다. 문구를 복원하면 그 모든 키가 다시 만들어집니다. 단일 키를 복원하면 단일 키만 다시 만들어지고, 지갑이 다른 곳에 보유하던 코인은 여전히 사라진 상태로 남습니다.
개인 키 vs Wallet Import Format
개인 키는 수이고 Wallet Import Format은 그것을 적는 한 가지 방식입니다. WIF는 같은 32바이트를 네트워크 바이트, 선택적 압축 플래그, 체크섬으로 감싼 뒤 전체를 Base58로 부호화합니다. 근본적인 비밀에는 아무것도 달라지지 않으므로, WIF 문자열은 원래 수와 똑같은 보호를 받아야 합니다. 그것을 읽는 사람은 즉시 코인을 사용할 수 있습니다.