AES로 파일을 빠르게 암호화하려면 어떻게해야합니까?


81

AES-256을 사용하여 파일을 암호화하고 싶습니다. 어떻게하면 빠르고 쉽게 할 수 있으며 어떻게하면 다른 사람이 다시 해독 할 수 있습니까?

답변:


86

불행히도 물건을 보호하는 쉬운 해결책은 없습니다. 사용 사례를 생각해보십시오. 일반 AES 이외의 것이 더 적합 할 수 있습니다.


매우 간단한 플랫폼 독립적 암호화를 원한다면 openssl 을 사용할 수 있습니다 .

참고 : 이것을 사용하여 룸메이트로부터 birthday-gift-ideas.txt를 숨길 수 있지만, 결정된 공격자로부터 안전하지는 않습니다!

  1. 주석에서 지적 했듯이이 방법은 순진한 키 파생 기능을 사용하므로 보안을 유지하려면 암호가 최상이어야합니다.
  2. 또한이 방법은 암호문을 인증하지 않으므로 공격자가 사용자 모르게 내용을 수정하거나 손상시킬 수 있습니다.
  3. 많은 유형의 보안의 경우 암호화만으로는 충분하지 않습니다 (예 : 암호화를 사용하여 안전하게 통신 할 수는 없습니다)

여전히 openssl을 사용하려는 경우 :

  • 암호화 :

    openssl aes-256-cbc -in attack-plan.txt -out message.enc

  • 복호화 :

    openssl aes-256-cbc -d -in message.enc -out plain-text.txt

암호화 및 암호 해독 base64-a스위치를 사용하여 openssl 이 메시지 를 -encode하도록 할 수 있습니다 . 이런 식으로 암호문을 전자 메일 메시지에 붙여 넣을 수 있습니다. 다음과 같이 보일 것입니다 :

stefano:~$ openssl aes-256-cbc -in attack-plan.txt -a
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
U2FsdGVkX192dXI7yHGs/4Ed+xEC3ejXFINKO6Hufnc=

암호 및 작동 모드를 선택할 수 있습니다. 정상적인 사용을 위해서는 CBC 모드에서 aes 256을 권장합니다. 사용 가능한 암호 모드는 다음과 같습니다 (AES 만 계산).

aes-128-cbc ← this is okay
aes-128-ecb
aes-192-cbc
aes-192-ecb
aes-256-cbc ← this is recommended
aes-256-ecb

또한보십시오:

참고 :

OpenSSL에서 비밀번호를 묻습니다. 이것은 암호화 키가 아니며 32 바이트로 제한되지 않습니다! 다른 사람과 파일을 전송하려는 경우 공유 비밀이 매우 강해야합니다. 이 사이트를 사용하여 암호의 상태를 알 수 있습니다.

경고 :이 사이트는 귀하의 비밀번호를 서버로 보내지 않지만 언제든지 변경 될 수 있음을 확인했습니다. 이 도구를 개발 도구 / 검사기와 함께 사용하고 강력한 암호를 입력하기 전에 전송하는 것이 있는지 확인하십시오.


9
openssl aes-256-cbc보다 짧고 openssl enc -aes-256-cbc작동합니다. 이 매뉴얼 페이지는 다음을 실행하여 사용할 수 있습니다 man enc. ecb템퍼링해서는 안되는 데이터에는 절대 사용하지 말고 항상 사용하십시오 cbc. -salt기본값이므로 중복됩니다. -out filename출력 을 생략 하면 표준 출력에 기록되므로 데이터를 분석해야하지만 디스크에 기록하지 않는 경우에 유용합니다. 다음 명령은 평문의 행 경계를 보여줍니다 openssl aes-256-cbc -d -in filename | wc -l. (다른 사용, 파일 읽기 : openssl aes-256-cbc -d -in filename | less)
Lekensteyn

1
나는 거의 정확하게 이것을 스크립트에서 사용 /usr/bin/openssl enc -aes-256-cbc -a -salt -in $1 -out ${1}.enc 합니다.
belacqua

1
@Lekensteyn 기밀 데이터에 ECB를 사용하지 마십시오. 기본적으로 ECB를 사용해서는 안됩니다 (전문가에게만 해당 : ECB는 매우 구체적인 경우를 제외하고는 사용해서는 안 됨). 보다 일반적으로, openssl명령 행 도구는 대부분 OpenSSL 라이브러리를 테스트하기위한 개념 증명입니다. 이 질문에 대한 정답은 GPG 또는 7z 와 같은 일부 아카이버 입니다.
Gilles

1
openssl enc암호가 약한 경우 실제로 안전하지 않은 것을 추가하고 싶습니다 . 이전에의 특정 사용을 권장 openssl enc했지만 gpg더 나은 방식으로 KDF를 사용하기 때문에 대신 사용 하는 것이 좋습니다 . 이 답변을 참조하십시오 .
Lekensteyn

2
-1 저수준 OpenSSL 사용을 권장합니다. HMAC 기능을 제공하지 않으며 @Lekensteyn이 지적했듯이 적절한 KDF가 없습니다.
gertvdijk

26

나는 gpg명령 을 사용하고 싶다 :

암호화 :

gpg --cipher-algo AES256 --symmetric filename.tar.gz

속기:

gpg --cipher-algo AES256 -c filename.tar.gz

암호문을 요구합니다.

해독 :

gpg --output filename.tar.gz --decrypt filename.tar.gz.gpg

속기:

gpg -o filename.tar.gz -d filename.tar.gz.gpg

당신은 또한 추가 할 수 있습니다 cipher-algo AES256~/.gnupg/gpg.confAES256 기본 만들 수 있습니다. (맨 페이지에 따르면 CAST5 )


AESAES-128을 의미 할 수도 있습니다 . AES-128은 약간 빠르며 덜 안전합니다.
Gilles

2
+1. 또한 GnuPG는 AES를 사용할 때 HMAC (메시지 인증)를 제공합니다 (OpenSSL은 작성 시점에서 가장 많이지지 된 답변이 아닙니다). 배경 정보 : superuser.com/a/633716/157409
gertvdijk

gpg비밀번호 캐싱을 방지 하려면 어떻게해야합니까?
user76284

16

7z ( 비밀번호 옵션 사용시)는 256 비트 AES 암호화 (SHA256 키 확장 사용)를 사용합니다 .

설치 ( p7zip-full)하고 암호화하려는 파일 또는 디렉토리를 마우스 오른쪽 단추로 클릭 한 후 압축 , .7z기타 옵션 / 비밀번호를 선택하십시오 .

여기에 이미지 설명을 입력하십시오

해독하려면 .7z 파일을 마우스 오른쪽 버튼으로 클릭하고 여기에서 추출을 선택 하십시오 .


1
7z 용 GUI를 어떻게 시작합니까?
m0skit0

4

aescrypt

링크 된 웹 사이트에는 오픈 소스 256 비트 aes 암호화 / 암호 해독 도구가 포함되어 있으며 Java를 통한 MacO, Windows, Linux 등의 다중 플랫폼입니다.

암호화 : aescrypt -e <file>

해독 : aescrypt -d <file>

다음 구문을 사용하여 홈 폴더를 백업하고 암호화 할 수 있습니다.

tar -cvf - /home/<home_folder> | aescrypt -e -p <password_message> - > backup.tar.aes

우분투 설치

소스 다운로드 및 추출

make
sudo make install

다른 플랫폼

웹 사이트에서 바이너리 또는 소스 코드를 다운로드하십시오.


3

내가 제안한 많은 제안이 이미이 글에서 제시되었습니다. 기본적으로 openssl은 파일 또는 스크립트를 암호화하는 가장 쉬운 방법입니다. 그러나 일부 플랫폼 에서 모든 버전의 openssl을 사용할 수 없기 때문에 AES-256 을 사용 하지 않는 것이 좋습니다. 대부분의 최신 OS (예 : Linux)가 있습니다. 그러나 AIX 5.3과 같은 다른 제품은 그렇지 않습니다 (HP-UX도 생각합니다). 다른 플랫폼에서 파일이나 스크립트를 사용하려면 AES-128을 사용하는 것이 좋습니다 .

AES-128을 사용하여 어떻게 파일을 "빠르고 쉽게"암호화 할 수 있습니까?

www.ShellScrypt.com 과 같은 사이트 는 openssl AES-128을 사용하여 쉘 스크립트를 암호화 한 다음 암호화 된 스크립트 사본을 실행 가능하게 만듭니다. 스크립트를 사이트에 붙여 넣기 만하면 zip 파일이 생성됩니다. 해당 zip 파일에는 파일의 암호화 된 버전 (스크립트 인 경우 실행 파일)이 포함됩니다. 이것은 당신이 "할 수 있습니다 쉽게 "과 " 편리하게 "당신이 스크립트를 사용하거나하려면 openssl 명령의 여러 가지 복잡하고 혼란 주술을 실행하려는 모든 시스템에있는 모든 패키지 또는 모듈의 요구 사항을 만족하지 않고 파일 / 스크립트를 암호화합니다.

아래는 AES-128을 사용 하는 기본 암호화 / 암호 해독 openssl 명령입니다.

test@test-VirtualBox:~$ 
test@test-VirtualBox:~$ echo precious-content | openssl aes-128-cbc -a -salt -k mypassword
U2FsdGVkX1+K6tvItr9eEI4yC4nZPK8b6o4fc0DR/Vzh7HqpE96se8Fu/BhM314z
test@test-VirtualBox:~$
test@test-VirtualBox:~$ echo U2FsdGVkX1+K6tvItr9eEI4yC4nZPK8b6o4fc0DR/Vzh7HqpE96se8Fu/BhM314z | openssl aes-128-cbc -a -d -salt -k mypassword
precious-content
test@test-VirtualBox:~$ 
test@test-VirtualBox:~$

2
“shellscrypt.com”이 다운되었다는 의견을 남기기 만하면됩니다 (일명 사이트가 사라졌습니다).
e-sushi

1

Stefano Palazzo의 답변에 덧붙여 base64 명령과 비슷하게 작동하는 작은 bash 함수를 만들었습니다.

파일을 aes256으로 암호화 한 다음 base64로 인코딩합니다. 반대로 할 때는 base64 디코딩, 암호 해독 및 원본 일반 텍스트를 뱉어냅니다.

aes256() {
  decodeMe=""
  isPipe="$([ ! -t 0 ] && echo "true" || echo "false")"

  if [ "$1" = '-d' ] || [ "$1" = '--decode' ]; then
    decodeMe="-d"
    shift
  fi

  if [ "$isPipe" = "true" ]; then
    read input
    printf '%s\n' "$input" | openssl aes-256-cbc -a $decodeMe
    exitCode="$?"
  else
    openssl aes-256-cbc -a $decodeMe -in "$*"
    exitCode="$?"
  fi

  unset isPipe decodeMe input
  return "$exitCode"
}

용법:

echo "my string" | aes256
# enter aes-256-cbc encryption password
# Returns: U2FsdGVkX1++e/BhBGlNOzNvarqq7zI13S/hbiKVzXQ=

echo "U2FsdGVkX1++e/BhBGlNOzNvarqq7zI13S/hbiKVzXQ=" | aes256 -d
# enter aes-256-cbc decryption password
# Returns: my string

aes256 file.plain > file.crypt
# enter aes-256-cbc encryption password

aes256 -d file.crypt
# enter aes-256-cbc decryption password
# Spits out original unencrypted file.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.