OpenSSL 을 이용한 파일 암호화

LinuxBeginner
지금 연습하기

소개

이 실습에서는 사이버 보안의 핵심 기술인 OpenSSL 을 활용한 파일 암호화 및 복호화 방법을 학습합니다. 직접 대칭 키를 생성하고 AES 암호화를 적용하여 민감한 데이터를 보호하는 실무적인 연습을 수행하게 됩니다.

본 과정은 OpenSSL 설치부터 테스트 파일 생성, 그리고 암호화와 복호화로 이어지는 전체 사이클을 단계별로 안내합니다. 이러한 실습 경험은 실제 환경에서 사용되는 데이터 보호 기법의 기초를 이해하는 데 큰 도움이 될 것입니다.

이 실습은 단계별 지침을 제공하여 학습과 실습을 돕는 가이드형 랩입니다. 각 단계를 주의 깊게 따라가며 실무 경험을 쌓으시기 바랍니다. 통계에 따르면 이 실습은 초급 수준이며, 96%의 완료율과 학습자들로부터 98%의 긍정적인 평가를 기록하고 있습니다.

OpenSSL 설치 및 확인

이번 단계에서는 보안 통신 구현을 위한 강력한 도구 모음인 OpenSSL 을 설치합니다. 대부분의 리눅스 배포판에는 OpenSSL 이 기본적으로 포함되어 있지만, 이 과정을 통해 올바르게 설치되어 사용할 준비가 되었는지 확인합니다.

먼저, 설치된 버전을 확인하여 OpenSSL 의 설치 여부를 점검합니다.

openssl version

시스템에 설치된 OpenSSL 버전을 나타내는 다음과 유사한 출력이 표시되어야 합니다.

OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)

마지막으로, 도움말 메뉴를 실행하여 사용 가능한 명령 목록을 확인하고 OpenSSL 이 정상적으로 작동하는지 확인합니다.

openssl help

이 명령은 OpenSSL 이 수행할 수 있는 다양한 암호화 작업 목록을 보여주며, 다음 단계에서 이 기능들을 직접 사용해 볼 것입니다.

암호화용 샘플 파일 생성

이 단계에서는 암호화 및 복호화 연습에 사용할 간단한 텍스트 파일을 생성합니다. 내용이 확인된 파일을 사용하면 원본과 복호화된 내용을 비교하여 프로세스가 올바르게 작동했는지 쉽게 검증할 수 있습니다.

터미널의 현재 위치는 /home/labex/project 디렉토리여야 합니다. 여기서 파일을 생성하겠습니다.

먼저, nano 텍스트 편집기를 사용하여 sample.txt라는 이름의 새 파일을 만듭니다.

nano sample.txt

nano 편집기가 열리면 다음 내용을 입력합니다.

This is a sample text file for encryption testing.
LabEx Cybersecurity Lab - AES Encryption Demo.

이제 파일을 저장하고 nano를 종료합니다.

  1. Ctrl + O를 눌러 변경 사항을 파일에 기록합니다.
  2. Enter를 눌러 파일 이름 (sample.txt) 을 확정합니다.
  3. Ctrl + X를 눌러 편집기를 종료합니다.

파일이 제대로 생성되었는지 확인하기 위해 cat 명령으로 내용을 출력해 봅니다.

cat sample.txt

입력한 내용과 동일한 텍스트가 출력되어야 합니다.

This is a sample text file for encryption testing.
LabEx Cybersecurity Lab - AES Encryption Demo.

이제 이 샘플 파일은 다음 단계에서 진행할 암호화 과정을 위한 준비가 되었습니다.

대칭 암호화 키 생성

이 단계에서는 데이터를 암호화하고 복호화하는 데 모두 사용되는 비밀 키인 대칭 키를 생성합니다. OpenSSL 을 사용하여 매우 안전하고 널리 채택된 표준인 AES-256 암호화에 적합한 강력한 무작위 키를 만들 것입니다.

현재 위치가 프로젝트 디렉토리인 /home/labex/project인지 확인합니다.

cd ~/project

openssl rand 명령을 사용하여 32 바이트 (256 비트) 의 무작위 데이터를 생성하고, 이를 16 진수 형식으로 symmetric_key.hex 파일에 저장합니다.

openssl rand -hex 32 > symmetric_key.hex

생성된 키가 어떤 모습인지 확인해 봅니다.

cat symmetric_key.hex

출력 결과는 256 비트 키를 나타내는 64 자리의 16 진수 문자열입니다. 다음과 유사한 형태일 것입니다 (실제 키 값은 실행할 때마다 다릅니다).

2f8b5e9a1c3d4e6f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f

이 키는 데이터를 해독할 수 있는 중요한 정보이므로 안전하게 보호해야 합니다. chmod 명령을 사용하여 파일 소유자 (본인) 만 읽고 쓸 수 있도록 파일 권한을 설정합니다.

chmod 600 symmetric_key.hex

마지막으로 ls -l 명령을 통해 파일 권한을 확인합니다.

ls -l symmetric_key.hex

출력 결과에 권한이 -rw-------로 표시되면 파일이 안전하게 보호되고 있는 것입니다.

-rw------- 1 labex labex 65 Nov 15 10:30 symmetric_key.hex

키 생성과 보안 설정이 완료되었으므로, 이제 샘플 파일을 암호화할 준비가 되었습니다.

AES 를 이용한 파일 암호화

이제 생성한 대칭 키를 사용하여 sample.txt를 암호화합니다. 여기서는 AES-256-CBC 암호화 방식을 사용합니다. 256 비트 키를 사용하는 AES(Advanced Encryption Standard) 는 강력한 암호화 알고리즘이며, CBC(Cipher Block Chaining) 는 각 암호화 블록을 이전 블록과 의존적으로 만들어 보안성을 높이는 운영 모드입니다.

openssl enc 명령이 암호화를 처리합니다. 암호화 방식, 입력 파일, 출력 파일, 그리고 키 파일을 지정해야 합니다.

다음 명령을 실행하여 sample.txt를 암호화하고 그 결과를 sample.enc로 저장합니다.

openssl enc -aes-256-cbc -in sample.txt -out sample.enc -pass file:symmetric_key.hex
  • -aes-256-cbc: 암호화 알고리즘 및 모드를 지정합니다.
  • -in sample.txt: 암호화할 입력 파일입니다.
  • -out sample.enc: 생성될 암호화 파일의 이름입니다.
  • -pass file:symmetric_key.hex: OpenSSL 이 symmetric_key.hex 파일의 내용을 비밀번호 (키) 로 사용하도록 지시합니다.

명령 실행 후, 파일 목록을 확인하여 새로 생성된 암호화 파일 sample.enc를 확인합니다.

ls -l

패딩이나 메타데이터와 같은 암호화 오버헤드로 인해 sample.encsample.txt보다 약간 더 큰 것을 확인할 수 있습니다.

total 12
-rw-r--r-- 1 labex labex   96 Nov 15 10:35 sample.enc
-rw-r--r-- 1 labex labex   89 Nov 15 10:20 sample.txt
-rw------- 1 labex labex   65 Nov 15 10:30 symmetric_key.hex

암호화된 파일의 내용을 확인하려고 하면 읽을 수 없는 바이너리 데이터가 표시됩니다.

cat sample.enc

알 수 없는 문자들이 출력되는 것은 파일이 성공적으로 암호화되었음을 의미합니다.

파일 복호화 및 무결성 검증

마지막 단계에서는 sample.enc를 복호화하여 원본 텍스트를 복구합니다. 이를 통해 키가 정상적으로 작동하는지, 그리고 전체 암호화 - 복호화 과정이 성공적이었는지 확인합니다.

파일을 복호화하려면 다시 openssl enc 명령을 사용하되, 복호화를 의미하는 -d 플래그를 추가합니다.

다음 명령을 실행하여 sample.enc를 복호화하고 결과를 새 파일인 sample.dec에 저장합니다.

openssl enc -d -aes-256-cbc -in sample.enc -out sample.dec -pass file:symmetric_key.hex

이제 복호화가 제대로 되었는지 검증해 보겠습니다. 가장 좋은 방법은 복호화된 파일 (sample.dec) 과 원본 파일 (sample.txt) 을 비교하는 것입니다. diff 명령이 이 작업에 적합합니다.

diff sample.txt sample.dec

두 파일이 완전히 동일하다면 아무런 출력도 나오지 않으며, 이는 복호화가 성공했음을 의미합니다.

마지막으로 시각적 확인을 위해 복호화된 파일의 내용을 출력해 봅니다.

cat sample.dec

출력 결과는 원본 sample.txt 파일과 정확히 일치해야 합니다.

This is a sample text file for encryption testing.
LabEx Cybersecurity Lab - AES Encryption Demo.

축하합니다! OpenSSL 을 사용하여 파일을 성공적으로 암호화하고 다시 원본 상태로 복호화했습니다.

요약

이 실습을 통해 OpenSSL 을 활용한 파일 암호화 및 복호화 과정을 직접 경험해 보았습니다. 강력한 대칭 키를 생성하는 방법, AES-256 알고리즘으로 파일을 암호화하는 방법, 그리고 암호화된 파일을 복호화하여 원본 데이터를 복구하는 방법을 학습했습니다. 이러한 과정은 사이버 보안 분야에서 민감한 정보를 보호하기 위한 가장 기본적인 필수 기술입니다.