728x90
OpenSSL을 사용하여 파일을 암호화하고 복호화하는 방법
OpenSSL은 암호화 및 복호화를 수행할 수 있는 강력한 도구 중 하나입니다.
테스트 환경
- 운영체제 버전 및 BIT
$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
$ getconf LONG_BIT
64
- OpenSSL 버전
$ openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017
참고: 아래의 예제에서는 대칭 키(암호화 및 복호화에 사용되는 키)를 생성하고 파일을 암호화하는 방법을 설명합니다. 이 예제에서 사용된 대칭 암호화 알고리즘은 AES (Advanced Encryption Standard)입니다.
1. 대칭 키 생성
먼저 대칭 키를 생성합니다. 이 키는 암호화와 복호화에 사용됩니다. 아래 명령어로 대칭 키를 생성합니다.
openssl rand -base64 32 > mykey.txt
이 명령은 32바이트 (256비트)의 무작위 키를 생성하고 "mykey.txt" 파일에 저장합니다. 이 키는 파일을 암호화하고 복호화하는 데 사용됩니다.
2. 파일 암호화
암호화하려는 파일과 생성한 대칭 키를 사용하여 파일을 암호화합니다. 아래 명령어를 사용합니다.
openssl enc -aes-256-cbc -salt -in plaintext.txt -out encrypted.bin -pass file:mykey.txt
- -aes-256-cbc: AES 알고리즘을 사용하여 256비트 대칭 암호화를 수행합니다.
- -salt: 암호화에 솔트를 사용하여 보안을 강화합니다.
- -in plaintext.txt: 암호화할 원본 파일입니다.
- -out encrypted.bin: 암호화된 결과를 저장할 파일입니다.
- -pass file:mykey.txt: 암호화에 사용할 대칭 키 파일을 지정합니다.
3. 복호화
암호화된 파일을 복호화하려면 다음 명령어를 사용합니다.
openssl enc -d -aes-256-cbc -in encrypted.bin -out decrypted.txt -pass file:mykey.txt
- -d: 복호화 모드로 작동합니다.
- -aes-256-cbc: 이전과 동일한 AES 알고리즘 및 모드를 사용합니다.
- -in encrypted.bin: 복호화할 파일입니다.
- -out decrypted.txt: 복호화된 결과를 저장할 파일입니다.
- -pass file:mykey.txt: 복호화에 사용할 대칭 키 파일을 지정합니다.
728x90
지원되는 Ciphers(Cipher Types|Valid ciphername values)
openssl enc -ciphers(? 알 수 없는 옵션으로 정상적인 옵션을 출력했다)
$ openssl enc -ciphers
unknown option '-ciphers'
options are
-in <file> input file
-out <file> output file
-pass <arg> pass phrase source
-e encrypt
-d decrypt
-a/-base64 base64 encode/decode, depending on encryption flag
-k passphrase is the next argument
-kfile passphrase is the first line of the file argument
-md the next argument is the md to use to create a key
from a passphrase. See openssl dgst -h for list.
-S salt in hex is the next argument
-K/-iv key/iv in hex is the next argument
-[pP] print the iv/key (then exit if -P)
-bufsize <n> buffer size
-nopad disable standard block padding
-engine e use engine e, possibly a hardware device.
Cipher Types
-aes-128-cbc -aes-128-cbc-hmac-sha1 -aes-128-cbc-hmac-sha256
-aes-128-ccm -aes-128-cfb -aes-128-cfb1
-aes-128-cfb8 -aes-128-ctr -aes-128-ecb
-aes-128-gcm -aes-128-ofb -aes-128-xts
-aes-192-cbc -aes-192-ccm -aes-192-cfb
-aes-192-cfb1 -aes-192-cfb8 -aes-192-ctr
-aes-192-ecb -aes-192-gcm -aes-192-ofb
-aes-256-cbc -aes-256-cbc-hmac-sha1 -aes-256-cbc-hmac-sha256
-aes-256-ccm -aes-256-cfb -aes-256-cfb1
-aes-256-cfb8 -aes-256-ctr -aes-256-ecb
-aes-256-gcm -aes-256-ofb -aes-256-xts
-aes128 -aes192 -aes256
-bf -bf-cbc -bf-cfb
-bf-ecb -bf-ofb -blowfish
-camellia-128-cbc -camellia-128-cfb -camellia-128-cfb1
-camellia-128-cfb8 -camellia-128-ecb -camellia-128-ofb
-camellia-192-cbc -camellia-192-cfb -camellia-192-cfb1
-camellia-192-cfb8 -camellia-192-ecb -camellia-192-ofb
-camellia-256-cbc -camellia-256-cfb -camellia-256-cfb1
-camellia-256-cfb8 -camellia-256-ecb -camellia-256-ofb
-camellia128 -camellia192 -camellia256
-cast -cast-cbc -cast5-cbc
-cast5-cfb -cast5-ecb -cast5-ofb
-des -des-cbc -des-cfb
-des-cfb1 -des-cfb8 -des-ecb
-des-ede -des-ede-cbc -des-ede-cfb
-des-ede-ofb -des-ede3 -des-ede3-cbc
-des-ede3-cfb -des-ede3-cfb1 -des-ede3-cfb8
-des-ede3-ofb -des-ofb -des3
-desx -desx-cbc -id-aes128-CCM
-id-aes128-GCM -id-aes128-wrap -id-aes128-wrap-pad
-id-aes192-CCM -id-aes192-GCM -id-aes192-wrap
-id-aes192-wrap-pad -id-aes256-CCM -id-aes256-GCM
-id-aes256-wrap -id-aes256-wrap-pad -id-smime-alg-CMS3DESwrap
-idea -idea-cbc -idea-cfb
-idea-ecb -idea-ofb -rc2
-rc2-40-cbc -rc2-64-cbc -rc2-cbc
-rc2-cfb -rc2-ecb -rc2-ofb
-rc4 -rc4-40 -rc4-hmac-md5
-rc5 -rc5-cbc -rc5-cfb
-rc5-ecb -rc5-ofb -seed
-seed-cbc -seed-cfb -seed-ecb
-seed-ofb
[MAC] openssl enc -help 명령어
$ openssl enc -help
usage: enc -ciphername [-AadePp] [-base64] [-bufsize number] [-debug]
[-in file] [-iv IV] [-K key] [-k password]
[-kfile file] [-md digest] [-none] [-nopad] [-nosalt]
[-out file] [-pass arg] [-S salt] [-salt]
암호화하는 명령어(encryption)
-e Encrypt the input data (default)
$ file ldap-20210705.tar.gz
ldap-20210705.tar.gz: gzip compressed data, from Unix, last modified: Mon Jul 5 21:28:50 2021
$ openssl enc -aes-128-cbc -in ldap-20210705.tar.gz -out enc_ldap-20210705.tar.gz -K 1234 -iv 00000000000000000000000000000000
$ file enc_ldap-20210705.tar.gz
enc_ldap-20210705.tar.gz: data
복호화하는 명령어(decryption)
-d Decrypt the input data
$ openssl enc -d -aes-128-cbc -in enc_ldap-20210705.tar.gz -out dec_ldap-20210705.tar.gz -K 1234 -iv 00000000000000000000000000000000
$ file dec_ldap-20210705.tar.gz
dec_ldap-20210705.tar.gz: gzip compressed data, from Unix, last modified: Mon Jul 5 21:28:50 2021
복호화 에러
패스워드가 다른 경우
$ openssl enc -d -aes-128-cbc -in enc_ldap-20210705.tar.gz -out dec_ldap-20210705.tar.gz -K 12345 -iv 00000000000000000000000000000000
bad decrypt
139841944201104:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:592:
HEX가 다른 경우
$ openssl enc -d -aes-128-cbc -in enc_ldap-20210705.tar.gz -out dec_ldap-20210705.tar.gz -K 1234 -iv 00000000000000000000000000000011
$ tar xvfz dec_ldap-20210705.tar.gz
gzip: stdin: invalid compressed data--format violated
tar: Child returned status 1
tar: Error is not recoverable: exiting now
이제 파일이 암호화되고 복호화되었습니다. 암호화 키는 안전하게 보관되어야 하며 복호화를 원하는 사람만 액세스할 수 있어야 합니다.
728x90
'리눅스' 카테고리의 다른 글
취약점을 방지하기 위한 보안 HTTP 헤더를 설정하기 (0) | 2021.07.22 |
---|---|
PHP MongoDB 확장 모듈을 설치하는 방법(mongodb.so 모듈) (0) | 2021.07.16 |
CentOS 7에서 로케일(로케일 설정과 문자셋 설정)을 변경하는 방법 (0) | 2021.07.01 |
리눅스 rsync 명령어 (0) | 2021.07.01 |
[리눅스] OpenLDAP cert(TLS/SSL) 적용 시 에러 (0) | 2021.06.28 |