bibimbap/.serena/memories/java-crypto-verify-via-jdk-...

26 lines
1.5 KiB
Markdown

# 호스트 JDK 부재 시 Java 암호 로직 교차검증 패턴
bibimbap 호스트엔 JDK 없음(빌드/실행은 Docker 경로). 그래서 생성한 password_hash 등이
**실제 Java 코드 경로로 검증되는지**를 추정으로 닫지 말고 컨테이너로 실행 증거를 만든다.
## 패턴
1. 검증 대상 로직을 단일 .java 로 복제(예: `UserController.verifyPassword` 그대로).
2. JRE-only 이미지(`bibimbap-app:latest`)는 `java File.java` 소스모드 불가
(`jdk.compiler` 모듈 없음 → `InternalError: Module jdk.compiler not in boot Layer`).
3. JDK 이미지로 컴파일+실행:
```
docker run --rm -v /tmp/HashVerify.java:/tmp/HashVerify.java:ro \
--entrypoint sh eclipse-temurin:21-jdk \
-c 'javac -d /out /tmp/HashVerify.java && java -cp /out HashVerify'
```
4. **positive + negative 둘 다** 확인(올바른 비번=true, 틀린 비번=false). 한쪽만 true 는 불충분.
## 왜
- self-report("스펙상 맞을 것") 대신 실행 증거로 AC 를 닫음.
- Python `hashlib.pbkdf2_hmac('sha256',...)` 와 Java `PBKDF2WithHmacSHA256` 는 byte-identical 이지만,
"동일하다"는 가정 자체를 실제 Java 경로 실행으로 검증.
- 호스트 `timeout` 명령은 macOS 기본 미존재(gtimeout). `/usr/bin/java` 는 JRE 없는 스텁일 수 있음.
일반화: 호스트에 런타임 없을 때 "추정으로 닫기" 대신 throwaway 컨테이너로 실행 증거 확보.
근거 세션: .atp/work-session/20260618-121419.