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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
cdf — 암호화 소프트웨어의 구현 오류, 규정 준수 실패, 부채널 누출을 스마트하고 병렬화된 테스트를 통해 여러 언어와 플랫폼에서 감지하는 자동화된 차등 퍼징 도구입니다. | Kitploit
도구/GitHubGitHub/kudelskisecurity/cdf
Vulnerability AnalysisFuzzingCryptographyBinary Analysis
GitHubkudelskisecurity/cdf

cdf

암호화 소프트웨어의 구현 오류, 규정 준수 실패, 부채널 누출을 스마트하고 병렬화된 테스트를 통해 여러 언어와 플랫폼에서 감지하는 자동화된 차등 퍼징 도구입니다.

저장소 보기
171235년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CDF – 암호 차별 퍼징

CDF는 암호 소프트웨어의 정확성과 보안을 자동으로 테스트하는 도구입니다. CDF는 구현 오류, 규정 준수 실패, 부채널 누출 등을 감지할 수 있습니다.

CDF는 단위 테스트와 '차별 퍼징(differential fuzzing)'을 결합한 방식을 구현합니다. 이는 동일한 프리미티브의 서로 다른 구현들이 코드 커버리지를 극대화하는 경계 사례와 값을 입력받았을 때의 동작을 비교하는 접근 방식입니다.

범용 퍼저 및 테스트 소프트웨어와 달리 CDF는 다음과 같은 특징이 있습니다:

  • 스마트(Smart): CDF는 테스트 중인 알고리즘의 종류를 알고 테스트 대상 함수에 적응합니다
  • 빠름(Fast): CDF는 테스트가 필요한 것만 테스트하고 가능한 한 병렬로 테스트를 수행합니다
  • 다재다능(Polyvalent): CDF는 특정 언어나 API에 국한되지 않고 임의의 실행 프로그램이나 스크립트를 지원합니다
  • 이식성(Portable): CDF는 플랫폼별 의존성 없이 Go로 작성되었으므로 모든 Unix 또는 Windows 플랫폼에서 실행됩니다

CDF의 목적은 개발자와 보안 연구자에게 더 효율적인 테스트 도구를 제공하는 것이며, 테스트 벡터보다 효과적이고 형식 검증의 수동 감사보다 저렴합니다.

CDF는 2017년 Black Hat USA에서 처음 발표되었습니다. 발표 내용에 대한 슬라이드를 확인할 수 있으며, 여기에는 CDF의 설계 배경과 설계에 대한 일반적인 정보가 포함되어 있습니다.

요구 사항

CDF는 Go로 코딩되었으며, 현재 버전은 Go 1.8을 사용하여 개발되었습니다. Go의 표준 라이브러리 외에는 의존성이 없습니다.

그러나 CDF를 사용하여 테스트할 예제 프로그램을 제공하며, 이 프로그램들은 C, Python, C++, Java 및 Go로 작성되어 있으며 특정 암호 라이브러리를 필요로 합니다. 현재 필요한 라이브러리는 다음과 같습니다:

  • CryptoPP
  • OpenSSL
  • BouncyCastle
  • PyCrypto
  • Cryptography.io

빌드

make 명령어는 cdf 바이너리를 빌드합니다.

example 디렉토리 아래에 여러 예제 프로그램이 있습니다. make examples-all은 모든 예제를 빌드하고, make examples-go는 Go 예제만 빌드합니다.

make test는 (CDF의) 단위 테스트를 실행합니다.

사용법

시작하려면 cdf -h를 실행하여 사용법 정보를 확인하는 것이 좋습니다.

그런 다음 rsaenc 인터페이스를 RSA OAEP Go 및 CryptoPP 예제에 대해 시도해 볼 수 있습니다. CryptoPP를 참조 구현으로 보고 Go 구현을 테스트하려면 다음을 수행하세요:

root@kitploit:~
cdf rsaenc /examples/oaep_rsa2048_go /examples/oaep_rsa2048_cryptopp

이 명령은 rsaenc 인터페이스에 특화된 다양한 테스트를 수행합니다.

이 예제에서 CDF는 Go 구현이 지원하는 최대 공개 지수 크기에 대해 불만을 표시할 것입니다. 해당 코드를 확인하면 공개 지수가 일반 정수로 저장되는 반면, CryptoPP(및 대부분의 다른 구현)에서는 큰 정수(big integer)로 저장되는 것을 볼 수 있습니다. 하지만 이는 의도된 설계이며 변경되지 않을 가능성이 높습니다.

매개변수는 config.json에 정의되어 있습니다. 대부분의 매개변수는 설명 없이도 이해할 수 있습니다. rsaenc 및 ecdsa에 대한 다른 개인 키를 설정할 수도 있습니다 (이 인터페이스들은 고정 키로 테스트되지만, 지수와 같은 일부 키 매개변수는 일부 테스트에서 변경됩니다).

seed 매개변수는 CDF의 의사 난수 생성기에서 사용되는 시드를 변경할 수 있게 합니다. (그러나 테스트 중인 프로그램은 OAEP 예제와 같이 다른 방식으로 시드된 PRNG를 사용할 수도 있습니다.) concurrency 매개변수는 프로그램을 포크할 때 CDF가 생성해야 하는 동시 고루틴(goroutine) 수를 설정합니다. 실제 코어 수보다 낮게 유지하는 것이 좋습니다. verboseLog 매개변수를 true로 설정하면 성공적인 테스트를 포함한 모든 프로그램의 입력과 출력을 log.txt 파일에 기록합니다.

인터페이스

CDF를 사용하여 소프트웨어를 테스트하려면 CDF 인터페이스에 따라 입력을 읽고 출력을 작성하며 내부적으로 테스트 대상 프로그램을 호출하는 프로그램을 생성해야 합니다. CDF 인터페이스는 임의 구현의 블랙박스 테스트를 허용하기 위해 암호 기능을 추상화한 것입니다.

예를 들어, ECDSA 서명 체계를 구현한 경우 프로그램은 ecdsa 인터페이스를 충족해야 하며, 메시지 서명 또는 서명 검증을 위해 각각 4개 또는 5개의 인수를 입력으로 받습니다. 이러한 인수는 공개 X 좌표, 공개 Y 좌표, 개인 D 큰 정수 및 서명하려는 메시지이며, 그런 다음 각각 새 줄에 큰 정수 R과 S만 출력해야 합니다. 또는 메시지를 검증하려면 X, Y, R, S 및 메시지를 받아 True 또는 False만 출력해야 합니다. 인터페이스 사양은 아래에 자세히 설명되어 있습니다.

인터페이스 구현의 예제는 직접 구현을 만드는 데 도움이 될 것입니다.

오류 처리는 테스트 대상 프로그램에 맡겨져 있지만, CDF에서 의미 있는 오류를 얻으려면 실패 시 종료하고 오류 코드를 반환하며 오류 메시지를 출력하는 것이 좋습니다.

인터페이스 프로그램은 모든 언어로 작성될 수 있으며, CDF 인터페이스를 준수하는 실행 파일이면 됩니다. 일반적으로 인터페이스 프로그램은 테스트 대상 프로그램과 동일한 언어로 작성되지만, 필수는 아닙니다(예를 들어 Java 프로그램의 경우 다른 언어로 작성된 래퍼일 수 있음).

CDF는 현재 다음 인터페이스를 지원하며, 별도로 설명되지 않는 한 매개변수는 16진수 ASCII 문자열로 인코딩됩니다.

dsa

dsa 인터페이스는 Digital Signature Algorithm (DSA)의 구현을 테스트합니다. 서명 및 검증 연산을 지원해야 합니다:

연산입력출력
서명p q g y x mr s
검증p q g y r s m진리값

여기서 p, q, g는 DSA 매개변수이고, y는 공개 키, x는 개인 키, m은 메시지이며, r과 s는 서명을 구성하며 새 줄로 구분되어 반환되어야 합니다. 진리값은 "true" 또는 "false"이며 문자열로 표현됩니다.

dsa 인터페이스는 선택적 테스트를 지원합니다. -h 플래그는 해싱 과정을 우회하고 서명할 해시 값을 직접 제공할 수 있게 합니다. 이를 통해 CDF는 오버플로우나 해시 잘림을 확인하는 등 더 많은 테스트를 수행할 수 있습니다.

ecdsa

ecdsa 인터페이스는 Elliptic Curve Digital Signature Algorithm (ECDSA)의 구현을 테스트합니다. 서명 및 검증 연산을 지원해야 합니다:

연산입력출력
서명x y d mr s
검증x y r s m진리값

여기서 x와 y는 공개 ECDSA 키 좌표이고, d는 개인 키, m은 메시지이며, r과 s는 서명을 구성하며 새 줄로 구분되어 반환되어야 합니다. 진리값은 "true" 또는 "false"이며 문자열로 표현됩니다.

-h 플래그는 dsa와 동일한 목적으로 사용됩니다.

현재 설계는 테스트 대상 프로그램에 정의된 고정 곡선을 가정합니다.

이러한 테스트에서 재현 가능한 결과를 얻고 CDF 감지 기능을 모두 활용하려면 난수 생성기에 고정 시드를 사용하거나 결정론적 ECDSA 변형을 사용해야 합니다. 그렇지 않으면 CDF는 동일한 태그 문제 등을 자동으로 감지할 수 없습니다.

enc

enc 인터페이스는 대칭 암호화 및 복호화 연산을 테스트하며, 일반적으로 블록 암호로 수행될 때 사용됩니다 (스트림 암호는 prf 인터페이스로 테스트할 수 있음). 암호화와 복호화를 지원해야 합니다:

연산입력출력
암호화k mc
복호화k cr

여기서 k는 키, m은 메시지, c는 암호문, r은 복원된 평문입니다.

prf

prf 인터페이스는 키 기반 해싱(의사 난수 함수, MAC) 및 스트림 암호를 테스트합니다:

연산입력출력
계산k mh

여기서 k는 키, m은 메시지(스트림 암호의 경우 논스), h는 PRF 계산 결과입니다. 인터페이스는 고정 키 크기와 가변 입력 길이를 가정합니다. 특정 키를 지정해야 하는 경우 테스트 대상 프로그램이 키 입력을 무시하거나 xof 인터페이스가 더 나은 선택일 수 있습니다.

rsaenc

rsaenc는 RSA 암호화 및 복호화를 테스트하며, OAEP (PKCS 2.1) 및 PKCS 1.5를 모두 포함합니다:

연산입력출력
암호화n e mc
복호화p q e d cr

여기서 n은 모듈러스, e는 공개 지수 (일부 라이브러리와의 호환성을 위해 복호화에도 e가 필요함), m은 메시지, p와 q는 n의 인수 (일반적으로 라이브러리에서 요구하므로 p > q), d는 개인 지수, r은 복원된 평문입니다.

xof

xof 인터페이스는 해시 함수, 확장 가능 출력 함수(XOF), 결정론적 난수 비트 생성기(DRBG)를 테스트합니다:

연산입력출력
계산mh

여기서 m은 메시지이고 h는 결과 h입니다.

저자

CDF는 JP Aumasson의 초기 아이디어를 기반으로 하며, WarCon 2016에서 처음 공개되었으며, 대부분의 코드는 Yolan Romailler가 작성했습니다.

지적 재산권

CDF의 저작권은 (c) 2016-2017 Nagravision SA에 있으며, 모든 권리는 보유됩니다.

CDF는 GPLv3에 따라 배포됩니다.

도구 다운로드