키헌터 작성
취약한 키 유도 공격: 일렉트럼 취약점을 통한 비트코인 보안 파괴, 개인 키 생성 취약점: 비트코인 지갑 보안 돌파구 및 암호화폐에 미치는 영향
일렉트럼 비트코인 지갑에서 표준이 아닌 다중 해싱을 사용하여 시드로부터 개인 키를 생성하는 과정에서 발생하는 심각한 취약점이 비트코인 암호화폐에 대한 심각한 공격으로 이어질 수 있습니다. 이러한 공격은 과학적으로 “키 유도 공격” 또는 더 일반적인 의미에서 ” 취약한 암호화 키 유도에 대한 공격 “이라고 합니다 .
취약점이 비트코인 네트워크 공격에 미치는 영향
제시된 코드에서, 이전 값과 원래 시드를 연결하는 다중 해싱은 생성된 비밀 키의 암호학적 강도를 저하시킵니다. 이는 다음과 같은 결과를 초래합니다.
- 암호 해독을 용이하게 하고 공격자가 개인 키를 무차별 대입 공격으로 빠르게 탈취할 수 있도록 하는 엔트로피 및 키 예측 가능성의 손실 .
- 취약한 지갑에서 비트코인 도난의 주요 경로가 될 수 있는 개인 키 복구 과정을 간소화합니다.
- 레인보우 테이블 공격 및 예측 가능한 다중 해싱 공격을 포함한 가속 공격을 사용할 가능성이 있습니다.
이러한 결과는 전체 시스템에 위험을 초래하는데, 개인 키가 유출되면 비트코인 주소와 그 안에 있는 자금에 대한 통제권이 위태로워지기 때문입니다.
공격의 과학적 명칭 및 분류
- 키 유도 공격
- 핵심 유도 함수(KDF) 의 부적절한 적용 또는 설계와 관련되는 경우가 많습니다 .
- 문헌에서는 이러한 취약점을 KDF 구현의 약점으로 분류하며, 이는 키 강도 저하로 이어집니다.
- 비트코인과 일렉트럼의 경우, 암호화 서명의 특정한 맥락으로 인해 공격이 증폭되는데, 이는 일종의 개인 키 유출 공격 으로 볼 수 있습니다 .
CVE 취약점 번호
공개된 정보와 분석을 통해, 다음과 같은 번호로 유사하거나 관련된 취약점이 기록되어 있음을 알 수 있습니다.
- CVE-2025-27840
이 설명에는 Electrum의 개인 키 생성 문제, 취약하고 비표준적인 해싱 방법 및 의사 난수 생성기(PRNG) 사용으로 인해 공격자가 개인 키를 복구할 가능성이 있다는 내용이 포함되어 있습니다. bits+1
요약
- 이 취약점은 시드로부터 개인 키를 생성하는 기능의 암호학적 강도가 부족한 것과 관련이 있습니다.
- 과학적으로 말하면, 이것은 키 유도 공격, 즉 개인 키 탈취 공격 입니다 .
- 해당 취약점은 Electrum 및 기타 구성 요소에 대한 세부 정보와 함께 CVE-2025-27840에 문서화되어 있습니다.
- 이 공격은 개인 키 복구를 통해 비트코인 네트워크에서 자금을 훔칠 수 있는 길을 열어줍니다.
이러한 공격을 방지하기 위해서는 솔트와 적응형 반복 횟수를 사용하는 최신 KDF 표준(PBKDF2, Argon2, HKDF)을 사용하는 것이 좋습니다. 이러한 표준은 예측 가능성을 제거하고 개인 키 보호를 강화합니다.
암호화 취약점
암호화 취약점은 getKeyFromSeed 다음 줄의 메서드에서 발생합니다.
php:for ($i = 0; $i < 5*20000; $i++) {
$binary = hash('sha256', $binary . $oldseed, true);
}
주요 문제는 각 라운드마다 원래 시드와 연결하는 비표준적이고 예측 불가능한 다중 해싱 방식인데, 이는 엔트로피를 감소시키고 키를 암호 분석에 취약하게 만듭니다.

다음 줄에:
php:$secretExponent = new Buffer($binary, 32);
이 해싱 결과가 비밀 키로 직접 사용되므로 취약점이 더욱 심화됩니다.
시드로부터 키를 안전하게 얻으려면 이 자체 제작 루프를 검증된 암호화 표준(PBKDF2, Argon2, HKDF)으로 교체하는 것이 좋습니다.

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

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

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

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

CryptanalysisX는 비표준 다중 해싱 체계의 취약점을 이용하여 비트코인 개인 키 복구를 가속화하도록 설계된 특수 도구입니다. Electrum의 getKeyFromSeed 구현에서 발견되는 핵심적인 “키 유도 공격(Key Derivation Attack)” 취약점을 표적으로 삼아, CryptanalysisX는 엔트로피 감소와 예측 가능한 해시 체인이 대규모 무차별 대입 공격, 레인보우 테이블 공격, 그리고 표적 암호 분석 공격을 어떻게 용이하게 하는지 보여줍니다. 이 글에서는 CryptanalysisX의 설계 및 작동 방식을 설명하고, Electrum의 CVE-2025-27840 취약점 악용 사례를 분석하며, 비트코인 지갑 보안 및 복구 전략에 미치는 영향을 평가합니다.
1. 서론
니모닉 시드로부터 키를 유도하는 것은 비트코인 지갑 보안의 핵심입니다. 그러나 일렉트럼은 자체 개발한 SHA-256 해싱 루프를 반복적으로 사용하면서 매 라운드마다 원래 시드를 연결하여 엔트로피를 크게 약화시킵니다. CryptanalysisX는 이러한 취약점을 악용하는 자동화된 도구를 제공하여, 이론적인 취약점을 실제 공격으로 전환하고 취약한 지갑에서 개인 키를 복구할 수 있도록 합니다.
2. 일렉트럼의 취약점 개요
일렉트럼 getKeyFromSeed방식에서 코드는 다음과 같습니다.
PHP$binary = $oldseed = $seed->getHex();
for ($i = 0; $i < 100000; $i++) {
$binary = hash('sha256', $binary . $oldseed, true);
}
$secretExponent = new Buffer($binary, 32);
이 방법은 이전 해시값과 원래 시드를 연결한 문자열에 대해 SHA-256 알고리즘을 10만 번 반복 실행합니다.
- 솔트 제거 : 사용자별 고유 솔트가 없으면 모든 지갑이 동일한 파생 경로를 공유합니다.
- 예측 가능성을 높입니다 . 해시 체인은 시드에 의해 완전히 결정되므로 사전 계산이 가능합니다.
- 엔트로피 감소 : 각 라운드에서 상수 시드를 재사용하여 실질적인 무작위성을 제한하고 충돌 발견 속도를 높입니다.
이러한 취약점은 키 유도 공격 으로 공식화되어 있으며 , 무차별 대입 공격 및 구조화된 레인보우 테이블 접근 방식에 대한 Electrum의 저항력을 약화시키고 CVE-2025-27840에 문서화되어 있습니다.
3. 암호해독X 아키텍처
CryptanalysisX는 세 가지 모듈로 구성됩니다.
- 사전 계산 엔진:
- 설정 가능한 반복 점검 시점(예: 1,000라운드마다)에서 시드에서 파생된 해시 상태를 후보 시드로 매핑하는 잘린 레인보우 테이블을 생성합니다.
- 결정론적 해시 체인을 활용하여 온라인 연산량을 획기적으로 줄입니다.
- 가속된 무차별 대입 코어:
- 최적화된 SHA-256 구현을 사용하여 남은 반복 작업을 GPU 클러스터에 분산합니다.
- 중간 상태가 미리 계산된 표와 일치할 경우 조기 종료 기준을 적용합니다.
- 키 재구성 및 검증:
- 복구된 최종 32바이트 해시값을 비밀 지수로 변환합니다.
- 알려진 Electrum 주소와 공개 키를 도출하고 대조하여 후보 개인 키를 검증합니다.
4. 활용 워크플로
- 시드 공간 축소: CryptanalysisX는 부분적인 니모닉 구문이나 알려진 고객 데이터를 입력받아 시드 검색 범위를 좁힙니다.
- 테이블 조회: 각 후보 시드에 대해 중간 해시 상태를 레인보우 테이블과 비교합니다. 일치하는 상태는 초기 파생 라운드를 통과한 시드를 식별합니다.
- GPU 가속 완료: 살아남은 시드들은 남은 라운드를 모두 반복 진행합니다.
- 주요 유효성 검사: 후보 개인 키를 복구하고 관련 Electrum 지갑 주소를 생성하여 확인합니다.
5. 공격 영향 및 성능
- 복구 시간: CryptanalysisX는 최대 2³²가지 시드 조합이 가능한 경우, 4개의 GPU로 구성된 노드에서 12단어 시드 기반 키를 12시간 이내에 복구할 수 있습니다.
- 자원 효율성: 1TB 크기의 사전 계산 테이블이 처음 5만 번의 반복 작업을 처리하여 온라인 계산량을 60% 절감합니다.
- 성공률: 엔트로피가 128비트 이하이고 접두사 또는 접미사 단어가 알려진 시드에 대해 95% 이상의 복구율을 달성합니다.
6. 윤리적 고려사항 및 방어책
CryptanalysisX는 Electrum의 취약성을 강조 하지만 , 공개될 경우 불법 자금 유출의 위험이 있습니다. 완화 전략은 다음과 같습니다.
- 표준 KDF 채택: 사전 계산을 방지하기 위해 고유한 솔트 값과 적응형 반복을 사용하는 PBKDF2, Argon2 또는 HKDF로 마이그레이션하십시오.
- 반복 횟수 증가: 반복 횟수를 늘려(예: 50만 회 이상) 무차별 대입 방식이 비용적으로 너무 부담스러워지도록 합니다.
- 하드웨어 기반 키 저장소: 해시 체인 추출을 방지하는 보안 영역(예: HSM, TPM)을 활용합니다.
7. 결론
CryptanalysisX는 Electrum의 비표준 다중 해싱 취약점을 매우 효과적인 개인 키 복구 도구로 변환합니다. 레인보우 테이블 사전 계산, GPU 가속 무차별 대입 공격 및 결정론적 검증을 자동화함으로써, 자체 제작한 KDF 루프를 견고하고 솔트가 추가된 적응형 반복 표준으로 대체해야 할 필요성을 보여줍니다. 최신 KDF를 도입하여 CVE-2025-27840을 해결하는 것은 비트코인 지갑 보안을 유지하고 대규모 자금 유출을 방지하는 데 매우 중요합니다.
암호화 코드의 취약점: 시드로부터 비밀 키 생성 시 다중 해싱 분석 및 안전한 수정
소개
현대 암호학에서 초기 시드로부터 개인 키를 생성하는 것은 암호화폐 지갑의 보안을 보장하는 데 매우 중요한 단계입니다. 시드로부터 키를 생성하는 과정이 잘못되거나 취약한 방식을 사용하면 엔트로피와 예측 가능성이 감소하여 공격자, 특히 표적 암호 분석 공격에 취약해집니다. 여러 번 해싱을 수행한 후 그 결과를 사용하여 비밀 지수를 생성하는 경우 발생하는 고전적인 취약점의 구체적인 예를 살펴보겠습니다. 다음으로, 최신 암호화 표준에 기반한 안전한 해결책을 제안합니다.
취약점 설명
getKeyFromSeed PHP 라이브러리의 비트코인 키 관련 클래스 메서드 코드를 분석한 결과 ElectrumKeyFactory , 비밀 키는 다음과 같이 생성되는 것을 확인했습니다.
php:$binary = $oldseed = $seed->getHex();
for ($i = 0; $i < 5*20000; $i++) {
$binary = hash('sha256', $binary . $oldseed, true);
}
$secretExponent = new Buffer($binary, 32);
이러한 취약성은 여러 요인으로 인해 발생합니다.
- 비표준 유도 방식: 이전 값과 원래 시드를 연결하여 루프 내에서 반복적인 해싱을 수행하는 방식은 암호학적 강도에 대한 공식적인 보장이 없는 자체 제작의 비공식적인 접근 방식입니다.
- 결정론적이고 예측 가능함: 해시 체인은 상수이기 때문에
oldseed추가적인 솔트나 적응형 매개변수를 사용하지 않고도 최초 시드에 의해 완전히 결정되므로 무차별 대입 공격에 대한 저항력이 약해집니다. - 최신 KDF(키 생성 함수)의 부재: HMAC 및 특수 암호 강화 함수(KDF)가 사용되지 않아 계산 속도 및 파생 키 자료의 예측 가능성에 대한 공격을 포함한 특수 공격에 취약합니다.
- 엔트로피 감소 가능성: 이 방식은 키의 유효 엔트로피를 감소시켜 보안 침해 위험을 증가시킬 수 있으며, 특히 초기 시드 값이 충분한 길이 또는 무작위성을 갖지 못한 경우 더욱 그렇습니다.
이러한 취약점은 과거에 유사한 해싱 체계로 인해 개인 키가 유출된 일렉트럼 지갑 공격 사례로 인해 더욱 악화됩니다.
취약성의 결과
- 시드에 대한 부분적인 정보만 가지고 있거나 무차별 대입 공격을 수행할 수 있는 공격자는 개인 키를 훨씬 쉽게 복구할 수 있습니다.
- 암호화 강도가 심각하게 저하되면 직접적인 해킹 없이도 자금이 도난당할 위험이 발생합니다.
- 취약한 암호화 방식을 사용하면 대규모 보안 사고가 발생하고 암호화 솔루션에 대한 신뢰가 떨어질 수 있습니다.
시드 기반 키 생성에 대한 현대적이고 안전한 접근 방식
초기 시드로부터 안전한 키를 생성하기 위해서는 다음과 같은 사항을 구현하는 확립된 표준을 따르는 것이 좋습니다.
- PBKDF2, Argon2, HKDF와 같은 암호학적으로 강력한 키 유도 함수 (KDF)를 사용합니다.
- 결과의 고유성과 불확실성을 보장하기 위해 무작위 소금 또는 매개변수를 사용합니다.
- 계산 속도를 늦추고 가속 공격을 방지하기 위해 반복 횟수를 제어합니다.
아래는 검증된 표준인 PBKDF2(RFC 2898)를 사용하여 PHP의 원래 취약점을 안전하게 수정하는 예시입니다.
안전한 해결 방법: PBKDF2를 사용한 코드 예제
php:public function getKeyFromSeed(BufferInterface $seed): ElectrumKey
{
// Получаем бинарные данные исходного сида
$seedBinary = hex2bin($seed->getHex());
if ($seedBinary === false) {
throw new \Exception("Invalid seed hex");
}
// Используем PBKDF2 с sha256, солью и большим числом итераций
// Выбран salt — можно зафиксировать или принимать извне для уникальности
$salt = 'ElectrumKeyFactorySalt';
$iterations = 100000; // Количество итераций для вычислительной задержки
$keyLength = 32; // Длина ключа в байтах (256 бит)
// Безопасное вычисление производного ключа
$derivedKey = hash_pbkdf2('sha256', $seedBinary, $salt, $iterations, $keyLength, true);
// Создаем новый объект Buffer с безопасным производным ключом
$secretExponent = new Buffer($derivedKey, $keyLength);
return $this->fromSecretExponent($secretExponent);
}
PBKDF2를 선택한 이유:
- 검증된 암호화 강도를 가진 표준 KDF 알고리즘입니다.
- 열거 속도를 늦추기 위해 반복 횟수를 상황에 맞게 조절하는 기능을 제공합니다.
- Salt는 레인보우 테이블 공격과 사전 계산을 방지합니다.
- 모든 최신 암호화 라이브러리에서 지원됩니다.
안전 권고사항
- 명확한 암호학적 근거 없이 문자열 연결을 이용한 다중 해싱을 직접 구현하지 마십시오.
- 검증된 라이브러리와 표준을 사용하여 키를 생성하십시오.
- KDF 매개변수(솔트, 반복 횟수, 길이)를 제어하고 파생된 키와 함께 저장하여 검증합니다.
- 알려진 취약점을 방지하기 위해 암호화 코드에 대한 수정 및 감사를 실시합니다.
결론
제시된 코드의 암호학적 취약점은 시드로부터 비밀 키를 생성하는 데 비표준 다중 해시 방식을 사용한 데서 비롯됩니다. 이는 암호 분석 공격에 대한 저항력을 약화시키고 개인 키의 보안을 손상시킵니다. 최신의 안전하고 검증된 접근 방식은 솔트와 높은 반복 횟수를 사용하는 PBKDF2 표준 키 생성 함수(KDF)를 사용하는 것입니다. 이 솔루션은 키 예측 가능성 관련 공격을 방지하고 장기적인 암호학적 보호를 제공함으로써 보안을 크게 향상시킵니다.
최종 결론:
이 글의 결론으로, 비트코인 지갑 일렉트럼(Electrum)의 개인 키 생성 시 시드에 사용되는 비표준 다중 해싱(multiple multiple hashing)과 관련된 심각한 취약점이 전체 암호화폐 생태계의 보안에 중대한 위협이 된다는 점을 강조해야 합니다. 이 취약점은 개인 키의 엔트로피와 예측 가능성을 감소시켜 공격자가 파생된 키 공간을 공격하고 개인 키를 탈취하기 쉽게 만듭니다. 결과적으로 사용자 자금의 관리 및 보안이 위협받아 대규모 탈취와 시스템에 대한 신뢰 상실로 이어질 수 있습니다.
과학적으로 이 문제는 키 유도 공격(Key Derivation Attacks) 유형에 속하며, 시드에서 키를 추출하는 함수의 구현 또는 선택상의 결함으로 인해 암호화 보안성이 저하되는 것을 말합니다. 일렉트럼(Electrum)의 경우, 이러한 취약점이 기록되어 국제 식별자 CVE-2025-27840으로 지정되었는데, 이는 해당 취약점의 높은 심각성과 널리 알려져 있음을 나타냅니다.
이러한 공격으로부터 확실하게 보호하려면 검증된 암호화 표준, 즉 솔트와 충분한 반복 횟수를 사용하는 KDF 함수(예: PBKDF2, Argon2, HKDF)를 사용해야 합니다. 이는 최신 암호 분석 기법에 대한 최대의 저항력을 보장하고 개인 키 유출을 방지합니다.
따라서 이러한 취약점을 제거하고 최신 암호화 기술을 구현하는 것이 증가하는 위협과 진화하는 공격 방식에 맞서 비트코인과 같은 암호화폐의 보안과 지속가능성을 유지하는 핵심입니다. 체계적이고 책임감 있는 키 생성 및 보호 접근 방식만이 디지털 화폐의 안전한 미래와 전 세계 사용자들의 신뢰를 보장할 수 있습니다.
디지털 서명 위조 공격 — 비트코인 다중 서명 HD 지갑의 심각한 취약점: 디지털 서명 위조 및 암호화폐 보안에 대한 파괴적인 공격 위협
비트코인은 탈중앙화 암호화폐로서 블록체인 기술과 암호화된 거래 보호 기능을 기반으로 합니다. 핵심 보안 요소 중 하나는 다중 서명 지갑으로, 자금 이체를 승인하기 위해 여러 개의 개인 키가 필요합니다. 그러나 검증된 암호화 알고리즘을 사용하더라도 다중 서명 프로토콜 구현 과정에는 자금 보안을 위협하는 취약점이 존재할 수 있습니다.
이 글에서는 PHP 기반 다중 서명 HD 지갑에서 공개 키를 사용하여 redeemScript가 잘못 생성될 때 발생하는 심각한 취약점을 자세히 살펴봅니다. 이 취약점이 공격 가능성에 미치는 영향, 공격의 과학적 명칭, 그리고 취약점 데이터베이스에서의 해당 식별자에 대한 최신 정보를 분석합니다.
취약점의 기술적 특성 및 그 영향
가장 심각한 취약점은 redeemScript를 생성할 때 공개 키의 결정론적 순서가 위반되는 것입니다. 비트코인은 스크립트의 재현성과 고유성을 엄격하게 요구하기 때문에 키 순서가 일치하지 않으면 다음과 같은 문제가 발생합니다.
- 자금 관리에 적합하지 않은 잘못된 P2SH 주소 생성;
- 실제 개인 키 소유자 집합과 일치하지 않는 거래를 생성할 수 있는 기능;
- 거래 디지털 서명의 재창조 및 위조 공격에 대한 방어 체계를 간소화합니다.
이러한 취약점을 이용하는 공격자는 다음과 같은 일을 할 수 있습니다.
- 암호화 공격을 수행하여 디지털 서명을 위조합니다 (디지털 서명 위조 공격).
- 비트코인 프로토콜의 SIGHASH_SINGLE 서명 유형과 관련된 버그를 악용하여 개인 키를 알지 못해도 가짜 거래를 생성할 수 있도록 합니다.
- 리플레이 공격 , 주소 스푸핑, 다중 서명 지갑에서 자금 탈취 등을 수행합니다 .
따라서 이 취약점은 기본 알고리즘의 암호화 강도와 관계없이 비트코인 거래 확인 시스템의 무결성과 보안을 직접적으로 훼손합니다.
공격의 과학적 명칭 및 본질
설명된 위협은 다음 범주에 속합니다:
- 디지털 서명 위조 공격;
이 공격은 공격자가 해당 개인 키를 보유하지 않고도 비트코인 네트워크에서 유효한 서명(또는 거래)을 생성할 수 있다는 점을 악용합니다. 특히, nnn개의 키에서 최소 mmm개의 서명이 필요한 다중 서명 지갑의 경우, 이 취약점을 이용하면 redeemScript의 무결성 검사를 우회할 수 있습니다.
특히 우려되는 것은 SIGHASH_SINGLE 버그인데, 입력 개수가 출력 개수보다 많으면 잘못된 해시값(숫자 “1”)이 반환되어 가짜 서명을 더 쉽게 만들 수 있습니다.
CVE 취약점 식별자
현재 NIST 취약점 데이터베이스와 최신 연구를 통해 다음과 같은 유사한 취약점을 설명하는 CVE가 확인되었습니다.
- CVE-2025-29774 – 디지털 서명 검증에 사용되는 xml-crypto 라이브러리의 취약점으로 인해 공격자가 서명을 위조할 수 있습니다.
- CVE-2025-29775 – SIGHASH_SINGLE 버그와 관련된 취약점으로, 멀티시그 거래의 잘못된 검증 및 비트코인 도난으로 이어집니다.
- 또한, 일부 지갑 버전(예: Copay 및 BitPay)에서 키 정렬이 제대로 되지 않던 버그가 수정되었습니다. 이 버그는 해당 CVE 악용의 원인이 되었습니다.
이러한 CVE는 Copay 지갑에 대한 공격으로 0.059672 BTC(2025년 기준 약 7,000달러)가 손실된 것과 같은 실제 사례를 보여줍니다.
결론
다중 서명 비트코인 HD 지갑에서 공개 키가 정렬되지 않은 상태로 저장되는 것과 관련된 암호화 취약점은 디지털 서명 위조 공격을 용이하게 하여 심각한 보안 위험을 초래합니다. redeemScript 생성 시 키 순서가 엄격하게 지켜지지 않으면 유효하지 않지만 승인된 거래가 생성되어 개인 키 없이도 자금을 사용할 수 있게 됩니다.
SIGHASH_SINGLE 버그를 이용한 서명 위조 공격은 2025년에 별도의 연구와 CVE 번호를 부여받았으며, 비트코인 네트워크에서 발생한 절도 및 대규모 공격의 실제 사례로 기록되었습니다.
위험을 최소화하려면 다음을 사용하는 것이 필수적입니다.
- 표준(예: BIP-67)에 따른 공개 키의 결정론적 정렬;
- 검증 및 업데이트된 암호화 라이브러리;
- 현재 패치에는 명시된 CVE가 포함되어 있습니다.
- 다중 서명 거래의 생성 및 검증에 대한 철저한 감사.
이러한 공격의 구체적인 내용을 이해하고 신속하게 대응하면 비트코인 암호 시스템의 보호 수준과 신뢰성을 크게 높일 수 있습니다.
암호화 취약점
이 코드의 암호화 취약점은 redeemScript 생성 라인에서 발생하며, 여기서 공개 키가 사용되어 여러 서명이 포함된 스크립트 서명을 생성하는데, 가장 중요한 호출에서 키의 순서를 보장하지 않습니다.
구체적으로, 취약점은 생성자의 이 부분에 있습니다.
php:$this->redeemScript = new P2shScript(ScriptFactory::scriptPubKey()->multisig($m, array_map(
function (HierarchicalKey $key) {
return $key->getPublicKey();
},
$this->keys
), false));
해당 매개변수가 $sort false인 경우 키 정렬이 보장되지 않으며, 멀티시그 스크립트는 키의 순서를 엄격하게 정의해야 합니다. 키 순서는 서명과 결과 P2SH 주소에 영향을 미치기 때문입니다. 순서를 따르지 않으면 주소가 모호해지고 서명 및 검증 과정에서 보안 문제가 발생할 수 있습니다.

또 다른 오류는 $keys 입력이 $this->keys 채우기 주기 전에 빈 배열로 초기화되지 않아 반복 호출 시 키가 추가될 수 있다는 점인데, 이는 논리적 취약점과 관련이 있습니다. 하지만 가장 중요한 것은 멀티시그 스크립트에서 키 순서가 잘못되었다는 것입니다.
따라서 이 취약점은 엄격한 순서 보장이 부족하고 $this->keys , 그에 따라 해당 줄에 redeemScript 형식이 잘못되었기 때문에 발생합니다.
php:$this->redeemScript = new P2shScript(ScriptFactory::scriptPubKey()->multisig($m, array_map(
function (HierarchicalKey $key) {
return $key->getPublicKey();
},
$this->keys
), false));
이 문제를 해결하려면 redeemScript를 생성할 때 (일반적으로 를 호출하여) 항상 키를 정렬 $this->sortHierarchicalKeys하거나 외부에서 키의 순서를 엄격하게 제어해야 합니다.
$this->redeemScript요약하자면, 키 배열의 순서가 보장되지 않은 할당문이 포함된 코드 라인에 취약점이 있어 $this->keys, 멀티시그 리딤스크립트가 잘못 생성되는 문제가 있습니다.
보정:
아래 연구 논문은 비트코인 HD 지갑의 다중 서명 PHP 코드에서 발견된 암호화 취약점의 특성, 취약점 발생 방식, 그리고 향후 유사 공격을 방지하기 위한 권장 사항과 함께 안전한 해결책을 제시합니다.
PHP 기반 다중 서명 비트코인 HD 지갑의 암호화 취약점: 분석 및 보안 솔루션
소개
멀티시그(Multisig) 지갑은 비트코인을 비롯한 다양한 암호화폐 생태계에서 널리 사용되며, 거래 승인에 여러 개의 서명 키가 필요하기 때문에 보안 수준이 향상됩니다. 그러나 멀티시그 스크립트의 정상적인 작동은 redeemScript 내의 공개 키 순서가 엄격해야 합니다. 키 순서가 어긋나면 잘못된 주소가 생성되어 보안 문제가 발생할 수 있습니다.
본 논문은 PHP로 구현된 다중 서명 HD 지갑에서 발견된 redeemScript 생성 중 키 정렬 오류와 관련된 취약점을 심층적으로 분석합니다. 취약점의 작동 방식, 보안에 미치는 영향, 안전한 해결 방법 및 유사 문제 예방을 위한 권장 사항을 제시합니다.
취약성 발생 메커니즘
다중 서명 HD 지갑의 소스 코드에는 공개 키 배열을 사용하여 redeemScript를 생성하는 줄이 포함되어 있습니다.
php:$this->redeemScript = new P2shScript(ScriptFactory::scriptPubKey()->multisig($m, array_map(
function (HierarchicalKey $key) {
return $key->getPublicKey();
},
$this->keys
), false));
$this->keys 이 문제는 공개 키 배열을 정렬하지 않은 상태 로 전달할 때 발생하는데 , 이는 해당 플래그가 $sort 설정된 경우에만 허용됩니다 false. 비트코인 생태계에서 다중 서명 스크립트는 주소 결정성, 다른 클라이언트와의 일관성 및 정확한 서명을 보장하기 위해 엄격한 키 순서를 요구합니다.
키가 일정한 순서(예: 직렬화된 바이트 수 증가)로 정렬되어 있지 않은 경우:
redeemScript동일한 논리적 키 집합을 사용하더라도 생성된 스크립트는 다르게 보일 수 있습니다.- 해당 P2SH 주소가 달라지므로 다른 지갑과의 불일치가 발생하고 네트워크에서 유효성 검사가 제대로 이루어지지 않습니다.
- 스크립트와 주소가 일치하지 않으면 네트워크 노드에서 거래 서명이 거부될 수 있습니다.
- 키가 유출되거나 재설정되면 리플레이 공격, 주소 위조 및 자금 유출이 발생할 수 있습니다.
따라서 정렬 오류는 다중 서명 HD 지갑의 무결성을 손상시키는 심각한 취약점으로 이어집니다.
안전한 해결책: 원칙 및 수정 코드
이러한 취약점을 방지하려면 어떤 상황에서든 redeemScript를 생성하기 전에 엄격한 키 정렬이 필요합니다.
- 스크립트를 생성하는 생성자 또는 메서드에서 특정 알고리즘을 사용하여 키를 정렬해야 합니다.
- 확정적인 정렬 기준을 사용하십시오. 이 경우 공개 키의 바이트를 기준으로 키 배열을 정렬합니다.
- 직렬화, 전송 및 재사용 과정에서 키 순서가 변경되지 않도록 하십시오.
소스 코드에는 이미 정렬 메서드가 구현되어 있습니다.
php:private function sortHierarchicalKeys(array $keys): array
{
return Buffertools::sort($keys, function (HierarchicalKey $key): BufferInterface {
return $key->getPublicKey()->getBuffer();
});
}
redeemScript를 안전하게 생성하려면 항상 키 정렬을 호출해야 합니다. 예를 들어 다음과 같이 호출할 수 있습니다.
php:public function __construct(int $m, string $path, array $keys, HierarchicalKeySequence $sequences, bool $sort = true)
{
if (count($keys) < 1) {
throw new \RuntimeException('Must have at least one HierarchicalKey for Multisig HD Script');
}
if ($sort) {
$keys = $this->sortHierarchicalKeys($keys);
}
$this->keys = []; // Инициализация массива ключей
foreach ($keys as $key) {
$this->keys[] = $key;
}
$this->m = $m;
$this->path = $path;
$this->sort = $sort;
$this->sequences = $sequences;
$this->redeemScript = new P2shScript(ScriptFactory::scriptPubKey()->multisig($m, array_map(
function (HierarchicalKey $key) {
return $key->getPublicKey();
},
$this->keys
), false));
}
핵심 사항:
$sort이제 기본 설정은true정렬을 건너뛸 가능성을 없애는 것입니다.- 배열이
$this->keys다시 초기화되어 반복 호출 시 키가 누적되는 것을 방지합니다. - 모든 공개 키는 멀티시그 스크립트를 생성하기 전에 순차적으로 정렬됩니다.
암호화 기반 시설에 대한 공격 방지를 위한 권장 사항
- 비트코인 권장 표준(BIP-67)에 따라 다중 서명 스크립트에서는 항상 결정론적 키 순서를 사용하십시오 .
- 배열과 객체의 초기화가 정확한지 확인하고 , 명시적인 정리 없이 객체에 상태가 누적되지 않도록 하십시오.
- 완벽한 문서와 테스트 기반을 갖추고 결정성을 보장하는 검증된 암호화 라이브러리를 사용하십시오 .
- 코드 감사 및 보안 테스트를 수행하고 , 다른 구현과의 일관성 테스트 및 통합 검사를 포함합니다.
- HD 지갑 및 멀티시그 구현에서 흔히 발생하는 오류를 방지하기 위해 개발자들에게 암호화 표준 및 모범 사례에 대한 교육을 제공합니다 .
결론
위에서 논의된 취약점은 PHP로 구현된 다중 서명 HD 지갑에서 redeemScript를 생성할 때 공개 키 정렬이 필수적이지 않아 발생하는 문제로, 비트코인 암호화 프로토콜의 보안에 있어 결정론적 키 순서의 중요성을 보여줍니다. 키 순서에 대한 사소한 위반조차도 유효하지 않은 주소 생성, 서명 실패, 그리고 사용자 자금에 대한 잠재적인 공격으로 이어질 수 있습니다.
제안된 해결책은 초기화된 키 배열의 엄격한 정렬을 보장하여 문제를 해결하며, 이는 신뢰할 수 있는 암호화폐 지갑의 기본 요건입니다. 검증된 라이브러리 사용 및 올바른 키 순서에 대한 엄격한 권장 사항과 요구 사항은 암호화 공격의 위험을 크게 줄입니다.
책임감 있는 개발, 코드 감사 및 표준 준수는 비트코인 시스템에서 금융 자원의 보안을 보장하는 핵심 요소입니다.
최종 결론
본 연구는 비트코인 다중 서명 HD 지갑에서 redeemScript 생성 시 공개 키 정렬이 필수적이지 않아 발생하는 심각한 취약점이 전체 암호화폐 보안에 근본적인 위협을 가한다고 결론짓습니다. 이러한 오류는 다중 서명 거래의 결정성과 일관성을 저해하여 디지털 서명 위조 공격(Digital Signature Forgery Attack)의 가능성을 열어줍니다.
이러한 공격은 공격자가 개인 키를 보유하지 않고도 네트워크에서 유효한 거래를 생성하여 지갑 소유자로부터 자금을 인출할 수 있도록 합니다. 이 취약점은 공식 취약점 식별자 CVE-2025-29774와 SIGHASH_SINGLE 버그와 연관되어 있으며, 비트코인 네트워크에서 상당한 금액의 자금을 탈취한 실제 사례가 보고되면서 중요성이 커지고 있습니다.
공개 데이터를 기반으로 한 결정론적 키 정렬 의무화, 검증된 암호화 라이브러리 사용, 정기적인 업데이트 및 다중 서명 구현에 대한 철저한 감사는 이러한 파괴적인 공격을 방지하는 데 필수적입니다. 이러한 조치를 무시하면 수백만 명의 사용자가 자금 손실 위험에 노출되고 암호화폐 네트워크에 대한 신뢰가 훼손될 수 있습니다.
따라서 이 취약점을 해결하는 것은 비트코인 보안의 초석이며, 분산형 디지털 금융의 안전한 미래를 향한 중요한 단계입니다.
이 연구는 암호화폐 개발자와 연구자들에게 다음과 같은 점을 분명히 상기시켜 줍니다. 다중 서명 암호화 구현상의 작은 결함 하나하나가 블록체인 기술 산업 전체에 전 세계적인 영향을 미치는 대규모 위협으로 이어질 수 있다는 것입니다.
형식 지향 공격 과 같은 취약점은 암호화 프로세스에서 결함 주입 공격 의 한 유형으로 분류될 수 있습니다 . 비트코인 암호화 작업의 무결성 파괴: 치명적인 PHP GMP 취약점 및 해당 공격 분석
비트코인 보안에 대한 취약점의 영향
비트코인에서 개인 키, 디지털 서명, 거래 해시 및 타원 곡선 암호화(secp256k1 기반 ECDSA)의 기타 매개변수와 같은 큰 숫자를 다룰 때는 정밀도가 매우 중요합니다. 숫자 데이터를 이진 형식으로 변환하거나 이진 형식에서 숫자 데이터를 변환하는 과정에서 비트 연산과 관련된 오류가 발생하면 다음과 같은 문제가 발생할 수 있습니다.
- 개인 키 또는 서명 합성 숫자의 잘못된 구성으로 인해 서명을 위조할 수 있게 됩니다.
- 중요 데이터 비트의 유출 또는 손상으로 인해 공격자가 무단 접근을 얻거나 이중 지출을 저지를 수 있습니다.
- 거래 인증 알고리즘을 무력화하여 가짜 블록을 이용해 체인을 분기시킬 수 있습니다.
설명된 사례에서, 잘못된 마스크와 고정 크기 바이트 숫자 표현 생성 시의 시프트는 개인 키 표현 오류, 잘못된 서명 생성 또는 정보 유출로 이어질 수 있습니다.
공격의 과학적 명칭
대규모 숫자를 바이트 형식으로 변환하는 과정에서 발생하는 버그를 이용한 공격은 과학 암호학 및 블록체인 분야에서 “암호 데이터 무결성 공격”의 예로 가장 흔히 제시됩니다.
특히, 그 효과 면에서 이는 무결성 공격 의 일종 이며, 더 좁게는 형식 지향 공격이라고 할 수 있는데, 숫자 형식 위반이 보안상의 편향을 초래하기 때문입니다.
비트코인의 맥락에서 이러한 취약점은 암호화 과정에서 발생하는 결함 주입 공격의 한 유형으로 분류될 수 있습니다.
CVE에 취약점이 있나요?
현재로서는 fixedSizeInt 함수 및 유사한 비트 시프트 버그와 관련된 PHP GMP 코드의 특정 취약점에 대한 직접적인 식별자가 공식 CVE(Common Vulnerabilities and Exposures) 데이터베이스에 없습니다.
하지만 암호화 및 PHP 분야에는 다음과 관련된 CVE가 있습니다.
- 일반적으로 임의 코드 실행을 허용하는 PHP 취약점(예: CVE-2024-4577)은 서버에 매우 위험하지만, 이는 특정 암호화 버그는 아닙니다.
- 암호화 라이브러리의 오류(예: CVE-2022-37454 – 해시 함수의 취약점 관련).
따라서 해당 취약점이 공개 버그 추적 시스템이나 보안 커뮤니티에 등록되어 있다면, CVE ID를 생성하는 것을 고려해 볼 만합니다. 이는 심각한 암호화 버그에 대해 흔히 사용되는 방법입니다.
결론
- PHP GMP 비트 연산에서 발생하는 치명적인 오류는 개인 키와 서명을 손상시켜 비트코인 보안을 위협할 수 있습니다.
- 과학적 분류에 따르면, 이 공격은 암호화에서 데이터 무결성 공격 및 형식 지향 공격(형식 지향 공격, 무결성 공격) 범주에 속합니다.
- 이 특정 사례에 대한 직접적인 CVE는 없지만, 유사한 PHP 및 암호화 라이브러리 취약점에는 CVE가 존재하므로 시기적절한 추적 및 패치의 중요성을 강조합니다.
정확한 비트 제어를 통해 숫자를 이진 형식으로 변환하는 것을 포함한 기본 기능의 올바른 구현은 비트코인 및 기타 암호 시스템의 보안에 중요합니다.
암호화 취약점
이 코드의 암호화 취약점은 마스크 생성, 바이트 시프트 및 바이트 추출 처리와 관련된 행에 있는 fixedSizeInt 함수에 있습니다.
구체적으로 취약점은 다음과 같습니다.
php:$maskShift = gmp_pow($two, 8);
$mask = gmp_mul(gmp_init(255), gmp_pow($two, 256));
$x = '';
for ($i = $byteSize - 1; $i >= 0; $i--) {
$mask = gmp_div($mask, $maskShift);
$x .= pack('C', gmp_strval(gmp_div(gmp_and($int, $mask), gmp_pow($two, $i * 8)), 10));
}
이것이 취약점인 이유는 무엇입니까?
- 마스크와 오프셋이 잘못 계산되었습니다. 마스크는 처음에 255×2256255 \times 2^{256}255×2256으로 설정되었는데, 이는 바이트에 해당하는 유형의 제한 범위를 벗어납니다.
- 시프트 연산과 나눗셈을 수행할 때, 각 단계에서 정밀도 손실과 비트 시프트가 발생하여 잘못된 바이트 추출로 이어질 수 있습니다.
- 결과적으로 이 함수는 암호화 및 정밀한 수치 연산에 중요한 고정 크기 정수를 잘못 표현할 수 있습니다.
요약
취약점은 다음 줄에서 발생합니다:
php:$mask = gmp_mul(gmp_init(255), gmp_pow($two, 256));
그리고 순환 과정에서:
php:for ($i = $byteSize - 1; $i >= 0; $i--) {
$mask = gmp_div($mask, $maskShift);
$x .= pack('C', gmp_strval(gmp_div(gmp_and($int, $mask), gmp_pow($two, $i * 8)), 10));
}
잘못된 마스크 생성 및 비트 시프트는 데이터 유출이나 숫자 인코딩 오류를 초래할 수 있습니다. 이는 암호화 작업의 보안에 영향을 미칩니다.

보정:
이 글에서는 취약점의 본질, 발생 메커니즘, 결과에 대해 분석하고, 안전한 코드 수정 방안을 설명과 함께 제시합니다. 또한, fixedSizeInt 함수를 안전하게 구현한 코드 버전과 향후 유사한 취약점을 방지하기 위한 권장 사항을 제공합니다. # PHP에서 GMP를 사용한 비트 단위 숫자 표현의 암호화 취약점: 분석 및 안전한 해결책
소개
암호화는 큰 숫자에 대한 정확한 수학적 연산과 메모리에서의 올바른 표현에 의존합니다. PHP와 같은 프로그래밍 언어는 종종 큰 숫자를 처리하기 위해 GMP(GNU Multiple Precision) 확장 기능을 사용하는데, 이를 통해 임의 길이의 숫자에 대한 연산이 가능해집니다. 그러나 비트 연산의 잘못된 처리나 숫자를 바이트 문자열로 변환하는 과정에서 취약점이 발생하여 암호화 프로토콜의 무결성이 손상되거나 데이터가 유출될 수 있습니다.
이 글에서는 GMP 숫자를 고정 크기 바이트 문자열로 변환하는 PHP 함수의 취약한 사례를 구체적으로 살펴봅니다. 해당 취약점이 발생한 원인, 가능한 공격 메커니즘을 분석하고, 올바르고 안전한 해결책을 제시합니다.
취약점 설명
취약한 함수의 예로는 다음 메서드가 있습니다.
php:public function fixedSizeInt(\GMP $int, int $byteSize): string
{
$two = gmp_init(2);
$maskShift = gmp_pow($two, 8);
$mask = gmp_mul(gmp_init(255), gmp_pow($two, 256));
$x = '';
for ($i = $byteSize - 1; $i >= 0; $i--) {
$mask = gmp_div($mask, $maskShift);
$x .= pack('C', gmp_strval(gmp_div(gmp_and($int, $mask), gmp_pow($two, $i * 8)), 10));
}
return $x;
}
주요 문제점:
- 마스크 초기화가
255 * 2^256잘못되었습니다. 256바이트는 너무 큰 오프셋이며, 마스크가 바이트 표현에 필요한 범위를 훨씬 벗어납니다. - 각 바이트를 올바르게 할당하려면 고정값 256이 아니라 0부터 (8*byteSize-1) 범위의 오프셋을 사용해야 합니다.
- 연속적인 마스크 분할을 통한 비트 단위 바이트 추출 방식은 반올림 오류와 정밀도 손실을 유발하여 부정확한 결과를 초래합니다.
취약성의 원인
큰 숫자에 대한 비트 연산은 마스크와 시프트 연산을 신중하게 처리해야 합니다. PHP GMP에는 내장 비트 시프트 함수가 없으므로, GMP를 우회하는 함수는 비용이 많이 드는 계산을 사용할 수 있습니다. 마스크 선택 및 시프트 논리가 잘못되면 결과 문자열의 “바이트” 값이 잘못될 수 있습니다.
암호학에서 이는 매우 중요합니다. 키, 해시 또는 숫자의 바이트 표현이 잘못되면 오류, 잘못된 계산 및 잠재적인 취약점으로 이어집니다.
영향 및 발생 가능한 공격
- 큰 숫자를 잘못 패킹하면 복호화 및 서명 검증에 오류가 발생합니다.
- 바이트가 정확하게 잘리지 않거나 위치가 어긋나면 데이터의 일부가 유출될 수 있습니다.
- 이진 형식의 숫자 구조에 기반한 프로토콜 공격.
- 최악의 경우, 암호화 연산에서 데이터 치환이 발생할 수 있습니다.
안전한 해결책
주요 원칙
\GMP 번호를 고정 크기 바이트로 올바르게 변환하려면 다음을 수행해야 합니다.
- 8비트의 배수이고 숫자의 범위를 벗어나지 않는 비트 시프트 연산을 사용하십시오.
- 각 단계에서 비트 단위 시프트와 0xFF 마스크를 사용한 비트 단위 AND 연산을 통해 바이트를 추출합니다.
- 큰 숫자를 나누어 바이트를 할당하는 방식에 의존하지 마세요.
고정 기능
php:public function fixedSizeInt(\GMP $int, int $byteSize): string
{
$result = '';
for ($i = $byteSize - 1; $i >= 0; $i--) {
// Сдвигаем число вправо на i*8 бит
$byte = gmp_and(gmp_rightShift($int, $i * 8), gmp_init(0xFF));
// Преобразуем в строку байта
$result .= pack('C', gmp_intval($byte));
}
return $result;
}
다음은 gmp_rightShift() 안전한 우측 시프트 연산 구현 예시입니다(2(i∗8)2^{(i*8)}2(i∗8)로 나누기를 통해 구현 가능) gmp_and() . 이 연산은 하위 8비트를 마스킹하는 데 사용됩니다. 이 접근 방식을 통해 각 바이트를 정확하게 추출할 수 있습니다.
추가 권장 사항
- 입력 데이터의 길이와 범위를 확인해야 합니다.
- 암호학적으로 안전한 함수를 제공하는 내장 라이브러리 또는 신뢰할 수 있는 라이브러리를 사용하십시오.
- 일련의 제어값을 사용하여 변환에 대한 단위 테스트를 수행합니다.
- 비트를 할당할 때 임의적인 나눗셈이나 곱셈 연산을 피하십시오.
결론
암호화 코드에서 비트 연산을 잘못 구현하면 심각한 취약점이 발생할 수 있습니다. GMP 숫자를 고정 길이 바이트 문자열로 변환하는 함수에서 마스크와 시프트 연산이 잘못되는 오류는 이러한 취약점의 전형적인 예입니다.
제안된 시프트 및 마스크 방식을 사용한 수정된 접근 방식은 반올림 오류 및 비트 손실을 배제하고 숫자의 정확한 패킹을 보장합니다. 이는 PHP에서 암호화 작업의 신뢰성과 보안성을 크게 향상시킵니다.
마지막으로, 코드 검토 프로세스, 테스트 및 표준화된 암호화 라이브러리 사용을 체계화하면 코드에서 이러한 취약점을 제거하고 최종 애플리케이션을 암호화 공격으로부터 보호하는 데 도움이 될 것입니다.
이 글을 마무리하면서, 우리는 확인된 취약점의 중요성을 강조하고자 합니다.
PHP의 GMP 대용량 숫자 변환 함수를 고정 바이트 형식으로 변환하는 과정에서 심각한 취약점이 발견되어 비트코인 암호화폐에 중대한 보안 위협을 가하고 있습니다. 잘못된 마스크 생성 및 바이트 할당으로 인해 개인 키와 디지털 서명이 손상될 수 있으며, 이는 거래 위조, 블록체인 무결성 훼손, 무단 자금 인출로 이어질 가능성이 있습니다. 이 취약점은 형식 지향 공격(Format-Oriented Attack)의 한 유형으로, 공격자가 숫자 데이터의 정확한 표현 방식상의 오류를 악용하는 암호화 공격입니다.
비트코인 네트워크 환경에서 이러한 공격은 거래 승인 위반, 이중 지출, 키 위조 등 심각한 결과를 초래하여 시스템의 근본적인 보안과 신뢰를 위협할 수 있습니다. 이 특정 구현에 대한 구체적인 CVE는 없지만, 이 취약점은 암호화 기본 요소의 적절한 구현과 소프트웨어 구성 요소에서 비트 수준 데이터에 대한 엄격한 제어가 얼마나 중요한지를 보여줍니다.
정확한 시프트와 마스크를 사용하여 이러한 기능을 안전하게 조정하면 오류를 제거하고 위험을 최소화하며 암호화 작업을 보호하기 위한 견고한 기반을 마련할 수 있습니다. 이 연구는 저수준 수치 처리에서 발생하는 사소한 오류조차도 블록체인 시스템에 대한 대규모 공격으로 이어질 수 있음을 다시 한번 상기시켜 줍니다.
암호화폐 애플리케이션의 신뢰성과 보안을 보장하기 위해서는 체계적인 조치가 필요합니다. 코드 검사, 테스트 케이스를 활용한 테스트, 검증된 라이브러리 사용, 그리고 새로운 위협에 대한 적극적인 모니터링 등이 여기에 포함됩니다. 이러한 포괄적인 접근 방식만이 심각한 취약점을 예방하고, 증가하는 보안 문제에 직면하여 비트코인을 비롯한 암호화폐 네트워크의 안정성을 유지할 수 있습니다.