19๋ ๊ฐ์ ๊ฐ๋ฐ๊ณผ 3.0.0๋ฒ์ ํ ์คํธ ๋ฆด๋ฆฌ์ค๋ฅผ ๊ฑฐ์ณ SSL/TLS ํ๋กํ ์ฝ๊ณผ ๋ค์ํ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ด ๊ตฌํ๋ OpenSSL 1.1.1 ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ถ์๋์์ต๋๋ค. ์ ๋ถ๊ธฐ์๋ API ๋ฐ ABI ์์ค์์ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ๊นจ๋จ๋ฆฌ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ํฌํจ๋์ด ์์ง๋ง OpenSSL 1.1.1์์ ๋ง์ด๊ทธ๋ ์ด์ ํ๊ธฐ ์ํด ๋ค์ ๋น๋ํด์ผ ํ๋ ๋๋ถ๋ถ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ์๋์๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. OpenSSL 2023์ ์ด์ ๋ถ๊ธฐ๋ XNUMX๋ XNUMX์๊น์ง ์ง์๋ฉ๋๋ค.
๋ฒ์ ๋ฒํธ์ ์ค์ํ ๋ณ๊ฒฝ์ ์ ํต์ ์ธ "Major.Minor.Patch" ๋ฒํธ ์ง์ ์ผ๋ก์ ์ ํ ๋๋ฌธ์ ๋๋ค. ์ด์ ๋ฒ์ ๋ฒํธ์ ์ฒซ ๋ฒ์งธ ์ซ์(Major)๋ API/ABI ์์ค์์ ํธํ์ฑ์ด ๊นจ์ง๋ ๊ฒฝ์ฐ์๋ง ๋ณ๊ฒฝ๋๊ณ , ๋ ๋ฒ์งธ(Minor)๋ API/ABI ๋ณ๊ฒฝ ์์ด ๊ธฐ๋ฅ์ด ํฅ์๋๋ฉด ๋ณ๊ฒฝ๋ฉ๋๋ค. ์์ ์ ๋ฐ์ดํธ๋ ์ธ ๋ฒ์งธ ์ซ์(ํจ์น)๊ฐ ๋ณ๊ฒฝ๋์ด ์ ๊ณต๋ฉ๋๋ค. 3.0.0 ๋ฐ๋ก ๋ค์ ๋ฒํธ 1.1.1์ ํ์ฌ ๊ฐ๋ฐ ์ค์ธ OpenSSL์ฉ FIPS ๋ชจ๋(2.x ๋ฒํธ ์ง์ ์ด ์ฌ์ฉ๋จ)๊ณผ์ ์ค๋ณต์ ํผํ๊ธฐ ์ํด ์ ํ๋์์ต๋๋ค.
ํ๋ก์ ํธ์ ๋ ๋ฒ์งธ ์ค์ํ ๋ณํ๋ ์ด์ค ๋ผ์ด์ผ์ค(OpenSSL ๋ฐ SSLeay)์์ Apache 2.0 ๋ผ์ด์ผ์ค๋ก์ ์ ํ์ด์์ต๋๋ค. ์ด์ ๋ ์ OpenSSL ๋ผ์ด์ผ์ค๋ ๋ ๊ฑฐ์ Apache 1.0 ๋ผ์ด์ผ์ค์ ํ ์คํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ผ๋ฉฐ OpenSSL ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋ ๋ง์ผํ ์๋ฃ์ OpenSSL์ ๋ช ์์ ์ผ๋ก ์ธ๊ธํด์ผ ํ๊ณ OpenSSL์ด ์ ํ์ ์ผ๋ถ๋ก ์ ๊ณต๋๋ ๊ฒฝ์ฐ ํน๋ณ ๊ณต์ง๋ฅผ ์๊ตฌํ์ต๋๋ค. ์ด๋ฌํ ์๊ตฌ ์ฌํญ์ผ๋ก ์ธํด ๊ธฐ์กด ๋ผ์ด์ผ์ค๋ GPL๊ณผ ํธํ๋์ง ์์ GPL ๋ผ์ด์ผ์ค ํ๋ก์ ํธ์์ OpenSSL์ ์ฌ์ฉํ๊ธฐ๊ฐ ์ด๋ ค์์ก์ต๋๋ค. ์ด๋ฌํ ๋นํธํ์ฑ์ ํด๊ฒฐํ๊ธฐ ์ํด GPL ํ๋ก์ ํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด OpenSSL ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐ๊ฒฐ๋๋๋ก ๋ช ์์ ์ผ๋ก ํ์ฉํ๊ณ GPL์ ์๊ตฌ ์ฌํญ์ด ์ผ์นํ์ง ์๋๋ค๊ณ ์ธ๊ธํ๋ ์กฐํญ์ผ๋ก GPL์ ๋ณธ๋ฌธ์ ๋ณด์ํ๋ ํน์ ๋ผ์ด์ผ์ค ๊ณ์ฝ์ ์ฌ์ฉํด์ผ ํ์ต๋๋ค. OpenSSL๊ณผ์ ์ฐ๊ฒฐ์ ์ ์ฉ๋ฉ๋๋ค.
OpenSSL 1.1.1 ๋ถ๊ธฐ์ ๋น๊ตํ์ฌ OpenSSL 3.0.0์๋ 7500๋ช ์ ๊ฐ๋ฐ์๊ฐ ๊ธฐ์ฌํ 350๊ฐ ์ด์์ ๋ณ๊ฒฝ ์ฌํญ์ด ์ถ๊ฐ๋์์ต๋๋ค. OpenSSL 3.0.0์ ์ฃผ์ ํ์ :
- FIPS 140-2 ๋ณด์ ํ์ค์ ์ค์ํ๋ ์ํธํ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ์ ํฌํจํ์ฌ ์๋ก์ด FIPS ๋ชจ๋์ด ์ ์๋์์ต๋๋ค(๋ชจ๋์ ๋ํ ์ธ์ฆ ํ๋ก์ธ์ค๋ ์ด๋ฒ ๋ฌ์ ์์๋ ์์ ์ด๋ฉฐ FIPS 140-2 ์ธ์ฆ์ ๋ด๋ ์ ์์๋ฉ๋๋ค). ์ ๋ชจ๋์ ์ฌ์ฉํ๊ธฐ๊ฐ ํจ์ฌ ์ฌ์ฐ๋ฉฐ ์ด๋ฅผ ๋ง์ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฐ๊ฒฐํ๋ ๊ฒ์ ๊ตฌ์ฑ ํ์ผ์ ๋ณ๊ฒฝํ๋ ๊ฒ๋ณด๋ค ์ด๋ ต์ง ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก FIPS ๋ชจ๋์ ๋นํ์ฑํ๋์ด ์์ผ๋ฉฐ ํ์ฑํํ๋ ค๋ฉด ํ์ฑํ-fips ์ต์ ์ด ํ์ํฉ๋๋ค.
- libcrypto๋ ์์ง ๊ฐ๋ ์ ๋์ฒดํ๋ ํ๋ฌ๊ทธํ ๊ณต๊ธ์ ๊ฐ๋ ์ ๊ตฌํํฉ๋๋ค(ENGINE API๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์). ๊ณต๊ธ์์ ๋์์ ๋ฐ์ ์ํธํ, ์ํธ ํด๋ , ํค ์์ฑ, MAC ๊ณ์ฐ, ๋์งํธ ์๋ช ์์ฑ ๋ฐ ํ์ธ๊ณผ ๊ฐ์ ์์ ์ ์ํ ์์ฒด ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์๋ก์ด ๊ฒ์ ์ฐ๊ฒฐํ๊ณ ์ด๋ฏธ ์ง์๋๋ ์๊ณ ๋ฆฌ์ฆ์ ๋์ฒด ๊ตฌํ์ ์์ฑํ๋ ๊ฒ์ด ๋ชจ๋ ๊ฐ๋ฅํฉ๋๋ค(๊ธฐ๋ณธ์ ์ผ๋ก OpenSSL์ ๋ด์ฅ๋ ๊ณต๊ธ์๊ฐ ์ด์ ๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉ๋ฉ๋๋ค).
- CA ์๋ฒ์์ ์ธ์ฆ์๋ฅผ ์์ฒญํ๊ณ , ์ธ์ฆ์๋ฅผ ์ ๋ฐ์ดํธํ๊ณ , ์ธ์ฆ์๋ฅผ ์ทจ์ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ธ์ฆ์ ๊ด๋ฆฌ ํ๋กํ ์ฝ(RFC 4210)์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. CMP ์์ ์ CRMF ํ์(RFC 4211)์ ์ง์ํ๊ณ HTTP/HTTPS(RFC 6712)๋ฅผ ํตํด ์์ฒญ์ ๋ณด๋ด๋ ์๋ก์ด openssl-cmp ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค.
- HTTP ๋ฐ HTTPS ํ๋กํ ์ฝ์ ์ํ ๋ณธ๊ฒฉ์ ์ธ ํด๋ผ์ด์ธํธ๊ฐ ๊ตฌํ๋์ด GET ๋ฐ POST ๋ฉ์๋, ์์ฒญ ๋ฆฌ๋๋ ์ , ํ๋ก์๋ฅผ ํตํ ์์ , ASN.1 ์ธ์ฝ๋ฉ ๋ฐ ์๊ฐ ์ด๊ณผ ์ฒ๋ฆฌ๋ฅผ ์ง์ํฉ๋๋ค.
- ๋ชจ์ ์ฝ์ ์ ์๋ก์ด ๊ตฌํ์ ๋ ์ฝ๊ฒ ์ถ๊ฐํ ์ ์๋๋ก ์๋ก์ด EVP_MAC(๋ฉ์์ง ์ธ์ฆ ์ฝ๋ API)๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- ํค ์์ฑ์ ์ํ ์๋ก์ด ์ํํธ์จ์ด ์ธํฐํ์ด์ค์ธ EVP_KDF(Key Derivation Function API)๊ฐ ์ ์๋์์ต๋๋ค. ์ด๋ KDF ๋ฐ PRF์ ์๋ก์ด ๊ตฌํ ์ถ๊ฐ๋ฅผ ๋จ์ํํฉ๋๋ค. scrypt, TLS1 PRF ๋ฐ HKDF ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ์ ์์๋ ์ด์ EVP_PKEY API๋ EVP_KDF ๋ฐ EVP_MAC API ์์ ๊ตฌํ๋ ๋ ์ด์ด ํํ๋ก ์ฌ์ค๊ณ๋์์ต๋๋ค.
- TLS ํ๋กํ ์ฝ์ ๊ตฌํ์ Linux ์ปค๋์ ๋ด์ฅ๋ TLS ํด๋ผ์ด์ธํธ ๋ฐ ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์๋๋ฅผ ๋์ด๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. Linux ์ปค๋์์ ์ ๊ณตํ๋ TLS ๊ตฌํ์ ํ์ฑํํ๋ ค๋ฉด "SSL_OP_ENABLE_KTLS" ์ต์ ๋๋ "enable-ktls" ์ค์ ์ ํ์ฑํํด์ผ ํฉ๋๋ค.
- ์๋ก์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ํค ์์ฑ ์๊ณ ๋ฆฌ์ฆ(KDF)์ "SINGLE STEP" ๋ฐ "SSH"์ ๋๋ค.
- ์๋ฎฌ๋ ์ด์ ๋ ์ฝ์ ์๊ณ ๋ฆฌ์ฆ(MAC)์ "GMAC"์ "KMAC"์ ๋๋ค.
- RSA ํค ์บก์ํ ์๊ณ ๋ฆฌ์ฆ(KEM) "RSASVE".
- ์ํธํ ์๊ณ ๋ฆฌ์ฆ "AES-SIV"(RFC-8452).
- ํค ์ํธํ(ํค ๋ํ)๋ฅผ ์ํด AES ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ์ญ์ํธ๋ฅผ ์ง์ํ๋ EVP API ํธ์ถ์ด ์ถ๊ฐ๋์์ต๋๋ค: "AES-128-WRAP-INV", "AES-192-WRAP-INV", "AES-256-WRAP- INV', 'AES-128-WRAP-PAD-INV', 'AES-192-WRAP-PAD-INV' ๋ฐ 'AES-256-WRAP-PAD-INV'.
- EVP API์ CTS(์ํธ๋ฌธ ์ฐจ์ฉ) ์๊ณ ๋ฆฌ์ฆ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค: โAES-128-CBC-CTSโ, โAES-192-CBC-CTSโ, โAES-256-CBC-CTSโ, โCAMELLIA-128-CBC -CTSโ ", "CAMELLIA-192-CBC-CTS" ๋ฐ "CAMELLIA-256-CBC-CTS".
- CAdES-BES ๋์งํธ ์๋ช (RFC 5126)์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- AES_GCM์ AuthEnvelopedData(RFC 5083) ๋งค๊ฐ๋ณ์๋ฅผ ๊ตฌํํ์ฌ AES GCM ๋ชจ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์ฆ ๋ฐ ์ํธํ๋ ๋ฉ์์ง์ ์ํธํ ๋ฐ ์ํธ ํด๋ ์ ํ์ฑํํฉ๋๋ค.
- PKCS7_get_octet_string ๋ฐ PKCS7_type_is_other ํจ์๊ฐ ๊ณต๊ฐ API์ ์ถ๊ฐ๋์์ต๋๋ค.
- PKCS#12 API๋ PKCS12_create() ํจ์์ ์ฌ์ฉ๋๋ ๊ธฐ๋ณธ ์๊ณ ๋ฆฌ์ฆ์ PBKDF2 ๋ฐ AES๋ก ๋์ฒดํ๊ณ SHA-256 ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ MAC๋ฅผ ๊ณ์ฐํฉ๋๋ค. ๊ณผ๊ฑฐ ๋์์ ๋ณต์ํ๊ธฐ ์ํด "-legacy" ์ต์ ์ด ์ ๊ณต๋ฉ๋๋ค. PKCS12_*_ex, PKCS5_*_ex ๋ฐ PKCS8_*_ex์ ๋ํ ๋ค์์ ์๋ก์ด ํ์ฅ ํธ์ถ(์: PKCS12_add_key_ex().PKCS12_create_ex() ๋ฐ PKCS12_decrypt_skey_ex())์ ์ถ๊ฐํ์ต๋๋ค.
- Windows ํ๋ซํผ์ ๊ฒฝ์ฐ SRWLock ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ ์ค๋ ๋ ๋๊ธฐํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ํ์ฑํ ์ถ์ ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ํ์ฑํ๋๋ ์๋ก์ด ์ถ์ API๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- EVP_PKEY_public_check() ๋ฐ EVP_PKEY_param_check() ํจ์์์ ์ง์๋๋ ํค ๋ฒ์๊ฐ RSA, DSA, ED25519, X25519, ED448 ๋ฐ X448๋ก ํ์ฅ๋์์ต๋๋ค.
- RAND_DRBG ํ์ ์์คํ ์ด ์ ๊ฑฐ๋๊ณ EVP_RAND API๋ก ๋์ฒด๋์์ต๋๋ค. FIPS_mode() ๋ฐ FIPS_mode_set() ํจ์๊ฐ ์ ๊ฑฐ๋์์ต๋๋ค.
- API์ ์๋น ๋ถ๋ถ์ด ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ํ๋ก์ ํธ ์ฝ๋์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ํธ์ถ์ ์ฌ์ฉํ๋ฉด ์ปดํ์ผ ์ค์ ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํฉ๋๋ค. ํน์ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ(์: AES_set_encrypt_key ๋ฐ AES_encrypt)๊ณผ ์ฐ๊ฒฐ๋ ํ์ ์์ค API๋ฅผ ํฌํจํ๋ ๊ฒ์ ๊ณต์์ ์ผ๋ก ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ผ๋ก ์ ์ธ๋์์ต๋๋ค. OpenSSL 3.0.0์ ๊ณต์ ์ง์์ ์ด์ ๊ฐ๋ณ ์๊ณ ๋ฆฌ์ฆ ์ ํ์์ ์ถ์ํ๋ ์์ ์์ค EVP API์ ๋ํด์๋ง ์ ๊ณต๋ฉ๋๋ค(์ด API์๋ EVP_EncryptInit_ex, EVP_EncryptUpdate ๋ฐ EVP_EncryptFinal ํจ์ ๋ฑ์ด ํฌํจ๋จ). ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ API๋ ๋ค์ ์ฃผ์ ๋ฆด๋ฆฌ์ค ์ค ํ๋์์ ์ ๊ฑฐ๋ ์์ ์ ๋๋ค. EVP API๋ฅผ ํตํด ์ฌ์ฉํ ์ ์๋ MD2 ๋ฐ DES์ ๊ฐ์ ๋ ๊ฑฐ์ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋นํ์ฑํ๋ ๋ณ๋์ "๋ ๊ฑฐ์" ๋ชจ๋๋ก ์ด๋๋์์ต๋๋ค.
- ๋ฌธ์์ ํ ์คํธ ์ค์ํธ๊ฐ ํฌ๊ฒ ํ์ฅ๋์์ต๋๋ค. ๋ธ๋์น 1.1.1์ ๋นํด ๋ฌธ์์ ์์ 94% ์ฆ๊ฐํ๊ณ ํ ์คํธ ์ค์ํธ ์ฝ๋์ ํฌ๊ธฐ๋ 54% ์ฆ๊ฐํ์ต๋๋ค.
์ถ์ฒ : opennet.ru