Bagaimana cara cepat mengenkripsi file dengan AES?

81

Saya ingin mengenkripsi file menggunakan AES-256. Bagaimana saya bisa melakukannya dengan cepat dan mudah, dan bagaimana saya bisa - atau orang lain - mendekripsi lagi?

Stefano Palazzo
sumber

Jawaban:

86

Sayangnya, tidak ada solusi mudah untuk mengamankan barang-barang Anda. Pikirkan tentang use case Anda, mungkin sesuatu selain AES biasa lebih cocok.


Jika Anda ingin enkripsi independen platform yang sangat sederhana, Anda dapat menggunakan openssl .

Harap dicatat: Anda dapat menggunakan ini untuk menyembunyikan birthday-gift-ideas.txt dari teman sekamar Anda, tetapi jangan berharap itu aman terhadap penyerang yang gigih!

  1. Seperti yang ditunjukkan dalam komentar, metode ini menggunakan fungsi derivasi kunci naif, sehingga kata sandi Anda harus sangat baik agar Anda memiliki peluang untuk merasa aman.
  2. Selain itu, metode ini tidak mengautentikasi ciphertext, yang berarti penyerang dapat mengubah atau merusak konten tanpa Anda sadari.
  3. Untuk banyak jenis keamanan, enkripsi tidak cukup (mis. Anda tidak bisa hanya menggunakan enkripsi untuk berkomunikasi dengan aman)

Jika Anda masih ingin menggunakan openssl:

  • Enkripsi:

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

  • Dekripsi:

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

Anda bisa mendapatkan openssl ke base64-encode pesan dengan menggunakan -asakelar enkripsi dan dekripsi. Dengan cara ini, Anda dapat menempelkan ciphertext dalam pesan email, misalnya. Ini akan terlihat seperti ini:

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=

Perhatikan bahwa Anda memiliki pilihan cipher dan mode operasi. Untuk penggunaan normal, saya sarankan aes 256 dalam mode CBC. Ini adalah mode sandi yang Anda miliki (hanya menghitung 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

Lihat juga:

Tolong dicatat:

OpenSSL akan meminta Anda kata sandi. Ini bukan kunci enkripsi, tidak terbatas pada 32 byte! Jika Anda akan mentransfer file dengan orang lain, rahasia Anda yang dibagikan harus sangat kuat. Anda dapat menggunakan situs ini untuk mengetahui seberapa baik kata sandi Anda:

Peringatan: Saya telah memeriksa bahwa situs-situs ini tidak mengirimkan kata sandi Anda ke server, tetapi itu dapat berubah sewaktu-waktu. Gunakan situs-situs ini dengan alat dev / inspektur dan periksa apakah mereka mengirim sesuatu sebelum mengetikkan kata sandi Anda yang kuat.

Stefano Palazzo
sumber
9
openssl aes-256-cbclebih pendek dari openssl enc -aes-256-cbcdan berfungsi juga. Halaman manual untuk ini tersedia dengan menjalankan man enc. Jangan pernah gunakan ecbuntuk data yang tidak bisa di-tempered, selalu gunakan cbc. -saltredundan karena default. Jika Anda menghilangkan -out filenameoutput akan ditulis ke output standar yang berguna jika Anda hanya perlu menganalisis data, tetapi tidak menuliskannya ke disk. THe perintah selanjutnya menunjukkan cound baris untuk plaintext: openssl aes-256-cbc -d -in filename | wc -l. (penggunaan lain, membaca file: openssl aes-256-cbc -d -in filename | less)
Lekensteyn
1
Saya menggunakan hampir persis ini dalam naskah: /usr/bin/openssl enc -aes-256-cbc -a -salt -in $1 -out ${1}.enc dengan kebalikannya seperti yang Anda harapkan.
belacqua
1
Tidak ada alasan untuk memilih AES 256 hingga AES 128. @Lekensteyn Jangan pernah menggunakan ECB untuk data rahasia juga - pada dasarnya ECB tidak boleh digunakan (hanya untuk para ahli: ECB tidak boleh digunakan kecuali dalam beberapa kasus yang sangat spesifik). Secara umum, opensslalat baris perintah sebagian besar merupakan bukti konsep untuk menguji pustaka OpenSSL. Jawaban yang tepat untuk pertanyaan ini adalah GPG atau pengarsip seperti 7z .
Gilles
1
Saya ingin menambahkan yang openssl encsebenarnya tidak terlalu aman jika Anda memiliki kata sandi yang lemah. Saya sebelumnya merekomendasikan penggunaan tertentu openssl enc, tetapi sekarang menyarankan untuk menggunakannya gpgkarena menggunakan KDF dengan cara yang lebih baik. Lihat jawaban ini .
Lekensteyn
2
-1 Untuk merekomendasikan penggunaan OpenSSL tingkat rendah. Ia tidak menyediakan fungsionalitas HMAC dan seperti yang ditunjukkan oleh @Lekensteyn, ia tidak memiliki KDF yang tepat.
gertvdijk
26

Saya suka menggunakan gpgperintah:

Enkripsi:

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

Steno:

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

Ini akan meminta kata sandi.

Dekripsi:

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

Steno:

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

Anda juga dapat menambahkan cipher-algo AES256untuk ~/.gnupg/gpg.confmembuat AES256 default. (Menurut halaman manual itu adalah CAST5 )

scrrr
sumber
Anda juga dapat menggunakan AES(artinya AES-128). AES-128 sedikit lebih cepat dan tidak kalah aman.
Gilles
2
+1. Juga perhatikan bahwa GnuPG juga menyediakan otentikasi pesan (HMAC) untuk Anda saat menggunakan AES (yang OpenSSL tidak memiliki jawaban paling banyak dipilih pada saat penulisan). Info latar belakang: superuser.com/a/633716/157409
gertvdijk
Bagaimana saya mencegah gpgcaching kata sandi?
user76284
16

7z (ketika opsi kata sandi digunakan) menggunakan enkripsi AES 256bit (dengan peregangan kunci SHA256 ).

Instal ( p7zip-full), klik kanan pada file atau direktori yang ingin Anda enkripsi, dan pilih Kompres , .7z dan Opsi / Kata Sandi lainnya .

masukkan deskripsi gambar di sini

Untuk dekripsi, klik kanan pada file .7z dan pilih Ekstrak di sini .

mengatur
sumber
1
Bagaimana Anda meluncurkan GUI untuk 7z?
m0skit0
4

aescrypt

Situs web tertaut berisi alat 256-bit aes mengenkripsi / mendekripsi alat open-source dan multiplatform - MacO, Windows, Linux, dan lainnya melalui Java.

Enkripsi: aescrypt -e <file>

Dekripsi: aescrypt -d <file>

Anda dapat membuat cadangan dan mengenkripsi folder beranda menggunakan sintaks:

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

instalasi ubuntu

Unduh dan ekstrak sumbernya

make
sudo make install

platform lain

Unduh binari atau kode sumber dari situs web.

kebebasan fosil
sumber
3

Banyak saran yang saya buat sudah diajukan di utas ini. Pada dasarnya, openssl adalah cara termudah untuk mengenkripsi file atau skrip. Namun, saya akan memperingatkan untuk tidak menggunakan AES-256 hanya karena tidak tersedia di semua versi openssl pada beberapa platform. Sebagian besar OS yang lebih baru ... yaitu Linux memilikinya. Tetapi yang lain seperti AIX 5.3 tidak (saya pikir juga HP-UX). Jika Anda ingin menggunakan file atau skrip Anda di berbagai platform, saya sangat menyarankan menggunakan AES-128 karena ini tersedia di mana-mana.

Bagaimana Anda bisa "dengan cepat dan mudah" mengenkripsi file menggunakan AES-128?

Situs seperti www.ShellScrypt.com menggunakan openssl AES-128 dengan cukup intens untuk mengenkripsi skrip shell dan kemudian membuat salinan terenkripsi dari skrip dieksekusi. Yang harus Anda lakukan adalah menempelkan skrip ke situs, dan file zip akan dibuat untuk Anda. File zip itu akan berisi versi file Anda yang terenkripsi (dan dapat dieksekusi). Ini memungkinkan Anda untuk " dengan mudah " dan "dengan mudah " mengenkripsi file / skrip tanpa harus memenuhi persyaratan paket atau modul pada setiap sistem yang Anda maksudkan untuk menggunakan skrip atau menjalankan beberapa mantra kompleks dan membingungkan perintah openssl.

Yang ditunjukkan di bawah ini adalah perintah openssl mengenkripsi / mendekripsi dasar yang menggunakan AES-128:

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:~$
SimplifiedWorkings
sumber
2
Hanya meninggalkan komentar untuk memberi kepala-up bahwa "shellscrypt.com" turun dan keluar (alias: situs hilang).
e-sushi
1

Menambah jawaban Stefano Palazzo, saya membuat fungsi bash kecil yang bekerja mirip dengan perintah base64.

Itu akan aes256 mengenkripsi file, dan kemudian base64 menyandikannya. Ketika melakukan kebalikannya, itu akan base64 decode, decrypt, dan kemudian memuntahkan teks asli.

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"
}

Pemakaian:

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.
agregat1166877
sumber