본문으로 건너뛰기
피드

자기 자신의 SHA-512 해시를 출력하는 C 프로그램 (IOCCC 2019)

open-source 약 4분
vote
0
댓글
북마크

IOCCC 2019 출품작으로, quine 기법과 SHA-512 계산을 결합해 자기 소스의 해시를 출력하는 C 프로그램. 앞선 코드를 정확히 1280바이트로 맞춰 SHA-512 내부 상태를 사전 계산하고, 라운드 상수는 64비트 정수 이분법으로 런타임 생성함.

  • 1

    quine + SHA-512 계산을 결합해 자기 소스의 해시를 출력

  • 2

    앞선 코드가 정확히 1280바이트(SHA-512 블록 사이즈의 배수)로 맞춰져 내부 상태를 사전 계산 가능

  • 3

    80개 라운드 상수를 하드코딩 대신 처음 80개 소수의 세제곱근을 런타임에 계산해 정체를 숨김

  • 4

    64비트 정밀도 문제를 67비트 값을 24비트 3개로 분할하고 이분법으로 해결

  • 5

    포터블 C99 코드, -Wextra -Weverything에서 경고 없이 컴파일됨

IOCCC 2019 출품작으로, 자기 자신의 SHA-512 해시를 출력하는 C 프로그램임. 핵심은 이 프로그램이 사실 quine(자기 소스를 인식하는 프로그램)이라는 것. 소스를 출력하는 대신 SHA-512 해시를 계산해서 출력함.

두 가지를 숨겨야 했음: quine이라는 사실과, SHA-512 계산 자체.

quine을 숨기는 트릭이 영리함. 소스 끝에 있는 긴 문자열 리터럴은 소스 코드 압축이 아니라, 앞선 코드를 이미 외부 스크립트로 SHA-512 처리한 뒤의 내부 상태값을 인코딩한 것임. 앞선 코드가 정확히 1280바이트(SHA-512 블록 사이즈인 1024비트의 배수)로 맞춰져 있어서, 프로그램은 그 지점부터 SHA-512 계산을 이어받아 마지막 블록만 처리하고 해시를 완성함.

SHA-512 계산을 숨기는 부분도 흥미로움. 80개의 라운드 상수를 하드코딩하면 웹 검색 한 번으로 정체가 드러남(예: 0x428a2f98d728ae22 검색하면 바로 SHA-512임). 그래서 라운드 상수를 런타임에 계산함 — 처음 80개 소수의 세제곱근의 소수부.

여기서 문제가 생김. SHA-512는 64비트 정밀도가 필요한데 double의 가수부는 53비트뿐임. 고정밀 부동소수점은 포터블 C99에서 불가능하고, 임의 정밀도 산술은 코드가 너무 커짐. 해결법: 세제곱근 대신 세제곱을 계산함. 이분법(bisection)으로 후보를 탐색하면서 64비트 정수로 세제곱을 구해 소수와 비교함.

67비트 정밀도가 필요한데(정수부 3비트 + 소수부 64비트) 포터블 C99에서는 32비트 곱셈까지만 결과가 64비트에 들어감. 그래서 67비트 값을 24비트 3개로 분할하고, 2^24 진법의 3자리 수 곱셈 공식을 적용함. 중간값은 우시프트로 정밀도를 줄여가며 64비트 안에 맞춤. 시행착오 끝에 처음 80개 소수에 대해 정확한 결과를 얻었다고 함.

-Wextra -Weverything 옵션에서도 경고 없이 컴파일되는 포터블 C99 코드이고, 32비트와 64비트 시스템 모두에서 동작함. 저자는 24비트 3개 대신 2개로 분할할 수 있는지를 미해결 문제로 남겨둠.

SHA-512의 블록 구조와 라운드 상수 생성 원리를 역이용한 우아한 난독화. 64비트 정밀도 제약을 24비트 분할로 돌파한 접근이 인상적임.

댓글

댓글

댓글을 불러오는 중...

open-source

차세대 데이터 파일 포맷 F3, 디코더를 Wasm으로 파일 안에 넣자는 실험

F3는 Parquet, ORC 같은 기존 컬럼형 파일 포맷의 한계를 줄이기 위해 제안된 오픈소스 연구 프로토타입이다. 핵심 아이디어는 데이터와 메타데이터뿐 아니라 WebAssembly(Wasm) 디코더까지 파일에 함께 넣어, 새 인코딩 방식이 나와도 플랫폼 호환성을 유지하자는 것이다.

open-source

에코백스, 1,134만원짜리 오픈소스 가정용 로봇 ‘빠졔’ 판매 시작

중국 청소 로봇 기업 에코백스가 첫 오픈소스 로봇 ‘빠졔’를 정식 판매하기 시작했음. 가정용 로봇을 개발자가 직접 조율하고 프로그래밍하고 2차 개발할 수 있게 만든 플랫폼이고, 가격은 4만9990위안, 약 1,134만원 수준임.

open-source

BMW·폭스바겐·스텔란티스, 자동차 소프트웨어 오픈소스 동맹 키운다

BMW, 폭스바겐그룹, 스텔란티스 등 유럽 완성차 업체들이 소프트웨어 정의 자동차(SDV) 경쟁력 강화를 위해 오픈소스 공동 개발에 나서고 있다. 독일자동차산업협회 주도 프로젝트에는 완성차, 부품사, 반도체 기업 등 30개 이상 기업이 참여하며 차량 OS, 미들웨어, 통신 소프트웨어 같은 공통 영역을 함께 만든다. 기대 효과는 개발·유지 비용 최대 40% 절감, 차량 개발 기간 최대 30% 단축이다.

open-source

AI 시대 오픈소스, ‘공개됐으니 막 써도 됨’은 진짜 위험한 착각

생성형 AI 서비스가 오픈소스 코드, 모델, 데이터셋, 외부 API를 섞어 쓰면서 라이선스와 이용 조건 관리가 훨씬 복잡해졌다는 내용이다. 공개된 기술이라도 저작권과 사용 조건은 남아 있고, 기업은 제품 안에 무엇이 들어갔는지 지속적으로 추적해야 한다.

open-source

에코백스, 1,134만원짜리 오픈소스 가정용 로봇 ‘빠졔’ 출시

중국 청소 로봇 기업 에코백스가 첫 오픈소스 로봇 ‘빠졔’를 판매하기 시작했다. 개발자가 로봇의 동작, 조작, 환경 인식 기능을 기반으로 임바디드 인텔리전스 애플리케이션을 만들고 상용화할 수 있게 하겠다는 전략이다.