it-swarm-id.com

Apa crypto yang realistis, dan paling aman untuk cipher kode Symmetric, Asymmetric, Hash, Message Authentication?

Saya tertarik untuk memperbarui pertanyaan bercabang dua ini untuk 2011:

  1. Kriptologi apa yang paling sesuai untuk perangkat berdaya rendah (seperti ponsel), namun tetap efektif?

  2. Kriptologi apa yang paling aman untuk pengembang .NET?

Pada bulan November '08 Rasmus Faber jawab ini pertanyaan Stack Overflow serupa dengan respons ini:

  • Cipher simetris: AES-256

  • Cipher asymmetric: RSA dengan kunci 4096 bit (saya percaya itu adalah maksimum dalam .NET) atau ECDSA dengan kunci 571 bit (tapi itu hanya didukung di .NET 3.5)

  • Hash: SHA-512

  • Kode Otentikasi Pesan: HMAC dengan SHA-512

Yang sedang berkata, itu berlebihan untuk sebagian besar aplikasi, dan Anda harus melakukannya dengan baik menggunakan AES-128, RSA dengan kunci 2048 bit, SHA-256 dan HMAC dengan SHA-256.

Apakah rekomendasi ini masih berlaku hari ini?

24

Rekomendasi yang Anda kutip agak berlebihan. Satu hal yang perlu dipertimbangkan adalah bahwa di luar tingkat tertentu (mis. Pada ukuran kunci atau ukuran keluaran fungsi hash), semua fungsi "tidak dapat dipecahkan dengan teknologi yang dapat diperkirakan" dan agak sulit untuk membandingkannya. Menyatakan bahwa SHA-512 "lebih kuat" daripada SHA-256 berarti bahwa Anda membayangkan bahwa SHA-256 dapat rusak, yang, sejauh yang dapat kami katakan untuk saat ini dan 40 tahun ke depan, tidak benar (di atas 40 tahun , mencoba membayangkan teknologi apa yang bisa kita miliki adalah berisiko; 40 tahun yang lalu, tidak ada yang membayangkan Internet seperti sekarang ini, tetapi kebanyakan orang berasumsi bahwa pada 2010 kita semua akan mengendarai mobil terbang).

AES-128 sudah cukup aman, dan lebih murah (AES-256 menggunakan 14 putaran, sedangkan AES-128 menggunakan 10 putaran).

Kunci RSA rusak terbesar saat ini adalah modulus 768-bit, dan butuh upaya besar (empat tahun, dan otak yang sangat besar). Kunci 1024-bit dianggap dapat digunakan untuk keamanan jangka pendek, meskipun kunci yang lebih besar dianjurkan. Kunci 2048-bit sesuai. Menggunakan kunci dua kali lebih besar berarti 8 kali lebih banyak pekerjaan untuk penandatanganan atau dekripsi, sehingga Anda tidak ingin berlebihan. Lihat situs ini untuk survei tentang bagaimana panjang kunci RSA dapat dikaitkan dengan keamanan.

ECDSA melalui kurva 256-bit sudah mencapai tingkat keamanan "tidak bisa dipecahkan" (mis. Kira-kira tingkat yang sama dari AES dengan kunci 128-bit, atau SHA-256 terhadap tabrakan). Perhatikan bahwa ada kurva elips di bidang utama, dan kurva di bidang biner; jenis mana yang paling efisien tergantung pada perangkat keras yang terlibat (untuk kurva dengan ukuran yang sama, PC akan lebih memilih kurva pada bidang utama, tetapi perangkat keras khusus akan lebih mudah dibangun dengan bidang biner; CLMUL instruksi pada prosesor Intel dan AMD yang lebih baru dapat mengubah itu).

SHA-512 menggunakan operasi 64-bit. Ini cepat pada PC, tidak begitu cepat pada smartcard. SHA-256 seringkali lebih baik pada perangkat keras kecil (termasuk arsitektur 32-bit seperti router rumah atau smartphone).

Saat ini, sistem RFID murah bertenaga terlalu rendah untuk menggunakan salah satu di atas (dengan kata lain, sistem RFID yang tidak semurah mungkin). Sistem RFID masih menggunakan algoritme khusus yang sering dipertanyakan keamanannya. Ponsel, di sisi lain, memiliki daya CPU yang cukup untuk melakukan kriptografi yang tepat dengan AES atau RSA (ya, bahkan ponsel non-pintar yang murah).

38
Thomas Pornin

Jawaban yang dikutip adalah tanggapan saya terhadap crypto yang paling aman di .NET.

Rekomendasi saya (baik untuk perangkat bertenaga tinggi dan rendah):

  • Cipher simetris: AES-128

  • Cipher asimetris: RSA dengan kunci 2048 bit atau ECDSA/ECDH dengan kunci 256 bit

  • Hash: SHA-256

  • Kode Otentikasi Pesan: HMAC dengan SHA-256

  • Stream cipher: AES-128 dalam mode CTR

11
Rasmus Faber

Dalam hal keamanan, rekomendasi ini masih valid dan sama dengan yang akan saya buat.

Untuk sandi asimetris, sebenarnya ada tiga hal yang Anda perhatikan: enkripsi, pertukaran kunci, dan tanda tangan. RSA dapat berupa skema enkripsi dan tanda tangan, sedangkan ECDSA secara khusus merupakan tanda tangan. Namun ada versi kurva eliptik dari enkripsi dan pertukaran kunci juga (tidak yakin apa yang ada di domain publik). Yang mengatakan, ukuran parameternya sama untuk ketiganya.

Satu-satunya cara lain adalah bahwa SHA-256/512 akan segera diganti tetapi "segera" dalam hal ini adalah 2012.

Mengenai bertenaga rendah, itu benar-benar tergantung pada seberapa bertenaga rendah. Jika dengan ponsel, maksud Anda smartphone, semua ini sesuai. Untuk kartu pintar, RFID, jaringan sensor, dll. Itu adalah cerita yang berbeda. Juga, sebagian besar algoritma berdaya rendah tidak akan ada di perpustakaan standar. Namun saya akan mengarahkan Anda ke ukuran parameter dalam kalimat terakhir "tidak berlebihan".

6
PulpSpy

Untuk keamanan sepanjang tahun 2030, orang-orang cerdas di NIST merekomendasikan setidaknya SHA-224, 2048 bit untuk RSA atau DSA, 224-bit EDCSA, dan AES-128 atau 3-key triple-DES digunakan.

Berdasarkan hasil kerja mereka, pada akhir 2010, pemerintah AS mencela algoritma ini: SHA-1, RSA atau DSA 1024-bit, ECDSA 160-bit (kurva eliptik), 2TDEA 80/112-bit (dua kunci triple DES )

Untuk info lebih lanjut, lihat posting ini dan NIST mendokumentasikan rujukannya: http://securitymusings.com/article/1587/algorithm-and-key-length-deprecation

6
nealmcb

Cryptographic Right Answers oleh Colin Percival pada 2009 masih cukup banyak IMHO terbaru dan mencakup pertanyaan dan banyak lagi.

5
Bruno Rohée

Untuk sandi simetris, Anda mungkin lebih baik menggunakan AES-128 daripada AES-256 karena kemungkinan kelemahan dalam jadwal kunci untuk AES-256: http://www.schneier.com/blog/archives/2009/ 07/another_new_aes.html

2
Justin Clarke

Apa yang kami lakukan adalah memilih beberapa metode enkripsi dan hashing dan mengkonversi semua output ke format hex umum. Data kami yang paling sensitif menggunakan SHA-256 dan DES-3, sementara data yang kurang sensitif yang dapat ditebak dengan mudah adalah menggunakan MD5 & RC4 dan kami juga menggunakan konversi XOR untuk beberapa hal. Setiap sandi simetris memiliki kata sandi sendiri dan semua data yang dienkripsi dikunci dengan jumlah cek. Mengandalkan satu enkripsi untuk semuanya berbahaya.

0
Dave