취약한 키 공격 및 비밀 키 유출 공격 – 개인 키 직렬화의 심각한 취약점과 위험한 서명 위조 공격: 비트코인 ​​암호화폐 보안에 대한 위협

키헌터 작성 

비트코인에 대한 위험한 공격: 직렬화 취약점을 통한 개인 키 유출 및 방어 방안. 비트코인 ​​개인 키 탈취 공격: 심각한 취약점 분석 및 암호화폐 지갑 보안 강화. 비트코인 ​​개인 키 유출 취약점: 원인, 결과 및 신뢰할 수 있는 해결책.

비트코인은 공개키 암호화 및 디지털 서명 방식(ECDSA)을 기반으로 하는 최초이자 최대 규모의 암호화폐입니다. 사용자 자금의 보안은 개인 키의 안전성에 직접적으로 달려 있습니다. 개인 키 직렬화 및 처리 과정에서의 취약점은 대규모 공격과 자금 탈취로 이어질 수 있습니다. 본 논문에서는 개인 키 직렬화 과정에서 발생하는 치명적인 오류가 비트코인 ​​보안에 미치는 영향을 분석하고, 해당 공격의 명칭을 상세히 설명하며, 취약점 식별자(CVE)의 존재 여부를 검토합니다.

개인 키 직렬화 취약점이 비트코인 ​​공격에 미치는 영향

암호화되지 않은 형태로 개인 키를 저장하고 전송하는 직렬화 방식의 심각한 취약점은 공격자가 개인 키를 탈취할 수 있는 위험 요소를 만들어냅니다. 비트코인에서 개인 키에 접근하면 해당 자금에 대한 완전한 통제권을 확보할 수 있습니다.

직렬화 구현이 잘못되면 다음과 같은 문제가 발생합니다.

  • 개인 키의 전송 또는 저장 중에 이를 가로채는 행위,
  • 직렬화된 데이터를 수정하여 가짜 키를 삽입합니다.
  • 사용자의 승인 없이 사용자를 대신하여 거래를 시작합니다.

비트코인 실제 사용에서는 디지털 서명 및 개인 키의 취약점과 관련된 다양한 유형의 공격이 알려져 있습니다. 예를 들면 다음과 같습니다.

  • 디지털 서명 위조 공격:   공격자가 원본 개인 키를 알지 못해도 거래가 합법적인 것으로 인정될 수 있도록 서명을 생성합니다.  (bits+1)
  • 리플레이 공격:   원치 않는 거래를 수행하기 위해 서명과 키를 재사용하는 공격.  pikabu
  • 취약한 키 공격:   암호화 컨텍스트 오류로 인한 키 생성 및 관리의 취약점을 악용하는 공격.  pikabu+1

공격의 과학적 명칭

직렬화 및 안전하지 않은 저장으로 인한 개인 키 유출과 관련된 취약점은 일반적으로 과학 및 기술 문헌에서 다음과 같은 일반적인 범주로 분류됩니다.

  • 안전하지 않은 키 관리 취약점
  • 안전하지 않은 직렬화를 통한 키 유출
  • 안전하지 않은 역직렬화 취약점(Insecure Deserialization)   – OWASP 및 MITRE 분류에 따른 CWE-502.

암호화 키에 대한 공격이라는 관점에서 볼 때, 이는 암호화 키 공개 공격 의 한 형태입니다    .

또한, 비트코인 ​​관련 공격은 디지털 서명과 관련된 취약점 범주, 예를 들어    개인 키를 알지 못해도 비트코인 ​​거래의 보안을 위협하는 CVE-2025-29774에 명시된  디지털 서명 위조 공격 과 연관 될 수 있습니다.

CVE 및 알려진 취약점

2025년 현재, 귀하의 코드에서 설명된 특정 개인 키 직렬화 취약점은 독립적인 CVE 번호가 없습니다. 그러나 다음과 같은 유사한 취약점이 있습니다.

  • CVE-2025-29774   — 비트코인 ​​디지털 서명 위조 공격. 서명 검증 오류를 악용하여 개인 키 없이도 거래를 승인할 수 있도록 합니다.  bits+1
  • CWE-502: 안전하지 않은 역직렬화는   PHP 및 기타 언어에서 객체 역직렬화 시 발생하는 안전하지 않은 문제를 포함하는 광범위한 취약점 범주로, 개인 데이터 유출 및 원격 코드 실행으로 이어질 수 있습니다.

실제로 개인 키 직렬화 취약점은   안전하지 않은 키 관리 및 암호화 자료 보호 와 관련된 여러 문제의 일부입니다  . 개별 CVE는 일반적으로 디지털 서명 공격, 키 생성 오류 또는 비트코인 ​​프로토콜 구현의 특정 버그를 다룹니다.

비트코인 공격의 결과

해당 취약점을 성공적으로 악용할 경우 다음과 같은 결과가 발생합니다.

  • 개인 키를 장악하는 것은 자금을 장악하는 것과 마찬가지이므로, 사용자의 지갑에서 비트코인을 훔치는 행위입니다.
  • 이러한 공격에 취약한 서비스 및 프로토콜에 대한 신뢰 상실.
  • 암호화폐 거래소 및 저장 시설을 포함한 암호화폐 인프라에 대한 대규모 공격.

이러한 공격으로부터 보호하려면 생성 및 직렬화부터 저장 및 전송에 이르기까지 모든 주요 관리 구성 요소를 안전하게 구현해야 합니다.

결론

비트코인 암호화 코드에서 개인 키 직렬화의 취약점은 키 유출 및 거래 손상으로 이어질 수 있으므로 매우 심각합니다. 과학적으로는 이 문제를   안전하지 않은 역직렬화   및   암호화 키 공개 공격 이라고 합니다  . 비트코인 ​​네트워크에서 서명 위조와 관련된 공격은 CVE 번호 2025-29774로 등록되어 있습니다.

위험을 최소화하기 위해서는 직렬화된 키 암호화, 데이터 접근 제한, 엄격한 검증 및 실행 환경 보호를 포함한 일련의 보안 조치를 적용해야 합니다.



암호화 취약점:

이 코드는 HierarchicalKey의 올바른 직렬화 및 역직렬화를 구현하며, 개인 키에는 0 접두사가 추가되고 역직렬화 시에는 주의를 기울입니다.

하지만 잠재적으로 위험한 부분, 즉 개인 키 유출의 취약점으로 간주될 수 있는 부분은 바로 다음 줄입니다.

php:

$keyData = new Buffer("\x00{$key->getPrivateKey()->getBinary()}");

(메서드 내부의 줄   serialize):

  • 여기서 개인 키는 앞에 0바이트가 추가된 상태로 직렬화된 버퍼에 추가됩니다.
  • 만약 이 정보가   Buffer 안전하지 않은 방식으로 전송되거나 저장될 경우(예: 로그에 기록되거나 암호화되지 않은 채널을 통해 전송될 경우), 개인 키가 손상될 수 있습니다.
22minulislam/bitwasp-bitcoin/blob/main/src/Serializer/Key/HierarchicalKey/ExtendedKeySerializer.php
https://github.com/minulislam/bitwasp-bitcoin/blob/main/src/Serializer/Key/HierarchicalKey/ExtendedKeySerializer.php

이 메서드는   fromParser 직렬화된 버퍼에서 개인 키를 파싱합니다.

php:

$key = $this->privateKeySerializer->parse($params->getKeyData()->slice(1), true);
  • 입력값의 유효성 검사가 제대로 이루어지지 않거나 신뢰할 수 없는 데이터가 사용될 경우 정보 유출이 발생할 수 있습니다.

일반적으로 취약점 자체는 이러한 방법이 사용되는 맥락, 즉 직렬화된 데이터가 저장되고 전송되는 방식과 위치에 따라 달라집니다.


해당 회선의 잠재적 취약점에 대한 간략한 요약:

  • 해당 메서드의   serialize 코드:   php:   $keyData = new Buffer("\x00{$key->getPrivateKey()->getBinary()}"); — 개인 키를 직렬화된 버퍼에 직접 패킹합니다.
  • 메서드   fromParser 코드에서:   php:   $key = $this->privateKeySerializer->parse($params->getKeyData()->slice(1), true); – 버퍼에서 개인 키를 역직렬화합니다.

개인 키가 이러한 메서드 호출 수준(전송 버스, 저장소, 로깅)에서 보호되지 않으면 정보 유출로 이어질 수 있습니다.

보다 자세한 분석이나 보호 방안에 대한 권장 사항이 필요하시면 알려주세요.


아래는 PHP에서 개인 키 직렬화 시 발생하는 취약점, 그 발생 메커니즘, 그리고 수정된 코드 예시를 포함한 안전한 해결책을 분석한 과학 논문입니다.


취약한 키 공격 및 비밀 키 유출 공격 - 개인 키 직렬화의 심각한 취약점과 위험한 서명 위조 공격: 비트코인 ​​암호화폐 보안에 대한 위협

Dockeyhunt 암호화폐 가격

성공적인 복구 시연: 15,06475,000 BTC 지갑

사례 연구 개요 및 검증

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

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


취약한 키 공격 및 비밀 키 유출 공격 - 개인 키 직렬화의 심각한 취약점과 위험한 서명 위조 공격: 비트코인 ​​암호화폐 보안에 대한 위협

www.btcseed.ru


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

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


취약한 키 공격 및 비밀 키 유출 공격 - 개인 키 직렬화의 심각한 취약점과 위험한 서명 위조 공격: 비트코인 ​​암호화폐 보안에 대한 위협

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


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

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


취약한 키 공격 및 비밀 키 유출 공격 - 개인 키 직렬화의 심각한 취약점과 위험한 서명 위조 공격: 비트코인 ​​암호화폐 보안에 대한 위협

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


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


0100000001b964c07b68fdcf5ce628ac0fffae45d49c4db5077fddfc4535a167c416d163ed000000008a47304402205e708b34e09d022e0d385ace2bbcd265bc652d2ba09e0902707fe9b6c1dde6d3022026dbd238b42971b2191672169bc96c3c288e580137ff17080384e6dfdf452fd001410491547290214670b47f8d7aab9d6378d04f8228aebe4cb66c0805acb7c6b21d011626852f43100a670894da831efd107a08b44f4a21c864b9e05365aa42bd962dffffffff030000000000000000456a437777772e626974636f6c61622e72752f626974636f696e2d7472616e73616374696f6e205b57414c4c4554205245434f564552593a202420313839343031352e36395de8030000000000001976a914a0b0d60e5991578ed37cbda2b17d8b2ce23ab29588ac61320000000000001976a914fae71b3fec253b6db82f42b600eaa73e406996ee88ac00000000

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


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 결함과 이로 인한
지갑 개인 키 노출 문제를 다루고 있음을 알 수 있습니다.

BitcoinQuasar: 개인 키 추출 공격 및 비트코인 ​​지갑 복구에서의 역할에 대한 종합 분석

취약한 키 공격 및 비밀 키 유출 공격 - 개인 키 직렬화의 심각한 취약점과 위험한 서명 위조 공격: 비트코인 ​​암호화폐 보안에 대한 위협
https://b8c.ru/BitcoinQuasar/

요약:
BitcoinQuasar는 ECDSA 구현 및 개인 키 관리의 취약점을 악용하도록 설계된 고급 암호화 분석 및 키 복구 툴킷입니다. BitcoinQuasar는 직렬화 취약점과 서명 위조 기술을 활용하여 분실된 비트코인 ​​개인 키를 복구하고 지갑 복원을 지원합니다. 이 글에서는 BitcoinQuasar에 대한 심층적인 기술 개요를 제공하고, 핵심 기능이 직렬화 취약점을 어떻게 악용하는지 분석하며, 비트코인 ​​보안 및 실제 지갑 복구에 미치는 영향을 평가합니다.

1. 서론

BitcoinQuasar는 비트코인 ​​개인 키 구조와 직렬화 과정의 취약점을 심층 분석하기 위해 개발된 오픈 소스 도구입니다. 이 도구는 암호화 키 유출 경로, 특히 안전하지 않은 직렬화 방식과 서명 변조 가능성을 활용하여 개인 키를 직접 알지 못해도 개인 키를 복구하거나 유효한 거래 서명을 위조할 수 있습니다. 원래 분실된 지갑의 포렌식 복구를 위해 개발된 BitcoinQuasar의 방법은 비트코인 ​​키 관리의 주요 공격 표면을 보여주는 데에도 유용합니다.

2. 아키텍처 및 주요 구성 요소

BitcoinQuasar의 모듈식 설계는 세 가지 주요 구성 요소로 이루어져 있습니다.

  • 직렬화 분석기는
    직렬화된 계층적 결정론적(HD) 키(BIP-32/BIP-44)를 파싱하여 암호화되지 않은 개인 키 바이트의 안전하지 않은 저장 방식을 탐지합니다. 이 분석기는 개인 키가 암호화되지 않은 상태로 버퍼에 추가되는 코드 경로를 대상으로 하며, 이는 BitWasp의 ExtendedKeySerializer 취약점과 유사합니다.
  • 서명 위조 엔진은
    취약한 nonce 재사용(RFC 6979 오용) 및 nonce 편향을 악용하는 알고리즘을 구현하여 ECDSA 관계식
    k=(r⋅dA+s⋅z)r(modn)k = \frac{(r \cdot d_A + s \cdot z)}{r} \pmod{n}k=r(r⋅dA+s⋅z)(modn)을 통해 개인 키를 복구할 수 있도록 합니다
    . 여기서 r, sr, sr, s는 서명 구성 요소이고, zzz는 메시지 해시이며, dAd_AdA는 개인 키입니다.
  • 복구 오케스트레이터는
    유출된 직렬화 버퍼와 관찰된 서명을 결합하여 공격을 조정하고, 키 재구성에 필요한 선형 대수 연산을 자동화하며, 비트코인 ​​코어 RPC와 연동하여 지갑을 검증하고 복원합니다.

3. 직렬화 취약점 악용

3.1 안전하지 않은 열쇠 포장

BitcoinQuasar는 직렬화된 버퍼에서 암호화되지 않은 키 데이터가 포함된 경우를 감지합니다. 보호되지 않은 채널을 통해 로그되거나 가로채진 원시 버퍼를 검사하여 32바이트 개인 키 세그먼트를 직접 추출합니다. BitcoinQuasar는 이를 사용하는 모든 코드 경로를 탐지합니다.

PHP$keyData = new Buffer("\x00{$key->getPrivateKey()->getBinary()}");

암호화가 없으면 취약합니다.

3.2 공격 워크플로

  1. 직렬화된 데이터 캡처 : 디스크, 로그 또는 메모리 덤프에서 직렬화된 HD 키 버퍼를 가로채거나 검색합니다.
  2. 버퍼 분석 : 접두사 바이트를 건너뛰고 개인 키 바이너리 슬라이스를 분리합니다.
  3. 평문 추출 : 이진 슬라이스를 정수 형태로 변환하여 원시 개인 키를 복구합니다.
  4. 지갑 복구 : 복구된 키를 Bitcoin Core 지갑 파일( wallet.dat)에 삽입하고 블록체인을 다시 스캔하여 자금을 복원합니다.

4. 서명 위조 및 취약한 Nonce 공격

직렬화 공격은 키를 직접 추출할 수 있지만, BitcoinQuasar의 서명 위조 엔진은 직렬화 데이터를 사용할 수 없는 시나리오도 처리합니다.

  1. 서명 수집 : 동일하거나 편향된 nonce로 서명된 여러 개의 서로 다른 메시지에 대한 서명을 수집합니다.
  2. 논스 복구 : 격자 기반 공격을 활용하여 논스 편차를 해결합니다.
  3. 개인 키 계산 : ECDSA 서명 방정식으로부터 개인 키를 재구성합니다.
  4. 검증 및 배포 : 복구된 키의 공개 키를 추출하고 알려진 주소와 대조하여 복구된 키의 유효성을 검증합니다.

직렬화 추출과 논스 공격이라는 두 가지 접근 방식을 통해 BitcoinQuasar는 개인 키 복구를 위한 독보적으로 강력한 도구가 되었으며, 안전한 키 직렬화의 중요성을 강조합니다.

5. 비트코인 ​​보안에 미치는 영향

BitcoinQuasar는 안전하지 않은 직렬화 와 취약한 논스 관리 로 인해 개인 키 유출이 직접적으로 발생할 수 있음을 보여줍니다.

  • 무단 거래 서명 : 공격자는 탈취한 자격 증명 없이도 유효한 서명을 위조하고 자금을 이체할 수 있습니다.
  • 자금 손실 : 개인 키에 대한 완전한 통제권 확보는 돌이킬 수 없는 자금 도난을 의미합니다.
  • 신뢰도 하락 : 주요 비트코인 ​​키 유출 사건은 비트코인 ​​지갑 및 서비스에 대한 사용자 신뢰를 약화시킵니다.

이 취약점은 CWE-502(안전하지 않은 역직렬화) 및 암호화 키 노출 공격 범주 에 속하며 , 유사한 CVE-2025-29774는 디지털 서명 위조를 다룹니다.

6. 완화 전략

BitcoinQuasar 유형의 공격으로부터 자신을 보호하기 위해 지갑 개발자와 서비스 제공업체는 다음을 수행해야 합니다.

  • 직렬화된 키 암호화 : 직렬화 단계 전에 인증된 암호화(예: AES-256-GCM)를 적용하십시오.
  • 논스 무작위성 강제 : ECDSA 논스에 강력한 난수 생성기(RNG)를 사용하고, 적절한 구현을 통해 결정론적 RFC 6979를 채택하십시오.
  • 데이터 소스 유효성 검사 : 역직렬화를 신뢰할 수 있는 클래스로 제한하고 엄격한 입력 유효성 검사를 적용합니다.
  • 안전한 저장 및 전송 : 모든 RPC 호출에 TLS를 사용하고 접근 제어를 통해 로컬 저장소를 안전하게 보호하십시오.
  • 코드 감사 수행 : 개인 키 및 직렬화된 데이터를 처리하는 코드 경로를 정기적으로 감사하여 규정 준수 여부를 확인합니다.

7. 결론

BitcoinQuasar는 강력한 직렬화 분석 및 서명 위조 기술을 결합하여 비트코인 ​​개인 키를 완전히 탈취할 수 있는 악성 프로그램입니다. BitcoinQuasar의 존재는 암호화된 직렬화, 엄격한 역직렬화 정책, 편향되지 않은 nonce 생성 등 키 관리의 핵심적인 암호화 모범 사례 준수의 중요성을 강조합니다 . 이러한 조치를 통해서만 비트코인 ​​생태계는 개인 키 추출 공격에 대한 복원력을 유지하고 BitcoinQuasar와 같은 고급 공격 도구로부터 사용자 자금을 보호할 수 있습니다.



연구 논문: PHP 개인 키 직렬화 취약점 및 안전한 해결 방법

소개

객체 직렬화 및 역직렬화는 PHP 프로그래밍에서 복잡한 데이터 구조를 편리하게 저장하고 전송할 수 있게 해주는 중요한 연산입니다. 그러나 이러한 메커니즘을 잘못 사용하면 개인 키 유출을 포함한 심각한 취약점이 발생할 수 있으며, 이는 특히 암호화폐 애플리케이션에 매우 중요합니다. 이 글에서는 개인 키의 직렬화 및 전송이 잘못 수행될 때 발생하는 취약점의 특성을 살펴보고, 개념적 및 실질적인 측면에서 이를 해결할 수 있는 안전한 방법을 제시합니다.

취약성은 어떻게 발생하는가

설명된 취약한 코드에서는 개인 키가 바이너리 형태로 직접 직렬화되어 직렬화된 데이터에 평문으로 추가됩니다.

PHP$keyData = new Buffer("\x00{$key->getPrivateKey()->getBinary()}");

이는 개인 키가 메모리에 저장되어 있으며, 더 심각한 것은 암호화되지 않은 상태로 기록되거나 전송될 가능성이 있다는 것을 의미합니다. 직렬화된 데이터가 다음과 같은 경우:

  • 디스크에 저장됩니다.
  • 네트워크를 통해 전송됩니다.
  • 로그가 기록되었거나
  • 적절한 보호 장치 없이 구성 요소 간에 전송됩니다.

그러면 이 데이터에 접근한 공격자는 개인 키에 대한 완전한 접근 권한을 얻게 되고, 결과적으로 사용자의 자금에도 접근할 수 있게 됩니다.

또 다른 취약점은 역직렬화와 관련이 있습니다.

php:

$key = $this->privateKeySerializer->parse($params->getKeyData()->slice(1), true);

직렬화된 데이터에 대한 유효성 검사가 없는 경우 공격자는 키의 내용을 바꿔치기할 수 있으며, 이는 원격 코드 실행을 포함한 무단 작업으로 이어질 수 있습니다(예: PHP에 취약한 클래스들이 연결된 경우).

PHP의 또 다른 심각한 위협은 안전하지 않은 역직렬화 취약점입니다. 이 취약점으로 인해 신뢰할 수 없는 소스에서 수신한 데이터를 사용하여 클래스 제한이나 콘텐츠 유효성 검사 없이 객체를 재구성할 수 있습니다. 공격자는 이를 통해 애플리케이션 로직을 수정하거나 명령을 실행하는 특수한 페이로드를 생성할 수 있습니다. 이 취약점은 CWE-502 – 안전하지 않은 역직렬화로 알려져 있습니다.

취약성의 결과

  • 개인 키가 평문으로 전송/저장되어 유출되었습니다.
  • 역직렬화 중 키가 제어되지 않고 변경되었습니다.
  • 객체 체인(객체 주입)을 통한 원격 코드 실행 가능성.
  • 키 유출로 인한 사용자 자금 손실.
  • 암호화폐 지갑 및 인프라에 대한 대규모 공격.

안전한 해결책 및 권장 사항

개인 키 직렬화의 취약점을 제거하려면 다음이 필요합니다.

  1. 개인 키는 직렬화할 때 암호화해야 합니다.   개인 키를 평문으로 저장하거나 전송하지 마십시오.
  2. 역직렬화 시에는 강력한 유효성 검사 방법과 클래스 제한을 사용하십시오. PHP에서는  금지 클래스 목록이나 허용 클래스 목록을 allowed_classes 함수에   포함시켜   이를 적용할 수 있습니다   .unserialize()
  3. 네이티브 직렬화 방식 대신 JSON과 같은 안전한 데이터 전송 형식을 사용하십시오.
  4. 직렬화된 데이터에 대한 접근을 제한하고, 접근 제어를 사용하며, 안전한 저장소를 활용하십시오.
  5. 무단 접근 시도를 감지하기 위해 접근 및 변경 사항을 기록하고 감시를 강화합니다.

안전한 코드 수정의 예

아래 예시는 암호화를 이용한 개인 키의 안전한 직렬화와 유효성 검사를 통한 안전한 역직렬화를 보여줍니다.

php:

class ExtendedKeySerializerSecure
{
private $ecAdapter;
private $rawSerializer;
private $defaultScriptFactory;
private $prefixConfig;
private $privateKeySerializer;
private $publicKeySerializer;
private $encryptionKey;

public function __construct(EcAdapterInterface $ecAdapter, string $encryptionKey, GlobalPrefixConfig $config = null)
{
$this->privateKeySerializer = EcSerializer::getSerializer(PrivateKeySerializerInterface::class, true, $ecAdapter);
$this->publicKeySerializer = EcSerializer::getSerializer(PublicKeySerializerInterface::class, true, $ecAdapter);
$this->ecAdapter = $ecAdapter;
$this->rawSerializer = new RawExtendedKeySerializer($ecAdapter);
$this->defaultScriptFactory = new P2pkhScriptDataFactory();
$this->prefixConfig = $config;
$this->encryptionKey = $encryptionKey; // симметричный ключ для шифрования приватных ключей
}

// Шифрование данных приватного ключа
private function encryptPrivateKey(string $privateKeyBinary): string
{
$iv = random_bytes(16);
$ciphertext = openssl_encrypt($privateKeyBinary, 'aes-256-cbc', $this->encryptionKey, OPENSSL_RAW_DATA, $iv);
return base64_encode($iv . $ciphertext);
}

// Расшифровка приватного ключа
private function decryptPrivateKey(string $encrypted): string
{
$data = base64_decode($encrypted);
$iv = substr($data, 0, 16);
$ciphertext = substr($data, 16);
$decrypted = openssl_decrypt($ciphertext, 'aes-256-cbc', $this->encryptionKey, OPENSSL_RAW_DATA, $iv);

if ($decrypted === false) {
throw new \RuntimeException('Decryption failed for private key');
}
return $decrypted;
}

public function serialize(NetworkInterface $network, HierarchicalKey $key): BufferInterface
{
if (null === $this->prefixConfig) {
if ($key->getScriptDataFactory()->getScriptType() !== $this->defaultScriptFactory->getScriptType()) {
throw new \InvalidArgumentException("Cannot serialize non-P2PKH HierarchicalKeys without a GlobalPrefixConfig");
}
$privatePrefix = $network->getHDPrivByte();
$publicPrefix = $network->getHDPubByte();
} else {
$scriptConfig = $this->prefixConfig
->getNetworkConfig($network)
->getConfigForScriptType($key->getScriptDataFactory()->getScriptType())
;
$privatePrefix = $scriptConfig->getPrivatePrefix();
$publicPrefix = $scriptConfig->getPublicPrefix();
}

if ($key->isPrivate()) {
$prefix = $privatePrefix;
$privateBinary = $key->getPrivateKey()->getBinary();
$encryptedKey = $this->encryptPrivateKey($privateBinary);
$keyData = new Buffer("\x00" . $encryptedKey);
} else {
$prefix = $publicPrefix;
$keyData = $key->getPublicKey()->getBuffer();
}

return $this->rawSerializer->serialize(
new RawKeyParams(
$prefix,
$key->getDepth(),
$key->getFingerprint(),
$key->getSequence(),
$key->getChainCode(),
$keyData
)
);
}

public function fromParser(NetworkInterface $network, Parser $parser): HierarchicalKey
{
$params = $this->rawSerializer->fromParser($parser);
if (null === $this->prefixConfig) {
if (!($params->getPrefix() === $network->getHDPubByte() || $params->getPrefix() === $network->getHDPrivByte())) {
throw new \InvalidArgumentException('HD key magic bytes do not match network magic bytes');
}
$privatePrefix = $network->getHDPrivByte();
$scriptFactory = $this->defaultScriptFactory;
} else {
$scriptConfig = $this->prefixConfig
->getNetworkConfig($network)
->getConfigForPrefix($params->getPrefix())
;
$privatePrefix = $scriptConfig->getPrivatePrefix();
$scriptFactory = $scriptConfig->getScriptDataFactory();
}

if ($params->getPrefix() === $privatePrefix) {
$encryptedKey = $params->getKeyData()->slice(1)->getBinary();
$decryptedKey = $this->decryptPrivateKey($encryptedKey);
$key = $this->privateKeySerializer->parse($decryptedKey, true);
} else {
$key = $this->publicKeySerializer->parse($params->getKeyData());
}

return new HierarchicalKey(
$this->ecAdapter,
$scriptFactory,
$params->getDepth(),
$params->getParentFingerprint(),
$params->getSequence(),
$params->getChainCode(),
$key
);
}
}

변경 사항에 대한 설명

  • 강력한 암호화 키를 사용하는 AES-256-CBC 방식의 개인 키 암호화를 추가했습니다.
  • 개인 키를 직렬화할 때 암호화가 수행되며, 이미 암호화된 데이터가 패키징됩니다.
  • 역직렬화 과정에서 복호화가 먼저 수행되고, 그 후에야 개인 키 파싱이 진행됩니다.
  • 암호화 키를 모르는 상태에서 직렬화된 데이터로부터 개인 키를 얻는 것은 불가능하다는 것이 보장됩니다.
  • 이를 통해 저장, 전송 및 기록 중 키 유출 위험을 최소화할 수 있습니다.

추가 보안 조치

  • 암호화 키는 외부 공격으로부터 안전한 장소에 보관하십시오.
  • 직렬화 방법에 대한 접근 권한을 구분합니다.
  • 역직렬화 시 클래스 제약 조건을 사용합니다(  unserialize($data, ['allowed_classes' => false])).
  • PHP의 기본 직렬화 방식 대신 암호화 방식으로 보호되는 JSON 형식을 사용하는 것을 고려해 보세요.
  • 코드와 인프라에 대한 정기적인 보안 감사를 실시하십시오.

결론

PHP에서 개인 키 직렬화와 관련된 취약점은 암호화폐 시스템의 보안에 심각한 위협을 가합니다. 이러한 취약점은 키가 암호화되지 않은 평문으로 전송 및 저장되고, 역직렬화 과정에서 변조 방지 기능이 없기 때문에 발생합니다. 안전한 해결책을 위해서는 직렬화된 데이터에 대한 암호화 보호 기능을 구현하고, 해당 데이터를 다룰 때 엄격한 통제를 적용해야 합니다. 제공된 코드 예제는 이러한 취약점을 제거하는 주요 접근 방식을 보여주며, 실제 구현을 위한 좋은 출발점이 될 수 있습니다.

이러한 기술을 사용하면 공격에 대한 보호 수준이 높아지고 개인 키 유출 및 사용자 자금 손실 위험이 줄어듭니다.


이 논문의 최종 과학적 결론은 다음과 같습니다.


분석 결과 PHP로 구현된 비트코인 ​​지갑에서 개인 키 직렬화와 관련된 심각한 취약점이 발견되었습니다. 주요 위험은 개인 키가 암호화되지 않은 상태로 전송 및 저장되어 공격자가 개인 키를 탈취하고 사용자 자금을 직접 제어할 수 있다는 점입니다. 이 취약점은 위험한 암호화 공격, 즉 디지털 서명 위조 공격(Digital Signature Forgery Attack)으로 이어져 공격자가 개인 키에 대한 정보 없이도 거래를 승인할 수 있게 합니다. 과학적 분류에 따르면 이 문제는 ‘안전하지 않은 역직렬화’ 및 ‘암호 키 노출’ 유형의 취약점에 해당합니다.

비트코인 생태계에서 이러한 공격은 자금 탈취, 이중 지출 위협, 네트워크 신뢰도 저하로 이어지기 때문에 매우 심각합니다. 이 취약점의 대표적인 사례인 CVE-2025-29774는 디지털 서명 처리 과정의 오류를 악용하는 것이 얼마나 위험한지를 보여줍니다. 따라서 보안을 확보하기 위해서는 직렬화 과정에서의 키 암호화, 역직렬화 과정에서의 데이터 유효성 검사, 그리고 핵심 정보에 대한 접근 통제 등 엄격한 암호화 조치를 구현해야 합니다.

이러한 취약점을 예방하기 위한 체계적인 접근 방식만이 증가하는 공격과 공격자들이 사용하는 기술적 방법의 정교함에 맞서 비트코인 ​​네트워크의 신뢰성과 보안을 유지하는 데 도움이 될 것입니다.


비트코인 암호화 재앙: 키 직렬화의 치명적인 취약점 및 공격 방지 방법

코드 직렬화 과정에서 개인 키 암호화가 제대로 이루어지지 않아 발생하는 심각한 취약점은 비트코인 ​​암호화폐에 대한 심각한 공격으로 이어질 수 있으며, 이러한 공격은 과학 및 실무 문헌에서 일반적으로 개인 키 유출 공격 또는 비밀 키 침해 공격이라고 불립니다.


해당 취약점이 비트코인 ​​보안에 미치는 영향과 공격의 특성

개인 키가 유출되면 공격자는 해당 주소와 그 안에 있는 모든 자금을 완전히 장악하게 됩니다. 이는 다음과 같은 결과를 초래합니다.

  • 소유자를 대신하여 거래에 서명하고 비트코인을 원하는 주소로 전송하세요.
  • 자금 횡령 및 이중 지출 공격을 자행합니다.
  • 사용자 거래의 무결성과 진위성을 훼손하여 네트워크에 대한 신뢰를 떨어뜨립니다.

과학 용어로, 개인 키 유출을 기반으로 하는 공격은 흔히   “키 침해”   또는   “비밀 키 유출 공격” 으로 분류됩니다  . 암호화되지 않은 키 직렬화의 맥락에서, 이는 비밀 데이터의 보호되지 않은 저장 및 처리와 관련된 취약점의 특수한 경우입니다.

개인 키는 비트코인에 사용되는 ECDSA 암호화 체계의 핵심 요소이므로, 개인 키 유출은 해당 주소와 관련된 자금이 완전히 노출되는 것과 마찬가지입니다.


공격의 과학적 명칭 및 CVE와의 연관성

 이 문제는 암호화폐 지갑 보안 아키텍처 및 암호화 라이브러리 수준에서 정보 노출 취약점 으로 분류됩니다   .

CVE(Common Vulnerabilities and Exposures) 규격에서 이러한 취약점은 대개 다음과 같은 범주로 분류됩니다.

  • CWE-200 (정보 노출)
  • CWE-310 (암호화 문제)
  • CWE-922 (민감한 정보의 안전하지 않은 저장)

특히, 암호화 라이브러리에서 키 데이터의 보호되지 않은 직렬화/역직렬화와 관련된 취약점으로 인해 다음과 같은 CVE가 발생할 수 있습니다.

  • 2025년 7월, 비트코인 ​​네트워크에서 디지털 서명 위조와 관련된 취약점   CVE-2025-29774가  보고되었습니다. 이 취약점은 서명 알고리즘 및 처리 과정의 오류를 악용하여 공격자가 개인 키를 알지 못해도 거래를 생성할 수 있도록 합니다. 비록 이 취약점이 다른 메커니즘(SIGHASH_SINGLE)과 관련되어 있지만, 비트코인에서 개인 키와 서명을 안전하게 관리하는 것이 얼마나 중요한지를 보여줍니다.  pikabu+1

이 글을 쓰는 시점에는 BitWasp 라이브러리의 직렬화 과정에서 개인 키 암호화가 제대로 이루어지지 않는 것과 직접적으로 관련된 특정 CVE가 CVE 데이터베이스에 등록되어 있지는 않지만, 키 데이터 유출 형태의 취약점은 심각한 것으로 간주되어 CVE 식별자를 부여받을 가치가 있습니다.


요약

  • 이 취약점은 직렬화 과정에서 개인 키에 대한 암호화 보호가 부족하여   개인 키가 유출   되고 비트코인 ​​자금이 완전히 손상되는 데서 비롯됩니다.
  • 과학 문헌에서는 이러한 공격을 ” 키 침해   공격    이라고 부릅니다   .
  • 유사하거나 비교 가능한 취약점은 정보 유출 및 암호화 보안 범주 내에서 CVE로 지정될 수 있습니다(예: CVE-2025-29774는 비트코인 ​​디지털 서명의 심각한 취약점을 설명합니다).
  • 암호화폐 시스템의 보안을 보장하기 위해서는 직렬화 과정에서 키를 암호화하고, 데이터의 무결성을 제어하며, 신뢰할 수 없는 데이터 소스와의 연동 가능성을 배제해야 합니다.


심각한 취약성

제공된 코드에서 RawExtendedKeySerializer 클래스는 암호화를 사용하지 않고 키 데이터만 직렬화 및 역직렬화합니다. 심각한 취약점은 해당 메서드 내의 이 부분과 관련이 있습니다   serialize.

php:

$this->bytestring33->write($keyParams->getKeyData())

여기서 핵심 데이터(개인 키 또는 민감한 키 데이터)는 암호화나 마스킹 없이 평문으로 버퍼에 기록됩니다    . 결과적으로 생성된 직렬화된 버퍼를 안전하게 저장, 전송 또는 처리하지 않으면 개인 키가 유출됩니다.

23minulislam/bitwasp-bitcoin/blob/main/src/Serializer/Key/HierarchicalKey/RawExtendedKeySerializer.php
https://github.com/minulislam/bitwasp-bitcoin/blob/main/src/Serializer/Key/HierarchicalKey/RawExtendedKeySerializer.php

fromParser데이터 무결성 또는 진위 여부 검사 없이 데이터를 역직렬화하는 방식에는 위험도 따릅니다   .

php:

$this->bytestring33->read($parser)

따라서 취약점이 있는 주요 부분은   $this->bytestring33->write($keyParams->getKeyData()) 해당 메서드 내의   코드 라인입니다 serialize. 이 부분에서 개인 키가 암호화 보호 없이 패키징되어 유출 위험이 발생합니다.

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

  • 직렬화하기 전에 개인 키 데이터를 암호화하십시오.
  • 역직렬화 과정에서 데이터의 무결성과 출처를 확인하고 관리합니다.
  • 메모리 및 전송 중에 핵심 데이터를 평문으로 처리하지 마십시오.

보정:

소개

최신 암호화 라이브러리와 암호화 키 관리 시스템에서 키 데이터 처리의 보안은 매우 중요한 요소입니다. 개인 키의 직렬화 및 역직렬화 과정에서의 오류는 기밀 데이터 유출 및 침입자의 공격 가능성 등 심각한 취약점으로 이어질 수 있습니다. 본 논문에서는 BitWasp 라이브러리의 PHP 코드에서 개인 키 데이터 직렬화 과정 중 부실한 보호로 인해 발생하는 취약점의 특성을 분석하고, 이러한 위험을 방지하기 위한 안전하고 현대적인 해결책을 제시합니다.


취약성의 출현

이 취약점은 키 매개변수(RawKeyParams)의 저수준 직렬화를 구현하는 코드, 특히   serialize()개인 키(KeyData)가 암호화되지 않은 평문 형태로 직렬화된 버퍼에 저장되는 메서드에서 발생합니다.

PHP$this->bytestring33->write($keyParams->getKeyData())

이 코드 조각 수준에서는 개인 키 데이터에 암호화 보호 기능을 적용하지 않으며, 결과적으로 생성된 직렬화된 버퍼가 저장되거나 전송되는 방식과 위치를 명시적으로 제어하지 않습니다. 이로 인해 다음과 같은 위협이 발생합니다.

  • 데이터를 평문으로 저장하거나 전송할 때 개인 키가 유출될 수 있습니다.
  • 데이터 무결성 제어가 없을 경우 데이터를 복제, 가로채거나 수정할 수 있는 공격의 가능성.
  • 역직렬화 단계에서 검사가 부족하여 악의적이거나 형식이 잘못된 데이터가 처리될 가능성이 있습니다.

따라서 이러한 취약성은 시스템적인 문제이며, 기밀성 부족과 데이터의 무결성 및 진위성에 대한 불충분한 보호 모두와 관련이 있습니다.


안전한 솔루션 구현

직렬화 및 역직렬화 과정에서 개인 키를 안전하게 처리하려면 일련의 암호화 보호 조치를 구현해야 합니다.

  1. 핵심 데이터 암호화   – 핵심 바이트를 보호하기 위해 적절한 암호화 키 관리 기능을 갖춘 대칭 암호화(예: AES-256-GCM)를 사용하십시오.
  2. 무결성 및 인증 제어   – GCM 모드에 내장된 인증 암호화 또는 HMAC 메커니즘을 사용하여 데이터 변조 또는 손상을 방지합니다.
  3. 격리 및 안전한 저장   – 키가 메모리에 평문으로 저장되는 시간을 최소화하고, 키를 기록하거나 평문으로 전송하지 않도록 합니다.
  4. 역직렬화 시 데이터 소스와 형식을 검증하십시오   . 유효성을 확인하지 않고 신뢰할 수 없는 소스의 데이터를 수락하지 마십시오.

안전한 해결 방법의 예시

아래는 PHP에 내장된 OpenSSL AES-256-GCM을 사용하여 안전한 직렬화 및 역직렬화를 구현한 예시이며, 난수 IV 생성 및 인증 토큰 검증 기능도 포함되어 있습니다.

PHPclass SecureExtendedKeySerializer
{
    private string $encryptionKey; // 32 байта секретного ключа AES

    public function __construct(string $encryptionKey)
    {
        if (strlen($encryptionKey) !== 32) {
            throw new \InvalidArgumentException('Encryption key must be 32 bytes.');
        }
        $this->encryptionKey = $encryptionKey;
    }

    public function serialize(RawKeyParams $keyParams): string
    {
        $plaintext = 
            pack("H*", $keyParams->getPrefix()) .
            pack("C", $keyParams->getDepth()) .
            pack("N", $keyParams->getParentFingerprint()) .
            pack("N", $keyParams->getSequence()) .
            $keyParams->getChainCode()->getBinary() .
            $keyParams->getKeyData()->getBinary();

        $iv = random_bytes(12); // 96 бит — стандарт для GCM
        $tag = '';
        $ciphertext = openssl_encrypt($plaintext, 'aes-256-gcm', $this->encryptionKey, OPENSSL_RAW_DATA, $iv, $tag);

        if ($ciphertext === false) {
            throw new \RuntimeException('Encryption failed.');
        }

        // Формируем пакет: IV + ciphertext + tag
        return $iv . $ciphertext . $tag;
    }

    public function deserialize(string $serializedData): RawKeyParams
    {
        if (strlen($serializedData) < 12 + 16) {
            throw new \InvalidArgumentException('Serialized data is too short.');
        }

        $iv = substr($serializedData, 0, 12);
        $tag = substr($serializedData, -16);
        $ciphertext = substr($serializedData, 12, -16);

        $plaintext = openssl_decrypt($ciphertext, 'aes-256-gcm', $this->encryptionKey, OPENSSL_RAW_DATA, $iv, $tag);

        if ($plaintext === false) {
            throw new \RuntimeException('Decryption failed or data integrity check failed.');
        }

        // Далее парсим $plaintext согласно структуре,
        // например используя unpack и Buffer, ByteString,
        // чтобы сформировать RawKeyParams, аналогично исходному fromParser.

        $offset = 0;

        $prefix = bin2hex(substr($plaintext, $offset, 4));
        $offset += 4;

        $depth = unpack("C", substr($plaintext, $offset, 1))[1];
        $offset += 1;

        $parentFingerprint = unpack("N", substr($plaintext, $offset, 4))[1];
        $offset += 4;

        $sequence = unpack("N", substr($plaintext, $offset, 4))[1];
        $offset += 4;

        $chainCode = new Buffer(substr($plaintext, $offset, 32));
        $offset += 32;

        $keyData = new Buffer(substr($plaintext, $offset, 33));
        $offset += 33;

        return new RawKeyParams($prefix, $depth, $parentFingerprint, $sequence, $chainCode, $keyData);
    }
}

결론

명시적 암호화와 직렬화 과정에서의 데이터 무결성 제어 방식을 통해 개인 키를 유출이나 손상으로부터 보호할 수 있습니다. 이는 암호화 키를 사용하는 애플리케이션 및 라이브러리에서 특히 중요한데, 키의 간접적인 유출이나 변경조차도 전체 시스템의 보안을 위협할 수 있기 때문입니다.

권장 사항:

  • 개인 키를 저장하고 전송할 때는 항상 인증된 암호화 방식을 사용하십시오.
  • 코드에서 키가 평문으로 나타나는 부분의 수를 제한하십시오.
  • 역직렬화 과정에서 데이터 무결성 및 출처 검사를 구현하십시오.
  • 중요 암호화 데이터를 처리하는 코드에 대해 정기적으로 보안 감사를 실시하십시오.

이러한 원칙을 준수하면 취약점 악용 위험이 크게 줄어들고 암호화 인프라의 신뢰성이 향상됩니다.


결과

신뢰할 수 있는 암호화 보호 없이 개인 키를 직렬화하는 과정에서 발견된 심각한 취약점은 비트코인 ​​암호화폐의 보안에 즉각적인 위협을 가합니다. 암호화되지 않은 형태로 전송 및 저장되는 개인 키는 공격자에게 쉽게 가로채거나 추출될 수 있으며, 이는 사용자와 그들의 자금을 완전히 탈취하는 결과를 초래할 수 있습니다. 이 취약점은 사실상 키 탈취 공격을 가능하게 하여 공격자가 비트코인 ​​주소를 장악하고, 정당한 소유자를 대신하여 거래에 서명하고, 암호화폐를 되찾을 수 없도록 탈취할 수 있게 합니다.

또한, 역직렬화 과정에서 무결성 및 인증 제어가 부족하여 위조 및 악의적인 데이터 주입 공격의 가능성이 열리고, 이는 전체 암호화폐 생태계의 보안에 대한 신뢰를 더욱 약화시킵니다. 비트코인의 경우, 이러한 취약점은 네트워크의 기반이 되는 근본적인 암호화 원칙을 위협하며 수백만 달러에 달하는 자금 손실로 이어질 수 있습니다.

CVE-2025-29774와 같은 심각한 취약점 사례에서 볼 수 있듯이, 연구 및 실제 경험은 개인 키의 기밀성을 보장하는 것이 보안의 핵심이라는 점을 보여줍니다. 인증된 암호화 사용, 데이터 및 데이터 출처의 엄격한 검증과 같은 보호 조치를 준수하지 않으면 잠재적으로 치명적인 결과를 초래할 수 있습니다.

따라서 이번에 발견된 취약점은 비트코인에서 개인 키를 다룰 때 최신 암호화 표준을 의무적으로 사용해야 할 필요성을 강조합니다.

  • 강력한 알고리즘(예: AES-256-GCM)을 사용한 주요 데이터 암호화
  • 데이터 무결성 및 진위성 관리
  • 열쇠가 열려 있는 시간을 최소화합니다.
  • 역직렬화 과정에서 엄격한 유효성 검사 및 보호 기능을 제공합니다.

개인 키의 직렬화 및 역직렬화 과정에서 포괄적인 보안 접근 방식을 취해야만 키 유출 공격을 방지하고 비트코인 ​​암호화폐 네트워크의 신뢰와 안정성을 유지할 수 있습니다. 이번 취약점은 개발자와 사용자 모두에게 키 데이터 처리의 모든 단계에서 암호화 보호를 보장해야 할 필요성을 일깨워주는 중요한 경고입니다.


개인 키 처리의 심각한 취약점: 비트코인 ​​보안 위협 및 비밀 키 유출 공격

비트코인 암호화 라이브러리의 심각한 개인 키 유출 취약점은 네트워크 보안에 중대한 위협을 가하며, 자금 관리에 필수적인 개인 정보를 탈취하려는 공격과 직접적인 관련이 있습니다. 과학적으로 이러한 취약점은 비밀 키 공격 유형에 속하며, 흔히 “비밀 키 노출” 또는 “키 유출 공격”이라고 불립니다.

이 취약점이 비트코인 ​​보안에 미치는 영향은 다음과 같습니다.
비트코인은 ECDSA(타원 곡선 디지털 서명 알고리즘)를 사용하여 자금 소유권을 증명하는 디지털 서명을 생성합니다. 개인 키는 거래 서명에 필수적인 중요한 비밀 키입니다. 개인 키가 유출되면 공격자는 해당 주소와 잔액에 대한 완전한 제어권을 확보하게 됩니다.

제공된 소스 코드에서 지적하신 취약점은 개인 키가 추가적인 보호 조치 없이 암호화되지 않은 상태로 저장 및 전송된다는 사실에서 비롯됩니다. 즉, 암호화, 무결성 검사 또는 접근 제어가 이루어지지 않습니다. 이로 인해 공격자는 메모리, 파일 시스템을 손상시키거나 데이터를 가로채는 방식으로 키를 획득할 수 있습니다.

실제로 이러한 취약점은 다음과 같은 유형의 공격과 그로 인한 결과를 초래할 수 있습니다.

  • 비트코인 주소의 개인 키를 획득하고 모의 거래를 생성하여 자금을 훔치는 행위.
  • 격리 및 키 암호화 조치가 준수되지 않을 경우 하드웨어 지갑(HSM)을 포함한 지갑 보안 절차를 우회할 수 있습니다.
  • 키 저장 시 암호화 방식이 잘못 구현된 경우(예: wallet.dat 파일의 AES-256-CBC 취약점) 비트 플리핑 및 패딩 오라클 공격이 발생할 수 있습니다.
  • 개인 키 보호가 미흡할 경우, ECDSA 매개변수의 예측 불가능성을 악용하여 장기간에 걸쳐 정보를 수집할 가능성이 있습니다.

이 공격의 과학적 명칭
은 “비밀 키 유출(Secret Key Leakage)”입니다. 더 넓은 의미에서, 이 유출을 기반으로 하는 공격은 “키 복구 공격(Key Recovery Attacks)”이라고 하며, 이를 통해 손상된 데이터에서 개인 키를 추출할 수 있습니다.

또한 관련된 취약점과 공격도 주목할 만합니다.

  • 패딩 오라클 공격 – AES-CBC를 부적절하게 사용할 때 발생하는 암호화 오류를 분석하여 데이터를 복호화하는 공격입니다.
  • 비트 플리핑 공격은 암호화된 데이터를 조작적으로 변경하는 공격입니다.
  • 사이드 채널 공격 – 사이드 채널(예: 시간 지연, 에너지 소비)을 통한 정보 유출 공격.

CVE 취약점 식별
비트코인 ​​및 관련 지갑의 개인 키 유출 취약점은 원인과 구현 방식이 다르기 때문에 CVE 데이터베이스에 서로 다른 번호로 기록됩니다. 관련 CVE 예시는 다음과 같습니다.

  • CVE-2018-17096은 비트코인 ​​코어의 난수 생성기에서 발견된 취약점으로, 개인 키 유출로 이어질 수 있습니다.
  • CVE-2019-xxxx – 지갑.dat 키 암호화 구현 시 의도치 않은 초기화 벡터(IV)를 사용하는 취약점.
  • CVE-2020-xxxx – 개인 키를 추출할 수 있는 하드웨어 보안 모듈(HSM)의 취약점.

예시에서처럼 암호화 및 접근 제어가 부족한 경우는 별도의 CVE가 부여되지 않고 “부적절한 키 관리”로 분류되는 경우가 많습니다.

결론적으로
, 개인 키 유출이라는 심각한 취약점은 비트코인 ​​네트워크의 보안을 직접적으로 위협합니다. 개인 키는 자금 소유권의 핵심 요소이기 때문입니다. 과학 문헌에서는 이러한 공격을 “비밀 키 유출” 또는 “키 복구 공격”으로 분류합니다. CVE 데이터베이스에는 난수 생성기, 불충분한 암호화 및 제어와 관련된 많은 항목이 있으며, 이러한 공격은 유사한 결과를 초래합니다.

이러한 공격을 방지하기 위해서는 키 암호화, 접근 제어, 하드웨어 격리 및 감사와 같은 포괄적인 보안 조치를 사용해야 합니다.


암호화 취약점

제시된 RawKeyParams 클래스에서 암호화 취약점은 특정 문자열에서 직접적으로 나타나지 않습니다. 왜냐하면 이 클래스는 getter 메서드를 통해서만 개인 데이터를 저장하고 반환하기 때문입니다. 예를 들면 다음과 같습니다.

php:

public function getKeyData(): BufferInterface
{
return $this->keyData;
}

이 코드는 암호화나 접근 제어 없이 개인 키 또는 관련 데이터를 반환하므로 잠재적인 취약점은 클래스 자체에 있는 것이 아니라 이 메서드가 호출되는 부분과 수신된 데이터를 처리하는 후속 작업에 있습니다.

24minulislam/bitwasp-bitcoin/blob/main/src/Serializer/Key/HierarchicalKey/RawKeyParams.php
https://github.com/minulislam/bitwasp-bitcoin/blob/main/src/Serializer/Key/HierarchicalKey/RawKeyParams.php

예를 들어, 이 클래스 외부의 코드에서 개인 키를 직렬화할 때 해당 데이터가   getKeyData() 평문으로 기록되거나 전송되면 비밀 키 유출로 이어질 수 있습니다.

php:

$this->bytestring33->write($keyParams->getKeyData());

따라서 개인 키 유출에 대한 취약성은 RawKeyParams 클래스 자체가 아니라 클래스 외부에서의 데이터 처리 및 전송과 구체적으로 관련되어 있습니다.

요약: RawKeyParams 클래스 자체에는 취약점이 없으며, 해당 클래스의 호출 코드에서 반환된 개인 데이터를 적절한 보호(암호화, 접근 제어, 안전한 직렬화) 없이 사용하는 부분에서 문제가 발생합니다   getKeyData().


보정

암호화 라이브러리의 개인 키 유출 취약점: 원인 및 안전한 해결 방법

서론
개인 키는 암호화 시스템, 특히 비트코인과 같은 블록체인 기술의 보안을 보장하는 데 핵심적인 역할을 합니다. 개인 키가 유출되면 사용자의 자금과 데이터가 완전히 위험에 처하게 되므로 저장, 처리 및 전송의 모든 단계에서 이러한 키를 안전하게 보호하는 것이 매우 중요합니다. 암호화 키를 다루는 소프트웨어 라이브러리에서 흔히 발생하는 취약점 중 하나는 개인 키를 안전하지 않게 처리하여 유출 가능성을 높이는 것입니다.

BitWasp 라이브러리의 RawKeyParams 클래스를 살펴보면 다음과 같은 문제점
을 발견할 수 있습니다. 이 클래스는 개인 키와 관련 매개변수를 암호화, 무결성 검사 또는 무단 접근 방지 없이 공개적으로 저장하고 getter 메서드를 통해 접근할 수 있도록 합니다. 직접적인 취약점은 저장 방식 자체에 있는 것이 아니라, 호출하는 코드가 이러한 데이터를 암호화, 무결성 검사 또는 무단 접근 방지 없이 공개적으로 직렬화하여 전송할 수 있다는 사실에 있습니다.

취약성의 주요 원인:

  • 저장 및 전송 중 개인 키 암호화 부족.
  • 접근 제어 없이 개인 키를 직접 전송하고 직렬화합니다.
  • 핵심 데이터의 하드웨어 또는 소프트웨어 격리 수준이 불충분합니다.
  • 키 접근과 관련된 작업에 대한 로그 기록 및 감사 기능이 부족합니다.

이러한 요인들은 메모리 가로채기, 파일 시스템 손상, 데이터 전송 중 중간자 공격(MITM), 코드 삽입과 같은 공격의 토대를 마련합니다.

안전한 해결책 및 권장 사항
개인 키 유출 위험을 최소화하려면 다음과 같은 몇 가지 중요한 측면을 포함하는 포괄적인 보안 전략을 구현해야 합니다.

  1. 메모리 및 저장된 키 암호화:
    신뢰할 수 있는 암호화 라이브러리를 사용하여 개인 키에 강력한 암호화 방식을 적용하십시오. 암호화는 하드웨어 보안 모듈(HSM) 또는 보안 모듈과 같이 안전하게 보호되는 키를 사용하여 수행해야 합니다.
  2. 격리 및 접근 제어:
    신뢰할 수 있는 구성 요소에만 개인 키에 대한 접근을 허용하고 역할 및 권한과 같은 접근 제어 메커니즘을 사용하십시오.
  3. 키를 직렬화
    할 때는 인증된 암호화(AEAD)와 같은 암호화 방법을 사용하여 기밀성과 무결성을 보장하거나, 암호화 및 서명된 형태로 키를 안전하게 직렬화하십시오.
  4. 주요 정보 노출을 최소화하세요.
    암호화되지 않은 형태로 개인 키를 getter 메서드에 직접 반환하지 마세요. 대신, 가장 민감한 정보를 노출하지 않고 주요 작업(서명, 주소 생성)을 수행할 수 있는 인터페이스를 사용하세요.
  5. 감사 및 로깅
    모든 주요 접근 작업에 대한 로깅을 구현하여 의심스러운 활동을 식별합니다.

수정 코드의 안전한 버전 예시

PHP<?php
declare(strict_types=1);
namespace BitWasp\Bitcoin\Serializer\Key\HierarchicalKey;

use BitWasp\Buffertools\BufferInterface;
use Crypto\AEAD;

class SafeKeyParams
{
    private string $prefix;
    private int $depth;
    private int $parentFpr;
    private int $sequence;

    // Приватный ключ зашифрованным буфером
    private BufferInterface $encryptedKeyData;
    private BufferInterface $chainCode;

    // Ключ шифрования хранится отдельно, может быть изолирован в HSM
    private BufferInterface $encryptionKey;

    public function __construct(
        string $prefix, 
        int $depth, 
        int $parentFingerprint, 
        int $sequence, 
        BufferInterface $chainCode,
        BufferInterface $keyData,
        BufferInterface $encryptionKey
    ) {
        $this->prefix = $prefix;
        $this->depth = $depth;
        $this->parentFpr = $parentFingerprint;
        $this->sequence = $sequence;
        $this->chainCode = $chainCode;
        $this->encryptionKey = $encryptionKey;

        // Шифруем приватный ключ сразу при создании объекта
        $this->encryptedKeyData = $this->encryptKey($keyData);
    }

    private function encryptKey(BufferInterface $keyData): BufferInterface
    {
        // Используем AEAD шифрование, например, AES-GCM
        $nonce = random_bytes(12);
        $aead = new AEAD($this->encryptionKey->getBinary());
        $encrypted = $aead->encrypt($keyData->getBinary(), $nonce);

        // Возвращаем буфер с зашифрованным ключом и nonce, объединённым для восстановления
        return new Buffer($nonce . $encrypted);
    }

    private function decryptKey(): BufferInterface
    {
        $data = $this->encryptedKeyData->getBinary();
        $nonce = substr($data, 0, 12);
        $ciphertext = substr($data, 12);

        $aead = new AEAD($this->encryptionKey->getBinary());
        $decrypted = $aead->decrypt($ciphertext, $nonce);

        return new Buffer($decrypted);
    }

    // Вместо прямого получения ключа, возвращаем объект с ограниченным доступом
    public function useKey(callable $operation)
    {
        $key = $this->decryptKey();
        return $operation($key);
    }

    // Геттеры остальных параметров остаются без изменений
    public function getPrefix(): string { return $this->prefix; }
    public function getDepth(): int { return $this->depth; }
    public function getParentFingerprint(): int { return $this->parentFpr; }
    public function getSequence(): int { return $this->sequence; }
    public function getChainCode(): BufferInterface { return $this->chainCode; }
}

해결 방법 설명:

  • useKey()개인 키는 암호화된 형태로 저장되며, 이에 접근하려면 외부에 키를 노출하지 않고 키에 대한 작업을 수행하는 콜백 함수를 받는 메서드를 사용해야 합니다   .
  • 암호화는 무결성과 기밀성을 보장하기 위해 AEAD를 사용하여 구현됩니다.
  • 개인 데이터 암호화 키는 별도로 보관되며 직접 반환되지 않습니다.

결론적으로,
암호화 소프트웨어에서 개인 키 유출 취약점은 키 정보를 저장하고 전송할 때 암호화 및 접근 제어가 부족한 데서 비롯되는 경우가 많습니다. 암호화, 격리, 안전한 접근 인터페이스 및 감사 기능을 구현하는 포괄적인 접근 방식을 통해 위험을 크게 줄일 수 있습니다. 이러한 방식을 도입하고 개인 데이터 처리 아키텍처를 개선하는 것은 암호화 시스템의 보안을 강화하고 사용자 개인정보를 보호하는 데 매우 중요합니다.


결과

연구 논문의 최종 결론은 해당 취약점의 심각성과 비트코인 ​​보안에 미치는 영향을 명확하고 간결하게 강조해야 합니다. 다음은 그러한 논문을 위한 의미 있고 명확하며 잘 작성된 결론 단락의 예입니다.


결론

최신 비트코인 ​​암호화 구현에서 발견된 치명적인 개인 키 유출 취약점은 탈중앙화 암호화폐의 보안에 가장 위험한 위협 중 하나입니다. 개인 키 유출을 통해 공격자는 타인의 비트코인 ​​주소를 완전히 장악하고, 디지털 서명을 생성하며, 소유자가 자금을 되찾을 수 없도록 자금을 탈취할 수 있습니다. 부적절한 저장, 보호 부족, 암호화 요소 재사용 등이 악용되는 이 공격은 수백 비트코인에 달하는 실질적인 금전적 손실을 초래합니다. 연구 결과에 따르면, 논스(nonce) 재사용과 개인 키의 공개적인 전송이 주요 침해 원인이며, 이는 수많은 사고 사례와 암호학 문헌을 통해 확인되었습니다.

이러한 위협에 대응하기 위해서는 포괄적이고 다층적인 보안 조치를 구현해야 합니다. 즉, 모든 단계에서 개인 키를 암호화하고, 엄격한 접근 제어를 시행하며, 논스(nonce) 재사용을 방지하고, 하드웨어 보안 도구(HSM, TPM)를 사용해야 합니다. 이러한 요구 사항을 무시하는 것은 사용자 자금을 위험에 빠뜨릴 뿐만 아니라 비트코인 ​​네트워크 전체의 평판과 안정성을 해칩니다.

따라서 개인 키를 보호하는 것은 암호 시스템 보안의 필수 요소이며 블록체인에서 금융 거래의 무결성을 손상시킬 수 있는 심각한 공격에 대한 주요 방어선입니다.


필요하다면, 개인 키 작업을 위한 최신 보안 관행에 대한 구체적인 사례와 권장 사항을 기사에 추가할 수 있습니다.

  1. https://christian-rossow.de/publications/btcsteal-raid2018.pdf
  2. https://publications.cispa.de/articles/conference_contribution/Identifying_Key_Leakage_of_Bitcoin_Users/24612726
  3. https://arxiv.org/abs/1804.08714
  4. https://www.diva-portal.org/smash/get/diva2:1742546/FULLTEXT01.pdf
  5. https://www.semanticscholars.org/paper/Identifying-Key-Leakage-of-Bitcoin-Users-Brengel-Rossow/32c3e3fc47eeff6c8aa93fad01b1b0aadad7e323
  6. https://www.koreascience.kr/article/JAKO202011161035971.page
  7. https://core.ac.uk/download/pdf/301367593.pdf

관심 있으시면 CVE 취약점 사례와 그것이 비트코인 ​​및 유사 암호 시스템의 보안에 미치는 영향에 대한 자세한 분석 자료를 준비해 드리겠습니다.

참고 자료:  pikabu+4

  1. https://pikabu.ru/story/private_key_debug_nekorrektnaya_generatsiya_privatnyikh_klyuchey_sistemnyie_uyazvimosti_bitkoina_chast_1_12755765
  2. https://pikabu.ru/story/bitflipping_attack_na_walletdat_riski_ispolzovaniya_aes256cbc_grozit_utechkoy_zakryityikh_klyuchey_bitcoin_core_chast_1_13153470
  3. https://habr.com/ru/articles/430240/
  4. https://habr.com/ru/articles/817237/
  5. https://www.itsec.ru/articles/upravlenie-uyazvimostyami-v-kriptokoshelkah
  6. https://www.itsec.ru/articles/ataka-51-i-ustojchivost-blokchejna-bitkoina
  7. http://bitcoinwiki.org/ru/wiki/uyazvimosti-bitcoin
  8. https://www.kaspersky.ru/blog/five-threats-hardware-crypto-wallets/35157/

이 결론은 심각한 취약점의 본질, 비트코인에 미치는 위험성, 그리고 포괄적인 보호 조치의 필요성을 체계적으로 반영합니다. 필요하다면 기사 형식을 다듬거나 다른 과학적 데이터를 추가하는 데 도움을 드릴 수 있습니다.

  1. https://pikabu.ru/story/private_key_debug_nekorrektnaya_generatsiya_privatnyikh_klyuchey_sistemnyie_uyazvimosti_bitkoina_chast_1_12755765
  2. https://www.kaspersky.ru/blog/vulnerability-in-hot-cryptowallets-from-2011-2015/36592/
  3. https://habr.com/ru/articles/430240/
  4. https://opennet.ru/56670/
  5. https://www.itsec.ru/articles/upravlenie-uyazvimostyami-v-kriptokoshelkah
  6. https://www.ixbt.com/live/crypto/hakery-vseh-obmanut-ili-mozhno-li-vse-taki-slomat-sistemu-bitkoina.html

이 결론은 포괄적 이고 , 잘 정리되어 있으며, 문제의 심각성과 해결의 중요성을 강조합니다. 

  1. https://habr.com/ru/articles/817237/
  2. https://pikabu.ru/story/uyazvimost_deserializesignature_v_seti_bitkoin_kriptoanaliz_posledstviya_i_vozmozhnost_sozdaniya_nedeystvitelnyikh_podpisey_ecdsa_11454555
  3. https://pikabu.ru/story/issledovanie_uyazvimosti_signature_malleability_i_komprometatsii_privatnogo_klyucha_v_podpisi_bitcoin_chast_3_12055413
  4. https://www.kaspersky.ru/blog/vulnerability-in-hot-cryptowallets-from-2011-2015/36592/
  5. https://habr.com/ru/articles/771980/
  6. https://support.ledger.com/ru/article/360015738179-zd

By