Skip to content

Quant-Off/entanglementlib

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

92 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

EntanglementLib

Version README-Language License Language Qu4nt-Space-Discord

EntanglementLib

μ–½νž˜ 라이브러리(EntanglementLib)λŠ” λͺ¨λ“  λ³΄μ•ˆ 연산을 μ•ˆμ „ν•˜λ©°, λΉ λ₯΄κ²Œ μ²˜λ¦¬ν•˜λ„λ‘ μ„€κ³„λœ λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€. μ—°κ²°λœ Rust λ ˆμ΄μ–΄(λ„€μ΄ν‹°λΈŒ)λ₯Ό 톡해 κ³ μ „ 및 μ–‘μž-λ‚΄μ„± μ•”ν˜Έν™”(Post-Quantum Cryptography, PQC) κΈ°μˆ μ„ μ œκ³΅ν•˜λ©°, 이λ₯Ό μ‚¬μš©ν•œ λ―Έλž˜μ§€ν–₯적 TLS ν”„λ‘œν† μ½œμ„ μ œκ³΅ν•©λ‹ˆλ‹€.

기술

μ–½νž˜ λΌμ΄λΈŒλŸ¬λ¦¬λŠ” λͺ¨λ“  λ³΄μ•ˆ 연산을 Rust 기반 λ„€μ΄ν‹°λΈŒλ₯Ό 톡해 μˆ˜ν–‰ν•©λ‹ˆλ‹€. λ„€μ΄ν‹°λΈŒμ—μ„  heap λ©”λͺ¨λ¦¬ 할당에 λ”°λ₯Έ κ°€λΉ„μ§€ 컬렉터(Garbage Collection, GC)의 μ²­μ†Œ λ©”μ»€λ‹ˆμ¦˜μ—μ„œ 발발될 수 μžˆλŠ” λͺ¨λ“  λ³΄μ•ˆ 약점을 μ›μ²œμ μœΌλ‘œ λ°©μ§€ν•©λ‹ˆλ‹€. Java 츑의 민감 데이터λ₯Ό off-heap으둜 λ°›μ•„ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³ , 호좜자 λ˜λŠ” ν”Όν˜ΈμΆœμž νŒ¨ν„΄μ„ 톡해 ν•΄λ‹Ή ν¬μΈν„°μ˜ 데이터λ₯Ό μ¦‰κ°μ μœΌλ‘œ μ•ˆμ „ν•˜κ²Œ μ†Œκ±°ν•©λ‹ˆλ‹€.

Java μΈ‘μ—μ„œ λ„€μ΄ν‹°λΈŒμ™€ μƒν˜Έ μž‘μš©ν•  λ•Œ JNI(Java Native Interface) κΈ°λŠ₯을 μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 핡심 κΈ°μˆ μ€ JEP 389, JEP 454 κ°œμ„ μ•ˆμ— μ˜κ±°ν•œ 고급적 λ„€μ΄ν‹°λΈŒ 호좜 κΈ°λŠ₯인 Linker, FFM API(Foreign Function & Memory API)이며, λ„€μ΄ν‹°λΈŒ 츑에선 μΊ‘μŠν™”λœ λ‘œμ§μ„ 톡해 FFI(Foreign Function Interface)둜 μ—°λ™λ©λ‹ˆλ‹€.

Tip

λ„€μ΄ν‹°λΈŒμ— λŒ€ν•œ λ°°κ²½ 및 κ°œμš”κ°€ κΆκΈˆν•˜μ‹œλ‹€λ©΄ 이 곳을 μ°Έκ³ ν•˜μ„Έμš”.

λ˜λŠ” μ–½νž˜ 라이브러리의 배경에 λŒ€ν•΄ κΆκΈˆν•˜μ‹œλ‹€λ©΄ 이 곳을 μ°Έκ³ ν•˜μ„Έμš”.

이 라이브러리 λ‚΄μ—μ„œ μ‚¬μš©μžμ˜ λ°μ΄ν„°λŠ” λ°”μ΄νŠΈ λ°°μ—΄(byte[])μ΄λ‚˜ 문자 λ°°μ—΄(char[])둜 κ΄€λ¦¬λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ νƒ€μž…μ€ heap λ©”λͺ¨λ¦¬μ— μ“°κΈ°(write)λ˜μ–΄ GCμ—κ²Œ μ£Όλ„κΆŒμ„ μ€λ‹ˆλ‹€. μ΄λŸ¬ν•œ μ›μ‹œμ  μ‚¬μš© λŒ€μ‹  SensitiveDataContainer 객체λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 κ°μ²΄λŠ” 민감 λ°μ΄ν„°μ˜ μ†Œμœ κΆŒμ„ λ„˜κ²¨λ°›κ³  λ„€μ΄ν‹°λΈŒμ— μ•ˆμ „νžˆ λ„˜κ²¨ μž‘μ—… 처리λ₯Ό μ•ˆμ „ν•˜κ³  효율적으둜 ν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€. μ’€ 더 ꡬ체적으둜, ν•΄λ‹Ή κ°μ²΄λŠ” Rust의 RAII(Resource Acquisition Is Initialization) νŒ¨ν„΄κ³Ό μœ μ‚¬ν•˜κ²Œ μΈμŠ€ν„΄μŠ€ν™” μ‹œμ μ— μžμ›μ„ νšλ“ν•˜κ³  close() 호좜 μ‹œμ μ— μžμ›μ„ ν•΄μ œν•©λ‹ˆλ‹€.

λ©€ν‹°λͺ¨λ“ˆ

μ–½νž˜ λΌμ΄λΈŒλŸ¬λ¦¬λŠ” λ©€ν‹°λͺ¨λ“ˆ ν”„λ‘œμ νŠΈμž…λ‹ˆλ‹€. 각 λͺ¨λ“ˆμ˜ 역할은 μž‘μ—… 및 μ‹€μš©μ  μ–΄λ…Έν…Œμ΄μ…˜κ³Ό 각쒅 νŽΈμ˜μ„± 도ꡬλ₯Ό ν¬ν•¨ν•œ μœ ν‹Έλ¦¬ν‹°λ‘œ λ‚˜λˆ μ§‘λ‹ˆλ‹€. μ–΄λ…Έν…Œμ΄μ…˜ 및 μ½”μ–΄ λͺ¨λ“ˆμ€ λ³΄μ•ˆ λͺ¨λ“ˆμ—μ„œ ν•΅μ‹¬μ μœΌλ‘œ μ‚¬μš©λ˜μ§€λ§Œ, λ³΄μ•ˆ λͺ¨λ“ˆμ€ λ‹€λ₯Έ λͺ¨λ“ˆμ—μ„œ μ ˆλŒ€λ‘œ μ‚¬μš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λͺ¨λ“ˆ κΈ°λŠ₯
security 핡심 λ³΄μ•ˆ λͺ¨λ“ˆμž…λ‹ˆλ‹€. λ„€μ΄ν‹°λΈŒμ™€μ˜ μƒν˜Έ μž‘μš©μ„ μœ„ν•œ 둜직과, FFIλ₯Ό 톡해 μ—°λ™λœ κ°–κ°€μ§€ λ³΄μ•ˆ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.
core μ˜ˆμ™Έ, κ΅­μ œν™” 및 비동기, 청크 μž‘μ—…, λ¬Έμžμ—΄, 자료ꡬ쑰λ₯Ό κ΄€λ¦¬ν•˜λŠ” μœ ν‹Έλ¦¬ν‹° κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.
annotations κ°„νŽΈν•œ μ½”λ“œ 섀계 및 μ‚¬μš©μžμ˜ μ½”λ“œ 이해 λ³΅μž‘λ„λ₯Ό κ°œμ„ ν•˜κΈ° μœ„ν•œ μ–΄λ…Έν…Œμ΄μ…˜μ΄ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
internal-shared-server 폐쇄 ν™˜κ²½μ˜ 인프라λ₯Ό ν˜•μ„± 및 관리할 수 μžˆλŠ” κΈ°λŠ₯이 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

주의 및 λ³΄μ•ˆ κ³΅κΈ‰μž μ„€μ •

μ–½νž˜ 라이브러리(Java)μ—μ„œ λ„€μ΄ν‹°λΈŒλ‘œ ν˜ΈμΆœλ˜λŠ” λ³΄μ•ˆ κΈ°λŠ₯(Rust)의 μ•”ν˜Έν•™μ  검증이 μΆ©λΆ„νžˆ 이루어지지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€. Team QuantλŠ” entlib-native의 μ™„μ „ν•œ 검증을 이루기 μœ„ν•΄ λ…Έλ ₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

Important

μ•”ν˜Έ λͺ¨λ“ˆμ„ κ²€μ¦λ°›λŠ” λ°μ—λŠ” λ§Žμ€ μ‹œκ°„μ΄ ν•„μš”ν•©λ‹ˆλ‹€. λ”°λΌμ„œ entlib-native κ³΅κΈ‰μžλŠ” "λ°˜λ“œμ‹œ μ‹€ν—˜(연ꡬ)적 μš©λ„λ‘œλ§Œ" μ‚¬μš©ν•΄μ£Όμ„Έμš”.

μ—¬λŸ¬λΆ„μ€ Rust λ ˆμ΄μ–΄μ— κ΅¬ν˜„λœ 'λ³΄μ•ˆ κΈ°λŠ₯ κ³΅κΈ‰μž'λ₯Ό entlib-nativeκ°€ μ•„λ‹Œ, '이미 κ²€μ¦λœ μ•ˆμ „ν•œ κ³΅κΈ‰μž'λ₯Ό μ‚¬μš©ν•˜λ„λ‘ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ³΅κΈ‰μž μ„€μ •

FFI 경계λ₯Ό 톡해 μ‚¬μš©λ˜λŠ” λͺ¨λ“  λ³΄μ•ˆ κΈ°λŠ₯(λ‹€μ΄μ œμŠ€νŠΈ, 인코딩, AEAD, λ‚œμˆ˜)은 CryptoProviderConfig둜 λ°±μ—”λ“œλ₯Ό 선택할 수 μžˆμŠ΅λ‹ˆλ‹€. μ„ νƒμ§€λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  • CryptoBackend#JDK_VERIFIED - JDK ν‘œμ€€ JCA(MessageDigest, Cipher, SecureRandom, java.util.Base64, HexFormat)λ₯Ό μ‚¬μš©ν•˜λŠ” κ²€μ¦λœ λ°±μ—”λ“œ (κΈ°λ³Έκ°’)
  • CryptoBackend#ENTLIB_NATIVE - entlib-native FFI λ°±μ—”λ“œ (미검증, μ‹€ν—˜μš©)
  • μ‚¬μš©μžκ°€ 직접 κ΅¬ν˜„ν•œ 검증 κ³΅κΈ‰μž μΈμŠ€ν„΄μŠ€ μ£Όμž… (예: HSM, PKCS#11, 사내 검증 라이브러리)

기본값은 κ²€μ¦λœ JDK λ°±μ—”λ“œμž…λ‹ˆλ‹€. λ”°λΌμ„œ 별도 μ„€μ • 없이 μ΄ˆκΈ°ν™”ν•˜λ©΄ 미검증 λ„€μ΄ν‹°λΈŒ λŒ€μ‹  κ²€μ¦λœ κ³΅κΈ‰μžκ°€ μ‚¬μš©λ©λ‹ˆλ‹€.

// 1) κΈ°λ³Έκ°’ (전체 κ²€μ¦λœ JDK λ°±μ—”λ“œ)
EntanglementLibSecurityFacade.initialize(
        EntanglementLibSecurityConfig.create(null, HeuristicArenaFactory.ArenaMode.AUTO));

// 2) μ „μ—­ + κΈ°λŠ₯별 ν˜Όν•© + μ™ΈλΆ€ JCA κ³΅κΈ‰μž(BouncyCastle λ“±) + μ»€μŠ€ν…€ κ³΅κΈ‰μž μ£Όμž…
CryptoProviderConfig providers = CryptoProviderConfig.builder()
        .useVerifiedProviders()            // μ „μ—­ 기본을 κ²€μ¦λœ JDK둜
        .aead(CryptoBackend.ENTLIB_NATIVE) // AEAD만 λ„€μ΄ν‹°λΈŒλ‘œ (μ‹€ν—˜)
        .jcaProviderName("BC")             // 검증 λ°±μ—”λ“œκ°€ μ‚¬μš©ν•  JCA κ³΅κΈ‰μžλͺ…
        .random(myVerifiedRandomProvider)  // λ‚œμˆ˜λŠ” μ‚¬μš©μž μ •μ˜ 검증 κ³΅κΈ‰μž
        .build();

EntanglementLibSecurityFacade.initialize(
        EntanglementLibSecurityConfig.create(
                nativeSpecContext, HeuristicArenaFactory.ArenaMode.AUTO, providers));

// 3) 전체 entlib-native (μ‹€ν—˜μš©)
EntanglementLibSecurityConfig.create(nativeSpecContext, null, CryptoProviderConfig.nativeDefaults());

Tip

λͺ¨λ“  κΈ°λŠ₯이 κ²€μ¦λœ(λ˜λŠ” μ»€μŠ€ν…€) κ³΅κΈ‰μžλ‘œ ν•΄μ„λ˜λ©΄(requiresNative() == false) μ–½νž˜ λΌμ΄λΈŒλŸ¬λ¦¬λŠ” 미검증 λ„€μ΄ν‹°λΈŒ λ°”μ΄λ„ˆλ¦¬λ₯Ό λ‘œλ“œν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 폐쇄 ν™˜κ²½μ—μ„œ λ„€μ΄ν‹°λΈŒ λ°”μ΄λ„ˆλ¦¬λ₯Ό λ°°ν¬ν•˜μ§€ μ•Šκ³ λ„ κ²€μ¦λœ λ³΄μ•ˆ μ—°μ‚°λ§Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Note

κ²€μ¦λœ JDK λ°±μ—”λ“œλŠ” JCA νŠΉμ„±μƒ μ—°μ‚° μ‹œκ°„ λ™μ•ˆ 민감 데이터가 JVM heap에 μž μ‹œ λ…ΈμΆœλ©λ‹ˆλ‹€. λΌμ΄λΈŒλŸ¬λ¦¬λŠ” μ‚¬μš©ν•œ μž„μ‹œ byte[]λ₯Ό μ¦‰μ‹œ 0으둜 μ†Œκ±°ν•˜μ§€λ§Œ, μ΄λŠ” κ²€μ¦λœ 정확성을 μœ„ν•œ μ˜λ„λœ μ ˆμΆ©μž…λ‹ˆλ‹€. λ˜ν•œ SHAKE(XOF) κ°€λ³€ 길이 좜λ ₯κ³Ό μ–‘μž λ„€νŠΈμ›Œν¬ λ‚œμˆ˜λŠ” JDK ν‘œμ€€μ— λŒ€μ‘μ΄ μ—†μ–΄ κ²€μ¦λœ λ°±μ—”λ“œμ—μ„œ μ§€μ›ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(λ„€μ΄ν‹°λΈŒ λ˜λŠ” XOF 지원 κ³΅κΈ‰μž ν•„μš”).

폐쇄망 곡유 μ„œλ²„

internal-shared-server(ISS) λͺ¨λ“ˆμ€ νμ‡„λ§μ—μ„œ μ—¬λŸ¬ λ‚΄λΆ€ λ…Έλ“œκ°€ μ ‘μ†ν•˜λŠ” λ³΄μ•ˆ 곡유 μ„œλ²„μž…λ‹ˆλ‹€. 곡개 인터넷 CA μ‹ λ’° 체인을 λ°°μ œν•˜κ³  사전 곡유 ν‚€(PSK)둜 양츑을 μƒν˜Έ μΈμ¦ν•˜λ©°, λͺ¨λ“  λ ˆμ½”λ“œλŠ” ChaCha20-Poly1305둜 λ³΄ν˜Έλ©λ‹ˆλ‹€. κ²€μ¦λœ JDK κ³΅κΈ‰μžλ§ŒμœΌλ‘œ λ™μž‘ν•˜λ―€λ‘œ λ„€μ΄ν‹°λΈŒ λ°”μ΄λ„ˆλ¦¬ 배포 없이 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ½”λ“œλ ˆλ²¨ μž„λ² λ“œ API(ISSServerΒ·ISSClient)와 CLI 두 경둜둜 μ œμ–΄ν•©λ‹ˆλ‹€.

Note

ν‚€ 확립에 DH/KEM을 μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ 순방ν–₯ λΉ„λ°€μ„±(PFS)은 μ œκ³΅ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. PSKκ°€ λ…ΈμΆœλ˜λ©΄ 과거·미래 νŠΈλž˜ν”½μ΄ μœ„ν—˜ν•˜λ―€λ‘œ κ°•ν•œ PSK와 주기적 ꡐ체둜 μš΄μš©ν•˜μ„Έμš”. μ„œλ²„λŠ” 기본적으둜 루프백(127.0.0.1)μ—λ§Œ λ°”μΈλ“œν•˜λ©°, LAN λ…ΈμΆœμ€ λͺ…μ‹œμ  옡트인(opt-in)이 ν•„μš”ν•©λ‹ˆλ‹€.

μ‹€ν–‰ 파일 μ€€λΉ„

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 배포본을 μƒμ„±ν•˜λ©΄ μ‹€ν–‰ μŠ€ν¬λ¦½νŠΈκ°€ λ§Œλ“€μ–΄μ§‘λ‹ˆλ‹€.

./gradlew :internal-shared-server:installDist
# 생성 μœ„μΉ˜
# internal-shared-server/build/install/internal-shared-server/bin/internal-shared-server

# νŽΈμ˜μƒ alias 등둝 (선택)
alias iss="$(pwd)/internal-shared-server/build/install/internal-shared-server/bin/internal-shared-server"

λ˜λŠ” Gradle둜 λ°”λ‘œ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

./gradlew :internal-shared-server:run --args="--help"

CLI μ‚¬μš©λ²•

iss serve   --port N [--bind 127.0.0.1] (--psk-file F | --psk-env VAR)
            [--max-conn 64] [--allow-nonloopback] [--allow-peer IP]...
iss ping    --port N [--host 127.0.0.1] (--psk-file F | --psk-env VAR)
iss put     --port N [--host H] (--psk-file F | --psk-env VAR)
            --key K (--value V | --value-file F | --stdin)
iss get     --port N [--host H] (--psk-file F | --psk-env VAR) --key K [--out FILE]
iss del     --port N [--host H] (--psk-file F | --psk-env VAR) --key K
iss list    --port N [--host H] (--psk-file F | --psk-env VAR)
iss status  --port N [--host H] (--psk-file F | --psk-env VAR)
iss gen-psk [--bytes 32] [--out FILE]
iss --help | --version
λͺ…λ Ή μ„€λͺ…
serve μ„œλ²„λ₯Ό λ°”μΈλ“œν•˜κ³  μ—°κ²° 수용 μ‹œμž‘ (Ctrl-C 둜 μ’…λ£Œ)
ping ν•Έλ“œμ…°μ΄ν¬ ν›„ μ„œλ²„ 응닡 확인
put 킀에 값을 μ €μž₯ (값은 μΈμžΒ·νŒŒμΌΒ·ν‘œμ€€μž…λ ₯ 쀑 ν•˜λ‚˜)
get ν‚€μ˜ 값을 쑰회 (--out μ§€μ • μ‹œ 파일 μ €μž₯, μ—†μœΌλ©΄ ν‘œμ€€μΆœλ ₯, 미쑴재 μ‹œ 1)
del ν‚€λ₯Ό μ‚­μ œ
list μ €μž₯된 ν‚€ λͺ©λ‘ 좜λ ₯
status μ„œλ²„ μƒνƒœ 쑰회
gen-psk λ³΄μ•ˆ λ‚œμˆ˜λ‘œ PSK 생성 (--out μ—†μœΌλ©΄ hex λ₯Ό ν‘œμ€€μΆœλ ₯)

Important

PSKλŠ” 평문 λͺ…λ Ήν–‰ 인자둜 λ°›μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(ν”„λ‘œμ„ΈμŠ€ λͺ©λ‘ λ…ΈμΆœ λ°©μ§€). raw λ°”μ΄νŠΈ ν‚€ 파일(--psk-file) λ˜λŠ” hex ν™˜κ²½λ³€μˆ˜(--psk-env)둜만 μž…λ ₯ν•˜λ©°, μ΅œμ†Œ 32λ°”μ΄νŠΈλ₯Ό μš”κ΅¬ν•©λ‹ˆλ‹€. λ‘œκ·ΈλŠ” ν‘œμ€€μ˜€λ₯˜λ‘œ, λͺ…λ Ή κ²°κ³Ό λ°μ΄ν„°λŠ” ν‘œμ€€μΆœλ ₯으둜 λΆ„λ¦¬λ©λ‹ˆλ‹€.

λΉ λ₯Έ μ‹œμž‘

# 1) PSK 생성 (raw 32λ°”μ΄νŠΈ ν‚€ 파일, μ†Œμœ μž μ „μš© κΆŒν•œμœΌλ‘œ μ €μž₯)
iss gen-psk --out infra.psk

# 2) μ„œλ²„ 기동 (루프백 κΈ°λ³Έ)
iss serve --port 8443 --psk-file infra.psk

# 3) λ‹€λ₯Έ ν„°λ―Έλ„μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈ λͺ…λ Ή
iss ping   --port 8443 --psk-file infra.psk
iss put    --port 8443 --psk-file infra.psk --key greeting --value "Hello"
iss get    --port 8443 --psk-file infra.psk --key greeting
iss list   --port 8443 --psk-file infra.psk
iss status --port 8443 --psk-file infra.psk
iss del    --port 8443 --psk-file infra.psk --key greeting

# ν™˜κ²½λ³€μˆ˜(hex)둜 PSK 전달
export ISS_PSK=$(iss gen-psk)
iss ping --port 8443 --psk-env ISS_PSK

κΈ°μ—¬

μ—¬λŸ¬λΆ„μ˜ ν”Όλ“œλ°±μ„ 적극적으둜 받을 μ€€λΉ„κ°€ λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. μ–½νž˜ λΌμ΄λΈŒλŸ¬λ¦¬λŠ” λ‹¨μˆœνžˆ PQC μ•Œκ³ λ¦¬μ¦˜μ„ μ œκ³΅ν•˜λŠ” κ²ƒλ§Œμ΄ μ•„λ‹Œ, μ²΄κ³„μ μœΌλ‘œ μ‚¬μš©μž ν™˜κ²½μ˜ 인프라 λ³΄μ•ˆμ„ κ°μ‹œν•˜κ³  μ‚¬μš©μžμ—κ²Œ 해결책을 μ°Ύμ•„μ£ΌλŠ” 유λŠ₯ν•œ λ„κ΅¬λ‘œμ¨ μ‚¬μš©λ˜λ„λ‘ κ°œλ°œλ©λ‹ˆλ‹€. μ΅œμ‹  λ¦΄λ¦¬μ¦ˆλΆ€ν„΄ 이 신념에 κ°•λ ₯ν•œ μ΄ˆμ μ„ 맞좜 κ²ƒμž…λ‹ˆλ‹€.

TODO

μ–½νž˜ λΌμ΄λΈŒλŸ¬λ¦¬λŠ” λ―Έλž˜μ— 금육 및 λ³΄μ•ˆ 인프라 ν”„λ‘œλ•μ…˜μ—μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘ λ‹€μŒμ˜ TODOλ₯Ό λͺ…ν™•νžˆ ν•˜κ³ μž ν•©λ‹ˆλ‹€.

  • 폐쇄망 ν™˜κ²½ μœ μš©ν•œ μ‚¬μš©μ„ μœ„ν•œ Local Hosted μ›Ή 개발
    • ν˜„μž¬ ISSλŠ” CLI와 μž„λ² λ“œ API(ISSServerΒ·ISSClient)둜만 μ œμ–΄ν•©λ‹ˆλ‹€. μ›Ή 기반 관리 μ½˜μ†”μ€ 아직 μ—†μŠ΅λ‹ˆλ‹€.
  • TLS 톡신 둜직 μΆ”κ°€
    • ISS의 PSK μƒν˜Έ 인증 + ChaCha20-Poly1305 λ³΄μ•ˆ 채널은 κ΅¬ν˜„μ„ μ™„λ£Œν–ˆμŠ΅λ‹ˆλ‹€.
    • security λͺ¨λ“ˆμ— ExternalTLS νŒŒμ‚¬λ“œ 골격을 μΆ”κ°€ν–ˆμœΌλ‚˜, ML-KEM ν‚€ 확립과 ChaCha20-Poly1305 λ ˆμ½”λ“œ AEAD, RNG nonce 생성이 λ„€μ΄ν‹°λΈŒ FFI에 λ…ΈμΆœλ˜κΈ° μ „κΉŒμ§€ ν•Έλ“œμ…°μ΄ν¬λŠ” λΉ„ν™œμ„±(μŠ€ν…) μƒνƒœμž…λ‹ˆλ‹€.
  • 볡합 검증 μž‘μ—… μ€€λΉ„ 및 μˆ˜ν–‰
    • λ³΄μ•ˆ κ³΅κΈ‰μž SPI(CryptoProviderConfig)λ₯Ό μΆ”κ°€ν•΄ 미검증 λ„€μ΄ν‹°λΈŒ λŒ€μ‹  κ²€μ¦λœ JDK κ³΅κΈ‰μž(λ˜λŠ” μ»€μŠ€ν…€ κ³΅κΈ‰μž)λ₯Ό 선택할 수 μžˆμŠ΅λ‹ˆλ‹€. entlib-native 자체의 μ•”ν˜Έν•™μ  검증은 계속 μ§„ν–‰ μ€‘μž…λ‹ˆλ‹€.
  • μ»€μŠ€ν…€ μ˜ˆμ™Έ μ΅œμ ν™”
    • checked/unchecked 및 core/security κ³„μΈ΅μœΌλ‘œ λΆ„λ¦¬ν•œ μ˜ˆμ™Έ 체계와 i18n 연동 ExceptionLoggerλ₯Ό κ΅¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€.
  • JPMS 적용 (λ©€ν‹°λͺ¨λ“ˆ λ‚΄μ—μ„œλ„ νŒ¨ν‚€μ§€ λͺ¨λ“ˆν™”)
    • μ•ˆμ „ν•œ μΊ‘μŠν™”μ™€ μΌκ΄€λœ 호좜(λ˜λŠ” μ‚¬μš©) νŒ¨ν„΄μ΄ μ™„μ„±λ˜λ©΄ JPMSλ₯Ό 톡해 μΊ‘μŠν™”λœ νŒ¨ν‚€μ§€λ₯Ό λͺ¨λ“ˆλ‘œμ„œ κ΄€λ¦¬ν•˜λ €κ³  ν•©λ‹ˆλ‹€.
  • μ™ΈλΆ€ μ˜μ‘΄μ„± μ΅œμ†Œν™”
    • 1.1.0 λ¦΄λ¦¬μ¦ˆλΆ€ν„΄ BouncyCastle μ˜μ‘΄μ„±μ„ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©°, Lombok μ˜μ‘΄μ„±λ„ μ œκ±°ν–ˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬ μ½”λ“œ μž‘μ„±μ— ν•„μš”ν•œ λͺ‡ κ°€μ§€ μœ μš©ν•œ 도ꡬλ₯Ό μ œκ³΅ν•˜λŠ” μ˜μ‘΄μ„±μ€ μ—¬μ „νžˆ 남아 μžˆμ§€λ§Œ, 이듀도 끝내 μ΅œμ†Œν™”λ  μ˜ˆμ •μž…λ‹ˆλ‹€.
  • i18n μ—…λ°μ΄νŠΈ
    • core의 EntanglementLibCoreI18nκ³Ό en_USΒ·ko_KR λ©”μ‹œμ§€ λ²ˆλ“€μ„ κ°–μ·„μŠ΅λ‹ˆλ‹€. λ‹€λ§Œ ꡬ성 섀정에 따라 각 언어별 λ‘œκΉ…μ„ μžλ™ μ μš©ν•˜λŠ” 연동은 아직 더 닀듬어야 ν•©λ‹ˆλ‹€.

λΌμ΄μ„ μŠ€

λ³Έ ν”„λ‘œμ νŠΈλŠ” PolyForm Noncommercial License 1.0.0을 λ”°λ¦…λ‹ˆλ‹€. 이 ν”„λ‘œμ νŠΈ λ‚΄μ—μ„œ entlib-nativeλ₯Ό λ™μ‹œ κ΄€λ¦¬ν•˜λŠ” 탓에 λΌμ΄μ„ μŠ€κ°€ 가끔 MIT둜 잘λͺ» 반영될 λ•Œκ°€ μžˆμ§€λ§Œ, μ—¬μ „νžˆ PolyForm λΌμ΄μ„ μŠ€λ₯Ό λ”°λ₯Έλ‹€λŠ” 것을 μ°Έκ³ ν•΄μ£Όμ„Έμš”. 이 λΌμ΄μ„ μŠ€μ— κ΄€ν•΄ μžμ„Έν•œ λ‚΄μš©μ€ LICENSE νŒŒμΌμ„ μ°Έκ³ ν•˜μ„Έμš”.


λ³€κ²½ 사항

λ³€κ²½ 사항은 CHANGE.md λ¬Έμ„œμ—μ„œ ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€. 이 λ¬Έμ„œλŠ” 1.1.0 λ¦΄λ¦¬μ¦ˆκ°€ 곡개될 λ•Œ μΆ”κ°€λ©λ‹ˆλ‹€.

About

It provides security infrastructure based on Quantum Information Science and technology, targeting NIST FIPS 140-3 and CC EAL4 or higher, as well as classical and Post-Quantum-Cryptography algorithms. It includes various utility functions such as data management and secure zeroization.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages