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/


 끝~~

Posted by pat98

08-24 20:21
Flag Counter
Yesterday
Today
Total

글 보관함

최근에 올라온 글

달력

 « |  » 2026.8
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

최근에 달린 댓글