Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .idea/entlib-native.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

23 changes: 0 additions & 23 deletions AGES.md

This file was deleted.

23 changes: 0 additions & 23 deletions AGES_EN.md

This file was deleted.

3 changes: 3 additions & 0 deletions COMPLIANCE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# 인증 및 규정 준수 사항

작업 진행 중.
3 changes: 3 additions & 0 deletions COMPLIANCE_EN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Certification or Compliance

In Progressss...
3 changes: 3 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,13 @@ strip = true
### INTERNAL CORE DEPENDENCIES ###
entlib-native-ffi = { path = "./internal/ffi", version = "1.1.2-Alpha" }
entlib-native-quantum-util = { path = "./internal/quantum-util", version = "1.1.2-Alpha" }
### EXTERNAL DEPENDENCIES ###
tokio = { version = "1", features = ["rt", "process"] }
### INTERNAL CRYPTO DEPENDENCIES ###
entlib-native-base64 = { path = "./crypto/base64", version = "1.1.2-Alpha" }
entlib-native-constant-time = { path = "./crypto/constant-time", version = "1.1.2-Alpha" }
entlib-native-core-secure = { path = "./crypto/core-secure", version = "1.1.2-Alpha" }
entlib-native-rng = { path = "./crypto/rng", version = "1.1.2-Alpha" }
entlib-native-sha2 = { path = "./crypto/sha2", version = "1.1.2-Alpha" }
entlib-native-sha3 = { path = "./crypto/sha3", version = "1.1.2-Alpha" }
entlib-native-chacha20 = { path = "./crypto/chacha20", version = "1.1.2-Alpha" }
3 changes: 3 additions & 0 deletions INTRODUCTION.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

> [English INTRODUCTION](INTRODUCTION_EN.md)

> [!WARNING]
> 이 문서의 내용은 현재 `entlib-native`의 기능과 사뭇 다를 수 있습니다!

[얽힘 라이브러리](https://github.com/Quant-Off/entanglementlib)의 핵심 로직은 모두 이 [Rust 기반 네이티브 라이브러리](https://github.com/Quant-Off/entlib-native)에서 진행됩니다. 이 문서에선 편하게 "네이티브"라고 부르겠습니다.

이 문서에서, 이 네이티브가 얽힘 라이브러리와 어떻게 동작하는지와, 보안 작업을 어떻게 수행하는지 기술적으로 정확히 짚어드리고 싶지만 이 내용은 매-우 방대하기 떄문에 따로 [우리 문서 사이트](https://docs.qu4nt.space/docs/projects/entanglementlib/entlib-native)에 세밀히 정리해두겠습니다.
Expand Down
3 changes: 3 additions & 0 deletions INTRODUCTION_EN.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

> [Korean INTRODUCTION](INTRODUCTION.md)

> [!WARNING]
> The content of this document may differ significantly from the current functionality of `entlib-native`!

The core logic of the [EntanglementLib](https://github.com/Quant-Off/entanglementlib) is all processed within this [Rust-based native library](https://github.com/Quant-Off/entlib-native). In this document, we will simply refer to it as "Native".

In this document, I would like to technically pinpoint exactly how this Native works with the EntanglementLib and how it performs security operations, but since this content is extremely vast, I will organize it in detail separately on [our documentation site](https://docs.qu4nt.space/en/docs/projects/entanglementlib/entlib-native).
Expand Down
3 changes: 0 additions & 3 deletions NIST-ACVP.md

This file was deleted.

56 changes: 49 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,57 @@

> [이 라이브러리는 무슨 기능을 할까요?](INTRODUCTION.md) 기술에 대한 세부적 설명은 [퀀트 팀 공개 문서](https://docs.qu4nt.space/docs/projects/entanglementlib/entlib-native) 에서 확인할 수 있습니다.

[Rust의 소유권 개념](https://doc.rust-kr.org/ch04-00-understanding-ownership.html)은 저의 흥미를 유발하는 데 완벽하게 성공했고, 복합적인 Rust만의 특색있는 개발 방법(컴파일러의 메모리 안정성, 하드웨어 수준의 제어 등...)을 통해 [얽힘 라이브러리](https://github.com/Quant-Off/entanglementlib)를 안전하게 구현하는 데 목표를 두고자 했습니다.
[얽힘 라이브러리(EntanglementLib)](https://github.com/Quant-Off/entanglementlib)의 핵심적 기능은 Rust 기반의 네이티브 라이브러리에 있습니다. 모든 보안 연산을 이 네이티브에서 수행하는 겁니다.

얽힘 라이브러리 내에서 [Linker API (JEP389)](https://openjdk.org/jeps/389)를 사용하여 구현됩니다. 이 모듈은 전통적 방법이지만 어렵고 불안정한 JNI(Java Native Interface)로 네이티브 메소드 호출 작업을 수행하는 것을 넘어 코드와 데이터 복사 오버헤드 없이 Java와 Rust가 동일한 메모리 주소를 공유할 수 있도록 돕습니다.
EntanglementLib의 보안 기능을 완벽히 수행하기 위한 네이티브 베이스 언어는 Rust가 가장 잘 어울립니다. 이 언어의 가장 큰 장점은 성능 저하 없이 메모리 안정성을 보장하는 거예요. 세부적으로 [소유권 개념(Ownership)](https://doc.rust-kr.org/ch04-00-understanding-ownership.html)은 자원 관리를 용이하게 하고, **데이터 경쟁 없는 동시성 기능**은 통해 멀티 스레드 환경에서도 보안성을 강화해줍니다. Python이나 JPMS(Java Platform Module System)와 일관된 모듈 관리, 캡슐화가 간편한 등, 언어 자체가 유연한 특성을 가지고 있으며 FFI(Foreign Function Interface)로 Java와 간편히 연결되는 것은 충분히 매력으로 다가옵니다.

> [이 문서](AGES.md)에서 최초 공개 버전부터 이 버전까지의 일대기를 확인하실 수 있습니다.
EntanglementLib의 모든 보안 연산은 이 네이티브에서 수행되죠. 구체적으로 다음의 기능을 제공합니다.

- [X] 하드웨어 진난수, 혼합 난수, 양자난수(Quantum RNG) 생성
- [X] AEAD 암호화(ChaCha20)
- [X] 메모리 소거를 보장하는 보안 버퍼(Secure Buffer)
- [X] 상수-시간(Constant-Time) 연산
- [X] 해시(SHA2, SHA3, SHAKE 포함)

각 기능은 개별 크레이트로 분리되어 관리됩니다. 루트는 가상 매니페스트로 구성되어 있어 하위 크레이트를 관리하기 용이하죠. 또한 Java 측에서 이 네이티브를 사용할 때 잘못된 호출을 원천적으로 차단하기 위해 FFI 함수를 구현한 크레이트가 존재합니다. 이 크레이트는 Java 측에서 사용되어야 할 주요 함수를 전달하는 용도로 사용됩니다.

이 네이티브 라이브러리는 핵심 보안 기능 구현에 있어 외부 의존성(크레이트)을 사용하지 않습니다. 다르게 말해 외부로부터 들여오는 모든 자원을 기본적으로 신뢰하지 않는다는 겁니다. 이런 개발 철학은 **Zero Trust 원칙**을 지지하고, 이렇게 만들어진 하나의 결과물(얽힘 라이브러리)은 폐쇄 환경에서도 원활히 동작하게 됩니다. 이는 **Air-Gapped Ready 라는 원칙**에 부합합니다.

궁극적으로 이 네이티브는 엄격한 환경에서 자란 귀중한 자원으로서, 얽힘 라이브러리에서 적극적으로 안전하게 사용됩니다.

## 향후 계획

이 네이티브는 아직 갈 길이 멉니다. 지원되는 고전적 암호화 알고리즘 모듈을 다양하게 구현해야 합니다.

- [ ] AES(128, 192, 256)
- [ ] ARIA(128, 192, 256)
- [ ] RSA(2048, 4096, 8192)
- [ ] ED25519, ED448 서명
- [ ] X25519, X448 키 합의

이 뿐만 아니라 HMAC, HKDF 등의 암호학적 필수 기능도 제공되어야 합니다.

양자-내성 암호화(Post-Quantum Cryptography, PQC) 알고리즘은 다음의 목표를 가집니다.

- [ ] [FIPS 203(Module Lattice-based Key Encapsulate Mechanism, ML-KEM)](https://csrc.nist.gov/pubs/fips/203/final)
- [ ] [FIPS 204(Module Lattice-based Digital Signature Algorithm, ML-DSA)](https://csrc.nist.gov/pubs/fips/204/final)
- [ ] [FIPS 205(Stateless Hash-based Digital Signature Algorithm, SLH-DSA)](https://csrc.nist.gov/pubs/fips/205/final)

위 PQC 알고리즘이 구현되면 다음의 TLS 기능도 제공되어야 합니다.

- [ ] TLS 1.3
- [ ] [`draft-ietf-tls-ecdhe-mlkem`](https://datatracker.ietf.org/doc/draft-ietf-tls-ecdhe-mlkem/)에 따른 X25519MLKEM768

PKIX나 JWT 및 CWT, OTP 등, 아직 갈 길이 멀다는 것이 실감됩니다.

## 인증 및 규정 준수 필요

구현 뿐만이 아닙니다. 이 네이티브에서 구현되는 모든 기능은 국제적 인증 기관이 명시한 기능의 보안 구현(명세) 상황을 완전히 따라야 하고, 정식적인 인증을 받아야 합니다. 그 전까진 어떤 알고리즘도 '안전'하다고 판단하진 않습니다. 숨겨진 변수는 언제든 나타나기 마련이니까요.

따라서 이 네이티브의 모든 기능을 사용하신다면 반드시 '살험적(experimental)' 기능으로 제공하거나, 사용하시길 바랍니다.

> [!NOTE]
> 엄격한 인증 및 규정 심사를 통과한 기능은 즉각적으로 업데이트히겠습니다. [이 문서](COMPLIANCE.md)에서 해당 정보를 확인할 수 있도록 하겠습니다.

# 영감 및 기여

Expand All @@ -17,10 +63,6 @@
> [!TIP]
> 여러분의 피드백은 언제나 아주 큰 힘이 됩니다. 이 프로젝트에 기여하고자 한다면 [이 곳](CONTRIBUTION.md)을 참고해주세요!

# Alpha 버전

이 네이티브 라이브러리는 `1.1.x` 릴리즈 출시에 대한 준비를 마쳐도 곧바로 출시되진 않습니다. 이에 세밀하고 또 정밀하게 코드를 검토하고, 그 환경을 원활히 구축하기 위해 지금 이 시점에서 알파 버전으로 우선 공개하겠습니다.

# 벤치마킹

이 네이티브 라이브러리의 벤치마킹은 `criterion` 크레이트를 통해 진행됩니다. 자세한 각 벤치마킹 결과는 [benchmarks 디렉토리 하위](benchmarks)에서 확인하실 수 있습니다.
Loading