๐ MemCloud์ ๋ณด์ ํผ์ด ์ธ์ฆ ๋ด๋ถ: ์ฅ์น๊ฐ LAN์์ RAM์ ์์ ํ๊ฒ ๊ณต์ ํ๋ ๋ฐฉ๋ฒ
Source: Dev.to
MemCloud( macOSโฏ&โฏLinux์ฉ ๋ถ์ฐ RAM ์์ง)๋ฅผ ๊ณต๊ฐํ์ ๋ ๊ฐ์ฅ ๋ง์ด ๋ฐ์ ์ง๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
โ๋ค๋ฅธ ๋๋ฐ์ด์ค๊ฐ ๋ด RAM์ ์ ์ฅํ๊ฒ ํ๋ ๊ฒ ์ํํ์ง ์์๊น? ์ด๋ป๊ฒ ๋ณด์์ด ๋๋์?โ
์๋์์๋ MemCloud์ ์ธ์ฆ, ์ํธํ, ์ ๋ขฐ ๋ชจ๋ธ์ ๊น์ด ์๊ฒ ์ดํด๋ด ๋๋คโํ๋กํ ์ฝ, ์ํ ๋ชจ๋ธ, ์ํธ ์ค๊ณ์ ๊ด์ฌ์ด ์๋ ์์ง๋์ด๋ฅผ ์ํด ์์ฑ๋์์ต๋๋ค. ์ด ๊ธ์ ์์ํ๊ฒ ๋ณด์โฏ&โฏ์ธ์ฆ ๋ ์ด์ด์๋ง ์ด์ ์ ๋ง์ถฅ๋๋ค.
(MemCloud๊ฐ ์ฒ์์ด๋ผ๋ฉด ์๊ฐ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์ธ์ โ ์ด ๊ธ์ ๊ธฐ๋ณธ์ ์ธ ์ดํด๋ฅผ ์ ์ ๋ก ํฉ๋๋ค.)
์ํ ๋ชจ๋ธ
| ์ํ | ์์ |
|---|---|
| ๊ฐ์ฅ | ์ ์ฑ ๋๋ฐ์ด์ค๊ฐ ์ ๋ขฐ๋ ํผ์ด์ธ ์ฒ ๊ฐ์ฅ |
| MITM ๊ณต๊ฒฉ | ๊ณต๊ฒฉ์๊ฐ ํธ๋์ ฐ์ดํฌ ํธ๋ํฝ์ ๊ฐ๋ก์ฑ๊ฑฐ๋ ๋ณ์กฐ |
| ์ฌ์ ๊ณต๊ฒฉ | ์ด์ ํธ๋์ ฐ์ดํฌ ๋ฉ์์ง๋ฅผ ์ฌ์ฌ์ฉ |
| ๋ฌด๋จ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ | ๋๋ฐ์ด์ค๊ฐ ํด๋ฌ์คํฐ์ ๋ชฐ๋ ํฉ๋ฅ |
| ์ธ์ ํ์ด์ฌํน | ํธ๋ํฝ ํค๋ฅผ ํ์ทจํ๊ฑฐ๋ ์์ธก |
MemCloud ํ๋กํ ์ฝ์ ์ ๋ชจ๋ ์ํ์ ๋ค๋ฃน๋๋ค.
์์ด๋ดํฐํฐ ํค
๊ฐ ๋๋ฐ์ด์ค๋ ๋ค์ ๊ฒฝ๋ก์ ์ฅ๊ธฐ ์์ด๋ดํฐํฐ ํค์์ ๋ณด๊ดํฉ๋๋ค:
~/.memcloud/identity_key
- ์๊ณ ๋ฆฌ์ฆ: Ed25519 (๋น ๋ฅด๊ณ ์์ )
- ๋ชฉ์ : ํธ๋์ ฐ์ดํฌ ์ ์ฌ(transcript)์ ์๋ช ํ๋ ๋ฐ๋ง ์ฌ์ฉ โ ์ํธํ์๋ ์ฌ์ฉ๋์ง ์์.
์ด๋ PKI์ ๋ณต์ก์ฑ ์์ด ๋๋ฐ์ด์ค ์ธ์ฆ์์ ๊ฐ์ ์ญํ ์ ํฉ๋๋ค.
์ธ์ฆ ํ๋ฆ (NoiseโฏXX)
MemCloud๋ Noise Protocol Framework์์ ์๊ฐ์ ๋ฐ์ ์ธ์ฆ ํ๋ฆ, ํนํ Noise_XX ํจํด์ ์ฌ์ฉํฉ๋๋ค. ์ ํ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์์ชฝ ๋ชจ๋ ์ด๊ธฐ์๋ ์ธ์ฆ๋์ง ์์
- TrustโOnโFirstโUse (TOFU) ์ง์
- ์ํธ ์ธ์ฆ ์ ๊ณต
- ์ ๋ฐฉ ๋น๋ฐ์ฑ ๋ณด์ฅ
๋จ์ํ๋ ํธ๋์ ฐ์ดํฌ
A โ B : eA, nonceA
B โ A : eB, nonceB
A โ B : identity proof (encrypted)
B โ A : identity proof (encrypted)
eA์ eB๋ ์ผ์์ ์ธ X25519 ๊ณต๊ฐํค์
๋๋ค.
๊ฐ ํธ๋์ ฐ์ดํฌ ๋ฉ์์ง๋ ์ ์ฌ์ ํด์๋ฉ๋๋ค:
H = Hash(H || message)
์ด๋ ์ฌ์, ๋ค์ด๊ทธ๋ ์ด๋, ๊ต์ฐจ ์ธ์ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๊ณ , ์ ์ฌ๋ ์ดํ ํค ํ์์ ์ฌ์ฉ๋ฉ๋๋ค.
ํค ํ์ & ์์ด๋ดํฐํฐ ์ฆ๋ช
-
๊ณต์ ๋น๋ฐ ๊ณ์ฐ:
shared_secret = DH(eA, eB) -
์ธ์ ํค ํ์:
session_key = HKDF(shared_secret + transcript_hash) -
๊ฐ ๋๋ฐ์ด์ค๋ ์ฅ๊ธฐ ์์ด๋ดํฐํฐ ํค๋ก ์ ์ฌ ํด์๋ฅผ ์๋ช :
signature = Sign(TranscriptHash, IdentityKey)- ์๋ช ์ ์ํธํ๋๊ณ ์ ์ฌ์ ๋ฐ์ธ๋ฉ๋์ด ์ฌ์๋ ์ ์์ต๋๋ค.
- ๊ฒ์ฆ์ ์คํจํ๋ฉด ์ฐ๊ฒฐ์ ์ฆ์ ์ข ๋ฃ๋ฉ๋๋ค.
ํธ๋ํฝ ์ํธํ
์ต์ข ํธ๋ํฝ ํค๋ ์์ ๊ฐ์ด ํ์๋๋ฉฐ ChaCha20โPoly1305 AEAD์ ํจ๊ป ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ๊ณ ์ LAN ํต์ ์ ์ต์ ํ๋ ์ ํ์ ๋๋ค.
์ ๋ขฐ๋ ํผ์ด
์ ๋ขฐ๋ ํผ์ด ๋ชฉ๋ก์ ๋ค์ ํ์ผ์ ์ ์ฅ๋ฉ๋๋ค:
~/.memcloud/trusted_devices.json
์ด๋ฏธ ์๋ ค์ง ํผ์ด์์ ํฅํ ์ฐ๊ฒฐ์:
- ์ํธํ์ ์ผ๋ก ์ธ์ฆ๋ ์ํ ์ ์ง
- ์ธํฐ๋ํฐ๋ธ ์น์ธ ์ ์ฐจ๋ฅผ ๊ฑด๋๋ฐ๊ฒ ํจ
- ์กฐ์ฉํ ์คํธํ๋๊ฑฐ๋ ๊ต์ฒด๋ ์ ์์
์ธ์ฆ ์คํจ ์ ์ด๋ป๊ฒ ๋๋์?
๋ค์ ์ค ํ๋๋ผ๋ ๋ฐ์ํ๋ฉด MemCloud๋ ์ธ์ ์ ๊ฑฐ๋ถํฉ๋๋ค:
- ์์ด๋ดํฐํฐ ์๋ช ์คํจ
- ์ ์ฌ ๋ถ์ผ์น ๋ฐ์
- ํธ๋์ ฐ์ดํฌ ํ์ ์ค๋ฅ
- ๋๋ฐ์ด์ค๊ฐ ์ ๋ขฐ๋์ง ์์
- ๋์ ๋ ์ด์ด๊ฐ ๊ถํ ๋ถ์ฌ ์ฐจ๋จ
๊ฑฐ๋ถ๋ ํผ์ด๋ ๋ค์์ ํ ์ ์์ต๋๋ค:
- ๋น์ ์ RAM์ ์ฝ์
- ๋ธ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์
- ํด๋ฌ์คํฐ์ ํฉ๋ฅ
- ์ด์ ํผ์ด๋ฅผ ๊ฐ์ฅ
TLS๋ฅผ ์ฐ์ง ์์ ์ด์
TLS๋ ๊ฐ๋ ฅํ์ง๋ง P2P LAN ๋ฉ๋ชจ๋ฆฌ ์์ง์๋ ์ต์ ์ด ์๋๋๋ค:
- MemCloud๋ **๋ฌด์ค์ (zeroโconfig)**์ ๋ชฉํ๋ก ํ๋ฉฐ Noise๊ฐ ์ด๋ฅผ ๋ฐ๋ก ์ ๊ณตํจ.
- ๋ชฉํ ๋ ์ดํด์๋ 10โฏms ์ดํ์ด๋ฉฐ, Noise์ ๊ฐ๋ฒผ์ด ๋ฐ์ด๋๋ฆฌ ํ๋กํ ์ฝ์ด ๋ ๋น ๋ฆ.
- ์ํธ ์ธ์ฆ, ์์ด๋ดํฐํฐ ์ํ, ์ ๋ฐฉ ๋น๋ฐ์ฑ, TOFU์ ๊ฐ์ ์๊ตฌ์ฌํญ์ด Noise ํจํด์ ์์ฐ์ค๋ฝ๊ฒ ํฌํจ๋จ.
ํ ์คํธ ๊ฒฐ๊ณผ
| ๊ณต๊ฒฉ ์๋ | ๊ฒฐ๊ณผ |
|---|---|
| ์ฌ์ | ์ ์ฌ ๋ถ์ผ์น๋ก ์ฐจ๋จ |
| MITM | (์์ด๋ดํฐํฐ ์ฆ๋ช ๋ถ์ผ์น) ์ฐจ๋จ |
| ๊ฐ์ฅ | (์๋ช ๋ฌดํจ) ์ฐจ๋จ |
| ๋ค์ด๊ทธ๋ ์ด๋ ์๋ | ๋ถ๊ฐ๋ฅ |
| ํ์ด๋ก๋ ๋ณ์กฐ | (MAC ์คํจ) ์ฐจ๋จ |
์ค์ LAN ํ๊ฒฝ์์๋ ํ๋กํ ์ฝ์ ๋งค์ฐ ๊ฒฌ๊ณ ํ๊ฒ ๋์ํ๊ณ ์์ต๋๋ค.
ํฅํ ๊ฐ์ ๊ณํ
- ๐ ์ ๋ขฐ ์ฒ ํ ๋ธ๋ก๋์บ์คํธ
- ๐ฅ GUI ์ ๋ขฐ ๊ด๋ฆฌ์
- ๐ก ์ ํ์ ํ๋์จ์ด ๊ธฐ๋ฐ ์์ด๋ดํฐํฐ ํค
- ๐ ์ธ์ ์ฌ๊ฐ
- ๐ฆ ํผ์ด ๊ฐ ์ํธํ ๋ณต์
๊ธฐ์ฌ์๋ฅผ ํ์ํฉ๋๋ค.
์ฐธ๊ณ ์๋ฃ
- ์ธ์ฆ ์ฝ๋:
memnode/src/net/auth - ์ฃผ ์ ์ฅ์:
- ๋ฌธ์:
- CLI ์ ๋ขฐ ๊ด๋ฆฌ์:
memcli trust
MemCloud๋ ๊ฒ๋ณด๊ธฐ์ โLAN์ ํตํด ๋๋ฐ์ด์ค๊ฐ RAM์ ๊ณต์ ํ๋คโ๋ ๋จ์ํ ์๋น์ค์ฒ๋ผ ๋ณด์ด์ง๋ง, ๊ทธ ์ด๋ฉด์๋ ์ค์ ๋ก ์์ ํ๊ฒ ๋ง๋ค๊ธฐ ์ํด ์ ๊ตํ๊ฒ ์ค๊ณ๋ ๋ณด์ ํ๋กํ ์ฝ์ด ๊น๋ ค ์์ต๋๋ค.
P2P ๋ฐ์ด๋๋ฆฌ ํ๋กํ ์ฝ, ๋ฉ๋ชจ๋ฆฌ ๊ฒฉ๋ฆฌ ๋ชจ๋ธ, ํ ๋น๋ enforcement, ํน์ ์ ๋กโ์นดํผ ์คํธ๋ฆฌ๋ฐ ์ค๊ณ ๋ฑ์ ๋ํด ์ถ๊ฐ๋ก ์๊ณ ์ถ๋ค๋ฉด ์ธ์ ๋ ์๋ ค ์ฃผ์ธ์!