ABAP - AES 알고리즘을 사용한 문자열/파일 암복호화__Encryption/Decryption of strings/files using AES algorithm

감귤은탱귤·2024년 9월 3일

ABAP - BC 프로그램

목록 보기
11/13
post-thumbnail

대부분의 경우, 운영서버에서 별도의 데이터 암호화 솔루션을 운영한다.

그러나, 간혹 별도로 민감한 데이터를 처리해야 하는 경우가 생기는데, 암호화 솔루션으로 암호화하기에는 솔루션 컨설턴트의 지원이 필요한 경우가 있고, 그렇다고 그냥 평문으로 처리하기에는 노출 우려가 있어 부담스러운 경우가 있다.

이렇듯 SAP 테이블, OS 파일 또는 외부 서비스와의 I/F 에서 민감한 정보를 핸들링해야 하는 경우, AES 암호화를 통해서 보다 안전하게 데이터를 처리하는 것이 가능하다.



1. 개요

AES 암호화 알고리즘은 대칭 키 암호화 방식이며, 하나의 키로 암호화, 복호화가 진행되므로 키 보관이 매우 중요하다.

따라서 키는 반드시 암호화 데이터와 별도로 보관되어야 한다.

일반 사용자들이 접근할 수 없는, OS 단에 키를 보관하고, 복호화할때만 OS 상에서 키 파일을 불러오는것도 방법 중 하나라 할 수 있다.

암호화 키의 길이에 따라 128bit, 192bit, 256bit 로 나눠지며, 여기서는 256bit 키의 AES-256 을 사용한다.

여기서는 AES 암호화 알고리즘에 대한 자세한 설명보다는 실제 사용 방법에 대해서만 기록한다.

현재 기술로, AES 암호화는 키가 없다면 복호화하는 것이 불가능하기 때문에, 키만 안전하게 보관된다면 보안상에 이슈는 없다.
또한, 키가 탈취되었을 경우에도 대비해서, 암호화 키를 한번 더 암호화(RSA)하기도 한다.



2. 암호화 Function Module

펑션 모듈 사양

  • 입력값 :
    • I_TEXT : 암호화할 평문
  • 출력값 :
    • E_CIPHERTEXT : 암호화 문자열
    • E_KEY : 암호화 키
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.


3. 복호화 Function Module

펑션 모듈 사양

  • 입력값 :
    • I_CIPHERTEXT : 암호화 문자열
    • I_KEY : 암호화 키
  • 출력값 :
    • E_TEXT : 복호화된 평문
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.


4. 사용 예시 및 테스트 결과

4-1. 암호화

입력 평문 : hellow World!
-> 암호화 데이터 : E6135BF78F7041E6B804543A4E577B7B24EBE1A7830EE0F7C3827E94F3DFB3C5
-> 암호화 키 : 886F97A7B906953C967AB2DBF07013FA205E98881436D3DEC3D4122C675AFD9A

4-2. 복호화

-> 위 암호화 데이터/ 암호화 키를 그대로 사용하여 복호화 진행
복호화 평문 : hellow World!

profile
SAP BC (2019 ~ )

0개의 댓글