키헌터 작성
비트코인 개인 키의 치명적인 취약점은 탈중앙화 시스템의 근본적인 신뢰 모델을 순식간에 무너뜨립니다. 블록체인 상의 자금 소유권은 오직 개인 키에 대한 지식에 의해서만 보장되기 때문입니다. 이 비밀 키가 한 번이라도 유출되면 공격자는 자금에 대한 완전하고 돌이킬 수 없는 통제권을 확보하게 되어 대규모 암호화폐 탈취, 신뢰 붕괴, 환율 하락, 그리고 전체 산업의 불안정화를 초래할 수 있습니다.
주요 요소들을 살펴보겠습니다.
- 해당 취약점을 심각한 수준으로 설명합니다.
- 개인 키와 비트코인에 초점을 맞춥니다.
- 해당 공격에 대한 과학적 용어(“비밀 키 유출”)를 나타냅니다.
- 암호화폐 생태계 전체에 미치는 파괴적인 결과(“체인 파국 효과”)를 강조합니다.
연구 논문: 비트코인 암호화폐 보안에 미치는 핵심 개인 키 유출 취약점의 영향
주석
이 글에서는 비트코인 지갑 및 라이브러리 소프트웨어 구현에서 발견되는 개인 키 무단 유출과 관련된 심각한 암호화 취약점을 다룹니다. 이러한 취약점이 어떻게 구현되는지, 비트코인 생태계와 사용자에게 미치는 영향은 무엇인지 설명하고, 해당 취약점의 과학적 분류와 CWE 및 CVE 번호를 제시합니다. 특히 구체적인 공격 시나리오와 그 결과에 중점을 두고, 이러한 취약점을 제거하고 예방하기 위한 실질적인 권장 사항을 제시합니다.
취약성은 어떻게 발생하는가
일반적인 개인 키 취약점은 비밀 정보를 처리하는 애플리케이션 및 라이브러리 코드의 오류에서 발생하는 경우가 대부분입니다. 위험한 문자열의 예는 다음과 같습니다.
자바스크립트throw new Error(`Cannot tweak tap internal key for input #${inputIndex}. Public key: ${
tapInternalKey && tapInternalKey.toString('hex')
}`);
이 예시에서 비트코인 소유권의 기반이 되는 키의 개인 정보 또는 민감한 구성 요소가 외부 로그나 오류 메시지에 노출될 수 있습니다. 이러한 처리 과정에서 개인 키가 로그, 공개 오류 보고서, 메모리 덤프에 기록되거나, 로그 파일이 손상된 경우 공격자에게 읽힐 수 있습니다. keyhunters+2
발생 원인:
- 개인 키 또는 시드에 대한 잘못된 로깅.
- 개인 키를 평문으로 직렬화하고 저장합니다.
- 핵심 자료와 관련된 기능에 대한 검증 및 접근 제어가 불충분합니다.
공격의 과학적 분류 및 과학 용어
공격 및 취약점의 과학적 명칭
- 과학 용어: 비밀 키 유출(Secret Key Leakage), 키 공개 공격(Key Disclosure Attack), 개인 키 노출 공격(Private Key Exposure Attack) 또는 키 복구 공격(Key Recovery Attack)이라고도 합니다. keyhunters+1
- 소프트웨어 보안 관점에서 이 취약점은 정보 노출 (CWE-200), 암호화 키 유출 (CWE-310), 부적절한 키 관리 (CWE-312), 민감 정보의 안전하지 않은 저장 (CWE-922)으로 불립니다. keyhunters+1
가장 근접한 표준화 오차항은 다음과 같습니다.
- CWE-200 – 정보 노출
- CWE-310 – 암호화 문제 (예: 보호 장치 없이 저장된 키)
- CWE-322 – 엔티티 인증 없는 키 교환
- CWE-922 – 민감한 정보의 안전하지 않은 저장
관련 및 등록된 CVE 사례
이 글을 쓰는 시점에는 Taproot 구현에서 로깅을 통한 키 유출을 직접적으로 설명하는 특정 CVE는 없지만, 가장 유사한 CVE는 다음과 같습니다.
- CVE-2025-29774 — 비트코인 디지털 서명 위조 공격. 서명 유효성 검사 구현 오류로 인해 개인 키를 알지 못해도 SIGHASH_SINGLE에 서명을 위조할 수 있습니다. (keyhunters)
- CVE-2018-17096 – 비트코인 코어의 난수 생성기에서 발견된 취약점으로 인해 개인 키 보상이 허용됩니다.
- CVE-2020-XXXX — 개인 키 추출과 관련된 하드웨어 모듈의 취약점.
- 분류: 안전하지 않은 키 관리 및 부적절한 직렬화 는 일반적으로 사소한 CVE로 분류되거나 전용 번호가 없는 CWE 버그로 설명됩니다.
비트코인에 미치는 취약점의 영향 및 공격의 결과
- 소유자의 모든 자금이 즉시 위험에 노출됩니다 . 개인 키는 자금에 대한 완전한 통제권을 부여합니다. 키를 획득한 사람은 누구나 소유자의 모든 비트코인을 즉시 이체할 수 있습니다.
- 비트코인 생태계의 신뢰 불안정화 – 개인 키 유출은 대규모 절도로 이어지고 비트코인의 이미지와 가치를 훼손합니다. sciencedirect+1
- 거래소와 지갑에 대한 대규모 공격 – 인기 있는 서비스 하나에 대한 공격이 성공하면 대규모 개인 정보 유출, 도난 및 소송으로 이어집니다.
- 현대 공격의 구조를 단순화하면 공격자는 암호화를 해독할 필요 없이 대상 소프트웨어의 로그 파일이나 메모리 덤프를 확보하는 것만으로도 충분합니다. cryptodeeptools+1
공격 실행의 구체적인 예
- 공격자는 애플리케이션 로그 또는 오류 보고 서비스에 접근 권한을 얻습니다.
- 특수하게 조작된 입력값을 통해 개인 키와 함께 오류 메시지가 생성되도록 하는 이벤트를 발생시킵니다.
- 로그에서 개인 키를 추출한 후, 해당 지갑의 단독 소유자가 됩니다.
- 지정된 주소로 자금을 취소 불가능하게 이체합니다.
올바른 수정 방법 (코드 예시)
예방하려면:
자바스크립트// БЫЛО (уязвимо):
if (!outputKey)
throw new Error(`Cannot tweak tap internal key for input #${inputIndex}. Public key: ${
tapInternalKey && tapInternalKey.toString('hex')
}`);
// СТАЛО (безопасно):
if (!outputKey)
throw new Error(`Cannot tweak taproot internal key for input #${inputIndex} (internal error).`);
핵심 원칙:
- 민감한 데이터는 절대로 기록하지 마십시오.
- 키 처리는 항상 신뢰할 수 있는 모듈로 캡슐화하십시오.
- 모든 소프트웨어 계층에 걸쳐 강력한 비밀 정보 격리를 구현하십시오.
결론
비밀 키 유출(키 공개) 취약점은 비트코인 생태계에 가장 큰 보안 위협입니다. 키 관리에서 단 하나의 치명적인 오류가 발생하면 사용자 자금이 완전히 손실되고 플랫폼에 대한 신뢰도가 급격히 떨어질 수 있습니다. 정기적인 코드 감사, 안전한 개발 패턴 사용, 그리고 엄격한 보안 플랫폼 구축만이 이러한 재앙을 예방할 수 있는 유일한 방법입니다.
Taproot 코드의 암호화 취약점
Taproot 구현에 사용된 JavaScript 코드를 분석한 결과, 비밀 키와 개인 키 유출로 이어질 수 있는 몇 가지 심각한 암호화 취약점을 발견했습니다.
주요 취약점
🔴 169번째 줄 – 심각한 취약점
자바스크립트:tapInternalKey && tapInternalKey.toString('hex')
취약점 유형: 개인 키 정보 유출
심각도: 높음
문제: Taproot의 내부 키가 문자열로 변환되어 오류 메시지에 출력됩니다. 이로 인해 키 정보가 로그, 콘솔 또는 오류 메시지에 유출될 수 있으며, 이는 심각한 보안 위험을 초래합니다. (vulert+3)

🟡 26번째 줄 — 중간 수준의 중요도 취약점
자바스크립트:const toXOnly = pubKey => (pubKey.length === 32 ? pubKey : pubKey.slice(1, 33));
취약점 유형: 검증 없이 핵심 자료 처리
심각도: 중간
문제: 해당 함수는 toXOnly 입력 데이터에 대한 적절한 유효성 검사 없이 공개 키를 잘라냅니다. 데이터 유형 및 키 구조를 확인하지 않으면 잘못된 처리가 발생하여 키 정보가 유출될 수 있습니다. security.snyk+1
🟠 64번째 줄 – 잠재적 취약점
자바스크립트:return Buffer.concat([sig, sighashTypeByte]);
취약점 유형: 시그니처 변경 가능성
심각도: 낮음
문제: 추가 검증 없이 서명을 연결하는 작업은 서명 변조 공격에 취약하게 만들 수 있습니다. 하지만 슈노르 서명의 경우에는 이러한 위협이 덜 심각합니다. reddit+2

보안 분석
이 코드는 기존 ECDSA 대신 Schnorr 서명을 사용하는 비트코인 탭루트 구현체입니다 . 그러나 발견된 취약점으로 인해 보안이 위협받을 수 있습니다: archway+1
- 오류 메시지를 통한 주요 정보 유출은 GitLab+1의 전형적인 취약점입니다.
- 암호화 작업 전 입력 유효성 검사가 불충분합니다. github+1
- 키 유형별 처리 시간 차이로 인한 잠재적인 타이밍 공격
수정 권장 사항
169번째 줄의 경우:
- 오류 메시지에서 핵심 자료 출력을 제거합니다.
- 민감한 정보를 공개하지 않고 일반적인 메시지를 사용하세요.
- 보안 감사 시스템을 위해서만 세부 정보를 기록합니다.
26번째 줄의 경우:
- 입력 매개변수에 대한 엄격한 유효성 검사를 추가합니다.
- 공개 키의 구조와 형식을 확인하세요
- 안전한 키 처리 방법을 구현하세요
이러한 취약점은 특히 비트코인 환경에서 매우 위험한데, 키 정보 유출은 자금 도난으로 이어질 수 있기 때문입니다. christian-rossow+1

성공적인 복구 시연: 22.62962700 BTC 지갑
사례 연구 개요 및 검증
크립토딥테크(CryptoDeepTech) 연구팀은 22.62962700 BTC (복구 당시 약 2,845,109.85달러) 가 들어 있는 비트코인 지갑에 접근하여 해당 취약점의 실질적인 영향을 성공적으로 입증했습니다 . 목표 지갑 주소는 12fcWddtXyxrnxUn6UdmqCbSaVsaYKvHQp 로 , 비트코인 블록체인 상에서 공개적으로 확인 가능한 주소이며 거래 내역과 잔액이 확인된 주소입니다.
이번 시연은 취약점의 존재와 공격 방법론의 효과성을 실증적으로 검증하는 역할을 했습니다.

복구 과정에는 지갑의 개인 키를 재구성하기 위해 취약점을 체계적으로 적용하는 작업이 포함되었습니다. 취약점의 매개변수를 분석하고 축소된 검색 공간 내에서 잠재적인 키 후보들을 체계적으로 테스트한 결과, 팀은 지갑 가져오기 형식(WIF)에서 유효한 개인 키인 KzfWTS3FvYWnSnWhncr6CwwfPmuHr1UFqgq6sFkGHf1zc49NirkC를 성공적으로 식별했습니다.
이 특정 키 형식은 추가 메타데이터(버전 바이트, 압축 플래그 및 체크섬)가 포함된 원시 개인 키를 나타내며, 대부분의 비트코인 지갑 소프트웨어로 가져올 수 있도록 합니다.

www.bitcolab.ru/bitcoin-transaction [지갑 복구: $2845109.85]
기술적 프로세스 및 블록체인 확인
기술적 복구는 취약한 하드웨어를 사용하여 생성되었을 가능성이 있는 지갑을 식별하는 것부터 시작하여 여러 단계를 거쳤습니다 . 그런 다음 팀은 결함이 있는 키 생성 프로세스를 시뮬레이션하는 방법론을 적용하여 후보 개인 키를 체계적으로 테스트하고 표준 암호화 유도(구체적으로는 secp256k1 곡선에서 타원 곡선 곱셈을 통해)를 통해 목표 공개 주소를 생성하는 키를 찾아냈습니다.

블록체인 메시지 디코더: www.bitcoinmessage.ru
유효한 개인 키를 확보한 후, 팀은 지갑 제어권을 확인하기 위해 검증 거래를 수행했습니다. 이러한 거래는 개념 증명을 보여주는 동시에 복구된 자금의 대부분을 합법적인 반환 절차에 사용할 수 있도록 구성되었습니다. 전체 과정은 투명하게 문서화 되었으며 , 거래 기록은 비트코인 블록체인에 영구적으로 기록되어 취약점 악용 가능성과 성공적인 복구 방법론에 대한 불변의 증거로 활용되었습니다.
0100000001b964c07b68fdcf5ce628ac0fffae45d49c4db5077fddfc4535a167c416d163ed000000006b483045022100ae79d0759ba5573e08e16e4e6f77c5e2e48f778d33c8861e8ac467eb0ec5a42202202da152d8ee85797755f1e4f9f5ccbaac17365c2ec4026febaf3b5b56a6075fc0012102cc05bf641e73bde7cbff60d36f4ddc1929518abfbf57ecf8edd48e127f3f0823ffffffff030000000000000000456a437777772e626974636f6c61622e72752f626974636f696e2d7472616e73616374696f6e205b57414c4c4554205245434f564552593a202420323834353130392e38355de8030000000000001976a914a0b0d60e5991578ed37cbda2b17d8b2ce23ab29588ac61320000000000001976a91412459348db0d855f7ae0394ba71c46e77843799688ac00000000
암호 분석 도구는 비트코인 지갑 소유자의 요청에 따른 공인 보안 감사뿐만 아니라 암호 분석 , 블록체인 보안 및 개인 정보 보호 분야의 학술 및 연구 프로젝트, 그리고 소프트웨어 및 하드웨어 암호화폐 저장 시스템 모두에 대한 방어 애플리케이션을 위해 설계되었습니다.
CryptoDeepTech 분석 도구: 아키텍처 및 작동 방식
도구 개요 및 개발 배경
크립토딥테크(CryptoDeepTech) 연구팀은 취약점을 식별하고 악용하도록 특별히 설계된 암호화 분석 도구를 개발했습니다. 이 도구는 블록체인 보안 연구 및 취약점 평가에 중점을 둔 광범위한 프로젝트의 일환으로 귄터 죄이어(Günther Zöeir) 연구 센터 의 연구실에서 개발되었습니다. 이 도구는 엄격한 학술적 기준을 준수하여 개발되었으며, 두 가지 목적을 가지고 설계되었습니다. 첫째, 약한 엔트로피 취약점의 실질적인 영향을 입증하는 것, 둘째, 향후 유사한 취약점으로부터 보호하는 데 도움이 될 수 있는 보안 감사 프레임워크를 제공하는 것입니다.
이 도구는 암호 분석 요소와 최적화된 검색 방법론을 결합한 체계적인 스캔 알고리즘을 구현합니다. 이 도구의 아키텍처는 비트코인 네트워크의 방대한 주소 공간에서 취약한 지갑을 효율적으로 식별하는 동시에 취약점으로 인해 발생하는 수학적 제약을 해결하도록 특별히 설계되었습니다. 이는 블록체인 포렌식 기능 에 있어 중요한 진전을 의미하며 , 악의적인 공격에 의해 악용될 때까지 발견되지 않을 수 있는 광범위한 취약점을 체계적으로 평가할 수 있게 해줍니다.
기술 아키텍처 및 운영 원칙
CryptoDeepTech 분석 도구는 여러 상호 연결된 모듈 로 구성되어 있으며 , 각 모듈은 취약점 식별 및 악용 과정의 특정 측면을 담당합니다.
- 취약점 패턴 인식 모듈 : 이 구성 요소는 공개 키 생성 과정에서 나타나는 약한 엔트로피의 수학적 특징을 식별합니다. 블록체인 상의 공개 키 구조적 특성을 분석하여 취약성과 일관된 특성을 보이는 주소를 표시할 수 있습니다.
- 결정론적 키 공간 열거 엔진 : 이 도구의 핵심인 이 엔진은 엔트로피 취약점으로 인해 축소된 키 공간을 체계적으로 탐색합니다. 보안 키 생성에 대한 무차별 대입 방식과 비교하여 계산 요구 사항을 획기적으로 줄이는 최적화된 검색 알고리즘을 구현합니다.
- 암호화 검증 시스템 : 이 모듈은 표준 타원 곡선 암호화를 사용하여 대상 공개 주소에 대해 후보 개인 키를 실시간으로 검증합니다. 이를 통해 유효한 키 쌍만 성공적인 복구로 식별되도록 보장합니다.
- 블록체인 통합 레이어 : 이 도구는 비트코인 네트워크 노드와 직접 연동하여 주소, 잔액 및 거래 내역을 검증하고, 취약한 지갑과 그 내용에 대한 상황 정보를 제공합니다.
이 도구의 작동 원리는 응용 암호 분석 에 기반을 두고 있으며 , 특히 키 생성 과정에서 엔트로피 부족으로 인해 발생하는 수학적 취약점을 표적으로 삼았습니다. ESP32 의사난수 생성기(PRNG) 결함의 정확한 특성을 이해함으로써 연구원들은 제한된 검색 공간을 효율적으로 탐색하는 알고리즘을 개발할 수 있었고, 일반적으로 불가능한 계산 작업을 실행 가능한 복구 작업으로 전환할 수 있었습니다.
| # | 출처 및 제목 | 주요 취약점 | 영향을 받는 지갑/기기 | 크립토딥테크 역할 | 주요 증거/세부 사항 |
|---|---|---|---|---|---|
| 1 | 크립토뉴스닷컴(CryptoNews.net) 보도 : 비트코인 지갑에 사용되는 중국산 칩이 거래자들을 위험에 빠뜨리고 있다. | 중국산 ESP32 칩에서 발견된 CVE-2025-27840 취약점에 대해 설명합니다. 이 취약점은 무단 거래 서명 및 원격 개인 키 탈취를 허용합니다. | ESP32 기반 비트코인 하드웨어 지갑 및 ESP32를 사용하는 기타 IoT 장치. | 크립토딥테크는 화이트햇 해커들이 칩을 분석하고 취약점을 발견한 사이버 보안 연구 회사라고 소개합니다 . | 크립토딥테크(CryptoDeepTech)가 거래 서명을 위조하고 10 BTC가 들어 있는 실제 지갑의 개인 키를 복호화하여 해당 공격이 실현 가능하다는 것을 입증했다는 점에 주목하십시오. |
| 2 | Bitget 뉴스: ESP32 칩 취약점으로 인해 비트코인 지갑에 잠재적 위험이 발생할 수 있음 | 이 문서에서는 CVE-2025-27840 취약점이 공격자가 ESP32의 보안 프로토콜을 우회하고 Crypto-MCP 결함 등을 통해 지갑 개인 키를 추출할 수 있도록 허용한다고 설명합니다. | ESP32 기반 하드웨어 지갑(Blockstream Jade Plus(ESP32-S3) 포함) 및 Electrum 기반 지갑. | CryptoDeepTech의 심층 분석을 인용하며 공격자가 개인 키에 접근할 수 있다는 경고를 반복적으로 언급합니다. | 크립토딥테크(CryptoDeepTech) 연구원들이 10 BTC가 들어 있는 테스트용 비트코인 지갑을 대상으로 해당 버그를 악용했다는 보고가 나왔으며 , 이는 대규모 공격 및 국가 지원 작전으로 이어질 수 있는 위험성을 강조합니다. |
| 3 | 바이낸스 스퀘어에서 비트코인 지갑용 칩에 심각한 취약점이 발견되었습니다. | ESP32의 CVE-2025-27840에 대한 요약: 모듈 업데이트를 통한 영구 감염 및 승인되지 않은 비트코인 거래 서명 과 개인 키 탈취 기능 . | ESP32 칩은 수십억 개의 IoT 기기와 Blockstream Jade와 같은 하드웨어 비트코인 지갑에 사용됩니다. | 크립토딥테크 전문가들이 공격 벡터를 발견하고 실험적으로 검증한 공로를 인정한다 . | CryptoDeepTech의 조사 결과는 다음과 같습니다: 취약한 의사난수 생성기(PRNG) 엔트로피, 유효하지 않은 개인 키 생성 , 잘못된 해싱을 통한 위조 서명, ECC 하위 그룹 공격, 곡선 상의 Y 좌표 모호성 악용 등이며 , 10 BTC 지갑을 대상으로 테스트했습니다. |
| 4 | Poloniex Flash Flash 1290905 – ESP32 칩 취약점 | 비트코인 지갑에 사용되는 ESP32 칩에 심각한 취약점(CVE-2025-27840)이 있어 개인 키 도난으로 이어질 수 있다는 짧은 경고입니다. | ESP32 기반 모듈 및 관련 네트워크 장치를 사용하는 비트코인 지갑. | 해당 취약점에 대한 해외 언론 보도를 전달하고, 독자들에게 독립적인 전문가들의 외부 연구 자료를 참조하도록 암묵적으로 안내합니다. | 완전한 분석이라기보다는 시장 뉴스 지표 역할을 하지만, 거래자들 사이에서 ESP32/CVE-2025-27840 문제에 대한 인식을 높이는 데 도움이 됩니다. |
| 5 | X(트위터) – BitcoinNewsCom이 ESP32의 CVE-2025-27840에 대해 트윗했습니다. | 여러 유명 비트코인 하드웨어 지갑에 사용되는 ESP32 칩에서 심각한 취약점(CVE-2025-27840)을 발견했다고 발표합니다 . | ESP32 기반의 “여러 유명 비트코인 하드웨어 지갑”과 더 넓은 암호화폐 하드웨어 생태계. | (링크된 기사에 보도된) 보안 연구원들의 연구 성과를 강조하지만 , 연구팀에 대한 자세한 정보는 제공하지 않습니다. 기본 정보는 CryptoDeepTech에서 가져왔습니다. | X에 대한 신속한 뉴스 배포 수단으로, CryptoDeepTech의 익스플로잇 시연 및 10 BTC 테스트 지갑에 대한 자세한 내용을 담은 장문의 기사 로 트래픽을 유도합니다. |
| 6 | ForkLog (EN) 비트코인 지갑 칩에서 심각한 취약점 발견 | ESP32의 CVE-2025-27840 취약점을 통해 공격자가 업데이트를 이용해 마이크로컨트롤러를 감염시키고 , 승인되지 않은 거래에 서명하고, 개인 키를 탈취하는 방법에 대한 자세한 내용입니다. | ESP32 칩은 수십억 개의 IoT 기기와 Blockstream Jade와 같은 하드웨어 지갑에 사용됩니다. | 해당 문서에서는 크립토딥테크(CryptoDeepTech) 전문가들이 결함을 발견하고, 다양한 공격 방식을 테스트하며, 실제 익스플로잇을 수행했다고 명시적으로 밝히고 있습니다. | 이 글에서는 CryptoDeepTech의 스크립트를 사용하여 유효하지 않은 키를 생성하고, 비트코인 서명을 위조하고, 소규모 그룹 공격을 통해 키를 추출하고, 가짜 공개 키를 제작하는 방법을 설명하며, 실제 10 BTC 지갑에서 검증한 결과를 제시합니다. |
| 7 | AInvest 비트코인 지갑, ESP32 칩 결함으로 취약 | ESP32의 CVE-2025-27840 취약점으로 인해 지갑 보호 기능을 우회하고 개인 키를 추출할 수 있으므로 비트코인 사용자에게 경고가 필요하다는 점을 다시 한번 강조합니다. | ESP32 기반 비트코인 지갑(Blockstream Jade Plus 포함) 및 ESP32를 활용한 Electrum 기반 설정. | 이 글은 CryptoDeepTech의 분석 내용을 강조하고, 해당 취약점에 대한 기술적 통찰력을 제공하는 주요 출처 로서 CryptoDeepTech 팀을 소개합니다 . | 크립토딥테크(CryptoDeepTech)가 10 BTC 지갑을 실제로 악용한 사례를 언급하며 , 손상된 ESP32 칩을 이용해 국가 차원의 스파이 활동 및 조직적인 절도 행위가 발생할 가능성에 대해 경고합니다 . |
| 8 | 비트코인 지갑에 사용되는 중국산 Protos 칩이 거래자들을 위험에 빠뜨리고 있습니다. | ESP32의 CVE-2025-27840 취약점을 조사하여 모듈 업데이트를 악용하여 승인되지 않은 BTC 거래에 서명하고 키를 탈취하는 방법을 보여줍니다. | Blockstream Jade와 같은 하드웨어 지갑 및 기타 여러 ESP32 탑재 기기에는 ESP32 칩이 내장되어 있습니다. | CryptoDeepTech는 화이트햇 해커들이 실제로 취약점을 입증한 사이버 보안 연구 회사라고 설명합니다 . | 크립토딥테크(CryptoDeepTech)가 디버그 채널을 통해 거래 서명을 위조 하고 10 BTC가 들어 있는 지갑의 개인 키를 성공적으로 해독했다는 보고가 나왔는데 , 이는 그들의 뛰어난 암호 분석 능력을 보여주는 것이다. |
| 9 | CoinGeek 의 Blockstream Jade 지갑과 ESP32 칩 내부에 숨겨진 위협 | 이 보고서는 CVE-2025-27840을 하드웨어 지갑 결함의 더 넓은 맥락에서 다루며, ESP32의 취약한 난수성으로 인해 개인 키를 추측하기 쉽고 자체 보관 보안을 약화시킨다는 점을 강조합니다. | ESP32 기반 지갑(Blockstream Jade 포함) 및 ESP32로 제작된 모든 DIY/맞춤형 서명 도구. | CryptoDeepTech의 연구가 이론을 넘어 실제 행동으로 이어졌음을 강조합니다. 그들은 ESP32의 취약점을 이용해 10 BTC가 들어 있는 지갑을 해킹했습니다. | 크립토딥테크(CryptoDeepTech)의 10 BTC 지갑 해킹 성공 사례를 중심으로, 칩 수준의 취약점이 하드웨어 지갑을 대규모로 조용히 손상시킬 수 있음을 주장합니다. |
| 10 | ESP32 칩 결함 으로 암호화폐 지갑이 해킹 위험에 노출됨… | CVE-2025-27840은 취약한 의사난수 생성기(PRNG), 유효하지 않은 개인 키 허용, 그리고 위조된 ECDSA 서명 및 키 도용을 허용하는 Electrum 관련 해싱 버그 의 조합으로 분석됩니다 . | ESP32 기반 암호화폐 지갑(예: Blockstream Jade) 및 ESP32가 내장된 다양한 IoT 장치. | 해당 취약점을 발견하고 , CVE를 등록하고, 통제된 시뮬레이션에서 키 추출을 시연한 CryptoDeepTech의 사이버 보안 전문가들에게 공로를 돌립니다. | 이 글은 크립토딥테크(CryptoDeepTech)가 10 BTC가 들어 있는 지갑에서 개인 키를 어떻게 은밀하게 추출했는지 설명하고 , 일렉트럼(Electrum) 기반 지갑과 전 세계 IoT 인프라에 미치는 영향에 대해 논의합니다. |
| 11 | ForkLog (RU) В чипах для биткоин‑кошельков обнаружили критическуу уязвимость | ESP32의 CVE-2025-27840 취약점에 대한 러시아어 보도 자료입니다. 이 자료에서는 공격자가 업데이트를 통해 칩을 감염시키고, 승인되지 않은 거래에 서명하고, 개인 키를 탈취할 수 있다고 설명합니다. | ESP32 기반 비트코인 하드웨어 지갑(Blockstream Jade 포함) 및 기타 ESP32 기반 장치. | 크립토딥테크 전문가들이 해당 칩의 결함에 대한 연구, 실험 및 기술적 결론 의 출처라고 설명합니다 . | 영어 버전과 동일한 실험 목록을 제공합니다. 유효하지 않은 키 생성, 서명 위조, ECC 하위 그룹 공격 및 가짜 공개 키 등 모든 실험은 실제 10 BTC 지갑에서 테스트되었으며, 이는 CryptoDeepTech가 실무 암호 분석가로서의 역할을 강화합니다. |
| 12 | SecurityOnline.info CVE-2025-27840: 초소형 ESP32 칩으로 전 세계 비트코인 지갑을 해킹할 수 있는 방법 | 후원자 전용 심층 분석 영상입니다. ESP32 설계의 작은 결함이 어떻게 전 세계 비트코인 지갑을 위협할 수 있는지 집중적으로 다룹니다 . (CVE-2025-27840 관련 내용) | 전 세계의 비트코인 지갑 및 기타 장치들은 ESP32 마이크로컨트롤러에 의존합니다. | CryptoDeepTech에서 제공한 이미지를 사용하고 있으며, 해당 보고서를 그들의 연구를 기반으로 한 전문적인 취약점 분석으로 제시합니다. | 전체 내용은 유료 구독자만 볼 수 있지만, 예고편을 통해 해당 기사가 CryptoDeepTech의 조사 결과와 마찬가지로 ESP32 결함과 이로 인한 지갑 개인 키 노출 문제를 다루고 있음을 알 수 있습니다. |

과학 논문: BiToolkit과 비트코인 지갑 복구에서 개인 키 추출을 위한 주요 취약점 악용에서의 역할
본 논문은 암호화 키 추출을 통해 비트코인 지갑 복구를 위해 설계된 특수 소프트웨어 유틸리티인 BiToolkit에 대한 종합적인 분석을 제공합니다. 특히, BiToolkit이 개인 키 유출과 관련된 주요 취약점을 악용하여 분실 또는 접근 불가능한 비트코인 지갑을 복구하는 방식에 초점을 맞춥니다. 본 논문은 BiToolkit의 핵심 기능, 특히 키 유출 공격을 비롯한 취약점의 근본적인 메커니즘, 그리고 비트코인 생태계에 미칠 수 있는 잠재적 위험에 대해 자세히 설명합니다. 또한, 이러한 주요 위험을 완화하기 위한 실질적인 시사점과 보안 권고 사항을 제시합니다.
BiToolkit은 비트코인 보안 연구 및 지갑 복구 작업 분야에서 널리 사용되는 주요 도구 중 하나입니다. 이 도구는 고급 암호화 및 포렌식 기술을 활용하여 취약한 비트코인 지갑에서 개인 키를 추출합니다. 악용된 핵심 취약점은 지갑 소프트웨어의 부적절한 처리, 예를 들어 안전하지 않은 로깅, 버퍼 오버플로 또는 초기화되지 않은 메모리 사용으로 인해 개인 키 정보가 유출되는 것입니다.
비트코인 소유권과 제어권은 전적으로 개인 키 보유에 달려 있기 때문에 이러한 비밀 키가 유출될 경우 사용자 및 전체 암호화폐 생태계에 치명적인 위협이 됩니다. BiToolkit은 알려진 소프트웨어 취약점을 이용하여 지갑 복구를 위한 개인 키 추출을 용이하게 하며, 이는 포렌식 복구 또는 악의적인 공격에 모두 사용될 수 있습니다.
도구 개요: BiToolkit
BiToolkit은 비트코인의 secp256k1 타원 곡선 암호화 프레임워크에 맞춰 설계된 다양한 암호화 공격 벡터와 포렌식 분석 방법을 통합합니다. 이 툴킷에는 다음과 같은 기능이 포함되어 있습니다.
- 지갑 파일과 블록체인 데이터를 스캔하여 남아있는 비밀 키 조각을 찾습니다.
- 로깅 취약점이나 직렬화 결함을 악용하여 개인 키 자료에 접근하는 행위.
- 부분적으로 서명된 비트코인 거래(PSBT)를 분석하여 핵심 키 노출 여부를 확인합니다.
- 유출된 데이터 조각을 사용하여 개인 키를 재구성하고 지갑 접근 권한을 복원합니다.
무엇보다 중요한 것은 BiToolkit이 CWE-310(암호화 키 노출) 및 CWE-922(민감한 정보의 안전하지 않은 저장)와 같이 널리 사용되는 지갑 구현의 취약점을 목표로 한다는 점입니다. 또한 비트코인의 Taproot 업그레이드의 미묘한 차이를 고려하여 개인 키를 노출시킬 수 있는 안전하지 않은 메모리 할당 및 버퍼 오버플로 버그를 탐지합니다.
비트코인 키 보안에 대한 심각한 취약점의 영향
BiToolkit에서 다루는 취약점은 다음과 같은 경로를 통해 개인 키를 노출합니다.
- 비밀 키 유출(키 공개 공격): 부적절한 오류 처리 또는 로깅으로 인해 민감한 키 구성 요소가 출력되어 공격자 또는 포렌식 분석가가 로그 또는 메모리 덤프에서 개인 키를 추출할 수 있게 되는 공격입니다.
- 버퍼 오버플로 및 언더플로: 안전하지 않은 버퍼 처리는 민감한 데이터가 의도된 버퍼 경계를 넘어 유출되는 메모리 노출로 이어질 수 있습니다.
- 초기화되지 않은 메모리 사용: JavaScript 환경에서 Buffer.allocUnsafe와 같은 안전하지 않은 메모리 할당 방식을 사용하면 블록체인 스크립트나 지갑 파일에 암호화 비밀 정보가 의도치 않게 유출될 수 있습니다.
공격이 성공하면 개인 키에 직접 접근하여 피해자의 비트코인 보유 자산을 완전히 장악할 수 있습니다. 이는 비트코인의 탈중앙화 신뢰 모델을 근본적으로 훼손하고 대규모 절도, 시장 신뢰도 하락, 시스템 불안정을 초래할 수 있습니다.
BiToolkit을 사용한 활용 메커니즘
BiToolkit은 다음과 같은 방식으로 탐지 및 추출 프로세스를 자동화합니다.
- 지갑 및 거래 데이터를 분석하여 알려진 취약점 패턴을 찾습니다.
- 형식이 잘못되었거나 악의적인 입력을 처리하기 위해 길이 검사 및 구조적 유효성 검사 우회 기법을 사용합니다.
- 직렬화된 스크립트 또는 메모리 버퍼에서 중요한 정보가 포함될 수 있는 불필요한 바이트를 추출합니다.
- 암호화 검증을 통해 부분적인 키 데이터를 재조립하여 원래의 개인 키를 복원합니다.
이 툴킷의 모듈식 아키텍처는 감사 파이프라인 및 실시간 사고 대응 플랫폼과의 통합을 지원하여 복구 전문가와 보안 연구원 모두에게 유용합니다.
위험 완화 및 보안 권장 사항
BiToolkit의 기능으로 인해 드러난 위험에 대응하기 위해서는 다음 사항이 필수적입니다.
- 지갑 소프트웨어에서 오버플로를 방지하기 위해 엄격한 입력 유효성 검사 및 버퍼 길이 검사를 시행합니다.
- 안전하지 않은 메모리 할당 방식을 피하고, 안전한 0으로 초기화하는 함수를 활용합니다.
- 오류 메시지 또는 공개 로그에 개인 키 정보가 기록되거나 노출되는 것을 금지합니다.
- 정기적인 보안 감사, 정적 코드 분석 및 암호화 종속성 업데이트.
- 개인 키 처리를 강력한 접근 제어 기능을 갖춘 보안 모듈 내에 캡슐화합니다.
이러한 모범 사례를 준수하면 BiToolkit 및 유사 도구가 탐지하는 공격 표면을 크게 줄일 수 있습니다.
결론
BiToolkit은 특수 보안 도구가 분실된 비트코인 지갑을 복구하기 위한 중요한 개인 키 유출 취약점을 중심으로 설계되었지만, 오용될 경우 심각한 보안 위협을 초래할 수 있음을 보여주는 대표적인 사례입니다. BiToolkit의 분석은 소프트웨어 구현 오류와 블록체인 보안 무결성 간의 깊은 연관성을 밝혀줍니다. 돌이킬 수 없는 개인 키 유출을 방지하고 비트코인의 탈중앙화 모델에 대한 신뢰를 유지하기 위해서는 사전 예방적 완화 전략과 안전한 코딩 패러다임을 우선시해야 합니다.
Taproot 구현의 암호화 취약점: 원인 및 안전한 제거 방법
주석
본 논문은 자바스크립트로 비트코인 탭루트 프로토콜을 구현할 때 발생하는 암호화 취약점을 분석하고, 특히 개인 키 유출 위협에 초점을 맞춘다. 부적절한 키 자료 처리 및 잘못된 오류 처리로 인해 비트코인 지갑 소유자의 비밀 정보가 어떻게 유출될 수 있는지 논의한다. 안전한 키 처리 아키텍처를 제안하고, 이러한 공격을 방지하기 위한 신뢰할 수 있는 설계 원칙을 보여주는 안전한 버전의 코드를 제공한다.
소개
Taproot은 스마트 계약의 개인 정보 보호, 성능 및 유연성을 확장하기 위한 비트코인 프로토콜의 중요한 업데이트입니다. 새로운 서명 유형(Schnorr)과 스크립트가 도입됨에 따라, 특히 브라우저 기반 애플리케이션과 CLI 도구를 포함하여 암호화폐 지갑 생태계에서 활발히 사용되는 오픈 소스 JavaScript 및 TypeScript 라이브러리에서 키 자료를 정확하게 처리해야 하는 요구 사항이 증가하고 있습니다. 비밀 데이터 처리의 아주 작은 결함조차도 치명적인 결과를 초래할 수 있습니다. 비밀 키가 단 한 번이라도 유출되면 자금이 돌이킬 수 없이 손상될 수 있습니다. keyhunters+2
취약성 발생 메커니즘
연구에 사용된 코드에는 두 가지 일반적인 유형의 오류가 포함되어 있습니다.
- 자바스크립트 로그 또는 오류 메시지 에 핵심 정보 출력.
if (!outputKey) throw new Error( `Cannot tweak tap internal key for input #${inputIndex}. Public key: ${ tapInternalKey && tapInternalKey.toString('hex') }`, );여기서 키의 내부 부분(tapInternalKey)이 직렬화되어 오류 로그 또는 콘솔에 출력될 수 있습니다. 악용 시 공격자는 오류를 유발하여 모니터링 로그 또는 기타 채널을 통해 개인/민감한 정보를 유출할 수 있습니다. (vulert+3) - 자바스크립트 형식 검사 없이 공개 키를 잘못 처리하는 문제:
const toXOnly = pubKey => (pubKey.length === 32 ? pubKey : pubKey.slice(1, 33));이 함수는 입력 데이터의 유효성을 검사하지 않고 공개 키를 잘못 잘라내어, 비정규/수정된 키를 사용할 경우 처리 오류나 사이드 채널 공격으로 이어질 수 있습니다. moldstud+2
암호화 및 운영 위험
- 기밀 데이터 유출 : 로그에서 개인 정보 또는 민감한 키가 발견될 경우, 애플리케이션 로그, CI/CD 파이프라인 또는 오류 보고 서비스에 접근 권한이 있는 공격자가 해당 키를 추출할 수 있습니다.
- 키 자료에 대한 불충분한 검증 : 잘못된 데이터를 주입할 가능성이 있으며, 이는 서명 변조 공격, 애플리케이션 충돌 또는 공격자에게 부수적인 정보 유출을 초래하는 데 사용될 수 있습니다. (codeant+2)
- 사이드 채널 공격 : 입력 정규화 및 유효성 검사 부족은 런타임 또는 예외 기반 사이드 채널 공격의 잠재적 공격 경로입니다. scielo
안전한 구현의 원칙 및 패턴
1. 개인/비밀 키는 로그 및 예외(오류 메시지)에 절대 출력하지 마십시오.
- 오류가 발생했다는 사실만 알리고 핵심 세부 정보를 공개하지 않아도 충분합니다.
2. 입력 데이터 구조(공개 키 포함)에 대한 엄격한 유효성 검사
- 값의 유형, 크기(공개 키의 길이: X 전용은 32바이트, 표준은 33바이트) 및 유효성을 확인하십시오.
3. 추상 메시지를 사용한 대체 및 오류 처리
- 메시지는 일반적인 내용이어야 하며 암호화 데이터에 대한 기술적인 세부 정보를 포함해서는 안 됩니다.
4. 인적 오류를 제거하기 위해 핵심 작업을 별도의 보호 모듈로 캡슐화합니다.
5. 종속성(JS 암호화 라이브러리)을 업데이트하고, 테스트 및 검증을 거친 암호화 기본 요소 구현만 사용하십시오. github+2
취약점 해결의 안전한 예시
두 가지 핵심 코드 영역에 대한 안전한 구현 사례를 살펴보겠습니다.
자바스크립트:// Безопасная функция вырезки X-Only публичного ключа
function toXOnlySafe(pubKey) {
if (!Buffer.isBuffer(pubKey)) throw new TypeError('Public key must be a buffer');
if (pubKey.length === 32) return pubKey; // X-only уже корректен
if (pubKey.length === 33 && (pubKey === 0x02 || pubKey === 0x03)) {
return pubKey.slice(1, 33);
}
throw new Error('Invalid public key format');
}
// Исправленный вывод ошибок БЕЗ leak-каналов
function tweakInternalPubKeySafe(inputIndex, input) {
const tapInternalKey = input.tapInternalKey;
try {
if (!tapInternalKey) throw new Error('No tap internal key');
// Пример: безопасная внутренняя обработка
const outputKey =
tapInternalKey &&
bip341.tweakKey(tapInternalKey, input.tapMerkleRoot);
if (!outputKey)
throw new Error(`Cannot tweak internal key for input #${inputIndex}`);
return outputKey.x;
} catch (err) {
// Логируем только техническое описание без ключей и hex-значений
throw new Error(`Failed to tweak internal key for input #${inputIndex}`);
}
}
설명:
- 공개 키의 유형과 크기에 대한 엄격한 비교.
- 예외 메시지에는 핵심 정보가 포함되어 있지 않고, 추상적인 메시지만 포함되어 있습니다.
- 모든 민감한 정보 처리는 캡슐화되고 검증됩니다.
보호 조치에 대한 권장 사항
- 기밀 정보를 제외하고 로그 감사 및 모니터링을 설정하십시오.
- TypeScript를 사용하여 엄격한 타입 지정 및 필수 데이터 크기 유효성 검사를 적용하세요. moldstud
- 정기적으로 종속성을 업데이트하고(npm audit), 암호화 모듈에 대해 제3자 감사를 받으십시오.
- 안전한 비밀 저장소와 비밀 관리 도구를 사용하고, 환경 변수나 소스에 비밀 키를 저장하지 마십시오.
결론
Taproot JavaScript 구현에서 개인 키가 유출되는 주요 원인은 로깅 오류와 불충분한 데이터 유효성 검사입니다. 안전한 구현을 위해서는 키 데이터를 전송하는 모든 제3자 채널을 완전히 차단하고, 입력값을 철저히 검증하며, 안전하고 검증된 라이브러리를 사용하고, 메시지, 로그 또는 보고서에 비밀 키 정보를 포함하지 않고 오류 처리를 구현해야 합니다.
최종 결론
비트코인 생태계에서 심각한 개인 키 유출 취약점은 암호화폐 보안에 있어 가장 파괴적이고 치명적인 현상 중 하나입니다. “키 공개 공격” 또는 “개인 키 유출”로 분류되는 이러한 취약점은 탈중앙화 시스템의 근본적인 신뢰 모델을 순식간에 무너뜨립니다. 블록체인 상의 자금 소유권은 오직 개인 키에 대한 지식에 의해서만 보장되기 때문입니다. 이 비밀 키가 한 번이라도 유출되면 공격자는 자금에 대한 완전하고 돌이킬 수 없는 통제권을 확보하게 되어 대규모 암호화폐 도난, 신뢰 붕괴, 가격 폭락, 그리고 전체 산업의 불안정화를 초래할 수 있습니다. 효과적인 해결책은 로깅 오류 및 부주의한 키 직렬화 제거뿐만 아니라, 비밀 정보의 안전한 저장 및 처리를 위한 엄격하게 보호된 아키텍처의 지속적인 구현을 요구합니다. 감사, 비밀 키 유출에 대한 무관용 정책, 그리고 과학적으로 검증된 소프트웨어 개발 방식만이 이러한 유형의 공격으로 인한 재앙적인 시나리오로부터 비트코인을 보호할 수 있습니다 .

이 오류는 개인 키, 시드 구문 또는 기타 암호화 비밀 정보와 같은 비밀 데이터의 일부가 공개 블록체인에 직접 유출되는 결과를 초래할 수 있습니다. 유출된 정보는 영구적으로 저장되며, 모든 공격자나 네트워크 연구자가 분석할 수 있게 됩니다. 결과적으로 집단 공격이 발생할 가능성이 있습니다.
“초기화되지 않은 메모리 공개”
(초기화되지 않은 메모리 노출)은 매우 드물지만 모든 금융 시스템에 극도로 파괴적인 취약점으로, 메모리 초기화 위반이 발생할 경우 자산이 즉시 완전히 손상될 수 있습니다.
비트코인의 맥락에서 이러한 사건의 결과는 재앙적입니다. 공격자가 남은 바이트 배열을 확보하면 개인 키의 일부 또는 전체를 복구하여 자신이 보유한 모든 자금을 탈취할 수 있습니다.
Buffer.allocUnsafe의 심각한 취약점이 비트코인 암호화폐 네트워크 공격에 어떤 영향을 미칠 수 있을까요?
주석
이 글에서는 비트코인 모듈(특히 Taproot) 구현에서 Buffer.allocUnsafe를 통한 안전하지 않은 메모리 할당과 관련된 심각한 암호화 취약점을 다룹니다. 이 취약점이 네트워크 보안에 미치는 영향을 분석하고, 가능한 공격 방법을 논의하며, 이러한 유형의 위협에 대한 과학적 용어를 제시합니다. 또한, 이러한 문제와 관련된 CVE(Common Vulnerabilities and Exposures) 정보가 있는 경우 함께 제공합니다.
취약점 설명
Node.js에서 해당 함수는 Buffer.allocUnsafe(size) 메모리를 할당한 후 해제하지 않아 이전에 사용했던 비밀 데이터(개인 키, 시드, 논스 및 기타 암호화 비밀 정보)가 새 버퍼에 남아 있을 가능성이 있습니다. 이러한 버퍼가 직렬화되어 블록체인에 저장되면 중요한 데이터가 예기치 않게 유출될 수 있습니다. deepsource+1
위협은 어떻게 발생하는가?
이 취약점은 초기화되지 않은 버퍼 내용 메모리를 사용하여 공개될 데이터를 직렬화하거나 생성할 때 발생합니다.
- Taproot 스크립트를 생성, 서명 또는 전송할 때 초기화되지 않은 바이트가 직렬화된 스크립트에 포함될 수 있습니다.
- 데이터는 블록체인(예: 스크립트 필드)에 저장되어 영구적으로 보존되며 모든 참여자가 접근할 수 있습니다.
- 공격자는 공개 데이터의 중요하지 않거나 불필요한 바이트를 분석하여 잔여 메모리 조각을 추출할 수 있습니다.
비트코인 암호화폐에 대한 공격의 영향
1. 비밀 키 및 복구 가능한 시드 유출
- 유출된 데이터를 발견한 공격자는 개인 키를 복구하고 자금에 접근하여 지갑을 완전히 장악할 수 있습니다.
2. 공격 확장성
- 데이터가 네트워크 전체에 공개되므로 이 공격은 본질적으로 전 세계적인 공격입니다.
- 개인 키 엔트로피의 일부라도 유출되면, 축소된 상태 공간을 이용한 선택 공격인 “무차별 대입 축소” 공격이 가능해집니다.
3. 장기적인 결과
- 유출된 정보는 블록체인에 영구적으로 저장되며, 모든 풀 노드 아카이브에서 다시 확인되므로 해킹은 되돌릴 수 없습니다.
공격 유형 (과학 용어)
그러한 위협은 다음과 같이 분류됩니다.
- 메모리 유출 공격 (“메모리 누출”)
- 초기화되지 않은 메모리 누수
- 사이드 채널 공격은 주요 프로토콜 경로 외부의 메모리/바이트를 분석하는 공격입니다. (arxiv+2)
과학 문헌에서는 “잔류 데이터 노출(Residual Data Exposure)”이라는 용어를 사용하며, CWE에 따르면 이는 CWE-244: 릴리스 전 힙 초기화 실패 오류의 변형입니다. arxiv
CVE 식별자
- CVE-2025-6545 — 암호화 작업 중 초기화되지 않은 메모리가 반환되는 것과 관련된 pbkdf2의 취약점 (유사한 결과를 초래하지만 사용되는 도구는 다름). github+1
- CVE-2018-12115 — Node.js 버퍼 API에서 경계 외 쓰기 취약점이 발견되었습니다. 버퍼를 잘못 사용할 경우 메모리 누수가 발생할 수 있습니다. (nodesource)
- 암호화폐 및 Taproot 환경에서 Buffer.allocUnsafe에 대해 직접적으로 등록된 CVE는 없지만, 이러한 취약점은 “메모리 유출/정보 누출”이라는 일반적인 CVE 범주에 속합니다.
가능한 공격 시나리오
- 사용자가 Taproot 스크립트를 생성하거나 서명하는 과정에서 Buffer.allocUnsafe가 사용됩니다.
- 비밀 정보의 일부가 포함된 “추가” 바이트가 직렬화된 스크립트에 포함됩니다.
- 해당 스크립트는 블록체인에 기록됩니다.
- 직렬화된 데이터를 분석할 수 있는 네트워크 탐색기는 비표준화된 바이트를 분석하여 개인 키의 일부 또는 전부를 복구할 수 있습니다.
- 해당 주소의 자금은 완전히 손실되었습니다.
결과 및 권장 사항
암호화 절차에서 Buffer.allocUnsafe를 사용하면 초기화되지 않은 메모리(잔여 메모리) 공격 , 메모리 노출 공격 또는 전역적인 규모의 복잡한 사이드 채널 공격의 요소가 될 수 있습니다. 암호화폐 분야에서 이는 가장 치명적인 오류 유형 중 하나로, 키가 손상되면 자산의 완전한 손실로 이어집니다.
비트코인 탭루트 코드의 암호화 취약점 분석
118번째 줄 에 심각한 취약점이 있습니다 .
가장 심각한 취약점은 118번째 줄에서 발견되었습니다 .
자바스크립트:const buffer = buffer_1.Buffer.allocUnsafe(varintLen); // better
취약점 설명
Buffer.allocUnsafe() 함수 내에서 사용하면 심각한 보안 위험이serializeScript 발생합니다 . 이 함수는 초기화되지 않은 메모리를 할당하는데, 이 메모리에는 deepsource+2를 포함하여 이전 데이터의 잔여물이 남아 있을 수 있습니다.
- 이전 거래의 개인 키
- 기억술 문구
- 비밀 nonce 값
- 비밀번호 및 액세스 토큰
- 기타 기밀 데이터

비밀 데이터 유출 메커니즘
- 초기화되지 않은 메모리 :
Buffer.allocUnsafe()할당된 메모리를 0으로 초기화하지 않아 이전 deepsource+1 작업 의 잔여물이 남아 있습니다. - 잠재적 취약점 : 버퍼가 완전히 덮어쓰여지지 않으면 이전 데이터가 스크립트 직렬화 결과에 남을 수 있습니다.
- 네트워크 전송 : 직렬화된 스크립트는 블록체인으로 전송될 수 있으며, 이로 인해 비밀 데이터가 공개적으로 노출될 수 있습니다.
추가적인 취약점
105번째 줄: 타원 곡선에 대한 측면 채널 공격
자바스크립트:const res = (0, ecc_lib_1.getEccLib)().xOnlyPointAddTweak(pubKey, tweakHash);
타원 곡선을 다루는 연산은 다음과 같은 제약을 받습니다.
- 타이밍 공격 – 실행 시간 분석 people.scs.carleton+1
- 전력 분석 공격 – 전력 소비 분석 Rambus
- 전자기 공격 – 전자기 복사 분석 arxiv

36행, 53행: 버퍼 비교에 대한 타이밍 공격
자바스크립트:if (kj.compare(ej) < 0) {
hashes.sort((a, b) => a.hash.compare(b.hash));
버퍼 비교 함수는 공격자가 비교 대상 데이터의 내용에 대한 정보를 얻을 수 있도록 타이밍 사이드 채널을 생성할 수 있습니다. techtarget+1
93행, 104행: 매개변수 유효성 검사가 불충분합니다.
자바스크립트:function tapTweakHash(pubKey, h) {
const tweakHash = tapTweakHash(pubKey, h);
검증 절차가 부족하면 잘못된 데이터가 처리되거나 암호화 기능이 예측 불가능한 동작을 보일 수 있습니다.
수정 권장 사항
1. Buffer.allocUnsafe를 Buffer.alloc으로 교체
자바스크립트:// Вместо:
const buffer = buffer_1.Buffer.allocUnsafe(varintLen);
// Использовать:
const buffer = buffer_1.Buffer.alloc(varintLen);
2. 상수 시간 연산 추가
타이밍 공격에 강한 암호학적으로 안전한 비교 함수를 사용하십시오.
3. 입력 데이터 유효성 검사 강화
암호화 작업을 수행하기 전에 모든 입력 매개변수에 유형 및 크기 검사를 추가하십시오.
4. 사이드채널 공격 방지
타원 곡선을 다룰 때 실행 시간 및 전력 소비 분석에 대한 보호 조치를 구현하십시오.
결론
가장 심각한 취약점은 118번째 줄의 `.` 사용 부분에서 발생하며 Buffer.allocUnsafe(), 이로 인해 개인 키 및 기타 비밀 정보가 비트코인 블록체인에 직접 유출될 수 있습니다. 이 취약점은 공개 키가 이미 네트워크에 노출되어 있는 탭루트(Taproot) 환경에서 특히 위험하며, 양자 컴퓨터의 공격 표면을 크게 증가시킵니다. reddit+5
보정
Bitcoin Taproot에서 Buffer.allocUnsafe 사용 시 발생하는 암호화 취약점: 분석, 결과 및 권장 사항
주석
이 글에서는 비트코인 탭루트(Bitcoin Taproot)의 자바스크립트 모듈에서 안전하지 않은 메모리 할당을 사용할 때 발생하는 암호화 취약점의 원인, 잠재적 결과(개인 키 유출, 민감 데이터 노출, 지갑 및 거래에 대한 공격 가능성)를 논하고, 향후 유사한 오류를 수정하고 예방하기 위한 권장 사항을 제시합니다. 또한, 자세한 설명과 함께 안전한 구현 방안을 제안합니다.
소개
비트코인에 탭루트 프로토콜이 도입되면서 복잡한 스크립트를 작성하고 개인정보 보호를 강화할 수 있는 가능성이 커짐에 따라 안전한 암호화 구현의 중요성이 더욱 커졌습니다. 하지만 새로운 기능을 구현하는 과정에서 개인 키 및 기타 비밀 정보와 관련된 중요한 데이터가 유출될 수 있는 저수준 오류가 발생할 수 있습니다 .
취약점 설명: Buffer.allocUnsafe
Node.js의 함수가 Buffer.allocUnsafe(size) 지정된 크기의 메모리 덩어리를 0으로 초기화하지 않고 할당하면, 할당된 버퍼에 이전에 사용된 메모리 블록의 잔여 데이터가 남아 있을 수 있습니다. 서명을 위해 데이터를 직렬화하거나 네트워크로 전송할 때, 이러한 잔여 데이터가 암묵적으로 추가될 수 있으며, 이로 인해 다음과 같은 문제가 발생할 수 있습니다 .
- 거래가 게시될 때 개인 키 또는 임의의 비밀 데이터가 사용자, 공격자 또는 블록체인에 공개적으로 유출되는 것.
- 가상 머신의 상태를 분석하기 위한 사이드 채널(JIT, GC)의 등장 으로 사이드 채널 공격이 용이해졌습니다.
- 클라이언트 또는 서버 측에서 예측할 수 없는 데이터의 파편화 및 증가 .
취약한 소스 코드의 예시
자바스크립트:function serializeScript(s) {
const varintLen = bufferutils_1.varuint.encodingLength(s.length);
const buffer = buffer_1.Buffer.allocUnsafe(varintLen); // <--- Уязвимость
bufferutils_1.varuint.encode(s.length, buffer);
return buffer_1.Buffer.concat([buffer, s]);
}
취약성은 정확히 어떻게 발생하는가?
`@`를 사용할 때 Buffer.allocUnsafe버퍼에 할당된 메모리는 초기화되지 않습니다. 할당 후 버퍼가 값으로 완전히 채워지지 않으면 결과 객체에 런타임 환경에서 이전에 사용되었던 데이터 조각(개인 키 또는 기타 비밀 매개변수 포함)이 포함될 수 있습니다. 비트코인 탭루트의 경우, 이는 계정의 개인 정보 보호 및 보안을 구성하는 중요한 변수에 해당합니다. github+1
이러한 버퍼를 네트워크나 저장소에 전송하거나 기록할 때, “쓸모없는” 바이트가 제3자에게 노출될 수 있으며, 최악의 경우 블록체인 네트워크 자체에 공개적으로 노출될 수도 있습니다.
결과 및 실제 공격 시나리오
- taproot-scripts의 원시 데이터 분석 : 스크립트에 메모리가 올바르게 할당되지 않은 경우, 충분한 리소스를 가진 연구자는 개인 정보의 일부를 추출할 수 있습니다.
- 재사용 공격(버퍼 재할당) : 사용 후 버퍼를 비우지 않고 새 객체에 다시 할당하여 잔여 데이터 분석이 가능합니다.
- 공격자가 제어하는 메모리 : 가상 머신의 다른 버그를 악용하는 경우, 할당된 블록을 예측할 수 있어 “힙 스프레이”와 같은 공격이 용이해집니다.
취약점을 안전하게 해결하는 방법
위에서 설명한 공격을 방지하려면 안전한 메모리 할당 방식만 사용해야 합니다. Buffer.alloc이 방식은 메모리를 0으로 채워 이전 데이터가 남아 있지 않도록 합니다.
고정 보안 코드
자바스크립트:function serializeScript(s) {
const varintLen = bufferutils_1.varuint.encodingLength(s.length);
// БЕЗОПАСНОЕ выделение памяти (все байты = 0)
const buffer = buffer_1.Buffer.alloc(varintLen);
bufferutils_1.varuint.encode(s.length, buffer);
return buffer_1.Buffer.concat([buffer, s]);
}
- 이를 사용하면
Buffer.alloc새 버퍼에 이전 값이 포함되지 않도록 보장됩니다. - 또한, 가능한 한 사용 후에는 민감한 데이터가 포함된 변수를 “삭제”해야 합니다(예: 배열을 0으로 덮어쓰기).
취약점을 예방하기 위한 추가 조치
- 정적 코드 분석: 정적 분석기는 사용 사례를 자동으로 감지
Buffer.allocUnsafe하고 개발자에게 경고해야 합니다. - 코드 검토: 암호화 모듈은 보안 전문가의 별도 감사를 거쳐야 합니다.
- 단위 테스트 및 퍼징: 자동화된 테스트는 직렬화되는 데이터에 불필요한 정보가 포함되어 있지 않은지 확인해야 합니다.
- 메모리 재사용 : 비밀 변수는 실수로 직렬화되거나 로그에 기록되지 않도록 특수한 구조체로 구현해야 합니다.
- 상수 시간 연산: 비밀 데이터 에 대해서는 사이드 채널(타이밍) 공격을 방지하기 위해 상수 시간 비교 연산만 사용하십시오.
결론
비트코인에서 Taproot 및 기타 프로토콜 개선 사항을 구현하려면 하위 수준 작업(직렬화 함수, 메모리 할당)의 암호학적 보안이 매우 중요합니다. 안전하지 않은 메모리 할당 함수를 사용하면 개인 키 및 기타 중요한 비밀 정보가 클라이언트 측뿐만 아니라 전 세계 블록체인 네트워크에서 은밀하고 치명적으로 유출될 수 있습니다. 따라서 안전한 함수를 사용하는 것으로 전환하고, 감사, 테스트 및 사이드 채널 공격에 대한 자동화된 보호 기능을 구현하는 것이 Buffer.allocUnsafe강력히 권장됩니다 . reddit+4Buffer.alloc
문학
- Buffer.allocUnsafe: 사용을 피해야 하는 이유. stackoverflow+1
- 암호화에 대한 사이드채널 공격: 조사 및 방어. arxiv+2
- 비트 코인 의 일반적인 취약점 및 노출.
- Node.js 보안 모범 사례. github+2
보호 버전의 코드 예시:
자바스크립트:function serializeScript(s) {
const varintLen = bufferutils_1.varuint.encodingLength(s.length);
// Безопасное выделение памяти
const buffer = buffer_1.Buffer.alloc(varintLen); // замена unsafe
bufferutils_1.varuint.encode(s.length, buffer);
return buffer_1.Buffer.concat([buffer, s]);
}
최종 과학적 결론
비트코인 네트워크용 Taproot 구현에서 Buffer.allocUnsafe를 통해 초기화되지 않은 메모리를 사용하는 것과 관련된 심각한 취약점이 발견되었습니다. 이는 암호화폐 보안의 핵심인 개인 키의 프라이버시와 접근 불가능성을 직접적으로 위협합니다. 이 오류로 인해 개인 키, 시드 구문 또는 기타 암호화 비밀과 같은 비밀 데이터의 일부가 공개 블록체인에 유출될 수 있으며, 유출된 정보는 영구적으로 저장되어 공격자나 네트워크 연구자가 분석할 수 있게 됩니다. 이는 “미초기화 메모리 유출” 공격으로 이어질 수 있는데, 이는 매우 드물지만 모든 금융 시스템에 극도로 파괴적인 취약점 유형입니다. 메모리 초기화 위반은 자산의 완전한 손실로 이어질 수 있습니다.
비트코인 환경에서 이러한 사고의 결과는 치명적입니다. 공격자가 남은 바이트 배열을 확보하면 개인 키의 일부 또는 전체를 복구하여 자신이 보유한 모든 자금을 탈취할 수 있습니다. 특히 심각한 문제는 블록체인에 노출된 데이터가 영구적으로 저장된다는 점입니다. 이러한 비밀 정보는 사라지지 않으며, 보안 침해 위험은 항상 존재합니다. 이러한 위협은 알고리즘상의 오류가 아니라 기본적인 메모리 오류에서 비롯되며, 암호화 위생의 기본 원칙을 위반하는 것입니다.
따라서 안전하지 않은 버퍼 함수, 초기화되지 않은 메모리 또는 안전하지 않은 직렬화와 같은 저수준 기능의 부주의하거나 경솔한 사용은 비트코인의 개인 정보 보호, 확장성 및 보안을 강화하기 위해 구현된 모든 고급 메커니즘을 훼손할 수 있습니다. 안전한 메모리 할당 및 가비지 컬렉션 원칙을 엄격히 준수하지 않으면 진정한 블록체인 보안은 불가능합니다. 이러한 취약점 하나만으로도 생태계와 전 세계 수백만 명의 사용자에게 치명적인 결과를 초래할 수 있습니다 .
버퍼 오버플로우를 이용한 키 추출 및 서명 위조 — 공개 키 처리에서의 버퍼 오버플로우: 비트코인 보안에 대한 심각한 위협이자 개인 키 추출 공격을 구현하는 도구
이 코드 결함은 공격자가 메모리 조작 및 입력 데이터 유효성 검사 오류 악용을 통해 개인 키에 접근하는 가장 위험한 공격 중 하나를 실행할 수 있도록 합니다. 이러한 공격의 결과는 사용자 자금 도난 및 지갑 해킹부터 메인 네트워크의 대규모 장애 및 핵심 생태계 서비스 마비에 이르기까지 치명적일 수 있습니다.
이번 취약점(버퍼 오버플로)의 유형, 비트코인에 미치는 심각성, 그리고 개인 키와 자금이 유출될 경우 발생할 수 있는 잠재적으로 치명적인 결과를 살펴보겠습니다. 이러한 이유로 이 문제는 과학계와 전문가 커뮤니티에서 시급한 과제입니다. bitcoincore+3
비트코인 공개키 처리 과정에서의 버퍼 오버플로우 – 공격의 결과 및 과학적 분류
소개
버퍼 오버플로는 중요한 데이터, 특히 암호화 키를 처리하는 소프트웨어 시스템에서 가장 위험한 취약점 중 하나입니다. 비트코인 생태계에서 이러한 버그는 애플리케이션 충돌뿐만 아니라 개인 키 유출, 자금 유출, DoS 공격, 심지어 공격자에 의한 원격 코드 실행으로 이어질 수 있습니다. sciencedirect+4
치명적인 취약성: 발생 메커니즘
PSBT 및 Taproot 관련 예제 코드에서 공개 키에서 X 좌표를 추출하는 작업은 공개 키의 길이를 먼저 확인하지 않고 수행됩니다.
자바스크립트const pubkeyXOnly = pubkey.slice(1, 33); // Уязвимость
수신 버퍼의 길이가 33바이트보다 짧으면 메모리 오버플로가 발생하여 공격자가 유효하지 않은 키를 획득하거나 애플리케이션 오류를 유발할 수 있습니다. 최악의 경우, 지갑이 작동을 멈추게 되고, 내부 데이터에 접근하거나 버퍼 오버플로를 유발하거나 키 구조를 변경할 수 있습니다. bitcoincore+3
비트코인 암호화폐에 대한 공격의 결과
공개 키를 잘못 처리하여 발생하는 버퍼 오버플로는 다음과 같은 공격으로 이어질 수 있습니다.
- 개인 키 가로채기 – 개인 데이터에 접근하는 행위로, 사용자의 지갑에서 자금을 훔치는 것과 같습니다.
- 서명 대체 – 거래 검증 시 가짜 디지털 서명을 삽입할 수 있는 기능.
- 노드 충돌 및 취약점(DoS 및 RCE) – 이 공격은 비트코인 노드를 다운시키거나 지갑 서버에서 원격으로 코드를 실행하여 네트워크 연결을 끊습니다. ajrsp+3
- 대규모 네트워크 감염 – 감염원은 손상된 거래를 중계하는 것을 포함하여 네트워크 전체에 악성 소프트웨어를 확산하는 데 사용될 수 있습니다.
공격에 대한 과학적 분류
공식 명칭
과학 및 기술 문헌에서 이러한 공격은 다음과 같이 분류됩니다.
- 버퍼 오버플로우 공격
- 암호 시스템에서 버퍼 오버플로를 이용한 키 추출 이나 버퍼 오버플로를 이용한 서명 위조 와 같은 경우가 있습니다.
CVE 및 표준
비트코인 역사 전반에 걸쳐 이와 같은 심각한 취약점이 기록되어 왔습니다.
- CVE-2017-18350 — SOCKS 프록시를 통해 공격자가 프로그램 스택을 덮어쓸 수 있도록 하는 버퍼 오버플로 취약점입니다. 이 취약점은 버전 0.15.1 이전의 비트코인 코어에서 가장 위험한 취약점 중 하나로 간주되었습니다. bitcoin+2
- CVE-2015-20111 — miniupnp의 버퍼 오버플로 취약점으로 인해 Bitcoin Core 0.12 이전 버전에서 원격 코드 실행 및 데이터 유출이 발생할 수 있습니다. bitcoincore+2
- CVE-2010-5139 – 출력 합계 계산 오류로 인해 네트워크가 분기되어 수십억 개의 비트 코인이 생성될 가능성이 있었습니다.
과학 출판물에 게재됨
버퍼 오버플로는 암호화폐 애플리케이션에 대한 공격의 과학적 및 기술적 분류에서 중요한 위치를 차지하며(참조), 여러 권위 있는 간행물에서 보안 서비스의 원격 침해를 위한 주요 취약점 유형으로 언급됩니다. 암호학에서 키 버퍼 처리 공격은 고객 자금 보안에 치명적인 영향을 미치기 때문에 별도의 연구 분야로 지정되어 있습니다 .
중요성과 결과
버퍼 처리 오류와 같은 문제는 개별 사용자의 자금 손실뿐만 아니라 전체 네트워크의 대규모 장애를 초래할 수 있습니다. 취약점이 발견될 경우, 개발자는 관련 구성 요소를 긴급히 업데이트하고 전체 비트코인 네트워크에 업데이트를 배포하여 재앙적인 결과를 방지해야 합니다. nvd.nist+3
제거 절차 및 예방
과학적 근거에 기반한 해결책은 다음과 같습니다.
- 입력 버퍼의 길이를 연산 전후에 검증합니다.
- 정적 분석의 적용
- 소스 코드에 대한 정기적인 감사
- 최신 보안 도구(DEP, ASLR, 스택 카나리 등)를 사용합니다. utexas+1
결론
비트코인 공개 키 처리 과정에서 발생하는 버퍼 오버플로는 전체 암호화폐 생태계에 근본적인 위협입니다. 이러한 공격은 과학적 분류 체계에서 버퍼 오버플로 공격(Buffer Overflow Attack, Buffer Overflow Attack)으로 정의되며, 비트코인의 특정 사례에는 CVE-2017-18350 및 CVE-2015-20111을 포함한 여러 CVE 번호가 부여되었습니다. 신뢰할 수 있는 보호는 기본적인 길이 검사 에서 시작되며, 보안 유지를 위해서는 지갑 개발 및 운영의 전체 수명 주기에 대한 체계적인 접근 방식이 필요합니다 .
비트코인 PSBT 코드의 암호화 취약점
제공된 코드에는 개인 키 유출 및 비트코인 지갑 보안 손상으로 이어질 수 있는 심각한 취약점이 함수 내에 존재합니다.pubkeyPositionInScript
주요 취약점
취약점 라인:
자바스크립트:const pubkeyXOnly = pubkey.slice(1, 33); // slice before calling?
문제 설명
slice 이 코드는 공개 키의 길이를 먼저 확인하지 않고 공개 키에 대한 연산을 수행합니다 . 이로 인해 몇 가지 심각한 보안 문제가 발생합니다: certik+2

1. 버퍼 언더플로우/오버플로우 취약점
pubkey길이가 33바이트 미만인 경우 , 해당 작업으로 인해 github+2 버퍼slice(1, 33)의 끝을 넘어선 데이터를 읽게 될 수 있습니다.- 유효성 검사 없음:
if (pubkey.length >= 33)작업을 수행하기 전에
2. 개인 키 유출 가능성
- Bitcoin Taproot 환경에서 압축된 공개 키를 부적절하게 처리하면 polynonce+2 개인 키가 손상될 수 있습니다.
- 이 연산은
pubkeyXOnly압축된 공개 키에서 x 좌표를 추출하는 데 사용되며, 이는 Taproot 주소에 필수적입니다. (reddit+2)
3. 취약점 유형 CVE-2015-20111
- 비트코인 코어와 다른 암호화폐 프로젝트에서도 유사한 버퍼 오버플로우 취약점이 발견되었습니다. (bitcoincore+2)
- 버퍼를 잘못 처리하면 원격 코드 실행으로 이어질 수 있습니다. bitcoincore+1
추가적인 취약점
중등도 심각도:
자바스크립트:const pubkeyHash = (0, crypto_1.hash160)(pubkey);
- 추가적인 검사 없이 hash160을 사용하면 해시 충돌 공격으로 이어질 수 있습니다. (halborn+1)
심각도 낮음:
자바스크립트:if (decompiled === null) throw new Error('Unknown script error');
- 오류 메시지를 통한 정보 유출은 공격자가 정찰 공격을 수행하는 데 도움이 될 수 있습니다.
맥락 및 함의
이러한 취약점은 특히 다음과 같은 상황에서 위험합니다.
- PSBT(부분 서명 비트코인 거래) 는 부분 거래를 위한 표준 형식입니다. learnmeabitcoin+2
- Taproot Technology – 공개 키의 올바른 처리가 보안에 매우 중요한 경우 ibmm+2
- 다중 사용자 지갑 – 키 처리 오류로 모든 자금이 위험에 처할 수 있음 crowdfundinsider+1
보정
해당 취약점을 제거하려면 버퍼 길이 검사를 추가해야 합니다.
자바스크립트:function pubkeyPositionInScript(pubkey, script) {
// Проверка длины публичного ключа
if (!pubkey || pubkey.length < 33) {
throw new Error('Invalid pubkey length');
}
const pubkeyHash = (0, crypto_1.hash160)(pubkey);
const pubkeyXOnly = pubkey.slice(1, 33); // Теперь безопасно
// ... остальной код
}
이 취약점은 버퍼 오버플로우/언더플로우 공격 유형에 속하며 , 공격자는 특히 탭루트 주소 및 PSBT 거래를 이용할 때 이를 악용하여 비트코인 지갑에서 개인 키를 추출할 수 있습니다. keyhunters+3
보정
비트코인 공개 키 처리의 버퍼 취약점 및 안전한 해결책
소개
비트코인과 같은 최신 암호화폐 시스템은 특히 JavaScript 및 Node.js 기반 거래 및 지갑을 다룰 때 핵심 데이터 처리에 매우 높은 보안 요구 사항을 갖고 있습니다. 저수준 프로그래밍 시스템에서 흔히 발생하는 취약점 중 하나는 버퍼 오버플로 입니다. 높은 수준의 보호에도 불구하고, 버퍼 크기 유효성 검사에서 발생 하는 일반적인 오류는 특히 핵심 키 자료 조작과 관련하여 다양한 공격과 기밀 정보 유출로 이어질 수 있습니다.
취약성 발생 메커니즘
PSBT 및 비트코인 탭루트 주소 작업을 위한 라이브러리에서 공개 키를 처리하는 코드 예시를 살펴보겠습니다.
자바스크립트:const pubkeyXOnly = pubkey.slice(1, 33); // slice before calling?
위 코드는 Taproot 주소의 압축된 공개 키에서 X 좌표를 추출합니다. 하지만 입력 버퍼의 길이를 확인하는 기본적인 검사가 빠져 있습니다. 변수의 pubkey 길이가 33바이트 미만이면 호출이 slice(1, 33) 실패합니다.
- 할당된 버퍼의 끝을 넘어 읽으면 메모리 내용과 민감한 데이터가 노출될 수 있습니다.
- 스크립트 생성 오류는 경우에 따라 공격자가 가짜 키를 입력하거나 재실행 공격 또는 서명 대체 공격을 수행할 수 있도록 허용할 수 있습니다.
- 일부 JavaScript 및 Node.js 환경에서는 이러한 오류가 TypeError를 발생시키지만, 저수준 구현에서는 메모리에서 실행으로의 접근(“쓰기 내용/위치”) 취약점으로 이어질 수 있습니다. journals.bilpubgroup+2
이 문제는 심각한 결과를 초래할 수 있습니다. 개인 키 또는 공개 키의 유출, 거래 조작 가능성, 그리고 경우에 따라서는 임의 코드 실행 가능성까지 발생할 수 있습니다. cobalt+1
현대적인 운영 방식
버퍼 크기 유효성 검사가 불충분한 경우를 악용한 공격은 Web3 개발뿐 아니라 다른 소프트웨어 생태계에서도 흔히 발생합니다. 키 크기에 대한 제어가 불충분한 경우 공격자는 다음과 같은 공격을 감행할 수 있습니다.
- 길이가 부족한 키를 전달하면 오류가 발생하고 크래시 덤프가 생성될 수 있습니다. journals.bilpubgroup+1
- 충돌을 일으키거나 유효하지 않지만 검증 가능한 서명 및 공개 키를 생성하기 위해 데이터를 주입합니다. acm+1
이러한 오류는 특히 PSBT(부분 서명 비트코인 거래) 및 다중 서명 지갑을 처리할 때 위험합니다. 이러한 버그를 악용하는 사례는 블록체인 솔루션뿐 아니라 전자 서명 및 암호화 처리를 사용하는 다른 환경에서도 여러 차례 보고되었습니다. trustwave+2
취약점에 대한 안전하고 정확한 해결책
안전한 완충액 취급의 기본 원칙
- 필수 입력 유효성 검사 : 배열/버퍼 요소에 접근하기 전에 안전한 작업을 위해 해당 요소의 길이가 충분한지 확인해야 합니다.
- 명시적 오류 처리 : 이상 징후가 의심될 경우 예외를 적절하게 처리합니다.
- 중요 구조에 대한 고정 크기 : 알려지고 검증된 키 형식만 사용하십시오.
보안 패치의 예시
(취약한 버전 이전):
자바스크립트:const pubkeyXOnly = pubkey.slice(1, 33); // УЯЗВИМОСТЬ!
(보호된 버전 이후):
자바스크립트:function toXOnlyPublicKey(pubkey) {
// Для Taproot требуется 33-байтный сжатый публичный ключ (0x02/0x03 + 32 байта)
if (!Buffer.isBuffer(pubkey) || pubkey.length !== 33) {
throw new Error('Invalid public key format: expected 33-byte compressed buffer');
}
// Дополнительно, убедимся, что первый байт - валидный префикс (0x02 или 0x03)
const prefix = pubkey;
if (prefix !== 0x02 && prefix !== 0x03) {
throw new Error('Invalid public key prefix for x-only extraction');
}
return pubkey.slice(1, 33); // Теперь безопасно!
}
예시 제어:
- 길이 및 유형 유효성 검사.
- 유효한 접두사인지 확인합니다.
- 요구되는 길이의 부분 배열을 정확하게 반환합니다. developer.mozilla+3
안전 패턴 적용하기
핵심 구조 버퍼를 사용하는 모든 함수는 입력 데이터의 잘못된 처리와 관련된 공격 유형을 완전히 완화하기 위해 이러한 검사를 반복해야 합니다. 이상적으로는 CI/CD 단계에서 정적 분석 및 퍼즈 테스트를 사용해야 합니다. semaphore+2
향후 공격 방지
- 모든 경계 사례(null, 너무 짧은 키, 너무 긴 키)에 대한 단위 테스트 커버리지.
- 승인된 라이브러리 사용 및 제3자 감사 .
- 종속성을 정기적으로 업데이트하고 자동화된 보안 스캐너를 구현합니다.
- 암호화 및 버퍼 보안의 기본 사항에 대해 팀원을 교육합니다 .
결론
암호화 시스템에서 키 자료를 다룰 때 발생하는 버퍼 취약점은 필연적으로 자금 손실 및 사용자 정보 유출의 위협으로 이어집니다. 안전한 키 관리는 기본적인 프로그래밍 원칙, 즉 데이터의 크기와 형식을 확인하는 것에서 시작됩니다. 위 예시에서처럼 길이 검사를 하지 않은 것과 같은 사소한 오류 하나라도 치명적일 수 있습니다. 제시된 전략을 사용하면 이러한 유형의 오류를 완전히 제거하고 암호화 프로젝트의 전반적인 보안 수준을 크게 향상시킬 수 있습니다. sciencedirect+3
결론적으로, 비트코인 생태계에서 공개 키 처리 과정의 버퍼 오버플로우 취약점은 단순한 기술적 오류가 아니라 전체 암호화폐 인프라에 대한 시스템적 위협입니다. 이러한 코드 결함은 공격자가 메모리 조작과 입력 데이터 유효성 검사 부재를 악용하여 개인 키에 접근하는 가장 위험한 공격 중 하나를 실행할 수 있도록 합니다. 이러한 공격의 결과는 사용자 자금 도난, 지갑 해킹부터 메인 네트워크의 대규모 장애 및 핵심 생태계 서비스 마비에 이르기까지 재앙적일 수 있습니다. 버퍼 경계에 대한 엄격한 검사, 정적 분석, 독립적인 감사, 그리고 책임감 있는 프로그래밍 문화 조성과 같은 포괄적인 조치를 구현하는 것만이 비트코인과 사용자를 이러한 위협으로부터 보호하고 탈중앙화 및 디지털 보안의 기본 원칙을 유지할 수 있는 유일한 방법입니다 .
- https://publications.cispa.de/articles/conference_contribution/Identifying_Key_Leakage_of_Bitcoin_Users/24612726
- https://christian-rossow.de/publications/btcsteal-raid2018.pdf
- https://keyhunters.ru/attack-on-private-key-exposure-we-will-consider-exploiting-errors-that-allow-obtaining-a-private-key-this-is-a-very-dangerous-attack-on-bitcoin-wallets-through-an-opcode-numbering-error-in-bitcoinli/
- https://www.semanticscholars.org/paper/Identifying-Key-Leakage-of-Bitcoin-Users-Brengel-Rossow/32c3e3fc47eeff6c8aa93fad01b1b0aadad7e323
- https://www.diva-portal.org/smash/get/diva2:1742546/FULLTEXT01.pdf
- https://arxiv.org/html/2109.07634v3
- https://www.koreascience.kr/article/JAKO202011161035971.page
- https://core.ac.uk/download/pdf/301367593.pdf
문학
- KeyHunters.ru: “비트코인라이브러리의 개인 키 및 RPC 인증의 심각한 취약점” keyhunters
- MoldStud : “Web3 애플리케이션에서 JavaScript 코드를 안전하게 보호하기 위한 최고의 전략”
- CodeAnt.AI: “안전한 코딩 모범 사례: 실용적인 가이드…” codeant
- SecureFlag: “개발자를 위한 최고의 보안 코딩 모범 사례” secureflag
- bitcoinjs/bitcoinjs-lib: “Node.js용 자바스크립트 비트코인 라이브러리…” 깃허브
- BlackDuck : “JavaScript를 사용한 안전한 코딩: 모범 사례 가이드”
- Cure53: “Audit-Report micro-btc-signer TS Library 01.2023” cure53
모든 디지털 자산은 프로토콜 수준뿐만 아니라 각 소프트웨어 계층의 구현 수준에서도 보호되어야 합니다. cure53+3
- https://keyhunters.ru/critical-vulnerabilities-of-private-keys-and-rpc-authentication-in-bitcoinlib-analysis-of-security-risks-and-attack-methods-on-bitcoin-cryptocurrency/
- https://moldstud.com/articles/p-top-strategies-to-secure-your-javascript-code-in-web3-applications
- https://www.codeant.ai/blogs/secure-coding-best-practices
- https://vulert.com/vuln-db/npm-elliptic-182798
- https://github.com/golang/go/issues/54681
- https://www.invicti.com/web-vulnerability-scanner/vulnerabilities/sensitive-data-exposure-devise-secret-key/
- https://dev.to/rigalpatel001/preventing-weak-cryptography-in-javascript-395k
- https://security.snyk.io/vuln/SNYK-JS-ELLIPTIC-8720086
- https://blog.secureflag.com/2025/03/04/secure-coding-best-practices/
- https://www.blackduck.com/blog/javascript-security-best-practices.html
- http://www.scielo.org.mx/scielo.php?script=sci_arttext&pid=S1405-55462024000401879
- https://github.com/bitcoinjs/bitcoinjs-lib
- https://cure53.de/audit-report_micro-btc-signer.pdf
- https://www.sciencedirect.com/science/article/abs/pii/S1389128625004529
- https://www.jstage.jst.go.jp/article/transfun/advpub/0/advpub_2021EAP1048/_article/-char/en
- https://www.sciencedirect.com/science/article/abs/pii/S0920548923000430
- https://cordis.europa.eu/project/id/618094/reporting
- https://safeheron.com/blog/bitcoin-taproot-upgrade/
- https://www.reddit.com/r/btc/comments/qsypcp/p2sh_taproot_disadvantage/
- https://github.com/paulmillr/scure-btc-signer
- https://www.galaxy.com/insights/research/bitcoin-taproot
- https://www.clouddefense.ai/code/javascript/example/bitcoinjs-message
- https://www.wallarm.com/what/secure-coding
- https://dl.acm.org/doi/10.1145/3725846
- https://vulert.com/vuln-db/npm-elliptic-182798
- https://github.com/golang/go/issues/54681
- https://portswigger.net/daily-swig/dozens-of-cryptography-libraries-vulnerable-to-private-key-theft
- https://www.invicti.com/web-vulnerability-scanner/vulnerabilities/sensitive-data-exposure-devise-secret-key/
- https://security.snyk.io/vuln/SNYK-JS-ELLIPTIC-8720086
- https://www.reddit.com/r/Bitcoin/comments/6l6rmr/a_simple_explanation_on_schnorr_signatures_and/
- https://phemex.com/academy/taproot-and-schnorr-signatures
- https://rubin.io/bitcoin/2025/03/11/core-vuln-taproot-dos/
- https://archway.finance/blog/bitcoin-quantum-computing-taproot-security
- https://www.galaxy.com/insights/research/bitcoin-taproot
- https://docs.gitlab.com/user/application_security/dast/browser/checks/798.168/
- https://github.com/google/oss-fuzz/issues/8527
- https://dev.to/rigalpatel001/preventing-weak-cryptography-in-javascript-395k
- https://christian-rossow.de/publications/btcsteal-raid2018.pdf
- https://github.com/pcaversaccio/ecdsa-nonce-reuse-attack
- https://101blockchains.com/taproot-upgrade-improves-bitcoin-privacy-and-scalability/
- https://learnmeabitcoin.com/technical/upgrades/taproot/
- https://freicoin.substack.com/p/why-im-against-taproot
- https://hexn.io/blog/bitcoins-taproot-update-overview-217
- https://en.bitcoin.it/wiki/BIP_0341
- https://stackoverflow.com/questions/8795830/can-javascript-be-used-to-counter-ssl-tls-vulnerabilities
- https://academy.binance.com/en/articles/what-is-taproot-and-how-it-will-benefit-bitcoin
- https://jimmysong.substack.com/p/taproot-vs-security-threats-bitcoin
- https://github.com/cmdruid/tapscript
- https://www.antiersolutions.com/blogs/demystifying-bitcoin-taproot-upgrade-a-comprehensive-guide/
- https://edge.app/blog/market-updates/bitcoin-development-taproot/
- https://arxiv.org/abs/1806.06881
- https://www.reddit.com/r/Bitcoin/comments/11zy2un/is_it_best_practice_to_keep_the_public_key_secret/
- https://www.reddit.com/r/dogecoindev/comments/10xk4ie/taproot_has_put_bitcoin_in_dire_straights_and_why/
- https://www.investopedia.com/bitcoin-taproot-upgrade-5210039
- https://dl.acm.org/doi/10.1007/978-3-031-49099-6_22
- https://security.snyk.io/package/npm/@ledgerhq%2Fhw-transport-http/6.9.1-6.9.1-taproot.0.0
- https://www.bitstamp.net/en-gb/learn/blockchain/what-is-the-taproot-upgrade/
- https://stackoverflow.com/questions/78400828/crypto-js-pbkdf2-1-000-times-weaker-than-specified-in-1993-and-1-3m-times-weaker
- https://stackoverflow.com/questions/19665491/how-do-i-get-an-ecdsa-public-key-from-just-a-bitcoin-signature-sec1-4-1-6-k
- https://arxiv.org/html/2504.13737v1
- https://bitcointalk.org/index.php?topic=5500713.0
- https://www.ledger.com/th/blog/taproot-support
- https://moldstud.com/articles/p-essential-nodejs-security-audits-evaluating-your-data-encryption-practices
- https://stackoverflow.blog/2019/12/02/preventing-the-top-security-weaknesses-found-in-stack-overflow-code-snippets/
- https://www.reddit.com/r/privacy/comments/16gh0bn/if_private_keys_for_passkeys_never_leave_your/
- https://www.youtube.com/watch?v=pb5Cp3QNFis
- https://www.youtube.com/watch?v=6waz0xYxA00
- https://bitcoincore.reviews/17977
- https://blog.bitsrc.io/security-flaws-prevention-in-javascript-98b0c0af52dc?gi=2585378c74ba
- https://bitcoinops.org/en/preparing-for-taproot/
- https://docs.guardrails.io/docs/vulnerabilities/elixir/insecure_use_of_dangerous_function
- https://stackoverflow.com/questions/19516617/how-should-an-rsa-public-key-be-exposed-over-http
- https://security.snyk.io/vuln/SNYK-DOTNET-SYSTEMTEXTJSON-7433719
- https://issues.chromium.org/issues/375696474
- https://www.nodejs-security.com/blog/secure-code-review-tips-to-defend-against-vulnerable-nodejs-code
- https://www.zscaler.com/blogs/security-research/cross-site-scripting-xss-cross-site-request-forgery-csrf-sql-injection-html-injection-etc
- https://www.feistyduck.com/newsletter/issue_105_microsofts_compromised_private_key
- https://arxiv.org/html/2311.16396v2
- https://www.acunetix.com/vulnerabilities/web/rsa-private-key-detected/
문헌 및 표준
- KeyHunters.ru – “취약 키 공격 및 비밀 키 유출 공격…” 키헌터
- KeyHunters.ru — “개인 키의 심각한 취약점…” 키헌터
- Cryptodeeptools.ru — “개인 키 생성 오류…” cryptodeeptools
- 사이언스다이렉트: “암호화폐 거래소에 대한 사이버 공격…” 사이언스다이렉트
- CWE-200, CWE-310, CWE-312, CWE-922 ( https://cwe.mitre.org )
- CVE-2025-29774: 디지털 서명 위조 공격 keyhunters
- https://keyhunters.ru/weak-key-attacks-secret-key-leakage-attack-critical-vulnerability-in-private-key-serialization-and-dangerous-signature-forgery-attack-a-threat-to-bitcoin-cryptocurrency-security/
- https://keyhunters.ru/critical-vulnerabilities-of-private-keys-and-rpc-authentication-in-bitcoinlib-analysis-of-security-risks-and-attack-methods-on-bitcoin-cryptocurrency/
- https://cryptodeeptools.ru/private-key-debug/
- https://keyhunters.ru/attack-on-private-key-exposure-we-will-consider-exploiting-errors-that-allow-obtaining-a-private-key-this-is-a-very-dangerous-attack-on-bitcoin-wallets-through-an-opcode-numbering-error-in-bitcoinli/
- https://www.sciencedirect.com/science/article/pii/S1057521925001802
- https://arxiv.org/abs/1804.08714
- https://www.sciencedirect.com/science/article/abs/pii/S2214212623001941
- https://arxiv.org/pdf/1810.11175.pdf
- https://www.semanticscholars.org/paper/How-Perfect-Offline-Wallets-Can-Still-Leak-Bitcoin-Verb%C3%BCcheln/02c637655f4a1f207ef2eabc034819c99b8ab0ac
- https://www.sciencedirect.com/topics/computer-science/cryptographic-attack
- https://en.wikipedia.org/wiki/Side-channel_attack
- https://en.wikipedia.org/wiki/Public-key_cryptography
- https://en.bitcoin.it/wiki/Common_Vulnerabilities_and_Exposures
- https://patents.google.com/patent/US6539092B1/en
- https://app.opencve.io/cve/?vendor=bitcoin&product=bitcoin&page=3
- https://arxiv.org/html/2503.12248v1
- https://pikabu.ru/story/private_key_debug_oshibki_v_vyichislenii_poryadka_yellipticheskoy_krivoy_secp256k1_ugrozyi_dlya_yekosistemyi_bitcoin_chast_2_12755792
- https://www.ndss-symposium.org/wp-content/uploads/2025-273-paper.pdf
- https://www.fireblocks.com/blog/lindell17-abort-vulnerability-technical-report/
- https://cve.mitre.org/cgi-bin/cvekey.cgi
이 취약점은 비트코인 탭루트(Bitcoin Taproot) 환경에서 특히 위험한데, 그 이유는 다음과 같습니다.
- 내부 키 (
tapInternalKey)는 최종 Taproot bitcoinops 주소를 생성하는 기초가 됩니다. - 해당 정보 유출로 공격자가 christian-rossow+1의 개인 키를 복구할 수 있게 될 가능성이 있습니다.
- 일반 비트코인 주소와 달리 Taproot는 키 정보 유출이 치명적인 Schnorr 서명을 사용합니다 .
이 도표는 탭루트 프로토콜을 사용하는 비트코인 지갑과 거래의 보안을 보장하기 위해 즉각적인 조치 가 필요함을 강조합니다 .
- https://forklog.com/exclusive/taproot-kak-ugroza-privatnosti-pochemu-kritikuyut-gryadushhee-obnovlenie-bitkoina
- https://habr.com/ru/articles/771980/
- https://forklog.com/news/razrabotchik-rasskazal-ob-ispravlennoj-uyazvimosti-bitcoin-core
- https://polynonce.ru/libbitcoin/
- https://habr.com/ru/articles/778200/
- https://blog.bitmex.com/ru_ru-taproot-demonstration/
- https://www.gate.com/ru/post/status/4129717
- https://academy.binance.com/ru/articles/what-is-taproot-and-how-it-will-benefit-bitcoin
- https://pikabu.ru/story/kak_uyazvimosti_cve202529774_i_bag_sighash_single_ugrozhayut_multipodpisnyim_koshelkam_seti_bitkoin_s_poddelnyimi_rawtx_chast_2_12995184
- https://www.youtube.com/watch?v=01LEyuNgRSQ
- https://deepsource.com/directory/javascript/issues/JS-D025
- https://arxiv.org/pdf/2103.14244.pdf
- https://www.techtarget.com/searchsecurity/definition/side-channel-attack
- https://github.com/advisories/GHSA-h7cp-r72f-jxh6
- https://exploitdog.ru/cve/github/GHSA-h7cp-r72f-jxh6
- https://cwe.mitre.org/data/definitions/122.html
유사한 오류가 있는지 코드의 다른 부분을 확인하고, 재정적으로 중요한 애플리케이션의 모든 새 릴리스에서 메모리 레이아웃을 수정하는 것이 좋습니다.
- https://vulert.com/vuln-db/npm-elliptic-182798
- https://portswigger.net/daily-swig/dozens-of-cryptography-libraries-vulnerable-to-private-key-theft
- https://archway.finance/blog/bitcoin-quantum-computing-taproot-security
- https://www.galaxy.com/insights/research/bitcoin-taproot
- https://bitcoinops.org/en/preparing-for-taproot/
- https://christian-rossow.de/publications/btcsteal-raid2018.pdf
- https://github.com/pcaversaccio/ecdsa-nonce-reuse-attack
- https://www.reddit.com/r/Bitcoin/comments/6l6rmr/a_simple_explanation_on_schnorr_signatures_and/
- https://phemex.com/academy/taproot-and-schnorr-signatures