← 목록
기타 2026-07-10 3KB 읽기 3분

근본B — bignum(임의정밀도 정수) 라이브러리

개요

정수 ±3^24(≈±1.412e11) VM 캡을 넘는 큰수 연산 keystone(AES/RSA/ECC·실 TLS·블록체인 서명 공통 기반). 근본A(같은 날, VM opcode TRUNC_MOD 752 추가)와 짝을 이루는 과제이나, 이번 근본B는 C/VM 무접촉 — 순수 한선씨 libs/bignum.한선 신규 라이브러리 1개 파일로 완결.

무엇을 했는지

  1. libs/bignum.한선 신규 작성: 다중림(BASE=10000, 4자리/림) 배열 표현,
부호는 맵({부호,자릿수}) — libs/행렬.한선의 "맵=구조체" 관례 재사용. - 생성/변환: 큰수생성(문자열) 큰수정수(n) 큰수0() 큰수문자열(bn) - 산술: 큰수더해 큰수빼기 큰수곱해 큰수나눔(몫/나머지 맵 반환) 큰수비교 큰수음수 큰수영인가 큰수반으로 - RSA 핵심: 큰수모듈러거듭제곱(base,exp,mod) — 제곱-곱셈법 - 부가: 큰수거듭제곱(모듈러 없음) 큰수팩토리얼(n)
  1. 나눗셈은 자릿수당 이진탐색(0~9999) 스쿨북 롱디비전으로 구현 —
Knuth Algorithm D보다 단순해 버그 리스크 낮음, _bn곱해기/_bn비교크기만 재사용.
  1. Python 대조 검증 전항목 완전 일치:
- 2^256, 50자리×50자리 곱셈/덧셈/뺄셈, 40자리÷15자리 나눗셈(몫/나머지) - RSA 왕복: p=61,q=53,n=3233,e=17,d=2753 — 65 → 2790(암호화) → 65(복호화) 성립 - 42자리 모듈러스 모듈러거듭제곱(e=65537), 50! 팩토리얼 - 음수 처리(0방향 절단 나눗셈 규약, Python //와 의도적으로 다름 — 근본A 절단나눗셈 관례와 일관성 유지), 0 처리(0나눗셈 안전값 반환)
  1. 성능 실측: 19자리 모듈러스 modexp 0.13s, 42자리 0.57s — 대략 림수²
스케일링. RSA-2048급(≈155림)은 외삽상 현실적 시간 내 불가능으로 추정, 문서에 명시(과장 금지).
  1. 회귀 확인: tests/run_all.sh 99/107(기준선 동일), pkg make test
11/13(기준선 동일) — C 무접촉이라 구조적으로 회귀 리스크 없음, 실측으로도 재확인.
  1. pkg 동기: libs/pkg/libs/ 이미 동일 inode(자동 하드링크) 확인, 별도
조치 불필요.
  1. 학습: crownycode-learn.sh add 3건(큰수모듈러거듭제곱_bignum_RSA,
큰수나눔_이진탐색롱디비전_bignum, 큰수곱해기_스쿨북캐리즉시전파_bignum).

관련 파일

  • /Users/ef/CrownyOS/crownyc/libs/bignum.한선 (신규, 정본)
  • /Users/ef/CrownyOS/crownyc/pkg/libs/bignum.한선 (하드링크 동기 확인)
  • /Users/ef/CrownyOS/docs/한선씨-P3보완-20260710/근본B_검증.md (상세 검증 로그)

잔여 이슈

  • ECC(타원곡선) 점연산은 범위 밖 — 별도 후속 라이브러리 과제.
  • 음수÷음수 등 전 부호조합 퍼징 미실시(양수 위주 + 대표 음수 1케이스만 검증).
  • RSA-2048급 실측(외삽만, 실제 대형 모듈러스 타이밍 측정은 미실시 — 수백 초
이상 걸릴 것으로 예상되어 이번 세션에서 실행하지 않음).