Skip to content

Latest commit

ย 

History

History
423 lines (254 loc) ยท 32.1 KB

CryptographyAndYourApp.md

File metadata and controls

423 lines (254 loc) ยท 32.1 KB

Cryptography And Your App

๊ฐœ๋ฐœ์ž & ์œ ์ €๋กœ์„œ, ์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ๋ณดํ˜ธํ•˜๋Š”๊ฒƒ์ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๋‹ค.

๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์ •๋ณด๊ฐ€ ์žˆ์ง€๋งŒ, ๋ชจ๋‘ ์ค‘์š”ํ•˜๊ณ  ๋ณดํ˜ธํ•ด์•ผ ํ•œ๋‹ค. ์ „ํ™”๋ฒˆํ˜ธ๋‚˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ ๊ฐ™์€ ํ”„๋กœํ•„ ์ •๋ณด๋„ ์žˆ์„ ์ˆ˜ ์žˆ๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ์ •๋ณด๋„ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ชจ๋“  ์ •๋ณด์— ๋Œ€ํ•ด ๋ณด์•ˆ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ค‘์š”ํ•˜๋ฉฐ, ์ด๋ฅผ ์œ„ํ•œ ์ข‹์€ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. Apple์—์„œ๋Š” ๋ณด์•ˆ๊ณผ ๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ๊ฐ€ ํ•ต์‹ฌ ๊ฐ€์น˜์ด๋ฉฐ, ๋ชจ๋“  ๊ธฐ๋Šฅ์— ๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์•”ํ˜ธํ™”๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•˜๋ฉฐ, ๋””๋ฐ”์ด์Šค ๋ฌด๊ฒฐ์„ฑ(device integrity)์„ ํ†ตํ•ด ํ”Œ๋žซํผ์—์„œ ์‹คํ–‰๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๊ฒ€์ฆํ•˜์—ฌ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์†์ƒ๋˜์ง€ ์•Š์•˜๋Š”์ง€, ๋ณด์•ˆ ์†์„ฑ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋Š”์ง€๋ฅผ ํ™•์ธํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ์˜ ์•ˆ์ „ํ•œ ๋ณดํ˜ธ๋ฅผ ์œ„ํ•ด์„œ๋„ ์•”ํ˜ธํ™”๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. Apple์˜ Messages, Safari, iCloud ๋“ฑ ๋‹ค์–‘ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋งค์šฐ ๊ฐœ์ธ์ ์ธ ์ˆœ๊ฐ„์„ ๊ธฐ๋กํ•˜๊ณ  ๊ณต์œ ํ•˜๋Š”๋ฐ, ์ด๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ์•”ํ˜ธํ™”๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ฆ‰, ์‚ฌ์šฉ์ž์˜ ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ๋ฅผ ์œ„ํ•ด์„œ๋„ ์•”ํ˜ธํ™”๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค.

Apple์€ 10์–ต ๋Œ€๊ฐ€ ๋„˜๋Š” ๊ธฐ๊ธฐ์—์„œ ์•”ํ˜ธํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋Š” ๋งค์šฐ ๊ด‘๋ฒ”์œ„ํ•œ ๊ทœ๋ชจ๋กœ ์•”ํ˜ธํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ทธ์— ๋”ฐ๋ฅธ ์œ„ํ—˜๋„๋„ ๋งค์šฐ ๋†’๊ธฐ ๋•Œ๋ฌธ์—, ๋งค์šฐ ๋†’์€ ์•ˆ์ •์„ฑ์ด ์š”๊ตฌ๋œ๋‹ค. ์ข‹์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์œ„ํ•ด์„œ๋Š” ๋†’์€ ์„ฑ๋Šฅ์ด ํ•„์ˆ˜์ด๋ฉฐ, ๋ฐฐํ„ฐ๋ฆฌ ์ˆ˜๋ช…๋„ ์ค‘์š”ํ•˜๊ณ , ๋ณด์•ˆ์€ ์—ฌ๊ธฐ์—์„œ ์ค‘์š”ํ•œ ๊ธฐ๋ฐ˜ ์š”์†Œ์ด๋‹ค.

์•”ํ˜ธํ™”๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ช‡ ๊ฐ€์ง€ ์†์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ๋„๊ตฌ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์„ค๋ช…ํ•˜์ž๋ฉด, ๋ฐœ์‹ ์ž๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋Š” ์ธ์ฆ, ๋ฉ”์‹œ์ง€๋ฅผ ๋ณตํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์žˆ๋Š” ์‚ฌ๋žŒ์ด ๋‹จ ํ•œ ๋ช…๋ฟ์ด๋ผ๋Š” ์•”ํ˜ธํ™”, ๊ทธ๋ฆฌ๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ์ „์†ก๋˜๊ธฐ ์ „์— ๋ˆ„๊ตฌ๋„ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•˜๋Š” ๋ฌด๊ฒฐ์„ฑ ๋“ฑ์ด ์žˆ๋‹ค.

๋” ๋„“์€ ๋ณด์•ˆ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ์•”ํ˜ธํ™” ๊ธฐ๋Šฅ์„ ์•”ํ˜ธํ™” ํ”„๋กœํ† ์ฝœ๋กœ ๊ฒฐํ•ฉํ•ด์•ผํ•œ๋‹ค.

"์•”ํ˜ธํ™”๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์ง€ ๋ง๋ผ"๋Š” ๋ง์ด ์žˆ๋Š”๋ฐ, ์•”ํ˜ธํ™”์—์„œ ๋งŽ์€ ๊ฒƒ๋“ค์ด ์ž˜๋ชป๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ œ๋Œ€๋กœ๋œ ์•”ํ˜ธํ™” ๋„๊ตฌ๋ฅผ ์„ ํƒํ•˜์ง€ ์•Š์œผ๋ฉด ๋ณด์•ˆ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜, ์ œ๋Œ€๋กœ๋œ ๋„๊ตฌ๋ฅผ ์„ ํƒํ–ˆ์–ด๋„ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋ณด์•ˆ์ด ์ทจ์•ฝํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, ๊ตฌํ˜„ ๋‹จ๊ณ„์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋‚˜ ํ‚ค ๊ฐ™์€ ์ค‘์š” ์ •๋ณด๊ฐ€ ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๋Š” ๊ณต๊ฒฉ์ด๋‚˜ ํŒจ๋”ฉ ์˜ค๋ผํด ๊ณต๊ฒฉ๊ณผ ๊ฐ™์€ ๊ณต๊ฒฉ์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ ์•”ํ˜ธํ™”๋Š” ๊ต‰์žฅํžˆ ์–ด๋ ค์šด ๋ถ„์•ผ์ด๋‹ค. ๋งŽ์€ ์‚ฌ๋ก€์—์„œ ์•”ํ˜ธํ™” ํ”„๋กœํ† ์ฝœ์ด ์‹คํŒจํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ์ทจ์•ฝ์ ์„ ๋ฐœ๊ฒฌํ•˜๋Š” ๋ฐ๋Š” ์‹œ๊ฐ„์ด ๊ฝค ๊ฑธ๋ฆด ์ˆ˜๋„ ์žˆ๊ณ , ๋ช‡ ๋…„์ด ์ง€๋‚˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ณด์•ˆ ๋ฆฌ์Šคํฌ๊ฐ€ ๋งค์šฐ ๋†’๊ธฐ ๋•Œ๋ฌธ์—, ์•”ํ˜ธํ™”๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ๋งŽ์€ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•˜๋‹ค.

๊ฐ•๋ ฅํ•œ ํ”„๋กœํ† ์ฝœ์„ ์„ค๊ณ„ํ•˜๋ ค๋ฉด ์•”ํ˜ธํ™” ๊ธฐ์ˆ ์ž๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด ๋งŽ์€ ์‹œ๊ฐ„, ๊ธฐ์ˆ  ๋ฐ ์ „๋ฌธ ์ง€์‹์ด ํ•„์š”ํ•˜๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ƒˆ๋กœ์šด ๊ณต๊ฒฉ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์ž์‹ ์˜ ์ฝ”๋“œ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์ฐพ์•„ ๋Œ€์‘ํ•ด์•ผํ•˜๋ฉฐ, ์ข…์†์„ฑ ๋ฌธ์ œ์™€ ํ•ด์„ ๊ฐ€๋Šฅ์„ฑ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

ํ•ด์„ ๊ฐ€๋Šฅ์„ฑ ์‹œ๋‚˜๋ฆฌ์˜ค(interoperability scenarios)๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ํ”Œ๋žซํผ, ์‹œ์Šคํ…œ, ์•ฑ ๋“ฑ์—์„œ ์•”ํ˜ธํ™” ํ”„๋กœํ† ์ฝœ์„ ์ƒํ˜ธ ์šด์šฉ(interoperate)ํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์• ํ”Œ ๋””๋ฐ”์ด์Šค์—์„œ ์ƒ์„ฑ๋œ ์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์•ˆ๋“œ๋กœ์ด๋“œ ๋””๋ฐ”์ด์Šค์—์„œ๋„ ์ •์ƒ์ ์œผ๋กœ ํ•ด๋…๋  ์ˆ˜ ์žˆ๋Š”์ง€, ๋˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค์—์„œ ์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋“ฑ์ด ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ˜ธ ์šด์šฉ์„ฑ์€ ๋‹ค์–‘ํ•œ ๋””๋ฐ”์ด์Šค ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์— ์•ˆ์ „ํ•˜๊ณ  ์›ํ™œํ•œ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. - by chatGPT

์ด ๋ชจ๋“  ๊ฒƒ์€ ๋งŽ์€ ์ž‘์—…์„ ํ•„์š”๋กœ ํ•˜๋ฉฐ, ์‹œ๊ฐ„๊ณผ ์—๋„ˆ์ง€๋ฅผ ๋นผ์•—์•„ ๋‹ค์Œ ๋ฉ‹์ง„ ์•„์ด๋””์–ด๋‚˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ƒ๊ฐํ•ด๋‚ด๋Š” ๋ฐ ์ง€์žฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๋„ค์ดํ‹ฐ๋ธŒ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ์–ด๋ ค์›€์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ”Œ๋žซํผ์—์„œ ์ง€์›ํ•˜๋Š” ํ•˜๋“œ์›จ์–ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋” ๋‚˜์€ ๋ณด์•ˆ ์ˆ˜์ค€์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด์ œ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ต์ˆ™ํ•  ๋งค์šฐ ์ผ๋ฐ˜์ ์ธ ์•”ํ˜ธํ™” ์‹œ๋‚˜๋ฆฌ์˜ค๋“ค์„ ์‚ดํŽด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

  1. ๋จผ์ € ๋””๋ฐ”์ด์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ๋ฐฉ๋ฒ•๋ถ€ํ„ฐ ์•Œ์•„๋ณด๊ณ , (๋ณด์•ˆ ์Šคํ† ๋ฆฌ์ง€์™€ ์•”ํ˜ธํ™” ๊ธฐ์ˆ )
  2. credential (์ž๊ฒฉ์ฆ๋ช…)๊ณผ key ๋ณดํ˜ธ๋ฅผ ์‚ดํŽด๋ณด๊ณ , (ํ‚ค ์ฒด์ธ ๋˜๋Š” ๊ธฐํƒ€ ์•ˆ์ „ํ•œ ๋ณด๊ด€ ์žฅ์น˜)
  3. ๋””๋ฐ”์ด์Šค์™€ ์‚ฌ์šฉ์ž ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์„ ์•Œ์•„๋ณด๊ณ , (์•ˆ์ „ํ•œ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ๊ณผ ๋‹ค์ค‘ ์ธ์ฆ ๊ธฐ๋Šฅ)
  4. ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์„ ๋ณดํ˜ธํ•˜๊ณ , (์ „์†ก ๊ณ„์ธต ๋ณด์•ˆ(TLS) ๋ฐ ์•ˆ์ „ํ•œ ์†Œ์ผ“)
  5. ๋งˆ์ง€๋ง‰์œผ๋กœ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€ ์„œ๋น„์Šค๋‚˜ ๊ธฐ๊ธฐ์™€์˜ ํ†ต์‹ ์˜ ์ง„์‹ค์„ฑ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์„ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

์ฒซ๋ฒˆ์งธ ์‹œ๋‚˜๋ฆฌ์˜ค์ธ ๋””๋ฐ”์ด์Šค ๋‚ด ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ณ  ์žˆ๋‹ค.

๋จผ์ €, ๋ฐœํ‘œ์ž๋Š” ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ์›น์‚ฌ์ดํŠธ์—์„œ ์ฝ”๋“œ๋ฅผ ๊ธ์–ด์˜ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ๋งํ•˜๊ณ  ์žˆ๋‹ค. (๋‹น์—ฐํ•œ ์–˜๊ธฐ..)

์ด๋Š” ๊ธฐ๊ธฐ ๋‚ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ํŒจ์Šค์ฝ”๋“œ์˜ ๊ฐ•๋ ฅํ•œ ๋ณด์•ˆ ๊ธฐ์ˆ ๊ณผ Secure Enclave์˜ ํ•˜๋“œ์›จ์–ด ๊ธฐ์ˆ ์„ ๊ฒฐํ•ฉํ•˜์—ฌ ํ‚ค๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณดํ˜ธํ•˜๊ณ , ์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ํŒจ์Šค์ฝ”๋“œ๋ฅผ ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž… ๊ณต๊ฒฉ(brute-force)์œผ๋กœ ํ•ด๋…ํ•  ์ˆ˜ ์—†๋„๋ก ํ•ด์ค€๋‹ค๊ณ  ํ•œ๋‹ค.

๋˜ํ•œ, ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ๋Š” ํฌ์ŠคํŠธ ์ปดํ”„๋กœ๋งˆ์ด์ฆˆ ๋ณต๊ตฌ(post compromise recovery)๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด๋Š” ์•…์˜์ ์ธ ๊ณต๊ฒฉ์ž๊ฐ€ ๋””๋ฐ”์ด์Šค์˜ ํ‚ค๋ฅผ ํš๋“ํ•˜๋”๋ผ๋„ ์‚ฌ์šฉ์ž๊ฐ€ ํŒจ์Šค์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ๊ทธ ์ดํ›„์— ์•”ํ˜ธํ™”๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ์ด์ „ ํ‚ค์—์„œ ๋ณต๊ตฌ๋  ์ˆ˜ ์—†๋„๋ก ๋ณด์žฅํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์•ฑ์—์„œ ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ ์†์„ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ๊ธฐ ๋ถ€ํŒ… ์ดํ›„ ์ฒ˜์Œ์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ํฐ์„ ์ž ๊ธˆ ํ•ด์ œํ•  ๋•Œ๊นŒ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•˜๋Š” ๊ฒƒ์œผ๋กœ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ, ๋‹ค์–‘ํ•œ ์ˆ˜์ค€์˜ ๋ณด์•ˆ ์†์„ฑ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์™„์ „ํ•œ ํŒŒ์ผ ๋ณดํ˜ธ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ(complete file protection), ์‚ฌ์šฉ์ž๊ฐ€ ํฐ์˜ ์ž ๊ธˆ์„ ํ•ด์ œํ•œ ํ›„์—๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํฐ์„ ๋‹ค์‹œ ์ž ๊ทธ๊ณ  ์ฃผ๋จธ๋‹ˆ๋‚˜ ๊ฐ€๋ฐฉ์— ๋‹ค์‹œ ๋„ฃ์œผ๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค์‹œ ๋ณด์•ˆ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

์‚ฌ์šฉํ•˜๊ธฐ๋„ ๋งค์šฐ ์‰ฌ์šด๋ฐ, option์— .completeFileProtection์„ ์„ค์ •ํ•˜๋ฉด ๋œ๋‹ค.

์œ„ ์ฝ”๋“œ๋Š” ํŒŒ์ผ์„ ์™„์ „ํ•œ ํŒŒ์ผ ๋ณดํ˜ธ ์˜ต์…˜์œผ๋กœ ์•”ํ˜ธํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค€๋‹ค.

  • fileURL: ์•”ํ˜ธํ™”ํ•˜๋ ค๋Š” ํŒŒ์ผ์˜ URL
  • data: ์•”ํ˜ธํ™”ํ•˜๋ ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” 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๊ฐœ์˜ ์ƒˆ๋กœ์šด ์ธ์ฆ ์ •์ฑ…์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

  1. ์ƒ์ฒด ์ธ์‹ ๋ฐ Apple Watch๋กœ ์ธ์ฆ์„ ์ค„์ด๋Š” ๊ฒƒ
  2. 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๊ฐ€์ง€๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  1. ์ธ์ฆ์„œ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์„ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ฉฐ, (์ธ์ฆ์„œ๊ฐ€ ๊ฒ€์ฆ๋˜๋Š” ๋™์•ˆ ์•ฑ์ด ๋‹ค๋ฅธ ์ž‘์—… ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ)
  2. ์‹คํŒจ ์‹œ ์—๋Ÿฌ ํ•ธ๋“ค๋ง ๋ฐ ๋””๋ฒ„๊น…์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•ด์ค€๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ 5๊ฐ€์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์‚ดํŽด๋ดค๋Š”๋ฐ,

์–ด๋–ค ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋“  ์‹œ์Šคํ…œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์ด๋ฏธ ์‚ฌ์šฉ ์ค‘์ด๋ฉด ์ตœ์ƒ์˜ ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค ์ž์‚ฐ์„ ์ตœ๋Œ€ํ•œ ๋ณดํ˜ธํ•˜๋„๋ก ๋…ธ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

์–ด๋–ค ์ƒํ™ฉ์—์„œ๋Š” Apple ์‹œ์Šคํ…œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ˜„์‹ค์ ์ด์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Apple ์ƒํƒœ๊ณ„ ์™ธ๋ถ€์—์„œ ์ƒํ˜ธ ์šด์šฉ์„ฑ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค. ์„œ๋น„์Šค ์ธ์ฆ์ด ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ๊ณ  ๊ตฌํ˜„ํ•ด์•ผ ํ•  ๋ช…์„ธ๊ฐ€ ์ฃผ์–ด์งˆ ์ˆ˜๋„ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•œ ํ›Œ๋ฅญํ•œ ์†”๋ฃจ์…˜์ด ๋ฐ”๋กœ Apple CryptoKit์ด๋‹ค.

Apple CryptoKit์€ Swift ์•”ํ˜ธํ™” API๋กœ, ์ด์ „์— ์„ค๋ช…ํ•œ ๊ธฐ๋Šฅ๋“ค๊ณผ ๊ฐ™์€ ์ฒ ํ•™์„ ๋”ฐ๋ฅด๋„๋ก ์„ค๊ณ„๋˜์–ด ์•”ํ˜ธํ™” ํ•จ์ˆ˜ ๋ฐ ์ž˜๋ชป ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ค์šด ํ•จ์ˆ˜์— ์‰ฝ๊ฒŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

Apple CryptoKit์˜ 4๊ฐ€์ง€ ์ธก๋ฉด์— ๋Œ€ํ•ด ์–˜๊ธฐํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

  1. CryptoKit๊ณผ Swift
  2. CryptoKit์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  3. Secure Enclave ๋ฐ ์ƒ์ฒด ์ธ์ฆ
  4. ์„ฑ๋Šฅ

์˜ˆ์ „์—๋Š” 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์„ ์‚ฌ์šฉํ•˜์—ฌ ๋” ์•ˆ์ „ํ•œ ์•ฑ์„ ์ถœ์‹œํ•ด์•ผ ํ•œ๋‹ค.