๊ฐ๋ฐ์ & ์ ์ ๋ก์, ์ฐ๋ฆฌ๋ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๋ณดํธํ๋๊ฒ์ด ๋งค์ฐ ์ค์ํ๋ค๋ ๊ฒ์ ์๊ณ ์๋ค.
๋ค์ํ ์ข ๋ฅ์ ์ ๋ณด๊ฐ ์์ง๋ง, ๋ชจ๋ ์ค์ํ๊ณ ๋ณดํธํด์ผ ํ๋ค. ์ ํ๋ฒํธ๋ ์ด๋ฉ์ผ ์ฃผ์ ๊ฐ์ ํ๋กํ ์ ๋ณด๋ ์์ ์ ์๊ณ , ๋น์ฆ๋์ค ์ ๋ณด๋ ์์ ์ ์๋ค.
์ด๋ฌํ ๋ชจ๋ ์ ๋ณด์ ๋ํด ๋ณด์์ ์ ์งํ๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํ๋ฉฐ, ์ด๋ฅผ ์ํ ์ข์ ๋๊ตฌ๊ฐ ํ์ํ๋ค. Apple์์๋ ๋ณด์๊ณผ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ๊ฐ ํต์ฌ ๊ฐ์น์ด๋ฉฐ, ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ๋ฅผ ํฌํจํ๊ณ ์๋ค. ๋ฐ๋ผ์ ์ํธํ๊ฐ ๋งค์ฐ ์ค์ํ๋ฉฐ, ๋๋ฐ์ด์ค ๋ฌด๊ฒฐ์ฑ(device integrity)์ ํตํด ํ๋ซํผ์์ ์คํ๋๋ ์ํํธ์จ์ด์ ๋ฌด๊ฒฐ์ฑ์ ๊ฒ์ฆํ์ฌ ์ํํธ์จ์ด๊ฐ ์์๋์ง ์์๋์ง, ๋ณด์ ์์ฑ์ด ๋ณ๊ฒฝ๋์ง ์์๋์ง๋ฅผ ํ์ธํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ์ ์์ ํ ๋ณดํธ๋ฅผ ์ํด์๋ ์ํธํ๋ฅผ ์ฌ์ฉํ๋ค. Apple์ Messages, Safari, iCloud ๋ฑ ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋งค์ฐ ๊ฐ์ธ์ ์ธ ์๊ฐ์ ๊ธฐ๋กํ๊ณ ๊ณต์ ํ๋๋ฐ, ์ด๋ฅผ ๋ณดํธํ๊ธฐ ์ํด ์ํธํ๋ฅผ ์ฌ์ฉํ๋ค. ์ฆ, ์ฌ์ฉ์์ ๊ฐ์ธ์ ๋ณด ๋ณดํธ๋ฅผ ์ํด์๋ ์ํธํ๊ฐ ๋งค์ฐ ์ค์ํ ์ญํ ์ ํ๋ค.
Apple์ 10์ต ๋๊ฐ ๋๋ ๊ธฐ๊ธฐ์์ ์ํธํ๋ฅผ ์ํํ๊ณ ์์ผ๋ฉฐ, ์ด๋ ๋งค์ฐ ๊ด๋ฒ์ํ ๊ท๋ชจ๋ก ์ํธํ๋ฅผ ์ํํ๊ณ ์์์ ์๋ฏธํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ์ ๋ฐ๋ฅธ ์ํ๋๋ ๋งค์ฐ ๋๊ธฐ ๋๋ฌธ์, ๋งค์ฐ ๋์ ์์ ์ฑ์ด ์๊ตฌ๋๋ค. ์ข์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ํด์๋ ๋์ ์ฑ๋ฅ์ด ํ์์ด๋ฉฐ, ๋ฐฐํฐ๋ฆฌ ์๋ช ๋ ์ค์ํ๊ณ , ๋ณด์์ ์ฌ๊ธฐ์์ ์ค์ํ ๊ธฐ๋ฐ ์์์ด๋ค.
์ํธํ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ช ๊ฐ์ง ์์ฑ์ ์ ๊ณตํ๋ ๋๊ตฌ์ด๋ค.
์๋ฅผ ๋ค์ด ์ค๋ช ํ์๋ฉด, ๋ฐ์ ์๋ฅผ ์ ์ ์๋ ์ธ์ฆ, ๋ฉ์์ง๋ฅผ ๋ณตํธํํ ์ ์๋ ๊ถํ์ด ์๋ ์ฌ๋์ด ๋จ ํ ๋ช ๋ฟ์ด๋ผ๋ ์ํธํ, ๊ทธ๋ฆฌ๊ณ ๋ฉ์์ง๊ฐ ์ ์ก๋๊ธฐ ์ ์ ๋๊ตฌ๋ ๋ด์ฉ์ ์์ ํ์ง ์์๋ค๋ ๊ฒ์ ๋ณด์ฅํ๋ ๋ฌด๊ฒฐ์ฑ ๋ฑ์ด ์๋ค.
๋ ๋์ ๋ณด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, ์ฐ๋ฆฌ๋ ์ด๋ฌํ ์ํธํ ๊ธฐ๋ฅ์ ์ํธํ ํ๋กํ ์ฝ
๋ก ๊ฒฐํฉํด์ผํ๋ค.
"์ํธํ๋ฅผ ์ง์ ๊ตฌํํ์ง ๋ง๋ผ"๋ ๋ง์ด ์๋๋ฐ, ์ํธํ์์ ๋ง์ ๊ฒ๋ค์ด ์๋ชป๋ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ ๋๋ก๋ ์ํธํ ๋๊ตฌ๋ฅผ ์ ํํ์ง ์์ผ๋ฉด ๋ณด์์ ๋ฌ์ฑํ ์ ์๊ฑฐ๋, ์ ๋๋ก๋ ๋๊ตฌ๋ฅผ ์ ํํ์ด๋ ์ ๋๋ก ์ฌ์ฉํ์ง ์์ผ๋ฉด ๋ณด์์ด ์ทจ์ฝํด์ง ์ ์๋ค. ๋ํ, ๊ตฌํ ๋จ๊ณ์์ ๋น๋ฐ๋ฒํธ๋ ํค ๊ฐ์ ์ค์ ์ ๋ณด๊ฐ ๋ ธ์ถ๋ ์ ์๋ค. ์ด๋ ์๊ฐ์ ์ธก์ ํ๋ ๊ณต๊ฒฉ์ด๋ ํจ๋ฉ ์ค๋ผํด ๊ณต๊ฒฉ๊ณผ ๊ฐ์ ๊ณต๊ฒฉ์ผ๋ก ์ด์ด์ง ์ ์๋ค.
๊ทธ๋์ ์ํธํ๋ ๊ต์ฅํ ์ด๋ ค์ด ๋ถ์ผ์ด๋ค. ๋ง์ ์ฌ๋ก์์ ์ํธํ ํ๋กํ ์ฝ์ด ์คํจํ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ, ์ด๋ฌํ ์ทจ์ฝ์ ์ ๋ฐ๊ฒฌํ๋ ๋ฐ๋ ์๊ฐ์ด ๊ฝค ๊ฑธ๋ฆด ์๋ ์๊ณ , ๋ช ๋ ์ด ์ง๋๊ธฐ ์ ๊น์ง๋ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์ง ๋ชปํ ์๋ ์๋ค.
๊ทธ๋์ ๋ณด์ ๋ฆฌ์คํฌ๊ฐ ๋งค์ฐ ๋๊ธฐ ๋๋ฌธ์, ์ํธํ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํํ๋ ค๋ฉด ๋ง์ ๋ ธ๋ ฅ์ด ํ์ํ๋ค.
๊ฐ๋ ฅํ ํ๋กํ ์ฝ์ ์ค๊ณํ๋ ค๋ฉด ์ํธํ ๊ธฐ์ ์๊ฐ ๋๊ธฐ ์ํด ๋ง์ ์๊ฐ, ๊ธฐ์ ๋ฐ ์ ๋ฌธ ์ง์์ด ํ์ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ก์ด ๊ณต๊ฒฉ์ ๋ชจ๋ํฐ๋งํ๊ณ ์์ ์ ์ฝ๋์ ์ ์ฉํ ์ ์๋ ๊ฒ์ ์ฐพ์ ๋์ํด์ผํ๋ฉฐ, ์ข ์์ฑ ๋ฌธ์ ์ ํด์ ๊ฐ๋ฅ์ฑ ์๋๋ฆฌ์ค๋ฅผ ๊ด๋ฆฌํด์ผ ํ๋ค.
ํด์ ๊ฐ๋ฅ์ฑ ์๋๋ฆฌ์ค(interoperability scenarios)๋ ์๋ก ๋ค๋ฅธ ํ๋ซํผ, ์์คํ , ์ฑ ๋ฑ์์ ์ํธํ ํ๋กํ ์ฝ์ ์ํธ ์ด์ฉ(interoperate)ํ ์ ์๋์ง์ ๋ํ ์๋๋ฆฌ์ค๋ฅผ ๋งํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ ํ ๋๋ฐ์ด์ค์์ ์์ฑ๋ ์ํธํ๋ ๋ฐ์ดํฐ๊ฐ ์๋๋ก์ด๋ ๋๋ฐ์ด์ค์์๋ ์ ์์ ์ผ๋ก ํด๋ ๋ ์ ์๋์ง, ๋๋ ์๋ก ๋ค๋ฅธ ํด๋ผ์ฐ๋ ์๋น์ค์์ ์ํธํ๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ๊ณต์ ํ ์ ์๋์ง ๋ฑ์ด ํด๋น๋ฉ๋๋ค. ์ด๋ฌํ ์ํธ ์ด์ฉ์ฑ์ ๋ค์ํ ๋๋ฐ์ด์ค ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ์์ ํ๊ณ ์ํํ ๋ฐ์ดํฐ ๊ตํ์ ๊ฐ๋ฅํ๊ฒ ํด์ค๋๋ค. - by chatGPT
์ด ๋ชจ๋ ๊ฒ์ ๋ง์ ์์ ์ ํ์๋ก ํ๋ฉฐ, ์๊ฐ๊ณผ ์๋์ง๋ฅผ ๋นผ์์ ๋ค์ ๋ฉ์ง ์์ด๋์ด๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์๊ฐํด๋ด๋ ๋ฐ ์ง์ฅ์ ์ค ์ ์๋ค. ๋ฐ๋ผ์, ๋ค์ดํฐ๋ธ ๊ธฐ๋ฅ์ ํ์ฉํ๋ฉด ์ด๋ฌํ ์ด๋ ค์์ ํด๊ฒฐํ ์ ์์ผ๋ฉฐ, ํ๋ซํผ์์ ์ง์ํ๋ ํ๋์จ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ๋ ๋์ ๋ณด์ ์์ค์ ๋ฌ์ฑํ ์ ์๋ค.
์ด์ ๋ง์ ์ฌ๋๋ค์๊ฒ ์ต์ํ ๋งค์ฐ ์ผ๋ฐ์ ์ธ ์ํธํ ์๋๋ฆฌ์ค๋ค์ ์ดํด๋ณด๋ ค๊ณ ํ๋ค.
- ๋จผ์ ๋๋ฐ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๋ ๋ฐฉ๋ฒ๋ถํฐ ์์๋ณด๊ณ , (๋ณด์ ์คํ ๋ฆฌ์ง์ ์ํธํ ๊ธฐ์ )
- credential (์๊ฒฉ์ฆ๋ช )๊ณผ key ๋ณดํธ๋ฅผ ์ดํด๋ณด๊ณ , (ํค ์ฒด์ธ ๋๋ ๊ธฐํ ์์ ํ ๋ณด๊ด ์ฅ์น)
- ๋๋ฐ์ด์ค์ ์ฌ์ฉ์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ ๊ฒ์ ์์๋ณด๊ณ , (์์ ํ ํต์ ํ๋กํ ์ฝ๊ณผ ๋ค์ค ์ธ์ฆ ๊ธฐ๋ฅ)
- ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ๋ณดํธํ๊ณ , (์ ์ก ๊ณ์ธต ๋ณด์(TLS) ๋ฐ ์์ ํ ์์ผ)
- ๋ง์ง๋ง์ผ๋ก ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ถ ์๋น์ค๋ ๊ธฐ๊ธฐ์์ ํต์ ์ ์ง์ค์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ ๊ฒ์ ์์๋ณด๋ ค๊ณ ํ๋ค.
์ฒซ๋ฒ์งธ ์๋๋ฆฌ์ค์ธ ๋๋ฐ์ด์ค ๋ด ๋ฐ์ดํฐ ๋ณดํธ ๋ฐฉ๋ฒ์ ๋ํด ๋ ์์ธํ ์ค๋ช ํ๊ณ ์๋ค.
๋จผ์ , ๋ฐํ์๋ ๋ค๋ฅธ ์ฌ๋ฌ ์น์ฌ์ดํธ์์ ์ฝ๋๋ฅผ ๊ธ์ด์ค๋ ๊ฒ์ด ์๋๋ผ, ๋ฐ์ดํฐ ๋ณดํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ๋งํ๊ณ ์๋ค. (๋น์ฐํ ์๊ธฐ..)
์ด๋ ๊ธฐ๊ธฐ ๋ด์ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๊ธฐ ์ํด ํจ์ค์ฝ๋์ ๊ฐ๋ ฅํ ๋ณด์ ๊ธฐ์ ๊ณผ Secure Enclave์ ํ๋์จ์ด ๊ธฐ์ ์ ๊ฒฐํฉํ์ฌ ํค๋ฅผ ์์ ํ๊ฒ ๋ณดํธํ๊ณ , ์ํธํ๋ ๋ฐ์ดํฐ๊ฐ ํจ์ค์ฝ๋๋ฅผ ๋ฌด์ฐจ๋ณ ๋์ ๊ณต๊ฒฉ(brute-force)์ผ๋ก ํด๋ ํ ์ ์๋๋ก ํด์ค๋ค๊ณ ํ๋ค.
๋ํ, ๋ฐ์ดํฐ ๋ณดํธ๋ ํฌ์คํธ ์ปดํ๋ก๋ง์ด์ฆ ๋ณต๊ตฌ(post compromise recovery)๋ฅผ ์ ๊ณตํ๋ค. ์ด๋ ์ ์์ ์ธ ๊ณต๊ฒฉ์๊ฐ ๋๋ฐ์ด์ค์ ํค๋ฅผ ํ๋ํ๋๋ผ๋ ์ฌ์ฉ์๊ฐ ํจ์ค์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋ฉด ๊ทธ ์ดํ์ ์ํธํ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ ์ด์ ํค์์ ๋ณต๊ตฌ๋ ์ ์๋๋ก ๋ณด์ฅํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ฑ์์ ๋ฐ์ดํฐ ๋ณดํธ ์์ฑ์ ์ค์ ํ ์ ์๋ค. ๊ธฐ๊ธฐ ๋ถํ ์ดํ ์ฒ์์ผ๋ก ์ฌ์ฉ์๊ฐ ํฐ์ ์ ๊ธ ํด์ ํ ๋๊น์ง ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ ์ ์๋๋ก ์ค์ ํ๋ ๊ฒ์ผ๋ก๋ถํฐ ์์ํ์ฌ, ๋ค์ํ ์์ค์ ๋ณด์ ์์ฑ์ ์ ํํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, ์์ ํ ํ์ผ ๋ณดํธ๋ฅผ ํ ์ ์๋๋ฐ(complete file protection), ์ฌ์ฉ์๊ฐ ํฐ์ ์ ๊ธ์ ํด์ ํ ํ์๋ง ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์์์ ์๋ฏธํ๋ค. ์ฌ์ฉ์๊ฐ ํฐ์ ๋ค์ ์ ๊ทธ๊ณ ์ฃผ๋จธ๋๋ ๊ฐ๋ฐฉ์ ๋ค์ ๋ฃ์ผ๋ฉด ๋ฐ์ดํฐ๊ฐ ๋ค์ ๋ณด์ ์ํ๊ฐ ๋๋ค.
์ฌ์ฉํ๊ธฐ๋ ๋งค์ฐ ์ฌ์ด๋ฐ, option์ .completeFileProtection์ ์ค์ ํ๋ฉด ๋๋ค.
์ ์ฝ๋๋ ํ์ผ์ ์์ ํ ํ์ผ ๋ณดํธ ์ต์ ์ผ๋ก ์ํธํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋ค.
fileURL
: ์ํธํํ๋ ค๋ ํ์ผ์ URLdata
: ์ํธํํ๋ ค๋ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ Data ๊ฐ์ฒดwrite(to:options:)
: Data ๊ฐ์ฒด๋ฅผ ํ์ผ์ ์ฐ๋ ๋ฐ ์ฌ์ฉ๋จ.completeFileProtection
์ต์ : ๋ฐ์ดํฐ ๋ณดํธ๋ฅผ ์ํด ์ ์ฒด ํ์ผ ๋ณดํธ ๊ธฐ๋ฅ์ ํ์ฑํ (์์ ํ ํ์ผ ๋ณดํธ ์ต์ ์ค์ ํ๋ฉด -> ์ก์ธ์ค ๊ถํ์ ๊ฐ์ง ์ฑ์ด๋ ์ฌ์ฉ์์๊ฒ๋ง ๋ณตํธํ ๋ฐ ์ก์ธ์ค ๊ถํ์ด ๋ถ์ฌ๋๊ณ , ํด๋น ํ์ผ์ ๋ฐฑ์ ๋ฐ ๋ณต์ ์์๋ ์ถ๊ฐ์ ์ธ ๋ณด์์ด ์ ๊ณต๋๋ค๊ณ ํจ)
ํ์ผ ์ธ์๋ ๋ณดํธํด์ผํ๋ ์ค์ํ ์ ๋ณด๊ฐ ๋น์ฐํ ์์ ๊ฑด๋ฐ,
์๋น์ค ๋๋ ์ํธํ ํค์์ ์ธ์ฆํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ธ์ฆ ํ ํฐ
๊ณผ ๊ฐ์ ์๊ฒฉ ์ฆ๋ช
์ด ํ์ํ ์๋ ์๋ค.
์ด๋ฐ ๊ฒฝ์ฐ์, UserDefaults๋ฅผ ์ฌ์ฉํ๋ฉด ์๋๋ค. ๋์ Keychain
์ฌ์ฉํด์ผํจ.
SecItem API์ Keychain์ ์ฌ์ฉํ๋ฉด ๋ก์ปฌ Keychain์์์ ๋ง์ฐฌ๊ฐ์ง๋ก ํญ๋ชฉ์ ์์ฑํ ์ ์๋ค. ์ฆ, ํด๋น ํญ๋ชฉ์ ํด๋น ๋๋ฐ์ด์ค ๋๋ iCloud Keychain์ ์ ์ง๋๋ฉฐ, ์ฌ์ฉ์ ๊ณ์ ์์ ๋ชจ๋ ๋๋ฐ์ด์ค์์ ๋๊ธฐํ๋๋ค.
์ด๋ฅผ ์ํด์๋ ์ด์ค ์ธ์ฆ์ด ํ์ฑํ๋ ์ฌ์ฉ์ ๊ณ์ ์ด ํ์ํ๋ค. Keychain์๋ ์์ ๋งํ ํ์ผ๊ณผ ๋งค์ฐ ์ ์ฌํ ๋ณดํธ ๊ธฐ๋ฅ์ด ์์ผ๋ฉฐ, ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ๋ ์ ๊ณต๋๋ค.
(์ด์ค์ธ์ฆ : ์ํธ ์ธ์๋ ์ถ๊ฐ ์ธ์ฆ ๋จ๊ณ๋ฅผ ์๊ตฌํ์ฌ ๋ณด์์ ๋์ด๋ ๋ฐฉ์. ์๋ฅผ ๋ค์ด, ์ํธ ์ ๋ ฅ ํ์ ์ฌ์ฉ์์๊ฒ ๋ฌธ์ ๋ฉ์์ง๋ ์ธ์ฆ ์ฑ์ ํตํ ์ฝ๋ ์ ๋ ฅ์ ์์ฒญํ๋ ๊ฒ.)
์ํธํ ํค๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ฟ๋ง ์๋๋ผ, ์ฌ์ฉ์๊ฐ ์ธ์ ์ธ์ฆํ๋์ง์ ์ด๋ป๊ฒ ์ธ์ฆํ๋์ง ์์์ผ ํ ๋๊ฐ ์๋๋ฐ, ์ด๋ฅผ ์ํด LocalAuthentication์ด ์ ๊ณต๋๋ค.
LocalAuthentication์ ์ฌ์ฉํ๋ฉด, ์์ ์ ์คํํ ๋ ์กฐ๊ฑด์ ์ค์ ํ ์ ์๋๋ก ํด์ค๋ค. ์๋ฅผ ๋ค์ด ์ฌ์ฉ์๊ฐ FaceID์ ๊ฐ์ ์์ฒด ์ธ์์ผ๋ก ์ธ์ฆํด์ผ ํ๋ ๊ฒ์ ์๊ตฌํ ์ ์๋ค. ์์ฒญ ํธ๋ฆฌํจ!
macOS์์๋ ๋๋ฐ์ด์ค ์ธ์ฆ ์์ฑ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์๊ฐ ๋น๋ฐ๋ฒํธ ๋๋ Touch ID๋ฅผ ์ง์ํ๋ ์์ฒด ์ธ์์ผ๋ก ์ธ์ฆํ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค. ์ฌํด๋ ์ฑ์์ ์ด๋ ํ ๋ณ๊ฒฝ ์์ด Apple Watch์ ๋๋ธ ํด๋ฆญ์ผ๋ก ์ธ์ฆํ ์ ์๋๋ก ์ง์ํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋น๋ฐ๋ฒํธ ์ฌ์ฉ์ ์ค์ด๊ณ , ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ ์ ์๋ค.
์ด๋ฐ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํจ์ผ๋ก์จ, 2๊ฐ์ ์๋ก์ด ์ธ์ฆ ์ ์ฑ ์ ์ถ๊ฐํ๋ค.
- ์์ฒด ์ธ์ ๋ฐ Apple Watch๋ก ์ธ์ฆ์ ์ค์ด๋ ๊ฒ
- Watch๋ก๋ง ์ธ์ฆํ๋ ๊ฒ (Watch๋ง ์ฌ์ฉํด์ ์ธ์ฆํ๋ ๊ฒฝ์ฐ, ๋งฅ๋ถ์ ์ฌ์ฉํ๋ ์ค ๋งฅ๋ถ์์ ๋ก๊ทธ์ธ์ ์๋ํ๋ฉด ์ธ์ฆ ์์ฒญ์ด ๋ฐ๋ก Apple Watch๋ก ์ ๋ฌ๋์ด Apple Watch์์ ๋๋ธ ํด๋ฆญ๋ง ํ๋ฉด ๋งฅ๋ถ์ ๋ก๊ทธ์ธํ ์ ์์. ์ด ๊ฒฝ์ฐ, Apple Watch๊ฐ ๊ทผ์ฒ์ ์์ด์ผํ๋ฉฐ, Apple Watch์ ๋งฅ๋ถ์ด ์๋ก ํ์ด๋ง๋์ด ์์ด์ผ ํ๋ค. ์ด๋ฅผ ํตํด, ๋น๋ฐ๋ฒํธ ์์ด Apple Watch๋ง์ผ๋ก ๋งฅ๋ถ ๋ก๊ทธ์ธ์ด ๊ฐ๋ฅ -> ์ฌ์ฉ์ ๊ฒฝํ ํฅ์)
์ง๊ธ๊น์ง Keychain์ ๋ํด ์ธ๊ธํ๋๋ฐ, ๋ฐ์ดํฐ ๋๊ธฐํ์ ๋ํด์๋ ํ๋ฅญํ ํด๊ฒฐ์ฑ ์ด ์๋ค. -> โญ๏ธ CloudKit
CloudKit์ ๊ฐ์ธ CloudKit ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ asset์ ์ํธํํ์ฌ ์ฌ์ฉ์๊ฐ ์ฑ์ ๋ก๊ทธ์ธํ์ง ์์๋ ๋ชจ๋ ๋๋ฐ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ๊ณต์ ํ ๋๋ ์ฌ์ฉํ ์ ์๋ค.
(์๋ฅผ ๋ค์ด, iPhone์์ ์ฑ์ ๋ก๊ทธ์ธํ๊ณ ์ผ๊ธฐ๋ฅผ ์์ฑํ๋ฉด CloudKit์ iPhone์ ๊ฐ์ธ CloudKit ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํด๋น ์์ฐ(์ผ๊ธฐ)์ ์ํธํํ์ฌ ์ ์ฅํ๋ค. ๊ทธ๋ฐ ๋ค์, ์ฌ์ฉ์๊ฐ iPad์์ ์ฑ์ ๋ก๊ทธ์ธํ๋ฉด CloudKit์ ํด๋น ์ฌ์ฉ์์ iCloud ๊ณ์ ์ ์ํธํ๋ ์์ฐ(์ผ๊ธฐ)์ด ์ ์ฅ๋ ๊ฒ์ ํ์ธํ๊ณ ํด๋น ์์ฐ(asset)์ iPad์ ๊ฐ์ธ CloudKit ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋๊ธฐํํ๋ค. ๊ทธ ๊ฒฐ๊ณผ, ์ฌ์ฉ์๋ iPad์์๋ ์ฑ์ ๋ก๊ทธ์ธํ์ง ์์๋ ์ ์ฅํ ์ผ๊ธฐ๋ฅผ ๋ณผ ์ ์๋ค.)
์๋ ๋ฐฉ์์ Apple์ด iCloud ID์ ๋ฐ์ดํฐ ์ ์ด๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ด๋ค. ์ ์์ ์์๋ ํ์ผ์์ asset์ ๋ง๋ ๋ค. ์ด asset์ผ๋ก record๋ผ๋ ๊ธฐ๋ก์ ๋ง๋ค์๋ค. ๊ทธ๋ฐ ๋ค์ ์ด record๋ฅผ Private CloudKit ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ก๋ํ๋ค. ๊ทธ๋ผ ๋!
์ด์ ๋ณด์ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ์ดํด๋ณผ๊ฑด๋ฐ, ๋ณด์ ์ฐ๊ฒฐ์ ์ฌ์ฉ์๊ฐ ์ฑ์ ํตํด ์ก์ธ์คํ๋ ๋ชจ๋ ์ ๋ณด์ ๊ธฐ๋ฐ์ฑ์ ๋ณด์ฅํ ๋ฟ๋ง ์๋๋ผ ์ ๋ณด์ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ๊ณ , ์ ๋ณด๊ฐ ์์๋์ง ์๋๋ก ํ๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ๋งค์ฐ ์ค์ํ๋ค!
โ ์ฌ๊ธฐ์ ํ์ง ๋ง์์ผ ํ ์ฒซ ๋ฒ์งธ๋ Custom Protocol์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ํ์ค ์๋ฃจ์ ์ ์ฌ์ฉํด์ผ ํ๋ค. TLS (์ ์ก ๊ณ์ธต ๋ณด์)์ด๋ค.
Network Framework๋ URLSession์์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์ด์ ์์๋ฅผ ๋ณผํ ๋ฐ, ๊ทธ ์ ์ ๋จผ์ Secure Transport๋ฅผ ๋์ด์ ์ฌ์ฉํ์ง ๋ง๋ผ๊ณ ์๊ธฐํ๊ณ ์๋ค. ์ด๋ฏธ Secure Transport๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด, Network framework๋ URLSession์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ ๊ฒ์ ๊ถ์ฅํ๊ณ ์์.
(Secure Transport์ Apple์ ์์ ๋ฒ์ ์์ ์ฌ์ฉ๋์๋ ๋คํธ์ํฌ ๋ณด์ ํ๋ ์์ํฌ. ๋ ์ด์ ์๋ก์ด ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์ง ์์.)
Network Framework์์๋ ์ฐ๊ฒฐ์ ์ค์ ํ ๋ .tls
๋ง ์ฌ์ฉํ๋ฉด ๋๊ณ ,
URLSession์ ๊ฒฝ์ฐ, https
endpoint๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
๊ฒฝ์ฐ์ ๋ฐ๋ผ TLS๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ ์๋ ์๋๋ฐ, CDN (Contents Delivery Network)๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ๊ทธ๋ฐ๋ฐ, ์ด ๊ฒฝ์ฐ ์ธ์ฆ์๋ฅผ ๊ด๋ฆฌํด์ผ ํ๋๋ฐ, ์ธ์ฆ์๋ฅผ ๊ด๋ฆฌํ ๋ Parser๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณด์์ ์ทจ์ฝํด์ง ์ ์๋ค๊ณ ํ๋ค.
๊ทธ๋ด ๋ ์ธ์ฆ์ ๊ฒ์ฆ์ ์ํด SecTrust
๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
SecTrust๋ ์ธ์ฆ์ ์ ํจ์ฑ ๊ฒ์ฆ์ ์ฝ๊ฒ ์ ๊ณตํ๋ค. ์ธ์ฆ์ ์ ํจ์ฑ ๊ฒ์ฆ์๋ ๋ง๋ฃ, ํ๊ธฐ ๋ฑ๊ณผ ๊ฐ์ ์ ๋ณด๊ฐ ํฌํจ๋ ์ ์์ผ๋ฉฐ, ์ธ์ฆ์๊ฐ ์ ํจํ๋ค๋ ๊ฒ์ ํ์ธํ ํ์๋ ํค๋ฅผ ์ฌ์ฉํ ์ ์๋ค. (TLS ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์ธ์ฆ์ ๊ฑฑ์ ํ ํ์ ์์)
์ด๋ฒ ๋ฆด๋ฆฌ์ค์์๋ SecTrust์ ์๋ก์ด ํจ์๊ฐ ์ถ๊ฐ๋์๋๋ฐ, 2๊ฐ์ง๋ฅผ ๊ฒฐํฉํ์ฌ ์ํํ๋ค.
- ์ธ์ฆ์ ์ ํจ์ฑ ๊ฒ์ฆ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋๋ก ํ๋ฉฐ, (์ธ์ฆ์๊ฐ ๊ฒ์ฆ๋๋ ๋์ ์ฑ์ด ๋ค๋ฅธ ์์ ์ํ ๊ฐ๋ฅ)
- ์คํจ ์ ์๋ฌ ํธ๋ค๋ง ๋ฐ ๋๋ฒ๊น ์ด ๊ฐ๋ฅํ๋๋ก ํด์ค๋ค.
์ง๊ธ๊น์ง 5๊ฐ์ง ์๋๋ฆฌ์ค๋ฅผ ์ดํด๋ดค๋๋ฐ,
์ด๋ค ์๋๋ฆฌ์ค์์๋ ์์คํ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๊ณ , ์ด๋ฏธ ์ฌ์ฉ ์ค์ด๋ฉด ์ต์์ ์์ฑ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ๋ฐ ๋น์ฆ๋์ค ์์ฐ์ ์ต๋ํ ๋ณดํธํ๋๋ก ๋ ธ๋ ฅํด์ผ ํ๋ค.
์ด๋ค ์ํฉ์์๋ Apple ์์คํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๊ฒ์ด ํ์ค์ ์ด์ง ์์ ์ ์๋ค. ์๋ฅผ ๋ค์ด, Apple ์ํ๊ณ ์ธ๋ถ์์ ์ํธ ์ด์ฉ์ฑ์ด ํ์ํ ์ ์๋ค. ์๋น์ค ์ธ์ฆ์ด ํ์ํ ์๋ ์๊ณ ๊ตฌํํด์ผ ํ ๋ช ์ธ๊ฐ ์ฃผ์ด์ง ์๋ ์๋ค. ์ด ๊ฒฝ์ฐ๋ฅผ ์ํ ํ๋ฅญํ ์๋ฃจ์ ์ด ๋ฐ๋ก Apple CryptoKit์ด๋ค.
Apple CryptoKit์ Swift ์ํธํ API๋ก, ์ด์ ์ ์ค๋ช ํ ๊ธฐ๋ฅ๋ค๊ณผ ๊ฐ์ ์ฒ ํ์ ๋ฐ๋ฅด๋๋ก ์ค๊ณ๋์ด ์ํธํ ํจ์ ๋ฐ ์๋ชป ์ฌ์ฉํ๊ธฐ ์ด๋ ค์ด ํจ์์ ์ฝ๊ฒ ์ก์ธ์คํ ์ ์๋๋ก ํ๋ค.
Apple CryptoKit์ 4๊ฐ์ง ์ธก๋ฉด์ ๋ํด ์๊ธฐํ๋ ค๊ณ ํ๋ค.
- CryptoKit๊ณผ Swift
- CryptoKit์์ ์ฌ์ฉํ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ
- Secure Enclave ๋ฐ ์์ฒด ์ธ์ฆ
- ์ฑ๋ฅ
์์ ์๋ Swift์์ C Crypto API๋ฅผ ํธ์ถํ ๋ ์ด๋ ๊ฒ ์๊ธด ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค๊ณ ํ๋ค.. ๋ฒํผ๋ฅผ ํ ๋นํ๊ณ , ๊ฐ ๋ฒํผ์ ํฌ๊ธฐ๋ฅผ ํ์ ํ๊ณ ์ด์ฉ๊ณ ์ ์ฉ๊ณ ....
ํ์ง๋ง ์ด์ Apple CryptoKit์์๋ ์ฝ๋ ํ ์ค๋ก ๋์ผํ ์์ ์ ์ํํ ์ ์๋ค.
- dataToEncrypt: ์ํธํํ ๋ฐ์ดํฐ
- symmetricKey: ๋์นญํค. ์ํธํ์ ์ฌ์ฉ๋จ
- AES.GCM.seal: dataToEncrypt์ symmetricKey๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ์ฌ์ฉํ๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ํธ๋ฌธ์ ์์ฑํจ. ์์ฑ๋ ์ํธ๋ฌธ์ sealed ๋ณ์์ ํ ๋น๋๋ค.
C Crypto API๋ฅผ ํธ์ถํ ๋, ์์ ๋ง์ ์ํธํ ํค๋ฅผ ์์ฑํด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ํธํ ํค๋ ์ผ๋ฐ์ ์ผ๋ก ๋นํธ๋ก ํํ๋๊ธฐ ๋๋ฌธ์ ๋จผ์ ์๋ง์ ๋นํธ์ ๋ฐ์ดํธ๋ฅผ ๋ณํํด์ผ ํ๋ค. ๊ทธ๋ฐ ๋ค์ ๊ทธ ๋ฐ์ดํธ์ ๋ํด ๋ฒํผ๋ฅผ ํ ๋นํ๊ณ , ์ํธํ๋ ๋ณด์ ๋์๋ก ๋ฒํผ๋ฅผ ์ฑ์์ผ ํ๋ค. ๊ทธ๋ ๊ฒ ํค๋ฅผ ์ฌ์ฉํ ์ค๋น๊ฐ ๋์๊ณ , ํค๋ฅผ ๋ค ์ฌ์ฉํ ํ์๋ ๋ฉ๋ชจ๋ฆฌ์์ ํค๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด ํค๋ฅผ 0์ผ๋ก ์ค์ ํด์ผ ํ๋ค.
CryptoKit์์ ํค๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ฝ๋ ํ ์ค๋ก ๋๋๋ค. SymmetricKey initializer๋ฅผ ํธ์ถํ๊ณ , ํค๋ฅผ ์ ์งํ ๋นํธ ์๋ฅผ ์ ๋ฌํ๋ค.
ํ ๋น์ด ํด์ ๋ ๋๋ง๋ค ์ด ๊ฐ์ ARC์ ๋ํด ์๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด ํค๋ฅผ ๋ฆด๋ฆฌ์ฆํ ๋ 0์ผ๋ก ์ค์ ํ ์ ์๋ค.
CryptoKit์ MAC (Message Authentication Code)์ ๊ฐ์ ๊ฐ์ ๊ฒ์ฆํ ๋ ๋ฑ๊ฐ ์ค์ (equitable conformance)๋ฅผ ์ํํ๊ธฐ ๋๋ฌธ์, ๋ ๊ฐ์ MAC ๊ฐ์ == ์ฐ์ฐ์๋ก ๊ฒ์ฆํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ CryptoKit์ ํด์ ํจ์ H๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ ๋ค๋ฆญ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋๋ก ํ๋กํ ์ฝ์ ์ ์ํ๋ค. ์ฝ๋ ๋ฒ ์ด์ค์์ ๋ค๋ฅธ ํด์ ํจ์๋ฅผ ์ ๋ฌํด์ผ ํ๋ ์ฌ๋ฌ ์์น์์ ๋์ผํ ์ฝ๋๋ฅผ ํ ๋ฒ ์์ฑํ๊ณ ํจ์ ํธ์ถ์ ๋ค๋ฅธ ํด์ ํจ์๋ก ๋งค๊ฐ๋ณ์ํ ํ๊ณ ์๋ค.
(-> ์๋ฅผ ๋ค์ด์, SHA-256์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํด์ํ๋ ํจ์๋ฅผ ์์ฑํ๊ณ , ์ด ํจ์๋ฅผ ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฉํด์ผ ํ๋ค๊ณ ์น์. ๋์ค์ ์๊ณ ๋ฆฌ์ฆ์ ์ ๊ทธ๋ ์ด๋ํ์ฌ SHA-384๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๊ณ ํ๋ฉด ๋ชจ๋ ํจ์ ํธ์ถ์ ์ฐพ์์ ์๋ก์ด ํจ์๋ก ๋ฐ๊ฟ์ผ ํ๋ค. ํ์ง๋ง Cryptokit์ ์ ๋ค๋ฆญ ํ๋กํ ์ฝ์ ์ ์ํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. ํด์ํจ์ H๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ ๋ค๋ฆญ ํจ์๋ฅผ ์์ฑํ๊ณ , ์ด ํจ์๋ฅผ ํธ์ถ ํ ๋ ๋ค๋ฅธ ํด์ ํจ์๋ฅผ ๋งค๊ฐ๋ณ์ํํด์ ์ ๋ฌํ ์ ์๋ค. ๊ทธ๋์ ์ด ํจ์๋ฅผ ํ ๋ฒ๋ง ์์ฑํ๋ฉด, ์ธ์ ๋ ์ง ๋ค๋ฅธ ํด์ ํจ์๋ฅผ ์ฌ์ฉํด์ ํธ์ถํ ์ ์๋ค.)
import CryptoKit
func hashData<H: HashFunction>(_ data: Data, using hashFunction: H.Type) -> H.Digest {
return H.hash(data: data)
}
let data = "Hello, World!".data(using: .utf8)!
let sha256Digest = hashData(data, using: SHA256.self)
let sha512Digest = hashData(data, using: SHA512.self)
์ด์ CryptoKit์์ ์ง์๋๋ ์ผ๋ จ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์์๋ณด๋ ค๊ณ ํ๋ค.
CryptoKit์ ํด์ ํจ์, ๋ฉ์์ง ์ธ์ฆ ์ฝ๋, ์ธ์ฆ๋ ์ํธํ, ํค ๊ณ์ฝ ๋ฐ ์๋ช ์ ์ง์ํ๋ค.
์ด๋ฌํ ์๊ณ ๋ฆฌ์ฆ ์ค ์ผ๋ถ๋ Common Crypto ๋๋ SecKey์ ๊ฐ์ ํ๋ ์์ํฌ์์ ์ด์ ์ ์ง์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด์ง๋ง, ์ฒ์ ์ง์ํ๋ ์๊ณ ๋ฆฌ์ฆ๋ ์๋ค. (๐ข ์ด๋ก์์ผ๋ก ํ์๋ ์๊ณ ๋ฆฌ์ฆ)
Insecure Module๋ ์๋๋ฐ, ์ด ๋ชจ๋์ MD5 ๋ฐ SHA1๊ณผ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์, ๋ณด์ ๊ธฐ์ค์ ์ถฉ์กฑ์ํค์ง๋ ๋ชปํ์ง๋ง ์ด์ ์ ์ฌ์ฉํ๋ ์ฝ๋์์ ํธํ์ฑ์ ์ ์งํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ ์ ์๋ค.
ํด์ ํจ์๋ถํฐ ์ดํด๋ณด๋ฉด,
ํด์ ํจ์๋ digest
๋ผ๊ณ ํ๋ ๊ณ ์ ํฌ๊ธฐ์ output์ ์์ฑํ๋ฉฐ, ์ํธํ ์์ฑ์ ์ ๊ณตํ๋ค.
SHA-256์ Secure Hash Algorithm์ ์ผ์ข ์ผ๋ก, ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๊ณ ์ ๋ ํฌ๊ธฐ์ ํด์ ๊ฐ์ผ๋ก ๋ณํํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ์ด ํด์ ํจ์๋ 256๋นํธ ํฌ๊ธฐ์ ์ถ๋ ฅ ๊ฐ์ ์์ฑํ๋ฉฐ, ์์์ ๊ธธ์ด์ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์๋ค์ธ๋ค.
SHA-256์ ์ฃผ๋ก ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๊ฒ์ฌํ๋ ์ฉ๋๋ก ์ฌ์ฉ๋๋๋ฐ, ์๋ฅผ ๋ค์ด ํ์ผ์ ์ ์กํ๊ฑฐ๋ ์ ์ฅํ๊ธฐ ์ ์ ํด๋น ํ์ผ์ SHA-256 ํด์ ๊ฐ์ ๊ณ์ฐํ์ฌ ๋์ค์ ํ์ผ์ด ๋ณ๊ฒฝ๋์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์๋ค.
์ฌ๊ธฐ ํด์ํ๊ณ ์ถ์ ์ค๋์ค ๋ฐ์ดํฐ๊ฐ ์๋ค. ๊ทธ๋ฆฌ๊ณ SHA256 ํด์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ด์ ์คํธ๋ฅผ ๊ณ์ฐํ๋ค.
ํ์ผ์ ์คํธ๋ฆฌ๋ฐํ๋ ๊ฒฝ์ฐ, ์ ๋ ฅ ์คํธ๋ฆผ์์ ํ์ผ์ ์ฝ์ ์ ์๋ค.
์ด ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๋๋ง๋ค ์ผ๋ถ๋ถ์ฉ ์ฒ๋ฆฌํ์ฌ ํด์ ๊ฐ์ ๊ณ์ํด์ ์
๋ฐ์ดํธํ๋ฉด์, ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ๋ ์ต์ข
๊ฒฐ๊ณผ๋ฅผ ์ป๊ฒ ๋๋ค. (incremental hashing / streaming hashing)
์ด๋ฅผ ์ํด CryptoKit์์๋ ํด์ ํจ์๋ฅผ ์ด๊ธฐํํ๋ ๋ฉ์๋์ ํด์ ๊ฐ์ ์ ๋ฐ์ดํธํ๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค. ์ด๋ฅผ ํตํด ๋์ฉ๋์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ , ๋ณด์์ ์ผ๋ก ์์ ํ ๋ฐฉ์์ผ๋ก ํด์ ๊ฐ์ ๊ณ์ฐํ ์ ์๋ค.
ํด์ ํจ์์ MT ์ด๋์
๋ผ์ด์
๋ฅผ ํธ์ถํ์ฌ ํด์๋ฅผ ์ด๊ธฐํํ๋ ๊ฒ์ผ๋ก ์์ํ๋ค. ๊ทธ๋ฐ ๋ค์ ํด์ํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ณ ์
๋ฐ์ดํธ ๋ฉ์๋๋ฅผ ํ๋ฒ ์ด์ ํธ์ถํ์ฌ ํด์ค ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ด์ ์คํธ๋ฅผ ๊ณ์ฐํ๋ ค๋ฉด ํด์์ ๋ํด finalize ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ๋ค์ด์ ์คํธ๊ฐ ๋ฐํ๋๋ค.
(๊ทผ๋ฐ ์ ์์ ์ฝ๋์์๋ MT ์ด๋์
๋ผ์ด์ ํธ์ถํ์ง ์์..)
MT ์ด๋์ ๋ผ์ด์ : CryptoKit์์ ์ฌ์ฉ๋๋ Message Authentication Code(MAC)์ ๊ณ์ฐํ๊ธฐ ์ํ Hasher๋ฅผ ์ด๊ธฐํํ๋๋ฐ ์ฌ์ฉ๋๋ ๋ฉ์๋. SHA-256์ ์ฌ์ฉํ์ฌ MAC์ ๊ณ์ฐํ๋ ค๋ฉด, SHA256.MAC๋์ SHA256.MT๋ฅผ ์ฌ์ฉํ์ฌ Hasher๋ฅผ ์ด๊ธฐํ ํ๋ค.
Authenticated Encryption์ ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด ์ธ์ฆ
๊ณผ ์ํธํ
๋ฅผ ๋ชจ๋ ์ ๊ณตํ๋ค.
์ํธํ ํ๋กํ ์ฝ์์ Authentication์ด ์ทจ์ฝํ๋ฉด ๋ค์ํ ๊ณต๊ฒฉ์ด ๋ฐ์ํ ์ ์์ผ๋ฉฐ, ์๋์ผ๋ก ์ธ์ฆ๊ณผ ์ํธํ๋ฅผ ๊ฒฐํฉํ๋ฉด Oracle ๊ณต๊ฒฉ์ ํจ๋ฉํ ์ ์๋ค. ๋ฐ๋ผ์ ๋จ์ผ API ํธ์ถ๋ก ์ ๊ณตํ๋๊น ์ด๊ฑธ ์ฐ๋ผ๊ณ ํ๋ค.
ํ์ดํน ์ฑ ํ๋ก์ ํธ๋ฅผ ์งํ์ค์ด๋ผ๊ณ ํด๋ณด์. ์ฑ์ ๋๋ถ๋ถ์ ์ปจํ ์ธ ๋ ๋ฌด๋ฃ์ด์ง๋ง, ์ฑ ๋ด ๊ตฌ๋งค๋ฅผ ํตํด ์ถ๊ฐ ์ปจํ ์ธ ๋ฅผ ๊ตฌ๋งคํ ์ ์๋ค. ์ปจํ ์ธ ๋ฅผ ๊ตฌ๋งคํ ํ์๋ ํด๋น ์ปจํ ์ธ ๋ฅผ ๊ฒ์ํ ์ ์๋ค.
์ฌ์ฉ์ ์๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ๋ค์ด๋ก๋ ์๋๋ฅผ ์ ์งํ๊ธฐ ์ํด ์ปจํ ์ธ ์ ๋ฌ ๋คํธ์ํฌ (CDN, Content Delivery Network)๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค.
์ปจํ ์ธ ๋ฅผ ๊ฒ์ํ๋ ค๋ฉด ๋จผ์ ์๋ฒ์์ ์ฑ ๋ด ๊ตฌ๋งค๊ฐ ์ ํจํ์ง ํ์ธํ๋ค. ๊ทธ๋ฐ ๋ค์ ์๋ฒ์์ ํค๋ฅผ ๊ฒ์ํ์ฌ ๋๋ฐ์ด์ค๋ก ์ ๋ฌํ๋ค.
CDN์์ ์ํธํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ํค๋ฅผ ์ฌ์ฉํ์ฌ ์ํธํ๋ ์ปจํ ์ธ ๋ฅผ ๋ณตํธํํ๋ค. ํค๊ฐ ๋ง๊ณ , CDN์์ ๋ฐ์ดํฐ๊ฐ ๋ณ์กฐ๋์ง ์์๋ค๋ฉด, map ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ์ ์๋ค.
์ด์ ์ฝ๋๋ก ์ดํด๋ณด์๋ฉด
- ์ํธํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ด๋ก๋ ๋ฐ๊ณ ,
- ์ด ๋ฐ์ดํฐ๋ฅผ ๋ณตํธํํ์ฌ
- ์ง๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์์ ์ ์ํํ๊ณ ์๋ค.
์ฐ์ ์๋ฒ์์ ๊ฒ์ํ ํค ๋ฐ์ดํฐ๋ก SymmetricKey๋ฅผ ์ด๊ธฐํ ํ๋ค. ์ฌ๊ธฐ์๋ ๋ค์ด๋ก๋๋ ์ํธํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณตํธํํ๋๋ฐ ํ์ํ ๋น๋ฐ ํค ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค.
๊ทธ๋ฐ ๋ค์ sealedBox๋ฅผ ์ด๊ธฐํ ํ๋ค. ์ด ๊ฐ์ฒด๋ ChaCha20-Poly1305 ์ํธํ๋ฐฉ์์ผ๋ก ์ํธํ๋ ๋ฐ์ดํฐ์ Nonce ๋ฐ Tag๋ฅผ ๋ชจ๋ ํฌํจํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ฒซ๋ฒ์งธ ์ค์์ ์์ฑํ ๋น๋ฐํค์ธ key๋ฅผ ์ฌ์ฉํ์ฌ SealedBox ๊ฐ์ฒด๋ฅผ ์ด์ด์ ์ํธํ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋ฌธ์ผ๋ก ๋ณตํธํํ๋ค. ์ด๋ ๊ฒ ํด์ ์ง๋ ๋ฐ์ดํฐ๋ฅผ ๋ณตํธํํ๊ณ ์ฌ์ฉ์๊ฐ ์ด ์ง๋๋ฅผ ํ์ฉํ ์ ์๊ฒ ํ๋ค.
SymmetricKey: ์ํธํ์ ๋ณตํธํ์ ๋์ผํ ๋น๋ฐํค๋ฅผ ์ฌ์ฉํ๋ ๋์นญํค ์ํธํ ์๊ณ ๋ฆฌ์ฆ์์ ์ฌ์ฉ๋๋ ํค
SealedBox: ๊ณต๊ฐํ ์ํธํ ๋ฐฉ์ ์ค ํ๋์ธ Asymmetric-Key ์ํธํ ๋ฐฉ์์์ ์ฌ์ฉ๋๋ ์ํธํ ๊ฐ์ฒด. ํ๋ฌธ๊ณผ ๋น๋ฐํค๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋๋ ์ํธํ๋ ๋ฉ์ธ์ง์ด๋ค. ์ํธํ๋ ๋ฉ์ธ์ง์ ํจ๊ป Nonce์ ํจ๊ป ์ฌ์ฉ๋๋ค. SealedBox ๊ฐ์ฒด๋ ํ๋ฌธ๊ณผ Nonce, Tag๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ์ด ์ธ๊ฐ์ง ๊ฐ์ผ๋ก๋ถํฐ ์ํธํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ํ ์ ์๋ค. SealedBox๋ ์ํธํ๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ ์ฅํ๊ณ ์ ์กํ ๋ ์ฌ์ฉ๋๋ค.
Nonce: ํ ๋ฒ๋ง ์ฌ์ฉ๋๋ ์์์ ๊ฐ์ ์๋ฏธํ๋ฉฐ, ์ํธํ๋ฅผ ์ํด ์ฌ์ฉ๋๋ค.
ChaCha20-Poly1305: ๋น๋ฐํค ๋์นญ ์ํธํ ๋ฐ ์ธ์ฆ ์๊ณ ๋ฆฌ์ฆ. ChaCha20์ ์คํธ๋ฆผ ์ํธํ ๋ฐฉ์์ด๊ณ , Poly1305๋ ๋ฉ์์ง ์ธ์ฆ ์ฝ๋(MAC) ๋ฐฉ์์ด๋ค. ์ด ๋์ ๊ฒฐํฉํ์ฌ ์ฌ์ฉํ์ฌ, ๋ฉ์์ง๋ฅผ ๋์์ ์ธ์ฆํ๊ณ ์ํธํํ๋ ๋ฐฉ์์ผ๋ก ๋ณด์์ฑ์ ๋์ผ ์ ์๋ค.
๋ค์์ ์๋ช (Signature)์ด๋ค. ์๋ช ์ ๊ฐ์ธ ํค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ธ์ฆํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ํด๋น ์๋ช ์ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐ๋ ๊ณต๊ฐ ํค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, ์๋ช ์ ์ฌ์ฉํ์ฌ ๋ก๊ทธ์ธ ๋๋ ๋ ์ก๊ธ๊ณผ ๊ฐ์ ๋ฏผ๊ฐํ ํธ๋์ญ์ ์ ์ธ์ฆํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ดํด๋ณด์.
๋จผ์ ๋๋ฐ์ด์ค์ ๊ฐ์ธ ํค๋ฅผ ์์ฑํ๋ค.
๊ทธ๋ฐ ๋ค์ ์ฐ๊ฒฐ๋ ๊ณต์ฉ ํค๋ฅผ ๊ฒ์ํ๋ค. ์ฐ๊ฒฐ๋ ๊ณต์ฉ ํค๊ฐ ์๋น์ค์ ๋ฑ๋ก๋์ด ์์ผ๋ฉด,
๊ฐ์ธ ํค๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋์ญ์ ๋ฐ์ดํฐ์ ์๋ช ์ ์์ฑํ ๋ค์,
ํธ๋์ญ์ ๋ฐ์ดํฐ์ ์๋ช ์ ์๋ฒ๋ก ์ ์กํ๋ค.
์๋ฒ๋ ์๋ช ์ด ์ฌ๋ฐ๋ฅธ์ง ํ์ธํ๊ณ , ์๋ช ์ด ์ฌ๋ฐ๋ฅธ ๊ฒฝ์ฐ ์์ ์ ๊ณ์ ์งํํ๋ค. ์ฝ๋๋ก ์ด๋ป๊ฒ ์๊ฒผ๋์ง ๋ณด์.
์ํธํ๋ ๊ฐ๋ ฅํ ๊ฐ์ธ ํค๋ฅผ ์์ฑํ๊ธฐ ์ํด PrivateKey
์ด๋์
๋ผ์ด์ ๋ฅผ ํธ์ถํ๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ฒ์ ๊ณต๊ฐ ํค ๋ฐ์ดํฐ๋ฅผ ๋ฑ๋กํด์ผ ํ๋ค. ๊ฐ์ธ ํค๋ฅผ ํธ์ถํ์ฌ ๊ณต๊ฐ ํค๋ฅผ ๊ฒ์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ณต๊ฐํค์์ ์ด๋ค ํํ ๋ฐฉ์์ ์ํ๋์ง ์ง์ ํ๋ค. ์ด๋ ์ฌ๋ฌ ๊ฐ์ง ๊ณต๊ฐ ํค ํํ (representation)์ด ์์ผ๋ฉฐ, CryptoKit์์ ์ง์ํ๋ค. ์ฌ๊ธฐ์๋ compactRepresentation์ผ๋ก ์ง์ ํ๊ณ ์์ผ๋ฉฐ, ๊ฐ์ธ ํค๋ ํญ์ Keychain์ ์ ์ฅํ๋ค.
๋ค์์ผ๋ก, ์๋ช
์ ์์ฑํ๊ธฐ ์ํด ๊ฐ์ธ ํค์์ signature ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ , ์๋ช
ํ๋ ค๋ ํธ๋์ญ์
๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ค.
์ด๋ฐ ์์
์ ์ํํ๋ ํค๋ Secure Enclave
์ ๊ฐ์ ์์ ํ ์ฅ์น๋ฅผ ์ฌ์ฉํ์ฌ ๋ณด์์ ๊ฐํํด์ผ ํ๋ค.
Secure Enclave๋ ๋ณ๋์ ํ๋ก์ธ์์์ ์๋ํ๋ ํ๋์จ์ด ๊ธฐ๋ฐ ํค ๊ด๋ฆฌ์๋ก, ์ถ๊ฐ์ ์ธ ๋ณด์ ๋ ์ด์ด๋ฅผ ์ ๊ณตํ๋ค.
Touch ID ๋๋ Face ID์ ๊ฐ์ ์ค์ํ ์์คํ ๊ธฐ๋ฅ์ ์ผ๋ถ๋ก ์ฌ์ฉ๋๊ธฐ๋ ํ๋ค.
Secure Enclave๋ฅผ ์ฌ์ฉํ์ฌ ์๋ช ์ ์์ฑํ๋ ค๋ฉด, ์ฐ์ ๋๋ฐ์ด์ค์ Secure Enclave๊ฐ ์๋์ง ํ์ธํด์ผ ํ๋ค. SecureEnclave์์ isAvailable์ ํธ์ถํ์ฌ ํ์ธํ ์ ์๋ค.
์ดํ์๋ ๊ธฐ์กด๊ณผ ๋์ผํ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ Secure Enclave ๋ด์์ ํค๋ฅผ ์์ฑํ๊ณ ์๋ช ์ ์์ฑํ ์ ์๋ค. ์ด๋ฅผ ์ํด ํค๋ฅผ ์์ฑํ๋ PrivateKey ์ด๊ธฐํ ๋ฉ์๋ ํธ์ถ ์์ Secure Enclave๋ฅผ ๋ถ์ด๋ฉด ๋๋ค.
Secure Enclave๋ฅผ ์ฌ์ฉํ๋ ์ฅ์ ์ค ํ๋๋, ํค ์ฌ์ฉ์ ์ ํํ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์ ์ฝ๋๋ Secure Enclave์์ ์์ฑํ๋ ํค๋ ๋๋ฐ์ด์ค๊ฐ ์ ๊ธ ํด์ ๋ ๊ฒฝ์ฐ์๋ง ์ ๊ทผํ ์ ์์ผ๋ฉฐ, ์ด ํค๋ ์ด ๋๋ฐ์ด์ค์์๋ง ์ฌ์ฉํ ์ ์๋๋ก ์ ํํ๋ค.
ํค ์ฌ์ฉ์ ๋ ์ ํํ๊ธฐ ์ํด, ๊ฐ์ธ ํค๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ ์ํํ ๋ ์ฌ์ฉ์ ์ธ์ฆ์ ์๊ตฌํ๋๋ก ํ๋ ค๊ณ ํ๋ค.
์ฌ์ฉ์ ์ธ์ฆ์ ์๊ตฌํ๋ ๊ฒ์ ์ฌ์ฉ์์๊ฒ ์์ฒด ์ธ์ฆ ๋๋ ๋๋ฐ์ด์ค ๋น๋ฐ๋ฒํธ๋ฅผ ์์ฒญํ๋ค. ์ด์ ์ก์ธ์ค ์ ์ด ์ ์ฑ ์ ๊ตฌ์ฑํ๊ธฐ ๋๋ฌธ์, ์์ฑํ๋ ํค์ ์ด๊ธฐํ ๋ฉ์๋์ ๊ทธ ์ ์ฑ ์ ์ ๋ฌํ๊ธฐ๋ง ํ๋ฉด ํด๋น ์ ์ฑ ์ด ์ ์ฉ๋๋ค.
์ฌ์ฉ์์๊ฒ ์ธ์ฆ์ ์๊ตฌํ๋ ์ด์ ๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ์ค๋ช ํ๋ ค๊ณ ํ ๋์๋ LocalAuthentication context๋ฅผ ์ ๋ฌํ ์ ์๋ค. ์ ์ฝ๋์์๋ LocalAuthentication context๊ฐ 10์ด ๋์ ์ ํจํ๋๋ก ํ๊ณ , Bob์๊ฒ 10๋ฌ๋ฌ ์ด์ฒดํ๋ ค๋ ๊ฒ์ ์ธ์ฆํด์ผ ํ๋ค๋ ๊ฒ์ ์ฌ์ฉ์์๊ฒ ์๋ฆฐ๋ค. ์ด ์ธ์ฆ ์ปจํ ์คํธ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด, ํด๋น ์ปจํ ์คํธ๋ฅผ ํค์ ์ด๊ธฐํ ๋ฉ์๋์ ์ ๋ฌํ๋ฉด ๋๋ค.(์์์ authenticationContext)
๋ง์ง๋ง์ผ๋ก ์ฑ๋ฅ์ ๋ํด ์๊ธฐํ๋ ค๊ณ ํ๋ค.
CryptoKit์ Apple์ ๊ธฐ๋ณธ ์ํธํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ corecrypto๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋์์ผ๋ฉฐ, ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ง์ํ๋ ๊ฐ ๋ง์ดํฌ๋ก ์ํคํ ์ฒ์ ๋ชจ๋ ์ฌ์ดํด์ ์ต์ ํํ๊ธฐ ์ํด ์๋์ผ๋ก ํ๋๋ ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ค.
๋ํ corecrypto๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์ฌ์ด๋ ์ฑ๋ ์ ํญ(side-channel resistance)๊ณผ ๊ฐ์ corecrypto์ ๋ณด์ ๊ฐ์ ์ฌํญ์ ํ์ฉํ ์ ์์ผ๋ฉฐ, corecrypto๊ฐ FIPS ์ธ์ฆ์ ๋ฐ์๊ธฐ ๋๋ฌธ์ FIPS ๊ท์ ์ ์ค์ํ๋ ๋ฐฉ์์ผ๋ก CryptoKit์ ์ฌ์ฉํ ์ ์๋ค.
CryptoKit์ ๊ฐ๋ ฅํ ์ ์์ค ์ํธํ API์ด๋ฉฐ, CryptoKit์ ์ฌ์ฉํ์ฌ ๋ ์์ ํ ์ฑ์ ์ถ์ํด์ผ ํ๋ค.