Skip to content

kallin1/zecret

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🔐 ZeCret — 공개제한구역 내 동형암호 기반 AI 공간분석 서비스

군사시설 등 공개제한구역의 고도(Z)값을 CKKS 동형암호로 암호화한 상태로 유지하면서, 신축 건물의 일조권 침해·기준 초과 여부를 판단하는 AI 공간분석 서비스입니다.

Python Streamlit AWS License


📌 프로젝트 개요

공공·민간 시설은 국가안보·국민안전을 이유로 위치·높이 등 공간정보의 공개를 제한합니다. 하지만 그 근처에 건물을 새로 지으려는 민간 입장에서는 일조권 침해 여부를 판단하기 위해 인근 시설의 높이 정보가 필요합니다.

본 프로젝트는 이 두 요구를 동시에 만족시키기 위해, 시설의 Z값(높이·고도)을 동형암호로 암호화한 채로 연산을 수행하여 원본 값은 절대 노출하지 않으면서도 "기준 초과 여부"라는 판단 결과만 제공하는 서비스를 구현합니다.

항목 내용
개발 기간 2주
UI Streamlit
배포 AWS (EC2/ECS + S3)

🧩 문제 정의

  • 군사시설 등 공개제한구역은 관련 규정에 따라 고도·3차원 좌표 등 정밀 위치정보 공개가 제한됨
  • 인근 신축 건물의 일조권 판단을 위해서는 해당 시설의 높이 정보가 필요함
  • → **"안보상 비공개"**와 **"민간의 알 권리"**가 충돌하는 구조적 문제
  • 해법: Z값을 복호화하지 않고도 연산 자체를 암호화된 상태로 수행하는 동형암호 기술 적용

👤 사용자 흐름

① 사용자가 신축 건물 정보(위치 + 높이) 입력
        │
② 인근 반경 내 공개제한시설 자동 검색 (BBOX/반경 범위검색)
        │
③ 암호화된 시설 Z값 ↔ 사용자 입력 높이(평문) 혼합 연산 비교
        │
④ 기준 초과 / 일조권 침해 여부만 토큰 형태로 판정 반환
        │
⑤ 지도에는 격자 단위로만 결과 시각화 (원본 좌표·높이 비노출)

입력 데이터 두 갈래

  • 관리자/기관 입력 : 공개제한시설 위치(X,Y)·높이(Z) CSV 업로드 → Z값만 CKKS 암호화 저장
  • 사용자 입력 : 신축 건물의 위치·설계 높이를 화면에서 직접 입력 (평문, 별도 데이터셋 불필요)

✅ 체크포인트 대응

체크포인트 적용 방식 (Z값 기준)
① 암호화 저장 건물 높이·시설 고도(Z값)를 CKKS로 암호화 저장 (X,Y는 지도 표출용 평문 유지)
② 범위검색 반경/구역 내 기준 초과 시설을 암호화된 Z값 비교 연산으로 검색·판정
③ 시각화 대안 격자 단위 위험도(초과/미초과)만 색상 표시 + 서버 렌더링 후 결과 전달
④ 토큰 참조값 HE:datasetId:buildingIndex 형태 참조 토큰만 반환, 원본 Z값은 서버 내부에서만 취급

⚙️ 핵심 기능

  • 🔒 Z값 암호화 저장 — 공개제한시설 고도를 CKKS 동형암호문으로 저장
  • 🔍 범위검색 — 지정 반경/구역 내 기준 초과 시설 검색
  • 암호문-평문 혼합 연산 — 사용자 입력 높이와 암호화 Z값 비교
  • ☀️ 일조량 분석 — 월별·시간대별 태양 고도 기반 그림자 영역 계산
  • 🗺️ 격자 기반 시각화 — 원본 좌표 비노출, 위험도만 색상 표시
  • 🔑 토큰 참조 응답 — 원본 값 대신 참조 토큰만 클라이언트에 반환
  • 🤖 AI Agent — 자연어 요청 → 파라미터 추출 → 함수 호출 → 결과 요약
  • 📚 RAG 법령 질의응답 — 보안관리규정 등 문서 기반 Q&A

🛠️ 기술 스택

구분 내용
UI/프론트엔드 Streamlit
동형암호 CKKS 기반 HE 라이브러리 (Pyfhel / OpenFHE 검토 후 확정)
공간정보 데이터 V-World 오픈API (건물/DEM/행정구역), 기상청 오픈API (일조·기상조건)
AI Agent Function Calling 기반 자연어 파라미터 추출 및 함수 실행
RAG 법령 문서 임베딩 기반 질의응답
개발 도구 Claude Code (Claude Extension)
배포 단일 Dockerfile로 app.py 전체(HE/geo/agent/rag 포함)를 하나의 컨테이너로 패키징 → AWS EC2/ECS, S3

🗄️ 데이터 소스

구분 출처 비고
공개제한시설 데이터 자체 생성 (가상/샘플) 실제 데이터 취득 불가 → 임의 좌표·높이 생성 또는 공개 건물 mock 처리
배경 공간정보 V-World 오픈API 건물 footprint, DEM, 행정경계
기상/일조 조건 기상청 오픈API 날짜별 일사량·기상조건
신축 건물 정보 사용자 직접 입력 데이터셋 아님, Streamlit 화면에서 수집

📅 개발 일정 (2주)

주차 기간 내용
Week 1 1~2일차 요구사항 정리, API 연동, 가상 데이터셋 생성, HE 라이브러리 셋업
Week 1 3~4일차 Z값 CKKS 암호화 저장 구현, 사용자 입력 폼 설계
Week 1 5~7일차 범위검색 + 혼합 연산 판정 로직, 일조량 계산 구현
Week 2 8~9일차 격자 시각화·서버 렌더링, 토큰 참조 응답 구조 구현
Week 2 10~11일차 AI Agent, RAG 파이프라인 연동
Week 2 12일차 AWS 배포, 성능 최적화
Week 2 13일차 통합 테스트 및 버그 수정
Week 2 14일차 발표자료 준비 및 최종 점검

🚀 시작하기

# 저장소 클론
git clone <repo-url>
cd zecret

# 의존성 설치
pip install -r requirements.txt

# 로컬 실행
streamlit run app.py

Docker로 실행 (단일 컨테이너, app.py + src/he·geo·agent·rag 전체 포함):

docker build -t zecret .
docker run --rm -p 8501:8501 --env-file .env zecret

환경 변수 (예시)

VWORLD_API_KEY=your_vworld_api_key
KMA_API_KEY=your_weather_api_key
AWS_ACCESS_KEY_ID=your_aws_key
AWS_SECRET_ACCESS_KEY=your_aws_secret

⚠️ 리스크 및 대응

리스크 대응 방안
동형암호 연산 비용·속도 파라미터 최소화 후 필요 시에만 부트스트래핑
공개제한시설 실데이터 부재 가상/샘플 데이터로 대체, PoC 목적임을 명시
2주 내 다기능 구현 부담 체크포인트 4종 우선 구현 후 AI Agent·RAG 순차 추가

📄 License

MIT License

About

군사시설 등 공개제한구역의 고도(z)값을 암호화된 상태로 유지한 채, 인근 건축물의 일조권 침해 여부를 판단하는 동형암호(HE) 기반 공간분석 서비스

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors