Google์์ Go ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ณด์์ ๋ด๋นํ๋ ์ํธํ์ Filippo Valsorda๊ฐ ์๋ก์ด ๋ฐ์ดํฐ ์ํธํ ์ ํธ๋ฆฌํฐ์ธ Age(Actually Good Encryption)์ ์ฒซ ๋ฒ์งธ ์์ ์ ์ธ ๋ฆด๋ฆฌ์ค๋ฅผ ์ถ์ํ์ต๋๋ค. ์ด ์ ํธ๋ฆฌํฐ๋ ๋์นญ(์ํธ) ๋ฐ ๋น๋์นญ(๊ณต๊ฐ ํค) ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ํ์ผ์ ์ํธํํ๊ธฐ ์ํ ๊ฐ๋จํ ๋ช ๋ น์ค ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ํ๋ก์ ํธ ์ฝ๋๋ Go๋ก ์์ฑ๋์์ผ๋ฉฐ BSD ๋ผ์ด์ผ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค. Linux, FreeBSD, macOS ๋ฐ Windows์ฉ ๋น๋๊ฐ ์ค๋น๋์ด ์์ต๋๋ค.
๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ์ ํธ๋ฆฌํฐ์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ํ๋ก๊ทธ๋จ์ ํตํฉํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํฌํจ๋์ด ์์ต๋๋ค. ์ด์ ๋ณ๋๋ก rage ํ๋ก์ ํธ์ ํ๋ ์์ํฌ ๋ด์์ Rust ์ธ์ด๋ก ์์ฑ๋ ์ ์ฌํ ์ ํธ๋ฆฌํฐ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋์ฒด ๊ตฌํ์ด ๊ฐ๋ฐ๋๊ณ ์์ต๋๋ค. ์ํธํ์๋ HKDF(HMAC ๊ธฐ๋ฐ ์ถ์ถ ๋ฐ ํ์ฅ ํค ํ์ ๊ธฐ๋ฅ), SHA-256, HMAC(ํด์ ๊ธฐ๋ฐ ๋ฉ์์ง ์ธ์ฆ ์ฝ๋), X25519, Scrypt ๋ฐ ChaCha20-Poly1305 AEAD์ ๊ฐ์ ๊ฒ์ฆ๋ ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ์ฉ๋ฉ๋๋ค.
Age์ ํน์ง ์ค ๋ค์์ด ๋์ ๋๋๋ค. ํด๋ฆฝ๋ณด๋๋ฅผ ํตํด ์ฝ๊ฒ ์ ์กํ ์ ์๋ ์ํ 512๋นํธ ๊ณต๊ฐ ํค๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ต์ ์ด ์ค๋ฒ๋ก๋๋์ง ์์ ๊ฐ๋จํ ๋ช ๋ น์ค ์ธํฐํ์ด์ค; ๊ตฌ์ฑ ํ์ผ ๋ถ์กฑ; UNIX ์คํ์ผ๋ก ํธ์ถ ์ฒด์ธ์ ๊ตฌ์ถํ์ฌ ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉํ๊ฑฐ๋ ๋ค๋ฅธ ์ ํธ๋ฆฌํฐ์ ํจ๊ป โโ์ฌ์ฉํ ์ ์์ต๋๋ค. Github.keys ํ์ผ์ ๋ํ ์ง์์ ํฌํจํ์ฌ ์์ฒด ์์ถ ํค ์์ฑ๊ณผ ๊ธฐ์กด SSH ํค("ssh-ed25519", "ssh-rsa") ์ฌ์ฉ์ด ๋ชจ๋ ์ง์๋ฉ๋๋ค. $ age-keygen -o key.txt ๊ณต๊ฐ ํค: age1ql3z7hjy58pw3hyww5ayyfg7zqgvc7w3j2elw2zmrj2kg5sfn9bqmcac8p $ tar cvz ~/data | age -r age1ql3z7hjy58pw3hyww5ayyfg7zqgvc7w3j2elw2zmrj2kg5sfn9bqmcac8p > data.tar.gz.age $ age --decrypt -i key.txt data.tar.gz.age > data.tar.gz $ age -R ~/.ssh/id_ed25519.pub example.jpg > example.jpg.age $ age -d -i ~/.ssh/id_ed25519 example.jpg.age > example.jpg
ํ ๋ฒ์ ์ฌ๋ฌ ์์ ์๋ฅผ ์ํ ํ์ผ ์ํธํ ๋ชจ๋๊ฐ ์์ต๋๋ค. ์ด ๋ชจ๋์์๋ ํ์ผ์ด ์ฌ๋ฌ ๊ณต๊ฐ ํค๋ฅผ ์ฌ์ฉํ์ฌ ๋์์ ์ํธํ๋๊ณ ๊ฐ ์์ ์ ๋ชฉ๋ก์ด ์ด๋ฅผ ํด๋ ํ ์ ์์ต๋๋ค. ๋์นญ ๋น๋ฐ๋ฒํธ ๊ธฐ๋ฐ ํ์ผ ์ํธํ ๋ฐ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ํธํํ์ฌ ๊ฐ์ธ ํค ํ์ผ์ ๋ณดํธํ๊ธฐ ์ํ ๋๊ตฌ๋ ์ ๊ณต๋ฉ๋๋ค. ์ ์ฉํ ๊ธฐ๋ฅ์ ์ํธํ ์ค์ ๋น ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ฉด ์ ํธ๋ฆฌํฐ๊ฐ ์๋์ผ๋ก ๊ฐ๋ ฅํ ๋น๋ฐ๋ฒํธ๋ฅผ ์์ฑํ์ฌ ์ ๊ณตํ๋ค๋ ๊ฒ์ ๋๋ค. $ age -p secrets.txt > secrets.txt.age ์ํธ ์ ๋ ฅ(๋ณด์ ์ํธ๋ฅผ ์๋ ์์ฑํ๋ ค๋ฉด ๋น์ ๋์ธ์): ์๋ ์์ฑ๋ ์ํธ "release-response-step-brand-wrap-ankle-pair-unusual-sword-train" ์ฌ์ฉ . $ age -d secrets.txt.age > secrets.txt ์ํธ ์ ๋ ฅ: $ age-keygen | age -p> key.age public Key : Age1yhm4gftwfmrpz87tdslm530wrx6m79ya9f2hdztjnehnehnehnehnehnehpqrjpyx0 ํจ์ค ํ๋ ์ด์ฆ๋ฅผ Enter acecure one์ ์๋ ์์ฑํ๊ธฐ ์ํด ๋น์ ๋ก๋๋ค.
ํฅํ ๊ณํ์๋ ๋น๋ฐ๋ฒํธ ์ ์ฅ์ ์ํ ๋ฐฑ์๋ ๋ฐ ๊ณต์ ํค์ฉ ์๋ฒ(PAKE) ์์ฑ, YubiKey ํค ์ง์, ๋จ์ด ์งํฉ ํํ๋ก ๊ธฐ์ตํ๊ธฐ ์ฌ์ด ํค ์์ฑ ๊ธฐ๋ฅ, FS์ ์ํธํ๋ ํ์ผ์ด๋ ์์นด์ด๋ธ๋ฅผ ๋ง์ดํธํ๊ธฐ ์ํ ์์ด์ง ๋ง์ดํธ ์ ํธ๋ฆฌํฐ์
๋๋ค.
์ถ์ฒ : opennet.ru