Rutoken์—์„œ GOST-2012 ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Linux์—์„œ ๋กœ์ปฌ ์ธ์ฆ์„ ์œ„ํ•ด PAM ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

Rutoken์—์„œ GOST-2012 ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Linux์—์„œ ๋กœ์ปฌ ์ธ์ฆ์„ ์œ„ํ•ด PAM ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

๋‹จ์ˆœํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์•ˆ์ „ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋ณต์žกํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ๊ธฐ์–ตํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ‚ค๋ณด๋“œ๋‚˜ ๋ชจ๋‹ˆํ„ฐ ์•„๋ž˜์— ์Šคํ‹ฐ์ปค ๋ฉ”๋ชจ๋ฅผ ๋ถ™์ด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. "์žŠ์–ด๋ฒ„๋ฆฌ๋Š”" ์‚ฌ์šฉ์ž์˜ ๋งˆ์Œ์— ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋‚จ์•„ ์žˆ๊ณ  ๋ณดํ˜ธ ์‹ ๋ขฐ์„ฑ์ด ์ƒ์‹ค๋˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด 2๋‹จ๊ณ„ ์ธ์ฆ(XNUMXFA)์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์žฅ์น˜๋ฅผ ์†Œ์œ ํ•˜๊ณ  PIN์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉด PIN ์ž์ฒด๊ฐ€ ๋” ๊ฐ„๋‹จํ•˜๊ณ  ๊ธฐ์–ตํ•˜๊ธฐ ์‰ฌ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PIN ๊ธธ์ด ๋˜๋Š” ๋ฌด์ž‘์œ„์„ฑ์˜ ๋‹จ์ ์€ ๋ฌผ๋ฆฌ์  ์†Œ์œ  ์š”๊ตฌ ์‚ฌํ•ญ ๋ฐ PIN ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž…์— ๋Œ€ํ•œ ์ œํ•œ์œผ๋กœ ์ƒ์‡„๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์ •๋ถ€ ๊ธฐ๊ด€์—์„œ๋Š” ๋ชจ๋“  ๊ฒƒ์ด GOST์— ๋”ฐ๋ผ ์ž‘๋™ํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. Linux์— ๋กœ๊ทธ์ธํ•˜๊ธฐ ์œ„ํ•œ 2FA ์˜ต์…˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ€๋ฆฌ์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

PAM ๋ชจ๋“ˆ

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

librtpam

Aktiv์‚ฌ๊ฐ€ ๊ฐœ๋ฐœํ•œ ๋ชจ๋“ˆ์—๋Š” ๊ตญ๋‚ด ์•”ํ˜ธํ™”์˜ ์ตœ์‹  ํ‘œ์ค€์— ๋”ฐ๋ผ ๋น„๋Œ€์นญ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์Šค๋งˆํŠธ ์นด๋“œ๋‚˜ USB ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ XNUMX๋‹จ๊ณ„ ์ธ์ฆ์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

์ž‘๋™ ์›๋ฆฌ๋ฅผ ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • ํ† ํฐ์€ ์‚ฌ์šฉ์ž์˜ ์ธ์ฆ์„œ์™€ ๊ฐœ์ธ ํ‚ค๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ์ธ์ฆ์„œ๋Š” ์‚ฌ์šฉ์ž์˜ ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

์ธ์ฆ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

  1. Rutoken์€ ์‚ฌ์šฉ์ž์˜ ๊ฐœ์ธ ์ธ์ฆ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
  2. ํ† ํฐ PIN์ด ์š”์ฒญ๋ฉ๋‹ˆ๋‹ค.
  3. ๋ฌด์ž‘์œ„ ๋ฐ์ดํ„ฐ๋Š” Rutoken ์นฉ์˜ ๊ฐœ์ธ ํ‚ค์— ์ง์ ‘ ์„œ๋ช…๋ฉ๋‹ˆ๋‹ค.
  4. ๊ฒฐ๊ณผ ์„œ๋ช…์€ ์‚ฌ์šฉ์ž ์ธ์ฆ์„œ์˜ ๊ณต๊ฐœ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค.
  5. ๋ชจ๋“ˆ์€ ์„œ๋ช… ํ™•์ธ ๊ฒฐ๊ณผ๋ฅผ ํ˜ธ์ถœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

GOST R 34.10-2012 ํ‚ค(๊ธธ์ด 256 ๋˜๋Š” 512๋น„ํŠธ) ๋˜๋Š” ์˜ค๋ž˜๋œ GOST R 34.10-2001์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ‚ค ๋ณด์•ˆ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ‚ค๋Š” Rutoken์—์„œ ์ง์ ‘ ์ƒ์„ฑ๋˜๋ฉฐ ์•”ํ˜ธํ™” ์ž‘์—… ์ค‘์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋– ๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Rutoken์—์„œ GOST-2012 ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Linux์—์„œ ๋กœ์ปฌ ์ธ์ฆ์„ ์œ„ํ•ด PAM ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

Rutoken EDS 2.0์€ NDV 4์— ๋”ฐ๋ผ FSB ๋ฐ FSTEC์˜ ์ธ์ฆ์„ ๋ฐ›์•˜์œผ๋ฏ€๋กœ ๊ธฐ๋ฐ€ ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ •๋ณด ์‹œ์Šคํ…œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์šฉ

๊ฑฐ์˜ ๋ชจ๋“  ์ตœ์‹  Linux๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด xUbuntu 18.10์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

1) ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

sudo apt-get install libccid pcscd opensc
ํ™”๋ฉด ๋ณดํ˜ธ๊ธฐ๋กœ ๋ฐ”ํƒ• ํ™”๋ฉด ์ž ๊ธˆ์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ํŒจํ‚ค์ง€๋ฅผ ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค libpam-pkcs11.

2) GOST๋ฅผ ์ง€์›ํ•˜๋Š” PAM ๋ชจ๋“ˆ ์ถ”๊ฐ€

๋‹ค์Œ์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋กœ๋“œ https://download.rutoken.ru/Rutoken/PAM/
PAM ํด๋” librtpam.so.1.0.0์˜ ๋‚ด์šฉ์„ ์‹œ์Šคํ…œ ํด๋”์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
/usr/lib/ ๋˜๋Š” /usr/lib/x86_64-linux-gnu/๋˜๋Š” /usr/lib64

3) librtpkcs11ecp.so๋กœ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋งํฌ์—์„œ DEB ๋˜๋Š” RPM ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์„ค์น˜ํ•˜์„ธ์š”. https://www.rutoken.ru/support/download/pkcs/

4) Rutoken EDS 2.0์ด ์‹œ์Šคํ…œ์—์„œ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

ํ„ฐ๋ฏธ๋„์—์„œ ์šฐ๋ฆฌ๋Š” ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
์ค„์„ ๋ณด๋ฉด Rutoken ECP <no label> - ๋‹ค ๊ดœ์ฐฎ๋‹ค๋Š” ๋œป์ด์—์š”.

5) ์ธ์ฆ์„œ ์ฝ๊ธฐ

์žฅ์น˜์— ์ธ์ฆ์„œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
ํ•ด๋‹น ์ค„ ๋’ค์— ์žˆ๋Š” ๊ฒฝ์šฐ:
Using slot 0 with a present token (0x0)

  • ์ •๋ณด๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค ํ‚ค์™€ ์ธ์ฆ์„œ์— ๋Œ€ํ•ด์„œ๋Š” ์ธ์ฆ์„œ๋ฅผ ์ฝ๊ณ  ๋””์Šคํฌ์— ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ {id} ๋Œ€์‹  ์ด์ „ ๋ช…๋ น์˜ ์ถœ๋ ฅ์—์„œ โ€‹โ€‹๋ณธ ์ธ์ฆ์„œ ID๋ฅผ ๋Œ€์ฒดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    $ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
    cert.crt ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์—ˆ๋‹ค๋ฉด 6)๋‹จ๊ณ„๋กœ ์ง„ํ–‰ํ•˜์„ธ์š”.
  • ์•„๋ฌด๊ฒƒ๋„ ์—†๋‹ค์ด๋ฉด ์žฅ์น˜๊ฐ€ ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋ฌธ์˜ํ•˜๊ฑฐ๋‚˜ ๋‹ค์Œ ๋‹จ๊ณ„์— ๋”ฐ๋ผ ํ‚ค์™€ ์ธ์ฆ์„œ๋ฅผ ์ง์ ‘ ๋งŒ๋“œ์„ธ์š”.

5.1) ํ…Œ์ŠคํŠธ ์ธ์ฆ์„œ ์ƒ์„ฑ

์ฃผ๋ชฉ! ์„ค๋ช…๋œ ํ‚ค ๋ฐ ์ธ์ฆ์„œ ์ƒ์„ฑ ๋ฐฉ๋ฒ•์€ ํ…Œ์ŠคํŠธ์— ์ ํ•ฉํ•˜๋ฉฐ ์ „ํˆฌ ๋ชจ๋“œ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ์กฐ์ง์˜ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์ฆ ๊ธฐ๊ด€์ด๋‚˜ ๊ณต์ธ๋œ ์ธ์ฆ ๊ธฐ๊ด€์—์„œ ๋ฐœ๊ธ‰ํ•œ ํ‚ค์™€ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
PAM ๋ชจ๋“ˆ์€ ๋กœ์ปฌ ์ปดํ“จํ„ฐ๋ฅผ ๋ณดํ˜ธํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ ์†Œ๊ทœ๋ชจ ์กฐ์ง์—์„œ ์ž‘๋™ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ˆ˜๊ฐ€ ์ ๊ธฐ ๋•Œ๋ฌธ์— ๊ด€๋ฆฌ์ž๋Š” ์ธ์ฆ์„œ ํ•ด์ง€ ์—ฌ๋ถ€๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๊ณ„์ •์„ ์ˆ˜๋™์œผ๋กœ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ธ์ฆ์„œ ์œ ํšจ ๊ธฐ๊ฐ„๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PAM ๋ชจ๋“ˆ์€ CRL์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆ์„œ๋ฅผ ํ™•์ธํ•˜๊ณ  ์‹ ๋ขฐ ์ฒด์ธ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•„์ง ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

์‰ฌ์šด ๋ฐฉ๋ฒ•(๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด)

ํ…Œ์ŠคํŠธ ์ธ์ฆ์„œ๋ฅผ ์–ป์œผ๋ ค๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ์›น ์„œ๋น„์Šค "Rutoken ๋“ฑ๋ก ์„ผํ„ฐ". ์ด ๊ณผ์ •์€ 5๋ถ„ ์ด์ƒ ๊ฑธ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ดด์งœ์˜ ๋ฐฉ์‹(์ฝ˜์†” ๋ฐ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด)

OpenSC ๋ฒ„์ „ ํ™•์ธ
$ opensc-tool --version
๋ฒ„์ „์ด 0.20 ๋ฏธ๋งŒ์ธ ๊ฒฝ์šฐ ์—…๋ฐ์ดํŠธ ๋˜๋Š” ๋นŒ๋“œ GOST-11๋ฅผ ์ง€์›ํ•˜๋Š” pkcs2012-tool ๋ถ„๊ธฐ GitHub(์ด ๊ธฐ์‚ฌ๋ฅผ ๊ฒŒ์‹œํ•  ๋‹น์‹œ ๋ฆด๋ฆฌ์Šค 0.20์€ ์•„์ง ๋ฆด๋ฆฌ์Šค๋˜์ง€ ์•Š์Œ) ๋˜๋Š” ๋‚˜์ค‘์— ์ฃผ์š” OpenSC ํ”„๋กœ์ ํŠธ์˜ ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์—์„œ 8cf1e6f ์ปค๋ฐ‹

๋‹ค์Œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‚ค ์Œ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
--key-type: GOSTR3410-2012-512:ะ (ะ“ะžะกะข-2012 512 ะฑะธั‚ c ะฟะฐั€ะฐะผัะตั‚ะพะผ ะ), GOSTR3410-2012-256:A (ะ“ะžะกะข-2012 256 ะฑะธั‚ ั ะฟะฐั€ะฐะผัะตั‚ะพะผ A)

--id: ASCII ํ…Œ์ด๋ธ”์˜ ๋‘ ์ž๋ฆฌ 3132์ง„์ˆ˜ ๋ฌธ์ž ์ˆซ์ž๋กœ ๋œ ๊ฐœ์ฒด ์‹๋ณ„์ž(CKA_ID)์ž…๋‹ˆ๋‹ค. ์ธ์‡„ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ž์—๋Š” ASCII ์ฝ”๋“œ๋งŒ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ์™œ๋ƒํ•˜๋ฉด... id๋Š” OpenSSL์— ๋ฌธ์ž์—ด๋กœ ์ „๋‹ฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ASCII ์ฝ”๋“œ "12"๋Š” ๋ฌธ์ž์—ด "XNUMX"์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ํŽธ์˜๋ฅผ ์œ„ํ•ด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด์„ ASCII ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์˜จ๋ผ์ธ ์„œ๋น„์Šค.

$ ./pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-512:A -l --id 3132

๋‹ค์Œ์œผ๋กœ ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์—์„œ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” CA๋ฅผ ํ†ตํ•˜๋Š” ๊ฒƒ์ด๊ณ (ํ…Œ์ŠคํŠธ CA๋ฅผ ์‚ฌ์šฉํ•จ) ๋‘ ๋ฒˆ์งธ๋Š” ์ž์ฒด ์„œ๋ช…ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ๋จผ์ € ์„ค๋ช…์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ˆ˜ rtengine ๋ชจ๋“ˆ์„ ํ†ตํ•ด Rutoken๊ณผ ์ž‘๋™ํ•˜๋„๋ก OpenSSL ๋ฒ„์ „ 1.1 ์ด์ƒ์„ ์„ค์น˜ํ•˜๊ณ  ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. OpenSSL ์„ค์น˜ ๋ฐ ๊ตฌ์„ฑ.
์˜ˆ: '--id 3132' OpenSSL์—์„œ๋Š” "๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.pkcs11:id=12".

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋งŽ์€ ํ…Œ์ŠคํŠธ CA ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—, ์—ฌ๊ธฐ์— ะธ ์—ฌ๊ธฐ์—, ์ด๋ฅผ ์œ„ํ•ด ์ธ์ฆ์„œ ์š”์ฒญ์„ ์ƒ์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์˜ต์…˜์€ ๊ฒŒ์œผ๋ฆ„์— ๊ตด๋ณตํ•˜์—ฌ ์ž์ฒด ์„œ๋ช…๋œ
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr

์žฅ์น˜์— ์ธ์ฆ์„œ ์—…๋กœ๋“œ
$ openssl req -utf8 -x509 -keyform engine -key "pkcs11:id=12" -engine rtengine -out cert.cer

6) ์‹œ์Šคํ…œ์— ์ธ์ฆ์„œ๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

์ธ์ฆ์„œ๊ฐ€ base64 ํŒŒ์ผ์ฒ˜๋Ÿผ ๋ณด์ด๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

Rutoken์—์„œ GOST-2012 ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Linux์—์„œ ๋กœ์ปฌ ์ธ์ฆ์„ ์œ„ํ•ด PAM ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

์ธ์ฆ์„œ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ:

Rutoken์—์„œ GOST-2012 ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Linux์—์„œ ๋กœ์ปฌ ์ธ์ฆ์„ ์œ„ํ•ด PAM ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ธ์ฆ์„œ๋ฅผ DER ํ˜•์‹์—์„œ PEM ํ˜•์‹(base64)์œผ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
์ด์ œ ๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ธ์ง€ ๋‹ค์‹œ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์ฆ์„œ ๋ชฉ๋ก์— ์ธ์ฆ์„œ ์ถ”๊ฐ€
$ mkdir ~/.eid
$ chmod 0755 ~/.eid
$ cat cert.pem >> ~/.eid/authorized_certificates
$ chmod 0644 ~/.eid/authorized_certificates

๋งˆ์ง€๋ง‰ ์ค„์€ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์ฆ์„œ ๋ชฉ๋ก์ด ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์— ์˜ํ•ด ์‹ค์ˆ˜๋กœ ๋˜๋Š” ์˜๋„์ ์œผ๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋„๋ก ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์—ฌ๊ธฐ์— ์ธ์ฆ์„œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ท€ํ•˜๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

7) ์ธ์ฆ ์„ค์ •

PAM ๋ชจ๋“ˆ ์„ค์ •์€ ์™„์ „ํžˆ ํ‘œ์ค€์ด๋ฉฐ ๋‹ค๋ฅธ ๋ชจ๋“ˆ ์„ค์ •๊ณผ ๋˜‘๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์— ์ƒ์„ฑ /usr/share/pam-configs/rutoken-gost-pam ๋ชจ๋“ˆ์˜ ์ „์ฒด ์ด๋ฆ„, ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€, ๋ชจ๋“ˆ์˜ ์šฐ์„  ์ˆœ์œ„ ๋ฐ ์ธ์ฆ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ธ์ฆ ๋งค๊ฐœ๋ณ€์ˆ˜์—๋Š” ์ž‘์—… ์„ฑ๊ณต์„ ์œ„ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ „์ฒด ํŒŒ์ผ ๋‚ด์šฉ /usr/share/pam-configs/rutoken-gost-pam:
Name: Rutoken PAM GOST
Default: yes
Priority: 800
Auth-Type: Primary
Auth: sufficient /usr/lib/librtpam.so.1.0.0 /usr/lib/librtpkcs11ecp.so

Rutoken์—์„œ GOST-2012 ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Linux์—์„œ ๋กœ์ปฌ ์ธ์ฆ์„ ์œ„ํ•ด PAM ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

ํŒŒ์ผ์„ ์ €์žฅํ•œ ํ›„ ์‹คํ–‰
$ sudo pam-auth-update
๋‚˜ํƒ€๋‚˜๋Š” ์ฐฝ์—์„œ ์˜†์— ๋ณ„ํ‘œ๋ฅผ ํ‘œ์‹œํ•˜์‹ญ์‹œ์˜ค. ๋ฃจํ† ์ผ„ PAM GOST ๋ฐ€์–ด ๋„ฃ๋‹ค OK

Rutoken์—์„œ GOST-2012 ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Linux์—์„œ ๋กœ์ปฌ ์ธ์ฆ์„ ์œ„ํ•ด PAM ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

8) ์„ค์ •์„ ํ™•์ธํ•˜์„ธ์š”

๋ชจ๋“  ๊ฒƒ์ด ๊ตฌ์„ฑ๋˜์—ˆ์Œ์„ ์ดํ•ดํ•˜์ง€๋งŒ ๋™์‹œ์— ์‹œ์Šคํ…œ์— ๋กœ๊ทธ์ธํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์žƒ์ง€ ์•Š์œผ๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค.
$ sudo login
์‚ฌ์šฉ์ž ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”. ์‹œ์Šคํ…œ์— ์žฅ์น˜ PIN ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ชจ๋“  ๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์„ฑ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Rutoken์—์„œ GOST-2012 ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Linux์—์„œ ๋กœ์ปฌ ์ธ์ฆ์„ ์œ„ํ•ด PAM ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

9) ํ† ํฐ ์ถ”์ถœ ์‹œ ์ฐจ๋‹จ๋˜๋„๋ก ์ปดํ“จํ„ฐ ๊ตฌ์„ฑ

ํŒจํ‚ค์ง€์— ํฌํ•จ๋จ libpam-pkcs11 ์œ ํ‹ธ๋ฆฌํ‹ฐ ํฌํ•จ pkcs11_eventmgr, ์ด๋ฅผ ํ†ตํ•ด PKCS#11 ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์„ค์ •์šฉ pkcs11_eventmgr ๊ตฌ์„ฑ ํŒŒ์ผ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. /etc/pam_pkcs11/pkcs11_eventmgr.conf
Linux ๋ฐฐํฌํŒ์— ๋”ฐ๋ผ ์Šค๋งˆํŠธ ์นด๋“œ๋‚˜ ํ† ํฐ์ด ์ œ๊ฑฐ๋  ๋•Œ ๊ณ„์ •์„ ์ž ๊ทธ๋Š” ๋ช…๋ น์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์„ผํ‹ฐ๋ฏธํ„ฐ. event card_remove.
๊ตฌ์„ฑ ํŒŒ์ผ์˜ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

pkcs11_eventmgr
{
    # ะ—ะฐะฟัƒัะบ ะฒ ะฑัะบะณั€ะฐัƒะฝะดะต
    daemon = true;
     
    # ะะฐัั‚ั€ะพะนะบะฐ ัะพะพะฑั‰ะตะฝะธะน ะพั‚ะปะฐะดะบะธ
    debug = false;
 
    # ะ’ั€ะตะผั ะพะฟั€ะพัะฐ ะฒ ัะตะบัƒะฝะดะฐั…
    polling_time = 1;
 
    # ะฃัั‚ะฐะฝะพะฒะบะฐ ั‚ะฐะนะผ-ะฐัƒั‚ะฐ ะฝะฐ ัƒะดะฐะปะตะฝะธะต ะบะฐั€ั‚ั‹
    # ะŸะพ-ัƒะผะพะปั‡ะฐะฝะธัŽ 0
    expire_time = 0;
 
    # ะ’ั‹ะฑะพั€ pkcs11 ะฑะธะฑะปะธะพั‚ะตะบะธ ะดะปั ั€ะฐะฑะพั‚ั‹ ั ะ ัƒั‚ะพะบะตะฝ
    pkcs11_module = usr/lib/librtpkcs11ecp.so;
 
    # ะ”ะตะนัั‚ะฒะธั ั ะบะฐั€ั‚ะพะน
    # ะšะฐั€ั‚ะฐ ะฒัั‚ะฐะฒะปะตะฝะฐ:
    event card_insert {
        # ะžัั‚ะฐะฒะปัะตะผ ะทะฝะฐั‡ะตะฝะธั ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ (ะฝะธั‡ะตะณะพ ะฝะต ะฟั€ะพะธัั…ะพะดะธั‚)
        on_error = ignore ;
 
        action = "/bin/false";
    }
 
    # ะšะฐั€ั‚ะฐ ะธะทะฒะปะตั‡ะตะฝะฐ
    event card_remove {
        on_error = ignore;
         
        # ะ’ั‹ะทั‹ะฒะฐะตะผ ั„ัƒะฝะบั†ะธัŽ ะฑะปะพะบะธั€ะพะฒะบะธ ัะบั€ะฐะฝะฐ
        
        # ะ”ะปั GNOME 
        action = "dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock";
        
        # ะ”ะปั XFCE
        # action = "xflock4";
        
        # ะ”ะปั Astra Linux (FLY)
        # action = "fly-wmfunc FLYWM_LOCK";
    }
 
    # ะšะฐั€ั‚ะฐ ะดะพะปะณะพะต ะฒั€ะตะผั ะธะทะฒะปะตั‡ะตะฝะฐ
    event expire_time {
        # ะžัั‚ะฐะฒะปัะตะผ ะทะฝะฐั‡ะตะฝะธั ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ (ะฝะธั‡ะตะณะพ ะฝะต ะฟั€ะพะธัั…ะพะดะธั‚)
        on_error = ignore;
 
        action = "/bin/false";
    }
}

๊ทธ ํ›„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค pkcs11_eventmgr ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด .bash_profile ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜์„ธ์š”.
$ nano /home/<ะธะผั_ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั>/.bash_profile
ํŒŒ์ผ ๋์— pkcs11_eventmgr ์ค„์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์žฌ๋ถ€ํŒ…ํ•ฉ๋‹ˆ๋‹ค.

์šด์˜ ์ฒด์ œ ์„ค์ •์„ ์œ„ํ•ด ์„ค๋ช…๋œ ๋‹จ๊ณ„๋Š” ๊ตญ๋‚ด ๋ฐฐํฌํŒ์„ ํฌํ•จํ•œ ๋ชจ๋“  ์ตœ์‹  Linux ๋ฐฐํฌํŒ์˜ ์ง€์นจ์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Rutoken์—์„œ GOST-2012 ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Linux์—์„œ ๋กœ์ปฌ ์ธ์ฆ์„ ์œ„ํ•ด PAM ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

๊ฒฐ๋ก 

Linux PC๋Š” ๋Ÿฌ์‹œ์•„ ์ •๋ถ€ ๊ธฐ๊ด€์—์„œ ์ ์  ์ธ๊ธฐ๋ฅผ ์–ป๊ณ  ์žˆ์œผ๋ฉฐ ์ด OS์—์„œ ์•ˆ์ •์ ์ธ XNUMX๋‹จ๊ณ„ ์ธ์ฆ์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ์‰ฌ์šด ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ๋ฅผ ํ†ตํ•ด "๋น„๋ฐ€๋ฒˆํ˜ธ ๋ฌธ์ œ"๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  PC์— ๋งŽ์€ ์‹œ๊ฐ„์„ ๋“ค์ด์ง€ ์•Š๊ณ ๋„ PC์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๊บผ์ด ๋„์™€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

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