AESでファイルをすばやく暗号化するにはどうすればよいですか?


回答:


86

残念ながら、あなたのものを保護する簡単な解決策はありません。ユースケースについて考えてみてください。おそらく、単純なAES以外のものが適しています。


プラットフォームに依存しない非常に単純な暗号化が必要な場合は、opensslを使用できます。

注:これを使用して、roommateから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使用すると、opensslでメッセージをエンコードできます-a。この方法で、たとえば、暗号文を電子メールメッセージに貼り付けることができます。次のようになります。

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 encecbテンパリングしないデータには使用しないで、常にを使用します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 します。期待どおりの逆です。
ベラク

1
AES 128よりもAES 256を好む理由はありません。@ Lekensteyn機密データにもECBを使用しないでください。より一般的には、opensslコマンドラインツールは、OpenSSLライブラリをテストするための概念実証です。この質問に対する正しい答えは、GPGまたは7zなどのアーカイバです。
ジル14

1
openssl encパスワードが弱い場合、実際にはそれほど安全ではないことを付け加えます。以前はの特定の使用をお勧めしていましたが、より良い方法でKDF openssl encを使用gpgするため、代わりに使用することをお勧めします。この回答をご覧ください。
Lekensteyn

2
-1低レベルのOpenSSLの使用を推奨する場合。HMAC機能は提供されず、@ Lekensteynが指摘しているように、適切なKDFがありません。
gertvdijk 14

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.confて、AES256をデフォルトにすることもできます。(マンページによると、CAST5です


AES(AES-128を意味する)も使用できます。AES-128はわずかに高速であり、安全性も劣りません。
ジル14

2
+1。また、GnuPGはAESを使用するときにメッセージ認証(HMAC)を提供することにも注意してください(執筆時点ではOpenSSLが最も有望な回答ではありません)。背景情報:superuser.com/a/633716/157409
gertvdijk 14

gpgパスワードのキャッシュを防ぐにはどうすればよいですか?
user76284

16

7zパスワードオプションを使用する場合)は、256ビットAES暗号化を使用します(SHA256 キーストレッチングを使用)。

インストール(p7zip-full)し、暗号化するファイルまたはディレクトリを右クリックして、圧縮.7zおよびその他のオプション / パスワードを選択します

ここに画像の説明を入力してください

復号化するには、.7zファイルを右クリックし、ここで抽出を選択します


1
7zのGUIはどのように起動しますか?
m0skit0

4

aescrypt

リンクされたWebサイトには、オープンソースの256ビットaes暗号化/復号化ツールが含まれており、MacO、Windows、Linuxなど、Javaを介したマルチプラットフォームです。

暗号化: aescrypt -e <file>

復号化: aescrypt -d <file>

次の構文を使用して、ホームフォルダーをバックアップおよび暗号化できます。

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

Ubuntuのインストール

ソースをダウンロードして抽出する

make
sudo make install

他のプラットフォーム

Webサイトからバイナリまたはソースコードをダウンロードします。


3

私がしたであろう多くの提案は、このスレッドですでに出されていました。基本的に、opensslはファイルまたはスクリプトを暗号化する最も簡単な方法です。ただし、一部のプラットフォームのopensslのすべてのバージョンで使用できないという理由だけで、AES-256の使用には注意してください。ほとんどの新しいOS ...すなわちLinuxはそれを持っています。しかし、AIX 5.3などのその他のものはそうではありません(HP-UXも同様だと思います)。さまざまなプラットフォームでファイルまたはスクリプトを使用する場合は、AES-128をどこでも使用できるため、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寿司

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.