SMS ๋ฉ์์ง๋ 2๋จ๊ณ ์ธ์ฆ(XNUMXFA)์ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ์
๋๋ค. ์ด๋ ์ํ, ์ ์ ๋ฐ ์ํธํํ ์ง๊ฐ, ์ฌ์ํจ ๋ฐ ๋ชจ๋ ์ข
๋ฅ์ ์๋น์ค์์ ์ฌ์ฉ๋ฉ๋๋ค.
์ด ๋ฐฉ๋ฒ์ ์์ ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ ์ด ์๋๋ฆฌ์ค์ ๋ถ๊ฐํฉ๋๋ค. ํ SIM ์นด๋์์ ๋ค๋ฅธ SIM ์นด๋๋ก ๋ฒํธ๋ฅผ ์ฌํ ๋นํ๋ ๊ฒ์ ๋ชจ๋ฐ์ผ ์๋ ์ด๊ธฐ๋ถํฐ ์์๋์์ต๋๋ค. ์ด๋ SIM ์นด๋๋ฅผ ๋ถ์คํ์ ๋ ๋ฒํธ๊ฐ ๋ณต์๋๋ ๋ฐฉ๋ฒ์ ๋๋ค. '๋์งํธ ํํ ๋๋ ์ ๋ฌธ๊ฐ'๋ 'SIM ์นด๋ ๋ค์ ์ฐ๊ธฐ' ์ต์ ์ด ์ฌ๊ธฐ ํ์์ ์ฌ์ฉ๋ ์ ์๋ค๋ ์ฌ์ค์ ๊นจ๋ฌ์์ต๋๋ค. ๊ฒฐ๊ตญ SIM ์นด๋๋ฅผ ํต์ ํ๋ ์ฌ๋์ ๋ค๋ฅธ ์ฌ๋์ ์จ๋ผ์ธ ๋ฑ ํน, ์ ์ ์ง๊ฐ, ์ฌ์ง์ด ์ํธํํ๊น์ง ํต์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํต์ ์ฌ ์ง์์๊ฒ ๋๋ฌผ์ ์ฃผ๊ฑฐ๋ ๊ธฐ๋ง, ๋ฌธ์ ์์กฐ ๋ฑ์ ํตํด ํ์ธ์ ๋ฒํธ๋ฅผ ์ ์ ํ ์๋ ์์ต๋๋ค.
์ด ์ฌ๊ธฐ ์๋ฒ์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ SIM ๊ตํ์ ๋ํ ์์ฒ ๊ฑด์ ์ํผ์๋๊ฐ ๋ฐํ์ก์ต๋๋ค. ์ฌ๋์ ๊ท๋ชจ๋ก ๋ณผ ๋ ์ธ๊ณ๋ ๊ณง SMS๋ฅผ ํตํ 2FA๋ฅผ ํฌ๊ธฐํ ๊ฒ์
๋๋ค. ํ์ง๋ง ์ด๋ฐ ์ผ์ ์ผ์ด๋์ง ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋ธ๋ก์ฒด์ธ์ ํตํด ์ผํ์ฑ ์ฝ๋๋ฅผ ์ ๋ฌํ๋ ์์ ํ 2FA ๋ฐฉ์์ ์ฌ์ฉํ ๊ฒ์ ์ ์ํ๊ณ , ์๋น์ค ์์ ์๊ฐ ์ด๋ฅผ ์ฐ๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ์ ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค.
๊ทธ ์๋ ์๋ฐฑ๋ง์ ๋ฌํฉ๋๋ค.
๋ฐ๋ ๊ฒฝ์ฐฐ์ ๋ฐ๋ฅด๋ฉด 2019๋ SIM ๊ตํ ์ฌ๊ธฐ๋ 63% ์ฆ๊ฐํ์ผ๋ฉฐ ๊ณต๊ฒฉ์์ "ํ๊ท ์ฒญ๊ตฌ์ก"์ 4,000GBP์์ต๋๋ค. ๋ฌ์์์์๋ ํต๊ณ๋ฅผ ์ฐพ์ง ๋ชปํ์ง๋ง ๋ ๋์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
SIM ์ค์ํ์ ์ธ๊ธฐ ์๋ Twitter, Instagram, Facebook, VK ๊ณ์ , ์ํ ๊ณ์ข๋ ๋ฌผ๋ก ์ต๊ทผ์๋ ์ํธํํ๊น์ง ํ์น๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ง๋ XNUMX์ ๋ฏธ์๊ฐ ๋๋ถ์ง๋ฐฉ๊ฒ์ฐฐ์ฒญ
๋ํ ๊ธฐ์ ํ๊ฒฌ์์ Joel Ortiz์ ์ฌ์ง. XNUMX๋
ํ ๊ทธ๋ ์ฌ์ด๋ฒ ์ฌ๊ธฐ ํ์๋ก ๊ตฌ๊ธ๋ ์์ ์ด๋ค.
SIM ๊ตํ ์๋ ๋ฐฉ์
์ค์ํ(Swaping)์ ๊ตํ์ ์๋ฏธํฉ๋๋ค. ์ด๋ฌํ ๋ชจ๋ ๊ณํ์์ ๋ฒ์ฃ์๋ ์ผ๋ฐ์ ์ผ๋ก SIM ์นด๋ ์ฌ๋ฐ๊ธ์ ํตํด ํผํด์์ ์ ํ๋ฒํธ๋ฅผ ํ์ทจํ๊ณ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ค์ ํฉ๋๋ค. ์ด๋ก ์ ์ผ๋ก ์ผ๋ฐ์ ์ธ SIM ๊ตํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ ๋ณด ์๋น์ค. ์ฌ๊ธฐ๊พผ์ ํผํด์์ ๊ฐ์ธ์ ๋ณด(์ด๋ฆ, ์ ํ๋ฒํธ)๋ฅผ ์์๋ ๋๋ค. ์คํ ์์ค(์์ ๋คํธ์ํฌ, ์น๊ตฌ)์์ ์ฐพ์ ์๋ ์๊ณ ๋ชจ๋ฐ์ผ ์ด์์์ ์ง์์ธ ๊ณต๋ฒ์๋ก๋ถํฐ ๋ฐ์ ์๋ ์์ต๋๋ค.
- ๋ธ๋กํน. ํผํด์์ SIM ์นด๋๊ฐ ๋นํ์ฑํ๋์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด ๊ณต๊ธ์์ ๊ธฐ์ ์ง์์ ์ ํํ์ฌ ๋ฒํธ๋ฅผ ์ ๊ณตํ๊ณ ์ ํ๊ธฐ๋ฅผ ๋ถ์คํ๋ค๊ณ ๋งํ๋ฉด ๋ฉ๋๋ค.
- ์บก์ฒํ์ฌ SIM ์นด๋๋ก ๋ฒํธ๋ฅผ ์ ์กํ์ธ์. ๋๊ฐ ํต์ ์ฌ ๊ณต๋ฒ์ด๋ ๋ฌธ์ ์์กฐ ๋ฑ์ ํตํด์๋ ์ด๋ค์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
์ค์ ์ํ์์๋ ์ํฉ์ด ํจ์ฌ ๋ ์ฌ๊ฐํฉ๋๋ค. ๊ณต๊ฒฉ์๋ ํผํด์๋ฅผ ์ ํํ ๋ค์ ๋งค์ผ ์ ํ ์์น๋ฅผ ์ถ์ ํฉ๋๋ค. ๊ฐ์ ์๊ฐ ๋ก๋ฐ์ผ๋ก ์ ํํ ์ ๋ณด๋ฅผ ์์ ํ๊ธฐ ์ํ ์์ฒญ 1ํ ๋น์ฉ์ 2~50์ผํธ์ ๋๋ค. ์ฌ์นด๋ ์์ ์๊ฐ ํด์ธ๋ก ๋๊ฐ์๋ง์ ํต์ ๋งค์ฅ ์ ์ฅ๊ณผ ํ์ํด ์ ์ฌ์นด๋๋ฅผ ๋ฐ๊ธ๋ฐ๋๋ค. ๋น์ฉ์ ์ฝ 20๋ฌ๋ฌ์ ๋๋ค(์ ๋ณด๋ฅผ ์ฐพ์์ต๋๋ค. ๋ค๋ฅธ ๊ตญ๊ฐ์์, 100๋ฌ๋ฌ์์ XNUMX๋ฌ๋ฌ๊น์ง ๋ค์ํ ํต์ ์ ์ฒด์์ ์ ๋ณด๋ฅผ ์ฐพ์์ต๋๋ค). ์ต์ ์ ๊ฒฝ์ฐ ๊ด๋ฆฌ์๊ฐ ํด๊ณ ๋ ๊ฒ์ ๋๋ค. ์ด์ ๋ํ ์ฑ ์์ ์์ต๋๋ค.
์ด์ ๋ชจ๋ SMS๋ ๊ณต๊ฒฉ์์ ์ํด ์์ ๋๋ฉฐ ์ ํ ์์ ์๋ ์ด์ ๋ํด ์๋ฌด๊ฒ๋ ํ ์ ์์ต๋๋ค. ๊ทธ๋ ํด์ธ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ ๋น์ ํผํด์์ ๋ชจ๋ ๊ณ์ ์ ์ก์ธ์คํ๊ณ ์ํ๋ ๊ฒฝ์ฐ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
๋๋๋นํ ์ฌ์ฐ์ ๋๋ ค๋ฐ์ ๊ฐ๋ฅ์ฑ
์ํ์ ๋๋๋ก ํผํด์๋ฅผ ์ค๊ฐ์ ์์ฉํ๊ณ ๊ณ์ข์์ ์ด์ฒด๋ฅผ ์ธ์ถํฉ๋๋ค. ๋ฐ๋ผ์ ๋ฒ์ธ์ด ๋ฐ๊ฒฌ๋์ง ์๋๋ผ๋ ๋ช ๋ชฉํํ ๋ฐํ์ด ๊ฐ๋ฅํ๋ค. ๊ทธ๋ฌ๋ ์ํธํํ ์ง๊ฐ์ ์ฌ์ฉํ๋ฉด ๋ชจ๋ ๊ฒ์ด ๋ ๋ณต์กํด์ง๋๋ค. ๊ธฐ์ ์ ์ผ๋ก, ๊ทธ๋ฆฌ๊ณ ์ ๋ฒ์ ์ผ๋ก. ์ง๊ธ๊น์ง ๊ฑฐ๋์/์ง๊ฐ ์ค ์ค์ ํผํด์์๊ฒ ๋ณด์์ ์ง๊ธํ ๊ณณ์ ๋จ ํ ๊ณณ๋ ์์ต๋๋ค.
ํผํด์๊ฐ ๋ฒ์ ์์ ์์ ์ ๋์ ๋ณํธํ๊ณ ์ถ๋ค๋ฉด ์ด์์๋ฅผ ๋น๋ํฉ๋๋ค. ์ด์์๋ ๊ณ์ ์์ ๋์ ํ์น ์ ์๋ ์กฐ๊ฑด์ ๋ง๋ค์์ต๋๋ค. ๊ทธ๊ฒ ๋ฐ๋ก ๋ด๊ฐ ํ ์ผ์ด์ผ
์ง๊ธ๊น์ง ์ํธํํ ์์ ์๋ฅผ ๋ฒ์ ์ผ๋ก ๋ณดํธํ๊ธฐ ์ํ ์คํ ๊ณํ์ ๋ง๋ จํ ๊ตญ๊ฐ๋ ์์ต๋๋ค. ๊ทํ์ ์๋ณธ์ ๋ณด์ฅํ๊ฑฐ๋ ์์ค์ ๋ํ ๋ณด์์ ๋ฐ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋ฐ๋ผ์ ์ค์ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ ๊ฒ์ด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ๋ณด๋ค ์ฝ์ต๋๋ค. ๊ฐ์ฅ ํ์คํ ๋ฐฉ๋ฒ์ 2FA์ ๋ํด ๋ณด๋ค ์์ ์ ์ธ "๋ ๋ฒ์งธ ์์"๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
SIM ๊ตํ์ SMS๋ฅผ ํตํ 2FA์ ์ ์ผํ ๋ฌธ์ ๊ฐ ์๋๋๋ค
SMS์ ํ์ธ ์ฝ๋๋ ๊ธฐ์ ์ ์ธ ๊ด์ ์์๋ ์์ ํ์ง ์์ต๋๋ค. SS7(Signaling System 7)์ ํจ์น๋์ง ์์ ์ทจ์ฝ์ ์ผ๋ก ์ธํด ๋ฉ์์ง๊ฐ ๊ฐ๋ก์ฑ์ง ์ ์์ต๋๋ค. SMS๋ฅผ ํตํ 2FA๋ ๊ณต์์ ์ผ๋ก ์์ ํ์ง ์์ ๊ฒ์ผ๋ก ์ธ์๋ฉ๋๋ค(๋ฏธ๊ตญ ๊ตญ๋ฆฝ ํ์ค ๊ธฐ์ ์ฐ๊ตฌ์(National Institute of Standards and Technology)๋ ์ด์ ๋ํด
๋์์ 2FA์ ์กด์ฌ๋ก ์ธํด ์ฌ์ฉ์๋ ๋ณด์์ ์๋ชป๋ ๋๋์ ๊ฐ๊ฒ ๋๊ณ ๋ ๊ฐ๋จํ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ํํ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ด๋ฌํ ์ธ์ฆ์ผ๋ก ์ธํด ๊ณ์ ์ ๋ํ ์ ๊ทผ์ด ์ด๋ ค์์ง๋ ๊ฒ์ ์๋์ง๋ง ๊ณต๊ฒฉ์๊ฐ ๊ณ์ ์ ์ ๊ทผํ๊ธฐ๊ฐ ๋ ์ฌ์์ง๋๋ค.
๊ทธ๋ฆฌ๊ณ SMS๊ฐ ์ค๋ซ๋์ ์ง์ฐ๋์ด ๋์ฐฉํ๊ฑฐ๋ ์ ํ ๋์ฐฉํ์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
๊ธฐํ 2FA ๋ฐฉ๋ฒ
๋ฌผ๋ก ๊ทธ ๋น์ ์ค๋งํธํฐ๊ณผ SMS๋ก ์๋ ด๋์ง๋ ์์๋ค. 2FA์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ผํ์ฑ TAN ์ฝ๋: ์์์ ์ธ ๋ฐฉ๋ฒ์ด์ง๋ง ์๋ํฉ๋๋ค. ์ผ๋ถ ์ํ์์๋ ์ฌ์ ํ ์ฌ์ฉ๋ฉ๋๋ค. ์ง๋ฌธ, ๋ง๋ง ์ค์บ ๋ฑ ์์ฒด ์ธ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ์์คํ ์ด ์์ต๋๋ค. ํธ์์ฑ, ์ ๋ขฐ์ฑ ๋ฐ ๊ฐ๊ฒฉ ์ธก๋ฉด์์ ํฉ๋ฆฌ์ ์ธ ์ ์ถฉ์์ผ๋ก ๋ณด์ด๋ ๋ ๋ค๋ฅธ ์ต์ ์ 2FA: RSA ํ ํฐ, Google Authenticator๋ฅผ ์ํ ํน์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค. ๋ฌผ๋ฆฌ์ ์ธ ํค์ ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค.
์ด๋ก ์ ์ผ๋ก๋ ๋ชจ๋ ๊ฒ์ด ๋ ผ๋ฆฌ์ ์ด๊ณ ์ ๋ขฐํ ์ ์์ด ๋ณด์ ๋๋ค. ๊ทธ๋ฌ๋ ์ค์ ๋ก ์ต์ 2FA ์๋ฃจ์ ์๋ ๋ฌธ์ ๊ฐ ์์ผ๋ฉฐ, ์ด๋ก ์ธํด ํ์ค์ ๊ธฐ๋์ ๋ค๋ฆ ๋๋ค.
์ ๋ฐ๋ฅด๋ฉด
์ฌ์ฉ์๋ ๋ง์ 2FA ๋ฐฉ๋ฒ์ ์ก์ธ์ค ๊ถํ ์์ค์ ๋ํ ๋๋ ค์๊ณผ ์ฐ๊ด์ํต๋๋ค. ๋ฌผ๋ฆฌ์ ํค๋ TAN ๋น๋ฐ๋ฒํธ ๋ชฉ๋ก์ ๋ถ์ค๋๊ฑฐ๋ ๋๋๋นํ ์ ์์ต๋๋ค. ์ ๋ ๊ฐ์ธ์ ์ผ๋ก Google OTP๋ฅผ ์ฌ์ฉํ๋ฉด์ ์ข์ง ์์ ๊ฒฝํ์ ํ์ต๋๋ค. ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ ์ฒซ ๋ฒ์งธ ์ค๋งํธํฐ์ด ๊ณ ์ฅ๋ฌ์ต๋๋ค. ๋ด ๊ณ์ ์ ๋ํ ์ก์ธ์ค๋ฅผ ๋ณต์ํ๊ธฐ ์ํ ๋ ธ๋ ฅ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋ ๋ค๋ฅธ ๋ฌธ์ ๋ ์ ์ฅ์น๋ก ์ ํํ๋ ๊ฒ์ ๋๋ค. Google OTP์๋ ๋ณด์์์ ์ด์ ๋ก ๋ด๋ณด๋ด๊ธฐ ์ต์ ์ด ์์ต๋๋ค(ํค๋ฅผ ๋ด๋ณด๋ผ ์ ์๋ค๋ฉด ์ด๋ค ๋ณด์์ด ์๋์?). ์ผ๋จ ์ด์ ๋ฅผ ์์ผ๋ก ๋ค๊ณ ๋ค๋๋ค๊ฐ ์ค๋๋ ์ค๋งํธํฐ์ ์ ๋ฐ ์์ ์์์ ๋ฃ์ด ๋๋ ๊ฒ์ด ๋ ์ฝ๋ค๊ณ ํ๋จํ์ต๋๋ค.
2FA ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์์ผ ํฉ๋๋ค.
- ์์ ํจ - ๊ณต๊ฒฉ์๊ฐ ์๋ ๊ทํ๋ง์ด ๊ทํ์ ๊ณ์ ์ ์ ๊ทผํ ์ ์์ด์ผ ํฉ๋๋ค.
- ์ ๋ขฐ์ฑ - ํ์ํ ๋๋ง๋ค ๊ณ์ ์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
- ํธ๋ฆฌํ๊ณ ์ ๊ทผ ๊ฐ๋ฅ - 2FA ์ฌ์ฉ์ด ๋ช ํํ๊ณ ์๊ฐ์ด ์ต์ํ๋ฉ๋๋ค.
- ๊ฐ์ด ์ผ
์ฐ๋ฆฌ๋ ๋ธ๋ก์ฒด์ธ์ด ์ฌ๋ฐ๋ฅธ ์๋ฃจ์ ์ด๋ผ๊ณ ๋ฏฟ์ต๋๋ค.
๋ธ๋ก์ฒด์ธ์์ 2FA ์ฌ์ฉ
์ฌ์ฉ์์๊ฒ ์์ด ๋ธ๋ก์ฒด์ธ์ 2FA๋ SMS๋ฅผ ํตํด ์ผํ์ฑ ์ฝ๋๋ฅผ ๋ฐ๋ ๊ฒ๊ณผ ๋์ผํ๊ฒ ๋ณด์ ๋๋ค. ์ ์ผํ ์ฐจ์ด์ ์ ์ ๋ฌ ์ฑ๋์ ๋๋ค. 2FA ์ฝ๋๋ฅผ ์ป๋ ๋ฐฉ๋ฒ์ ๋ธ๋ก์ฒด์ธ์ด ์ ๊ณตํ๋ ๋ด์ฉ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ์ฐ๋ฆฌ ํ๋ก์ ํธ(์ ๋ณด๋ ๋ด ํ๋กํ์ ์์)์์ ์ด๊ฒ์ ์น ์ ํ๋ฆฌ์ผ์ด์ , Tor, iOS, Android, Linux, Windows, MacOS์ ๋๋ค.
์ด ์๋น์ค๋ ์ผํ์ฉ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ๋ธ๋ก์ฒด์ธ์ ๋ฉ์ ์ ๋ก ๋ณด๋ ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ณ ์ ์ ์ธ ๋ฐฉ๋ฒ์ ๋ฐ๋ฅด์ญ์์ค. ์ฌ์ฉ์๋ ์๋น์ค ์ธํฐํ์ด์ค์ ์์ ๋ ์ฝ๋๋ฅผ ์ ๋ ฅํ๊ณ ๋ก๊ทธ์ธํฉ๋๋ค.
๊ธฐ์ฌ
- ํ ๋ฒ์ ํด๋ฆญ์ผ๋ก ๊ณ์ ์ ๋ง๋ค ์ ์์ต๋๋ค. ์ ํ๋ ์ด๋ฉ์ผ์ ํ์ํ์ง ์์ต๋๋ค.
- 2FA ์ฝ๋๊ฐ ํฌํจ๋ ๋ชจ๋ ๋ฉ์์ง๋ end-to-end curve25519xsalsa20poly1305๋ก ์ํธํ๋ฉ๋๋ค.
- MITM ๊ณต๊ฒฉ์ ์ ์ธ๋ฉ๋๋ค. 2FA ์ฝ๋๊ฐ ํฌํจ๋ ๋ชจ๋ ๋ฉ์์ง๋ ๋ธ๋ก์ฒด์ธ์ ๊ฑฐ๋์ด๋ฉฐ Ed25519 EdDSA์ ์ํด ์๋ช ๋ฉ๋๋ค.
- 2FA ์ฝ๋๊ฐ ํฌํจ๋ ๋ฉ์์ง๋ ์์ฒด ๋ธ๋ก์ผ๋ก ๋๋ฉ๋๋ค. ๋ธ๋ก์ ์์์ ํ์์คํฌํ๋ ์์ ํ ์ ์์ผ๋ฏ๋ก ๋ฉ์์ง ์์๋ ์์ ๋ ์ ์์ต๋๋ค.
- ๋ฉ์์ง์ "์ง์์ฑ"์ ํ์ธํ๋ ์ค์ ๊ตฌ์กฐ๋ ์์ต๋๋ค. ์ด๋ ํฉ์์ ๊ธฐ๋ฐํ ๋ถ์ฐ ๋ ธ๋ ์์คํ ์ ์ํด ์ํ๋๋ฉฐ, ์ด๋ ์ฌ์ฉ์๊ฐ ์์ ํฉ๋๋ค.
- ๋นํ์ฑํํ ์ ์์ต๋๋ค. ๊ณ์ ์ ์ฐจ๋จํ ์ ์์ผ๋ฉฐ ๋ฉ์์ง๋ฅผ ์ญ์ ํ ์ ์์ต๋๋ค.
- ์ธ์ ๋ ์ง ๋ชจ๋ ๊ธฐ๊ธฐ์์ 2FA ์ฝ๋์ ์ก์ธ์คํ์ธ์.
- 2FA ์ฝ๋๋ก ๋ฉ์์ง ์ ๋ฌ์ ํ์ธํฉ๋๋ค. ์ผํ์ฉ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ์กํ๋ ์๋น์ค๋ ํด๋น ๋น๋ฐ๋ฒํธ๊ฐ ์ ๋ฌ๋์์์ ํ์คํ ์ ์ ์์ต๋๋ค. '๋ค์ ๋ณด๋ด๊ธฐ' ๋ฒํผ์ด ์์ต๋๋ค.
๋ค๋ฅธ 2FA ๋ฐฉ๋ฒ๊ณผ ๋น๊ตํ๊ธฐ ์ํด ๋ค์ ํ๋ฅผ ๋ง๋ค์์ต๋๋ค.
์ฌ์ฉ์๋ ๋ธ๋ก์ฒด์ธ ๋ฉ์ ์ ์์ ๊ณ์ ์ ๋ฐ์ XNUMX์ด ๋ง์ ์ฝ๋๋ฅผ ๋ฐ์ต๋๋ค. ๋ก๊ทธ์ธ์๋ ์ํธ๋ฌธ๋ง ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ ์ฒญ ๋ฐฉ๋ฒ์ ๋ค๋ฅผ ์ ์์ต๋๋ค. ํ๋์ ๊ณ์ ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ์๋น์ค์ ๋ํ ์ฝ๋๋ฅผ ๋ฐ์ ์๋ ์๊ณ , ๊ฐ ์๋น์ค๋ง๋ค ๋ณ๋์ ๊ณ์ ์ ๋ง๋ค ์๋ ์์ต๋๋ค.
๋ถํธํจ๋ ์์ต๋๋ค. ๊ณ์ ์๋ ์ต์ํ ํ๋์ ๊ฑฐ๋๊ฐ ์์ด์ผ ํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์ฝ๋๊ฐ ํฌํจ๋ ์ํธํ๋ ๋ฉ์์ง๋ฅผ ๋ฐ์ผ๋ ค๋ฉด ๊ทธ์ ๊ณต๊ฐ ํค๋ฅผ ์์์ผ ํ๋ฉฐ, ์ด๋ ์ฒซ ๋ฒ์งธ ๊ฑฐ๋์์๋ง ๋ธ๋ก์ฒด์ธ์ ๋ํ๋ฉ๋๋ค. ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ๊ทธ ์ํฉ์์ ๋ฒ์ด๋ ์ ์์๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๋ค์๊ฒ ์ง๊ฐ์์ ๋ฌด๋ฃ ํ ํฐ์ ๋ฐ์ ์ ์๋ ๊ธฐํ๋ฅผ ์ฃผ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ ๋์ ํด๊ฒฐ์ฑ ์ ๊ณ์ ์ด๋ฆ์ ๊ณต๊ฐ ํค๋ก ์ง์ ํ๋ ๊ฒ์ ๋๋ค. (๋น๊ต๋ฅผ ์ํด ๊ณ์ข๋ฒํธ๊ฐ ์์ต๋๋ค. U1467838112172792705 ๊ณต๊ฐ ํค์ ํ์๋ฌผ์ ๋๋ค. cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. ๋ฉ์ ์ ์ ๊ฒฝ์ฐ ์ด๋ ๋ ํธ๋ฆฌํ๊ณ ์ฝ๊ธฐ ์ฝ์ง๋ง 2FA ์ฝ๋ ์ ์ก ์์คํ ์ ๊ฒฝ์ฐ์๋ ์ ํ ์ฌํญ์ ๋๋ค. ๋ฏธ๋์๋ ๋๊ตฐ๊ฐ๊ฐ ๊ทธ๋ฐ ๊ฒฐ์ ์ ๋ด๋ ค 'ํธ์์ฑ๊ณผ ์ ๊ทผ์ฑ'์ ๊ทธ๋ฆฐ์กด์ผ๋ก ์ฎ๊ฒจ๊ฐ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
2FA ์ฝ๋ ์ ์ก ๊ฐ๊ฒฉ์ 0.001 ADM์ผ๋ก ๋งค์ฐ ์ ๋ ดํฉ๋๋ค. ์ด์ ๊ฐ๊ฒฉ์ 0.00001 USD์ ๋๋ค. ๋ค์ ๋งํ์ง๋ง, ๋ธ๋ก์ฒด์ธ์ ๋์ด๊ณ ๊ฐ๊ฒฉ์ XNUMX์ผ๋ก ๋ง๋ค ์ ์์ต๋๋ค.
๋ธ๋ก์ฒด์ธ์ 2FA๋ฅผ ๊ทํ์ ์๋น์ค์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ
๋ช๋ช ๋ ์๋ค์ด ๊ทธ๋ค์ ์๋น์ค์ ๋ธ๋ก์ฒด์ธ ์ธ์ฆ์ ์ถ๊ฐํ๋ ๋ฐ ๊ด์ฌ์ ๊ฐ์ง ์ ์์์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ฉ์ ์ ๋ฅผ ์ฌ์ฉํ์ฌ ์ด ์์ ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ์๋ ค ๋๋ฆฌ๊ฒ ์ต๋๋ค. ๋น์ ํ์๋ฉด ๋ค๋ฅธ ๋ธ๋ก์ฒด์ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. 2FA ๋ฐ๋ชจ ์ฑ์์๋ postgresql10์ ์ฌ์ฉํ์ฌ ๊ณ์ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค.
์ฐ๊ฒฐ ๋จ๊ณ:
- 2FA ์ฝ๋๋ฅผ ๋ณด๋ผ ๋ธ๋ก์ฒด์ธ์ ๊ณ์ ์ ๋ง๋์ธ์. ๊ทํ๋ ์ฝ๋๋ก ๋ฉ์์ง๋ฅผ ์ํธํํ๊ณ ๊ฑฐ๋์ ์๋ช ํ๊ธฐ ์ํ ๊ฐ์ธ ํค๋ก ์ฌ์ฉ๋๋ ์ํธ ๋ฌธ๊ตฌ๋ฅผ ๋ฐ๊ฒ ๋ฉ๋๋ค.
- 2FA ์ฝ๋๋ฅผ ์์ฑํ๋ ค๋ฉด ์๋ฒ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํ์ธ์. ์ผํ์ฉ ๋น๋ฐ๋ฒํธ ์ ๋ฌ๊ณผ ํจ๊ป ๋ค๋ฅธ 2FA ๋ฐฉ๋ฒ์ ์ด๋ฏธ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด ์ด ๋จ๊ณ๋ฅผ ์ด๋ฏธ ์๋ฃํ ๊ฒ์ ๋๋ค.
- ๋ธ๋ก์ฒด์ธ ๋ฉ์ ์ ์์ ์ฌ์ฉ์์๊ฒ ์ฝ๋๋ฅผ ๋ณด๋ด๋ ค๋ฉด ์๋ฒ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํ์ธ์.
- 2FA ์ฝ๋๋ฅผ ๋ณด๋ด๊ณ ์ ๋ ฅํ๊ธฐ ์ํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ญ๋๋ค. ์ผํ์ฉ ๋น๋ฐ๋ฒํธ ์ ๋ฌ๊ณผ ํจ๊ป ๋ค๋ฅธ 2FA ๋ฐฉ๋ฒ์ ์ด๋ฏธ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด ์ด ๋จ๊ณ๋ฅผ ์ด๋ฏธ ์๋ฃํ ๊ฒ์ ๋๋ค.
1 ๊ณ์ ์์ฑ
๋ธ๋ก์ฒด์ธ์์ ๊ณ์ ์ ์์ฑํ๋ค๋ ๊ฒ์ ๊ฐ์ธ ํค, ๊ณต๊ฐ ํค ๋ฐ ํ์ ๊ณ์ ์ฃผ์๋ฅผ ์์ฑํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๋จผ์ BIP39 ์ํธ๊ฐ ์์ฑ๋๊ณ ์ด๋ก๋ถํฐ SHA-256 ํด์๊ฐ ๊ณ์ฐ๋ฉ๋๋ค. ํด์๋ ๊ฐ์ธ ํค ks์ ๊ณต๊ฐ ํค kp๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ณต๊ฐ ํค์์ ๋์ผํ SHA-256๊ณผ ๋ฐ์ ์ ์ฌ์ฉํ์ฌ ๋ธ๋ก์ฒด์ธ์ ์ฃผ์๋ฅผ ์ป์ต๋๋ค.
์ ๊ณ์ ์์ ๋งค๋ฒ 2FA ์ฝ๋๋ฅผ ๋ณด๋ด๋ ค๋ฉด ๊ณ์ ์์ฑ ์ฝ๋๋ฅผ ์๋ฒ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
import Mnemonic from 'bitcore-mnemonic'
this.passphrase = new Mnemonic(Mnemonic.Words.ENGLISH).toString()
โฆ
import * as bip39 from 'bip39'
import crypto from 'crypto'
adamant.createPassphraseHash = function (passphrase) {
const seedHex = bip39.mnemonicToSeedSync(passphrase).toString('hex')
return crypto.createHash('sha256').update(seedHex, 'hex').digest()
}
โฆ
import sodium from 'sodium-browserify-tweetnacl'
adamant.makeKeypair = function (hash) {
var keypair = sodium.crypto_sign_seed_keypair(hash)
return {
publicKey: keypair.publicKey,
privateKey: keypair.secretKey
}
}
โฆ
import crypto from 'crypto'
adamant.getAddressFromPublicKey = function (publicKey) {
const publicKeyHash = crypto.createHash('sha256').update(publicKey, 'hex').digest()
const temp = Buffer.alloc(8)
for (var i = 0; i < 8; i++) {
temp[i] = publicKeyHash[7 - i]
}
return 'U' + bignum.fromBuffer(temp).toString()
}
๋ฐ๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ด๋ฅผ ๋จ์ํํ์ต๋๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ๋์ ๊ณ์ ์ ๋ง๋ค๊ณ ์ฌ๊ธฐ์์ ์ฝ๋๋ฅผ ๋ณด๋์ต๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ด๋ ์ฌ์ฉ์์๊ฒ ๋ ํธ๋ฆฌํฉ๋๋ค. ์๋น์ค๊ฐ ํน์ ๊ณ์ ์์ 2FA ์ฝ๋๋ฅผ ๋ณด๋ด๊ณ ์ด๋ฆ์ ์ง์ ํ ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
2 2FA ์ฝ๋ ์์ฑ
๊ฐ ์ฌ์ฉ์ ๋ก๊ทธ์ธ๋ง๋ค 2FA ์ฝ๋๊ฐ ์์ฑ๋์ด์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋์๊ด์ ์ด์ฉํด์
const hotp = speakeasy.hotp({
counter,
secret: account.seSecretAscii,
});
์ฌ์ฉ์๊ฐ ์ ๋ ฅํ 2FA ์ฝ๋์ ์ ํจ์ฑ ํ์ธ:
se2faVerified = speakeasy.hotp.verify({
counter: this.seCounter,
secret: this.seSecretAscii,
token: hotp,
});
3 2FA ์ฝ๋ ๋ณด๋ด๊ธฐ
2FA ์ฝ๋๋ฅผ ์ ์ถํ๋ ค๋ฉด ๋ธ๋ก์ฒด์ธ ๋
ธ๋ API, JS API ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ์ฝ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ์์์๋ ์ฝ์์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ๋ธ๋ก์ฒด์ธ๊ณผ์ ์ํธ ์์ฉ์ ๋จ์ํํ๋ ์ ํธ๋ฆฌํฐ์ธ ๋ช
๋ น์ค ์ธํฐํ์ด์ค์
๋๋ค. 2FA ์ฝ๋๊ฐ ํฌํจ๋ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ค๋ฉด ๋ค์ ๋ช
๋ น์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. send message
์ฝ์.
const util = require('util');
const exec = util.promisify(require('child_process').exec);
โฆ
const command = `adm send message ${adamantAddress} "2FA code: ${hotp}"`;
let { error, stdout, stderr } = await exec(command);
๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ค์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. send
JS API ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์.
4 ์ฌ์ฉ์ ์ธํฐํ์ด์ค
์ฌ์ฉ์์๊ฒ 2FA ์ฝ๋๋ฅผ ์ ๋ ฅํ ์ ์๋ ์ต์ ์ด ์ ๊ณต๋์ด์ผ ํ๋ฉฐ, ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ซํผ์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ํ๋ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ์ ์์์๋ Vue์ ๋๋ค.
๋ธ๋ก์ฒด์ธ XNUMX๋จ๊ณ ์ธ์ฆ ๋ฐ๋ชจ ์ ํ๋ฆฌ์ผ์ด์
์ ์์ค ์ฝ๋๋ ๋ค์์์ ๋ณผ ์ ์์ต๋๋ค.
์ถ์ฒ : habr.com