alert
파트너 프로그램 문의 요청이 정상적으로 전송되었습니다.
담당자가 곧 연락드리도록 하겠습니다.
메뉴 열기

로그프레소 아키텍처

실시간 암호화 및 위변조 방지

로그프레소는 컴플라이언스를 만족시키면서 데이터를 안전하게 보관할 수 있도록 실시간 암호화 기능을 기본 제공하고 있습니다. 공공기관은 국정원 검증필 암호 모듈을 사용해야 하는데, 별매 옵션으로 MPowerCrypto 기반 실시간 암호화 기능을 제공하고 있습니다.

로그프레소의 블록 암호화 구조

암호화되지 않은 로그프레소 테이블 데이터 파일의 구조는 아래와 같습니다. 각 데이터 블록은 수천 개의 압축된 레코드를 포함합니다.

암호화 설정된 로그프레소 테이블 데이터 파일의 구조는 아래와 같습니다.

즉, 각 데이터 블록은 파티션별 대칭키와 고유의 랜덤 초기화 벡터 값을 이용하여 데이터가 암호화되고, 블록 변조 여부를 검증할 수 있도록 HMAC 인증코드 값이 기록됩니다.

암호화 프로파일 설정

시스템 설정 메뉴에서 암호화 프로파일 메뉴로 들어가면, 아래와 같이 새로운 암호화 프로파일을 생성할 수 있습니다.

암호 알고리즘은 로그프레소 데이터 블록을 암호화하는데 사용되고, 다이제스트 알고리즘은 데이터 블록을 해시하여 무결성을 검증하는데 사용합니다.

암호화 구성은 자바에서 기본으로 제공하는 여러가지 암호화 알고리즘을 사용할 수 있는데, 내장된 대칭키 암호화 구성 예시는 아래와 같습니다. 최근 프로세서는 AES 암호화 하드웨어 가속을 지원하기 때문에 일반적으로 AES 암호화를 사용합니다.

  • AES/CBC/NoPadding
  • AES/CBC/PKCS5Padding
  • AES/ECB/NoPadding
  • AES/ECB/PKCS5Padding

MPowerCrypto를 설치한 경우 SEED 및 ARIA 암호 알고리즘을 사용할 수 있습니다. 구성 예시는 아래와 같습니다.

  • ARIA/CBC/PKCS5Padding
  • ARIA/ECB/NONEPadding
  • ARIA/CFB/PKCS5Padding
  • SEED/CBC/PKCS7Padding
  • SEED/CBC/PKCS5Padding
  • SEED/ECB/ZEROPadding

첫번째 부분은 암호 알고리즘 이름, 두번째 부분은 블록 암호화 방식, 세번째 부분은 패딩 방식을 의미합니다.

블록 암호화 방식은 각각 아래와 같습니다.

ECB 모드 (Electronic Code Book)

ECB 모드는 암호화 키를 이용해서 각 블록과 일대일로 대응되는 암호화된 블록을 생성합니다. 대칭키 암호화 알고리즘을 사용하면 입력값이 같은 경우 암호화된 값도 같게 나오기 때문에, 공격자가 암호문을 해독하기 쉬워서 잘 사용되지 않습니다.

CBC 모드 (Cipher Block Chaining)

CBC 모드는 암호화 시 앞의 암호문과 XOR하여 ECB 모드의 취약성을 해결합니다. 첫번째 블록은 초기화 벡터 (IV; Initial Vector) 를 사용합니다. 초기화 벡터 값이 동일하면 ECB처럼 예측하기 쉬워지기 때문에, 초기화 벡터는 항상 난수값을 사용합니다.

패딩

블록 암호 알고리즘은 암호화 키 길이와 동일한 길이의 평문 블록을 연산하여 암호화합니다. 그러나 항상 평문 블록의 길이가 암호화 키 길이와 일치하지는 않기 때문에, 블록 길이를 맞추기 위해서 정해진 값을 이어붙이게 됩니다.

PKCS5Padding은 PKCS7Padding의 부분집합에 해당되므로, 운영 상의 차이는 없습니다.

다이제스트 알고리즘

다이제스트 알고리즘은 아래의 설정을 적용할 수 있습니다.

  • HmacSHA256
  • HmacSHA1

로그프레소는 데이터의 무결성을 검증하기 위해 HMAC 방식을 사용합니다. HMAC은 Keyed-Hash Message Authentication Code의 약어로, 암호키를 이용해서 변조가 불가능한 해시값을 만들어내는 것을 의미합니다.

예를 들어, 해시 알고리즘이 이미 알려진 경우, 공격자는 블록 데이터를 변조한 후 동일한 해시 알고리즘을 적용해서 나온 값을 덮어쓰는 방법으로 블록 무결성 검증을 회피할 수 있습니다. 그러나 해시 생성 시 암호키를 추가로 적용한다면, 이와 같은 데이터 변조는 성공할 수 없습니다.

PKCS#12 인증서 파일

대칭키 암호화 알고리즘은 빠른 대신 암호 강도가 낮고, 비대칭키 암호화 알고리즘은 느린 대신 암호 강도가 높습니다. 이러한 특성 때문에 암호화 통신 시에도 초기 접속 시 비대칭키 암호화 알고리즘을 이용하여 대칭키를 안전하게 교환하고, 이후 대칭키를 사용하여 데이터 암복호화를 수행하는 구성이 일반적입니다.

로그프레소 역시 마스터 인증서 파일에 보관된 비대칭키를 이용하여 대칭키를 강력한 암호화로 보호하고, 실제 테이블 데이터를 읽거나 쓸 때에는 대칭키를 사용하여 암복호화를 수행합니다. 대칭키는 테이블의 각 파티션 별로 랜덤하게 생성되며, 마스터 인증서의 비대칭키는 인증서 암호로 보호됩니다. 마스터 인증서가 교체되어야 하는 경우, 전체 데이터를 다시 암호화할 필요없이 대칭키만 재암호화하여 대응할 수 있습니다.

테이블 암호화 설정

로그프레소에서 테이블 생성 시, 앞 단계에서 지정한 암호화 프로파일을 이용하여 암호화를 설정할 수 있습니다.

암호화 프로파일은 암호 알고리즘과 다이제스트 알고리즘을 둘 다 설정할 수도 있고, 다이제스트 알고리즘만 설정할 수도 있습니다. 다이제스트 알고리즘만 설정한 경우에는 데이터 자체는 암호화되지 않지만, 데이터 변조 여부를 검사할 수 있습니다.

테이블 암호화가 설정되어 있으면 로그프레소가 메모리에 있던 블록 데이터를 디스크에 플러시 하는 시점에 블록 암호화를 수행하여 파일에 기록합니다. 즉, 디스크에 기록되는 데이터는 어떤 시점에도 평문으로 노출되지 않습니다.

사용자가 쿼리를 실행할 때, 로그프레소는 자동으로 복호화를 수행하여 데이터를 읽게 됩니다. 즉, 사용자는 이 데이터가 암호화되었는지 아닌지 알지 못합니다. 각 계정의 데이터에 대한 접근은 로그프레소의 계정 혹은 보안 그룹별 테이블 권한 설정을 통해 제어할 수 있습니다.

필드 단위 암호화 및 마스킹

일부 개인정보에 해당되는 필드만 선택적으로 암호화하려는 경우, 스트림 쿼리와 암호 함수를 이용하여 필드 값을 선택적으로 암호화할 수 있습니다. 이 때 사용되는 암호키는 고정될 수도 있고, 서드파티 키 관리 시스템과 연계하여 동적으로 설정될 수도 있습니다.

사용자가 주민번호 뒷자리나 카드번호 4자리 등 일부 데이터를 보지 못하도록 마스킹하여 출력하려는 경우에는, 사용자에게 테이블에 대한 접근 권한을 주는 대신 프로시저를 통해 접근하도록 권한을 부여할 수 있습니다. 이 때 프로시저는 문자열 치환 함수를 통해 조회된 민감 데이터를 마스킹하여 반환합니다.

최신정보 받기