Manual/OpenSSL

[OpenSSL] ECDH ํ‚ค ์œ ๋„ (Derive Key) ๋ช…๋ น์–ด

JayKim๐Ÿ™‚ 2024. 4. 3. 11:14

OpenSSL ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด ECDH ๊ณต์œ  ํ‚ค๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์ž

ECDH ๊ฐ’์„ ์ƒ์„ฑ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‘ ์Œ์˜ ECDSA ์šฉ ํ‚ค ์Œ์ด ํ•„์š”ํ•˜๋‹ค.
ํ‚ค ์Œ์˜ ์ด๋ฆ„์„ alice ์™€ bob ์ด๋ผ๋Š” ์ด๋ฆ„ ์œผ๋กœ ๋งŒ๋“ค์–ด ๋ณด์ž

๊ทธ๋Ÿผ ECDH ๊ณต์œ  ํ‚ค๋ฅผ ๋งŒ๋“ ๋Š”๊ฒƒ์€ alice ์˜ ๊ฐœ์ธํ‚ค์™€ Bob์˜ ๊ณต์œ ํ‚ค๋ฅผ ์ด์šฉํ•ด์„œ ๋งŒ๋“ค๊ณ 
๋˜ bob์˜ ๊ฐœ์ธํ‚ค์™€ alice ์˜ ๊ณต์œ ํ‚ค๋ฅผ ๊ฐ€์ง€๊ณ  ๋งŒ๋“ค๊ฒŒ ๋˜๋Š”๋ฐ
์ด๋•Œ ์„œ๋กœ ๋งŒ๋“  ๊ณต์œ ํ‚ค ๊ฐ’์ด ๊ฐ™์€ ๊ฐ’์ด ๋‚˜์˜ค๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

Alice ECDSA ์šฉ ํ‚ค ์Œ ๋งŒ๋“ค๊ธฐ

// ECDSA ์šฉ alice์˜ ๊ฐœ์ธํ‚ค ๋งŒ๋“ค๊ธฐ
openssl genpkey -out alice.pem -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve

// alice ์˜ ๊ฐœ์ธํ‚ค์—์„œ ๊ณต๊ฐœํ‚ค ๊ตฌํ•˜๊ธฐ
openssl pkey -pubout -in alice.pem -out alice.pub
  • algorithm : EC ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ
  • ec_paramgen_curve : EC ์ปค๋ธŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜ P-256 ์‚ฌ์šฉ
  • ec_param_enc : ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๋„ค์ž„๋“œ ๋ฐฉ์‹์˜ ์ธ์ฝ”๋”ฉ

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด alice.pem ๊ฐœ์ธํ‚ค ํŒŒ์ผ๊ณผ alice.pub ์˜ ๊ณต๊ฐœํ‚ค๊ฐ€ PEM ํ˜•์‹์œผ๋กœ ๋งŒ๋“ค์–ด ์ง„๋‹ค.

Bob ECDSA ์šฉ ํ‚ค ์Œ ๋งŒ๋“ค๊ธฐ

// ECDSA ์šฉ bob์˜ ๊ฐœ์ธํ‚ค ๋งŒ๋“ค๊ธฐ
openssl genpkey -out bob.pem -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve

// bob ์˜ ๊ฐœ์ธํ‚ค์—์„œ ๊ณต๊ฐœํ‚ค ๊ตฌํ•˜๊ธฐ
openssl pkey -pubout -in bob.pem -out bob.pub

Alice ์™€ ๋™์ผํ•˜๊ฒŒ bop.pem ๊ฐœ์ธํ‚ค ํŒŒ์ผ๊ณผ bob.pub ๊ณต๊ฐœํ‚ค๊ฐ€ PEM ํ˜•์‹์œผ๋กœ ๋งŒ๋“ค์–ด ์ง„๋‹ค.

Alice ๊ณต์œ ํ‚ค ๊ณ„์‚ฐํ•˜๊ธฐ

openssl pkeyutl -derive -out alicebob.key -inkey alice.pem -peerkey bob.pub  

alice ๋Š” bob์˜ ๊ณต๊ฐœํ‚ค์™€ alice ๊ฐœ์ธํ‚ค๋ฅผ ์ด์šฉํ•˜์—ฌ
alicebob.key ํŒŒ์ผ์ด ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ๊ณต์œ  ํ‚ค ๊ฐ’์ด ์ƒ์„ฑ ๋œ๋‹ค.

Bob ๊ณต์œ ํ‚ค ๊ณ„์‚ฐํ•˜๊ธฐ

openssl pkeyutl -derive -out bobalice.key -inkey bob.pem -peerkey alice.pub

bob ์€ alice ์˜ ๊ณต๊ฐœํ‚ค์™€ bob ๊ฐœ์ธํ‚ค๋ฅผ ์ด์šฉํ•˜์—ฌ
bobalice.key ํŒŒ์ผ์— ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ณต์œ  ํ‚ค ๊ฐ’์ด ์ƒ์„ฑ ๋œ๋‹ค.

๊ณต์œ ํ‚ค ๋น„๊ต

cmp alicebob.key bobalice.key

๋‘ ํŒŒ์ผ์„ ๋น„๊ต์‹œ ๋™์ผํ•œ ๋‚ด์šฉ์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ด๋ฏ€๋กœ ์•„๋ฌด ํ‘œ์‹œ๊ฐ€ ์—†๋‹ค.
๋งŒ์•ฝ ๋‹ค๋ฅธ ์ ์ด ์žˆ๋‹ค๋ฉด ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ํ‘œ์‹œ ํ•˜๊ฒŒ ๋œ๋‹ค.

๋งˆ๋ฌด๋ฆฌ

ECDH ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ECDSA์šฉ ํ‚ค ์Œ์„ ์ด์šฉํ•˜์—ฌ ๊ณต์œ ํ‚ค๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
๋ณดํ†ต์€ ์ด๋ ‡๊ฒŒ ECDH ๊ณต์œ  ๊ฐ’์„ ๊ตฌํ•ด์„œ KDF ๋ฅผ ์ด์šฉํ•ด ์„œ๋กœ์˜ ๋น„๋ฐ€ํ‚ค๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉ๋œ๋‹ค.