2026. 8. 12. 13:12 오라클
26ai 양자내성 암호화 (PQC: Post-Quantum Cryptography) 테스트
26ai 양자내성 암호화 테스트
26ai 부터 미국 국립표준기술연구소(NIST)가 승인한 양자 내성 암화화 알고리즘인 ML-KEM(Module-Lattice-Based Key-Encapsulation Mechanism) 을 구현하여 전송구간과 저장공간 모두에서 양자컴퓨팅 공격가능성에 대비한 보안을 제공한다고 한다.
양자내성 암호화가 뚫릴 확률은 지구상에 있는 모든 모래알중에 1개를 찾아내는 수준이라고 한다.
[서버 쪽 설정]
1. 우선 TCPS 통신이 가능해야 한다. (일반 Native 네트워트 암호화로는 안된다)
TCPS 를 사용하고 있지 않다면 간단하게 아래와 같이 서버 쪽에 설정한다.
- autologin 설정 및 인증서 export (autologin은 이미 설정되어 있으면 생략가능)
orapki wallet create -wallet /u01/app/oracle/admin/TEST/wallet/ -auto_login -pwd "welcome1"
orapki wallet add -wallet /u01/app/oracle/admin/TEST/wallet -dn 'CN=root_test_CA,C=US' -keysize 2048 -self_signed -validity 3650 -pwd "welcome1"
orapki wallet export -wallet /u01/app/oracle/admin/TEST/wallet/ -dn 'CN=root_test_CA,C=US' -cert /u01/app/oracle/admin/TEST/wallet/root_test_CA.cert
chmod 660 /u01/app/oracle/admin/TEST/wallet/cwallet.sso
chmod 660 /u01/app/oracle/admin/TEST/wallet/ewallet.p12
(oracle)
orapki wallet display -wallet /u01/app/oracle/admin/TEST/wallet/
keytool -printcert -file /u01/app/oracle/admin/TEST/wallet/root_test_CA.cert
- 다 했으면 listener.ora 화일을 설정한다. (난 4521 포트로 설정함)
--------------------------------------------------------
WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/u01/app/oracle/admin/TEST/wallet)))
SSL_CLIENT_AUTHENTICATION = FALSE
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCPS)(HOST = 192.168.56.90)(PORT = 4521))
)
)
)
--------------------------------------------------------
저장한 후
sqlnet.ora 에 아래와 같이 지정한다. 사실 이게 전부이긴 하다. 위에는 TCPS 설정하는 거였기 때문에..
--------------------------------------------------------
WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/u01/app/oracle/admin/TEST/wallet)))
SSL_CLIENT_AUTHENTICATION = FALSE
TLS_KEY_EXCHANGE_GROUPS = ml-kem
--------------------------------------------------------
로컬 리스너 지정한 후, ALTER SYSTEM SET local_listener='(ADDRESS=(PROTOCOL=TCPS)(HOST=192.168.56.90)(PORT=4521))' SCOPE=BOTH;
lsnrctl start 하고 상태확인
lsnrctl status
[CDB]oracle@26ai:/home/oracle# lsnrctl status
LSNRCTL for Linux: Version 23.26.2.0.0 - Production on 12-AUG-2026 11:29:39
Copyright (c) 1991, 2026, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 23.26.2.0.0 - Production
Start Date 12-AUG-2026 10:40:14
Uptime 0 days 0 hr. 49 min. 24 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/26.0.0.0/dbhome_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/26ai/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=192.168.56.90)(PORT=4521)))
Services Summary...
Service "5574b7966d2bb9fbe0635a38a8c0d85a" has 1 instance(s).
Instance "CDB", status READY, has 1 handler(s) for this service...
Service "CDB" has 1 instance(s).
Instance "CDB", status READY, has 1 handler(s) for this service...
Service "CDBXDB" has 1 instance(s).
Instance "CDB", status READY, has 1 handler(s) for this service...
Service "pdb1" has 1 instance(s).
Instance "CDB", status READY, has 1 handler(s) for this service...
The command completed successfully
- 정상적으로 서비스가 등록되었다면 이제 서버쪽에서 해 줄건 없다.
[클라이언트 설정]
서버에 접속하는 클라이언트는 26ai 를 사용하도록 한다. 귀찮으면 Instant Client 설치해서 해도 된다.
- tnsnames.ora
TCPS =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCPS)(HOST = 192.168.56.90)(PORT = 4521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = PDB1)
)
)
- sqlnet.ora
# sqlnet.ora Network Configuration File: /u01/app/oracle/product/26.0.0.0/dbhome_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.
NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)
WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/u01/app/oracle/admin/TEST/wallet)))
SSL_CLIENT_AUTHENTICATION = FALSE
TLS_KEY_EXCHANGE_GROUPS=ml-kem
#TLS_KEY_EXCHANGE_GROUPS=ec
- 접속 테스트
클라이언트에서 서버로 접속 해 본다.
sqlplus system/oracle@TCPS
[CDB]oracle@26ai-clone:/u01/app/oracle/product/26.0.0.0/dbhome_1/network/admin# sqlplus system/oracle@TCPS
SQL*Plus: Release 23.26.2.0.0 - Production on Wed Aug 12 12:57:25 2026
Version 23.26.2.0.0
Copyright (c) 1982, 2026, Oracle. All rights reserved.
Last Successful login time: Wed Aug 12 2026 11:07:35 +09:00
Connected to:
Oracle AI Database 26ai Enterprise Edition Release 23.26.2.0.0 - Production
Version 23.26.2.0.0
SQL> SELECT SYS_CONTEXT('USERENV', 'NETWORK_PROTOCOL') FROM DUAL;
SYS_CONTEXT('USERENV','NETWORK_PROTOCOL')
--------------------------------------------------------------------------------
tcps
SQL> SELECT SYS_CONTEXT('USERENV','TLS_VERSION') FROM DUAL;
SYS_CONTEXT('USERENV','TLS_VERSION')
--------------------------------------------------------------------------------
TLS 1.3
-> TLS 버전은 별도 셋팅하지 않아도 기본이 1.3 으로 설정된다.
여기서 다른 알고리즘으로 했을 때 에러가 나는 부분을 한번 테스트 해보면..
sqlnet.ora 에 ml-kem 이 아닌 기존의 사용하던 타원곡선 디피 헬만 ECDHE(Elliptic Curve Diffie-Hellman Ephemeral) 알고리즘을 사용하면 이렇게 인증이 거부된다.
--------------------------------------------------------------------------------
#TLS_KEY_EXCHANGE_GROUPS=ml-kem
TLS_KEY_EXCHANGE_GROUPS=ec
--------------------------------------------------------------------------------
sqlplus system/oracle@TCPS
SQL*Plus: Release 23.26.2.0.0 - Production on Wed Aug 12 13:02:54 2026
Version 23.26.2.0.0
Copyright (c) 1982, 2026, Oracle. All rights reserved.
ERROR:
ORA-28860: Fatal SSL error
Help: https://docs.oracle.com/error-help/db/ora-28860/
끝~~