OpenSSH๋Š” ๋ฒ”์šฉ XNUMX๋‹จ๊ณ„ ์ธ์ฆ ์ง€์›์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

OpenSSH ์ฝ”๋“œ๋ฒ ์ด์Šค๋กœ ์ถ”๊ฐ€ ํ”„๋กœํ† ์ฝœ์„ ์ง€์›ํ•˜๋Š” ์žฅ์น˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ค‘ ์ธ์ฆ์— ๋Œ€ํ•œ ์‹คํ—˜์  ์ง€์› U2F, ์–ผ๋ผ์ด์–ธ์Šค์—์„œ ๊ฐœ๋ฐœ ํ”ผ๋„. U2F๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ €๋ ดํ•œ ํ•˜๋“œ์›จ์–ด ํ† ํฐ์„ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ๋ฌผ๋ฆฌ์  ์กด์žฌ๋ฅผ ํ™•์ธํ•˜๊ณ  USB, Bluetooth ๋˜๋Š” NFC๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์žฅ์น˜๋Š” ์›น์‚ฌ์ดํŠธ์—์„œ ์ด์ค‘ ์ธ์ฆ ์ˆ˜๋‹จ์œผ๋กœ ํ™๋ณด๋˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด๋ฏธ ์ฃผ์š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์›๋˜๋ฉฐ Yubico, Feitian, Thetis ๋ฐ Kensington์„ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ ์ œ์กฐ์—…์ฒด์—์„œ ์ƒ์‚ฐ๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž์˜ ์กด์žฌ๋ฅผ ํ™•์ธํ•˜๋Š” ์žฅ์น˜์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•ด OpenSSH์— ์ƒˆ๋กœ์šด ์œ ํ˜•์˜ ํ‚ค๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.[์ด๋ฉ”์ผ ๋ณดํ˜ธ]โ€(โ€œecdsa-skโ€)๋Š” NIST P-256 ํƒ€์› ๊ณก์„  ๋ฐ SHA-256 ํ•ด์‹œ์™€ ํ•จ๊ป˜ ECDSA(Elliptic Curve Digital Signature Algorithm) ๋””์ง€ํ„ธ ์„œ๋ช… ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ† ํฐ๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ ˆ์ฐจ๋Š” PKCS#11 ์ง€์›์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๋กœ๋“œ๋˜๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ƒ๋‹จ์˜ ๋ž˜ํผ์ธ ์ค‘๊ฐ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. libfido2, USB๋ฅผ ํ†ตํ•œ ํ† ํฐ ํ†ต์‹  ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค(FIDO U2F/CTAP 1 ๋ฐ FIDO 2.0/CTAP 2 ํ”„๋กœํ† ์ฝœ์ด ์ง€์›๋จ). OpenSSH ๊ฐœ๋ฐœ์ž๊ฐ€ ์ค€๋น„ํ•œ ์ค‘๊ฐ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ libsk-libfido2 ํฌํ•จ ๋œ ํ•ต์‹ฌ libfido2๋ฟ๋งŒ ์•„๋‹ˆ๋ผ HID ๋“œ๋ผ์ด๋ฒ„ OpenBSD์šฉ.

U2F๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ์ƒˆ๋กœ์šด ์กฐ๊ฐ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €์žฅ์†Œ OpenSSH ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ HEAD ๋ถ„๊ธฐ libfido2, ์—ฌ๊ธฐ์—๋Š” OpenSSH์— ํ•„์š”ํ•œ ๋ ˆ์ด์–ด๊ฐ€ ์ด๋ฏธ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
Libfido2๋Š” OpenBSD, Linux, macOS ๋ฐ Windows๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

ํ‚ค๋ฅผ ์ธ์ฆํ•˜๊ณ  ์ƒ์„ฑํ•˜๋ ค๋ฉด libsk-libfido2.so์— ๋Œ€ํ•œ ๊ฒฝ๋กœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” SSH_SK_PROVIDER ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜(SSH_SK_PROVIDER=/path/to/libsk-libfido2.so ๋‚ด๋ณด๋‚ด๊ธฐ) SecurityKeyProvider๋ฅผ ํ†ตํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ค์ • ํ›„ "ssh-keygen-t ecdsa-sk"๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜, ํ‚ค๊ฐ€ ์ด๋ฏธ ์ƒ์„ฑ ๋ฐ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ "ssh"๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ssh-keygen์„ ์‹คํ–‰ํ•˜๋ฉด ์ƒ์„ฑ๋œ ํ‚ค ์Œ์ด โ€œ~/.ssh/id_ecdsa_skโ€์— ์ €์žฅ๋˜๋ฉฐ ๋‹ค๋ฅธ ํ‚ค์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณต๊ฐœ ํ‚ค(id_ecdsa_sk.pub)๋Š” Authorized_keys ํŒŒ์ผ์— ์„œ๋ฒ„์— ๋ณต์‚ฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์ธก์—์„œ๋Š” ๋””์ง€ํ„ธ ์„œ๋ช…๋งŒ ํ™•์ธํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ๋Š” ํ† ํฐ๊ณผ์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. (์„œ๋ฒ„์— libsk-libfido2๋ฅผ ์„ค์น˜ํ•  ํ•„์š”๋Š” ์—†์ง€๋งŒ ์„œ๋ฒ„๊ฐ€ "ecdsa-sk" ํ‚ค ์œ ํ˜•์„ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.) . ์ƒ์„ฑ๋œ ๊ฐœ์ธ ํ‚ค(id_ecdsa_sk)๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ํ‚ค ํ•ธ๋“ค์ด๋ฉฐ, U2F ํ† ํฐ ์ธก์— ์ €์žฅ๋œ ๋น„๋ฐ€ ์‹œํ€€์Šค์™€ ๊ฒฐํ•ฉํ•ด์•ผ๋งŒ ์‹ค์ œ ํ‚ค๋ฅผ ํ˜•์„ฑํ•ฉ๋‹ˆ๋‹ค.

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

U2F ํ‚ค๋Š” "ssh-add ~/.ssh/id_ecdsa_sk"๋ฅผ ํ†ตํ•ด ssh-agent์— ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ์ง€๋งŒ ssh-agent๋Š” "ecdsa-sk" ํ‚ค์— ๋Œ€ํ•œ ์ง€์›์œผ๋กœ ๊ตฌ์ถ•๋˜์–ด์•ผ ํ•˜๋ฉฐ libsk-libfido2 ๊ณ„์ธต์ด ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ์—์ด์ „ํŠธ๋Š” ํ† ํฐ์ด ์—ฐ๊ฒฐ๋œ ์‹œ์Šคํ…œ์—์„œ ์‹คํ–‰๋˜๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
OpenSSH ecdsa ํ‚ค์˜ ํ˜•์‹์ด ์ถ”๊ฐ€ ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ECDSA ๋””์ง€ํ„ธ ์„œ๋ช…์˜ U2F ํ˜•์‹๊ณผ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ํ‚ค ์œ ํ˜• "ecdsa-sk"๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€