Haruskah programmer yang membuat situs web / aplikasi web memahami kriptografi? Saya tidak tahu bagaimana kebanyakan algoritma kriptografi bekerja, dan saya benar-benar tidak mengerti perbedaan antara md5 / des / aes / etc. Adakah di antara Anda yang merasa perlu untuk memahami kriptografi secara mendalam?
Saya belum membutuhkannya, tetapi saya bertanya-tanya apakah mungkin saya kehilangan sesuatu. Saya telah menggunakan hash garam + md5 untuk mengenkripsi kata sandi, dan saya memberi tahu webservers untuk menggunakan SSL. Di luar itu, saya tidak bisa mengatakan saya telah menggunakan banyak hal lain, saya juga tidak bisa mengatakan dengan pasti seberapa aman metode ini. Saya hanya menggunakannya karena orang lain mengklaim mereka aman.
Pernahkah Anda menemukan kebutuhan untuk menggunakan kriptografi dalam pemrograman web selain dari dua contoh sederhana ini?
sumber
Jawaban:
Pemrogram web harus tahu bahwa mereka seharusnya tidak pernah mencoba menerapkan kriptografi sendiri.
Secara khusus, itu berarti bahwa tidak ada pakar non-keamanan yang boleh menyentuh primitif kriptografi secara langsung. Mereka seharusnya tidak berpikir di tingkat AES, SHA-1, dll. Sebaliknya, mereka harus menggunakan fungsi tingkat tinggi untuk mengenkripsi dan menandatangani pesan, dan untuk kata sandi "hash".
Mengapa? Karena kalau tidak, orang akan tersesat untuk berpikir bahwa:
Hanya untuk berada di halaman yang sama, tidak satupun dari item di atas baik-baik saja . Jika Anda tidak mendapatkan itu, maka Anda seharusnya tidak menyentuh crypto dengan tiang 10 kaki! (AES-256 adalah enkripsi yang hebat, tetapi hanya jika Anda menggunakannya dengan benar. "Ini bukan ukuran yang penting, itu yang Anda lakukan dengan itu." :-))
Apa fungsi tingkat tinggi yang saya bicarakan? Saya pribadi merekomendasikan penggunaan perpustakaan OpenPGP (untuk data saat istirahat) atau SSL (untuk data bergerak). Protokol-protokol ini secara kaku menentukan penggunaan yang benar dari algoritma asimetris, simetris, dan hash. Misalnya, dengan OpenPGP:
EME-PKCS1-v1_5
). Padding sangat penting untuk RSA. ( Beberapa orang berpikir menggunakan bantalan v1.5 tidak apa-apa. Yang lain berpikir OAEP lebih baik. )Rangkuman: jika Anda bukan ahli keamanan, dan Anda berpikir pada level AES, atau SHA-1, atau MD5, Anda melakukan kesalahan . Gunakan pustaka yang ditulis oleh pakar keamanan (seperti Bouncy Castle), yang mengimplementasikan protokol yang dirancang oleh pakar keamanan (seperti OpenPGP untuk enkripsi, atau bcrypt atau scrypt untuk hashing kata sandi), alih-alih menggulirkan sendiri.
Saya bukan ahli crypto dengan cara apa pun, tetapi saya cukup tahu untuk tidak mencoba merancang protokol ad-hoc saya sendiri. Supaya jelas, seluruh posting ini adalah materi Kriptografi 101 . Jadi, jika posting ini tidak 100% masuk akal bagi Anda, maka Anda pasti tidak perlu mendekati kriptografi.
sumber
Anda tidak perlu tahu apa-apa selain dasar-dasar tentang kriptografi (apa itu hash, apa itu garam, kira-kira seberapa sulit untuk memecahkan enkripsi ini atau itu dan seterusnya), tetapi Anda harus tahu sedikit tentang keamanan di umum.
Area keamanan utama yang harus Anda perhatikan sebagai pengembang web:
sumber
Saya ingat melihat ceramah ini berjudul Apa yang Harus Diketahui Setiap Insinyur tentang Keamanan dan Di mana Mempelajarinya , pembicara adalah Neil Daswani dan itu adalah Google Tech Talk yang diberikannya, mungkin tempat yang baik untuk memulai!
Tidak berlaku hanya untuk Pemrogram Web, mungkin pertanyaannya harus berjudul kembali "Apa yang harus diketahui pemrogram tentang keamanan?" karena mereka tidak perlu tahu lebih banyak daripada dasar-dasar tentang Kriptografi (semenarik mungkin)
sumber
Crypto sangat berguna dalam banyak situasi. Contoh yang kami gunakan adalah mengenkripsi cookie sesi yang dibuat dan ditetapkan oleh host Win / IIS untuk digunakan pada host LAMP.
Jika Anda ingin menerapkan enkripsi (sebagai lawan dari hashing md5 / sha1), beberapa istilah dasar penting - seperti perbedaan antara enkripsi simetris dan asimetris. Seiring dengan memahami perbedaan antara keduanya, Anda harus mengembangkan pemahaman tentang apa yang Anda sebagai pengembang web perlu lakukan untuk menyimpan dan mengamankan kunci dekripsi dengan benar. Misalnya, jika mengembangkan aplikasi yang akan digunakan pada host di mana Anda tidak memiliki kontrol administratif penuh, seperti host bersama, vs menggunakan pada server di mana semua admin dikenal dan dipercaya.
sumber
Menurut pendapat saya, Anda harus tahu segalanya tentang kriptografi yang akan diketahui seseorang yang menyerang kode Anda. Anda harus memahami hash, garam, non-acak, algoritma enkripsi utama (RSA, 3DES, AES, dll), SHA-1 / MD-5 / et al. Anda tidak harus mengingatnya, tetapi Anda setidaknya harus tahu bahwa efektivitas algoritma hash dan cara membuatnya lebih kuat. Anda harus tahu apa tabrakan dan positif palsu. Anda seharusnya tidak bisa membaca algoritma enkripsi, tetapi Anda harus terbiasa dengan tolok ukurnya, mana yang ideal untuk skenario mana. Anda harus dapat menjelaskan dan menjelaskan enkripsi simetris vs asimetris dan kapan menggunakannya. Anda harus tahu apa itu PKI dan bagaimana PKI digunakan. Anda harus tahu apa itu otoritas sertifikat dan bagaimana interaksi dengan server Anda.
Mengetahui seluk beluk segalanya tidak sepenting mengetahui latar belakangnya. Apa tolok ukur hal-hal tertentu (seberapa cepat, seberapa kuat, kelemahan, dll).
Rekomendasi ini untuk informasi tingkat senior atau arsitek. Jika Anda hanya monyet web mendayung dayung, Anda tidak perlu tahu semua ini. Arsitek Anda harus mengetahui hal ini. Jika Anda bertanggung jawab atas situs, merancang, mengimplementasikannya, dll ... maka Anda harus terbiasa dengan semua konsep ini dan dapat berkomunikasi secara cerdas tentang mereka. Anda tidak harus bisa mengajarkannya, cukup terima dan sebarkan informasi tentangnya.
sumber
Anda harus menggunakan bcrypt (Blowfish) untuk menyimpan kata sandi dan bukan MD5; ini adalah algoritma yang jauh lebih lambat , yang artinya jauh lebih sulit untuk ditebak dan diperiksa oleh peretas. Selain itu, bcrypt menggunakan faktor kerja sebagai parameter, yang berarti ia bisa menjadi lebih lambat saat komputer baru diperkenalkan, sehingga memiliki built-in proofing di masa depan.
Lihat Cara Menyimpan Kata Sandi Secara Aman untuk info lebih lanjut.
sumber
Sebagai jawaban yang cukup umum untuk pertanyaan-pertanyaan semacam ini saya selalu berpikir bahwa Anda harus mencoba untuk memiliki pemahaman dasar tentang apa pun yang terkait dengan apa yang Anda lakukan dari jarak jauh. Tentu saja Anda membutuhkan pengetahuan rinci khusus tentang apa yang sebenarnya sedang Anda kerjakan. Sangat sulit untuk memprediksi bagaimana suatu daerah tertentu akan berevolusi, apa yang akan menjadi "dalam mode" atau apa yang Anda butuhkan di masa depan, sehingga memiliki area yang luas yang setidaknya Anda "dengar" akan tetap ada banyak pintu terbuka.
Sejauh pengalaman pribadi saya dalam pemrograman web, saya menemukan gagasan dasar tentang kriptografi asimetris dan hal-hal yang membantu untuk memahami apa yang terjadi di bawah tenda. Saya bisa bertahan hidup tanpa itu tetapi saya harus mengatakan saya menikmati kriptografi dan matematika jadi mengapa tidak.
sumber