Manual/CryptokiMan

[CryptokiMan] DH (Diffie Hellman) ๋กœ ํ‚ค ์ƒ์„ฑ ํ•˜๊ธฐ

JayKim๐Ÿ™‚ 2023. 10. 24. 12:29

[์ด ๊ธฐ๋Šฅ์€ ๋ผ์ด์„ ์Šค ๋ฒ„์ „ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค]
๋ผ์ด์„ ์Šค๊ฐ€ ํ•„์š”ํ•œ ๋ถ„์€ [ํ”„๋กœ๊ทธ๋žจ ํ‚ค ๋ฐœ๊ธ‰] ํŽ˜์ด์ง€์—์„œ 30์ผ ๋ผ์ด์„ ์Šค ๋ฐœ๊ธ‰ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค

CryptokiMan ์„ ์ด์šฉํ•˜์—ฌ PKCS#11 ๊ธฐ๋Šฅ์˜ DH ํ‚ค์™€ DeriveKey ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜์—ฌ
๋Œ€์นญํ‚ค๋ฅผ ์ถ”์ถœ ํ•ด๋ณด์ž.
์—ฌ๊ธฐ์„œ ์ƒ์„ฑ๋œ ๋Œ€์นญํ‚ค๋Š” ์‹ค์ œ๋กœ ๊ฐ’์„ ์–ป๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ HSM ์žฅ์น˜๋‚ด์—์„œ ํ‚ค๊ฐ€ ์ƒ์„ฑ์ด ๋˜๊ณ  ์ƒ์„ฑ๋œ ํ•ธ๋“ค ๊ฐ’์„ ์–ป๊ฒŒ ๋œ๋‹ค.

์ผ๋‹จ DH ๊ธฐ๋Šฅ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ ์ˆœ์„œ๋กœ ์‹คํ–‰์„ ํ•œ๋‹ค.

  1. DH ํ‚ค ์ƒ์„ฑ ์ด ๋•Œ ํ‚ค๋Š” CKA_DERIVE ๊ฐ’์ด TRUE ๋กœ ๋˜์–ด์•ผ ํ•œ๋‹ค.
    ์ด๋•Œ DH ์šฉ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„ฃ์–ด ์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ ํ•ด๋‹น ๊ฐ’์„ ๋„ฃ์–ด ์ฃผ๊ฑฐ๋‚˜ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.
  2. DH ๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” PKCS#11 ๊ธฐ๋Šฅ ์ค‘์— C_DeriveKey ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋‹ค.
    ์ฐธ๊ณ ๋กœ ์ด DH ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” C_Initialize -> C_OpenSession -> C_Login ์ด ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์—์„œ ์ง„ํ–‰ ํ•ด์•ผ ํ•œ๋‹ค.

์ด ๋ฌธ์„œ ์ž‘์„ฑ์„ ์œ„ํ•˜์—ฌ ์‚ฌ์šฉํ•œ PKCS#11 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” SoftHSM2 ๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

DH ํ‚ค ์Œ ์ƒ์„ฑ

CryptokiMan -> Objects -> Generate KeyPair ๋ฅผ ์‹คํ–‰ ํ•˜์ž

๊ทธ๋Ÿผ ์•„๋ž˜ ๊ทธ๋ฆผ ์ฒ˜๋Ÿผ General ์ •๋ณด ์ฐฝ์ด ๋‚˜์˜จ๋‹ค.

  • Mechanism ์„ CKM_DH_PKCS_KEY_PAIR_GEN ์„ ์„ ํƒ
  • ํŒŒ๋ผ๋ฏธํ„ฐ ํ‚ค ๊ธธ์ด : 1024 ๋ฅผ ์„ ํƒ ( ์ด ๊ฐ’์€ 512, 2048 ์„ ํƒ ํ•ด๋„ ๋œ๋‹ค.)
  • Gen DH Param ํด๋ฆญ ํ•˜๋ฉด ์•„๋ž˜ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์ธ g ์™€ p ๊ฐ€ ํ‘œ์‹  ๋œ๋‹ค. ๋ฌผ๋ก  ์ด ๊ฐ’์€ ๊ธฐ์กด์˜ ๊ฐ’์„ ๋„ฃ์–ด ์ฃผ์–ด๋„ ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Private Key ํƒญ์„ ์„ ํƒ ํ•˜์ž

  • Label ์€ ๊ธฐ์–ตํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์ ์œผ๋ฉด ๋œ๋‹ค.
  • ์—ฌ๊ธฐ์„œ Derive ๊ฐ’์„ ์ฒดํฌ ํ•˜๊ณ  true ๋ฅผ ํ•„ํžˆ ์„ ํƒ ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  OK ๋ฅผ ๋ˆ„๋ฅด๋ฉด DH ํ‚ค ์Œ์ด ์ƒ์„ฑ ๋œ๋‹ค ํ‚ค ์Œ์€ PrivateKey ์™€ Public Key ์—์„œ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

DH ๊ณต์œ  ํ‚ค๋ฅผ ์ƒ์„ฑ

๊ณต์œ ํ‚ค๋ฅผ ์ƒ์„ฑ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Tools -> Derive Key ๋ฅผ ์„ ํƒ ํ•˜์ž

  • ์•ž์—์„œ ๋งŒ๋“  ํ‚ค์ธ DH Test ๋ฅผ ๋ผ๋ฒจ์—์„œ ์„ ํƒ ํ•˜์ž
  • Method ๋Š” CKM_DH_PKCS_DERIVE ๋ฅผ ์„ ํƒํ•ด์„œ DH ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ง€์ •ํ•œ๋‹ค.
  • Parameter ์—์„œ๋Š” ์ƒ๋Œ€๋ฐฉ ๊ณต๊ฐœ ํ‚ค ๊ฐ’์„ ๋„ฃ์–ด ์ฃผ์ž

๊ทธ๋ฆฌ๊ณ  Key ํƒญ์„ ์„ ํƒ ํ•œ๋‹ค.

ํ‚ค ํƒญ์—์„œ ์ƒ์„ฑ ๋  ํ‚ค๋Š” CKO_SECRET_KEY ๋ฅผ ์„ ํƒ
๊ทธ๋ฆฌ๊ณ  CKK_GENERIC_SECRET ํ‚ค๋ฅผ ๋””ํดํŠธ๋กœ ์„ ํƒ ํ•œ๋‹ค.( ์ฐธ๊ณ ๋กœ CKK_AES ๋ฅผ ์‚ฌ์šฉ ํ•ด๋„ ๋œ๋‹ค )
๊ทธ๋ฆฌ๊ณ  ์ƒ์„ฑ ํ•  ํ‚ค ๊ธธ์ด๋ฅผ ์ž…๋ ฅ ํ•˜์ž ์—ฌ๊ธฐ์„œ๋Š” 16 ๋ฐ”์ดํŠธ๋ฅผ ์ž…๋ ฅ ํ•˜์˜€๋‹ค.
๊ทธ๋ฆฌ๊ณ  ํ™•์ธ์„ ์œ„ํ•ด ๋ผ๋ฒจ์„ ๊ธฐ๋ก ํ•˜์ž ์˜ˆ์ œ๋Š” "Derived Key" ๋ฅผ ์ž…๋ ฅ ํ•˜๊ณ  "OK"๋ฅผ ๋ˆ„๋ฅธ๋‹ค.

๊ทธ๋Ÿผ ์•„๋ž˜ ๊ทธ๋ฆผ ์ฒ˜๋Ÿผ DH ๋ฅผ ์ด์šฉํ•œ Secret Key ๋ฅผ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งˆ๋ฌด๋ฆฌ

PKCS#11 API ๋ฅผ ์ด์šฉํ•˜์—ฌ DH ํ‚ค ์Œ ๋ฐ ๋Œ€์นญํ‚ค ์ถ”์ถœ์„ ํ•ด๋ณด์•˜๋‹ค.
DH ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋Œ€์นญํ‚ค๋ฅผ ์ถ”์ถœ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ ๋œ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ DH ๋Š” ํ‚ค ๊ฐ’์„ ์ถ”์ถœ ํ•˜๊ฒŒ ๋˜์ง€๋งŒ PKCS#11์—์„œ๋Š” ํ‚ค๊ฐ€ ์ƒ์„ฑ์ด ๋˜๊ณ  ๊ทธ์— ๋Œ€ํ•œ ํ•ธ๋“ค์„ ์–ป๋Š”๊ฒƒ์ด๋‹ค.
์ฆ‰ ํ‚ค๋Š” ์žฅ์น˜์— ์ €์žฅ์ด ๋˜์–ด์„œ ์‹ค์ œ ํ‚ค ๊ฐ’์„ ์•Œ ์ˆ˜๋Š” ์—†๊ณ  ๊ทธ์— ๋Œ€ํ•œ ํ•ธ๋“ค์„ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

๋ฐ˜์‘ํ˜•