https๋ฅผ ์ง์ํ๋ ์น์๋ฒ๋ฅผ ์ค์ ํ๊ฑฐ๋ ์๋ช ์ด๋ ์ํธํ ๊ด๋ จ๋ ๊ฐ๋ฐ์ ํ๊ฒ๋๋ฉด ํ๋ฒ์ฉ ์ธ์ฆ์ ๊ด๋ จ๋ ํ์ผ์ ๋ค๋ฃฐ ์ผ์ด ์๊ธฐ๊ฒ ๋๋ค. ์ด๋ ํญ์ ํ๋ก๊ทธ๋จ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ์ง์ํ๋ ํ์์ด ๋ฌ๋ผ์ ์ธ์ฆ์ ํ์์ ๋ณํํด์ ํ๋๋ฐ ํ์ฌ ๊ฐ๊ณ ์๋ ํ์ผ์ ํ์์ด ๋ฌด์์ธ์ง๋ฅผ ์์์ผ ์ ๋๋ก ํ์ฉ์ด ๊ฐ๋ฅํ๋ค. ์ธ์ฆ์ ํ์ผ์ ๊ฒฝ์ฐ ์ธ์ฝ๋ฉ ๋ฐฉ์๊ณผ ํ์ฅ์๊ฐ ์ผ์นํ๋ ๊ฒฝ์ฐ๋ ์๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ๋ ์๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ด ๋น๊ตํด์ ์ ๋ฆฌํด ๋ณด์๋ค.
์ธ์ฝ๋ฉ (ํ์ฅ์๋ก ์ฐ์ด๊ธฐ๋ ํ๋ค.)
.der:
.pem: X.509 v3 ํ์ผ์ ํ ํํ
-----BEGIN XXX-----, -----END XXX----- ๋ก ๋ฌถ์ฌ์๋ text file์ ๋ณด๋ฉด ์ด ํ์์ผ๋ก ์ธ์ฝ๋ฉ ๋์ด์๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค. (๋ด๊ณ ์๋ ๋ด์ฉ์ด ๋ฌด์์ธ์ง์ ๋ฐ๋ผ XXX ์์น์ CERTIFICATE, RSA PRIVATE KEY ๋ฑ์ ํค์๋๊ฐ ๋ค์ด์๋ค)ํ์ฅ์
.crt, .cer ์ธ์ฆ์๋ฅผ ๋ํ๋ด๋ ํ์ฅ์์ธ cer๊ณผ crt๋ ๊ฑฐ์ ๋์ผํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค. (cer์ Microsoft ์ ํ๊ตฐ์์ ๋ง์ด ์ฌ์ฉ๋๊ณ , crt๋ unix, linux ๊ณ์ด์์ ๋ง์ด ์ฌ์ฉ๋๋ค.)
.key: ๊ฐ์ธ ๋๋ ๊ณต๊ฐ PKCS#8 ํค๋ฅผ ์๋ฏธ.p12: PKCS#12 ํ์์ผ๋ก ํ๋ ๋๋ ๊ทธ์ด์์ certificate(public)๊ณผ ๊ทธ์ ๋์ํ๋ private key๋ฅผ ํฌํจํ๊ณ ์๋ key store ํ์ผ์ด๋ฉฐ ํจ์ค์๋๋ก ์ํธํ ๋์ด์๋ค. ์ด์ด์ ๋ด์ฉ์ ํ์ธํ๋ ค๋ฉด ํจ์ค์๋๊ฐ ํ์ํ๋ค..pfx: PKCS#12๋ Microsoft์ PFXํ์ผ์ ๊ณ์นํ์ฌ ๋ง๋ค์ด์ง ํฌ๋ฉง์ด๋ผ pfx์ p12๋ฅผ ๊ตฌ๋ถ์์ด ๋์ผํ๊ฒ ์ฌ์ฉํ๊ธฐ๋ ํ๋ค.์ฐธ๊ณ : PEM ๋ฐฉ์์ผ๋ก ์ธ์ฝ๋ฉ๋ pkcs8 ํ์(format) ๋น๋ฐํค(private key)๋ฅผ ์ํธํ๋์ง ์์ DER ์ธ์ฝ๋ฉ์ผ๋ก ๋ณ๊ฒฝํ๋ ๋ช ๋ น์ด
openssl pkcs8 -topk8 -inform PEM -outform DER -in private.key -out private.der -nocrypt
์ํธํ ๋ณตํธํ ์ฝ๋๋ฅผ ์์ฑํด๋ณธ ์ฌ๋์ด๋ผ๋ฉด ๋ถ๋ช ํ Padding๊ณผ ๊ด๋ จ๋ ์ฝ๋๋ฅผ ํ๋ฒ์ด๋ผ๋ ๋ณด์์ ๊ฒ์ด๋ค. ์ด๋ฆ์ด ์ ํ ์ง๊ด์ ์ด์ง ์๋ค๋ณด๋ ์ฒ์ ์ ํ์ ๋๋ ๋๋ฐ์ฒด ๋ญ ์๋ฏธํ๋์ง ์๊ธฐ๊ฐ ์ด๋ ค์ ์ง๋ง ํ๋์ฉ ์ฐจ๊ทผ์ฐจ๊ทผ ์์๋ณด๋๋ก ํ์.
๋์นญํค ์๊ณ ๋ฆฌ์ฆ(ex: AES)์ ์ฌ์ฉ ํ ๋ ์ํธํ ํ๋ ค๋ ๋ฐ์ดํฐ์ ๊ธธ์ด๊ฐ ๊ธด ๊ฒฝ์ฐ ECB (Electronic Codebook), CBC(Cipher Block Chain) ๋ฑ์ block cipher ๋ฐฉ์์๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ํธํ ํ๊ฒ๋๋ค. ๋ธ๋ก๋จ์๋ก ์๋ผ์ ์ํธํ/๋ณตํธํ๊ฐ ์งํ๋๊ธฐ ๋๋ฌธ์ ์ ํด์ง ๋ง์ง๋ง ๋ธ๋ก์ ์ฌ์ด์ฆ์ ์ค์ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ๋ง์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์๊ธธ ์ ์๋ค. ์ด๋ ๋ง์ง๋ง ๋ธ๋ก์ ๋น ๊ณต๊ฐ์ ์ฑ์๋ฃ๋(padding) ๋ฐฉ์์ ๋งํ๋ค.
์๋ฅผ ๋ค์ด ๋ฐ์ดํฐ๊ฐ 17๋ฐ์ดํธ์ธ๋ฐ block size๊ฐ 8๋ฐ์ดํธ๋ผ๋ฉด ์ด 3๊ฐ์ ๋ธ๋ก์ด ํ์ํ๊ณ ๋ง์ง๋ง ๋ธ๋ก์ 7๋ฐ์ดํธ๊ฐ ๋จ๊ธฐ๋๋ฌธ์ ์ด๋ถ๋ถ์ ํน์ ๊ฐ์ผ๋ก ์ฑ์๋ฃ์ด์ ์ํธํ๋ฅผ ์งํํ๋ค.
PKCS5Padding๊ณผ PKCS7Padding ๋๋ค ๋น ๊ณต๊ฐ์ ๊ฐ์ ์ฑ์๋ฃ๋ ๊ท์น์ ๋ค์๊ณผ ๊ฐ๋ค.
01์ ์ฑ์๋ฃ๊ณ (01์ 1๋ฐ์ดํธ๋ฅผ 16์ง์ ํ๊ธฐํ ๊ฐ)02 02๋ฅผ ์ฑ์๋ฃ์03 03 03๋ฅผ ์ฑ์๋ฃ์๋์ PKCS5Padding๊ณผ PKCS7Padding์ ๊ฒฝ์ฐ block size์ ์ ์ฝ ์กฐ๊ฑด์ด ๋ค๋ฅด๋ค.
PKCS1Padding๋ ์์๋งํ PKCS5Padding/PKCS7Padding๊ณผ๋ ๋ฐฉ์๋ ๋ค๋ฅด๊ณ ์ฌ์ฉ์ฒ๋ ๋ค๋ฅด๋ค. PKCS1Padding๋ ๋ณดํต RSA ์๊ณ ๋ฆฌ์ฆ๊ณผ ๊ฐ์ด ์ฌ์ฉ๋๋ฉฐ PKCS#1 v1.5 ์ ๋ช ์๋ padding ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
Java์์ ์ ๊ณตํ๋ Crypto ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฒฝ์ฐ Cipher.getInstance("algorithm/mode/padding") ํ์์ ์คํธ๋ง์ผ๋ก ์ํธํ ์๊ณ ๋ฆฌ์ฆ, ๋ชจ๋, ํจ๋ฉ๋ฐฉ์์ ๊ฒฐ์ ํ ์ ์๋ค. ์ฐธ๊ณ ๋ก ๋ฐ์ดํฐ์ ๊ธธ์ด๊ฐ ๊ธธ์ด์ (๋ธ๋ญ์ ๊ฐฏ์๊ฐ ํ๋ ์ด์)์ธ ๊ฒฝ์ฐ ECB๋ ๋ณด์์ฑ์ด ์ทจ์ฝํ๋ CBC๋ฅผ ๊ผญ ์ฌ์ฉํด์ผ ํ๋ค. (๊ฐ ๋ธ๋ญ์ ๋ฐ์ดํฐ๊ฐ ์์ด์ง ์์ ์ํ๋ก ๋์ผํ ์ํธํ๋ฅผ ์ ์ฉํ๋ฉด ๋ฐ์ดํฐ์ ํจํด์ด ๋ํ๋๊ฒ๋จ)
์์)
์ธ์ฆ์์ ์ ๋ณด๋ฅผ ๋ณด๊ฑฐ๋(View), ๋ค๋ฅธ ํฌ๋ฉง์ผ๋ก ๋ณํ(Transform), ํฉ์นจ(Combination) ๋ฑ์ ์กฐ์์ ํ๊ธฐ์ํด์ openSSL ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
(openssl ๋ช ๋ น์ด์ ๊ฒฝ์ฐ inform ์ต์ ์ด ๋ฐ๋ก ์ง์ ๋์ง ์์๊ฒฝ์ฐ PEMํ์์ผ๋ก ์ฒ๋ฆฌ๋ฅผ ์๋ํ๋ค.)
View
Transform
Combination
์ธ๋ถ ์ธ์ฆ๊ธฐ๊ด์์ ์ธ์ฆ์๋ฅผ ์ ๋ฌ๋ฐ์ง ์๊ณ , ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ RSA ํค ํ์ด๊ฐ ํ์ํ๋ค๋ฉด ์๋ ์ค๋ช ๋ ์ ์ฐจ๋ฅผ ํตํด์ ๊ฐ๋จํ๊ฒ ํค ํ์ด๋ฅผ ๋ง๋ค์ด ๋ผ ์ ์๋ค.
openssl genrsa -des3 -out private.pem 2048
private.pemํ์ผ์ ์ด์ด๋ณด๋ฉด -----BEGIN RSA PRIVATE KEY----- ๋ก ํ์๋๋ ๊ฒ์ ํ์ธ ํ ์ ์๋ค.
RSA private key๋ก๋ถํฐ public key๋ฅผ ๋ง๋ค์ด ๋ผ ์ ์๋ค. ์ด๋ป๊ฒ ๊ทธ๊ฒ ๊ฐ๋ฅํ์ง ๋ณด๊ธฐ ์ํด์ ์๋ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด๋ณด์.
openssl rsa -text -in private.pem
์ ๋ช ๋ น์ด๋ก ์ถ๋ ฅ๋ ๊ฒฐ๊ณผ์ public key๋ฅผ ์ ์ํ๋๋ฐ ํ์ํ modulus์ publicExponent์ ๋ณด๊ฐ ํฌํจ๋์ด์๋๊ฒ์ ์ ์์๋ค. ์ค์ ๋ก private key๋ก๋ถํฐ public key๋ฅผ ์ถ์ถํ๊ธฐ ์ํด์ ๋ค์ ๋จ๊ณ๋ฅผ ์ดํด๋ณด์.
openssl rsa -in private.pem -outform PEM -pubout -out public.pem
public.pem ํ์ผ์ ์ด์ด์ -----BEGIN PUBLIC KEY----- ๋ก ํ์๋๋๊ฒ์ ํ์ธ ํ๋ฉด ๋๋ค.