Skip to content

DINA-Co-Op-t2/SecureTL

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

130 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

SecureTL (TL : Traversal Learnings)

SecureTL은 λ”μš± μ•ˆμ „ν•œ TL이닀.
Split Learningκ³Ό Secure Multi-Party Computation(MPC)을 κ²°ν•©ν•˜μ—¬ 데이터 ν”„λΌμ΄λ²„μ‹œλ₯Ό 보μž₯ν•˜λ©΄μ„œ ν˜‘λ ₯ ν•™μŠ΅μ„ μˆ˜ν–‰ν•œλ‹€.
Orchestrator둜 λΆ€ν„° 받은 λͺ¨λΈ Config 검증을 μœ„ν•΄ WASM μƒŒλ“œλ°•μŠ€λ₯Ό λ„μž…ν–ˆλ‹€.
λ„€νŠΈμ›Œν¬λ₯Ό ν†΅ν•œ 원본 데이터 μœ μΆœμ„ λ°©μ§€ν•˜κΈ° μœ„ν•΄ λ¦¬λˆ…μŠ€ 컀널 κΈ°λŠ₯(namespace, seccomp-bpf)을 ν™œμš©ν•˜μ—¬ ν”„λ‘œμ„ΈμŠ€ κ²©λ¦¬ν•˜κ³ , κΆŒν•œμ„ μ œμ–΄ν•˜μ˜€λ‹€.

Config 기반 동적 λͺ¨λΈ 생성

κΈ°μ‘΄ TL++은 λͺ¨λΈ μ•„ν‚€ν…μ²˜λ₯Ό models.pyμ—μ„œ ν•˜λ“œμ½”λ”©ν•˜κ³  μžˆλ‹€.
Secure TL은 λͺ¨λΈ μ•„ν‚€ν…μ²˜λ₯Ό ν•˜λ“œμ½”λ”©ν•˜μ§€ μ•ŠλŠ”λ‹€. JSON config 파일 ν•˜λ‚˜λ‘œ λͺ¨λΈ ꡬ쑰 전체λ₯Ό μ •μ˜ν•˜κ³ , λŸ°νƒ€μž„μ— λ™μ μœΌλ‘œ PyTorch λͺ¨λΈμ„ μƒμ„±ν•œλ‹€.

Config 포맷

config/cnn_config.json에 λ ˆμ΄μ–΄λ₯Ό μˆœμ„œλŒ€λ‘œ μ •μ˜ν•œλ‹€.

[
  { "type": "conv2d", "args": [3, 64, 3], "kwargs": {"padding": 1} },
  { "type": "relu" },
  { "type": "maxpool2d", "args": [2, 2] },
  { "type": "flatten" },
  { "type": "linear", "args": [4096, 512] },
  { "type": "linear", "args": [512, 10] }
]

TLpp/dynamic_model.py의 LayerBuilderν΄λž˜μŠ€λŠ” λ“±λ‘λœ λ ˆμ΄μ–΄ νƒ€μž…(conv2d, linear, relu, lstm, transformer_encoder_layer λ“±)을 args/kwargs둜 μΈμŠ€ν„΄μŠ€ν™”ν•œλ‹€. μ½”λ“œ μˆ˜μ • 없이 config만 λ°”κΎΈλ©΄ λ‹€λ₯Έ λͺ¨λΈ μ•„ν‚€ν…μ²˜λ‘œ μ‹€ν—˜ν•  수 μžˆλ‹€.

Config β†’ Split Learning λͺ¨λΈ λΆ„ν• 

Orchestratorκ°€ configλ₯Ό λ‘œλ“œν•œ λ’€ cut_layer 인덱슀λ₯Ό κΈ°μ€€μœΌλ‘œ λΆ„ν• ν•œλ‹€.

config/cnn_config.json
        β”‚
        β–Ό
  β”Œβ”€ node_config ──┐  β”Œβ”€β”€ orch_config ──┐
  β”‚ Layer 0~4      β”‚  β”‚ Layer 5~end     β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
        β”‚                     β”‚
  DynamicNodeNet       DynamicOrchestratorNet
  (각 Node에 전솑)      (Orchestrator 보유)
  • Node μΈ‘: config[:cut_layer]둜 DynamicNodeNet을 μƒμ„±ν•˜μ—¬ 둜컬 λ°μ΄ν„°λ‘œ forward pass μˆ˜ν–‰
  • Orchestrator μΈ‘: config[cut_layer:]둜 λΆ„λ₯˜ λ ˆμ΄μ–΄λ₯Ό ꡬ성, activation을 λ°›μ•„ loss 계산 및 backward pass μˆ˜ν–‰

원본 λ°μ΄ν„°λŠ” Node λ°–μœΌλ‘œ λ‚˜κ°€μ§€ μ•ŠμœΌλ©°, intermediate activation만 μ „μ†‘λœλ‹€.

Config 검증 (WASM)

Orchestratorλ‘œλΆ€ν„° μˆ˜μ‹ ν•œ config JSON을 κ·ΈλŒ€λ‘œ μ—­μ§λ ¬ν™”ν•˜λ©΄ μ•…μ˜μ  νŽ˜μ΄λ‘œλ“œμ— λ…ΈμΆœλ  수 μžˆλ‹€. 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ Rust둜 μž‘μ„±λœ WebAssembly λͺ¨λ“ˆλ‘œ configλ₯Ό 사전 κ²€μ¦ν•œλ‹€.

Orchestrator ──[JSON]──► Node
                          β”‚
                    β”Œβ”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚ WASM validator β”‚  (Rust β†’ wasm32 컴파일)
                    β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                          β”‚
                    검증 톡과 μ‹œμ—λ§Œ
                    λͺ¨λΈ 생성 μ§„ν–‰

NodeλŠ” wasmtime λŸ°νƒ€μž„ μœ„μ—μ„œ WASM λ°”μ΄λ„ˆλ¦¬λ₯Ό μ‹€ν–‰ν•˜κ³ , λ ˆμ΄μ–΄ νƒ€μž…/인자 ꡬ쑰λ₯Ό κ²€μ¦ν•œ λ’€μ—λ§Œ λͺ¨λΈμ„ μƒμ„±ν•œλ‹€.
WASM λͺ¨λ“ˆμ€ μƒŒλ“œλ°•μŠ€ λ‚΄μ—μ„œ μ‹€ν–‰λ˜λ―€λ‘œ 검증 κ³Όμ • μžμ²΄κ°€ 호슀트 μ‹œμŠ€ν…œμ— 영ν–₯을 쀄 수 μ—†λ‹€.

ν”„λ‘œμ„ΈμŠ€ 격리 (Namespace + Seccomp)

--isolated ν”Œλž˜κ·Έλ₯Ό ν™œμ„±ν™”ν•˜λ©΄ Node ν•˜λ‚˜κ°€ 3개의 격리된 ν”„λ‘œμ„ΈμŠ€λ‘œ λΆ„λ¦¬λœλ‹€.
각 ν”„λ‘œμ„ΈμŠ€λŠ” Linux 컀널 μˆ˜μ€€μ—μ„œ μ„œλ‘œ λ‹€λ₯Έ λ³΄μ•ˆ 정책이 μ μš©λ˜μ–΄, ν•œ ν”„λ‘œμ„ΈμŠ€κ°€ μΉ¨ν•΄λ˜λ”λΌλ„ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ 데이터에 μ ‘κ·Όν•˜κ±°λ‚˜ μ™ΈλΆ€λ‘œ μœ μΆœν•  수 μ—†λ‹€.

μ•„ν‚€ν…μ²˜

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                              Node                                   β”‚
β”‚                                                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  IPC (Queue) β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚      DataLoader       │◄────────────►│        Trainer         β”‚  β”‚
β”‚  β”‚                       β”‚              β”‚                        β”‚  β”‚
β”‚  β”‚  unshare(NEWNET)      β”‚              β”‚  unshare(NEWNET)       β”‚  β”‚
β”‚  β”‚  seccomp:             β”‚              β”‚  seccomp:              β”‚  β”‚
β”‚  β”‚   socket() ALL BLOCK  β”‚              β”‚   AF_INET/AF_INET6     β”‚  β”‚
β”‚  β”‚   execve()     BLOCK  β”‚              β”‚              BLOCK     β”‚  β”‚
β”‚  β”‚                       β”‚              β”‚   AF_UNIX    ALLOW     β”‚  β”‚
β”‚  β”‚  send as numpy array  β”‚              β”‚   (for torch IPC)      β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                                                IPC  β”‚  (Queue)      β”‚
β”‚                                      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚                                      β”‚        Networker          β”‚  β”‚
β”‚                                      β”‚                           β”‚  β”‚
β”‚                                      β”‚  seccomp:                 β”‚  β”‚
β”‚                                      β”‚   AF_INET       ALLOW     β”‚  β”‚
β”‚                                      β”‚   other sockets BLOCK     β”‚  β”‚
β”‚                                      β”‚   execve()      BLOCK     β”‚  β”‚
β”‚                                      β”‚   PR_SET_NO_NEW_PRIVS     β”‚  β”‚
β”‚                                      β”‚                           β”‚  β”‚
β”‚                                      β”‚  Orchestrator/Helper comm β”‚  β”‚
β”‚                                      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2쀑 컀널 레벨 λ°©μ–΄

각 ν”„λ‘œμ„ΈμŠ€μ—λŠ” 두 κ³„μΈ΅μ˜ 컀널 μˆ˜μ€€ λ³΄μ•ˆμ΄ μ μš©λœλ‹€.

Layer 1 β€” Network Namespace (unshare)

unshare(CLONE_NEWUSER | CLONE_NEWNET) μ‹œμŠ€ν…œ 콜둜 ν”„λ‘œμ„ΈμŠ€λ₯Ό 빈 λ„€νŠΈμ›Œν¬ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— λ°°μΉ˜ν•œλ‹€. λ„€νŠΈμ›Œν¬ μΈν„°νŽ˜μ΄μŠ€(lo, eth0 λ“±)κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ AF_INET/AF_INET6 μ†ŒμΌ“μœΌλ‘œλŠ” μ–΄λ–€ μ™ΈλΆ€ 연결도 성립할 수 μ—†λ‹€. AF_UNIX μ†ŒμΌ“μ€ νŒŒμΌμ‹œμŠ€ν…œ κΈ°λ°˜μ΄λ―€λ‘œ λ„€μž„μŠ€νŽ˜μ΄μŠ€ 격리 후에도 정상 λ™μž‘ν•œλ‹€.

Layer 2 β€” Syscall 필터링 (seccomp-bpf)

prctl(PR_SET_SECCOMP) 둜 BPF(Berkeley Packet Filter) ν”„λ‘œκ·Έλž¨μ„ μ„€μΉ˜ν•˜μ—¬, ν”„λ‘œμ„ΈμŠ€κ°€ ν˜ΈμΆœν•  수 μžˆλŠ” μ‹œμŠ€ν…œ 콜 자체λ₯Ό μ œν•œν•œλ‹€.
ν•„ν„°λŠ” μ»€λ„μ—μ„œ μ‹€ν–‰λ˜λ―€λ‘œ μ‚¬μš©μž κ³΅κ°„μ—μ„œ μš°νšŒν•  수 μ—†λ‹€.

ν”„λ‘œμ„ΈμŠ€λ³„ λ³΄μ•ˆ μ •μ±…

ν”„λ‘œμ„ΈμŠ€ unshare(NEWNET) socket μ •μ±… execve μ •μ±… μ—­ν• 
DataLoader O 전체 차단 (AF_INET, AF_INET6, AF_UNIX λͺ¨λ‘) 차단 데이터 읽기 μ „μš©. numpy λ°°μ—΄λ‘œ λ³€ν™˜ ν›„ Queue 전솑
Trainer O AF_INET/AF_INET6 차단, AF_UNIX ν—ˆμš© ν—ˆμš© PyTorch ν•™μŠ΅. AF_UNIXλŠ” torch IPC/CUDA에 ν•„μš”
Networker X AF_INET만 ν—ˆμš©, λ‚˜λ¨Έμ§€ 차단 차단 Orchestrator/Helperμ™€μ˜ IPv4 μ†ŒμΌ“ 톡신 μ „λ‹΄

DataLoaderμ—λŠ” κ°€μž₯ μ—„κ²©ν•œ μ •μ±…(DataLoaderPolicy)이 μ μš©λœλ‹€. λͺ¨λ“  μ†ŒμΌ“ 생성과 execve μ‹œμŠ€ν…œ 콜이 μ°¨λ‹¨λ˜μ–΄, 데이터λ₯Ό 읽고 numpy λ°°μ—΄λ‘œ λ³€ν™˜ν•˜λŠ” 것 μ™Έμ—λŠ” 아무 μž‘μ—…λ„ μˆ˜ν–‰ν•  수 μ—†λ‹€. torch ν…μ„œ κ³΅μœ λŠ” AF_UNIX μ†ŒμΌ“ 기반 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό μ‚¬μš©ν•˜λ―€λ‘œ, numpy λ°°μ—΄λ‘œ λ³€ν™˜ν•˜μ—¬ μ „μ†‘ν•¨μœΌλ‘œμ¨ μ†ŒμΌ“ 없이도 IPCκ°€ κ°€λŠ₯ν•˜λ‹€.

Trainerμ—λŠ” TrainerPolicyκ°€ μ μš©λœλ‹€. μ™ΈλΆ€ λ„€νŠΈμ›Œν¬(AF_INET/AF_INET6)λŠ” μ°¨λ‹¨ν•˜λ˜, torch의 multiprocessing IPC와 CUDA λ“œλΌμ΄λ²„κ°€ μš”κ΅¬ν•˜λŠ” AF_UNIX μ†ŒμΌ“μ€ ν—ˆμš©ν•œλ‹€.

Networkerμ—λŠ” NetworkerPolicyκ°€ μ μš©λœλ‹€. Orchestrator/Helper 톡신에 ν•„μš”ν•œ AF_INET μ†ŒμΌ“λ§Œ ν—ˆμš©ν•˜κ³ , AF_INET6/AF_UNIX λ“± λ‚˜λ¨Έμ§€ μ†ŒμΌ“ family와 execveλ₯Ό μ°¨λ‹¨ν•œλ‹€. IPCλŠ” multiprocessing.Queueκ°€ λ‚΄λΆ€μ μœΌλ‘œ os.pipe()(pipe syscall)을 μ‚¬μš©ν•˜λ―€λ‘œ μ†ŒμΌ“μ΄ λΆˆν•„μš”ν•˜λ‹€. λ„€νŠΈμ›Œν¬ 톡신이 핡심 μ—­ν• μ΄λ―€λ‘œ λ„€μž„μŠ€νŽ˜μ΄μŠ€ 격리(unshare)λŠ” μ μš©ν•˜μ§€ μ•Šλ˜, PR_SET_NO_NEW_PRIVS둜 κΆŒν•œ μƒμŠΉμ„ λ°©μ§€ν•œλ‹€.

seccomp-BPF ν•„ν„° κ΅¬ν˜„

BPF ν•„ν„°λŠ” μ»€λ„μ˜ seccomp_data ꡬ쑰체λ₯Ό 직접 κ²€μ‚¬ν•˜λŠ” λ°”μ΄νŠΈμ½”λ“œλ‘œ κ΅¬μ„±λœλ‹€.

seccomp_data {
    nr      (offset 0)  ← syscall 번호
    arch    (offset 4)  ← μ•„ν‚€ν…μ²˜ (AUDIT_ARCH)
    args[0] (offset 16) ← 첫 번째 인자 (예: socket family)
}

AF_INET 차단 ν•„ν„° λ™μž‘ 흐름:

[0] μ•„ν‚€ν…μ²˜ λ‘œλ“œ (AUDIT_ARCH 검증)
[1] μ•„ν‚€ν…μ²˜ 뢈일치 β†’ ν”„λ‘œμ„ΈμŠ€ μ’…λ£Œ
[2] syscall 번호 λ‘œλ“œ
[3] socket() μ•„λ‹Œ 경우 β†’ ALLOW
[4] args[0] (socket family) λ‘œλ“œ
[5] AF_INET β†’ BLOCK (EPERM)
[6] AF_INET6 β†’ BLOCK (EPERM)
[7] κ·Έ μ™Έ β†’ ALLOW

λ©€ν‹° μ•„ν‚€ν…μ²˜ 지원

seccomp ν•„ν„°λŠ” μ•„ν‚€ν…μ²˜μ— 따라 syscall λ²ˆν˜Έκ°€ λ‹€λ₯΄λ‹€. ArchConfig 좔상 클래슀둜 이λ₯Ό λΆ„λ¦¬ν•˜κ³ , λŸ°νƒ€μž„μ— platform.machine()으둜 μžλ™ κ°μ§€ν•œλ‹€.

μ•„ν‚€ν…μ²˜ AUDIT_ARCH socket execve execveat
x86_64 0xC000003E 41 59 322
ARM64 (aarch64) 0xC00000B7 198 221 281

IPC 톡신

격리된 ν”„λ‘œμ„ΈμŠ€ κ°„ 톡신은 multiprocessing.Queueλ₯Ό μ‚¬μš©ν•œλ‹€. νƒ€μž…μ΄ μ§€μ •λœ IPCMessageλ₯Ό 톡해 데이터 μš”μ²­, 배치 ν• λ‹Ή, forward/backward κ²°κ³Ό 등을 κ΅ν™˜ν•œλ‹€.

λ³΄μ•ˆ μš”μ•½

TL++λŠ” 닀쀑 계측 λ³΄μ•ˆμ„ 톡해 데이터 ν”„λΌμ΄λ²„μ‹œλ₯Ό 보μž₯ν•œλ‹€.

계측 기술 λ°©μ–΄ λŒ€μƒ
데이터 뢄리 Split Learning 원본 데이터 미전솑, activation만 κ΅ν™˜
μ•”ν˜Έν•™μ  보호 Additive Secret Sharing (3-Party MPC) activation/gradient 도청 λ°©μ§€
λ„€νŠΈμ›Œν¬ 격리 Linux Network Namespace (unshare) ν”„λ‘œμ„ΈμŠ€μ˜ μ™ΈλΆ€ λ„€νŠΈμ›Œν¬ μ ‘κ·Ό 차단
μ‹œμŠ€ν…œ 콜 μ œν•œ seccomp-BPF μœ„ν—˜ν•œ μ‹œμŠ€ν…œ 콜 자체λ₯Ό 컀널 μˆ˜μ€€μ—μ„œ 차단
κΆŒν•œ μƒμŠΉ λ°©μ§€ PR_SET_NO_NEW_PRIVS ν”„λ‘œμ„ΈμŠ€ κΆŒν•œ μƒμŠΉ λΆˆκ°€
Config 검증 WebAssembly (Rust) 역직렬화 곡격 λ°©μ§€

ν”„λ‘œμ νŠΈ ꡬ쑰

β”œβ”€β”€ TLpp/
β”‚   β”œβ”€β”€ orchestrator.py          # ν•™μŠ΅ 코디넀이터
β”‚   β”œβ”€β”€ node.py                  # SecureNode / IsolatedNode
β”‚   β”œβ”€β”€ helper.py                # MPC share κ΅ν™˜ μ„œλ²„
β”‚   β”œβ”€β”€ protocol.py              # λ°”μ΄λ„ˆλ¦¬ μ†ŒμΌ“ ν”„λ‘œν† μ½œ + secret sharing
β”‚   β”œβ”€β”€ dynamic_model.py         # JSON β†’ PyTorch λͺ¨λΈ λΉŒλ”
β”‚   β”œβ”€β”€ data.py                  # ν•™μŠ΅ 데이터 λ‘œλ”
β”‚   └── utils.py                 # BatchScheduler, GradientAggregator
β”œβ”€β”€ isolation/
β”‚   β”œβ”€β”€ dataloader.py            # DataLoaderProcess (격리)
β”‚   β”œβ”€β”€ trainer.py               # TrainerProcess (격리)
β”‚   β”œβ”€β”€ networker.py             # NetworkerProcess (격리)
β”‚   └── common/
β”‚       β”œβ”€β”€ ipc.py               # IPCChannel, IPCMessage
β”‚       β”œβ”€β”€ warden.py            # seccomp-BPF ν•„ν„° λΉŒλ”/μ„€μΉ˜
β”‚       β”œβ”€β”€ process_policy.py    # ν”„λ‘œμ„ΈμŠ€λ³„ μƒŒλ“œλ°•μŠ€ μ •μ±…
β”‚       └── architecture_config.py  # μ•„ν‚€ν…μ²˜λ³„ syscall 번호
β”œβ”€β”€ validator/
β”‚   β”œβ”€β”€ validator.py             # WASM 검증기 래퍼
β”‚   └── config_validator/        # Rust μ†ŒμŠ€ + 컴파일된 .wasm
β”œβ”€β”€ config/
β”‚   └── cnn_config.json          # CNN λͺ¨λΈ μ•„ν‚€ν…μ²˜ μ •μ˜
β”œβ”€β”€ Dockerfile
β”œβ”€β”€ docker_manager.py
β”œβ”€β”€ gui.py                       # gui
└── requirements.txt

μ‹€ν–‰ 방법

μ„€μΉ˜

pip install -r requirements.txt
pip install -e .

μ£Όμš” μ˜μ‘΄μ„±: torch, torchvision, wasmtime (WASM λŸ°νƒ€μž„), pyseccomp

ν”Œλž«νΌλ³„ λ™μž‘ 방식

  • Linux: λ„€μ΄ν‹°λΈŒ μ‹€ν–‰. unshare, seccomp λ“± 컀널 κΈ°λŠ₯을 직접 μ‚¬μš©ν•œλ‹€.
  • macOS / Windows: Node μ‹€ν–‰ μ‹œ docker_manager.pyκ°€ Dockerλ₯Ό μžλ™ κ°μ§€ν•˜μ—¬ Linux μ»¨ν…Œμ΄λ„ˆ λ‚΄μ—μ„œ μ‹€ν–‰ν•œλ‹€. 이미지 λΉŒλ“œλ„ μžλ™μœΌλ‘œ μ²˜λ¦¬λ˜λ―€λ‘œ, Docker Desktop을 μ„€μΉ˜ν•˜κ³  μ‹€ν–‰ν•œ μƒνƒœμ—μ„œ λ™μΌν•œ λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€. Orchestrator와 HelperλŠ” λͺ¨λ“  ν”Œλž«νΌμ—μ„œ λ„€μ΄ν‹°λΈŒλ‘œ μ‹€ν–‰λœλ‹€.

Standard Mode

# Orchestrator
python -m TLpp.orchestrator \
  --host 192.168.0.4 --port 8080 \
  --n_nodes 1

# Node (별도 ν„°λ―Έλ„μ—μ„œ n_nodes 수만큼 μ‹€ν–‰)
python -m TLpp.node \
  --host 192.168.0.4 --port 8080

Secure Mode (MPC)

3-Party MPCλ₯Ό ν™œμ„±ν™”ν•˜μ—¬ activationκ³Ό gradientλ₯Ό secret sharing으둜 λ³΄ν˜Έν•œλ‹€.

# Orchestrator
python -m TLpp.orchestrator \
  --host [Orchestrator_IP] --port [Orchestrator_Port] \
  --helper_host [Helper_IP] --helper_port [Helper_Port] \
  --n_nodes [number of nodes] \
  --secure

# Helper
python -m TLpp.helper \
  --orch_host [Orchestrator_IP] --orch_port [Orchestrator_Port]\
  --node_host [Helper_IP] --node_port [Helper_Port]\
  --n_nodes [number of nodes]

# Node
python -m TLpp.node \
  --orch_host [Orchestrator_IP] --orch_port [Orchestrator_Port]\
  --node_host [Helper_IP] --node_port [Helper_Port]\
  --secure

Isolated Mode (ν”„λ‘œμ„ΈμŠ€ 격리 + MPC)

Nodeλ₯Ό 3개의 격리된 ν”„λ‘œμ„ΈμŠ€λ‘œ λΆ„λ¦¬ν•˜μ—¬ 컀널 μˆ˜μ€€ λ³΄μ•ˆμ„ μ μš©ν•œλ‹€.

# Orchestrator + HelperλŠ” Secure Mode와 동일

# Node (--isolated μΆ”κ°€)
python -m TLpp.node \
  --orch_host [Orchestrator_IP] --orch_port [Orchestrator_Port]\
  --helper_host [Helper_IP] --helper_port [Helper_Port]\
  --secure \
  --isolated

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •