개인키
개인키는 비트코인을 움직일 수 있는 비밀 숫자입니다. 비트코인에는 은행처럼 계좌 주인을 확인하거나 비밀번호를 재발급해 주는 기관이 없기 때문에, 개인키를 가진 사람이 거래에 서명할 수 있는 권한을 가집니다.
개인키로 거래 승인을 증명하는 방식
은행 예금은 은행이 계좌와 신분증을 대조해 주인을 확인합니다. 비트코인의 전체장부에는 어느 주소에서 어느 주소로 얼마가 이동했는지는 기록되지만, 그 주소를 사용하는 사람의 이름이나 신분은 적히지 않습니다.
이를 명패 없는 금고에 비유할 수 있습니다. 금고마다 주인 명패가 붙어 있거나 관리인이 서류를 대조해 주는 보관소가 아닙니다. 열쇠를 사용해 금고를 열 수 있다는 사실 자체가 권한을 증명합니다.
개인키를 이용하면 거래에 디지털 서명을 만들 수 있습니다. 네트워크의 참여자들은 공개키를 사용해 그 서명이 해당 개인키로 만들어졌는지 확인합니다. 이때 개인키 자체가 네트워크에 공개되지는 않습니다. 이 검증은 해당 키로 서명했다는 사실을 확인하며, 서명자의 신원이나 법적 소유권을 증명하지는 않습니다.
무작위로 만들어지는 비밀 숫자
개인키는 상상하기 어려울 만큼 큰 비밀 숫자이며, 생성의 바탕에는 충분한 무작위성이 필요합니다. 서명 장치는 개인키를 관리하고 거래에 서명하는 도구입니다. BIP32 방식에서는 하나의 시드에서 여러 키를 파생하며, 같은 시드와 파생 경로를 사용하면 같은 키를 다시 얻습니다.
개인키는 256비트 형식으로 표현되며, 표현 가능한 값의 수는 약 2^256개입니다. 실제로 유효한 개인키는 타원곡선의 정해진 범위 안에 있어야 하지만, 경우의 수가 매우 크다는 점은 같습니다. 여러 사람이 각자 충분한 무작위성으로 개인키를 만들어도 우연히 같은 값이 나올 가능성은 현실적으로 무시할 수 있는 수준으로 여겨집니다.
개인키는 발급 기관이나 등록 절차 없이 만들 수 있습니다. 인터넷에 연결되지 않은 환경에서도 생성할 수 있다는 점은 중앙 기관의 허락이 필요하지 않다는 뜻이기도 합니다.
개인키에서 공개키가 계산되고, 주소 형식에 따라 공개키나 지출 조건을 바탕으로 주소를 만듭니다. 이 방향으로는 계산할 수 있지만 주소나 공개키를 보고 개인키를 거꾸로 계산하는 것은 충분히 안전하게 생성된 키를 전제로 현실적으로 불가능하도록 설계되어 있습니다.
개인키를 잃어버리면 어떻게 될까
개인키를 잃어버렸을 때 신고하거나 재발급받을 창구는 없습니다. 은행 비밀번호는 은행이 계정과 재설정 절차를 관리하지만, 자가보관한 개인키를 비트코인 네트워크가 대신 보관하거나 재발급해 주지는 않기 때문입니다.
단일 키로 잠근 자금에서 개인키와 이를 복원할 수 있는 복구 단어·백업을 모두 잃으면, 해당 비트코인의 기록과 잔액은 전체장부에 남아도 거래에 서명할 방법이 없어 움직일 수 없게 됩니다. 반대로 필요한 복구 단어나 백업이 남아 있다면 호환되는 서명 장치에서 키를 복원해 다시 사용할 수 있습니다. 비트코인이 사라지는 것과 복원 수단을 잃어 영구히 잠기는 것은 다른 일입니다.
이 성질은 불편함과 통제권을 함께 뜻합니다. 사용자가 키를 직접 안전하게 보관하는 경우 비트코인 프로토콜에는 중앙 관리자가 그 자금을 임의로 동결하거나 재발급할 권한이 없습니다. 그러나 거래소나 다른 수탁자가 키를 보관한다면 그 보관 주체가 지출할 수 있고, 키가 탈취되면 공격자가 사용할 수도 있습니다. 완전한 책임과 통제권은 서로 떨어져 있지 않습니다.
개인키는 어떻게 공격받는가
개인키를 노리는 공격을 이해할 때는 수학적인 공격과 보관 과정의 공격을 나누어 볼 필요가 있습니다. 충분한 엔트로피로 생성한 키를 계산으로 맞히는 것과, 사람이 보관하던 키를 훔치는 것은 전혀 다른 경로입니다.
무차별 대입
가능한 개인키를 하나씩 대입해 맞는 값을 찾는 공격을 무차별 대입이라고 합니다. 256비트 개인키를 동전을 256번 던져 나온 앞뒤 기록 하나에 비유하면, 가능한 조합의 규모를 짐작할 수 있습니다.
충분한 엔트로피로 생성된 개인키를 전수 탐색하는 일은 가능한 키의 규모 때문에 현실적으로 어렵습니다. 다만 키 생성기의 난수가 예측 가능하거나, 서명 구현에서 서명용 일회성 값이 재사용·예측되는 취약점이 있으면 개인키가 노출될 수 있습니다. 이런 경우는 정상적인 키 공간을 무차별 대입으로 뚫은 것이 아니라 키 생성 또는 서명 구현의 결함을 이용한 것입니다.
피싱
가짜 서명 장치 앱, 가짜 고객센터, 가짜 이벤트 페이지는 개인키나 복구 단어를 입력하도록 유도할 수 있습니다. 사용자가 직접 비밀을 건네도록 만드는 방식입니다.
악성코드와 기기 감염
악성 프로그램이 컴퓨터나 휴대전화에 숨어 개인키나 복구 단어를 훔칠 수 있습니다. 복사해 둔 받는 주소를 다른 주소로 바꿔치기해 화면에 보이는 내용과 실제 전송 대상을 다르게 만들 수도 있습니다.
보관 실수
복구 단어를 사진으로 찍어 두거나 클라우드 메모장, 이메일, 문자, 공유 문서에 저장하면 해당 계정이나 보관 공간이 침해될 때 비밀도 함께 노출될 수 있습니다. 이 경우에도 개인키의 수학이 깨진 것이 아니라, 열쇠가 보관된 사람과 기기의 자리에서 정보가 새어 나간 것입니다.
거래소 해킹과 개인키 해킹은 다르다
거래소가 해킹되었다는 소식이 곧 비트코인의 규칙이나 서명 수학이 깨졌다는 뜻은 아닙니다. 많은 경우 공격을 받은 곳은 사용자를 대신해 키를 보관하던 회사의 서버나 내부 관리 체계입니다.
현금 수송차가 털렸다고 화폐 제도 자체가 무너지는 것은 아닌 것과 비슷합니다. 무엇이 뚫렸는지, 보관을 맡은 쪽인지 비트코인의 규칙인지 구분해야 합니다.
안전성에 대한 한계
충분한 엔트로피로 생성된 키의 전수 탐색은 현실적으로 어렵지만, 키 생성기나 서명 구현의 결함까지 안전하다고 볼 수는 없습니다. 난수의 예측 가능성, 서명용 일회성 값의 재사용처럼 구현 조건이 잘못되면 개인키가 노출될 수 있습니다.
계산 기술이 크게 달라지면 현재의 안전성 가정이 바뀔 가능성이 있다는 지적도 있습니다. 현재의 보안 가정과 구현상의 위험, 미래에 대한 가능성은 구분해야 합니다. 지금 개인키를 지키는 데서 중요한 영역은 개인키의 수학적 구조와, 그 열쇠가 오가는 사람의 손과 기기입니다.
정리
- 개인키는 비트코인을 움직이는 거래에 서명할 수 있게 하는 비밀 숫자입니다.
- 개인키는 충분한 무작위성으로 만들어야 하며, 여기에서 공개키가 계산되고 주소 형식에 맞춰 받는 주소를 만듭니다.
- 단일 키와 복구 단어·백업을 모두 잃으면 비트코인은 장부에 남아도 움직일 수 없게 됩니다.
- 충분한 엔트로피를 가진 키의 전수 탐색은 현실적으로 어렵지만, 취약한 난수·서명 구현, 피싱, 악성코드, 보관 실수로 비밀이 노출될 수 있습니다.
- 거래소의 보관 시스템이 해킹된 사건과 비트코인의 규칙이나 서명 수학이 깨진 사건은 구분해야 합니다.
관련 개념은 공개키와 디지털 서명과 SHA-256에서 이어서 확인할 수 있습니다.