PAKE (password authenticated key exchange)
PAKE๋ ๋๋ช
์ด์์ ์ฐธ์ฌ์๊ฐ ํจ์ค์๋ ๊ธฐ๋ฐ์ผ๋ก ์ํธํ๋ ์ฑ๋์ ๋ง๋ค์ด์ ์๋ก ํต์ ํ ์ ์๊ฒ ํด์ฃผ๋ ์ํธํ ์ ์ธ ๋ฐฉ๋ฒ์ ๋งํ๋ค.
- Balanced PAKE
- ์ฐธ์ฌ์๋ค์ด ์๋ก ์ํธํ๋ ์ฑ๋์ ๋ง๋๋ ๊ณผ์ ์ ์ํด ๋์ผํ ํจ์ค์๋๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- Augmented PAKE
- server/client ์๋๋ฆฌ์ค์์ ๋ง์ด ์ฌ์ฉ๋๋ค.
- ์๋ฒ๋ ์ด๋ค password-equivalent ๋ฐ์ดํฐ๋ ์ ์ฅํ์ง ์๋๋ค. (์๋ฒ๋ password๋ก ๋ถํฐ ๊ณ์ฐ๋ ๊ฐ์ ๋ณด๊ดํ๊ณ ์์ง๋ง ์ด ๊ฐ์ผ๋ก๋ ์๋ password๋ฅผ ์ญ์ถ๋ก ํ ์ ์๋ค. ์ด ์ธ์๋ password๋ฅผ ์ญ์ถ๋ก ํด ๋ผ ์ ์๋ ๊ด๋ จ ์ ๋ณด๋ ์ ์ฅํ์ง ์๋๋ค.)
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ธ์ฆ์ ์๋ํ ๋๋ password๋ฅผ ์ญ์ถ๋ก ํด ๋ผ ์ ์๋ ์ง์ ์ ์ธ ์ ๋ณด๋ ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์ ๋๋ก ์ ์ก๋์ง ์๋๋ค.
- ๋๋ฌธ์ ๊ณต๊ฒฉ์๊ฐ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผ ๊ถํ์ ํ์ทจํ๋ค๊ณ ํ๋๋ผ๋ ํด๋น ๋ฐ์ดํฐ๋ก ๋ถํฐ password๋ฅผ brute force๋ก ์ฐพ์๋ด๊ธฐ ์ ์๋ client๋ฅผ impersonate ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค.
SRP (Secure Remote Password) Protocol
SRP ํ๋กํ ์ฝ์ ๊ธฐ์กด ํนํ๋ฅผ ํผํด์ ๋ง๋ค์ด์ง augmented PAKE์ ํ ์ข
๋ฅ์ด๋ค. ์ธ์ฆ ๊ณผ์ ์์ password๋ฅผ ์ ์ถํ ์ ์๋ ์ง์ ์ ์ธ ์ ๋ณด๊ฐ ์๊ฒฉ์ง๋ก ์ ๋ฌ๋์ง ์์์ ์์ ํ๋ค๋ ๋ป์ผ๋ก ์ด๋ฆ์ ์ดํดํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค. (์ด ์ด๋ฆ์ด ์ง์ด์ง ์ ํํ ๊ธฐ์์ ์ฐพ์ง ๋ชปํ๋ค) SRP protocol์ ์ฌ๋ฌ๋ฒ ์์ ๋์ด์๊ณ ํ์ฌ๋ revision 6a ๋ฒ์ ์ด๋ค.
- ๊ฐ ์ฐธ์ฌ์๊ฐ ์ธ์ฆ์ ์ํด ์๊ณ ์์ด์ผ ํ๋ ์ ๋ณด
- ํด๋ผ์ด์ธํธ - ์ฌ์ฉ์์ ํจ์ค์๋(password)
- ์๋ฒ - ์ฌ์ฉ์๊ฐ ๊ฐ์
ํ ๋ ์
๋ ฅํ ID, password๋ก๋ถํฐ ์ ๋๋ cryptographic verifier, salt๋ฅผ ๋ณด๊ด
- x = hash(salt, password)
- verifier = g^x
- ์ฃผ์: x๋ password๋ฅผ ์ถ์ธกํด ๋ผ ์์๋ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ verifier๋ฅผ ๋ง๋ค๊ณ ๋ ํ ์ ์ฅํ์ง ์๊ณ ๋ฒ๋ฆฐ๋ค.
- ์ธ์ฆ ํ๋ฆ (password๋ฅผ ์ง์ ๋ณด๋ด์ง ์๊ณ , ํด๋ผ์ด์ธํธ๊ฐ password๋ฅผ ์๊ณ ์๋ค ๋ผ๋ ๊ฒ์ ์ฆ๋ช
ํ๊ธฐ ์ํ ์ ์ฐจ)
- ์ฃผ์: ์๋ ์ ์ฐจ๋ ๋งค ๋ก๊ทธ์ธ ์๋ ๋ง๋ค ์ฒ์๋ถํฐ ๋ฐ๋ณต๋๋ค.
- ์ฐธ๊ณ : https://github.com/mozilla/node-srp ์ ๋ ์ค์ฉ์ ์ธ ์ค๋ช
์ด ์๋์ด์๋ค.
- ํด๋ผ์ด์ธํธ(a), ์๋ฒ(b) ์์ ๊ฐ๊ฐ ํ๋์ฉ ๋๋ค ๊ฐ ์์ฑ
- ํด๋ผ์์ UserID, A = g^a ๋ฅผ ์๋ฒ๋ก ์ ์กํ๋ฉด ์๋ฒ๋ salt, B = kv + g^b ๋ฅผ ๋๋ ค์ค
- k๊ฐ์ ํด๋ผ/์๋ฒ ๋ชจ๋ ๋ฏธ๋ฆฌ ์๊ณ ์๋ ๊ฐ
- ํ์ฌ๊น์ง ๊ณต์ ๋ ์ ๋ณด๋ค๊ณผ ์๋ ์๊ณ ์๋ ์ ๋ณด๋ฅผ ํตํด ์๋ฒ/ํด๋ผ์ด์ธํธ์์ ๊ฐ๊ฐ ๊ณต์ ๋ ์ธ์
ํค K๋ฅผ ๊ณ์ฐํด ๋ธ๋ค. (ํด๋ผ์ด์ธํธ์์ ์ธ์
ํค K๋ฅผ ๊ณ์ฐํด๋ด๋๋ฐ ํจ์ค์๋๊ฐ ํ์ํ๋ค)
- ์ด K๋ฅผ ์ฌ์ฉํ์ฌ ์ฐจํ์ ์ฑ๋์ ์ํธํ ํ๋๋ฐ ์ด์ฉํ ์์๋ค.
- ์ธ์
ํค์ ๋ณ๋๋ก ์ํ์ ๊ณ์ฐ์ ํตํด M1์ ๊ณ์ฐ ํ ์๋ฒ๋ก ์ ์กํ๋ฉด M1์ ์๋ฒ์์ ํ์ธ. (์ค์ ์ด ๋จ๊ณ์์ ์ค์ ์ธ์ฆ์ด ์๋ฃ๋๋ค)
- M1์ด ๋ง๋ ๊ฐ์์ด ํ๋ณ๋๋ฉด ํด๋ผ์์ ์
๋ ฅํ ํจ์ค์๋๊ฐ ๋ง๋ค๋ ์๋ฏธ - ์ด๋ ์๋ฒ/ํด๋ผ๊ฐ ๊ฐ์ ๊ณ์ฐํ๋ ์ธ์
ํค K๋ ๋์ผํ ๊ฐ์ธ ๊ฒ์ ํ์ธ ๊ฐ๋ฅ
- M1์ด ํ๋ฆฌ๊ฒ ํ๋ณ๋ ๊ฒฝ์ฐ, ํด๋ผ์์ ์
๋ ฅํ ํจ์ค์๋๊ฐ ํ๋ ธ๋ค๋ ์๋ฏธ - ์ด๋ ์๋ฒ/ํด๋ผ๊ฐ ๊ฐ์ ๊ณ์ฐํ๋ ์ธ์
ํค K๋ ๋์ผํ์ง ์๋ค.
- ์ฅ์
- ์ธ์ฆ ์ฑ๊ณต์ cryptographically-strong secret์ client/server ๋ชจ๋ ํ๋ํ๊ฒ๋๋ค. ์ด๋ฅผ ์ด์ฉํ์ฌ ์ฐธ์ฌ์๊ฐ ์ํธํ๋ ํต์ ์ด ๊ฐ๋ฅ.
- ์ธ์ฆ + ์ํธํ๋ ํต์ ๋๊ฐ์ง ๊ธฐ๋ฅ์ด ๋ชจ๋ ํ์ํ ๊ฒฝ์ฐ์ ๋งค์ฐ ์ ์ฉํ๊ณ SSH๋ณด๋ค ๋ ์์ ํจ
- SRP ๋ ๋ฒจ์์ ์ํธํ๋ ํต์ ์ ์ง์ํ๋ฏ๋ก Trusted key servers์ certificate infrastructures (ex: SSL) ์์ด๋ ์์ ํ ํต์ ์ด ๊ฐ๋ฅํ๊ณ , ๋ณ๋์ layer์ด๊ธฐ ๋๋ฌธ์ ๋๊ฐ์ง๋ฅผ ๊ฐ์ด ์ฌ์ฉํ๋๊ฒ๋ ๊ฐ๋ฅํ๋ค.
- zero-knowledge password proof (ZKPP) ๋ฅผ ๊ตฌํ
- ํ ์ฐธ์ฌ์ (the prover, ๋ณดํต ํด๋ผ์ด์ธํธ)๊ฐ ๋ค๋ฅธ ์ฐธ์ฌ์ (the verifier, ๋ณดํต ์๋ฒ)์๊ฒ โ์ํธ๋ฅผ ์๊ณ ์๋ค๋ ์ฌ์คโ ์ธ์๋ ์๋ฌด๊ฒ๋ ๋ฐํ์ง ์๊ณ ์๋ ์์ ์ด ์ํธ๋ฅผ ์๊ณ ์๋ค๋ ๊ฒ์ ์ฆ๋ช
ํ๋ ๋ฐฉ๋ฒ
- ์ด๋ค ์ฐธ์ฌ์๋ค๋ ๋ค๋ฅธ ์ฐธ์ฌ์ ๋ชจ๋ฅด๊ฒ ์ํธ๊ฐ ๋ง๋์ง ํ์ธ ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค. ์ฆ, ์ํธ๊ฐ ๋ง๋์ง ํ์ธํ ๋๋ง๋ค ์ฐธ์ฌ์๋ค๊ฐ์ ํ๋ฒ์ ์ธํฐ๋์
์ด ์๊ตฌ๋๋ค.
- ๋๋ฌธ์ offline dictionary attacks ์ ๋ํด์๋ ์์ ํ๋ค
- weak passwords๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ์์ ํ ํธ
- ๋
๋ฆฝ์ ์ธ trusted third party ๊ฐ ํ์ ์๋ค (Kerberos protocol์ ๊ฒฝ์ฐ ์ ๋ขฐํ ์์๋ ๋ณ๋์ ์ธ์ฆ ์๋ฒ๊ฐ ํ์ํจ)
- ๊ธฐ์กด ๋ฐฉ์์ ๊ฒฝ์ฐ MITM ๊ณต๊ฒฉ์ ์ํด ์ ์ก๋ password๊ฐ ํ๋ฒ ๋
ธ์ถ๋๋ฉด, ์ด๋ฅผ replayํด์ ๊ฒฝ์ฐ ๊ณต๊ฒฉ์๊ฐ ์ฌ์ฉ์๋ฅผ ์ง์์ ์ผ๋ก ๊ฐ์ฅ(impersonate)ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
- ํ์ง๋ง SRP์ ๊ฒฝ์ฐ ํน์ ์ฌ์ฉ์์ ๋ํด ์ธ์ฆ์ด MITM์ ์ํด ํ๋ฒ ๋
ธ์ถ๋๋๋ผ๋ ๊ณต๊ฒฉ์๊ฐ ํด๋น ์ฌ์ฉ์๋ฅผ ์ง์์ ์ผ๋ก impersonateํ ์ ์๋ค. ํจ์ค์๋๋ฅผ ์ง์ ์ ์ผ๋ก ์ ์ถํ ์์๋ ์ ๋ณด๊ฐ ์ ์ก๋์ง ์์ผ๋ฉฐ, ๊ทธ๋ง์ ๋ ๋งค ๋ก๊ทธ์ธ ์๋๋ง๋ค ํด๋ผ์ด์ธํธ/์๋ฒ๊ฐ์ ๋๋ค๊ฐ ๊ตํ ์ ์ฐจ๊ฐ ํฌํจ๋์ด์์ด์ ๊ฐ์ด ๊ณ์ ๋ณ๊ฒฝ๋๊ธฐ ๋๋ฌธ
์ค์ ์ฌ์ฉ ์์
- AWS Cognito์ User Pool์ ๋ํด ์ธ์ฆ์ ํ ๋ InitiateAuth API์ AuthFlow๋ฅผ USER_SRP_AUTH ๋ก ์ค์ ํ ๊ฒฝ์ฐ SRP protocol์ ๋ฐ๋ผ ๋ก๊ทธ์ธ์ ์งํ ํ ์ ์๋ค.