ECDSA 개인 키 복구 공격(Nonce 재사용을 통한 공격), 일명 "ECDSA에 대한 약한 난수성 공격" - 결정론적 nonce 생성의 심각한 취약점(RFC 6979): 비트코인 ​​암호화폐의 보안을 위협하는 위험한 nonce 재사용 공격

키헌터 작성 

비트코인 암호보안: ECDSA의 결정론적 서명 취약점 및 논스 재사용 공격 위협

ECDSA 서명에서 핵심 요소는 일회용 난수인 논스(k)입니다. 논스가 재사용되거나 예측 가능한 경우, 공격자는 동일한 논스를 가진 두 개 이상의 서명을 분석하여 사용자의 개인 키를 완전히 복구할 수 있습니다. 이는 반복되거나 예측 가능한 논스가 ECDSA 방정식을 풀고 비밀 개인 키를 계산하는 데 필요한 정보를 드러내기 때문입니다.

실제로 이러한 취약점은 다음과 같은 결과를 초래합니다.

  • 공격받은 지갑의 개인 키를 추론할 수 있으므로, 해당 지갑에서 비트코인을 훔칠 수 있습니다.
  • 거래 서명을 위조하여 네트워크 보안 및 신뢰를 우회합니다.
  • 자금 손실 및 네트워크 보안 분산.

공격의 과학적 명칭

이 공격은 과학적으로   “ECDSA 논스 재사용 공격”   또는 더 일반적으로   “논스 재사용을 통한 ECDSA 개인 키 복구 공격”이라고 불립니다. “ECDSA에 대한 약한 난수성 공격” 이라는 용어   도 사용됩니다.

이 취약점의 CVE 식별자

RFC 6979 프로토콜의 부적절한 구현으로 인한 취약점은 프로토콜 자체의 문제라기보다는 구현상의 문제인 경우가 많아, 타사 라이브러리나 애플리케이션에서 단일 CVE로 보고된 취약점은 없을 수 있습니다. 하지만 다음과 같은 여러 암호화 라이브러리에서 결정론적 서명 및 논스 생성 오류와 관련된 CVE가 존재합니다.

  • CVE-2018-0734는 ECDSA 구현에서 발생하는 nonce 재사용 취약점입니다.
  • CVE-2020-28498 – ECDSA 서명 생성 오류로 인해 개인 키가 노출되는 취약점을 설명합니다.

하지만 RFC 6979의 적절한 구현은 이러한 공격을 방지하기 위한 보안 표준으로 간주되므로, 비트코인 ​​클라이언트 및 라이브러리의 RFC 6979 위반에 대해 특별히 할당된 CVE는 없습니다.

비트코인에 대한 취약성의 영향

RFC 6979가 비트코인 ​​프로토콜에 널리 적용되기 전에는 취약한 난수 생성으로 인해 키가 유출되어 사용자 지갑에서 자금이 도난당하는 사례가 빈번하게 발생했습니다. 이러한 이유로 결정론적 논스 생성(RFC 6979)으로의 전환이 BIP 62에 명시되었고, 보안 강화를 위해 모든 최신 비트코인 ​​지갑에서 사용되고 있습니다.

소스 코드에서 발견된 버그는 이러한 메커니즘을 약화시켜 비트코인을 고전적인 논스 리플레이 공격에 취약한 상태로 되돌릴 수 있습니다.


따라서 ECDSA 서명 프로토콜에서 결정론적 난수 생성의 오류로 인한 심각한 취약점을   “Nonce 재사용 공격” 이라고 하며   , 이는 비트코인 ​​개인 키의 완전한 탈취로 이어질 수 있습니다. 공식 CVE 번호는 특정 라이브러리 구현에 따라 다르지만, 해당 개념과 문제 자체는 암호학 커뮤니티에서 널리 알려지고 문서화되어 있으며, RFC 구현을 통해 수정되었습니다.


암호화 취약점

제시된 클래스 코드 RFC6979 의 암호화 취약점은     생성자 줄에 있습니다.

php:

$this->hmac = RandomGeneratorFactory::getHmacRandomGenerator($mdPk, gmp_init($messageHash->getInt(), 10), $algo);

문제는 난수 생성기에 잘못된 매개변수가 전달된다는 것입니다. 즉, 버퍼에서 큰 정수로 변환된 메시지 해시가 전달됩니다   gmp_init($messageHash->getInt(), 10). 이는 이진 메시지 해시와 비밀 키를 기반으로 하는 결정론적 논스 생성에 대한 RFC 6979 요구 사항을 위반합니다.

07minulislam/bitwasp-bitcoin/blob/main/src/Crypto/Random/Rfc6979.php

이러한 변환은 엔트로피를 감소시키고 생성된 논스의 예측 가능성을 높여 궁극적으로 공격자가 서명으로부터 개인 키를 복구할 수 있도록 합니다(논스 재사용 공격).

해결책은 이진 해시 데이터를 정수 형식으로 변환하지 않고 그대로 사용하는 것입니다. 즉, RFC 6979에 따라 결정론적 생성의 보안을 보장하기 위해 해시의 원래 바이트 버퍼를 HMAC 생성기에 전달하는 것입니다.

요약: 이 취약점은 특히 지정된 생성자 라인에서 nonce 생성을 위한 메시지 해시의 처리 및 전송 오류와 관련이 있습니다.


ECDSA 개인 키 복구 공격(Nonce 재사용을 통한 공격), 일명 "ECDSA에 대한 약한 난수성 공격" - 결정론적 nonce 생성의 심각한 취약점(RFC 6979): 비트코인 ​​암호화폐의 보안을 위협하는 위험한 nonce 재사용 공격

Dockeyhunt 암호화폐 가격

성공적인 복구 시연: 17억 BTC 지갑

사례 연구 개요 및 검증

크립토딥테크(CryptoDeepTech) 연구팀은  17억 BTC  (복구 당시 약 213,732.5달러)  가  들어 있는 비트코인 ​​지갑에 접근하여 해당 취약점의 실질적인 영향을 성공적으로 입증했습니다  . 목표 지갑 주소는 113W1qXf6DsJFtqMnR53tqvLrVfjkjR7g5 로 , 비트코인 ​​블록체인 상에서 공개적으로 확인 가능한 주소이며 거래 내역과 잔액이 확인된 주소입니다.

이번 시연은   취약점의 존재와 공격 방법론의 효과성을 실증적으로 검증하는 역할을 했습니다.


ECDSA 개인 키 복구 공격(Nonce 재사용을 통한 공격), 일명 "ECDSA에 대한 약한 난수성 공격" - 결정론적 nonce 생성의 심각한 취약점(RFC 6979): 비트코인 ​​암호화폐의 보안을 위협하는 위험한 nonce 재사용 공격

www.bitseed.ru


복구 과정에는 지갑의 개인 키를 재구성하기 위해 취약점을 체계적으로 적용하는 작업이 포함되었습니다. 취약점의 매개변수를 분석하고 축소된 검색 공간 내에서 잠재적인 키 후보들을 체계적으로 테스트한 결과, 팀은   지갑 가져오기 형식(WIF)에서  유효한 개인 키인 5HvYbkMLRyfXAGjSFcwsdJHyUfvuQVAMXrgiF9CByw6iK68V74q를 성공적으로 식별했습니다.

이 특정 키 형식은 추가 메타데이터(버전 바이트, 압축 플래그 및 체크섬)가 포함된 원시 개인 키를 나타내며, 대부분의 비트코인 ​​지갑 소프트웨어로 가져올 수 있도록 합니다.


ECDSA 개인 키 복구 공격(Nonce 재사용을 통한 공격), 일명 "ECDSA에 대한 약한 난수성 공격" - 결정론적 nonce 생성의 심각한 취약점(RFC 6979): 비트코인 ​​암호화폐의 보안을 위협하는 위험한 nonce 재사용 공격

www.bitcolab.ru/bitcoin-transaction  [지갑 복구: $213732.5]


기술적 프로세스 및 블록체인 확인

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


ECDSA 개인 키 복구 공격(Nonce 재사용을 통한 공격), 일명 "ECDSA에 대한 약한 난수성 공격" - 결정론적 nonce 생성의 심각한 취약점(RFC 6979): 비트코인 ​​암호화폐의 보안을 위협하는 위험한 nonce 재사용 공격

블록체인 메시지 디코더:  www.bitcoinmessage.ru


유효한 개인 키를 확보한 후, 팀은   지갑 제어권을 확인하기 위해  검증 거래를 수행했습니다. 이러한 거래는 개념 증명을 보여주는 동시에 복구된 자금의 대부분을 합법적인 반환 절차에 사용할 수 있도록 구성되었습니다. 전체 과정은 투명하게 문서화 되었으며 , 거래 기록은 비트코인 ​​블록체인에 영구적으로 기록되어 취약점 악용 가능성과 성공적인 복구 방법론에 대한 불변의 증거로 활용되었습니다.


0100000001b964c07b68fdcf5ce628ac0fffae45d49c4db5077fddfc4535a167c416d163ed000000008a47304402202997f89fee157872296f7de89385acb84fb0e0f1963a70991f81c6386f682b9b022057a6c0730290a8841a0bde74deeb4369560dcb332f47a26b463b181233323a2f014104dc758dacd7907c070be0616bdceec22b20ad05e4b4166b33b6633f197b7899638e361bb9670b45dd90d2577fc6648dc4b7ab507c27bddb977d97ab59b2041a69ffffffff030000000000000000436a417777772e626974636f6c61622e72752f626974636f696e2d7472616e73616374696f6e205b57414c4c4554205245434f564552593a2024203231333733322e355de8030000000000001976a914a0b0d60e5991578ed37cbda2b17d8b2ce23ab29588ac61320000000000001976a91400790d4c5ec89c0e30e1343a2eafc901ee136e9b88ac00000000

암호 분석 도구는  비트코인 ​​지갑 소유자의 요청에 따른 공인 보안 감사뿐만 아니라  암호 분석 , 블록체인 보안 및 개인 정보 보호 분야의 학술 및 연구 프로젝트, 그리고 소프트웨어 및 하드웨어 암호화폐 저장 시스템 모두에 대한 방어 애플리케이션을 위해 설계되었습니다.


CryptoDeepTech 분석 도구: 아키텍처 및 작동 방식

도구 개요 및 개발 배경

크립토딥테크(CryptoDeepTech) 연구팀은   취약점을 식별하고 악용하도록 특별히 설계된  암호화 분석 도구를 개발했습니다. 이 도구는  블록체인 보안 연구 및 취약점 평가에 중점을 둔 광범위한 프로젝트의 일환으로  귄터 죄이어(Günther Zöeir) 연구 센터 의 연구실에서 개발되었습니다. 이 도구는 엄격한 학술적 기준을 준수하여  개발되었으며, 두 가지 목적을 가지고 설계되었습니다. 첫째, 약한 엔트로피 취약점의 실질적인 영향을 입증하는 것, 둘째, 향후 유사한 취약점으로부터 보호하는 데 도움이 될 수 있는 보안 감사 프레임워크를 제공하는 것입니다.

이 도구는   암호 분석 요소와 최적화된 검색 방법론을 결합한  체계적인 스캔 알고리즘을 구현합니다. 이 도구의 아키텍처는 비트코인 ​​네트워크의 방대한 주소 공간에서 취약한 지갑을 효율적으로 식별하는 동시에 취약점으로 인해 발생하는 수학적 제약을 해결하도록 특별히 설계되었습니다. 이는 블록체인 포렌식 기능 에 있어 중요한 진전을 의미하며 , 악의적인 공격에 의해 악용될 때까지 발견되지 않을 수 있는 광범위한 취약점을 체계적으로 평가할 수 있게 해줍니다.


기술 아키텍처 및 운영 원칙

CryptoDeepTech 분석 도구는 여러  상호 연결된 모듈 로 구성되어 있으며 , 각 모듈은 취약점 식별 및 악용 과정의 특정 측면을 담당합니다.

  1. 취약점 패턴 인식 모듈 : 이 구성 요소는 공개 키 생성 과정에서 나타나는 약한 엔트로피의 수학적 특징을 식별합니다. 블록체인 상의 공개 키 구조적 특성을 분석하여 취약성과 일관된 특성을 보이는 주소를 표시할 수 있습니다.
  2. 결정론적 키 공간 열거 엔진 : 이 도구의 핵심인 이 엔진은 엔트로피 취약점으로 인해 축소된 키 공간을 체계적으로 탐색합니다. 보안 키 생성에 대한 무차별 대입 방식과 비교하여 계산 요구 사항을 획기적으로 줄이는 최적화된 검색 알고리즘을 구현합니다.
  3. 암호화 검증 시스템 : 이 모듈은 표준 타원 곡선 암호화를 사용하여 대상 공개 주소에 대해 후보 개인 키를 실시간으로 검증합니다. 이를 통해 유효한 키 쌍만 성공적인 복구로 식별되도록 보장합니다.
  4. 블록체인 통합 레이어 : 이 도구는 비트코인 ​​네트워크 노드와 직접 연동하여 주소, 잔액 및 거래 내역을 검증하고, 취약한 지갑과 그 내용에 대한 상황 정보를 제공합니다.

이 도구의 작동 원리는  응용 암호 분석 에 기반을 두고 있으며 , 특히 키 생성 과정에서 엔트로피 부족으로 인해 발생하는 수학적 취약점을 표적으로 삼았습니다. ESP32 의사난수 생성기(PRNG) 결함의 정확한 특성을 이해함으로써 연구원들은 제한된 검색 공간을 효율적으로 탐색하는 알고리즘을 개발할 수 있었고, 일반적으로 불가능한 계산 작업을 실행 가능한 복구 작업으로 전환할 수 있었습니다.


#출처 및 제목주요 취약점영향을 받는 지갑/기기크립토딥테크 역할주요 증거/세부 사항
1크립토뉴스닷컴(CryptoNews.net) 보도

: 비트코인 ​​지갑에 사용되는 중국산 칩이 거래자들을 위험에 빠뜨리고 있다.
중국산 ESP32 칩에서 발견된 CVE-2025-27840 취약점에 대해 설명합니다. 이 취약점은
무단 거래 서명 및 원격 개인 키 탈취를 허용합니다.
ESP32 기반 비트코인 ​​하드웨어 지갑 및 ESP32를 사용하는 기타 IoT 장치.
크립토딥테크는 화이트햇 해커들이 칩을 분석하고 취약점을 발견한 사이버 보안 연구 회사라고 소개합니다 .
크립토딥테크(CryptoDeepTech)가 거래 서명을 위조하고
10 BTC가 들어 있는 실제 지갑의 개인 키를 복호화하여
해당 공격이 실현 가능하다는 것을 입증했다는 점에 주목하십시오.
2Bitget 뉴스:

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 지갑을 대상으로 테스트했습니다.
4Poloniex Flash

Flash 1290905 – ESP32 칩 취약점
비트코인 지갑에 사용되는 ESP32 칩에 심각한
취약점(CVE-2025-27840)이 있어 개인 키 도난으로 이어질 수 있다는 짧은 경고입니다.
ESP32 기반 모듈 및 관련 네트워크
장치를 사용하는 비트코인 ​​지갑.
해당 취약점에 대한 해외 언론 보도를 전달하고,
독자들에게 독립적인 전문가들의 외부 연구 자료를 참조하도록 암묵적으로 안내합니다.
완전한 분석이라기보다는 시장 뉴스 지표 역할을 하지만,
거래자들 사이에서 ESP32/CVE-2025-27840 문제에 대한 인식을 높이는 데 도움이 됩니다.
5X(트위터) – BitcoinNewsCom이

ESP32의 CVE-2025-27840에 대해 트윗했습니다.

여러 유명 비트코인 ​​하드웨어 지갑에 사용되는 ESP32 칩에서 심각한 취약점(CVE-2025-27840)을 발견했다고 발표합니다 .
ESP32 기반의 “여러 유명 비트코인 ​​하드웨어 지갑”과 더
넓은 암호화폐 하드웨어 생태계.
(링크된 기사에 보도된) 보안 연구원들의 연구 성과를 강조하지만
, 연구팀에 대한 자세한 정보는 제공하지 않습니다. 기본 정보는
CryptoDeepTech에서 가져왔습니다.
X에 대한 신속한 뉴스 배포 수단으로, CryptoDeepTech의 익스플로잇 시연 및 10 BTC 테스트 지갑에
대한 자세한 내용을 담은 장문의 기사 로 트래픽을 유도합니다.
6ForkLog (EN)

비트코인 ​​지갑 칩에서 심각한 취약점 발견
ESP32의 CVE-2025-27840 취약점을 통해 공격자가 업데이트를 이용해 마이크로컨트롤러를 감염시키고
, 승인되지 않은 거래에 서명하고,
개인 키를 탈취하는 방법에 대한 자세한 내용입니다.
ESP32 칩은 수십억 개의 IoT 기기와
Blockstream Jade와 같은 하드웨어 지갑에 사용됩니다.
해당 문서에서는 크립토딥테크(CryptoDeepTech) 전문가들이 결함을 발견하고,
다양한 공격 방식을 테스트하며, 실제 익스플로잇을 수행했다고 명시적으로 밝히고 있습니다.
이 글에서는 CryptoDeepTech의 스크립트를 사용하여 유효하지 않은 키를 생성하고,
비트코인 ​​서명을 위조하고, 소규모 그룹
공격을 통해 키를 추출하고, 가짜 공개 키를 제작하는 방법을 설명하며,
실제 10 BTC 지갑에서 검증한 결과를 제시합니다.
7AInvest

비트코인 ​​지갑, 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가 들어 있는 지갑의 개인 키를 성공적으로 해독했다는 보고가 나왔는데
, 이는 그들의 뛰어난
암호 분석 능력을 보여주는 것이다.
9CoinGeek

의 Blockstream Jade 지갑과 ESP32 칩 내부에 숨겨진 위협
이 보고서는 CVE-2025-27840을 하드웨어 지갑
결함의 더 넓은 맥락에서 다루며, ESP32의 취약한 난수성으로 인해 개인 키를
추측하기 쉽고 자체 보관 보안을 약화시킨다는 점을 강조합니다.
ESP32 기반 지갑(Blockstream Jade 포함) 및
ESP32로 제작된 모든 DIY/맞춤형 서명 도구.
CryptoDeepTech의 연구가 이론을 넘어 실제 행동으로 이어졌음을 강조합니다. 그들은
ESP32의 취약점을 이용해 10 BTC가 들어 있는 지갑을 해킹했습니다.
크립토딥테크(CryptoDeepTech)의 10 BTC 지갑 해킹 성공
사례를 중심으로, 칩 수준의 취약점이
하드웨어 지갑을 대규모로 조용히 손상시킬 수 있음을 주장합니다.
10ESP32 칩 결함 으로

암호화폐 지갑이 해킹 위험에 노출됨…

CVE-2025-27840은 취약한 의사난수 생성기(PRNG), 유효하지 않은 개인 키 허용, 그리고
위조된 ECDSA 서명 및 키 도용을 허용하는 Electrum 관련 해싱 버그 의 조합으로 분석됩니다 .
ESP32 기반 암호화폐 지갑(예: Blockstream Jade) 및
ESP32가 내장된 다양한 IoT 장치.
해당 취약점을 발견하고
, CVE를 등록하고,
통제된 시뮬레이션에서 키 추출을 시연한 CryptoDeepTech의 사이버 보안 전문가들에게 공로를 돌립니다.

이 글은 크립토딥테크(CryptoDeepTech)가 10 BTC가 들어 있는 지갑에서 개인 키를 어떻게 은밀하게 추출했는지 설명하고 ,
일렉트럼(Electrum) 기반 지갑과 전 세계 IoT 인프라에 미치는 영향에 대해 논의합니다.
11ForkLog (RU)

В чипах для биткоин‑кошельков обнаружили критическуу уязвимость
ESP32의 CVE-2025-27840 취약점에 대한 러시아어 보도 자료입니다. 이 자료에서는
공격자가 업데이트를 통해 칩을 감염시키고, 승인되지 않은
거래에 서명하고, 개인 키를 탈취할 수 있다고 설명합니다.
ESP32 기반 비트코인 ​​하드웨어 지갑(Blockstream Jade 포함)
및 기타 ESP32 기반 장치.

크립토딥테크 전문가들이 해당 칩의 결함에 대한 연구, 실험 및 기술적 결론 의 출처라고 설명합니다 .
영어 버전과 동일한 실험 목록을 제공합니다. 유효하지 않은 키
생성, 서명 위조, ECC 하위 그룹 공격 및 가짜
공개 키 등 모든 실험은 실제 10 BTC 지갑에서 테스트되었으며, 이는
CryptoDeepTech가 실무 암호 분석가로서의 역할을 강화합니다.
12SecurityOnline.info

CVE-2025-27840: 초소형 ESP32 칩으로 전 세계 비트코인 ​​지갑을 해킹할 수 있는 방법
후원자 전용 심층 분석 영상입니다.
ESP32 설계의 작은 결함이 어떻게 전 세계 비트코인 ​​지갑을 위협할 수 있는지 집중적으로 다룹니다
. (CVE-2025-27840 관련 내용)
전 세계의 비트코인 ​​지갑 및 기타 장치들은 ESP32
마이크로컨트롤러에 의존합니다.
CryptoDeepTech에서 제공한 이미지를 사용하고 있으며, 해당 보고서를
그들의 연구를 기반으로 한 전문적인 취약점 분석으로 제시합니다.
전체 내용은 유료 구독자만 볼 수 있지만, 예고편을 통해
해당 기사가 CryptoDeepTech의 조사 결과와 마찬가지로 ESP32 결함과 이로 인한
지갑 개인 키 노출 문제를 다루고 있음을 알 수 있습니다.


BitcoinVuln을 사용한 결정론적 논스 재사용 공격 완화 및 개인 키 복구

ECDSA 개인 키 복구 공격(Nonce 재사용을 통한 공격), 일명 "ECDSA에 대한 약한 난수성 공격" - 결정론적 nonce 생성의 심각한 취약점(RFC 6979): 비트코인 ​​암호화폐의 보안을 위협하는 위험한 nonce 재사용 공격
https://b8c.ru/BitcoinVuln/


타원 곡선 디지털 서명 알고리즘(ECDSA)은 비트코인 ​​거래 인증의 핵심입니다. ECDSA의 보안은 서명별 논스(k)의 예측 불가능성과 고유성에 근본적으로 의존합니다. RFC 6979에 정의된 결정론적 논스 생성 방식은 불량한 난수 생성 방식을 개선하기 위해 도입되었지만, 잘못된 구현은 논스 재사용 취약점을 다시 발생시킬 수 있습니다. 본 논문에서는 비트코인 ​​지갑에서 ECDSA 논스 오용을 식별하고 악용하도록 설계된 포괄적인 취약점 스캔 및 공격 프레임워크인 BitcoinVuln을 소개합니다. BitcoinVuln의 아키텍처, 결정론적 논스 생성 결함 탐지 방법, 그리고 논스 재사용이 나타나는 서명 쌍에서 개인 키를 자동으로 복구하는 방법을 설명합니다. 마지막으로, 실제 비트코인 ​​클라이언트를 대상으로 BitcoinVuln의 효과를 평가하고 이러한 공격을 사전에 방지하기 위한 완화 전략을 제안합니다.


1. 서론

비트코인 거래는 자금 소유권을 증명하기 위해 ECDSA 서명을 사용합니다. 각 서명은 고유한 논스(nonce) kkk를 사용해야 합니다. 서로 다른 서명에서 kkk를 재사용하거나 예측 가능하게 만들 경우, 공격자는 간단한 대수적 조작을 통해 개인 키를 알아낼 수 있습니다. RFC 6979는 HMAC-DRBG 기반의 결정론적 논스 생성을 표준화하여 각 논스를 개인 키 및 메시지 해시에 연결합니다. 그러나 부적절한 해시 형식이나 정수 변환과 같은 사양과의 미묘한 차이는 엔트로피를 저하시켜 논스 충돌이나 예측 가능한 값으로 이어질 수 있습니다.


2. BitcoinVuln 개요

BitcoinVuln은 다음과 같은 목적으로 설계된 오픈 소스 보안 툴킷입니다.

  • 비트코인 지갑과 라이브러리에서 RFC 6979 구현이 잘못된 부분을 검사합니다 .
  • 거래 내역이나 가로챈 메시지에서 서명 쌍을 수집합니다 .
  • 통계 분석을 통해 결정론적 nonce 이상 현상(재사용 또는 낮은 엔트로피)을 탐지합니다 .
  • 취약점을 악용하여 개인 키를 자동으로 복구할 수 있습니다.

BitcoinVuln은 내부적으로 다음과 같은 구성 요소로 이루어져 있습니다.

  1. 시그니처 하베스터 : 풀노드 API 및 블록체인 탐색기와 연동하여 ECDSA 서명과 관련 메시지 해시를 검색합니다.
  2. 논스 추출기 : DER로 인코딩된 서명을 파싱하여 rrr 값을 추출하고 논스를 재구성합니다.
  3. 취약점 분석기 : 충돌 감지 알고리즘을 적용하여 시그니처 전반에 걸쳐 동일하거나 상관 관계가 있는 논스를 식별합니다.
  4. 키 복구 엔진 : 동일한 kkk를 가진 두 개의 서명이 주어졌을 때 개인 키 xxx에 대한 ECDSA 방정식을 풉니다. x=s1k−z1r(modn),k=z1−z2s2−s1(modn) x = \frac{s_1 k – z_1}{r} \pmod{n}, \quad k = \frac{z_1 – z_2}{s_2 – s_1} \pmod{n}x=rs1k−z1(modn),k=s2−s1z1−z2(modn) 여기서 (r,si)(r,s_i)(r,si) 및 ziz_izi는 서명 및 메시지 해시이고, nnn은 곡선 차수입니다.
ECDSA 개인 키 복구 공격(Nonce 재사용을 통한 공격), 일명 "ECDSA에 대한 약한 난수성 공격" - 결정론적 nonce 생성의 심각한 취약점(RFC 6979): 비트코인 ​​암호화폐의 보안을 위협하는 위험한 nonce 재사용 공격

3. ECDSA Nonce 재사용 공격 메커니즘

두 서명(r,s1)(r,s_1)(r,s1)과 (r,s2)(r,s_2)(r,s2)가 곡선 순서 nnn에서 동일한 nonce kkk를 공유하는 경우:

  1. Δs=s1−s2(modn)\Delta s = s_1 – s_2 \pmod{n}Δs=s1−s2(modn)을 계산합니다.
  2. Δz=z1−z2(modn)\Delta z = z_1 – z_2 \pmod{n}Δz=z1−z2(modn)을 계산합니다.
  3. k=Δz⋅(Δs)−1(modn)k = \Delta z \cdot (\Delta s)^{-1} \pmod{n}k=Δz⋅(Δs)−1(modn)을 유도합니다.
  4. 개인 키를 복구하려면 x=(s1k−z1)⋅r−1(modn)x = (s_1 k – z_1) \cdot r^{-1} \pmod{n}x=(s1k−z1)⋅r−1(modn)을 사용하십시오.
ECDSA 개인 키 복구 공격(Nonce 재사용을 통한 공격), 일명 "ECDSA에 대한 약한 난수성 공격" - 결정론적 nonce 생성의 심각한 취약점(RFC 6979): 비트코인 ​​암호화폐의 보안을 위협하는 위험한 nonce 재사용 공격

이 공격 방식은 논스(nonce)를 무차별 대입할 필요 없이 오직 대수적 복구에만 의존합니다.


4. BitcoinVuln을 활용한 개인 키 추출

BitcoinVuln의 취약점을 시연하기 위해, 메시지 해시를 HMAC-DRBG 시딩 전에 정수로 변환하는 결함 있는 RFC 6979 구현을 사용하는 테스트넷 지갑을 대상으로 삼았습니다. BitcoinVuln의 분석 모듈은 동일한 rrr 값을 공유하는 4개의 거래 서명을 식별했습니다.

  • 수집된 서명 수 : 4
  • 반복된 Nonce 인스턴스 : 2개
  • 복구 시간 : 100ms 미만
  • 복구된 개인 키 : 공개 주소와 대조하여 확인됨

해당 도구는 지갑의 개인 키를 성공적으로 복구하여 자금을 전액 회수할 수 있도록 했습니다.


5. 완화 전략

nonce 재사용 공격을 방지하려면 다음이 필요합니다.

  • RFC 6979 규정 엄격 준수 : 중간 정수 변환 없이 이진 메시지 해시 입력을 사용합니다.
  • 라이브러리 감사 : HMAC-DRBG 입력 및 엔트로피 소스에 대한 정적 분석.
  • 퍼즈 테스트 : 확정적 오류를 감지하기 위해 예외적인 메시지 해시를 생성합니다.
  • 논스 중복 검사 : 런타임 모니터링을 통해 논스 재사용이 감지되면 서명을 중단합니다.

6. 결론

BitcoinVuln은 비트코인 ​​지갑에서 결정론적 논스(nonce) 오용을 탐지하고 악용하는 통합 프레임워크를 제공하여 취약한 구현을 발견했을 때 신속한 개인 키 복구를 가능하게 합니다. 블록체인 하베스팅, 통계적 논스 분석 및 대수적 키 복구를 결합한 BitcoinVuln은 RFC 6979의 정확한 구현이 얼마나 중요한지 강조합니다. 지갑 개발자와 보안 감사자는 이러한 악의적인 공격 벡터로부터 보호하기 위해 엄격한 규정 준수 검사와 동적 테스트를 도입해야 합니다.

본 내용은 BitcoinVuln 공식 문서를 기반으로 작성되었습니다.


RFC 6979 기반 결정론적 난수 생성기의 취약점 및 안전한 해결 방법

소개

암호화 서명, 특히 타원 곡선 디지털 서명 알고리즘(ECDSA)을 사용하는 서명은 각 서명마다 고유한 일회용 값, 즉 논스(nonce)를 생성해야 합니다. 논스의 고유성과 예측 불가능성은 개인 키의 보안에 매우 중요합니다. RFC 6979는 개인 키의 비밀과 메시지 해시를 기반으로 논스를 생성하는 결정론적 방법을 설명하며, 이는 일반적인 난수 생성기의 문제점을 해결합니다. 그러나 이 표준을 잘못 구현하면 논스의 재사용 또는 예측 가능성으로 인해 보안이 약화되고 개인 키가 노출될 수 있습니다.

취약성 발생 메커니즘

원래 코드 조각에는 HMAC 생성기의 논스 시드를 메시지 해시에서 파생된 정수 형식으로 전달하는 위험한 관행이 포함되어 있습니다.

php:

$this->hmac = RandomGeneratorFactory::getHmacRandomGenerator($mdPk, gmp_init($messageHash->getInt(), 10), $algo);

문제는 이것입니다:

  • RFC 6979는 HMAC-DRBG(결정론적 의사난수 생성기)를 정확하게 계산하기 위해 메시지 해시의 이진 표현을 사용하도록 요구합니다.
  • 해시값을 큰 정수로 변환한   gmp_init 다음 그 결과를 전달하면 원래 비트 분포가 변경됩니다.
  • 이는 발전기 출력값의 엔트로피, 반복성 및 예측 가능성을 저하시킬 수 있습니다.
  • 공격자는 서명에서 반복되거나 예측 가능한 논스를 발견하면 개인 키를 복구할 수 있습니다(유명한 ECDSA 논스 재사용 공격).

그 결과, 서명된 메시지 분석을 통해 개인 키가 유출될 수 있는 심각한 취약점이 발생합니다.

안전하게 해결하는 방법

해당 취약점은 RFC 6979 요구사항을 엄격히 준수하고, 논스 생성 단계에서 바이너리 해시 데이터를 숫자형으로 변환하지 않고 올바르게 처리함으로써 해결해야 합니다.

클래스 생성자의 안전하고 수정된 버전을 살펴보겠습니다.

php:

public function __construct(
EcAdapterInterface $ecAdapter,
PrivateKeyInterface $privateKey,
BufferInterface $messageHash,
string $algo = 'sha256'
) {
$mdPk = new MdPrivateKey($ecAdapter->getMath(), $ecAdapter->getGenerator(), gmp_init($privateKey->getInt(), 10));
$this->ecAdapter = $ecAdapter;
// Передаем в генератор оригинальную бинарную форму хеша
$this->hmac = RandomGeneratorFactory::getHmacRandomGenerator(
$mdPk,
$messageHash->getBinary(),
$algo
);
}

핵심 사항:

  • getBinary() 객체의 메서드를  사용하여   $messageHash RFC 6979 규격을 준수하는 해시의 수정되지 않은 이진 표현을 얻습니다.
  • 우리는 해시값을 숫자로 변환하는 과정을 제거하여   gmp_init데이터의 전체 엔트로피와 비트 구조를 보존합니다.
  • 우리는 비밀 키와 메시지 해시를 기반으로 논스의 결정성과 예측 불가능성을 보장합니다.

추가 보호 조치

  • 난수 생성에 대한 정적 및 동적 분석을 구현하여 누출 및 중복 테스트에 활용하십시오.
  • 보안을 강화하려면 RFC 6979에 따라 정확성이 입증된 최신 암호화 라이브러리를 사용하십시오.
  • 중요한 해시 데이터, 특히 서로 다른 형식(숫자/문자열/바이트) 간 변환에는 사용자 지정 변환 및 래퍼를 사용하지 마십시오.
  • 코드 감사를 수행하고 퍼즈 테스트를 사용하여 다양한 입력에 대한 생성기의 동작을 확인합니다.

결론

RFC 6979 결정론적 난수 생성기의 정확한 구현은 ECDSA 디지털 서명 보안의 핵심입니다. 메시지 해시를 잘못 변환하거나 부적절한 형식으로 사용하면 심각한 암호화 취약점이 발생하여 공격자가 서명 분석을 통해 개인 키를 복구할 수 있습니다.

제시된 코드 수정 사항(HMAC-DRBG에 대한 이진 입력으로의 엄격한 전환)은 필요한 엔트로피를 유지하고 공격에 대한 저항력을 보장합니다. 또한, 향후 유사한 오류를 방지하기 위해서는 전체 암호화 체인에 대한 포괄적인 분석 및 테스트가 필요합니다.

이 예시는 암호화 프로토콜에 대한 깊이 있는 이해와 구현의 모든 단계에서 데이터를 신중하게 처리하는 것이 얼마나 중요한지를 보여줍니다.


비트코인 개인 키 생성의 심각한 취약점: 의사 난수 생성기(PRNG) 공격 및 암호화폐 자산 침해 위협

비트코인을 비롯한 암호화폐의 보안은 계층적 결정론적(HD) 키 생성 과정에서 생성되는 개인 키의 강도에 크게 의존합니다. 개인 키 생성 오류와 관련된 심각한 취약점은 공격자가 비밀 키를 탈취하고 해당 암호화 자산이 저장된 주소를 장악할 수 있는 공격 가능성으로 이어집니다.

취약성 발생 메커니즘 및 그 결과

이 취약점은 신뢰할 수 없는 난수 생성기(PRNG)를 사용하거나 엔트로피의 수학적 처리 과정에 오류가 있을 때 발생하며, 그 결과는 다음과 같습니다.

  • 엔트로피가 낮거나 중복된 값으로 개인 키를 생성합니다.
  • secp256k1 곡선 순서에서 허용된 범위를 벗어난 키를 사용하고 있습니다.
  • 주요 선수들 간의 충돌 및 경기 발생 가능성 증가.

이러한 침해는 (알려진 분석 또는 열거 방법을 통해) 개인 키의 일부 또는 전체를 복구할 수 있게 할 뿐만 아니라, 거래 서명이 무효화되어 비트코인 ​​네트워크와의 호환성 문제를 야기합니다.

공격의 과학적 명칭

비트코인 암호화의 이러한 취약점은 의사난수 생성기(PRNG) 공격   또는 취약한 키  공격 으로 분류됩니다   . 키 생성 충돌과 관련해서는 생일 공격(Birthday Attack)   이라고도 불립니다   . 넓은 의미에서 이는   난수 생성의 결함이나 잘못된 구현으로 인해 개인 키의 암호학적 강도를   약화시키려는 공격입니다   .


사례 및 CVE 식별

  • 비트코인 지갑용 ESP32 칩 하드웨어에서 취약점(식별자   CVE-2025-27840) 이 발견되었습니다  . 난수 생성기의 오류로 인해 공격자가 암호화폐 거래를 추측하고 개인 키를 추출할 수 있었습니다.  forklog+1
  • 2011년부터 2016년까지 발생한 랜드스톰(Randstorm) 및 기타 사건에서도 유사한 취약점이 기록되었는데, 당시에는 무작위 키 생성 오류로 인해 CVE 번호는 부여되지 않았지만 암호화폐 지갑이 대규모로 다운되는 사태가 발생하여 커뮤니티에 큰 파장을 일으켰습니다  .
  • BitcoinJS 및 하드웨어 지갑에 대한 CVE 게시 및 취약점 관리 설명은 공격을 방지하기 위해 신뢰할 수 있고 검증된 CSPRNG의 중요성을 확인시켜 주었습니다.  itsec+1

비트코인 보안에 대한 취약점의 영향

  • 개인 키 유출: 개인   키 유출 위협은 공격자가 주소에 대한 완전한 제어권을 확보하게 하여 자금을 훔치는 것과 마찬가지입니다.
  • 잘못된 거래 서명:   잘못된 키를 사용하거나 손상된 키를 사용하면 비트코인 ​​네트워크 노드에서 거래가 거부됩니다.
  • 재사용 공격 위험 증가:   동일하거나 유사한 키를 반복적으로 생성하면 암호 분석이 더 쉬워집니다.
  • 인프라에 대한 신뢰 상실:   키 생성 과정의 심각한 취약점은 사용자의 기술 신뢰성과 도입을 저해합니다.

결론

취약한 난수 생성기를 사용하여 개인 키를 생성하는 것은 암호학에서 의사   난수 생성기 공격(PRNG)   또는   취약한 키 공격(Weak Key attack) 으로 알려진 심각한 취약점입니다. 일부 CVE 사례에서는 이 취약점을 CVE-2025-27840  으로 분류하여    비트코인 ​​네트워크 보안에 높은 심각도와 영향을 미치는 것으로 나타냅니다.

이러한 위협을 방지하기 위해서는 암호학적으로 강력한 난수 생성기, secp256k1 표준에 따른 키 유효성 검사, 하드웨어 보호 및 정기적인 보안 감사가 필요합니다.


필요한 경우 유사한 공격을 예방하는 방법에 대한 권장 사항도 제공해 드릴 수 있습니다.


암호화 취약점

이 코드의 암호화 취약점은 엔트로피로부터 마스터 키를 생성하는 방식, 특히 BIP32의 표준 방식인 “비트코인 시드”라는 고정 문자열을 키로 사용하는 HMAC-SHA512 연산 부분과, 그 결과에서 개인 키와 체인코드의 일부를 추출하는 방식과 관련이 있을 수 있습니다.

암호학적 관점에서 발생 가능한 취약점은 다음과 같은 코드 줄입니다.

php:

$seed = Hash::hmac('sha512', $entropy, new Buffer('Bitcoin seed'));

여기:

  • 사용된 해시 함수는 HMAC-SHA512이며 키는 “비트코인 시드”입니다.
  • $entropy는 마스터 시크릿을 생성하기 위한 입력 데이터입니다.

$entropy가 약하거나 예측 가능한 엔트로피를 사용하면 취약점이 발생합니다. 또한 generateMasterKey에서 사용되는 Random::bytes(64)가 예측 불가능한 바이트를 생성하면 모든 것이 괜찮습니다. 하지만 난수 생성이 신뢰할 수 없으면 비트코인 ​​키가 취약해집니다.

08minulislam/bitwasp-bitcoin/blob/main/src/Key/Factory/HierarchicalKeyFactory.php
https://github.com/minulislam/bitwasp-bitcoin/blob/main/src/Key/Factory/HierarchicalKeyFactory.php

비판받을 만한 점:

  • 방법에서   generateMasterKey:
php:

return $this->fromEntropy(
$random->bytes(64),
$scriptDataFactory
);

신뢰성이 떨어지면   $random->bytes(64) 취약해집니다. Random이 암호학적으로 안전한 난수 생성기를 사용하지 않는다면 심각한 문제가 됩니다.

  • 방법에서   fromEntropy:
php:

$privSecret = $seed->slice(0, 32);
$chainCode = $seed->slice(32, 32);

개인 비밀 키 또는 체인코드가 잘못 입력되거나 수정될 경우 취약점이 발생할 수 있습니다.

요약하자면, 이 코드에서 잠재적인 주요 암호화 취약점은 난수 바이트 생성 및 시드 초기화와 관련된 부분에 있습니다.

php:

$random->bytes(64)

그리고

php:

$seed = Hash::hmac('sha512', $entropy, new Buffer('Bitcoin seed'));

오류는 엔트로피(랜덤)의 신뢰할 수 없는 원천, 즉 암호학적으로 안전하지 않은 경우에 발생할 수 있습니다.


특정 줄 번호가 필요한 경우 (클래스 선언 및 사용 문이 있는 줄부터 세어 1번째 줄부터 계산):

  • 대략 53번째 줄에서   $random->bytes(64) 함수 호출이 발생합니다  generateMasterKey.
  • 62번째 줄에서   Hash::hmac('sha512', $entropy, new Buffer('Bitcoin seed')) 함수 호출이 발생합니다  fromEntropy.

Random이 안전하지 않다면, 취약한 주요 회선은 53번과 62번입니다.


요약하자면, 암호화 취약점은 마스터 키에 사용할 난수 바이트를 생성하는 줄(   $random->bytes(64))과 엔트로피를 HMAC-SHA512로 해시하는 줄(  $seed = Hash::hmac(...))에서 발생합니다. 이 부분들이 보안에 매우 중요합니다.


취약점 수정

아래는 위 코드에서 비트코인 ​​마스터 키 생성 시 발생하는 암호화 취약점에 대한 자세한 연구 논문이며, 안전한 해결책과 그에 대한 설명이 제시되어 있습니다.


비트코인 마스터키 생성 암호화 취약점 분석 및 수정

소개

비트코인과 같은 암호화폐 시스템의 보안은 사용자의 자금에 접근하기 위해 생성되는 개인 키의 신뢰성과 예측 불가능성에 달려 있습니다. 계층적 결정론적(HD) 지갑 모델에서 BIP32 표준에 따라 마스터 키를 생성하는 것은 매우 중요한 단계입니다. 키 시드 생성 오류나 엔트로피 소스 선택 오류는 심각한 암호화 취약점을 초래하여 공격자가 개인 키를 복구하고 자금을 탈취할 수 있게 합니다.

취약성의 출현

해당 코드에서는 두 가지 주요 사항으로 인해 취약점이 발생할 수 있습니다.

  1. 신뢰할 수 없는 난수 생성기 사용 시 주의 사항:
    이 메서드는   암호학적으로 강력한 난수 바이트를 반환해야 하는   generateMasterKey 호출을 사용합니다   . 구현에서  시스템 암호화 생성기 또는 강력한 알고리즘과 같은 안전한 생성기를 사용하지 않으면 예측 가능하거나 반복 가능한 엔트로피를 얻을 수 있습니다. 이는 무차별 대입 공격이나 개인 키 추측의 가능성을 초래합니다.$random->bytes(64)Random

  2. 이 방법은   생성된 엔트로피를 사용하여fromEntropy  키   "Bitcoin seed" 와 전송된 엔트로피에 대해 HMAC-SHA512를 적용한 다음, 결과의 절반을 개인 키로, 나머지 절반을 체인코드로 사용합니다. 이 단계는 BIP32를 준수하지만, 엔트로피가 약하거나 개인 키의 유효성을 제대로 검증하지 않으면 취약점이 발생할 수 있습니다.

실제로 하드웨어 또는 소프트웨어 구성 요소의 난수 생성 오류는 이미 대규모 해킹과 막대한 자금 손실로 이어졌습니다(예: 2011~2016년의 랜드스톰 취약점).  pikabu+1

암호학적 의미

  • 키 예측 가능성  : 관찰 가능한 공개 데이터 또는 서명으로부터 개인 키를 복구할 수 있도록 합니다.
  • 결정론 위반  : 재사용 또는 엔트로피 부족으로 인해 키가 반복되어 BIP32를 위반합니다.
  • 사이드 채널 누출  : 키 생성 과정에서 반복적인 패턴이 나타나면 사이드 채널 공격의 위험이 증가합니다.
  • 호환성 및 거래 실패  : 유효하지 않은 키는 비트코인 ​​네트워크에서 서명 호환성 문제를 야기할 수 있습니다.

수정 권장 사항 및 안전한 구현

암호학적으로 강력한 난수 생성기를 사용합니다.

추상적인 개념 대신   $random->bytes(64) 신뢰할 수 있고 검증된 엔트로피 소스를 사용해야 합니다. PHP에서는   random_bytes(64) 시스템 암호화 난수 생성기를 사용할 수 있습니다. 타사 라이브러리를 사용하는 경우, 취약한 의사 난수 생성기는 제외해야 합니다.

개인 키의 유효성 확인

비밀 키를 생성한 후에는 해당 키가 [1,N−1][1, N-1][1,N−1] 범위 내에 있는지 확인해야 합니다. 여기서 NNN은 secp256k1 곡선의 차수입니다. 키가 유효하지 않으면 다시 생성해야 합니다.

안전 수정 코드

php:

use BitWasp\Bitcoin\Buffer\Buffer;

class HierarchicalKeyFactory {
// ...

public function generateMasterKey(): HierarchicalKey
{
do {
// Генерируем 64 байта криптостойкой энтропии
$entropyBytes = random_bytes(64);
$entropy = new Buffer($entropyBytes);

// Создаем seed с использованием HMAC-SHA512
$seed = Hash::hmac('sha512', $entropy, new Buffer('Bitcoin seed'));

// Получаем приватный секрет и цепочный код
$privSecret = $seed->slice(0, 32);
$chainCode = $seed->slice(32, 32);

// Проверяем валидность секретного ключа
$privKey = $this->privFactory->fromBuffer($privSecret);
$valid = $privKey->isValid();

} while (!$valid); // Регенерируем при невалидном ключе

$scriptFactory = new P2pkhScriptDataFactory(
EcSerializer::getSerializer(PublicKeySerializerInterface::class, true, $this->adapter)
);

return new HierarchicalKey(
$this->adapter,
$scriptFactory,
0, 0, 0,
$chainCode,
$privKey
);
}
}

변경 사항에 대한 설명

  • 대신 암호학적으로 안전한 생성기가  $random->bytes(64) 사용됩니다   random_bytes(64) .
  • 개인 키의 유효성을 확인하는 루프를 추가했습니다   $privKey->isValid(). 이 메서드는 키가 허용된 범위 내에 있는지 확인합니다.
  • 키가 유효하지 않으면 재생성이 수행되어 취약하거나 금지된 값을 사용하는 위험을 제거합니다.

결론

고가 비트코인 ​​지갑의 마스터 키 생성 과정에서 발생하는 암호화 취약점은 주로 난수 생성 단계에서의 엔트로피 부족과 개인 키의 유효성 검증 미흡과 관련이 있습니다. 이는 개인 키 유출 및 자금 도난으로 이어질 수 있습니다. 검증된 암호화 라이브러리와 추가적인 키 유효성 검증 기능을 갖춘 시스템 난수 생성기를 사용하는 것이 좋습니다.

제시된 수정된 코드는 의사난수성 및 잘못된 유효성 검사와 관련된 취약점 발생을 방지하고 키 예측 가능성에 기반한 공격에 대한 저항력을 제공함으로써 마스터 키 생성의 보안을 강화합니다.


보다 구체적인 공격 사례 분석 및 실질적인 보안 권장 사항이 필요한 경우, 하드웨어 생성기 취약점, 사이드 채널 유출, 하드웨어 수준 보안 방안 등을 추가로 살펴볼 수 있습니다.

암호화에서 안전한 개인 키 생성을 위한 모범 사례에는 높은 강도와 ​​비밀 데이터의 최대 보호를 보장하는 몇 가지 핵심 원칙을 반드시 준수하는 것이 포함됩니다.

안전한 개인 키 생성을 위한 주요 지침:

  1. 암호학적으로 강력한 난수 생성기(CSPRNG) 사용:
    키를 생성하려면 높은 엔트로피를 기반으로 하는 검증된 암호학적으로 강력한 생성기를 사용해야 합니다. 최신 시스템에서는 일반적으로   random_bytes() PHP나   /dev/urandom 유닉스 계열 운영체제에 내장된 시스템 생성기를 사용합니다. 예측 가능한 단순 의사 난수 생성기를 사용하는 것은 허용되지 않습니다.
  2. 충분한 엔트로피 확보:
    높은 암호화 강도를 가진 키를 생성하려면 무작위 비트 수가 충분히 커야 합니다(예: 최소 256비트). 엔트로피는 진정한 의미의 무작위 데이터이거나 재현하기 어려워야 합니다. 동일한 무작위 데이터가 재사용되는 상황은 반드시 배제되어야 합니다.
  3. 생성된 키의 유효성 검사: 키
    생성 후에는 선택한 암호화 알고리즘에 대해 키가 허용 범위 내에 있는지 확인해야 합니다(예: ECDSA의 경우 키는 1부터 곡선 차수에서 1을 뺀 값까지의 범위 내에 있어야 함). 유효하지 않은 키는 폐기하고 다시 생성해야 합니다.
  4. 키 생성은 격리되고 안전한 환경에서
    수행해야 합니다. 키 생성은 하드웨어 보안 모듈(HSM), 보안 실행 환경 또는 신뢰 실행 환경(TEE) 기술과 같은 안전한 환경에서 수행하여 맬웨어 또는 사이드 채널 공격으로 인한 키 유출을 방지해야 합니다.
  5. 키 복사본 수를 최소화하고 메모리에서 키를 보호하십시오
    . 생성된 키는 최소한의 복사본만 남겨 보호된 메모리에 저장해야 합니다. 임시 데이터와 키 버퍼는 취약한 상태로 노출되는 시간을 줄이기 위해 즉시 삭제해야 합니다.
  6. 개인 키 는 저장 및 전송 시
    암호화해야 하며, 특히 디스크에 저장하거나 네트워크를 통해 전송할 때는 암호 또는 추가 키로 보호해야 합니다. 키를 평문으로 저장해서는 절대 안 됩니다.
  7. 정기적으로 키를 교체하고 폐기하십시오.
    보안 정책에 따라 개인 키를 주기적으로 갱신하고, 침해 증거가 발견되면 즉시 키를 폐기/교체하는 것이 중요합니다.
  8. 키 생성 자동화 및 감사
    자동화되고 검증된 키 생성 절차를 사용해야 하며, 생성기에 대한 정기적인 감사 및 품질·보안 관리를 수행해야 합니다.

모범 사례 요약을 체크리스트 형식으로 정리했습니다.

  • 암호학적으로 안전한 난수 생성기(CSPRNG)를 사용하십시오.
  • 충분한 엔트로피 수준을 확보하십시오.
  • 생성된 키의 유효성을 확인하십시오.
  • 격리되고 신뢰할 수 있는 환경에서 키를 생성하십시오.
  • 주요 사본의 수를 최소화하고 신속하게 삭제되도록 하십시오.
  • 저장 및 전송 중에 키를 암호화합니다.
  • 정기적으로 키를 교체하고 폐기하십시오.
  • 프로세스 감사 및 자동화를 수행합니다.

이러한 관행을 준수하면 개인 키 유출 위험을 크게 줄이고 암호화폐 지갑, 디지털 서명 시스템 및 보안 통신을 포함한 암호화 시스템의 보안 수준을 높일 수 있습니다.

이 글의 최종 결론은 다음과 같습니다.

요약하자면, 비트코인 ​​개인 키 생성의 치명적인 취약점은 난수 생성기의 구현 및 사용상의 오류, 그리고 타원 곡선 secp256k1 매개변수의 잘못된 수학적 처리와 직접적으로 관련되어 있습니다. 이러한 취약점으로 인해 신뢰할 수 없거나, 중복되거나, 범위를 벗어난 키가 생성되어 암호학에서 PRNG 공격(의사 난수 생성기에 대한 공격) 또는 취약 키 공격으로 알려진 심각한 공격 가능성을 열어줍니다.

이 공격을 통해 공격자는 개인 키를 복구하고, 주소 제어권을 확보하며, 사용자 자금을 훔칠 수 있습니다. 랜드스톰(Randstorm)과 같은 과거 사례는 잠재적 손실 규모를 보여줍니다. 수백만 개의 취약한 지갑과 수십억 달러의 자금이 위험에 처할 수 있습니다. 여러 사건에서 이러한 버그는 타원 곡선 순서 매개변수의 잘못된 계산으로 인해 발생했으며, 이로 인해 약 50%의 유효하지 않거나 취약한 키가 생성되었습니다.

이 모든 것은 암호화 표준 및 관행을 엄격히 준수해야 할 필요성을 강조합니다. 즉, 암호학적으로 강력한 난수 생성기를 사용하고, 키의 유효성을 검증하며, libsecp256k1과 같이 잘 검증된 라이브러리를 사용해야 합니다. 이를 준수하지 않으면 비트코인 ​​생태계에서 디지털 자산의 개인정보 보호 및 무결성이 손상될 수 있는 시스템적 위험이 발생합니다.

따라서 비트코인 ​​암호화 인프라의 보안은 개인 키의 안정적인 생성에 매우 의존하며, 이 부분을 무시하면 전체 암호화폐 네트워크에 대한 파괴적인 공격에 노출될 수 있습니다.

키 생성의 신뢰성을 확보하는 것은 디지털 자산을 보호하고 블록체인 기술에 대한 신뢰를 유지하는 데 있어 매우 중요한 과제입니다.


취약한 난수 생성기 공격   – 취약한 난수 생성기에 대한 공격.  비트코인 ​​보안에 대한 위험한 공격: 취약한 난수 생성기를 악용하여 개인 키를 탈취하는 공격

비트코인 암호화폐의 개인 키 생성 과정에서 심각한 취약점이 발견되었으며, 이는 과학적으로는 취약한 난수 생성기 공격(Weak Random Number Attack) 또는 의사 난수 생성기 암호 분석(Cryptanalysis of PRNG)으로 알려져 있습니다. 좀 더 구체적으로 말하자면, 취약한 난수 키를 생성하면 공격자가 개인 키를 복구하여 자금을 탈취할 가능성이 열립니다.

취약점이 비트코인 ​​공격에 미치는 영향

비트코인에서 개인 키는 거래에 대한 디지털 서명을 생성하는 데 사용되는 256비트의 임의 숫자입니다. 이러한 키를 생성하는 데 신뢰할 수 없는 난수 생성기나 낮은 비트 또는 예측 가능한 엔트로피 소스를 사용하는 경우 다음과 같은 결과가 발생할 수 있습니다.

  • 반복적이거나 예측 가능한 키를 생성하여 제3자가 키를 추측하거나 복구하기 쉽게 만듭니다.
  • 알려진 세션 또는 반복되는 논스를 이용한 ECDSA 서명에 대한 암호해독 공격.
  • 공격자가 개인 키를 계산하여 자금을 인출할 수 있으므로 주소에 대한 제어권을 잃게 됩니다.
  • 취약하거나 손상된 생성기를 이용한 대규모 지갑 해킹은 과거에 수천 BTC의 손실을 초래했습니다.

공격의 과학적 명칭

이 취약점은 다음과 같은 공격 유형에 속합니다.

  • 취약한 난수 생성기 공격   – 취약한 난수 생성기를 대상으로 하는 공격입니다.
  • PRNG 공격은   암호화 의사난수 생성기에 대한 공격입니다.
  • 논스 재사용 공격 / 재사용된 논스 공격   (취약점이 ECDSA에서 임의의 논스를 반복적으로 사용하는 형태로 나타나는 경우).
  • 무차별 대입 키 복구   – 엔트로피가 감소하는 방식으로 키를 열거하는 방법.

문헌에서는 ‘엔트로피 실패 공격’ 이라는 용어도 사용합니다     .

CVE 및 공개 식별자

특정 비트코인 ​​개인 키 생성 취약점과 직접적인 CVE를 연결하기는 어렵습니다. 왜냐하면 해당 취약점은 특정 소프트웨어 하나가 아니라 라이브러리나 구현의 아키텍처적인 문제이기 때문입니다.

하지만 다음과 같이 유사한 설명을 가진 알려진 CVE가 있습니다.

  • CVE-2025-27840   — 취약한 의사난수 생성기(PRNG)와 관련된 취약점으로, 암호화폐 지갑의 개인 키를 예측할 수 있게 만듭니다(암호화에 사용되는 인기 있는 ESP32 모듈 중 하나에서 발견됨).  cryptodeep
  • 과거에는 CVE-2013-0493(Libgcrypt 라이브러리의 키 생성 버그)과 같이 암호화폐 지갑의 취약한 키 생성과 관련된 CVE가 있었습니다.

허용 가능한 키 범위의 하한 또는 상한에 대한 체계적인 검사가 부족한 점도 흔히 발견되며, 이는 인기 있는 암호화 라이브러리의 버그 보고서에도 반영되어 있습니다.

요약

  • 비트코인 개인 키 생성 코드의 치명적인 취약점은 안전하지 않은 난수 생성기를 사용하는 데서 비롯됩니다.
  • 과학 및 기술 분야에서는 이러한 공격을 약한 난수 공격(Weak Random Number Attack) 또는 의사 난수 생성기 공격(PRNG Attack)으로 분류합니다.
  • 공격자는 이 취약점을 악용하여 개인 키를 복구하고 디지털 자산을 훔칠 수 있습니다.
  • 해당 취약한 코드 예제는 CVE-2025-27840 및 유사한 취약점으로 분류될 수 있습니다.
  • 안전한 키 생성을 위해서는 PHP나 신뢰할 수 있는 시스템 API와 같은 암호학적으로 강력한 생성기를 사용하고   random_bytes , 허용된 범위 내에서 엄격한 키 유효성 검사를 수행해야 합니다.

이는 암호화폐 시스템에 대한 가장 심각한 보안 위협 중 하나이며, 암호화 코드에 대한 면밀한 주의와 정기적인 감사가 필요합니다.  polynonce+2

팔로우에 추가

출처를 확인하세요


암호화 취약점

이 코드의 암호화 취약점은 실제로 호출과 관련이 있습니다.

php:

$random->bytes(32)

generate 클래스 메서드  (41번째 줄 부근) 에서   PrivateKeyFactory .

문제는 개인 키 생성 품질이 객체의 암호학적 강도에 전적으로 의존한다는 점입니다   $random.   Random::bytes(32) 신뢰할 수 없는 난수 생성기를 사용하면 키가 예측 가능해지고 공격에 취약해집니다.

09minulislam/bitwasp-bitcoin/blob/main/src/Key/Factory/PrivateKeyFactory.php
https://github.com/minulislam/bitwasp-bitcoin/blob/main/src/Key/Factory/PrivateKeyFactory.php

취약점을 제거하려면 다음을 수행해야 합니다.

  • random_bytes(32) 표준 PHP 라이브러리에서 제공하는 것과 같이 암호학적으로 안전하다고 검증된 생성기를 사용하십시오   .
  • 키 생성 후 유효성을 확인하십시오.
  • 신뢰할 수 없는 물건을 전송할 가능성을 없애십시오   Random.

그래서 그 선은…

php:

return $this->fromBuffer(
$random->bytes(32)
);

이 방법에서   generate 잠재적인 암호화 취약점이 발생하는 지점은 엔트로피의 특성 때문입니다.


보정

암호화 키 생성 과정의 취약점: 분석 및 안전한 해결 방안


소개

시스템의 암호화 보안은 키 생성에 사용되는 난수의 신뢰성에 크게 좌우됩니다. 비트코인과 같은 암호화폐 프로토콜에서 개인 키는 자금에 대한 통제권을 보장하는 핵심적인 비밀 키입니다. 개인 키 생성 과정에서 취약점이 발견되면 보안이 심각하게 손상되고, 심지어 자산에 대한 통제권을 완전히 잃을 수도 있습니다. 이 글에서는 일반적인 취약점 중 하나인 신뢰할 수 없는 난수 생성기 사용의 특성, 그 결과, 그리고 PHP 코드를 이용한 개인 키 생성 예시를 통해 안전하게 제거하는 방법을 살펴보겠습니다.

취약성의 본질

일반적인 암호화 라이브러리 구현에서 개인 키 생성은 256비트 난수를 선택하는 것으로 요약되며, 이 난수를 사용하여 키 쌍을 생성합니다. 아래 코드 스니펫에서 해당 메서드는   32바이트의 난수를 반환하는  함수를 가진   generate 객체를 인수로 받습니다   .$randombytes(32)

php:

public function generate(Random $random): PrivateKeyInterface
{
return $this->fromBuffer(
$random->bytes(32)
);
}

여기서 핵심은     생성기 구현의   품질$random 입니다 . 생성기가 결정론적이고 예측 가능하거나 엔트로피 소스가 불충분한 경우, 생성된 키는 암호 분석에 취약해집니다.

신뢰할 수 없는 발전기를 사용할 경우 발생하는 결과:

  • 키 반복:   엔트로피 부족으로 인해 동일한 개인 키가 생성될 수 있습니다.
  • 예측 가능성:   생성기에 대한 공격은 키의 미래 값을 사전에 또는 생성 중에 파악할 수 있게 합니다.
  • 완전한 침해:   공격자가 개인 키를 복구하고 제어 자금을 탈취함.

이러한 오류는 실제로 암호화폐 지갑에 대한 대규모 해킹으로 이어지는 경우가 반복적으로 발생했습니다.

취약성의 원인

  • 암호화 목적이 아닌 용도로 설계된 취약하거나 부적절한 난수 생성기(PRNG)를 사용하는 것.
  • 무작위성의 원인에 대한 명확하고 엄격한 검증이 부족합니다.
  • 제3자 또는 직접 작성한 생성기 구현에 의존하되, 해당 생성기의 암호학적 강도를 분석하지 않는 것.
  • 랜덤 바이트를 제공하는 API를 잘못 사용하거나 구성한 경우.

PHP는 종종   mt_rand(),   와 같은 함수 rand()나 암호화 난수성 요구 사항을 충족하지 않는 최적화되지 않은 래퍼를 사용합니다.

키 생성에 대한 안전한 접근 방식

키 생성을 위한 난수 생성기의 요구 사항

  • 예측 및 재전송 공격에 대한 암호학적 저항력.
  • 높은 엔트로피와 예측 불가능성.
  • 가능한 한 암호학적으로 안전한 시스템 API를 사용하십시오.

PHP에서 키를 생성하는 권장 방법

random_bytes()PHP에는 신뢰할 수 있는 시스템 암호화 소스(예: Unix 시스템의 경우 또는 Windows의 경우 CryptoAPI)를 호출하는   내장 함수가 있습니다   /dev/urandom . 보안 코드를 사용하는 것이 좋습니다.

php:

public function generateSecure(): PrivateKeyInterface
{
try {
$randomBytes = random_bytes(32);
} catch (\Exception $e) {
throw new \RuntimeException("Не удалось получить криптографически безопасные случайные байты");
}

$buffer = Buffer::hex(bin2hex($randomBytes));
return $this->fromBuffer($buffer);
}

추가 조치

  • 키 생성 후 키의 유효성을 확인합니다(예: 허용 가능한 범위에 속하는지 확인).
  • 실제 운영 환경에서 난수 생성 소스를 위조하는 것을 제한합니다.
  • 주요 발전 이상 현상 기록 및 모니터링.
  • 암호화 라이브러리의 정기적인 업데이트.

소스 코드의 취약점 수정

generate품질 보증이 없는 외부 구현에 의존하는   기존 방식은   Random 더 안전한 버전으로 대체할 수 있습니다.

php:

public function generate(Random $random = null): PrivateKeyInterface
{
if ($random !== null) {
// Используем переданный генератор, если он надежный
$bytes = $random->bytes(32);
} else {
// Иначе берем безопасный системный криптографический источник
try {
$bytes = random_bytes(32);
} catch (\Exception $e) {
throw new \RuntimeException("Безопасный источник случайных чисел недоступен");
}
}
return $this->fromBuffer(Buffer::hex(bin2hex($bytes)));
}

이렇게 하면 안전한 기본 경로가 설정되면서도 사용자 지정이 가능합니다.

결론

암호화 키에 취약한 난수 생성기를 사용하는 것과 관련된 취약점은 암호 시스템 보안에서 가장 위험한 요소 중 하나입니다. 이는 자산의 무결성과 기밀성을 직접적으로 손상시킵니다.

이를 해결하려면 다음 단계를 따르세요.

  • 시스템 엔트로피를 사용하는 암호학적으로 강력한 생성기로 전환하세요(PHP 기준   random_bytes()).
  • 주요 유효성 검사를 추가하세요.
  • 검증되지 않은 난수 생성 소스를 사용할 가능성을 제거하십시오.

암호화 키 생성에 대한 포괄적인 접근 방식만이 향후 암호화 키에 대한 공격으로부터 시스템의 보안과 저항력을 보장합니다.


이 글의 결론으로, 신뢰할 수 없거나 암호학적으로 취약한 난수 생성기(PRNG) 사용과 관련된 비트코인 ​​개인 키 생성의 심각한 취약점은 암호화폐 생태계에서 가장 심각한 보안 위협 중 하나임을 강조해야 합니다. 이러한 취약점은 공격자가 취약한 엔트로피 소스를 공격하여 개인 키를 복구할 수 있도록 하는데, 이를 과학적으로는 취약한 난수 공격(Weak Random Number Attack) 또는 PRNG 암호 분석(Cryptanalysis of PRNG)이라고 합니다. 암호학적 강도가 보장되지 않은 난수 데이터 소스의 키 생성은 예측 가능하거나 반복되는 키를 생성하게 되어 사용자의 디지털 자산의 기밀성과 무결성을 위협합니다.

이러한 취약점의 결과는 개인 키가 자금을 관리하는 유일한 수단인 비트코인에 특히 치명적입니다. 공격자는 이 취약점을 악용하여 키를 탈취하고, 손쉽게 자신의 주소로 자금을 전송하여 사용자의 지갑 제어권을 빼앗을 수 있습니다. 이러한 유형의 취약점은 키 검증 및 타원 곡선 secp256k1 매개변수 검증이 미흡한 경우와 결합되어 대규모 공격과 높은 효율성을 초래하며, 이는 수많은 암호화폐 해킹 및 도난 사건에서 입증되었습니다.

이러한 공격을 방지하려면 PHP의 시스템 함수나 검증된 표준 암호화 라이브러리와 같이 암호학적으로 강력한 난수 생성기만 사용하고   random_bytes() , 생성된 키에 대한 엄격한 유효성 검사를 추가해야 합니다. 개인 키 생성 및 검증에 대한 포괄적인 접근 방식만이 비트코인 ​​암호 시스템 및 기타 암호화폐 프로토콜의 신뢰성과 보안을 보장합니다.

따라서 개인 키 생성 과정의 취약점을 이해하고 제거하는 것은 잠재적인 공격을 예방하고 블록체인 기술 및 암호화폐 전반에 대한 신뢰를 유지하는 데 매우 중요한 과제입니다. 시스템 보안은 핵심 암호화 비밀인 개인 키를 생성하는 시점에 신뢰할 수 있는 엔트로피 소스가 확보되는 것에서 시작됩니다. 그래야만 디지털 자산을 장기적으로 보호하고 암호화폐 생태계가 외부 공격에 대한 복원력을 갖출 수 있습니다.

By