
대부분의 경우, 운영서버에서 별도의 데이터 암호화 솔루션을 운영한다.
그러나, 간혹 별도로 민감한 데이터를 처리해야 하는 경우가 생기는데, 암호화 솔루션으로 암호화하기에는 솔루션 컨설턴트의 지원이 필요한 경우가 있고, 그렇다고 그냥 평문으로 처리하기에는 노출 우려가 있어 부담스러운 경우가 있다.
이렇듯 SAP 테이블, OS 파일 또는 외부 서비스와의 I/F 에서 민감한 정보를 핸들링해야 하는 경우, AES 암호화를 통해서 보다 안전하게 데이터를 처리하는 것이 가능하다.
AES 암호화 알고리즘은 대칭 키 암호화 방식이며, 하나의 키로 암호화, 복호화가 진행되므로 키 보관이 매우 중요하다.
따라서 키는 반드시 암호화 데이터와 별도로 보관되어야 한다.
일반 사용자들이 접근할 수 없는, OS 단에 키를 보관하고, 복호화할때만 OS 상에서 키 파일을 불러오는것도 방법 중 하나라 할 수 있다.
암호화 키의 길이에 따라 128bit, 192bit, 256bit 로 나눠지며, 여기서는 256bit 키의 AES-256 을 사용한다.
여기서는 AES 암호화 알고리즘에 대한 자세한 설명보다는 실제 사용 방법에 대해서만 기록한다.
현재 기술로, AES 암호화는 키가 없다면 복호화하는 것이 불가능하기 때문에, 키만 안전하게 보관된다면 보안상에 이슈는 없다.
또한, 키가 탈취되었을 경우에도 대비해서, 암호화 키를 한번 더 암호화(RSA)하기도 한다.
FUNCTION ZFM_AES_ENCRYPT.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(I_TEXT) TYPE STRING
*" EXPORTING
*" VALUE(E_CIPHERTEXT) TYPE XSTRING
*" VALUE(E_KEY) TYPE XSTRING
*"----------------------------------------------------------------------
DATA: LV_XTEXT TYPE XSTRING,
LV_KEY TYPE XSTRING,
LV_CIPHERTEXT TYPE XSTRING.
"### 입력된 평문 STRING 을 XSTRING 로 변경
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
TEXT = I_TEXT
IMPORTING
BUFFER = LV_XTEXT.
"### AES256 알고리즘으로 암호화 Key 생성
LV_KEY = cl_sec_sxml_writer=>generate_key( algorithm = cl_sec_sxml_writer=>co_aes256_algorithm ).
"### AES256 알고리즘으로 데이터 암호화
CALL METHOD cl_sec_sxml_writer=>encrypt
EXPORTING
PLAINTEXT = LV_XTEXT
KEY = LV_KEY
ALGORITHM = cl_sec_sxml_writer=>co_aes256_algorithm
IMPORTING
CIPHERTEXT = LV_CIPHERTEXT.
E_CIPHERTEXT = LV_CIPHERTEXT.
E_KEY = LV_KEY.
ENDFUNCTION.
FUNCTION ZFM_AES_DECRYPT.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(I_CIPHERTEXT) TYPE XSTRING
*" VALUE(I_KEY) TYPE XSTRING
*" EXPORTING
*" VALUE(E_TEXT) TYPE STRING
*"----------------------------------------------------------------------
DATA: LT_BINARY TYPE STANDARD TABLE OF X255.
DATA: LV_CIPHERTEXT TYPE XSTRING,
LV_KEY TYPE XSTRING,
LV_PLAINTEXT TYPE XSTRING,
LV_TEXT TYPE STRING.
DATA: LV_LEN TYPE I.
LV_CIPHERTEXT = I_CIPHERTEXT.
LV_KEY = I_KEY.
CALL METHOD cl_sec_sxml_writer=>decrypt
EXPORTING
CIPHERTEXT = LV_CIPHERTEXT
KEY = LV_KEY
ALGORITHM = cl_sec_sxml_writer=>co_aes256_algorithm
IMPORTING
PLAINTEXT = LV_PLAINTEXT.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
BUFFER = LV_PLAINTEXT
IMPORTING
OUTPUT_LENGTH = LV_LEN
TABLES
BINARY_TAB = LT_BINARY.
CALL FUNCTION 'SCMS_BINARY_TO_STRING'
EXPORTING
INPUT_LENGTH = LV_LEN
IMPORTING
TEXT_BUFFER = LV_TEXT
TABLES
BINARY_TAB = LT_BINARY
EXCEPTIONS
FAILED = 1
OTHERS = 2.
E_TEXT = LV_TEXT.
ENDFUNCTION.
입력 평문 : hellow World!
-> 암호화 데이터 : E6135BF78F7041E6B804543A4E577B7B24EBE1A7830EE0F7C3827E94F3DFB3C5
-> 암호화 키 : 886F97A7B906953C967AB2DBF07013FA205E98881436D3DEC3D4122C675AFD9A
-> 위 암호화 데이터/ 암호화 키를 그대로 사용하여 복호화 진행
복호화 평문 : hellow World!