Skip to content

Security ko KR

ArchiBot edited this page Aug 7, 2026 · 26 revisions

๋ณด์•ˆ

์•”ํ˜ธํ™”(Encryption)

ASF๋Š” ํ˜„์žฌ ECryptoMethod์˜ ์ •์˜๋กœ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์•”ํ˜ธํ™” ๋ฐฉ์‹์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:

๊ฐ’ ์ด๋ฆ„
0 ํ‰๋ฌธ(PlainText)
1 ๊ณ ๊ธ‰ ์•”ํ˜ธํ™” ํ‘œ์ค€(AES)
2 ProtectedDataForCurrentUser
3 EnvironmentVariable
4 ํŒŒ์ผ

์ •ํ™•ํ•œ ์„ค๋ช…๊ณผ ๊ฐ ๋ฐฉ์‹์˜ ๋น„๊ต๋Š” ์•„๋ž˜์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ค์น˜

์˜ˆ๋ฅผ ๋“ค์–ด SteamPassword์šฉ ์•”ํ˜ธํ™”๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด, ์„ ํƒํ•œ ์•”ํ˜ธํ™” ๋ฐฉ์‹๊ณผ ์›๋ž˜์˜ ํ‰๋ฌธ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด encrypt **๋ช…๋ น์–ด**๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„, ์–ป์€ ์•”ํ˜ธํ™”๋œ ๋ฌธ์ž์—ด์„ SteamPassword ๋ด‡ ์„ค์ • ์†์„ฑ ๊ฐ’์œผ๋กœ ์ž…๋ ฅํ•˜๊ณ , ๋งˆ์ง€๋ง‰์œผ๋กœ PasswordFormat์„ ์„ ํƒํ•œ ์•”ํ˜ธํ™” ๋ฐฉ์‹์— ๋งž๋Š” ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•˜์„ธ์š”. ์ผ๋ถ€ ํ˜•์‹์€ encrypt ๋ช…๋ น์–ด๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด EnvironmentVariable์ด๋‚˜ File์€ ์ ์ ˆํ•œ ๊ฒฝ๋กœ๋งŒ ์ž…๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.


ํ‰๋ฌธ(PlainText)

์ด๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฐ€์žฅ ๋‹จ์ˆœํ•˜๊ณ  ๊ฐ€์žฅ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๋ฐฉ์‹์œผ๋กœ, ECryptoMethod์˜ 0์œผ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ASF๋Š” ์ด ๋ฌธ์ž์—ด์ด ํ‰๋ฌธ(plain text) - ์ฆ‰ ๋น„๋ฐ€๋ฒˆํ˜ธ ์›๋ฌธ ๊ทธ๋Œ€๋กœ - ์ด๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ๊ฐ€์žฅ ์‰ฝ๊ณ , ๋ชจ๋“  ์„ค์ •๊ณผ 100% ํ˜ธํ™˜๋˜๋ฏ€๋กœ ๊ธฐ๋ณธ(default) ์ €์žฅ ๋ฐฉ์‹์ด์ง€๋งŒ, ์•ˆ์ „ํ•œ ์ €์žฅ์„ ์œ„ํ•ด์„œ๋Š” ์ „ํ˜€ ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


๊ณ ๊ธ‰ ์•”ํ˜ธํ™” ํ‘œ์ค€(AES)

์˜ค๋Š˜๋‚  ๊ธฐ์ค€์œผ๋กœ ์•ˆ์ „ํ•˜๋‹ค๊ณ  ๊ฐ„์ฃผ๋˜๋Š” AES ๋ฐฉ์‹์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ €์žฅ์€ ECryptoMethod์˜ 1๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ASF๋Š” ์ด ๋ฌธ์ž์—ด์ด base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ๋ฌธ์ž์—ด์ด๋ฉฐ, ์ด๋ฅผ ๋ณ€ํ™˜ํ•˜๋ฉด AES๋กœ ์•”ํ˜ธํ™”๋œ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด์ด ๋˜๊ณ , ์ดํ›„ ํฌํ•จ๋œ **์ดˆ๊ธฐํ™” ๋ฒกํ„ฐ(initialization vector)**์™€ ASF ์•”ํ˜ธํ™” ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด ๋ณตํ˜ธํ™”๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

์œ„ ๋ฐฉ์‹์€ ๊ณต๊ฒฉ์ž๊ฐ€ ๋น„๋ฐ€๋ฒˆํ˜ธ์˜ ์•”ํ˜ธํ™” ๋ฐ ๋ณตํ˜ธํ™”์— ์‚ฌ์šฉ๋˜๋Š” ASF ์•”ํ˜ธํ™” ํ‚ค๋ฅผ ์•Œ์ง€ ๋ชปํ•˜๋Š” ํ•œ ๋ณด์•ˆ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ASF๋Š” --cryptkey ๋ช…๋ น์ค„ ์ธ์ž ๋ฅผ ํ†ตํ•ด ์ตœ๋Œ€ํ•œ์˜ ๋ณด์•ˆ์„ ์œ„ํ•ด์„œ ํŠน์ • ํ‚ค์˜ ์‚ฌ์šฉ์„ ํ—ˆ๋ฝํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ƒ๋žตํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค๋ฉด ASF๋Š” ์•Œ๋ ค์ ธ์žˆ๊ณ  ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ•˜๋“œ์ฝ”๋”ฉ๋œ ์ž์ฒด ํ‚ค๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ˆ„๊ตฌ๋‚˜ ASF ์•”ํ˜ธํ™”๋ฅผ ๋’ค์ง‘์–ด์„œ ๋ณตํ˜ธํ™”๋œ ์•”ํ˜ธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œปํž™๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ์•ฝ๊ฐ„ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•˜๊ณ  ํ•˜๊ธฐ ์‰ฝ์ง€๋Š” ์•Š์ง€๋งŒ, ๊ฐ€๋Šฅํ•œ ์ผ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด AES ์•”ํ˜ธํ™”๋Š” ๋น„๋ฐ€๋ฆฌ์— ๋ณด๊ด€ํ•˜๊ณ  ์žˆ๋Š” ์ž์‹ ๋งŒ์˜ --cryptkey๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ASF์—์„œ ์‚ฌ์šฉํ•˜๋Š” AES ๋ฐฉ๋ฒ•์€ ๋งŒ์กฑ์Šค๋Ÿฌ์šด ๋ณด์•ˆ์„ฑ์„ ์ œ๊ณตํ•˜๊ณ  ํ‰๋ฌธ(PlainText)์˜ ๋‹จ์ˆœํ•จ๊ณผ ProtectedDataForCurrentUser์˜ ๋ณต์žก์„ฑ ๊ฐ„์˜ ๊ท ํ˜•์ ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž์˜ --cryptkey์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ฐ•๋ ฅํ•˜๊ฒŒ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

(๊ธธ๊ณ  ์‚ฌ์šฉ์ž ์ง€์ •๋œ) --cryptkey๋ฅผ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด, ๋งค์šฐ ๋†’์€ ์ˆ˜์ค€์˜ ์•ˆ์ „ํ•œ ์ €์žฅ ๋ณด์•ˆ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.


ProtectedDataForCurrentUser

์˜ค๋Š˜๋‚  ๊ธฐ์ค€์œผ๋กœ ์•ˆ์ „ํ•˜๋‹ค๊ณ  ๊ฐ„์ฃผ๋˜๋Š” DPAPI ๋ฐฉ์‹์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ €์žฅ์€ ECryptoMethod์˜ 2๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์˜ ์ฃผ๋œ ์žฅ์ ์€ ๋™์‹œ์— ์ฃผ๋œ ๋‹จ์ ์ž…๋‹ˆ๋‹ค. AES ๋“ฑ ์•”ํ˜ธํ™” ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ํ˜„์žฌ ๋กœ๊ทธ์ธ ๋œ ์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์ธ ์ž๊ฒฉ์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์˜ค์ง ์•”ํ˜ธํ™”๋œ ๊ธฐ๊ธฐ์—์„œ๋งŒ, ๋˜ํ•œ ์˜ค์ง ์•”ํ˜ธํ™”ํ•œ ์‚ฌ์šฉ์ž๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณตํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ด ์˜ต์…˜์€ ํ˜„์žฌ๋กœ์„œ๋Š” Windows OS๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๊ธฐ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ์œ ์˜ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.


EnvironmentVariable

๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜ ์ €์žฅ ๋ฐฉ์‹์€ ECryptoMethod์˜ 3์œผ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ASF๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•„๋“œ์— ์ง€์ •๋œ ์ด๋ฆ„์„ ๊ฐ€์ง„ ํ™˜๊ฒฝ ๋ณ€์ˆ˜(์˜ˆ: SteamPassword)์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ฝ์–ด์˜ต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, SteamPassword๋ฅผ ASF_PASSWORD_MYACCOUNT๋กœ, PasswordFormat์„ 3์œผ๋กœ ์„ค์ •ํ•˜๋ฉด, ASF๋Š” ${ASF_PASSWORD_MYACCOUNT} ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํ‰๊ฐ€ํ•˜์—ฌ ํ•ด๋‹น ๊ฐ’์„ ๊ณ„์ • ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ASF ํ”„๋กœ์„ธ์Šค์˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ๊ถŒํ•œ ์—†๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ๋…ธ์ถœ๋˜์ง€ ์•Š๋„๋ก ๋ฐ˜๋“œ์‹œ ํ™•์ธํ•˜์„ธ์š”. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชฉ์  ์ž์ฒด๊ฐ€ ๋ฌด์˜๋ฏธํ•ด์ง‘๋‹ˆ๋‹ค.


ํŒŒ์ผ

(ASF ์„ค์ • ๋””๋ ‰ํ„ฐ๋ฆฌ ์™ธ๋ถ€์ผ ์ˆ˜๋„ ์žˆ๋Š”) ํŒŒ์ผ ๊ธฐ๋ฐ˜ ์ €์žฅ ๋ฐฉ์‹์€ ECryptoMethod์˜ 4๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ASF๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•„๋“œ์— ์ง€์ •๋œ ํŒŒ์ผ ๊ฒฝ๋กœ(์˜ˆ: SteamPassword)์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ฝ์–ด์˜ต๋‹ˆ๋‹ค. ์ง€์ •๋œ ๊ฒฝ๋กœ๋Š” ์ ˆ๋Œ€ ๊ฒฝ๋กœ์ผ ์ˆ˜๋„ ์žˆ๊ณ , ASF์˜ "ํ™ˆ" ์œ„์น˜(config ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์žˆ๋Š” ํด๋”) ๊ธฐ์ค€์˜ ์ƒ๋Œ€ ๊ฒฝ๋กœ์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ --path **๋ช…๋ น์ค„ ์ธ์ˆ˜**๋ฅผ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์€ ์˜ˆ๋ฅผ ๋“ค์–ด ์ด๋Ÿฐ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ƒ์„ฑํ•ด์ฃผ๋Š” **Docker secrets**์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, Docker ์™ธ๋ถ€์—์„œ๋„ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ ์ ˆํ•œ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, SteamPassword๋ฅผ /etc/secrets/MyAccount.pass๋กœ, PasswordFormat์„ 4๋กœ ์„ค์ •ํ•˜๋ฉด, ASF๋Š” /etc/secrets/MyAccount.pass ํŒŒ์ผ์— ๊ธฐ๋ก๋œ ๋‚ด์šฉ์„ ์ฝ์–ด ๊ณ„์ • ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋‹ด๊ธด ํŒŒ์ผ์ด ๊ถŒํ•œ ์—†๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฝํžˆ์ง€ ์•Š๋„๋ก ๋ฐ˜๋“œ์‹œ ํ™•์ธํ•˜์„ธ์š”. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชฉ์  ์ž์ฒด๊ฐ€ ๋ฌด์˜๋ฏธํ•ด์ง‘๋‹ˆ๋‹ค.


์•”ํ˜ธํ™” ๊ถŒ์žฅ ์‚ฌํ•ญ

ํ˜ธํ™˜์„ฑ์ด ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๊ณ , ProtectedDataForCurrentUser ๋ฐฉ์‹์˜ ๋™์ž‘ ๋ฐฉ์‹์ด ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ ๋ฌธ์ œ์—†๋‹ค๋ฉด, ์ด๊ฒƒ์ด ASF์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ถŒ์žฅ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ตœ๊ณ ์˜ ๋ณด์•ˆ์„ฑ๊ณผ ํŽธ์˜์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. AES ๋ฐฉ๋ฒ•์€ ์›ํ•˜๋Š” ์–ด๋А ๊ธฐ๊ธฐ์—์„œ๋‚˜ ํ™˜๊ฒฝ์„ค์ •์„ ์‚ฌ์šฉํ•˜๊ธธ ์›ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ข‹์€ ์„ ํƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ‰๋ฌธ์€ ๋ˆ„๊ตฌ๋‚˜ JSON ํ™˜๊ฒฝ์„ค์ • ํŒŒ์ผ์„ ๋“ค์—ฌ๋‹ค ๋ณผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ฐœ์˜์น˜ ์•Š๋Š”๋‹ค๋ฉด ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ์•”ํ˜ธ ์ €์žฅ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

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

๊ณ ๊ธ‰ ์„ค์ •์„ ์œ„ํ•ด์„œ๋Š” EnvironmentVariable๊ณผ File์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹๋“ค์€ ํ™œ์šฉ๋„๊ฐ€ ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค. EnvironmentVariable์€ ์‚ฌ์šฉ์ž ์ง€์ • ์†”๋ฃจ์…˜์„ ํ†ตํ•ด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์–ป์–ด์™€ ์˜ค์ง ๋ฉ”๋ชจ๋ฆฌ์—๋งŒ ์ €์žฅํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ์ข‹์€ ์„ ํƒ์ด๋ฉฐ, File์€ ์˜ˆ๋ฅผ ๋“ค์–ด **Docker secrets**์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด ๋‘ ๋ฐฉ์‹ ๋ชจ๋‘ ์•”ํ˜ธํ™”๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ, ๊ฒฐ๊ตญ ์œ„ํ—˜์„ ASF ์„ค์ • ํŒŒ์ผ์—์„œ ์—ฌ๋Ÿฌ๋ถ„์ด ์„ ํƒํ•œ ๋‘ ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

์œ„์—์„œ ์„ค๋ช…ํ•œ ์•”ํ˜ธํ™” ๋ฐฉ์‹ ์™ธ์—๋„, ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•„์˜ˆ ์ง€์ •ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด SteamPassword๋ฅผ ๋นˆ ๋ฌธ์ž์—ด์ด๋‚˜ null ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ASF๋Š” ํ•„์š”ํ•  ๋•Œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ฌผ์–ด๋ณด๋ฉฐ, ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ์—๋งŒ ๋ณด๊ด€ํ•˜๊ณ  ์–ด๋””์—๋„ ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜๋ฉด ๊ทธ ๊ฐ’๋„ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ์‹ ์ค‘ ๊ฐ€์žฅ ์•ˆ์ „ํ•˜์ง€๋งŒ(์–ด๋””์—๋„ ์ €์žฅ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ), ๋™์‹œ์— ๊ฐ€์žฅ ๋ฒˆ๊ฑฐ๋กœ์šด ๋ฐฉ์‹์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ASF๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค(ํ•„์š”ํ•  ๋•Œ) ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ž…๋ ฅํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๋ณด์•ˆ ์ธก๋ฉด์—์„œ ์ตœ์„ ์˜ ์„ ํƒ์ž…๋‹ˆ๋‹ค. ์• ์ดˆ์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ์œ ์ถœ๋  ์ˆ˜๋„ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.


๋ณตํ˜ธํ™”

ASF๋Š” ์ด๋ฏธ ์•”ํ˜ธํ™”๋œ ์•”ํ˜ธ๋ฅผ ๋ณตํ˜ธํ™”ํ•˜๋Š” ์–ด๋– ํ•œ ๋ฐฉ๋ฒ•๋„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณตํ˜ธํ™” ๋ฐฉ๋ฒ•์€ ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๋ถ€์ ์œผ๋กœ๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ProtectedDataForCurrentUser๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ์˜ˆ๋ฅผ ๋“ค์–ด ASF๋ฅผ ๋‹ค๋ฅธ ๊ธฐ๊ธฐ๋กœ ์˜ฎ๊ธฐ๋Š” ๋“ฑ์˜ ์ด์œ ๋กœ ์•”ํ˜ธํ™” ์ ˆ์ฐจ๋ฅผ ๋˜๋Œ๋ฆฌ๊ณ  ์‹ถ๋‹ค๋ฉด, ์ƒˆ ํ™˜๊ฒฝ์—์„œ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ ˆ์ฐจ๋ฅผ ๋‹ค์‹œ ๋ฐ˜๋ณตํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.


ํ•ด์‹ฑ(Hashing)

ASF๋Š” ํ˜„์žฌ EHashingMethod์˜ ์ •์˜๋กœ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•ด์‹ฑ ๋ฐฉ์‹์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:

๊ฐ’ ์ด๋ฆ„
0 ํ‰๋ฌธ(PlainText)
1 SCrypt
2 Pbkdf2

์ •ํ™•ํ•œ ์„ค๋ช…๊ณผ ๊ฐ ๋ฐฉ์‹์˜ ๋น„๊ต๋Š” ์•„๋ž˜์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ค์น˜

์˜ˆ๋ฅผ ๋“ค์–ด IPCPassword์šฉ ํ•ด์‹œ๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด, ์„ ํƒํ•œ ํ•ด์‹ฑ ๋ฐฉ์‹๊ณผ ์›๋ž˜์˜ ํ‰๋ฌธ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด hash **๋ช…๋ น์–ด**๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„, ์–ป์€ ํ•ด์‹œ ๋ฌธ์ž์—ด์„ IPCPassword ASF ์„ค์ • ์†์„ฑ ๊ฐ’์œผ๋กœ ์ž…๋ ฅํ•˜๊ณ , ๋งˆ์ง€๋ง‰์œผ๋กœ IPCPasswordFormat์„ ์„ ํƒํ•œ ํ•ด์‹ฑ ๋ฐฉ์‹์— ๋งž๋Š” ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•˜์„ธ์š”.


ํ‰๋ฌธ(PlainText)

์ด๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ•ด์‹ฑํ•˜๋Š” ๊ฐ€์žฅ ๋‹จ์ˆœํ•˜๊ณ  ๊ฐ€์žฅ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๋ฐฉ์‹์œผ๋กœ, EHashingMethod์˜ 0์œผ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ASF๋Š” ์›๋ณธ ์ž…๋ ฅ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š” ํ•ด์‹œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ๊ฐ€์žฅ ์‰ฝ๊ณ , ๋ชจ๋“  ์„ค์ •๊ณผ 100% ํ˜ธํ™˜๋˜๋ฏ€๋กœ ๋น„๋ฐ€ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ธฐ๋ณธ(default) ๋ฐฉ์‹์ด์ง€๋งŒ, ์•ˆ์ „ํ•œ ์ €์žฅ์„ ์œ„ํ•ด์„œ๋Š” ์ „ํ˜€ ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


SCrypt

์˜ค๋Š˜๋‚  ๊ธฐ์ค€์œผ๋กœ ์•ˆ์ „ํ•˜๋‹ค๊ณ  ๊ฐ„์ฃผ๋˜๋Š” SCrypt ๋ฐฉ์‹์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹ฑ์€ EHashingMethod์˜ 1๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ASF๋Š” SCrypt ๊ตฌํ˜„์„ ์‚ฌ์šฉํ•˜๋ฉฐ, 8 ๋ธ”๋ก, 8192 ๋ฐ˜๋ณต(iteration), 32 ํ•ด์‹œ ๊ธธ์ด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์•”ํ˜ธํ™” ํ‚ค๋ฅผ ์†”ํŠธ(salt)๋กœ ์‚ฌ์šฉํ•ด ๋ฐ”์ดํŠธ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ๋ฐ”์ดํŠธ๋Š” ์ดํ›„ base64 ๋ฌธ์ž์—ด๋กœ ์ธ์ฝ”๋”ฉ๋ฉ๋‹ˆ๋‹ค.

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

์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด(์‚ฌ์šฉ์ž ์ง€์ • ์†”ํŠธ, ๊ธด ๋น„๋ฐ€๋ฒˆํ˜ธ), ์•ˆ์ „ํ•œ ์ €์žฅ์„ ์œ„ํ•œ ๋งค์šฐ ๋†’์€ ์ˆ˜์ค€์˜ ๋ณด์•ˆ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.


Pbkdf2

์˜ค๋Š˜๋‚  ๊ธฐ์ค€์œผ๋กœ๋Š” ์•ฝํ•˜๋‹ค๊ณ  ๊ฐ„์ฃผ๋˜๋Š” Pbkdf2 ๋ฐฉ์‹์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹ฑ์€ EHashingMethod์˜ 2๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ASF๋Š” Pbkdf2 ๊ตฌํ˜„์„ ์‚ฌ์šฉํ•˜๋ฉฐ, 10000 ๋ฐ˜๋ณต(iteration), 32 ํ•ด์‹œ ๊ธธ์ด, ์•”ํ˜ธํ™” ํ‚ค๋ฅผ ์†”ํŠธ๋กœ ์‚ฌ์šฉํ•˜๊ณ , HMAC ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ๋Š” SHA-256์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ๋ฐ”์ดํŠธ๋Š” ์ดํ›„ base64 ๋ฌธ์ž์—ด๋กœ ์ธ์ฝ”๋”ฉ๋ฉ๋‹ˆ๋‹ค.

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


ํ•ด์‹ฑ ๊ถŒ์žฅ ์‚ฌํ•ญ

IPCPassword์™€ ๊ฐ™์€ ์ผ๋ถ€ ๋น„๋ฐ€ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๋•Œ ํ•ด์‹ฑ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ์‚ฌ์šฉ์ž ์ง€์ • ์†”ํŠธ์™€ ํ•จ๊ป˜ SCrypt๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž… ๊ณต๊ฒฉ(brute-forcing)์— ๋Œ€ํ•ด ๋งค์šฐ ์ค€์ˆ˜ํ•œ ๋ณด์•ˆ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Pbkdf2๋Š” ์˜ค์ง ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด์„œ๋งŒ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์ฃผ๋œ ์ด์œ ๋Š”, Steam ํ”Œ๋žซํผ ์ „๋ฐ˜์˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€(์˜ˆ: ๋ถ€๋ชจ ์ œํ•œ PIN)๋ฅผ ์œ„ํ•ด ์ด๋ฏธ ์ด์— ๋Œ€ํ•œ ์ž‘๋™ํ•˜๋Š”(๊ทธ๋ฆฌ๊ณ  ํ•„์š”ํ•œ) ๊ตฌํ˜„์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ์•ˆ์ „ํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜์ง€๋งŒ, SCrypt์™€ ๊ฐ™์€ ๋Œ€์•ˆ์— ๋น„ํ•ด์„œ๋Š” ์•ฝํ•œ ํŽธ์ž…๋‹ˆ๋‹ค.

en-US de-DE es-ES lol-US
pt-BR ru-RU zh-CN zh-TW

๐Ÿ‘จโ€๐Ÿซ ๊ธฐ๋ณธ

๐Ÿ‘จโ€๐ŸŽ“๏ธ ๋ฉ”์ธ

๐Ÿง™ ๊ณ ๊ธ‰

๐Ÿ‘ท ๊ฐœ๋ฐœ์ž

Clone this wiki locally