[암호화] OpenSSL을 활용한 암호화 방법 (맥 암호화)
들어가며
AES = Advanced Encryption Standard AEA 이번 포스팅은 전 블로그에 작성한 맥 터미널로 256 암호화 하기 (Encrypt 256 with Mac Terminal) 이라는 주제로 작성한 글이 있다. 오늘은 이 글을 좀 더 구체적으로 작성해 보려고 한다. 무려 2019년 7월 28일에 포스팅한 글이다. 현시점 2023년 12월 21일이니까 1,607일 전 글이다. 월로 하면 52.79일 년으로 하면 약 4.4년이 지났다.
그런데 갑자기 opensl에 대해서 구체적으로 작성을 하냐라고 물어본다며 생각보다. 잘 사용하고 있고 나름 유용하다. 내가 아무런 툴이 없고 프로그램을 갖고 있지 않다면 급할 때 사용할 수 있다. 또한 윈도우에서 BitLocker 사용도 한계가 있기 때문이다.
OpenSSL
OpenSSL은 특정한 기업이 아니다. OpenSSL은 오픈 소스 프로젝트로, 널리 사용되는 보안 및 암호화 라이브러리이다. 이 라이브러리는 SSL(Secure Sockets Layer) 및 TLS(Transport Layer Security) 프로토콜을 구현하며, 다양한 암호화 알고리즘을 제공한다.
OpenSSL의 신뢰성
오픈 소스: OpenSSL은 오픈 소스이기 때문에 전 세계의 개발자들이 코드를 검토하고 개선할 수 있다. 이는 보안 결함이 발견될 경우 신속하게 수정될 수 있음을 의미한다.
광범위한 사용: OpenSSL은 인터넷 보안을 위한 중요한 도구로, 전 세계 수많은 시스템과 애플리케이션에서 사용된다. 그 사용 범위와 중요성은 그 자체로 이 프로젝트의 신뢰성을 증명한다.
지속적인 업데이트 및 유지보수: OpenSSL 프로젝트는 지속적으로 업데이트되고 유지보수되고 있다. 새로운 보안 위협에 대응하고 기능을 개선하기 위한 작업이 꾸준히 이루어지고 있다.
주의할 점
보안 취약점: 모든 소프트웨어와 마찬가지로 OpenSSL도 과거에 보안 취약점이 발견된 적이 있다 (예: Heartbleed 버그). 이러한 취약점은 발견되면 신속히 수정되지만, 사용자는 항상 최신 버전을 사용하여 이러한 위험을 최소화해야 한다.
구현 오류: OpenSSL을 사용할 때 구현 방식에 따라 보안성이 달라질 수 있다. 올바른 방법으로 구현하고 사용하는 것이 매우 중요하다.
결론은, OpenSSL은 매우 신뢰할 수 있는 보안 도구이지만, 사용자는 항상 최신 버전을 유지하고 올바르게 사용하는 것이 중요하다.
진짜 들어가며
디지털 보안의 영역에서 암호화는 데이터의 기밀성과 무결성을 보장하는 핵심 요소이다. 다양한 암호화 표준 중에서, AES (고급 암호화 표준)는 널리 인식되고 강력한 선택으로 부상했다. 특히, AES-256 암호화는 더 높은 수준의 보안을 제공하여 민감한 정보를 보호하는 데 주로 사용된다.
AES-256 암호화란 무엇인가?
AES-256은 256비트 키 길이를 사용하는 고급 암호화 표준(AES)의 변형이다. 높은 수준의 보안으로 알려져 있으며, 정부 기관 및 여러 산업에서 최고 비밀 데이터를 보호하는 데 사용된다. 256비트 키 크기는 그 이전의 버전들에 비해 훨씬 더 많은 조합의 수를 제공하여, 해킹을 훨씬 더 어렵게 만든다.
시작
먼저, 암호화 과정에 들어가기 전에 여러분의 Mac에 OpenSSL이 설치되어 있는지 확인해야 한다. OpenSSL은 강력한 오픈소스 툴킷으로, Secure Sockets Layer (SSL) 및 Transport Layer Security (TLS) 프로토콜과 함께 전반적인 암호화 라이브러리를 구현한다.
Mac에 OpenSSL이 설치되었는지 확인하려면, 터미널을 열고 다음 명령어를 입력 하면 된다.
openssl version
만약 설치가 되어 있다면 버전 번호가 표시가 된다. 설치가 되어 있지 않다면 Homebrew로 설치 하면 된다.
brew install openssl
암호화 과정
openssl enc -aes-256-cbc -e -in [입력 파일 경로] -out [출력 파일 경로] 이 명령어는 입력 파일을 AES-256-CBC 모드로 암호화하여 출력 파일로 저장 한다. 암호화할 때 사용할 비밀번호를 입력한다.
복호화 과정
openssl enc -aes-256-cbc -d -in [암호화된 파일 경로] -out [복호화된 파일 경로]
-e 옵션은 암호화(Encryption)를 의미한다. 이 옵션을 사용하면 지정된 파일이나 데이터가 AES-256-CBC 알고리즘을 사용하여 암호화 된다. 즉, 평문을 암호문으로 변환하는 과정이다.
-d 옵션은 복호화(Decryption)를 의미한다. 이 옵션을 사용하면 AES-256-CBC 알고리즘으로 암호화된 파일이나 데이터를 원래의 평문 형태로 복구한다. 다시 말해, 암호문을 평문으로 되돌리는 과정이다.
암호화 용어 정리
평문 (Plaintext): 암호화가 적용되지 않은 원본 메시지. 암호문 (Ciphertext): 암호화 과정을 거쳐 변환된 메시지. 암호화 (Encryption): 평문을 암호문으로 변환하는 과정. 복호화 (Decryption): 암호문을 다시 평문으로 변환하는 과정.
opensl enc -aes-256-cbc -e
opensl enc -aes-256-cbc -e
-
openssl: openssl은 OpenSSL 프로그램을 호출하는 명령어이다. OpenSSL은 강력한 암호화 라이브러리와 이를 사용하는 도구 모음을 제공한다.
-
enc: enc는 OpenSSL 내의 ‘enc’ 도구를 사용하라는 것을 의미한다. ‘enc’는 데이터를 암호화하거나 해독하는 데 사용된다.
-
-aes-256-cbc: -aes-256-cbc는 사용할 암호화 알고리즘을 지정한다. AES-256-CBC는 매우 강력한 암호화 알고리즘으로, ‘고급 암호화 표준(AES)’의 256비트 버전이다. ‘CBC’는 ‘Cipher Block Chaining’을 의미하며, 이는 데이터를 블록으로 나누고 각 블록을 이전 블록의 암호화된 결과와 결합하여 암호화하는 방식이다.
-
-e: 이 플래그는 데이터를 암호화(encrypt)하는 모드로 OpenSSL을 실행하라는 것을 의미한다.
위에 명령어를 실행할 때, 추가적으로 암호화할 데이터의 출처(파일 또는 표준 입력)와 암호화된 데이터를 저장할 대상(파일 또는 표준 출력), 그리고 암호화 키를 제공해야 할 수도 있다. 위에 명령어는 높은 수준의 보안을 제공하는 강력한 암호화 방법으로 널리 사용된다.
파일 암호
아래에 있는 명령어들은 Linux 및 Unix 시스템에서 사용되며, OpenSSL과 같은 표준 도구를 사용한다.
- 단일 파일 암호화 (OpenSSL 사용):
openssl enc -aes-256-cbc -salt -in filename.txt -out filename.txt.enc
- 이 명령어는 ‘filename.txt’라는 파일을 AES-256-CBC 알고리즘을 사용하여 암호화 한다. 결과는 ‘filename.txt.enc’ 파일에 저장된다.
- 단일 파일 복호화 (OpenSSL 사용):
openssl enc -aes-256-cbc -d -in filename.txt.enc -out filename.txt
- 이 명령어는 암호화된 파일 ‘filename.txt.enc’를 복호화하여 원래 파일 형태로 복원한다.
- 폴더 암호화 (tar와 결합하여 사용):
tar czv foldername | openssl enc -aes-256-cbc -out foldername.tar.gz.enc
- 이 명령어는 먼저 ‘foldername’ 폴더를 tar 파일로 압축한 다음, 암호화 한다. 결과는 ‘foldername.tar.gz.enc’ 파일에 저장된다.
- 폴더 복호화 (tar와 결합하여 사용):
openssl enc -aes-256-cbc -d -in foldername.tar.gz.enc | tar xzv
- 이 명령어는 암호화된 tar 파일 ‘foldername.tar.gz.enc’를 복호화하고, 그 내용을 추출한다.
이러한 명령어를 사용할 때 가장 중요한 건 암호화 키를 안전하게 보관하는 것이 제일 중요하며, 암호화된 데이터는 키 없이는 복구할 수 없다는 점을 인지해야 한다. 또한, 사용하는 시스템의 OpenSSL 버전과 호환성을 확인하는 습관을 들여야 한다.
tar 결합 [폴더 암호화 과정 (맥북)]
-
Terminal 열기: 먼저 맥북에서 터미널 애플리케이션을 연다.
-
폴더로 이동: 데스크탑에 있는
enc
폴더로 이동한다.cd ~/Desktop/enc
-
폴더 압축 및 암호화:
tar czvf - . | openssl enc -aes-256-cbc -out ~/Desktop/enc.tar.gz.enc
이 명령어는enc
폴더를tar
를 이용해 압축하고, 그 결과를 OpenSSL을 사용하여 암호화 한다. 암호화된 파일은 데스크탑에enc.tar.gz.enc
로 저장된다.
왜 tar
와 결합해야 하는가?
tar
명령어는 여러 파일과 디렉토리를 하나의 아카이브 파일로 묶는 유틸리티이다. OpenSSL은 단일 파일만을 암호화할 수 있으므로, 폴더를 암호화하려면 먼저 폴더와 그 안의 모든 파일들을 하나의 파일로 묶어야 한다. tar
는 이 과정을 담당한다.
tar
명령어에 대한 간단한 설명
tar
: Tape Archive의 약자로, 여러 파일이나 디렉토리를 하나의 아카이브(저장 파일)로 묶는 데 사용된다.- 주요 옵션:
-c
: 새로운 아카이브를 생성한다.-z
: gzip을 사용하여 아카이브를 압축한다.-v
: 처리되는 파일을 화면에 표시한다.-f
: 파일 이름을 지정한다.-
는 표준 출력을 의미한다.
압축과 암호화 과정은 시스템의 보안과 관련이 있으므로, 사용하는 암호를 안전하게 보관하고, 중요한 데이터에 대해서는 백업을 유지하는 것이 좋다. 암호화된 폴더를 열고 싶으시면, 복호화 과정을 거쳐야 한다. 이전에 맥북에서 tar
와 openssl
을 사용하여 암호화한 enc.tar.gz.enc
파일을 예로 들어 설명을 해보면.
복호화 과정
-
Terminal 열기: 먼저 맥북에서 터미널 애플리케이션을 연다.
-
암호화된 파일의 위치로 이동: 본인이 암호화한 파일의 위치로 이동한다.
cd ~/Desktop
-
파일 복호화 및 압축 해제:
openssl enc -aes-256-cbc -d -in enc.tar.gz.enc | tar xzvf -
위에 명령어는 enc.tar.gz.enc
파일을 복호화하고, tar
명령어를 사용하여 압축을 해제한다. -d
옵션은 복호화를 의미한다. 이 과정에서 암호화할 때 사용한 비밀번호를 입력해야 한다.
- 복호화된 폴더 확인: 복호화 및 압축 해제가 완료되면, 원래의
enc
폴더가 복원된다. 이 폴더를 확인하려면ls -l
를 사용하면 된다.
주의 사항
- 복호화 과정에서 암호화할 때 사용한 정확한 비밀번호를 입력해야 한다.
- 암호화 및 복호화 과정에서 사용된 암호는 안전하게 관리해야 한다. 암호를 잊어버리면 데이터를 복구할 수 없다.
- 복호화 과정은 암호화된 데이터의 무결성을 유지해야 하는 경우에 중요하다. 데이터 손상 없이 원본 상태로 복구되어야 한다.
이러한 단계를 거쳐 암호화된 폴더를 안전하게 열 수 있다. 데이터 보안과 관련된 작업을 할 때는 항상 주의를 기울이는 것이 중요하다.
다른 명령어
명령어를 사용하여 맥OS에서 폴더를 암호화하고 암호로 보호하는 방법은 생각보다 엄청 많다. 주로 hdiutil
명령어를 사용하여 암호화된 디스크 이미지를 생성하는 방식으로 이루어진다. 이 방법은 디스크 유틸리티 앱을 사용하는 것과 유사하지만, 모든 작업이 터미널을 통해 수행된다.
암호화된 디스크 이미지 만들기
우선 터미널을 연 뒤 암호화된 이미지를 생성해야 한다.
bashCopy code
hdiutil create -volname "EncryptedFolder" -encryption AES-256 -stdinpass -size 100m -fs HFS+ -type SPARSE ~/Desktop/EncryptedFolder.sparseimage
위에 명령어는 데스크탑에 ‘EncryptedFolder.sparseimage’라는 이름의 100MB 크기의 암호화된 디스크 이미지를 생성한다. -stdinpass
옵션을 사용하면 터미널에서 비밀번호를 입력할 수 있다.
- 이미지 마운트: bashCopy code
hdiutil attach ~/Desktop/EncryptedFolder.sparseimage
이미지를 마운트하면 Finder에서 새 볼륨으로 접근할 수 있다.
-
파일 및 폴더 복사: 생성된 볼륨으로 필요한 파일이나 폴더를 복사한다.
-
이미지 언마운트: bashCopy code
hdiutil detach /Volumes/EncryptedFolder
사용 후에는 이 명령어를 사용하여 볼륨을 언마운트한다.
암호화된 이미지 열기
- 이미지 마운트: bashCopy code
hdiutil attach ~/Desktop/EncryptedFolder.sparseimage
볼륨을 열 때마다 비밀번호를 입력해야 한다.
이 방법을 사용하면 폴더를 암호화하고 암호로 보호할 수 있으며, 터미널을 통해 모든 작업을 수행할 수 있다. 이러한 방법은 스크립트를 작성하여 자동화할 수도 있으며, 데이터 보안에 매우 좋다.
여러 시나리오
- 인증서 생성:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
- 인증서 생성 명령어는 새로운 RSA 개인 키와 자체 서명된 인증서를 생성한다. 웹 서버용 SSL/TLS 인증서를 만들 때 유용하다.
- 공개 키와 개인 키 생성:
openssl genpkey -algorithm RSA -out private_key.pem
- RSA 알고리즘을 사용하여 새로운 개인 키를 생성한다. 공개 키는 개인 키에서 파생될 수 있다.
- 개인 키에서 공개 키 추출:
openssl rsa -pubout -in private_key.pem -out public_key.pem
- 개인 키 파일에서 공개 키를 추출한다. 이 공개 키는 다른 사람들과 안전하게 공유할 수 있다.
- 파일의 해시 값 생성:
openssl dgst -sha256 filename
- 파일의 SHA-256 해시를 생성한다. 이것은 파일 무결성 검사나 디지털 서명 생성에 사용된다.
- 디지털 서명 생성:
openssl dgst -sha256 -sign private_key.pem -out signature.bin file.txt
- 주어진 파일에 대한 디지털 서명을 생성한다. 이 서명은 해당 파일의 무결성과 출처를 검증하는 데 사용될 수 있다.
- 디지털 서명 검증:
openssl dgst -sha256 -verify public_key.pem -signature signature.bin file.txt
- 디지털 서명이 유효한지 검증한다. 파일과 서명이 모두 제공되어야 한다.
- SSL/TLS 연결 테스트:
openssl s_client -connect host:port
- 지정된 호스트와 포트에 대한 SSL/TLS 연결을 시도한다. 이는 서버 설정을 테스트하거나 연결 문제를 진단하는 데 사용된다.
이러한 명령어들은 OpenSSL을 사용한 다양한 암호화 작업을 수행하는 데 있어 매우 유용하다. 그러나 사용 전에 각 명령어의 옵션과 구문을 이해하는 것이 매우 매우 매우 중요하다. 또한, 각 명령어는 특정 상황에 적합하게 조정될 수 있으므로, 실제 사용 환경에 맞게 조정해야 한다.
맥북 암호화 (명령어 없음)
만약 내가 터미널에 익숙하지 않고 명령어 치는 게 어렵다면 사실 맥에는 명령어 없이 암호화할 수 있는 기능이 있다. 이를 위해 내장된 디스크 유틸리티
를 사용하는 방법이 가장 간편하며, 이는 암호로 보호된 디스크 이미지를 만들어 해당 이미지 내에 폴더와 파일을 저장하는 방식으로 작동한다.
디스크 이미지를 이용한 폴더 암호화
- 디스크 유틸리티 열기
- Finder에서 ‘응용 프로그램’ > ‘유틸리티’로 이동하거나, Spotlight 검색(Cmd + Space)을 사용하여 ‘디스크 유틸리티’를 찾아 실행한다.
- 새 이미지 생성
- 디스크 유틸리티 상단 메뉴에서 ‘파일’ > ‘새 이미지’ > ‘빈 이미지…‘를 선택한다.
- 이미지 옵션 설정
- ‘저장 위치’, ‘이름’, ‘크기’, ‘형식’ (일반적으로 ‘읽기/쓰기’를 선택), ‘암호화’ (128비트나 256비트 중 선택)를 설정한다.
- ‘암호화’를 선택하면 암호를 두 번 입력하라는 창이 나타납니다. 이 암호는 이미지를 열 때마다 필요하다.
- 디스크 이미지 생성
- 설정을 완료하고 ‘만들기’를 클릭하면 암호화된 디스크 이미지가 생성된다.
- 파일 및 폴더 복사
- 생성된 디스크 이미지를 열면 마운트된 볼륨이 Finder에 나타낸다. 이제 필요한 파일이나 폴더를 이 볼륨으로 드래그하여 복사한다.
- 디스크 이미지 사용
- 사용이 끝난 후 디스크 이미지를 언마운트(휴지통에 끌어다 두면 된다)한다. 다음에 이 이미지를 열 때는 Finder에서 해당 이미지 파일을 더블 클릭하고 암호를 입력하면 된다.
이 방법은 복잡한 명령어 입력 없이 간편하게 폴더를 암호화하고 관리할 수 있게 해준다. 암호화된 디스크 이미지 내의 데이터는 매우 안전하게 보호되며, 접근을 위해서는 설정한 암호가 반드시 필요하다.
마치며
암호는 우리의 디지털 생활에서 중요한 역할을 한다. 암호화는 우리의 개인정보와 데이터를 보호하는 데 필수적이지만, 올바르게 이해하고 사용하지 않으면 위험할 수도 있다. 암호화된 데이터는 안전하다고 할 수 있지만, 그것을 해독하는 방법을 모르면, 데이터를 영구적으로 잃어버릴 수도 있다. 따라서, 암호를 사용하기 전에는 그것에 대해 충분히 이해하고, 필요한 경우 전문가의 조언을 구하는 것이 중요하다.
암호를 사용하는 것은 단순히 암호화된 데이터에 접근하는 것 이상의 의미를 가진다. 암호화는 데이터 보안의 핵심 요소로, 올바르게 관리되지 않으면 심각한 문제를 일으킬 수 있다. 사용자는 암호를 사용할 때 항상 주의해야 하며, 특히 중요한 명령어를 입력하기 전에는 이를 다시 한 번 확인해야 한다.
이러한 주의 사항은 특히 암호화에 관련된 명령어를 입력할 때 중요하다. 복잡한 암호화 프로세스를 이해하지 못하고 명령어를 잘못 사용하면, 복호화 과정에서 오류가 발생할 수 있으며, 이는 데이터 손실이나 보안 문제로 이어질 수 있다. 따라서, 암호화 및 복호화 과정을 잘 이해하고, 필요한 경우 전문가의 조언을 구하는 것이 매우 중요하다.
마지막으로, 암호화는 기술적인 영역이기 때문에 항상 새로운 정보를 학습하고 최신 보안 트렌드에 주의를 기울여야 한다. 이러한 지식은 디지털 보안을 유지하는 데 있어 필수적이며, 올바르게 암호화된 데이터는 보안에 큰 도움이 된다. 저라고 다 정답이 아니기 때문에 정확하게 알아보고 진행 부탁 드립니다.
댓글남기기