수치·암호 프리미티브 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/수학.한선에 독립적인 표본평균/모표준편차를 신규 제공해 연쇄를 우회 복구한 것이며, 기존 통계분석.한선 내부 버그는 별도 과제.