← 목록
기타 2026-07-09 4KB 읽기 4분

수치·암호 프리미티브 P1 보완 (Newton sqrt / 0+float 우회 / 이진XOR·HMAC 재작성)

개요

한선씨-전영역커버리지-20260709 감사에서 최하위 2개 도메인(수치-과학 40%, 암호-보안 50%)의 S~M급 갭 중 3건을 실장·검증: ①비완전제곱 float sqrt 전무 ②"0+float" 정수반올림 도메인 전역 함정 ③이진 XOR 부재로 인한 HMAC 오구축(RFC2104 비호환).

무엇을 했는지

1. 실수제곱근(x) — Newton-Raphson float sqrt (libs/수학.한선)

내장 루트()가 비완전제곱에서 정수 내림(오답)만 내는 문제를 순한선씨 반복법으로 해결. 실수제곱근(2)=1.41421, 실수제곱근(1000000)=1000, 음수는 에러+-1 반환. 이 위에 유클리드거리, 지수함수(Taylor e^x), 정규밀도_실수(정규분포 pdf), 표본평균/ 모표준편차까지 얹어 연쇄 복구를 실증(표준편차 샘플 [3,3,7,7] → 평균5/표준편차2 정답).

2. 실수합_시작()/실수합_더해()/실수합_값() — 0+float 우회 누산기 (libs/수학.한선)

VM 근본버그(범위 밖, C 레벨): 리터럴/변수값 0(int·float 불문)과 float가 만나면 +든 -든 float 쪽이 가장 가까운 정수로 반올림됨(0+2.5→3, 0-0.5→-1). 배열이 참조형이라는 기존 함정을 거꾸로 이용해 [값,시작여부] 2원소 배열로 스칼라 누산기를 흉내내고, 첫 항은 "0+더하기"가 아니라 "직접 대입"으로 채워 함정 자체를 피함. 실측: 헬퍼 사용 시 16(정답), 순수 0+float 누적 시 16.5(오답) — 우회 효과를 대조군으로 확인.

3. 이진배타(a,b) + HMAC-SHA256 재작성 (libs/해시.한선)

내장 비트배타()는 3진(trit-wise) 연산이라 이진 XOR로 쓰면 오답(비트배타(72,75)≠3). 이진배타(a,b)는 절단나눗셈(0방향)으로 비트를 8회 추출/재조립하는 순수 산술 구현 — Python ^과 7개 케이스 전부 일치. 이를 버퍼생성/버퍼바이트/버퍼SHA256(바이너리 안전 버퍼 API)과 결합해 HMAC_SHA256을 RFC2104 정합으로 재작성(H((K^opad)||H((K^ipad)||msg))). RFC 4231 Test Case 1 (key=0x0b×20, data="Hi There") 및 key="key" 벡터 모두 openssl과 바이트단위 완전 일치. 함수명은 유지(하위호환), 내부만 교체. 비-ASCII 키를 위한 이진HMAC_SHA256_바이트(키바이트배열,데이터)도 추가.

관련 파일

  • /Users/ef/CrownyOS/crownyc/libs/수학.한선 (+백업 수학.한선.bak-P1)
  • /Users/ef/CrownyOS/crownyc/libs/해시.한선 (+백업 해시.한선.bak-P1)
  • /Users/ef/CrownyOS/crownyc/pkg/libs/{수학,해시}.한선 — libs/와 하드링크(동일 inode), 자동 동기화 확인됨
  • /Users/ef/Downloads/CrownyTVM/std/해시.한선 — 별도 사본(하드링크 아님), 수동 동기화 완료(+백업 해시.한선.bak-P1, 원본 CrownyTVM/std 디렉토리)
  • 검증 로그: /Users/ef/CrownyOS/docs/한선씨-P1보완-20260709/수치암호검증.md
  • 근거 감사: /Users/ef/CrownyOS/docs/한선씨-전영역커버리지-20260709/{도메인_수치-과학.psv,도메인_암호-보안.psv,커버리지매트릭스.md}

잔여 이슈

  • 근본원인(VM C 레벨 "0+float 반올림")은 손대지 않음 — libs 레벨 우회(실수합_*)만 제공. opcode 레벨 수정은 별도 과제.
  • 실수제곱근(0-4)처럼 함수 인자에 인라인 산술+문자열연결을 바로 쓰면 라벨 출력이 깨지는 별개 파서 현상 관찰(값 자체는 정확) — 변수에 먼저 대입해 우회 권장.
  • 함정 기록: 가져오기 탐색순서상 CROWNY_STD 환경변수 경로(CrownyTVM/std)가 crownyc/libs보다 먼저 매칭됨. libs/해시.한선·수학.한선을 고치는 세션은 CrownyTVM/std의 동명 사본도 함께 동기화해야 함(안 하면 구버전이 조용히 선택되어 "미정의 함수" 컴파일 오류 발생 — 이번 세션 실측 재현).
  • libs/암호.한선, libs/암호화.한선(RPN 방언, 60+ 미인식 단어 기존 버그 보유), libs/XOR암호.한선(글자변환 버그)은 이번 스코프 밖 — 별도 과제로 남음(코드리뷰: 감사 백로그 11~48건 중 "AES/RSA/ECC bignum 선행" L급 항목).
  • 통계분석.한선의 분산()/평균()(STAT_AVG opcode 항상 0 반환) 자체는 미수정 — 본 작업은 libs/수학.한선에 독립적인 표본평균/모표준편차를 신규 제공해 연쇄를 우회 복구한 것이며, 기존 통계분석.한선 내부 버그는 별도 과제.