키헌터 작성
2023년, 비트코인 클라이언트에서 디지털 서명을 역직렬화하는 역할을 하는 DeserializeSignature 함수에서 심각한 취약점이 발견되었습니다. 이 취약점으로 인해 r 또는 s 매개변수 값이 0인 유효하지 않은 서명을 생성할 수 있었고, 일부 네트워크 노드에서는 이러한 서명이 유효한 것으로 인식되었습니다. 이 취약점이 네트워크 보안에 미친 영향, 공격의 과학적 명칭, 그리고 CVE 데이터베이스에 등록된 사실에 대해 살펴보겠습니다.
취약점 및 공격 메커니즘에 대한 설명
DeserializeSignature 함수는 DER 형식의 디지털 서명을 나타내는 바이트 시퀀스를 검증에 적합한 객체로 변환하도록 설계되었습니다. 중요한 서명 매개변수는 숫자 r과 s이며, ECDSA 표준에 따라 이 값들은 0이 아닌 엄격한 범위 내의 값을 가져야 합니다.
r 및 s 매개변수의 0 값에 대한 검사가 부족하여 공격자는 암호학적 정확성을 위반하면서도 일부 비트코인 노드에서 유효한 것으로 인식될 수 있는 “유효하지 않은” 0을 포함하는 서명을 생성할 수 있었습니다. 이는 다음과 같은 공격을 실행할 수 있는 가능성을 만들었습니다.
- 개인 키를 알지 못한 상태에서 허위 거래를 승인하는 행위.
- 가짜 서명을 이용하여 타인의 비트코인 주소에서 비트코인을 훔치는 행위.
- 블록체인 상의 잔액 및 거래 내역 조작.
- 이중 지출이란 동일한 자금으로 여러 건의 거래를 생성하고 확인하는 행위를 말합니다.
이 공격은 디지털 서명 위조 및 잘못된 매개변수 유효성 검사와 관련된 과학적으로 알려진 공격 유형에 속합니다. 실제로 이는 디지털 서명의 무결성을 공격하는 유형이며 “디지털 서명 위조 공격”이라고 부를 수 있습니다.
비트코인 보안에 미치는 영향
이론적인 취약점과는 달리, DeserializeSignature를 실제로 악용하면 개인 키가 탈취되어 공격자가 피해자의 자금을 완전히 장악할 수 있습니다. 적절한 검증 절차가 없다면, 이러한 서명을 사용한 거래도 검증되어 블록체인에 기록될 수 있으며, 이는 네트워크 보안의 핵심 요소인 무단 자금 사용 방지라는 원칙을 위반하는 것입니다.
r 또는 s 매개변수가 0인 서명을 무단으로 수락하는 것은 암호화 보안을 약화시키고, 제어 메커니즘을 우회할 수 있게 하며, 대규모 사기 및 네트워크에 대한 신뢰 상실의 위협을 초래합니다.
CVE 번호 및 취약점 상태
현재 DeserializeSignature 취약점은 CVE-2025-29774 번호로 CVE 취약점 데이터베이스에 공식적으로 등록되어 있습니다. 이 등록은 정보 보안 분야에서 이 결함이 국제적인 수준으로 식별 및 인정되었음을 반영합니다.
CVE-2025-29774는 문제의 세부 사항, 탐지 방법 및 해결 권장 사항을 설명합니다. 이 취약점은 대규모 금융 손실을 초래할 수 있기 때문에 비트코인 프로토콜 역사상 가장 심각한 취약점 중 하나로 간주됩니다.
결론
비트코인의 심각한 DeserializeSignature 취약점은 암호화 서명 매개변수에 대한 불충분한 검증이 디지털 서명 위조 공격으로 이어질 수 있음을 보여주는 대표적인 사례입니다. 이 취약점을 효과적으로 패치하고 r 및 s 매개변수에 대한 적절한 검증을 구현하는 것은 사용자 자금의 보안과 프로토콜의 복원력을 확보하는 데 매우 중요합니다.
CVE-2025-29774 번호로 공개된 취약점은 개발자와 연구자들의 인식을 높이고 블록체인 환경에서 안전한 프로그래밍 관행을 채택하도록 장려하는 데 도움이 됩니다.
출처 및 추가 연구
- 취약점 및 그 결과에 대한 자세한 분석은 polynonce.ru 웹사이트에서 확인할 수 있습니다 .
- cryptodeep.ru의 DeserializeSignature를 예로 들어 공격 메커니즘 및 방지 방법에 대한 연구 결과를 제시합니다. cryptodeep
- CVE 레지스트리에는 CVE-2025-29774에 대한 공식 설명이 포함되어 있습니다.
또한, 해당 취약점이 다중 서명 지갑 및 SIGHASH 단일 메커니즘에 미치는 영향, 관련 공격 및 그 분류에 대해서도 고려할 수 있습니다.
암호화 취약점
StaticCoinbaseRewardAddressSupplier 클래스에서 제공하는 코드에는 명백한 암호화 취약점이 없습니다. 이 클래스는 bitcoinj 라이브러리를 사용하는 Java 코드이며, 단순히 채굴자의 보상(코인베이스 보상 주소)을 저장할 정적 주소를 저장하고 반환하며, 생성자에서 표준 requireNonNull 메서드를 사용하여 null 여부를 확인합니다.
주요 코드 줄:
자바:private final Address address;
public StaticCoinbaseRewardAddressSupplier(Address client) {
this.address = requireNonNull(client);
}
@Override
public Address get() {
return this.address;
}
비트코인 시스템의 암호화 취약점은 종종 개인 키 생성 또는 처리, 서명 알고리즘 오류, 무작위성, 또는 안전하지 않은 난수 생성기(RNG) 사용과 관련이 있지만, 이는 암호화 논리와는 무관하게 주소의 저장 및 반환에만 해당됩니다.

최근 연구와 BitcoinJS 자바스크립트 라이브러리 취약점, JS의 SecureRandom 및 개인 키 생성 문제와 같은 사례들은 암호화 취약점이 단순히 주소를 저장하는 단계보다는 키 생성, 서명 또는 서명 검증 단계에서 더 쉽게 드러나는 경향이 있음을 보여줍니다. aicoin+2
따라서 제공된 코드에는 취약점이 있는 부분이 누락되어 있습니다. 다른 코드의 암호화 취약점을 분석하려면 키 또는 서명 생성 및 검증과 관련된 코드를 보여주는 것이 중요합니다.

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

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

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

블록체인 메시지 디코더: www.bitcoinmessage.ru
유효한 개인 키를 확보한 후, 팀은 지갑 제어권을 확인하기 위해 검증 거래를 수행했습니다. 이러한 거래는 개념 증명을 보여주는 동시에 복구된 자금의 대부분을 합법적인 반환 절차에 사용할 수 있도록 구성되었습니다. 전체 과정은 투명하게 문서화 되었으며 , 거래 기록은 비트코인 블록체인에 영구적으로 기록되어 취약점 악용 가능성과 성공적인 복구 방법론에 대한 불변의 증거로 활용되었습니다.
0100000001b964c07b68fdcf5ce628ac0fffae45d49c4db5077fddfc4535a167c416d163ed000000008a4730440220462ca869f802caf8b41e45ba709a9d0dc5dbfa3431723d7bc3b331c2ddba74e902204fc95e51d05179f5b7e8246ad7d4e39c8945ccb4ecdf566d1f9ce905f0beb92001410499d5d2ffd1bf39c84d3fb42729d5280ede4cfa16b3dc119d7c7ee343a444264e30ce7b2267cfd4a1be2b843b567408128ac104a513ca837c97133e538a0d79d5ffffffff030000000000000000476a457777772e626974636f6c61622e72752f626974636f696e2d7472616e73616374696f6e205b57414c4c4554205245434f564552593a202420313535303730342e373232355de8030000000000001976a914a0b0d60e5991578ed37cbda2b17d8b2ce23ab29588ac61320000000000001976a914a8d7fe54cf3f9c974f9e2b5611e0d8160d518e3488ac00000000
암호 분석 도구는 비트코인 지갑 소유자의 요청에 따른 공인 보안 감사뿐만 아니라 암호 분석 , 블록체인 보안 및 개인 정보 보호 분야의 학술 및 연구 프로젝트, 그리고 소프트웨어 및 하드웨어 암호화폐 저장 시스템 모두에 대한 방어 애플리케이션을 위해 설계되었습니다.
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 결함과 이로 인한 지갑 개인 키 노출 문제를 다루고 있음을 알 수 있습니다. |
BitKeySmithHack: secp256k1 검증 취약점을 이용한 비트코인 개인키 복구

핵심 요약: BitKeySmithHack은 secp256k1 서명 역직렬화 프로세스의 치명적인 결함을 악용하여 암호학적으로 유효해 보이지만 실제로는 유효하지 않은 서명을 위조함으로써 무단 개인 키 추출 및 대규모 지갑 복구 공격을 가능하게 합니다.
소개
암호화폐 보안은 secp256k1 곡선을 사용하는 타원 곡선 디지털 서명 알고리즘(ECDSA)의 수학적 무결성에 달려 있습니다. 2023년, 연구원들은 DeserializeSignature인기 있는 비트코인 클라이언트의 루틴에서 서명의 r 또는 s 구성 요소에 0 값이 있는 경우 이를 거부하지 못하는 취약점인 CVE-2025-29774를 발견했습니다. BitKeySmithHack은 서명 위조를 자동화하고 대상 지갑에서 해당 개인 키를 추출하도록 설계된 특수 분석 및 공격 도구입니다. 본 논문에서는 BitKeySmithHack의 방법론, 근본적인 취약점, 그리고 비트코인 보안에 미치는 영향에 대해 분석합니다.
취약점: 제로 파라미터 위조
ECDSA 서명은 두 개의 정수 r과 s로 구성되며, 각각 1≤r,s≤n−1, 1 ≤ r,s ≤n−1을 만족해야 합니다.
여기서 nnn은 secp256k1의 순서입니다. DER 역직렬화 과정에서 r=0 또는 s=0에 대한 검사가 누락되어 형식 유효성 검사는 통과하지만 암호화 증명은 실패하는 조작된 서명이 생성될 수 있었습니다. 일부 비트코인 노드는 이러한 유효하지 않은 서명을 유효한 서명으로 받아들여 거래의 진위성을 훼손하고 개인 키 복구 경로를 열었습니다.
BitKeySmithHack 개요
BitKeySmithHack은 세 가지 핵심 구성 요소로 이루어진 모듈형 프레임워크입니다.
- 시그니처 포지 모듈
- 제어된 0 매개변수를 사용하여 유효하지 않은 DER 서명을 생성합니다.
- 위조된 정보를 특정 주소를 대상으로 하는 유효한 거래 구조로 위장합니다.
- 네트워크 프로브 모듈
- 위조된 거래를 노드에 브로드캐스트하고 승인 또는 거부 여부를 기록합니다.
- 노드 승인 상태를 서명 유효성 행렬에 매핑합니다.
- 키 복구 엔진
- 격자 기반 방법을 통해 개인 키 비트를 계산하기 위해 차분 수용 데이터를 사용합니다.
- 노드 응답 간의 불일치를 활용하여 후보 키를 반복적으로 개선합니다.
공격 메커니즘
- 무효 서명 생성: BitKeySmithHack은 단일 거래에 대해 서로 다른 두 개의 서명 위조본을 생성합니다. 하나는 r=0r = 0r=0이고, 다른 하나는 s=0s = 0s=0입니다.
- 수용 프로파일링: 위조된 각 트랜잭션은 대규모 노드 집합에 브로드캐스트됩니다. 결함이 있는 역직렬화기를 구현하는 노드는 위조된 트랜잭션을 수용합니다.
- 격자 축소 분석: 툴킷은 승인 패턴을 비교하여 개인 키의 일부를 유출하는 일치 시스템을 구축합니다. 블라이헨바허 스타일의 격자 공격 기법을 차용하여, 엔진은 이 시스템을 해석하고 256비트 전체 비밀 키를 복구합니다.
- 지갑 복구: 개인 키가 복구되면 BitKeySmithHack은 지갑 주소를 재구성하고, UTXO 세트를 내보내고, 공격자가 제어하는 주소로 자금을 이체할 수 있습니다.
비트코인 보안에 미치는 영향
BitKeySmithHack은 매개변수 유효성 검사 버그를 악용하여 개인 키 전체를 탈취하는 취약점을 악용합니다. 그 결과는 다음과 같습니다.
- 무단 자금 이체: 공격자는 키를 복구하면 합법적인 거래에도 서명할 수 있습니다.
- 이중 지출 및 원장 조작: 위조된 서명은 합의 검증을 우회하여 악의적인 블록 제안을 가능하게 합니다.
- 네트워크 신뢰도 저하: 지속적인 공격은 노드 소프트웨어와 블록체인의 불변성에 대한 신뢰를 약화시킵니다.
CVE 및 완화 현황
CVE-2025-29774는 Bitcoin Core v25.1에서 누락된 0 값 검사 문제를 문서화합니다 DeserializeSignature. Bitcoin Core v25.1 및 하위 클라이언트에서는 이를 강화하는 패치를 배포했습니다.
자바if (r.equals(BigInteger.ZERO) || s.equals(BigInteger.ZERO)) {
throw new InvalidSignatureException("Signature component R or S is zero");
}
보안 강화 노력에는 자동화된 분산 에너지 자원(DER) 퍼징 및 합의 수준 서명 검증 강제 적용도 포함됩니다.
권고사항 및 결론
BitKeySmithHack은 미묘한 유효성 검사 누락이 개인 키 복구 공격으로 악용될 수 있음을 보여주는 대표적인 사례입니다. 이와 유사한 위협으로부터 보호하기 위해 개발자는 다음 사항을 준수해야 합니다.
- 모든 서명 매개변수를 ECDSA 요구 사항에 따라 엄격하게 검증하십시오.
- 블록 승인 전에 유효하지 않은 분산 에너지 자원(DER) 서명을 거부하기 위해 합의 수준 검사를 활용하십시오.
- 지속적 통합 파이프라인에 차분 퍼즈 테스트를 통합하십시오.
세심한 매개변수 검증과 사전 예방적 보안 감사를 통해서만 비트코인 생태계는 차세대 서명 위조 및 키 추출 공격으로부터 스스로를 방어할 수 있습니다.
연구 논문: 비트코인 DeserializeSignature 암호화 취약점 및 안전한 해결 방법
소개
암호화폐 세계에서 거래 시 디지털 서명의 보안은 사용자 자산 보호와 네트워크 복원력의 핵심입니다. 특히 비트코인 네트워크는 거래의 진위성을 보장하고 무단 이체를 방지하는 ECDSA(타원 곡선 디지털 서명 알고리즘) 디지털 서명 알고리즘을 널리 사용합니다. 그러나 2023년, 디지털 서명 역직렬화 과정에서 심각한 취약점인 ‘DeserializeSignature’ 취약점이 발견되었습니다. 이 취약점을 악용하면 공격자는 매개변수 값이 0인 무효 서명을 생성하여 네트워크에서 유효한 서명으로 인식하게 할 수 있었습니다. 이는 블록체인 상에서 자금 탈취, 이중 지출, 데이터 변조 등의 위협을 초래했습니다 .
취약점 설명
DeserializeSignature 프로세스는 서명의 바이트 표현을 유효성 검사가 가능한 객체로 변환하는 역할을 합니다. 이 프로세스는 데이터에서 ECDSA 서명을 구성하는 숫자인 r과 s 요소를 추출합니다. 이러한 매개변수의 정확한 유효성 검사는 매우 중요하며, 어떠한 편차나 잘못된 값이라도 공격의 빌미를 제공할 수 있습니다.
이 취약점은 r과 s 매개변수가 0인지 확인하는 검사가 없었기 때문에 발생했습니다. ECDSA 알고리즘에서 r과 s는 0이 될 수 없으므로, 이 검사를 무시하면 공격자는 r 또는 s가 0인 특수하게 조작된 서명을 생성할 수 있었습니다. 그 결과, 이러한 서명을 사용한 거래는 시스템에서 승인되었지만, 실제로는 발신자의 진위 여부를 확인하는 데 사용되지 않았습니다. 따라서 공격자는 다음과 같은 공격을 감행할 수 있었습니다.
- 가짜 서명으로 거래를 승인하여 타인의 비트코인 주소에서 비트코인을 훔칩니다.
- 동일한 자금으로 여러 건의 거래를 생성하여 이중 지출을 실행하세요.
- 블록체인에 잘못된 데이터를 입력하여 잔액이 왜곡되는 상황을 초래할 수 있습니다.
- 네트워크 노드를 공격하여 거래 확인 시스템을 무력화합니다 .
기술적 분석
역직렬화 과정은 여러 단계로 구성됩니다.
- DER(Distinguished Encoding Rules) 형식으로 서명 바이트를 읽는 중입니다.
- 요소 길이 및 태그를 포함하여 분산 에너지 자원(DER) 구조의 규정 준수 여부를 확인합니다.
- r과 s의 정수 값을 추출하고 해석합니다.
- r과 s 값의 정확성을 확인합니다. 이전에는 null 값에 대한 검사가 없어서 공격의 취약점이 존재했습니다.
안전한 해결책
해당 취약점을 제거하려면 서명을 역직렬화하는 코드에 r과 s 값에 대한 엄격한 검사를 추가하여 0을 제외한 허용 범위 내에 있는지 확인해야 합니다.
자바에서 역직렬화 메서드의 수정된 코드 예시(의사 코드):
자바:public ECSignature deserializeSignature(byte[] signatureBytes) throws InvalidSignatureException {
// Парсинг байтов в DER структуру
DERSequence sequence = DERSequence.fromBytes(signatureBytes);
BigInteger r = sequence.getElement(0).toBigInteger();
BigInteger s = sequence.getElement(1).toBigInteger();
// Проверка, что r и s не равны нулю и лежат в правильном диапазоне
if (r.equals(BigInteger.ZERO) || s.equals(BigInteger.ZERO)) {
throw new InvalidSignatureException("Signature component R or S is zero");
}
if (r.compareTo(BigInteger.ONE) < 0 || r.compareTo(SECP256K1_ORDER.subtract(BigInteger.ONE)) > 0) {
throw new InvalidSignatureException("Signature component R out of range");
}
if (s.compareTo(BigInteger.ONE) < 0 || s.compareTo(SECP256K1_ORDER.subtract(BigInteger.ONE)) > 0) {
throw new InvalidSignatureException("Signature component S out of range");
}
return new ECSignature(r, s);
}
추가 보안 조치:
- 검증되고 정기적으로 업데이트되는 암호화 라이브러리를 사용하십시오.
- 퍼징 및 입력 데이터 분석을 포함한 정기적인 보안 테스트를 수행하십시오.
- 개발자들이 모든 입력 매개변수를 꼼꼼히 확인하도록 교육하십시오.
- 이러한 취약점을 탐지하기 위해 자동화된 사전 출시 검사를 구현하십시오.
결론
비트코인 네트워크의 DeserializeSignature 취약점은 암호화폐 거래의 보안을 보장하기 위해 모든 디지털 서명 매개변수를 신중하게 검증하는 것이 얼마나 중요한지를 보여줍니다. 서명 매개변수에서 0 값을 검증하지 않는 부분이 공격자가 가짜 서명을 생성하여 네트워크의 무결성과 보안을 위협하는 요인이 되었습니다. 이 취약점을 해결하려면 모든 서명 구성 요소에 대한 필수적인 검증과 신뢰할 수 있는 암호화 도구 사용이 필요합니다. 향후 유사한 공격을 방지하고 암호화폐 시스템에 대한 신뢰를 높이기 위해서는 기술적 조치와 교육을 포함한 포괄적인 보안 접근 방식이 필수적입니다 .
본 연구 논문의 최종 결론은 다음과 같습니다.
비트코인 프로토콜의 치명적인 DeserializeSignature 취약점은 네트워크와 암호화폐 자산의 보안에 심각한 위협을 가합니다. 이 취약점은 ECDSA 디지털 서명의 핵심 구성 요소인 r 및 s 매개변수에 대한 불충분한 검증, 특히 null 값에 대한 검사 부족으로 인해 발생합니다. 이로 인해 공격자는 암호학적으로 유효하지 않지만 여러 비트코인 노드에서 유효한 것으로 받아들여지는 가짜 서명을 생성할 수 있으며, 이는 위험한 디지털 서명 위조 공격으로 이어집니다.
이 취약점을 악용하면 무단 자금 이체, 거래 조작, 이중 지출 등이 발생하여 암호화폐 시스템에 대한 신뢰의 기반이 흔들릴 수 있습니다. 해당 취약점은 CVE-2025-29774로 등록되어 있으며, 서명 역직렬화 시 r과 s 값의 정확성과 0이 아닌지 엄격하게 검사하는 방식으로 시급히 수정해야 합니다. 포괄적인 보안 접근 방식과 이러한 취약점의 신속한 제거만이 비트코인의 안정성과 신뢰성을 보장하고 사용자를 잠재적인 재정적 손실 및 네트워크 공격으로부터 보호할 수 있습니다.
안전하지 않은 비밀 저장소를 이용한 비트코인 공격: 심각한 취약점 및 방어책 분석
암호(또는 기타 비밀 데이터)가 소스 코드에 직접 저장될 때 발생하는 심각한 취약점은 비트코인 네트워크를 포함한 암호화폐 시스템에 대한 심각한 공격으로 이어질 수 있습니다. 과학 용어로 이러한 취약점은 비밀 관리 및 암호화 방식의 오류와 관련이 있으며, 전문가들은 이를 “안전하지 않은 비밀 저장” 취약점이라고 부릅니다.
취약점이 비트코인 보안에 미치는 영향
비트코인 및 관련 애플리케이션(예: 비트코인 지갑, 일렉트럼 클라이언트 등)의 경우, 암호를 평문 문자열로 코드에 전송하고 저장하는 것은 여러 가지 위험을 초래합니다.
- 개인 키 유출 : 지갑에 접근하거나 개인 키를 복호화하는 데 사용되는 비밀번호가 코드에 저장되어 있는 경우, 소스 코드나 실행 파일에 접근할 수 있는 공격자는 쉽게 비밀번호를 획득할 수 있습니다. 이는 비트코인 주소와 그 안에 있는 모든 자금을 완전히 장악하는 결과를 초래합니다.
- 무결성 및 기밀성 공격 : 공격자가 키와 비밀번호를 확보하면 거래를 위조하고, 자금을 훔치고, 익명으로 비트코인을 전송할 수 있으므로 비트코인 프로토콜에 내장된 많은 보호 장치를 무력화할 수 있습니다.
- 리플레이 공격 및 중간자 공격(MITM) 구현 : 비밀 정보에 대한 접근 권한이 침해될 경우, 공격자는 거래를 적극적으로 방해하거나, 위조하거나, 중간자 공격을 조직하여 네트워크의 신뢰성을 저하시킬 수 있습니다.
공격 및 취약점의 과학적 명칭
- 암호 보안 분야에서 취약하거나 공개된 비밀 저장소를 악용하는 공격을 “자격 증명 노출” 또는 “ 안전하지 않은 비밀 저장소”라고 합니다.
- 더 넓은 의미에서, 공격자가 노출된 비밀 정보를 이용하여 시스템을 해킹하는 경우, 이를 “비밀 정보 유출 공격” 이라고 합니다 .
- 인증 시스템 및 암호화 메커니즘에 미치는 영향의 특성상, 탈취된 데이터를 사용하여 반복적으로 접근하는 경우 이는 종종 “자격 증명 스터핑” 및 “재실행 공격” 과 관련된 공격 유형에 속합니다.
CVE 및 기존 레지스트리와의 관계
- “하드 코딩된 비밀번호”에 대한 특정 공통 CVE는 존재하지 않습니다. 이는 특정 프로토콜 취약점이라기보다는 설계상의 안티 패턴에 가깝기 때문입니다. 하지만 CVE(Common Vulnerabilities and Exposures) 데이터베이스에는 비밀 키 유출, 구성 오류, 부적절한 키 저장과 관련된 항목들이 포함되어 있습니다.
- 예를 들어, CVE-2023-XXXX(코드 번호)는 구성 오류를 통해 비밀 정보가 유출되는 것과 관련된 취약점을 나타낼 수 있습니다.
- 비트코인과 관련하여 이 취약점은 OWASP Top 10 범주, 특히 A2: 민감한 데이터의 주입 및 취약한 관리 로 분류되는 공격 벡터를 노출합니다 .
요약
소스 코드나 기타 공개된 장소에 비밀번호를 저장하는 형태의 취약점은 개인 키 유출 및 비트코인 보안 침해의 심각한 위험으로 이어집니다. 이러한 취약점을 ‘안전하지 않은 비밀 저장 ‘이라고 하며, 자격 증명 노출을 이용한 공격으로 발전할 수 있습니다. 이를 방지하기 위해서는 엄격한 비밀 관리 규칙과 안전한 키 저장 방식이 필수적입니다.
유사한 취약점을 가진 CVE의 더 자세한 사례나 이러한 문제가 암호화폐 시스템 보안에 미치는 영향에 대해 궁금한 점이 있으시면 추가 정보를 제공해 드릴 수 있습니다. 비밀번호나 비밀 정보가 소스 코드에 직접 저장되는 경우(안전하지 않은 비밀 정보 저장, 자격 증명 노출) 발생하는 심각한 취약점은 비트코인 암호화폐 보안에 대한 심각한 공격으로 이어질 수 있습니다. 이러한 방식으로는 암호화폐 지갑이나 트랜잭션 팩토리에 접근하는 데 사용되는 비밀번호를 코드나 실행 파일에 접근한 공격자가 쉽게 얻을 수 있습니다. 결과적으로 공격자는 불법적으로 거래에 서명하고, 자금을 탈취하고, 거래를 위조할 수 있게 되어 DeFi 시스템과 비트코인의 기본적인 보안을 위협하게 됩니다.
과학적으로 이러한 취약점은 안전하지 않은 비밀 저장소 또는 자격 증명 노출 공격 으로 분류됩니다 . 유출된 비밀 정보를 이용한 공격의 경우, 자격 증명 스터핑(Credential Stuffing) 및 리플레이 공격(Replay Attack)이라고도 하며, 이는 종종 거래의 완전한 위조 및 자금 탈취로 이어집니다.
하드코딩된 비밀번호는 소프트웨어 프로토콜 오류가 아니라 아키텍처 오류이자 잘못된 관행이기 때문에 CVE 취약점 데이터베이스에 특정적으로 적용되는 단일 항목은 없습니다. 하지만 많은 CVE는 비밀 키 유출 및 비밀번호 관리 부실과 관련되어 있으며, 이러한 취약점은 특정 제품에서 발견될 경우 별도의 CVE 번호가 부여됩니다.
따라서 암호화폐 애플리케이션의 이러한 심각한 취약점은 ‘안전하지 않은 비밀 저장’ 오류로 분류되며, 이는 개인 키 유출 및 비트코인 보안 시스템에 대한 공격으로 이어질 수 있으므로 시급히 수정하고 최신 방식의 안전한 비밀번호 저장 및 처리 방법을 도입해야 합니다.
암호화 취약점
이 코드의 암호화 취약점은 직접적으로 드러나지 않습니다. 대부분 테스트 구성과 API를 통한 Electrum/Bitcoin 클라이언트 호출로 구성되어 있으며, 명확한 암호화 작업은 포함되어 있지 않기 때문입니다.
하지만 다음과 같은 위험 가능성이 있는 영역이 있을 수 있습니다.
- 개인 키를 다루거나 새 주소를 생성하는 메서드의 경우, 예를 들어 다음과 같은 줄에서:
자바:Coin requestedAmount = Coin.FIFTY_COINS.plus(Coin.SATOSHI);
sut.requestBitcoin(() -> destinationAddress1, requestedAmount)
- 비트코인의 최소 및 최대 금액(itShouldValidateMinAmount 및 itShouldValidateMaxAmount 테스트에 사용되는 문자열)을 검증하는 것만으로는 더욱 정교한 암호화 공격으로부터 보호할 수 없습니다.
이 코드는 비트코인 작업을 위한 기성 라이브러리(bitcoinj, electrum)만 사용하므로, 암호화 취약점은 사용된 라이브러리 자체 또는 개인 키 처리 방식(코드에는 포함되지 않음)이나 비밀번호 저장 방식(WalletParams 생성 문자열에 “faucet”이라는 비밀번호 문자열이 포함되어 있음)에서 찾아야 합니다.

구체적으로 해당 구절들을 살펴보면 다음과 같습니다.
- 보안 관점에서 가장 의심스러운 부분은 바로 이 부분입니다(비밀번호를 문자 그대로 전달하는 부분).
자바:.password("faucet")
(setUp 메서드 내의 한 줄):
자바:WalletParams faucetWalletParams = WalletParams.builder()
.walletPath("faucet_%s".formatted(this.getClass().getSimpleName()))
.password("faucet")
.build();
비밀번호를 코드에 하드코딩하는 것은 유출 위험 때문에 바람직하지 않은 방법입니다.
암호화 취약점에 대해 이야기하자면, 코드 자체에 명확하게 존재하는 것은 아닙니다. 코드 자체는 암호화를 담당하는 라이브러리를 사용하고 있습니다.
특정 암호화 코드를 분석해야 하는 경우, 라이브러리 코드 또는 키/서명 생성 및 유효성 검사 구현 자체를 살펴보아야 합니다.
보정:
다음은 코드 내 암호 전송 사례를 통해 암호화 취약점이 발생하는 원리를 설명하고, 안전한 접근 방식과 수정된 코드 예시를 제시하는 심층 연구 논문입니다.
코드에서 비밀번호를 다룰 때 암호화 취약점이 발생합니다.
암호화 취약점은 비밀번호나 암호화 키와 같은 민감한 데이터를 부적절하게 처리할 때 발생하는 경우가 많습니다. 흔히 저지르는 실수 중 하나는 비밀 데이터(비밀번호, 키)를 소스 코드에 문자열 리터럴로 직접 삽입하는 것입니다.
코드에서 비밀번호를 문자열로 전달하면 다음과 같은 문제가 발생합니다.
- 소스 코드 배포 또는 분석 과정에서 비밀번호가 실수로 노출될 수 있습니다.
- 암호 문자열이 평문으로 메모리에 저장되어 분석 도구를 사용하여 추출할 수 있으므로 신뢰할 수 있는 암호 보호 방법이 없습니다.
- 암호학적으로 강력한 키로 암호를 변환하는 키 유도 함수(KDF)와 같은 암호 강화 메커니즘이 없습니다.
또한, 코드에 비밀번호를 저장하는 것은 기본적인 보안 원칙을 위반하는 것입니다. 비밀 정보는 코드와 분리하여 보관해야 하며, 안전한 저장소(안전한 환경 변수)와 안전한 전송 프로세스를 사용해야 합니다.
실제 취약성 발생 메커니즘
실제 코드에서 매개변수 생성 메서드에 비밀번호가 하드코딩된 예를 살펴보겠습니다.
자바:WalletParams faucetWalletParams = WalletParams.builder()
.walletPath("faucet_%s".formatted(this.getClass().getSimpleName()))
.password("faucet") // Жестко прописанный пароль - уязвимость
.build();
여기에는 명백한 문제가 있습니다. 문자열이 "faucet" 코드에 명시적으로 저장되어 있다는 점입니다. 이러한 접근 방식은 취약합니다.
- 코드가 공개 저장소나 로그에 유출되면 비밀번호를 쉽게 얻을 수 있게 됩니다.
- 서버 또는 애플리케이션 컨테이너에 접근 권한이 있는 공격자는 복잡한 작업 없이도 비밀번호를 추출할 수 있습니다.
- 사용된 비밀번호는 취약하고 단순하며 복잡하지 않습니다.
취약성의 결과
- 개인 데이터 유출 위험: 암호화폐 지갑이나 중요한 거래에 대한 접근이 비밀번호로 제어되는 경우, 공격자는 완전한 접근 권한을 얻게 됩니다.
- 중간자 공격(MITM) 또는 리플레이 공격의 가능성이 있습니다.
- 사용자 신뢰 파괴 및 부정적인 재정적, 평판적 결과.
취약점을 안전하게 해결하는 방법
기본 권장 사항
- 소스 코드에 암호와 키를 저장하지 마십시오.
- 안전한 비밀 정보 저장 서비스(HashiCorp Vault, AWS Secrets Manager, Kubernetes Secrets 등)를 사용하십시오.
- 애플리케이션 시작 시 보호된 환경 변수 또는 비밀 키에서 암호를 불러옵니다.
- 암호화 작업을 수행하기 전에 키 유도 함수(예: PBKDF2, bcrypt, Argon2)를 사용하여 암호를 변환하십시오.
- 접근 권한 감사 및 비밀 키 순환 기능을 제공합니다.
Java/Spring Boot를 예시로 사용한 실용적인 해결 방법
코드에 비밀번호를 직접 입력하는 대신 환경 변수나 설정 파일에서 비밀번호를 불러오세요.
자바:// Безопасное чтение пароля из переменной окружения
@Bean
@Primary
WalletParams defaultWalletParams(@Value("${wallet.password}") String walletPassword,
@Value("${wallet.path}") String walletPath) {
return WalletParams.builder()
.walletPath(walletPath)
.password(walletPassword)
.build();
}
여기서 wallet.password 와 는 환경 wallet.path 내에 설정 application.properties 되거나, 더 정확히 말하면 환경 내에 설정됩니다.
텍스트:wallet.password=${WALLET_PASSWORD}
wallet.path=/home/electrum/.electrum/regtest/wallets/default_wallet
환경 변수를 사용하여 애플리케이션을 실행하세요.
세게 때리다:export WALLET_PASSWORD=veryStrongRandomPassword2025!
java -jar myapp.jar
이렇게 하면 소스 코드에 비밀번호를 저장할 가능성이 사라집니다.
추가 보안 조치
- RBAC(역할 기반 접근 제어)를 사용하여 비밀 정보에 대한 읽기 권한을 제한하십시오.
- 비밀번호를 주기적으로 변경(교체)하세요.
- 가능하다면 설정 파일을 암호화하십시오.
- 필요한 경우 하드웨어 보안 모듈(HSM)을 사용하십시오.
결론
코드에서 암호를 부적절하게 처리하여 발생하는 암호화 취약점은 악용하기 가장 쉬운 취약점 중 하나이며 심각한 결과를 초래할 수 있습니다. 이러한 취약점을 해결하려면 코드에서 암호 정보를 제거하고, 안전한 저장소를 사용하며, 안전한 데이터 전송 및 처리 방식을 적용해야 합니다. 권장되는 접근 방식은 안전한 외부 저장소 또는 환경 변수에서 암호를 불러오는 동시에 최신 암호화 기법을 사용하여 데이터를 보호하는 것입니다.
코드의 취약점과 관련하여 구체적인 도움이 필요하시면 관련 부분을 보내주세요. 암호화 취약점은 비밀번호나 키와 같은 민감한 데이터를 부적절하게 처리할 때 발생하는 경우가 많습니다. 흔한 실수 중 하나는 예시처럼 프로그램 소스 코드에 비밀번호를 하드코딩하는 것입니다.
자바:WalletParams faucetWalletParams = WalletParams.builder()
.walletPath("faucet_%s".formatted(this.getClass().getSimpleName()))
.password("faucet") // Уязвимость: пароль прописан в коде
.build();
이 솔루션은 다음과 같은 이유로 취약합니다.
- 암호는 코드 분석이나 로그 분석을 통해 쉽게 추출할 수 있습니다.
- 저장 보호 기능이 없습니다(비밀번호가 메모리에 평문으로 저장됩니다).
- 간단하고 고정된 비밀번호를 사용하기 때문에 공격이 용이합니다.
그 결과 보안이 완전히 무너질 수 있으며, 공격자가 지갑이나 기타 보호된 데이터에 접근할 수 있게 될 가능성이 있습니다.
안전한 해결책
소스 코드에 비밀 정보를 저장하는 것은 절대 권장하지 않으며, 안전한 저장소나 환경 변수에서 불러오는 것이 좋습니다. Java/Spring Boot에서의 해결 방법 예시는 다음과 같습니다.
자바:@Bean
@Primary
WalletParams defaultWalletParams(@Value("${wallet.password}") String walletPassword,
@Value("${wallet.path}") String walletPath) {
return WalletParams.builder()
.walletPath(walletPath)
.password(walletPassword)
.build();
}
설정 파일 application.properties 또는 외부 변수를 통해:
텍스트:wallet.password=${WALLET_PASSWORD}
wallet.path=/home/electrum/.electrum/regtest/wallets/default_wallet
서버 또는 런타임 환경에서:
세게 때리다:export WALLET_PASSWORD=ОченьСложныйИУникальныйПароль2025!
java -jar myapp.jar
추가 보안 조치
- 신뢰할 수 있는 비밀 관리자(Vault, AWS Secrets Manager 등)를 사용하십시오.
- 비밀번호에 키 유도 함수(PBKDF2, bcrypt, Argon2)를 적용합니다.
- 메모리에 비밀 정보를 저장하는 양을 최소화하세요.
- 정기적으로 비밀번호를 변경하세요.
- 접근 제어를 사용하여 비밀 정보에 대한 접근을 제한하세요.
따라서 이 안전한 접근 방식은 암호를 코드 내에 문자열로 저장하고 전송하는 것을 방지하여 암호 유출을 막고 공격 위험을 줄입니다. 이 방법은 암호 정보를 코드로부터 분리하고 최신 보안 표준을 준수합니다.
결론적으로, 비트코인 애플리케이션 및 서비스의 비밀 관리 취약점은 암호화폐 생태계에 가장 심각한 보안 위협 중 하나입니다. 비밀번호와 개인 키를 소스 코드에 직접 저장하거나 보안이 취약한 곳에 저장하는 것은 공격자에게 민감한 데이터를 노출시키는 결과를 초래합니다. 이는 공격자가 암호화폐 지갑을 완전히 장악하고, 승인되지 않은 거래에 서명하며, 사용자의 자금을 탈취할 수 있는 기회를 제공합니다.
이 취약점은 안전하지 않은 비밀 저장소(Insecure Secret Storage) 유형 에 속하며 , 자격 증명 노출(Credential Exposure ) 및 자격 증명 스터핑(Credential Stuffing) 으로 알려진 공격을 유발합니다 . 비트코인 환경에서 이러한 취약점은 개인 키에 대한 대규모 공격의 진입점이 되어 네트워크 프로토콜의 무결성과 기밀성을 파괴하고 수백만 개의 비트코인 주소와 거래를 위험에 빠뜨릴 수 있습니다.
이러한 유형의 버그에 대한 특정 CVE 번호는 없지만, 특히 취약한 비밀 키 및 인증 관리 범주에서 CVE 및 OWASP 관리 시스템 아래에 수많은 관련 취약점이 보고 및 문서화되었습니다.
현대적인 보안 관행은 하드코딩된 암호와 키를 즉시 폐기하고, 중앙 집중식으로 안전하게 관리되는 비밀 저장소로 전환하며, 암호화 키 유도 함수를 구현하고, 암호를 정기적으로 변경하는 것을 요구합니다. 이것이 바로 이 치명적인 취약점으로부터 보호하고 비트코인 암호화폐 인프라 전체의 보안을 보장하는 유일한 방법입니다.
이러한 위협을 신속하게 제거하지 않으면 대규모 재정적 손실, 사용자 신뢰 상실, 탈중앙화 기술 개발의 둔화가 발생할 수 있습니다. 모든 단계에서 책임감 있는 보안을 확보하는 것이 미래 디지털 세계에서 비트코인 네트워크의 안정성과 권위를 유지하는 유일한 길입니다.
비트코인의 파괴적인 위협: 서명 생성 취약점 분석 및 암호화 네트워크에 미치는 영향
비트코인은 공개 키 암호화와 ECDSA 디지털 서명 알고리즘을 기반으로 하며, 이는 거래 확인 및 무결성을 보장합니다. 강력한 보호 메커니즘에도 불구하고 소프트웨어 및 하드웨어 취약점으로 인해 보안 시스템이 손상될 수 있습니다. 현대 비트코인 거래 서명 생성에 사용되는 장치의 난수 생성기(PRNG)의 엔트로피 부족 문제는 이러한 심각한 취약점 중 하나입니다.
암호화 취약성의 본질과 공격에 미치는 영향
비트코인 개인 키 보안의 핵심은 ECDSA 알고리즘에 사용되는 kkk 매개변수의 고유성과 비밀성입니다. kkk의 재사용 또는 예측 가능성으로 인해 발생하는 취약점을 ECDSA 논스 재사용 공격 (ECDSA Nonce Reuse Attack)이라고 합니다 . 이 공격을 통해 공격자는 동일한 kkk를 가진 두 개의 서명으로부터 개인 키를 계산할 수 있습니다.
실제로 하드웨어 지갑과 소프트웨어 클라이언트는 의사 난수 생성기(PRNG)를 사용하여 kkk를 생성합니다. 만약 PRNG가 취약하거나 충분한 엔트로피를 생성하지 못하면 공격자는 kkk를 예측하거나 완전히 재구성할 수 있으며, 이는 자동으로 개인 키를 노출시켜 사용자의 자금을 완전히 장악할 수 있게 합니다.
2025년, 하드웨어 지갑(예: Blockstream Jade)에 널리 사용되는 ESP32 마이크로컨트롤러와 관련된 심각한 취약점(CVE-2025-27840)이 공개되었습니다. 이 취약점은 문서화되지 않은 명령어와 난수 생성기의 낮은 엔트로피로 인해 발생하며, 다음과 같은 공격을 가능하게 합니다.
- 원격으로 개인 키를 추출합니다.
- 거래 디지털 서명 위조.
- 소유자를 대신하여 무단으로 거래를 생성하는 행위.
이로 인해 여러 하드웨어 지갑이 공격의 표적이 되었고, 비트코인 생태계에 대한 신뢰가 약화되었으며, 대규모 암호화 자산 도난 위협이 커지고 있습니다.
공격의 과학적 명칭
이 취약점은 다음과 같은 공격 유형에 속합니다:
- ECDSA Nonce 재사용 공격
- 또한 취약한 PRNG(취약한 난수 생성기 공격) 문제와도 관련이 있습니다.
- 하드웨어 구현에서의 사이드 채널 공격 및 하드웨어 백도어 악용
이러한 공격들을 통틀어 암호화 키 복구 공격 이라고 합니다 .
CVE 및 취약점 등록
ESP32 마이크로컨트롤러의 이러한 유형의 취약점과 이것이 비트코인 서명에 미치는 영향은 미국 국립표준기술연구소(NIST) 데이터베이스에 다음 번호로 등록되어 있습니다.
- CVE-2025-27840
이 취약점은 공격자가 의사 난수 생성기의 불충분한 엔트로피와 문서화되지 않은 명령어를 악용하여 개인 키를 탈취하고 거래를 위조할 수 있는 능력을 설명합니다.
비트코인 보안에 미치는 영향
이번 공격의 결과는 매우 심각합니다.
- 개인 키에 대한 제어권 상실.
- 하드웨어 및 소프트웨어 지갑에서 자금이 도난당했습니다.
- 여러 기기가 해킹당하고 대규모 공격이 발생했습니다.
- 사용자 신뢰를 훼손하고 생태계 보안을 약화시킵니다.
결론 및 권고사항
위험을 최소화하기 위해서는 다음과 같은 조치가 필요합니다.
- 무작위 kkk 생성을 제거하는 결정론적 서명 알고리즘(RFC 6979)을 사용합니다.
- CVE-2025-27840 취약점을 해결하기 위한 하드웨어 및 소프트웨어 업데이트.
- 인증된 난수 생성기를 사용하는 더욱 안전한 칩으로 전환하십시오.
- 지갑 보안에 대한 정기적인 감사 및 테스트.
- 사용자들에게 업데이트 및 보안의 필요성에 대한 교육을 제공합니다.
이러한 조치를 취하면 비트코인의 공격 저항력이 크게 향상되고 사용자 자금이 보호될 것입니다.
제시된 암호화 취약점 관련 코드는 주로 Bitcoinj 및 Spring Boot 기반의 Electrum 및 Regtest 통합 테스트를 보여주며, 암호화 구현 자체는 포함하지 않습니다.
하지만 새로운 결제 주소를 생성하는 코드는 암호학적 및 보안상 매우 중요할 수 있습니다.
자바:Address address1 = electrumClient.createNewAddress(CreateNewAddressParams.builder()
.walletPath(defaultWalletParams.getWalletPath())
.build());
address2 그런 다음 비슷한 방식으로 두 번째 주소를 생성합니다 .
취약점이나 오류는 다음과 같은 경우에 발생할 수 있습니다.
- 생성된 키 또는 주소는 고유하지 않거나 예측할 수 없습니다.
- 개인 키는 보호되지 않은 저장소(walletPath)에 저장됩니다.
- Electrum 클라이언트 또는 Bitcoinj 라이브러리는 암호화 작업을 올바르게 처리하지 못합니다.

암호화 취약성을 구체적으로 고려한다면 다음과 같은 문제가 발생할 수 있습니다.
문제가 될 수 있는 부분은 다음과 같습니다.
자바:Address address1 = electrumClient.createNewAddress(CreateNewAddressParams.builder()
.walletPath(defaultWalletParams.getWalletPath())
.build());
Address address2 = electrumClient.createNewAddress(CreateNewAddressParams.builder()
.walletPath(defaultWalletParams.getWalletPath())
.build());
추가적인 검증 없이는 주소 생성이 충분히 안전하지 않을 수 있습니다. 예를 들어 개인 키 보호가 미흡하거나 walletPath가 지원되지 않는 저장소를 가리키는 경우입니다.
송금 내역을 확인하는 것도 중요합니다.
자바:.flatMap(receivedAmount -> electrumRegtestActions.sendPaymentAndAwaitTx(walletParams, address2, Coin.valueOf(1_000L)))
라이브러리가 서명의 정확성을 검증하지 않거나 거래 생성 과정에 오류가 있는 경우, 암호화 취약점이 발생할 수 있습니다.
createNewAddress내부 메서드 등 의 코드에 접근할 수 없으면 sendPaymentAndAwaitTx 정확한 취약점을 파악하기 어렵습니다. 귀하의 코드는 통합 및 테스트에 더 중점을 두고 있으며, 암호화는 타사 라이브러리(Bitcoinj, Electrum 클라이언트)를 통해 구현되어 있습니다.
수정하기 위해
아래는 비트코인 키 및 주소 생성 과정에서 발생하는 암호화 취약점의 특성을 자세히 설명하고, 코드 수정 방법을 예시와 함께 제시하는 안전한 해결책을 담은 연구 논문입니다.
비트코인 주소 생성 과정의 암호화 취약점: 원인 및 안전한 제거 방법
비트코인을 비롯한 암호화폐는 공개키 암호화 방식, 즉 타원 곡선 기반 ECDSA 알고리즘을 사용하여 거래를 안전하게 보호하고 자금 소유권을 증명합니다. 시스템의 보안은 전적으로 개인키 생성의 신뢰성과 암호화 라이브러리 사용에 달려 있습니다. 하지만 알고리즘의 높은 보안 수준에도 불구하고, 난수 생성의 취약점, 중복 서명 사용, 부적절한 암호화 방식 등으로 인해 자금이 유출되는 사례가 수없이 발생했습니다.
취약점의 원인
비트코인 주소 생성 및 거래 서명 과정에서 발생하는 주요 암호화 취약점은 특히 ECDSA의 kkk 매개변수와 관련된 부정확하거나 취약한 난수 생성, 그리고 여러 메시지 서명 시 동일한 kkk 값을 재사용하는 것과 관련이 있습니다.

ECDSA에서는 각 트랜잭션에 서명하기 위해 무작위 숫자 kkk를 선택하는데, 이 숫자는 고유하고 예측 불가능해야 합니다. (Signature(r,s)=(r=(kG)x mod n,s=k−1(H(m)+rd) mod n))
여기서 ddd는 개인 키이고, GGG는 생성 지점이며, H(m)H(m)H(m)은 메시지 해시입니다.
만약 동일한 개인 키 ddd를 사용하여 동일한 kkk로 서로 다른 두 메시지에 서명하는 경우, 공격자는 이 두 서명으로부터 ddd를 계산할 수 있으며, 이는 개인 키를 완전히 탈취하고 자금을 훔치는 결과를 초래할 수 있습니다.
이 취약점은 닐스 슈나이더가 2013년에 발표한 이전 논문을 통해 널리 알려졌습니다. 또한 난수 생성기의 취약점이나 자바스크립트 및 기타 라이브러리의 구현 오류로 인한 대규모 데이터 유출 사례도 알려져 있습니다(예: 2015년 Blockchain.info 지갑 사건).
추가적인 이유는 다음과 같습니다.
- 성능이 약하거나 검증되지 않은 의사 난수 생성기를 사용합니다.
- 키 생성 시 엔트로피가 부족합니다.
- 암호화 라이브러리의 소프트웨어 오류 및 버그.
위협의 규모
취약점 규모에 대한 연구 결과에 따르면 수백만 건의 거래에서 kkk 매개변수가 재사용되었을 가능성이 있습니다. 2016년 2억 1천만 개의 주소를 분석한 결과 비트코인 네트워크에서 1,000개 이상의 취약한 주소가 발견되었습니다. 이러한 취약점으로 인해 동일한 kkk를 사용하는 두 개의 서명만으로도 개인 키를 복구할 수 있습니다.
보안 솔루션 및 취약점 수정
비트코인 및 암호화폐 지갑에서 kkk 파라미터의 재사용을 방지하고 서명 보안을 강화하기 위해 RFC 6979 표준인 ECDSA 결정론적 서명 방식이 사용됩니다. kkk 값을 무작위로 선택하는 대신 메시지 해시와 개인 키를 이용하여 고유하게 계산하므로 난수 생성이 필요 없어지고 kkk 값의 반복 또는 예측 가능성이 사라집니다.
또한, 개인 키가 고유한 주소 체인을 제공하여 보안 침해 위험을 최소화하는 계층적 결정론적 지갑(HD 지갑, BIP32)을 사용하는 것이 좋습니다.
안전한 수정(Java):
자바:import org.bitcoinj.core.ECKey;
import org.bitcoinj.core.Sha256Hash;
import org.bitcoinj.crypto.TransactionSignature;
import org.bitcoinj.script.Script;
import org.spongycastle.crypto.params.ECPrivateKeyParameters;
import org.spongycastle.crypto.signers.HMacDSAKCalculator;
import org.spongycastle.crypto.signers.ECDSASigner;
import org.spongycastle.crypto.digests.SHA256Digest;
import java.math.BigInteger;
public class SafeECDSASigner {
private final ECPrivateKeyParameters privateKey;
public SafeECDSASigner(ECPrivateKeyParameters privateKey) {
this.privateKey = privateKey;
}
/**
* Генерация детерминированной ECDSA подписи согласно RFC 6979
*/
public TransactionSignature sign(Sha256Hash hash) {
ECDSASigner signer = new ECDSASigner(new HMacDSAKCalculator(new SHA256Digest()));
signer.init(true, privateKey);
BigInteger[] components = signer.generateSignature(hash.getBytes());
BigInteger r = components[0];
BigInteger s = components[1];
// Нормализация подписи (low S)
BigInteger HALF_CURVE_ORDER = privateKey.getParameters().getN().shiftRight(1);
if (s.compareTo(HALF_CURVE_ORDER) > 0) {
s = privateKey.getParameters().getN().subtract(s);
}
return new TransactionSignature(r, s, TransactionSignature.SIGHASH_ALL, false);
}
}
이 코드는 결정론적 kkk 생성기(HMacDSAKCalculator)를 사용하여 난수 생성 오류를 제거합니다. sign 메서드는 메시지 해시에 대한 안전한 서명을 생성합니다.
기존 거래 코드에서 사용하려면 임의 서명 생성 호출을 결정론적 방법 호출로 대체해야 합니다.
안전 권고사항
- RFC 6979를 지원하는 라이브러리와 구현체를 사용하십시오.
- 일상적인 거래에는 BIP32 HD 지갑을 사용하세요.
- 오래되었거나 보안에 취약한 암호화 라이브러리 사용을 피하십시오.
- 키 생성 및 의사난수 생성 보안에 대한 감사를 실시하십시오.
- 개인 키 저장의 보안을 강화하고 유출을 방지하십시오.
결론
비트코인 키와 서명 생성 과정에서 발생하는 암호화 취약점은 자금 관리 능력 상실로 이어질 수 있기 때문에 매우 심각한 문제입니다. RFC 6979에 따른 결정론적 서명 방식과 계층형 지갑 구조는 이러한 위험을 크게 줄여주며, 최신 암호화폐 지갑 솔루션의 모범 사례입니다.
결론적으로, 최종 결론은 다음과 같이 정리할 수 있습니다.
최종 결론
비트코인 서명 프로토콜(ECDSA 알고리즘 기반)에서 심각한 암호화 취약점이 발견되었습니다. 이 취약점은 무작위 서명 매개변수 kkk의 재사용 또는 거래 생성 과정에서 이 매개변수에 취약하고 예측 가능한 값을 생성하는 데서 비롯됩니다. ECDSA Nonce 재사용 공격이라고 명명된 이 취약점은 공격자가 동일하거나 유사한 kkk 매개변수로 생성된 여러 서명을 분석하여 사용자의 개인 키를 높은 확률로 복구할 수 있도록 합니다. 이는 키의 완전한 탈취와 자금 도난으로 이어집니다.
이러한 공격은 실제로 확인되었으며, ESP32 마이크로컨트롤러 기반 하드웨어 지갑 해킹 사례가 포함됩니다. 이 지갑들은 난수 생성기의 엔트로피 부족으로 인해 취약하며, 하드웨어 백도어가 이미 알려져 있습니다. 등록된 취약점 중에는 CVE-2025-27840도 있는데, 이는 비트코인 지갑 소유자와 전체 생태계의 보안에 심각한 위협이 됩니다.
이러한 공격의 결과는 엄청난 규모로 이어질 수 있습니다. 수백만 달러 상당의 암호화폐가 도난당할 수 있으며 시스템에 대한 신뢰가 무너질 수 있습니다. 이 취약점은 암호화 구현의 근본적인 결함, 즉 서명에 사용되는 난수 생성 방식을 악용하는 것이므로 암호화폐 역사상 가장 위험한 취약점 중 하나입니다.
실제로 이러한 위협을 제거하려면 난수 생성을 배제하는 결정론적 서명 알고리즘(RFC 6979)을 사용하는 것이 좋으며, 최신 보안 감사 결과를 반영하여 하드웨어 및 암호화 라이브러리를 업데이트해야 합니다.
이러한 취약점을 이해하고 신속하게 패치하는 것은 디지털 자산의 보안과 전 세계 비트코인 네트워크의 안정성을 유지하는 데 핵심적인 요소입니다.