์ถ์๋ ๊ฐ์ฅ ์ค๋ ์ง์๋๋ ๋น๋ฐ๋ฒํธ ์ถ์ธก ํ๋ก๊ทธ๋จ์ธ John the Ripper 1.9.0-jumbo-1์ ์ ๋ฒ์ ์ ๋๋ค. (์ด ํ๋ก์ ํธ๋ 1996๋ ๋ถํฐ ๊ฐ๋ฐ๋์ด ์์ต๋๋ค.) ์คํธ๋๋์ฒด ํ๋กํ ํฐ ์์ค๋ ๋ค์ด๋ก๋ํ ์ ์์ผ๋ฉฐ Windows์ฉ ๊ธฐ์ฑ ์ด์ ๋ธ๋ฆฌ๋ ์ ๊ณต๋ฉ๋๋ค.
๋ฒ์ 1.8.0-jumbo-1์ด ์ถ์๋ ์ง 4.5๋ ์ด ์ง๋ฌ์ผ๋ฉฐ, ๊ทธ ๋์ 6000๋ช ์ด์์ ๊ฐ๋ฐ์๊ฐ 80๊ฐ ์ด์์ ๋ณ๊ฒฝ(git ์ปค๋ฐ)์ ์ํํ์ต๋๋ค. ์ด ๊ธฐ๊ฐ ๋์ ๊ฐ๋ฐ์๋ ๋ค์์ ์ฌ์ฉํ ๊ฒ์ ๊ถ์ฅํ์ต๋๋ค. GitHub์ ์ต์ ๋ฒ์ , ๋๋ถ์ ๋ณํ์๋ ๋ถ๊ตฌํ๊ณ ์ํ๋ ์์ ์ ์ผ๋ก ์ ์ง๋์์ต๋๋ค. ์ง์์ ์ธ ํตํฉ, ์ฌ๊ธฐ์๋ ๋ง์ ํ๋ซํผ์์ ๊ฐ ๋ณ๊ฒฝ ์ฌํญ(ํ ์์ฒญ)์ ๋ํ ์ฌ์ ๊ฒ์ฆ์ด ํฌํจ๋ฉ๋๋ค. ์ ๋ฒ์ ์ ํน์ง์ CPU, GPU, Xeon Phi ์ธ์ FPGA(FPGA)๋ฅผ ์ง์ํ๋ ๋ฑ์ฅ์ด๋ค.
๋ณด๋์ฉ ZTEX 1.15๋
4๊ฐ์ FPGA ์นฉ์ ํฌํจํ๊ณ ์๋ ์ฃผ๋ก ๋นํธ์ฝ์ธ โโ์ฑ๊ตด์ ์ฌ์ฉ๋์์ง๋ง ์ด์ 7๊ฐ์ง ์ ํ์ ๋น๋ฐ๋ฒํธ ํด์๊ฐ ๊ตฌํ๋ฉ๋๋ค: bcrypt, classic descrypt(bigcrypt ํฌํจ), sha512crypt, sha256crypt, md5crypt(Apache apr1 ๋ฐ AIX smd5 ํฌํจ), Drupal7 ๋ฐ phpass(์ฌ์ฉ๋จ) , ํนํ WordPress์์). ๊ทธ ์ค ์ผ๋ถ๋ ์ฒ์์ผ๋ก FPGA์ ๊ตฌํ๋์์ต๋๋ค. bcrypt์ ๊ฒฝ์ฐ ์ฝ 119์ํธ์ ์ ๋ ฅ ์๋น๋ก 2^5 ๋ฐ๋ณต("$2b$05")์ผ๋ก ์ต๋ 27 c/s์ ์ฑ๋ฅ์ ๋ฌ์ฑํ๋ฉด ๋ณด๋๋น, ํ๋์จ์ด ๊ฐ๊ฒฉ ๋ฐ ์ํธ๋น ์ต์ GPU์ ๊ฒฐ๊ณผ๋ฅผ ํฌ๊ฒ ์ด๊ณผํฉ๋๋ค. ๋ํ ์ง์๋จ ํด๋ฌ์คํฐ ์ด ์ ํ์ ๋ณด๋๋ ๋จ์ผ Raspberry Pi 16์์ ์ ์ด๋๋ ์ต๋ 64๊ฐ ๋ณด๋(2๊ฐ์ FPGA)๋ก ํ
์คํธ๋์์ต๋๋ค. ๋ชจ๋ ๋น๋ฐ๋ฒํธ ์ถ์ธก ๋ชจ๋ ๋ฐ ๋ค์์ ํด์ ๋์ ๋ค์ด๋ก๋๋ฅผ ํฌํจํ์ฌ ์ผ๋ฐ์ ์ธ John the Ripper ๊ธฐ๋ฅ์ด ์ง์๋ฉ๋๋ค. ์์
์๋๋ฅผ ๋์ด๊ธฐ ์ํด ๋ง์คํฌ(๋ค๋ฅธ ๋ชจ๋์์ ์กฐํฉ์ ํฌํจํ "--mask" ๋ชจ๋) ์ฌ์ฉ๊ณผ ๊ณ์ฐ๋ ํด์๋ฅผ FPGA ์ธก์ ๋ก๋๋ ํด์์ ๋น๊ตํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค. ๊ตฌํ ๊ด์ ์์ ๋ณด๋ฉด ๋ง์ ๋์์ธ(์: sha512crypt ๋ฐ Drupal7) ์ํธํ ์ฝ์ด์ ์ํธ ์์ฉํ๋ ๋ฉํฐ ์ค๋ ๋ ํ๋ก์ธ์ ์ฝ์ด(์ํํธ CPU ์ฝ์ด)๋ก ๊ตฌ์ฑ๋ ๋ธ๋ก์ด ์ฌ์ฉ๋ฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ๊ฐ๋ฐ์ ๋ค๋ฅธ ์ ๋ณด ๊ฐ๋ฐ์๋ค๊ณผ ํ๋ ฅํ์ฌ Denis Burykin์ด ์ฃผ๋ํ์ต๋๋ค.
๊ธฐํ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ:
- ๊ธฐ์กด ๋น๋ฐ๋ฒํธ ํด์(์: QNX ์ ๋ฒ์ ์)๋ฟ๋ง ์๋๋ผ ์ํธํํ ์ง๊ฐ, ์ํธํ๋ ์์นด์ด๋ธ ๋ฐ ์ํธํ๋ ํ์ผ ์์คํ (์: Bitlocker ๋ฐ FreeBSD geli)๋ฟ๋ง ์๋๋ผ ์ด์ ์ ์ง์๋์๋ ์๋ก์ด ์ ํ์ ํ์์ ๋ํ ์ง์(์: OpenBSD Softraid์ ๋ํ bcrypt-pbkdf์ ๋ํ ์ง์ ์ถ๊ฐ) ๋ฑ๋ ์ง์๋ฉ๋๋ค. ์ ์ฒด์ ์ผ๋ก CPU์๋ 80๊ฐ ํ์, OpenCL์๋ 47๊ฐ ํ์์ด ์ถ๊ฐ๋์์ต๋๋ค(๊ทธ๋ฆฌ๊ณ ์์์ ์ด์ ํ์์ด ์๋ก์ด ํ์๊ณผ ์ฌ์ฉ๋์ง ์๋ ํ์์ผ๋ก ํตํฉ๋๋ฉด์ ์ ๊ฑฐ๋์์ต๋๋ค). ์ด์ ์ด ํ์ ์๋ CPU์์ 407๊ฐ(๋๋ ๊ตฌ์ฑ ํ์ผ์์ ๊ตฌ์ฑ๋ "๋์ " ํ์์ ํฌํจํ์ง ์์ 262๊ฐ), OpenCL์์ 88๊ฐ์ ๋๋ค.
- OpenCL์ ์ ํธํ์ฌ CUDA ์ธ์ด ์ง์์ ๊ฑฐ๋ถํฉ๋๋ค. OpenCL์ NVIDIA GPU์ ์ ์ฒด ์ฌ์ฉ์ ์ ํ ๋ฐฉํดํ์ง ์์ต๋๋ค(์ด์ ์ ๋ ๊ตฌํ ๋์ GPU์ ๊ฐ ํ์์ ๋ํ ๊ฐ๋ฐ ๋ฐ ์ต์ ํ์ ์ด์ ์ ๋ง์ถ ๋๋ถ์ ๋์์ด ๋ฉ๋๋ค).
- ์๋ก์ด SIMD ๋ช
๋ น ์ธํธ(AVX2, AVX-512(86์ธ๋ Xeon Phi ํฌํจ) ๋ฐ MIC(64์ธ๋) ์ง์)์ ๋ฌผ๋ก ๋ค์ํ ํ์ ๊ตฌํ์์ SIMD๋ฅผ ๋ณด๋ค ๋ณดํธ์ ์ด๊ณ ์๋ฒฝํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด์ ์ xXNUMX(-XNUMX)์์ AVX ๋ฐ XOP๊น์ง ์ง์๋๋ ๋ช
๋ น์ด ์ธํธ ๋ฐ
ARM, Aarch64 ๋ฐ POWER์ NEON, ASIMD ๋ฐ AltiVec. (๋ถ๋ถ์ ์ผ๋ก GSoC 2015์ ์ผ๋ถ์ ๋๋ค.) - ๋์์ ๋ง์ ์์ ํด์๋ฅผ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ (์: GPU์ 320์ต 1์ฒ๋ง ๊ฐ์ SHA-XNUMX ํด์ ๋ก๋ ํ ์คํธ) ํด์ ๊ณ์ฐ ์๋๋ฅผ ๋์ด๊ธฐ ์ํด CPU ๋ฐ OpenCL์ ๋ํ ๋ค์ํ ์ต์ ํ๊ฐ ์ด๋ฃจ์ด์ก์ต๋๋ค. ์ด๋ฌํ ์ต์ ํ ์ค ์ผ๋ถ๋ ๋ณดํธ์ ์ด๊ณ ์ผ๋ถ๋ ๋ค์ํ ํ์ ํ์ ์งํฉ์ ๋ค๋ฃจ๋ฉฐ ๋๋ถ๋ถ์ ๊ฐ๋ณ ํ์์๋ง ์ ์ฉ๋ฉ๋๋ค.
- NVIDIA GTX์ ๋๋ฆฐ ๋จํ์ ๊ณ ๋ ค๋ฅผ ํฌํจํ์ฌ CPU์์ ํ์ธ๋ ๋น๋ฐ๋ฒํธ์ ์ต์ ๋ฒํผ๋ง(โโtune=auto โverbosity=5โ) ๋ฐ OpenCL(๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋จ)์ ์ต์ ์์ ํฌ๊ธฐ์ ๋ํ (์๋) ๊ตฌ์ฑ ์๋ฆฌ์ฆ GPU๋ฅผ ์ ์ฒด ์๋ ์ฃผํ์ 10xx ์ด์์ผ๋ก ํ์ฅํฉ๋๋ค. ์๋ ์กฐ์ ์ ์ํด ์ค์ ๋ก ๋ก๋๋ ํด์์ ํ์ธ ์ค์ธ ๋น๋ฐ๋ฒํธ์ ์ค์ ๊ธธ์ด(๋ฏธ๋ฆฌ ์๋ ค์ง ๊ฒฝ์ฐ)๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๋ช ๋ น์ค์์ ์ง์ ์ง์ ๋ "๋์ ํํ์"์ ์ํ ์ปดํ์ผ๋ฌ๋ฅผ ์ถ๊ฐํ๊ณ SIMD๋ฅผ ์ฌ์ฉํ์ฌ CPU์์ ๊ณ์ฐ๋๋ "-format=dynamic='sha1(md5($p).$s)'"์ ๊ฐ์ ์๋ก์ด ํ์ด๋ธ๋ฆฌ๋ ํด์ ์ ํ์ ๊ตฌํํฉ๋๋ค. . ์ด๋ฌํ ํํ์์ ๊ตฌ์ฑ ์์๋ก ์์ญ ๊ฐ์ ๋น ๋ฅธ ํด์(MD5์ ๊ฐ์ ์ผ๋ฐ์ ์ธ ํด์๋ถํฐ Whirlpool๊ณผ ๊ฐ์ ์ฝ๊ฐ ์ด๊ตญ์ ์ธ ํด์๊น์ง), ํ์ ๋ฌธ์์ด ์ฐ๊ฒฐ, ์ธ์ฝ๋ฉ ๋ฐ ๋์ฝ๋ฉ, ๋์๋ฌธ์ ๋ณํ, ๋น๋ฐ๋ฒํธ ์ฐธ์กฐ, ์ํธ, ์ฌ์ฉ์ ์ด๋ฆ ๋ฐ ๋ฌธ์์ด ์์๊ฐ ์ง์๋ฉ๋๋ค.
- ์ด์ hashcat ๊ด๋ จ ๊ท์น(wordlist ๊ท์น ๋ช ๋ น)์ ๋ํ ์ง์, OpenCL ์ฅ์น ๋ฒํธ ์ง์ ์ 1์์ ์ ํ, ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์ํด ๋์ผํ ๋น๋ฐ๋ฒํธ ๊ธธ์ด(์ผ๋ฐ์ ์ผ๋ก ๊ธธ์ด 7)์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ํฌํจํ์ฌ hashcat๊ณผ์ ์์น ์๋ ์ฐจ์ด์ ์ ๊ฑฐ.
- hashcat์ PRINCE(์ ์ฒด ๊ธธ์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ฌ๋ฌ ๋จ์ด๋ฅผ ๊ฒฐํฉํ์ฌ "๋ฌธ๊ตฌ" ํ์ฑ), ํ์ ์งํฉ(์ด๋ฌํ ๋ฌธ์๊ฐ ์ค๋๋ผ๋ ์๋ก ๋ค๋ฅธ ๋ฌธ์ ์๊ฐ ๋ถ์กฑํ ๋น๋ฐ๋ฒํธ๋ฅผ ๊ฐ์ ธ์ด)์ ํฌํจํ์ฌ ๊ฒ์ฆ ๊ฐ๋ฅํ ๋น๋ฐ๋ฒํธ๋ฅผ ์์ฑํ๊ธฐ ์ํ ์๋ก์ด ๋ชจ๋(ํฌ๋ํน ๋ชจ๋) ๊ฐ๋ฅํ ๋ง์ ๋น๋ฐ๋ฒํธ ์ธํธ์์) ๋ฐ ํ์ด๋ธ๋ฆฌ๋ ์ธ๋ถ(C์ ์ ์ฌํ ์ธ์ด๋ก ๊ตฌ์ฑ ํ์ผ์ ์ค๋ช ๋ ์ธ๋ถ ๋ชจ๋๋ฅผ ํ์ฉํ์ฌ ๋ค๋ฅธ ๋ชจ๋์์ ์์ ๋ ๊ฐ ๊ธฐ๋ณธ "๋จ์ด"๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง์ ํ์ธ ๊ฐ๋ฅํ ๋น๋ฐ๋ฒํธ๋ฅผ ์์ฑํ ์ ์์). ๋ํ ๋ช ๊ฐ์ง ์๋ก์ด ๋ฏธ๋ฆฌ ์ ์๋ ์ธ๋ถ ๋ชจ๋๊ฐ ์์ต๋๋ค.
- ์ฌ๋ฌ ๋ชจ๋๋ฅผ ๋์์ ์ฌ์ฉํ๊ธฐ ์ํ ์ถ๊ฐ ๊ธฐ๋ฅ(ํ ๋ชจ๋๋ฅผ ๋ค๋ฅธ ๋ชจ๋ ์์ ๊ฒน์ณ ์๊ธฐ)๊ณผ ๊ท์น ์ธํธ(๋จ์ด ๋ชฉ๋ก ๊ท์น ์คํํน)๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ถ๊ฐ ๊ธฐ๋ฅ์ ๋๋ค.
- ๋ง์คํฌ ๋ชจ๋(์ง์ ๋ ๊ธธ์ด ๋ฒ์์์ ๋ง์คํฌ๋ฅผ ์ ์ง์ ์ผ๋ก ๋๋ฆฌ๊ธฐ, OpenCL ์ฅ์น ๋๋ FPGA ๋ณด๋ ์ธก๋ฉด์ ๋ง์คํฌ ์ ์ฉ) ๋ฐ ๋จ์ผ ํฌ๋(๋ง์ ์์ ํด์๋ฅผ ๋ณ๋ ฌ๋ก ๊ณ์ฐํ๋ ์ฅ์น์ ํฉ๋ฆฌ์ ์ธ ๋์) ๊ฐ์ ์ด์ ์๋ ์ด ๋ชจ๋์์ ํ์ธ ๊ฐ๋ฅํ ๋น๋ฐ๋ฒํธ๊ฐ ์ถฉ๋ถํ์ง ์์์ผ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ ์๋น์ ๋ํ ์ ํ๋ ์์์ต๋๋ค.
- ๋ค์ํ ํ์ ์์คํ ์ ์ ๋์ฝ๋ ๋ฐ ๊ธฐํ ์ธ์ฝ๋ฉ ์ง์์ด ๋ง์ด ๊ฐ์ ๋์์ต๋๋ค.
- *2john ํ๋ก๊ทธ๋จ์ ๋ง์ ๊ฐ์ ์ฌํญ(๋ค๋ฅธ ํ์์ ํ์ผ์
john๊ณผ ํจ๊ป ์ฌ์ฉ), ํนํ wpapcap2john(WiFi ํธ๋ํฝ ์ฒ๋ฆฌ). - ๋ง์ ์๋ก์ด ๋ช ๋ น์ค ์ต์ , john.conf์ ์ค์ , ์คํฌ๋ฆฝํธ ์ต์ ๊ตฌ์ฑ ๋ฐ ์ด์ ์์ํ๋ ์๋ก์ด ๊ธฐ๋ฅ์ด ์์ง๋ง ์ฌ๊ธฐ์ ๋ชจ๋ ์ธ๊ธ๋ ๊ฒ์ ์๋๋๋ค.
- AddressSanitizer(์ด์ ) ๋ฐ UndefineBehaviorSanitizer(์ถ๊ฐ)๋ฅผ ์ฌ์ฉํ ๋๋ฒ๊ทธ ๋น๋์ ๋ํ ๋ด์ฅ ์ง์, ๋ด์ฅ ํ์ fuzzer ์ถ๊ฐ(GSoC 2015์ ์ผ๋ถ), ์ง์์ ์ธ ํตํฉ ์ฌ์ฉ(์์ญ ๊ฐ์ ์ด์ ์ฒด์ ๋ฐ ์ปดํ์ผ๋ฌ์ฉ ๋น๋) ๋๋ถ์ ์ฝ๋ ํ์ง ํฅ์ ๋ชจ๋ ํ์์ ๋ํ ์ฌ๋ฐ๋ฅธ ์ง์์ ์ํด ์กฐํฉํ๊ณ ํ ์คํธํฉ๋๋ค).
์ถ์ฒ : linux.org.ru