안녕하세요.
담당 매니저 김수민입니다.
기간제(상주) 프로젝트 희망 근무 시작일을
등록해 주시면, 파트너님의 일정에 맞는
적합한 프로젝트를 추천해 드려요.
플러스
Raw Socket 양자-내성 암호화 및 기타 유틸리티 제공, 얽힘 라이브러리
개발 · 기획
기타
기타(내부 시스템), 네트워크ㆍ서버 운영, 내부 시스템 운영
프로젝트 배경
1. 철학

얽힘 라이브러리의 모든 설계는 보안성(security) 을 최우선 원칙으로 합니다. 라이브러리는 잠재적 보안 취약점을 원천적으로 방지하고, 데이터 무결성을 보장하도록 구현되었습니다. 두 번째 핵심 가치는 안정성(stability) 으로, 예측 가능하고 일관된 성능을 보장하기 위해 메모리 효율성을 극대화하고 체계적인 오류 처리 메커니즘을 갖추었습니다.


2. 해결하고자 하는 문제

- Java 모듈 시스템(JPMS)과 리플렉션의 충돌 문제 해결이 중요시됩니다.
KeyDestroyHelper 클래스에서 리플렉션을 사용하여 BouncyCastle 내부나 자바 표준 라이브러리의 private 필드를 수정하고 있습니다. 하지만 Java 17 이후 강력한 캡슐화(strong encapsulation) 정책으로 인해 실행 시 JVM 옵션 없이는 InaccessibleObjectException 예외가 발생할 확률이 매우 높습니다.

- 성능 대 보안 트레이드오프
모든 입출력에 대해 방어적 복사(deep copy)를 수행하고 있습니다. 수 기가바이트 단위의 대용량 데이터를 처리하거나 높은 처리량(Tick Per Second, TPS)이 필요한 서버 환경에서는 잦은 메모리 할당과 가비지 컬렉터 부하로 성능 저하가 발생할 수 있습니다.

- 난수 및 논스(nonce) 관리
ChaCha20Poly1305 클래스에서 팩토리 클래스의 난수 상수를 사용해 논스값을 생성합니다. 같은 키로 Nonce가 재사용되면 ChaCha20Poly1305의 보안성은 완전히 무너지게 됩니다.
프로젝트 성과
데이터 청크별 처리
서명 및 서명 검증 작업 시 서명 또는 키 사이즈에 따라 처리 시간이 지연될 수 있습니다. 이 문제를 해결하기 위해 "청크별 처리" 기능을 도입하여 해결했습니다.
파일 생성도 안전하게
파일 생성에는 기본적으로 NIO API를 사용하여 메모리 효율을 높였고, 트래버셜 공격 방지와 해시 검증 작업을 추가하여 안전하게 파일을 관리할 수 있도록 설계했습니다.
POSIX 권한 관리 기능 추가
민감 데이터에 대해 I/O 처리가 필요불가결한 경우 최소 권한을 적용하기 위해 POSIX 권한 관리 기능을 구현했습니다.
퀀트의 새로운 양자-내성 암호화 알고리즘 연구
새로운 알고리즘을 연구하기 위해 experimental 패키지를 별도 처리하여 연구용 파라미터 관리 등의 수학적 처리를 원활하게 하기 위한 몇 가지 도구를 준비했습니다.
리소스 관리 및 국제화(i18n) 지원
다양한 국적의 사용자가 원활히 사용할 수 있도록 국제화 기능을 추가했고, 국제화 파일을 간단히 작성 및 수정하여 등록할 수 있도록 설계했습니다. 구성만 변경하면 출력 언어를 변경할 수 있습니다.
핵심 기능
양자-내성 및 고전 암호화 알고리즘 기능
얽힘 라이브러리에서 모든 암호화 알고리즘은 간단히 사용하고, 안전히 소거하는 것이 핵심으로 작용합니다. 이 기능을 구현하기 위해 캡슐화와 소거 방식에 시간을 투자했습니다.
리플렉션을 사용한 내부 민감 변수 소거
테스트한 결과, 내부적으로 정의되는 민감 변수의 데이터 타입은 바이트 배열 및 대수 타입이었습니다. 이를 타게팅하여 빠르고 안전하게 키를 소거하도록 했습니다.
국제화(ii18n)
얽힘 라이브러리는 다양한 개발자가 양자 보안에 대해 연구하고 프로젝트를 사용(기여)할 수 있도록 지원을 아끼지 않고자 합니다. 따라서 다양한 국적의 개발자를 위해 언어를 차별할 수 있는 기능을 구현했습니다.
사용자 설정 리소스 관리
사용자가 프로젝트 내에서 간단히 리소스를 참조하기 위한 기능을 추가했습니다. 경로만 전달하면 간단히 해당 리소스를 참조하도록 할 수 있고, 직렬화 및 역직렬화에 대한 도구도 제공됩니다.
진행 단계
얽힘 라이브러리 아이디어 스케치
2025.11.
25.11월 초에 원활한 라이브러리 설계를 위해 양자-내성 암호화 알고리즘을 어떻게 구현 또는 래핑해야 할지 고민했고, BouncyCastle 을 통해 핵심 기능을 구현하고, 데이터를 파기하는 로직을 연구했습니다.
팩토리 패턴 구현 및 캡슐화
2025.11.
중앙에서 연산을 처리하고, 연산이 필요한 클래스는 캡슐화하기위해 인터페이스를 통해 분리했습니다. 사용자가 알고리즘이 구현하는 인터페이스를 불러와 메커니즘을 손쉽게 관리할 수 있도록 설계했습니다.
키 소거 아이디어
2025.11.
키 소거를 위해 JCA에 기본 재공되는 destroy 로직을 사용하기도 했지만, 보안 취약점을 고려하여 리플렉션을 통해 내부에 정의된 핵심 매개변수를 지우는 것으로 해결했습니다. 여전히 취약점 제거 의무가 있습니다
최적화 및 테스트
2025.12.
12월은 최적화와 테스트에 소비했습니다. 알고리즘의 보안성을 감사하고, 메모리 누수를 확인하고, 수학적인 검증을 통해 라이브러리의 완성도를 높혔습니다.
완료 이후
2025.12.
라이브러리가 개발된 이후 깃허브에 게시하여 다양한 개발자들의 피드백을 받고 수정해나가고자 합니다. 이는 이 라이브러리의 꽃이라고 할 수 있으며, 부족한 부분을 계속 고쳐나갈 것입니다.
프로젝트 상세
얽힘 라이브러리(EntanglementLib)는 고보증(High-Assurance) 양자 내성 암호화 라이브러리입니다.

1. 개요

EntanglementLib은 다가올 양자 컴퓨팅 시대의 보안 위협("Harvest Now, Decrypt Later")에 선제적으로 대응하기 위해 설계된 Java 기반의 양자 내성 암호(Post-Quantum Cryptography, PQC) 라이브러리입니다.

본 프로젝트는 제가 진행 중인 데이터베이스 보안 플랫폼 "블루-브릿지(Blue-Bridge)"의 핵심 암호화 모듈로 개발되었습니다. 단순히 암호화 알고리즘을 호출하는 것을 넘어 Java 언어의 특성(가비지 컬렉션, 불변 객체 등)으로 인해 발생할 수 있는 메모리 내 민감 정보 잔존(data remanence) 문제를 해결하고, NIST 표준 PQC 알고리즘을 엄격하게 구현하는 데 초점을 맞추었습니다.



2. 기술 스택

- 언어: Java 24 (Preview Features 활용)
- 코어 암호화 라이브러리: BouncyCastle (jdk18on:1.83)
- 빌드 도구: Gradle Kotlin DSL
- 핵심 알고리즘:
- KEM(Key Encapsulation): ML-KEM (Kyber)
- DS(Digital Signature): ML-DSA (Dilithium), SLH-DSA (Sphincs+)
- Symmetric: ChaCha20, ChaCha20-Poly1305 (RFC 7539)



3. 핵심 기술 및 구현 상세

>>>>> 3-1. NIST 표준 양자 내성 암호(PQC) 구현

고전 암호화 알고리즘 뿐 아니라 FIPS 203, 204, 205 등의 미국 국립표준기술연구소(NIST)에서 표준화한 최신 양자 내성 알고리즘을 완벽하게 지원합니다.

- ML-KEM (Kyber): 양자 컴퓨터의 쇼어 알고리즘에 내성을 가진 격자 기반 키 캡슐화 메커니즘을 구현하여, 안전한 키 교환을 보장합니다.
- ML-DSA (Dilithium): 격자 기반 전자 서명 알고리즘을 통해 인증서 및 데이터 무결성을 검증하며, 기존 RSA/ECDSA를 대체합니다.
- Hybrid TLS 1.3: 내부 클래스 EntTCP 및 EntSSL 클래스를 통해 기존 TCP 소켓 통신에 PQC 서명(ML-DSA-87, SLH-DSA 등)을 강제하는 하이브리드 TLS 1.3 환경을 구축했습니다.

>>>>> 3-2. 극도의 메모리 보안

Java의 자동 메모리 관리로 인해 비밀키나 평문이 메모리에 불필요하게 오래 남는 취약점을 기술적으로 해결했습니다.

- SecureCharBuffer: 문자열(String) 대신 문자 배열(char[])을 사용하는 컨테이너를 직접 구현했습니다. 컴파일러의 최적화(dead store elimination)를 우회하는 정교한 소거(wiping) 로직을 포함하여, 사용 직후 물리적 메모리에서 데이터를 덮어씁니다.
- Reflection-based Key Destruction: KeyDestroyHelper 클래스를 통해 서드파티 라이브러리의 PrivateKey 객체 내부 필드까지 리플렉션으로 추적하여 강제 영소거(zeroing)합니다. 이는 메모리 덤프 공격에 대한 강력한 방어책입니다.
- 방어적 복사(defensive copying): 모든 암호화 서비스의 입출력 과정에서 내부 배열의 참조가 유출되지 않도록 깊은 복사(deep copy)를 수행합니다.

>>>>> 3-3. 안전한 아키텍처 설계

- AutoCloseable 패턴: 모든 암호화 인스턴스에 try-with-resources 패턴을 강제하여 비즈니스 로직 종료 즉시 키와 데이터가 파기되도록 설계했습니다.
- 팩토리 패턴: InternalFactory 클래스를 통해 구체적인 암호화 구현체를 캡슐화하고, EntLibCryptoService 인터페이스로 기능만 노출하여 유연성과 보안성을 동시에 확보했습니다.



4. 문제 해결 경험

- Challenge: Java 컴파일러(JIT)가 Arrays.fill()과 같은 메모리 소거 코드를 "불필요한 연산"으로 간주하여 최적화 과정에서 삭제(dead store elimination)할 위험이 있었습니다.
- Solution: SecureCharBuffer 클래스 내에 의미 없는 데이터를 쓰고(O(n)) 다시 0으로 초기화하는 다단계 로직을 구현하고, AtomicBoolean과 ReadWriteLock 객체를 통해 동시성 환경에서도 안전하게 파기가 이루어지도록 구현하여 최적화 방지와 스레드 안전성을 모두 달성했습니다.



5. 프로젝트의 의의

이 라이브러리는 "블루-브릿지" 프로젝트의 데이터베이스 보안 계층을 담당하며, 양자 컴퓨터가 상용화된 미래 시점에도 데이터의 기밀성(confidentiality)과 무결성(integrity)이 수학적으로 보장됨을 목표로 합니다.
Java 생태계에서 PQC를 가장 공격적이고 안전하게 도입한 사례 중 하나라고 자부합니다.
고전 알고리즘인 RSA를 사용하여 서명을 진행하고 있습니다.
PQC 알고리즘인 SLH-DSA, ML-DSA 알고리즘의 변형을 사용하여 TCP 서버를 열 수 있습니다.
SLH-DSA, ML-DSA 알고리즘을 통해 TCP 서버를 열고 TLSv1.3 프로토콜을 사용하여 서버와 클라이언트간의 통신을 관리할 수 있습니다.

비슷한 프로젝트를 준비 중이라면?
위시켓 매니저와 상담하세요.

참여 개발사와 미팅 연결

프로젝트 1:1 컨설팅 제공

무료로 프로젝트 등록하기

작업한 파트너 프로필 보기

ju******
개발 · 개인

프로젝트 정보

참여 기간
2025.11. ~ 2025.12.
참여율
참여율이 100%인 프로젝트는 해당 파트너님이 온전히 작업한 결과물입니다.
외부 공동 작업의 경우 기여도에 따라 참여율이 달라지며 역할, 프로젝트 설명을 통해 업무 분야 및 참여 범위를 확인할 수 있습니다.
100%
관련 기술
Java