DOI QR코드

DOI QR Code

Design and Implementation of High-Speed Software Cryptographic Modules Using GPU

GPU를 활용한 고속 소프트웨어 암호모듈 설계 및 구현

  • Received : 2020.10.13
  • Accepted : 2020.11.27
  • Published : 2020.12.31

Abstract

To securely protect users' sensitive information and national secrets, the importance of cryptographic modules has been emphasized. Currently, many companies and national organizations are actively using cryptographic modules. In Korea, To ensure the security of these cryptographic modules, the cryptographic module has been verified through the Korea Certificate Module Validation Program(KCMVP). Most of the domestic cryptographic modules are CPU-based software (S/W). However, CPU-based cryptographic modules are difficult to use in servers that need to process large amounts of data. In this paper, we propose an S/W cryptographic module that provides a high-speed operation using GPU. We describe the configuration and operation of the S/W cryptographic module using GPU and present the changes in the cryptographic module security requirements by using GPU. In addition, we present the performance improvement compared to the existing CPU S/W cryptographic module. The results of this paper can be used for cryptographic modules that provide cryptography in servers that manage IoT (Internet of Things) or provide cloud computing.

사람들의 개인정보와 국가의 기밀을 안전하게 보호하기 위해 다양한 암호 시스템과 알고리즘이 개발되었다. 암호모듈도 그 중 하나로, 수많은 기업과 국가 기관들이 자체적으로 개발한 다양한 암호모듈을 적극적으로 사용하게 되었다. 개발된 암호모듈에 대한 안전성과 정확성 등을 보장하기 위해서, 암호모듈 검증제도(CMVP)에 대한 중요성이 대두되었다. 국내에서도 암호모듈 검증제도(KCMVP)를 통해 암호모듈에 대한 보안 요구사항 충족 여부를 검증하고 있다. 그러나, 기존 CPU에서 동작하는 암호모듈은 대용량 데이터를 처리해야 하는 서버에서는 활용하기가 어렵다. 따라서, 본 논문에서는 GPU를 활용하여 고속화된 암호 기능을 제공하는 소프트웨어(S/W) 암호모듈을 제시하고자 한다. 본 논문에서는 GPU 활용 소프트웨어 암호모듈에 대한 구성과 동작 방식에 대하여 설명하고, GPU를 추가적으로 활용함에 따라 발생하는 암호모듈 보안요구사항의 변동점과 만족사항을 제시한다. 또한, 개발된 본 암호모듈에 대한 기존 CPU 소프트웨어 암호모듈 대비 성능 향상폭을 제시한다. 본 논문의 결과는 IoT 기기를 관리하는 서버나 클라우드 컴퓨팅 서버 등에서 암호 기능을 제공하는 암호모듈에 활용될 수 있다.

Keywords

I. 서론

정보 사회의 지속적인 발전으로 인해 대부분의 사회 구성원들이 디지털 기기와 서비스를 이용하게 되었다. 수많은 데이터가 전송됨과 동시에 데이터 유출 및 변조 등 다양한 정보 보안 문제에 대한 위험성이 제기되었으며 이러한 위험성에 대비하기 위해 보안 기능을 제공하는 수많은 암호 시스템과 알고리즘들이 개발 및 연구되었다. 암호모듈도 그 중 하나로, 암호, 난수 생성, 소수 판정, 해시, 전자 서명, 인증 등 암호기능을 소프트웨어(S/W)/하드웨어(H/W)/ 펌웨어(F/W) 또는 이를 조합하는 형태로 개발 및 구현되었다.

암호모듈은 현재 일반 기업 뿐만 아니라 행정기관과 같은 국가/공공기관 정보통신망에서 소통되는 자료중 중요정보의 보호를 위해 적극적으로 사용되고 있다. 이렇게 개발되고 사용되는 암호모듈에 대한 안전성과 정확성 등을 증명하고 보장해주기 위해서 미국의 NIST는 암호모듈 검증제도(Cryptographic Module Validation Program, CMVP)[1]를 통해 암호모듈 검증 기준을 제시하였다. 현재 암호모듈 검증제도는 미국과 캐나다를 시작으로 한국, 일본, 영국 등에서도 시행되고 있다. 국내에서는 자체적인 암호모듈 검증제도(Korea CMVP, KCMVP)를 통해 암호모듈의 안전성과 구현 적합성을 검증하고 있으며, 국가/공공기관에서 사용하는 보안제품들은 KCMVP를 통해 검증받은 암호모듈이 탑재되도록 하고 있다.

그러나, 현재 국내에서 KCMVP를 통해 검증받고 있는 국내 개발 암호모듈은 CPU와 같은 하나의 플 랫폼에서만 동작하는 소프트웨어 기반 암호모듈이 대부분이다. IoT 디바이스들이나 클라우드 컴퓨팅 서비스를 제공하는 서버에서 암호모듈을 사용할 때 다수의 사용자들에 대한 서비스를 실시간으로 빠르게 제공하기 위해서는 기존 CPU 플랫폼에서만 동작하 는 암호모듈로는 한계가 존재한다. 따라서, 본 논문에서는 기존 소프트웨어 암호모듈에서 CPU가 처리하는 암호화 연산 중 부하가 큰 부분을 다중 병렬 연산에 특화되어 있는 GPU를 활용하여 동작 성능을 향상시킬 수 있는 GPU 활용 소프트웨어 암호모듈 과 KCMVP 검증 기준에 따라 GPU가 추가되었을 때 고려해야 하는 암호모듈의 보안요구사항과 명세사항 관점에서의 의의를 제시하고자 한다. 결론적으로, GPU 활용 소프트웨어 암호모듈은 CPU에서만 연산을 수행하는 암호모듈보다 암호 알고리즘의 연산 성능이 최소 551%에서 최대 1089%까지 상승함을 확인하였다. 이러한 결과는 서버에서 제공하는 암호모듈에 대한 대량의 사용자 대상 서비스 속도를 개선할 수 있다.

본 논문의 개요는 다음과 같다. 2장에서는 소프트웨어 암호모듈의 주요 보안요구사항에 대하여 설명하 고, 3장에서는 본 논문에서 제안하는 GPU 활용 소 프트웨어 암호모듈의 보안요구사항 변동사항에 대하 여 설명한다. 4장에서는 GPU 활용 소프트웨어 암 호모듈에 대한 보안요구사항 만족을 위한 구현 방법을 설명하고, 5장에서는 무결성 검증, 조건부 자가시험 수행 결과와 각 암호 알고리즘별 성능 차이를 제 시한다.

II. 기존 소프트웨어 암호모듈

2.1 암호모듈 동향

정보통신 기술의 발달로 유통되는 정보의 규모가 확대됨에 따라 정보통신망에서 소통되는 정보를 보호하기 위해 암호모듈의 수요가 급증하고 있다. 이러한 암호모듈은 국가, 공공기관 및 민간에 사용되기 위해 검증이 필요하며, 국내에서는 KCMVP 암호모듈 검증제도가 존재한다. KCMVP에서는 암호모듈 안전성 기준(KS X ISO/IEC 19790)[2]과 암호모듈의 구현적합성 기준(KS X ISO/IEC 24759)[3]의 표준을 가지고 시험기관에서[4],[5] 암호모듈을 검증하고 있다. 암호모듈 안전성 기준(KS X ISO/IEC 19790)[2]에서는 11개의 영역으로 나뉘어 암호모듈 의 보안수준을 1~4로 평가하며 각 보안등급에 따라 요구사항이 다르다. 소프트웨어 기반의 암호모듈은 최대 보안등급 2까지 가능하며, 하드웨어 기반의 암 호모듈은 최대 보안등급 4까지 가능하다. 구현적합 성 기준(KS X ISO/IEC 24759)[3]은 암호모듈이 탑재하고 있는 검증대상 암호 알고리즘이 표준을 정확히 준수하여 구현되었는지를 검증한다. 국내 대부분의 암호모듈은 소프트웨어 기반의 암호모듈이며, 하드웨어, 펌웨어, 하이브리드 암호모듈은 미비하다. 따라서 본 장에서는 소프트웨어 기반의 암호모듈이 안전성 기준(KS X ISO/IEC 19790)[2]에서 고려 해야하는 보안요구사항영역인 암호모듈 경계, 무결성 검증, 조건부 자가시험, 중요보안매개변수 영역에 대해서 알아본다.

2.2 소프트웨어 암호모듈 주요 보안요구사항

2.2.1 암호모듈 경계

암호모듈 경계는 암호모듈의 모든 구성요소(알고 리즘/프로세스 등)를 포함하는 경계로 소프트웨어, 펌웨어, 하드웨어 구성요소를 포함하는 집합을 의미한다. 각 암호모듈의 유형에 따라 경계는 상이하다. 하드웨어 암호모듈의 경우에는 하드웨어 구성요소의 모든 집합(회로 보드, 회로기판, 배선)과 운영체제를 포함할 수 있는 펌웨어를 의미하며, 소프트웨어, 펌웨어 암호모듈의 경우에는 실행 가능한 파일 또는 암 호모듈의 구성 파일의 집합을 의미한다. 하이브리드 암호모듈의 경우에는 하드웨어 구성요소 경계와 별도 로 분리된 소프트웨어/펌웨어 구성요소 경계와 각 구성요소의 모든 포트 및 인터페이스의 집합을 의미한다. 암호모듈은 유형에 따라 명확한 경계 범위를 기술해야한다. 명세에서의 주요시험항목에서의 요구사항은 보안등급 1~4 모두 동일하다. 소프트웨어기반 의 암호모듈 경계의 예는 Fig.1.과 같다.

JBBHCB_2020_v30n6_1279_f0001.png 이미지

Fig. 1. Examples of S/W cryptographic module boundaries

2.2.2 무결성 검증

암호모듈이 동작하기 전에는 사전에 소프트웨어/ 펌웨어에 대한 무결성 검증이 필요하다. 암호모듈 경계 내의 모든 소프트웨어와 펌웨어 구성요소의 위/변 조를 검증하기 위하여 무결성 검증을 진행하며 MAC 또는 전자서명을 통해 검증대상 무결성 검증을 진행한다. 무결성 기술에 사용되는 알고리즘은 조건부 자가시험에서 암호알고리즘 시험을 수행하여 사 전 검증한다. 보안 수준 1을 준수하는 암호모듈에서 는 검증대상 무결성 기법을 사용할 수 있으며, 보안 수준 2를 준수하는 암호모듈에서는 전자서명과 MAC 중에서 무결성 검증 방법을 선택할 수 있다. 보안 수준 3 이상의 암호모듈에서는 전자서명을 통한 무결성 검증만을 인정한다.

KCMVP 검증대상 암호모듈은 소프트웨어/펌웨어 구성요소에 대한 무결성 검증 방법을 명세해야 하 며, 운영자가 인터페이스를 통해 무결성 검증을 수행하는 방법을 명세해야 한다. 무결성 검증을 위한 키는 암호모듈 내에 존재할 수 있지만, 중요보안매개변 수에는 포함되지 않는다. HMAC을 이용한 무결성 검증 과정은 Fig. 2.에서 확인할 수 있다.

JBBHCB_2020_v30n6_1279_f0002.png 이미지

Fig. 2. Integrity verification processing using HMAC

2.2.3 조건부 자가시험

암호모듈이 동작하기 전에는 사전에 암호모듈이 올바른 기능을 수행하는지 검증해야 한다. 따라서 암 호모듈이 동작하기 전에는 탑재된 암호 알고리즘에 대한 자가시험이 진행된다. 동작 전 자가시험은 크게 무결성 검증과 조건부 자가시험이 있는데, 그 중 조건부 자가시험 목록은 Table 1.에서 확인할 수 있다.

Table 1. List of conditional self-test

JBBHCB_2020_v30n6_1279_t0001.png 이미지

자가시험 대상이 되는 각각의 알고리즘은 기지-답안 검사, 비교 검사, 오류-탐지 검사로 구현할 수 있다. 조건부 자가시험은 암호모듈이 현재 운영환경에서의 정상 동작 가능 여부를 확인하기 위해 수행되며 선택사항으로 수행된다. 조건부 자가시험은 필수적으로 수행되는 검증 과정이며 서비스 요청, 리셋, 리부팅, 반복적인 전원인가 등의 주기적 시험의 요청시에도 수행될 수 있다. 조건부 자가시험이 실패할 경우 암호모듈은 심각한 오류 상태로 천이되며 제로화 이후 암호모듈이 종료되게 된다.

2.2.4 중요보안매개변수 관리

중요보안매개변수는 핵심보안매개변수와 공개보안 매개변수로 이루어져 있다. 핵심보안매개변수는 노출 되거나 변경되면 암호모듈의 보안을 위협할 수 있는 보안관련 중요 정보이며, 주로 비밀키나 개인키, 패스워드나 난수발생기의 상태 정보를 의미한다. 공개 보안매개변수는 변경되면 암호모듈의 보안을 손상시킬 수 있는 보안관련 공개정보를 의미하며, 주로 공개키나 인증서를 의미한다.

중요보안매개변수는 키보드, 화면출력 등으로 직접적으로 주입/출력될 수 있으며, 스마트카드, 토큰 등에 의해 전자적으로 주입될 수 있다. 암호모듈 내부에 저장된 모든 중요보안매개변수는 각 변수에 따라 보관방법과 저장된 암호키 개체 대응 절차가 필요하다. 암호모듈 내부에서 사용된 중요보안매개변수 중 암호모듈 내부에서 보호되지 않는 모든 중요보안 매개변수와 키 구성요소는 제로화 과정을 수행해야 한다. 이때, 제로화된 중요보안매개변수는 복구 및 재사용이 불가능하며, 보호된 공개보안매개변수나 암 호화된 핵심보안매개변수는 제로화되지 않는다.

III. GPU 활용 소프트웨어 암호모듈

3.1 암호 알고리즘 GPU 연산 아이디어

일반적인 소프트웨어 암호모듈에는 다양한 검증대 상 암호 알고리즘들이 탑재되어 있다. IoT 기기들을 관리하는 서버나 클라우드 컴퓨팅 서비스를 제공하는 서버에서 이러한 암호모듈을 사용할 때에는 수많은 데이터를 신속하게 암호화할 수 있어야 하며, 또한 사용자들에게 보안 서비스를 제공할 때 사용되는 난수값 또한 대량의 난수열을 필요로 하게 된다. 이러한 기능들을 CPU 환경에서 신속하게 제공하기에는 한계가 명확하다. 따라서, 본 논문에서는 GPU를 활용한 고속 소프트웨어 암호모듈 설계 및 구현 기술을 제시하고자 한다. GPU는 CPU와는 달리 다중 병렬 연산에 특화되어 있다. 따라서 기존 CPU 내에서만 작동하는 소프트웨어 암호모듈 내 검증대상 암호 알고리즘들을 GPU로 연산할 수 있다면, 대량의 데이터를 효율적으로 처리할 수 있을 것이다. GPU를 활용한 암호알고리즘 병렬 연산 과정은 Fig.3.과 같다.

JBBHCB_2020_v30n6_1279_f0003.png 이미지

Fig. 3. Method of provide parallel encryption algorithm service using GPU

본 논문에서 소개하는 암호모듈이 포함한 검증대 상 암호 알고리즘은 블록 암호 알고리즘인 LEA, 해 시 함수인 SHA-2, 메시지 인증 코드 HMAC, 난수 발생기 CTR_DRBG, 그리고 공개키 기반 키 교 환 함수 ECDH이다. 블록 암호 알고리즘의 경우, CPU의 평문 및 라운드 키 데이터를 GPU로 복사하고 GPU 내부의 각 스레드마다 하나의 블록을 암호화/복호화시키게끔 구현되었다. 암호화/복호화를 수행한 이후에는 다시 GPU에서 CPU로 데이터를 복사하고, GPU에서 사용한 데이터에 대한 제로화가 진행되게끔 구현하였다. 암호화/복호화를 진행할 데이터가 각 스레드가 한 번씩만 연산해낼 수 있는 최 대 데이터 크기보다 클 경우, 블록 수를 사전에 입력받아 GPU cuda stream에 분배할 수를 나눈 후, 비동기적으로 암호화/복호화가 진행되게 된다. 난수 발생기의 경우, GPU의 각 스레드가 난수열을 병렬적으로 생성하게끔 구현하였으며, 난수발생기의 내부 상태는 모든 스레드가 한 차례의 난수열을 생성한 이후 모든 스레드에 대하여 초기화되게끔 구현하였다. 해시 함수와 메시지 인증 코드, 그리고 키 교환 함수 또한 블록 암호와 마찬가지로 GPU를 활용하여 처리해야하는 데이터를 분할하여 병렬 처리되게끔 구현 되었다.

하지만, 암호 알고리즘을 GPU로 연산하기 위해서는 추가되는 작업이 발생하며, 수정되는 일부 과정 이 존재한다. 이 경우, 기존 소프트웨어 암호모듈에 대한 보안요구사항 영역에 영향을 끼치게 된다. 따라 서, 본 장에서는 GPU를 활용하여 기존 암호모듈 내부에 있는 암호 알고리즘을 고속화했을 때 발생하는 추가적인 보안요구사항과 변경점에 대하여 논하도록 한다

3.2 보안요구사항 변동점

암호모듈 검증제도에는 총 11개의 보안요구사항이 존재한다: 암호모듈명세, 인터페이스, 역할/서비스 및 인증, 소프트웨어/펌웨어 보안, 물리적 보안, 비 침투 보안, 운영 환경, 중요보안매개변수 관리, 자가 시험, 생명주기 보증, 기타 공격에 대한 대응. 이 중 암호 알고리즘의 일부 핵심 연산을 GPU를 통하여 구현했을 때 변동되는 보안요구사항 핵심은 다음과 같다: 암호모듈 경계, 무결성 검증, 조건부 자가시험, 중요보안매개변수 관리. 따라서, 이러한 주요 보안요구사항들에 대하여 기존 소프트웨어 암호모듈 대비 GPU 활용 소프트웨어 암호모듈이 고려해야 할 내용을 설명하도록 한다.

3.2.1 암호모듈 경계 고려사항

본 논문에서 제시하고자 하는 GPU 활용 소프트웨어 암호모듈은 보안수준 1에 근거한다. 기존 소프트웨어 암호모듈 대비 GPU 활용 소프트웨어 암호 모듈에서는 GPU를 연산에 사용하기 때문에 암호모 듈 경계에 대한 명세를 밝혀야 한다. 소프트웨어 라이브러리형 암호모듈의 경우 암호모듈 경계가 대부분 유사한데, GPU를 사용하는 소프트웨어 암호모듈의 경우 GPU 기기가 경계 내에 추가됨에 따라 CPU 와의 관계가 어떻게 되는지에 대한 내용을 명세해야 한다. 특히, CUDA[6]라고 하는 Nvidia GPU 라이브러리를 사용해야 하는 GPGPU 연산 특성상 해당 API를 사용하기 위해 추가되는 구성 요소에 대하여 추가적으로 설명해야 한다.

3.2.2 무결성 검증 고려사항

암호모듈기능에 대한 시험 항목은 크게 4가지 종류가 존재하며, 그 중 보안 수준 1에 해당하는 무결성 검증은 소프트웨어 구성요소에 대한 무결성 검증 기법을 사용하는 것이 필요하다. 기존 무결성 검증을 위한 키는 암호모듈 내에 존재하며, 주로 전자서명이 나 메시지 인증코드를 통해 암호 모듈의 무결성을 검증하는데, GPU를 활용한 소프트웨어 암호모듈에서는 GPU 동작에 대한 무결성 또한 추가적으로 검증되어야 한다. 따라서, CPU와 GPU 양측에서 무결성 검증이 완료되어야만 검증 절차를 완료할 수 있으며, 둘 중 하나라도 무결성 검증이 실패할 경우 심각한 오류 상태로 천이될 수 있게끔 구현해야 한다.

3.2.3 조건부 자가시험 고려사항

암호모듈이 로드되어 초기화 및 인스턴스화되는 시점에 수행되는 동작 전 자가시험은 동작 전 소프트웨어 무결성 시험과 동작 전 핵심기능 시험(조건부 자가시험)으로 이루어진다. 기존 소프트웨어 암호모 듈에서는 조건부 암호알고리즘 시험을 통해 조건부 자가시험을 테스트하였고, 이는 GPU 활용 소프트웨어 암호모듈에서도 동일한 방법으로 수행된다. GPU 활용 소프트웨어 암호모듈에서의 동작전 자가 시험은 GPU에서 연산한 결과가 CPU에서 연산한 결과 및 테스트 벡터와 모두 일치함을 보여야 한다.

3.2.4 중요보안매개변수 관리 고려사항

GPU에서 주요 연산을 진행하기 위해서는 사전에 반드시 CPU에서 GPU로 데이터를 복사해야 한다. GPU 내부에서 자체적으로 정의되거나 생성되는 값들은 대부분 상수값들이며, 암호모듈 사용자에 의해 가변될 수 있는 요소들은 CPU에서 GPU로 복사되어 사용되게 된다. 이 경우, 기존 소프트웨어 암호모 듈에서의 중요보안매개변수에 대한 관리 및 명세 뿐 만 아니라, GPU를 사용함으로써 추가될 수 있는 중 요보안매개변수 구성요소 목록 및 보호 방식에 대하여 명시해야 한다. GPU 활용 소프트웨어 암호모듈 에서는 중요보안매개변수 생성, 제로화, 설정, 주입/ 출력, 저장에 대한 변경점 및 추가 사항을 명세할 수 있어야 한다. 특히, 난수발생기를 이용하여 생성되는 중요보안매개변수가 존재할 경우 GPU를 활용한 난 수발생기의 구조 및 기타 명세사항을 설명할 수 있어야 한다.

IV. 보안요구사항 만족사항 상세설명

4.1 암호모듈 경계

본 암호모듈은 윈도우 환경에서 C언어를 이용하여 개발된 일반적인 형태의 DLL 라이브러리로서 응 용 프로그램에게 API 호출을 통해 암호서비스를 제공한다. 또한, 파일 자체가 논리적인 경계가 된다. 우리가 개발한 GPU 활용 소프트웨어 암호모듈의 암호모듈 경계는 Fig. 4.와 같이 표현될 수 있다.

JBBHCB_2020_v30n6_1279_f0004.png 이미지

Fig. 4. GPU-utilized 소프트웨어 cryptographic module boundaries

기존 소프트웨어 암호모듈과 비슷하게 물리적 경계는 모든 암호모듈 동작을 포괄하며, 논리적 경계는 암호 알고리즘 서비스를 제공하는 API에 제한한다. 암호 알고리즘 서비스 API에는 초기화/상태 관리/ 자가시험에 대한 사항을 포함한다.

어플리케이션에서 암호모듈을 사용하고자 할 때, 운영체제를 통해 CPU와 메모리에서 암호 알고리즘 API를 사용하게 된다. 이때 GPU를 활용하여 암호 알고리즘의 주요 연산을 진행하게 되면 운영체제에 의해 CPU에서는 GPU 기억장치로 데이터를 복사하고 GPU에서는 암호 알고리즘 연산을 수행하게 된다. GPU에서의 연산이 종료되면 다시 GPU의 메모리가 CPU로 복사되고 CPU는 암호 알고리즘 API 서비스를 재개하도록 구현되었다.

GPU에서는 CUDA 라이브러리를 사용하여 GPU 연산을 수행시키는데, GPU를 활용한 소프트웨어 암호모듈에서도 CUDA 라이브러리를 반드시 사용해야만 한다. 따라서, 본 암호모듈 내 동적 라이브러리 헤더에는 cuda_runtime.h와 같은 CUDA GPU 헤더가 추가적으로 코드에 삽입되어 구현되었다[7].

4.2 무결성 검증

본 암호모듈은 구성요소에 대한 무결성을 검증하기 위해 HMAC-SHA256을 적용하였다. 무결성 검증을 위해 사용되는 킷값은 기본적으로 암호모듈 내부에 분산되어 저장되며, CPU에 저장된 킷값에 대한 무결성 검증과 GPU에 저장된 킷값에 대한 무결성 검증을 동시에 진행하며, CPU에서 GPU로 키를 복사하여 GPU에서는 추가적인 무결성 검증을 진행 하도록 구현하였다. 즉, CPU에서는 한 번의 HMAC-SHA256이 동작하며, GPU에서는 두 번의 HMAC-SHA256이 동작함으로써 무결성을 검증하게 된다. 자세한 GPU 활용 소프트웨어 암호모듈의 무결성 검증 과정은 Fig.5.에서 확인할 수 있다.

JBBHCB_2020_v30n6_1279_f0005.png 이미지

Fig. 5. Integrity verification process in GPU-utilized 소프트웨어 cryptographic module

본 암호모듈은 CPU에 저장된 HMAC 키를 GPU로 복사하여 추가적인 무결성 검증을 진행함으로써 CPU와 GPU에 대한 각각의 무결성 검증뿐 만 아니라 CPU와 GPU 사이에서의 메모리 복사 과정에서의 변조 이상 유무를 무결성 검사를 통해 확인할 수 있도록 구현하였다. CPU와, GPU, 그리고 CPU에서 GPU로 복사된 HMAC 키에 의해 계산된 세 HMAC 값은 설치된 HMAC 값과 비교하게 되며, 셋 중 하나라도 설치된 HMAC 값과 일치하지 않으면, 심각한 오류 상태로 천이되고 제로화 이후 암호모듈을 초기화하도록 구현하였다. 무결성 검증을 수행한 이후에는 암호모듈이 연산을 진행하면서 발생하는 GPU 내부에서 반환하는 오류 코드를 통해 이상 유무를 판단하도록 구현하였다.

4.3 조건부 자가시험

본 암호모듈은 동작 전 자가시험에서 무결성 검증과 조건부 자가시험을 수행한다. 이 중 동작 전 자가 시험은 기존 소프트웨어 암호모듈에서 진행되는 CPU 조건부 자가시험 뿐만 아니라, GPU를 활용한 동작 전 자가시험 과정이 추가된다. 본 암호모듈 기준 수행되는 동작 전 자가시험 목록은 Table 2.와 같다.

Table 2. List of conditional self-test in GPU-utilized S/W cryptographic module

JBBHCB_2020_v30n6_1279_t0002.png 이미지

본 암호모듈의 조건부 암호 알고리즘 시험은 KAT 형태로 수행되어 각각의 암호 알고리즘이 정상 동작하는지 확인하게 구현되었다. 이때 KAT는 검증받은 테스트 벡터를 이용하여 수행된다. 조건부 암호 키쌍 일치시험의 경우 전자서명 방법을 통해 진행되며, 탑재된 공개키 기반 암호알고리즘인 타원곡선 암호 알고리즘의 키쌍 생성 시마다 수행되게끔 구현되었다. 조건부 연속적 난수발생기 실험은 CPU와 GPU에 대하여 동일한 난수발생기 알고리즘을 수행시킨 다음 동일한 난수 블록이 생성되었는지를 판단하게끔 구현하였다. CPU에서 첫 번째 난수 블록을 생성하고, 그 이후 블록을 GPU를 통해 생성했을 때, CPU에서 생성한 난수 블록이 GPU가 생성한 난수 블록과 일치하는 블록이 발생할 경우, 자가시험 실패로 처리된다.

4.4 중요보안매개 변수관리

본 암호모듈에서 사용하는 핵심보안매개변수에 대한 기초 명세사항은 기존 소프트웨어 암호모듈과 같다. 핵심보안매개변수에 대한 생성과 제로화를 지원하며, 소프트웨어 모듈에서 요구하지 않는 설정, 주입, 출력, 저장에 관해서는 관리를 지원하지 않는다.

주요보안매개변수 생성에서 일반적으로 모든 핵심 보안매개변수들은 CPU에서 생성되어 사용되며, 주요 연산을 수행할 때만 GPU로 복사되어 사용되게 된다.

보안 GPU를 활용한 소프트웨어 암호모듈에서는 중요보안매개변수 구성요소 목록 및 보호 방식에 대한 설명과 생성, 제로화, 설정, 주입/출력, 저장에 대한 기존 소프트웨어 암호모듈과의 차이점이 발생한다.

기존 CPU에서만 동작하는 소프트웨어 암호모듈 상태의 경우 핵심보안매개변수는 비밀키, 개인키, 메 시지 인증키가 해당되지만, GPU를 활용한 소프트웨어 암호모듈에서는 주요 연산을 진행하기 위해 CPU에서 GPU로 복사되는 값들 중 추가적인 핵심 보안매개변수에 대하여 고려해야 한다. Table 3.은 GPU를 활용한 소프트웨어 암호모듈에서 추가적 로 고려해야 하는 중요보안매개변수에 대한 내용을 설명한다.

Table 3.List of sensitive security parameters in GPU-utilized S/W cryptographic module

비밀키, 개인키, 메시지 인증키는 핵심보안매개변 수이며 공개키는 공개보안매개변수이다. 기존 CPU 환경에서의 핵심보안 매개변수는 비밀키, 개인키, 메시지 인증키로 이루어져 있다. 비밀키의 경우 GPU 를 활용한 소프트웨어 암호모듈에서는 실제 킷값이 GPU로 복사되는 대신 키 스케쥴에 의해 생성된 라운드키가 GPU로 복사되게 된다. 따라서 이 경우 라운드키가 GPU에서의 중요보안매개변수가 된다.

암호모듈 동작이 끝나는 등 제로화가 필요할 경우 CPU에서의 제로화 과정 뿐만 아니라 GPU에서도 이러한 중요보안매개변수에 대한 제로화가 필요하다. 본 암호모듈의 경우 cudaMemset 함수를 사용하여 GPU 내부에서의 제로화를 진행한다.

개인키의 경우 타원곡선에서의 개인키를 CPU와 GPU 양측에서 중요보안 매개변수로 명시될 수 있으며, 전자서명을 위해 사용되는 서명키 또한 GPU로 복사되서 사용되기 때문에 GPU에서는 서명키에 대한 중요보안매개변수 관리가 추가적으로 필요하다

메시지 인증키의 경우 CPU에서 GPU로 복사되어 사용되는 메시지 인증키와 GPU에서 생성되는 메시지 인증키 각각에 대한 관리가 필요하다. 본 암호 모듈에서 메시지 인증을 수행할 때 마지막 단계에서 세 개의 계산된 HMAC 값을 저장된 HMAC 값과 비교한 이후에는 3개의 값에 대한 각각의 제로화 과정을 수행하도록 구현하였다.

난수발생기는 CTR_DRBG(LEA-128/192/256) 를 사용했으며, 난수발생기는 자체적인 암호 알고리 즘 뿐만 아니라 암호모듈 내부에서 사용되는 키 생성에 관해서도 사용되게끔 구현하였다. 사용한 난수발 생기에 대한 자세한 정보는 Table 4.와 같다.

Table 4. Specification of random number generatorin S/W GPU cryptographic module

JBBHCB_2020_v30n6_1279_t0004.png 이미지

본 암호모듈 내 난수발생기에는 경량블록암호 LEA를 사용한 CTR_DRBG가 사용되며, 개별화 문자열 및 예측 내성은 사용하지 않는 구조로 이루어져 있다. 추가입력은 허용되며, 외부갱신 주기에 따라 외부갱신 함수가 주기적으로 호출되는 형태를 갖추고 있다. 운영 환경으로부터 수집한 엔트로피값과 추가입력이 난수발생기의 입력으로 들어가게 되고, 난수열이 출력으로 나오게 된다. 이러한 구조는 표준 검증대상 난수발생기 구조를 준수함을 밝힌다. GPU 상에서는 엔트로피 잡음원을 GPU에서 발생하는 다양한 물리적 신호를 통하여 수집 및 활용할 수 있다. 또는, GPU의 동작 시간이나 코어들 간의 메모리 접근 경쟁을 이용한 잡음원을 수집할 수 있다. 수집된 엔트로피 잡음원은 난수 발생기의 엔트로피 입력값이 나시드값으로 사용될 수 있다.

본 암호모듈의 중요보안매개변수인 비밀키, 개인 키, 메시지 인증키는 본 암호모듈이 제공하는 난수발생기에 의해 생성된 값을 사용하게 된다. GPU 중요 보안매개변수의 경우 난수발생기에서 즉시 생성하는 것이 아닌 CPU 중요보안매개변수에 의해 생성된 값들이 GPU 중요보안매개변수로 사용되게끔 구현하였다.

V. 결과

5.1 실험 환경

본 암호모듈은 응용 프로그램에게 API 호출을 통해 암호서비스를 제공한다. 본 장에서는 GPU 활용 소프트웨어 암호모듈에 대한 동일 암호모듈 환경에서 CPU 연산만을 지원하는 동작 시간과 GPU를 활용한 동작 시간을 비교하도록 한다. Table 5.는 동작 시간을 비교하기 위한 실험 환경을 제시한다.

Table 5. Experiment environment

5.2 무결성 검증결과

본 암호모듈은 동작 전 메시지 인증코드를 통해 무결성 검증을 진행하였으며, CPU에 저장된 HMAC 키를 GPU로 복사한 뒤 CPU와 GPU 각각에서 HMAC 값을 계산하였으며 이렇게 나온 두 결과가 설치된 HMAC 값과 모두 일치함을 확인하였다. 무

결성 검증에 걸린 시간은 Table 6.과 같다. 무결성 검증시 CPU 뿐만 아니라 CPU에서 HMAC 키를 GPU로 복사하여 GPU에서도 HMAC 값을 연산해야 하는 과정이 추가되기 때문에 동작 시간이 오히려 길어짐을 확인할 수 있다.

Table 6. Integrity verification time difference depending on whether GPU is used in S/W cryptographic module

JBBHCB_2020_v30n6_1279_t0006.png 이미지

5.3 조건부 자가시험 결과

본 암호모듈은 동작 전 핵심기능 시험을 조건부 자가시험으로 진행하였다. 조건부 자가시험에 사용된 알고리즘은 블록 암호의 LEA, 해시 함수의 SHA256, 메시지 인증코드의 HMAC-SHA256, 공개키 암호 기반 키 교환은 ECDH(P-256)으로 진행하였다. 조건부 자가시험에 대한 테스트벡터는 KISA가 제공하는 테스트벡터 자료를 이용하였다. LEA의 경우 LEA-128, LEA-192, LEA-256에 대해 각 운영모드(ECB, CBC, CFB, OFB, CTR)에 대한 KAT/MCT/MMT 검증이 모두 진행 되었다. 해시 함수의 경우 SHA-256에 대한 짧은 메시지 검사, 긴 메시지 검사, 몬테카를로 검사를 모두 진행하였다. ECDH 키 교환의 경우 P-256에 대한 KAKAT, KPG, PKV 검사를 진행하였다. 각 알고리즘들에 대한 조건부 자가시험 소요시간은 Table 7.에 소개되어 있다. Table 7.에 제시된 시간은 CPU로부터 GPU로 키 복사 시간, 평문/암호문 복사 시간이 포함된 시간을 기준으로 측정한 것이다.

Table 7. Time required for conditional self-test depending on whether GPU is used in S/W cryptographic module

JBBHCB_2020_v30n6_1279_t0007.png 이미지

본 암호모듈에 탑재된 암호 알고리즘들에 대한 조건부 자가시험 결과, 각 알고리즘의 KISA 테스트벡터에 대한 모든 검증을 만족하였음을 확인하였다.

5.4 암호모듈 동작 성능 측정 결과

본 절에서는 모든 동작 전 자가시험을 마치고 난 뒤 암호모듈에서 암호 알고리즘을 호출해서 사용할 경우 GPU를 활용했을 때의 성능 향상치를 제시한다. 본 절에서는 대용량 데이터를 다루는 서버의 입장에서 실험을 진행한 결과를 제시한다. 각 알고리즘에 대한 성능 측정 결과는 Table 8.에서 확인할 수 있다

Table 8. Cryptographic algorithm operation time differnece depending on whether GPU is used in S/W cryptographic module

실험에 사용된 데이터는 256 MB 크기의 난수열 데이터를 사용하였다. 해당 난수는 본 암호모듈의 CTR_DRBG에 의해 생성되어 사용되었다. LEA-128의 경우 256 MB의 데이터를 암호화하는 데 소요된 시간을 기준으로 측정하였다. 측정 결과 CPU에서만 동작하는 기존 암호모듈 대비 GPU 활용 암호모듈에서는 약 1089%의 성능 향상치를 확인할 수 있었다. SHA-256의 경우 256 MB의 데이터를 256 비트를 입력 단위로 분할하여 총 256 MB 의 해싱 데이터를 출력하는데 소요되는 시간을 기준으로 측정하였다. 측정 결과 CPU에서만 동작하는 기존 암호모듈 대비 GPU 활용 암호모듈에서는 약 674%의 성능 향상치를 확인할 수 있었다. HMAC-SHA256의 경우 HMAC 값을 계산하는 시간만을 기준으로 측정하였다. 난수발생기 CTR_DRBG의 경우 256 MB의 난수를 생성하여 출력하는데 소요되는 시간을 측정하였다. 측정 결과 CPU에서만 동작하는 기존 암호모듈 대비 GPU 활용 암호모듈에서는 약 787%의 성능 향상치를 확인할 수 있었다.

VI. 결론

본 논문에서는 IoT 기기를 관리하는 서버나 클라 우드 컴퓨팅 서비스를 제공하는 서버의 입장에서 기존 CPU 암호모듈이 가진 성능적인 한계를 극복하기 위해 GPU를 활용한 소프트웨어 암호모듈을 제안한다.

기존 CPU 소프트웨어 암호모듈에서 GPU가 추가됨으로써 고려해야 하는 무결성 검증, 조건부 자가시험, 중요보안매개변수 관리 등의 보안요구사항에 대하여 명시하고, 본 암호모듈에 대한 추가적인 보안 요구사항에 대한 만족사항을 제안하였다.

본 암호모듈에 탑재된 암호 알고리즘은 블록 암호 LEA-128/192/256, 해시 함수 SHA-256, 메시지 인증코드 HMAC-SHA256, 타원곡선기반 키 교환 알고리즘 ECDH(P-256), 그리고 난수발생기 CTR_DRBG이다. LEA의 경우, 기존 CPU에서만 연산되는 소프트웨어 암호모듈 대비 GPU를 활용하였을 때 약 1089%의 성능이 향상됨을 확인할 수 있었으며, 동일한 환경에서 SHA-256은 약 674%, HMAC-SHA256은 약 551%, 그리고 CTR_DRBG는 약 787%의 성능이 향상되는 결과를 확인할 수 있었다. 이러한 결과는 대용량 데이터를 다루는 서버에서 GPU 활용 소프트웨어 암호모듈을 적극적으로 활용하여 암호 시스템 서비스를 신속하게 제공하는데 활용될 수 있다.

본 논문에서는 GPU를 활용한 소프트웨어 암호모듈에서의 보안요구사항 측면과 결과를 제시했지만, 추후 하드웨어 통합 하이브리드 암호모듈에 대한 연구를 진행할 예정이다.

References

  1. National Institute of Standard and Technology(NIST), "FIPS 140-3 Standards," 2019
  2. Korea Standards Association, "KS X ISO/IEC 19790," Information technology-Security techniques-Security requirements for cryptographic modules, 2015
  3. Korea Standards Association, "KS X ISO/IEC 24759," Information technology - Security techniques - Test requirements for cryptographic modules, 2015
  4. Korea Internet & Security Agency (KISA), "https://seed.kisa.or.kr/kisa/kcmvp/Egosummary.do"
  5. National Intelligence Service(NIS), "http://www.nis.go.kr/AF/1_7_3_1.do"
  6. Nvidia, CUDA Toolkit, Nvidia Developer, "https://developer.nvicia.com/cuda-toolkit"
  7. Nvidia, CUDA Toolkit Documentation, Nvidia Developer, "https://docs.nvidia.com/cuda/index.html"
  8. Deuk-jo Hong, Jung-Keun Lee, Dong-Chan Kim, Dae-Sung Kwon, Kwon-Ho Ryu, and Dong-Geon Lee, "LEA: A 128-Bit Block Cipher for Fast Encryption on Common Processors," International Workshop on Information Security Applications (WISA), pp. 3-27, 2013
  9. National Institute of Standard and Technology(NIST), "FIPS 180-4 Standards," 2015
  10. National Institute of Standard and Technology(NIST), "FIPS 198-1 Standards," 2008
  11. National Institute of Standard and Technology(NIST), "NIST SP 800-90A Determinstic Random Bit Generator Validation System", 2015
  12. National Institute of Standard and Technology(NIST), "NIST SP 800-78-4 Cryptographic Algorithms and Key Sizes for Personal Identity Verification," 2015