Saya melihat banyak kebingungan antara hash dan algoritma enkripsi dan saya ingin mendengar beberapa saran ahli tentang:
Kapan harus menggunakan hash vs enkripsi
Apa yang membuat algoritma hash atau enkripsi berbeda (dari tingkat teoretis / matematis) yaitu apa yang membuat hash tidak dapat dibatalkan (tanpa bantuan pohon pelangi)
Berikut adalah beberapa Pertanyaan SO yang serupa yang tidak terlalu detail seperti yang saya cari:
Apa perbedaan antara Kebingungan, Hashing, dan Enkripsi?
Perbedaan antara enkripsi dan hashing
security
encryption
hash
cryptography
Kenny Cason
sumber
sumber
Jawaban:
Anda bisa mencarinya di Wikipedia ... Tapi karena Anda ingin penjelasan, saya akan melakukan yang terbaik di sini:
Fungsi Hash
Mereka menyediakan pemetaan antara input panjang arbitrer, dan output (biasanya) panjang tetap (atau lebih kecil). Ini bisa berupa apa saja, dari crc32 sederhana, hingga fungsi hash kriptografis yang penuh sesak nafas seperti MD5 atau SHA1 / 2/256/512. Intinya adalah bahwa ada pemetaan satu arah yang terjadi. Selalu ada banyak: 1 pemetaan (berarti akan selalu ada tabrakan) karena setiap fungsi menghasilkan output yang lebih kecil daripada yang bisa dimasukkan (Jika Anda memasukkan setiap file 1mb ke MD5, Anda akan mendapatkan banyak tabrakan).
Alasan mereka sulit (atau tidak mungkin secara praktis) untuk dibalik adalah karena cara mereka bekerja secara internal. Sebagian besar fungsi hash kriptografis beralih pada input yang ditetapkan berkali-kali untuk menghasilkan output. Jadi jika kita melihat pada setiap panjang input yang tetap (yang bergantung pada algoritma), fungsi hash akan memanggil keadaan saat ini. Ini kemudian akan beralih ke negara dan mengubahnya ke yang baru dan menggunakannya sebagai umpan balik ke dirinya sendiri (MD5 melakukan ini 64 kali untuk setiap sepotong data 512bit). Itu kemudian entah bagaimana menggabungkan status yang dihasilkan dari semua iterasi ini kembali bersama untuk membentuk hash yang dihasilkan.
Sekarang, jika Anda ingin men-decode hash, pertama-tama Anda harus mencari cara untuk membagi hash yang diberikan menjadi status iterasi (1 kemungkinan input lebih kecil dari ukuran sepotong data, banyak untuk input lebih besar). Maka Anda harus membalikkan iterasi untuk setiap negara. Sekarang, untuk menjelaskan mengapa ini adalah sangat sulit, bayangkan mencoba untuk menyimpulkan
a
danb
dari rumus berikut:10 = a + b
. Ada 10 kombinasi positifa
danb
yang dapat bekerja. Sekarang lewati beberapa kali:tmp = a + b; a = b; b = tmp
. Untuk 64 iterasi, Anda akan memiliki lebih dari 10 ^ 64 kemungkinan untuk dicoba. Dan itu hanya tambahan sederhana di mana beberapa negara dipertahankan dari iterasi ke iterasi. Fungsi hash nyata melakukan lebih dari 1 operasi (MD5 melakukan sekitar 15 operasi pada 4 variabel keadaan). Dan karena iterasi berikutnya tergantung pada keadaan sebelumnya dan sebelumnya dihancurkan dalam menciptakan kondisi saat ini, itu semua tidak mungkin untuk menentukan keadaan input yang mengarah ke status output yang diberikan (untuk setiap iterasi tidak kurang). Gabungkan bahwa, dengan sejumlah besar kemungkinan yang terlibat, dan memecahkan kode bahkan MD5 akan mengambil jumlah sumber daya yang hampir tak terbatas (tetapi bukan tak terbatas). Begitu banyak sumber daya sehinggaFungsi Enkripsi
Mereka menyediakan pemetaan 1: 1 antara input dan output panjang yang sewenang-wenang. Dan mereka selalu bisa dibalik. Yang penting untuk dicatat adalah itu dapat dibalik menggunakan beberapa metode. Dan selalu 1: 1 untuk kunci yang diberikan. Sekarang, ada beberapa input: pasangan kunci yang mungkin menghasilkan output yang sama (sebenarnya biasanya ada, tergantung pada fungsi enkripsi). Data terenkripsi yang baik tidak bisa dibedakan dari kebisingan acak. Ini berbeda dari output hash yang baik yang selalu dari format yang konsisten.
Gunakan Kasing
Gunakan fungsi hash ketika Anda ingin membandingkan nilai tetapi tidak dapat menyimpan representasi polos (karena sejumlah alasan). Kata sandi harus sesuai dengan kasus penggunaan ini dengan sangat baik karena Anda tidak ingin menyimpannya teks biasa untuk alasan keamanan (dan tidak seharusnya). Tetapi bagaimana jika Anda ingin memeriksa filesystem untuk file musik bajakan? Tidak praktis menyimpan 3 mb per file musik. Jadi alih-alih, ambil hash file tersebut, dan simpan itu (md5 akan menyimpan 16 byte, bukan 3mb). Dengan begitu, Anda hanya meng-hash setiap file dan membandingkannya dengan database hash yang tersimpan (Ini tidak berfungsi dengan baik dalam praktik karena pengodean ulang, pengubahan header file, dll, tetapi ini merupakan contoh kasus penggunaan).
Gunakan fungsi hash saat Anda memeriksa validitas data input. Untuk itulah mereka dirancang. Jika Anda memiliki 2 buah input, dan ingin memeriksa apakah keduanya sama, jalankan keduanya melalui fungsi hash. Probabilitas tabrakan secara astronomis rendah untuk ukuran input kecil (dengan asumsi fungsi hash yang baik). Karena itu disarankan untuk kata sandi. Untuk kata sandi hingga 32 karakter, md5 memiliki ruang keluaran 4 kali lipat. SHA1 memiliki 6 kali ruang output (kurang-lebih). SHA512 memiliki sekitar 16 kali ruang output. Anda tidak terlalu peduli apa kata sandi itu , Anda peduli apakah itu sama yang disimpan. Itu sebabnya Anda harus menggunakan hash untuk kata sandi.
Gunakan enkripsi kapan pun Anda perlu mendapatkan kembali data input. Perhatikan kata kebutuhan . Jika Anda menyimpan nomor kartu kredit, Anda harus mengembalikannya di beberapa titik, tetapi tidak ingin menyimpannya dalam bentuk teks. Jadi alih-alih, simpan versi terenkripsi dan simpan kunci seaman mungkin.
Fungsi hash juga bagus untuk menandatangani data. Misalnya, jika Anda menggunakan HMAC, Anda menandatangani sepotong data dengan mengambil hash data yang digabungkan dengan nilai yang diketahui tetapi tidak ditransmisikan (nilai rahasia). Jadi, Anda mengirim teks biasa dan hash HMAC. Kemudian, penerima hanya hash data yang dikirimkan dengan nilai yang diketahui dan memeriksa untuk melihat apakah cocok dengan HMAC yang dikirimkan. Jika itu sama, Anda tahu itu tidak dirusak oleh pesta tanpa nilai rahasia. Ini biasanya digunakan dalam sistem cookie aman oleh kerangka kerja HTTP, serta dalam pengiriman pesan data melalui HTTP di mana Anda menginginkan jaminan integritas dalam data.
Catatan tentang hash untuk kata sandi:
Fitur utama dari fungsi hash kriptografi adalah bahwa mereka harus sangat cepat untuk dibuat, dan sangat sulit / lambat untuk dibalik (begitu banyak sehingga secara praktis tidak mungkin). Ini menimbulkan masalah dengan kata sandi. Jika Anda menyimpan
sha512(password)
, Anda tidak melakukan apa pun untuk menjaga dari meja pelangi atau serangan brute force. Ingat, fungsi hash dirancang untuk kecepatan. Jadi sepele bagi penyerang untuk hanya menjalankan kamus melalui fungsi hash dan menguji setiap hasil.Menambahkan garam membantu masalah karena menambahkan sedikit data yang tidak diketahui ke hash. Jadi, alih-alih menemukan apa pun yang cocok
md5(foo)
, mereka perlu menemukan sesuatu yang ketika ditambahkan ke garam yang dikenal menghasilkanmd5(foo.salt)
(yang sangat sulit dilakukan). Tapi itu masih tidak menyelesaikan masalah kecepatan karena jika mereka tahu garam itu hanya masalah menjalankan kamus.Jadi, ada cara untuk mengatasi ini. Salah satu metode populer disebut penguatan kunci (atau peregangan kunci). Pada dasarnya, Anda mengulangi hash berkali-kali (biasanya ribuan). Ini melakukan dua hal. Pertama, memperlambat runtime dari algoritma hashing secara signifikan. Kedua, jika diimplementasikan dengan benar (mengirimkan input dan garam kembali pada setiap iterasi) sebenarnya meningkatkan entropi (ruang yang tersedia) untuk output, mengurangi kemungkinan tabrakan. Implementasi sepele adalah:
Ada implementasi lain yang lebih standar seperti PBKDF2 , BCrypt . Tetapi teknik ini digunakan oleh beberapa sistem terkait keamanan (seperti PGP, WPA, Apache dan OpenSSL).
Intinya,
hash(password)
tidak cukup baik.hash(password + salt)
lebih baik, tetapi masih belum cukup baik ... Gunakan mekanisme hash yang diregangkan untuk menghasilkan hash kata sandi Anda ...Catatan lain tentang peregangan sepele
Jangan dalam keadaan apa pun memberi makan output dari satu hash langsung kembali ke fungsi hash :
Alasannya ada hubungannya dengan tabrakan. Ingat bahwa semua fungsi hash memiliki tabrakan karena ruang output yang mungkin (jumlah kemungkinan output) lebih kecil daripada ruang input. Untuk melihat alasannya, mari kita lihat apa yang terjadi. Untuk mengawali ini, mari kita asumsikan ada kemungkinan 0,001% tabrakan
sha1()
(ini jauh lebih rendah pada kenyataannya, tetapi untuk tujuan demonstrasi).Sekarang,
hash1
memiliki kemungkinan tabrakan 0,001%. Tetapi ketika kita melakukan selanjutnyahash2 = sha1(hash1);
, semua tabrakanhash1
secara otomatis menjadi tabrakanhash2
. Jadi sekarang, kami memiliki tingkat hash1 di 0,001%, dansha1()
panggilan ke-2 menambah itu. Jadi sekarang,hash2
memiliki kemungkinan tabrakan 0,002%. Peluang itu dua kali lipat! Setiap iterasi akan menambah0.001%
kemungkinan tabrakan dengan hasilnya. Jadi, dengan 1000 iterasi, peluang tabrakan melonjak dari sepele 0,001% menjadi 1%. Sekarang, degradasi adalah linear, dan probabilitas sebenarnya jauh lebih kecil, tetapi efeknya sama (perkiraan kemungkinan tabrakan tunggalmd5
adalah sekitar 1 / (2 128 ) atau 1 / (3x10 38). Meskipun itu tampak kecil, berkat serangan ulang tahun itu tidak benar-benar sekecil kelihatannya).Alih-alih, dengan menambahkan kembali garam dan kata sandi setiap kali, Anda memasukkan kembali data ke fungsi hash. Jadi setiap tabrakan dari babak tertentu tidak lagi tabrakan dari babak berikutnya. Begitu:
Memiliki kemungkinan tabrakan yang sama dengan
sha512
fungsi asli . Yang kamu inginkan. Gunakan itu sebagai gantinya.sumber
Fungsi hash dapat dianggap sama dengan memanggang sepotong roti. Anda mulai dengan input (tepung, air, ragi, dll ...) dan setelah menerapkan fungsi hash (mencampur + membuat kue), Anda berakhir dengan output: sepotong roti.
Cara lain sangat sulit - Anda tidak dapat benar-benar memisahkan roti menjadi tepung, air, ragi - beberapa di antaranya hilang selama proses pemanggangan, dan Anda tidak pernah tahu persis berapa banyak air atau tepung atau ragi yang digunakan untuk roti tertentu, karena informasi itu dihancurkan oleh fungsi hashing (alias oven).
Banyak varian input yang berbeda secara teoritis akan menghasilkan roti identik (mis. 2 gelas air dan 1 tsbp ragi menghasilkan roti yang persis sama dengan 2,1 gelas air dan 0,9 btbp ragi), tetapi dengan salah satu roti itu, Anda tidak bisa mengatakannya. persis apa kombo input yang menghasilkannya.
Enkripsi, di sisi lain, dapat dilihat sebagai brankas. Apa pun yang Anda letakkan di sana keluar kembali, asalkan Anda memiliki kunci yang terkunci di tempat pertama. Ini operasi simetris. Diberikan kunci dan beberapa input, Anda mendapatkan output tertentu. Mengingat output itu, dan kunci yang sama, Anda akan mendapatkan kembali input asli. Ini pemetaan 1: 1.
sumber
Gunakan hash saat Anda tidak ingin mendapatkan kembali input asli, gunakan enkripsi ketika Anda melakukannya.
Hash mengambil beberapa input dan mengubahnya menjadi beberapa bit (biasanya dianggap sebagai angka, seperti integer 32 bit, integer 64 bit, dll). Input yang sama akan selalu menghasilkan hash yang sama, tetapi Anda PRINCIPALLY kehilangan informasi dalam proses sehingga Anda tidak dapat mereproduksi input asli dengan andal (ada beberapa peringatan untuk itu).
Enkripsi pada dasarnya menjaga semua informasi yang Anda masukkan ke dalam fungsi enkripsi, hanya menyulitkan (idealnya mustahil) bagi siapa pun untuk kembali ke input asli tanpa memiliki kunci tertentu.
Contoh Sederhana Hashing
Berikut ini adalah contoh sepele untuk membantu Anda memahami mengapa hashing tidak dapat (dalam kasus umum) mendapatkan kembali input asli. Katakanlah saya sedang membuat hash 1-bit. Fungsi hash saya mengambil string bit sebagai input dan menetapkan hash ke 1 jika ada jumlah bit genap yang diatur dalam string input, atau 0 jika ada angka ganjil.
Contoh:
Perhatikan bahwa ada banyak nilai input yang menghasilkan hash 0, dan banyak yang menghasilkan hash dari 1. Jika Anda tahu hash adalah 0, Anda tidak bisa tahu pasti apa input aslinya.
Omong-omong, hash 1-bit ini tidak sepenuhnya dibuat-buat ... lihatlah pada parity bit .
Contoh Enkripsi Sederhana
Anda dapat mengenkripsi teks dengan menggunakan substitusi huruf sederhana, katakan jika inputnya adalah A, Anda menulis B. Jika inputnya adalah B, Anda menulis C. Sepanjang jalan hingga akhir alfabet, di mana jika inputnya adalah Z, Anda tulis A lagi.
Sama seperti contoh hash sederhana, jenis enkripsi ini telah digunakan secara historis .
sumber
Gambaran dasar teknik hashing dan enkripsi / dekripsi adalah.
UPDATE: Untuk membahas poin-poin yang disebutkan dalam pertanyaan yang diedit.
sumber
My one liner ... umumnya Pewawancara menginginkan jawaban di bawah ini.
Hashing adalah satu cara. Anda tidak bisa mendapatkan konversi data / string dari kode hash.
Enkripsi adalah 2 arah - Anda dapat mendekripsi lagi string terenkripsi jika Anda memiliki kunci bersama Anda.
sumber
Sebuah fungsi Hash ternyata sejumlah variabel berukuran teks ke dalam teks berukuran tetap.
Sumber: https://en.wikipedia.org/wiki/Hash_function
Fungsi hash dalam PHP
Hash mengubah string menjadi string hash. Lihat di bawah.
HASH:
Kata sandi biasanya disimpan dalam representasi hash alih-alih sebagai teks yang dapat dibaca. Ketika pengguna akhir ingin mendapatkan akses ke aplikasi yang dilindungi dengan kata sandi maka kata sandi harus diberikan selama otentikasi. Ketika pengguna mengirimkan kata sandi, maka sistem otentikasi yang valid menerima kata sandi dan mem-hash kata sandi yang diberikan ini. Kata sandi hash ini dibandingkan dengan hash yang diketahui oleh sistem. Akses diberikan dalam hal kesetaraan.
DEHASH:
SHA1 adalah hash satu arah. Yang berarti Anda tidak bisa menghilangkan hash.
Namun, Anda dapat dengan kasar memaksa hash. Silakan lihat: https://hashkiller.co.uk/sha1-decrypter.aspx .
MD5, adalah hash lain. Dehasher MD5 dapat ditemukan di situs web ini: https://www.md5online.org/ .
Untuk menghambat serangan brute-force pada hash, garam bisa diberikan. Di php, Anda dapat menggunakan
password_hash()
untuk membuat hash kata sandi. Fungsipassword_hash()
secara otomatis membuat garam. Untuk memverifikasi kata sandi pada hash kata sandi (dengan garam) gunakanpassword_verify()
.Satu kata sandi dapat diwakili oleh lebih dari satu hash. Ketika Anda memverifikasi kata sandi dengan hash kata sandi yang berbeda dengan menggunakan
password_verify()
, maka kata sandi akan diterima sebagai kata sandi yang valid.Sebuah fungsi Enkripsi mengubah teks menjadi ciphertext masuk akal dengan menggunakan kunci enkripsi, dan sebaliknya.
Sumber: https://en.wikipedia.org/wiki/Encryption
Enkripsi dalam PHP
Mari selami beberapa kode PHP yang menangani enkripsi.
--- Perpanjangan Mcrypt ---
ENCRYPT:
DECRYPT:
--- Ekstensi OpenSSL ---
Perpanjangan Mcrypt tidak digunakan lagi pada 7.1. dan dihapus di php 7.2. Ekstensi OpenSSL harus digunakan di php 7. Lihat cuplikan kode di bawah ini:
sumber
A_KEY
adalah tidak AES / Rijndael-128 kunci; itu kata sandi, bukan kata kunci.Enkripsi Simetris:
Enkripsi simetris juga dapat disebut sebagai kunci bersama atau enkripsi rahasia bersama. Dalam enkripsi simetris, satu kunci digunakan untuk mengenkripsi dan mendekripsi lalu lintas.
Enkripsi Asimetris:
Enkripsi asimetris juga dikenal sebagai kriptografi kunci publik. Enkripsi asimetris berbeda dari enkripsi simetris terutama dalam dua kunci yang digunakan: satu untuk enkripsi dan satu untuk dekripsi. Algoritma enkripsi asimetris yang paling umum adalah
RSA
.Dibandingkan dengan enkripsi simetris, enkripsi asimetris memaksakan beban komputasi yang tinggi, dan cenderung jauh lebih lambat. Dengan demikian, biasanya tidak digunakan untuk melindungi data payload. Sebaliknya, kekuatan utamanya adalah kemampuannya untuk membangun saluran yang aman di atas media yang tidak aman (misalnya, Internet). Ini dilakukan dengan pertukaran kunci publik, yang hanya dapat digunakan untuk mengenkripsi data. Kunci pribadi pelengkap, yang tidak pernah dibagikan, digunakan untuk mendekripsi.
Hashing:
Akhirnya, hashing adalah bentuk keamanan kriptografi yang berbeda dari enkripsi. Sedangkan enkripsi adalah proses dua langkah yang digunakan untuk pertama kali mengenkripsi dan kemudian mendekripsi pesan, hashing memadatkan pesan menjadi nilai panjang tetap yang tidak dapat diubah, atau hash. Dua algoritma hashing yang paling umum terlihat dalam jaringan adalah
MD5
danSHA-1
.Baca lebih lanjut di sini: http://packetlife.net/blog/2010/nov/23/symmetric-asymmetric-encryption-hashing/
sumber
Gunakan hash saat Anda hanya perlu berjalan satu arah. Misalnya, untuk kata sandi dalam suatu sistem, Anda menggunakan hashing karena Anda hanya akan memverifikasi bahwa nilai yang dimasukkan pengguna, setelah hashing, cocok dengan nilai dalam repositori Anda. Dengan enkripsi, Anda dapat melakukan dua cara.
algoritma hashing dan algoritma enkripsi hanyalah algoritma matematika. Jadi dalam hal itu mereka tidak berbeda - itu semua hanya rumus matematika. Semantik bijaksana, meskipun, ada perbedaan yang sangat besar antara hashing (satu arah) dan enkripsi (dua arah). Mengapa hash tidak dapat diubah? Karena mereka dirancang seperti itu, karena kadang-kadang Anda menginginkan operasi satu arah.
sumber
Algoritma enkripsi dan hash bekerja dengan cara yang serupa. Dalam setiap kasus, ada kebutuhan untuk menciptakan kebingungan dan difusi di antara bit. Mendidih, kebingungan menciptakan hubungan yang kompleks antara kunci dan ciphertext, dan difusi menyebarkan informasi dari setiap bit di sekitar.
Banyak fungsi hash sebenarnya menggunakan algoritma enkripsi (atau primitif algoritma enkripsi. Misalnya, kandidat SHA-3 Skein menggunakan Threefish sebagai metode yang mendasari untuk memproses setiap blok. Perbedaannya adalah bahwa alih-alih menjaga setiap blok ciphertext, mereka secara destruktif, secara deterministik digabung bersama menjadi panjang tetap
sumber
ketika datang ke keamanan untuk mengirim data yaitu komunikasi dua arah Anda menggunakan enkripsi. Semua enkripsi memerlukan kunci
ketika datang ke otorisasi Anda menggunakan hashing. Tidak ada kunci dalam hashing
Hashing mengambil sejumlah data (biner atau teks) dan membuat hash panjang konstan yang mewakili checksum untuk data. Misalnya, hash mungkin 16 byte. Algoritma hashing yang berbeda menghasilkan hash ukuran yang berbeda. Anda jelas tidak dapat membuat kembali data asli dari hash, tetapi Anda dapat hash data lagi untuk melihat apakah nilai hash yang sama dihasilkan. Kata sandi berbasis Unix satu arah bekerja dengan cara ini. Kata sandi disimpan sebagai nilai hash, dan untuk masuk ke sistem, kata sandi yang Anda ketik adalah hash, dan nilai hash dibandingkan dengan hash kata sandi yang sebenarnya. Jika cocok, maka Anda harus mengetikkan kata sandi yang benar
mengapa hashing tidak dapat diubah:
Hashing tidak dapat dibalikkan karena pemetaan input-ke-hash bukan 1-ke-1. Memiliki dua input peta ke nilai hash yang sama biasanya disebut sebagai "tabrakan hash". Untuk tujuan keamanan, salah satu sifat fungsi hash "baik" adalah bahwa tabrakan jarang terjadi dalam penggunaan praktis.
sumber
Penawaran kriptografi dengan angka dan string. Pada dasarnya setiap hal digital di seluruh alam semesta adalah angka. Ketika saya mengatakan angka, angka 0 & 1. Anda tahu apa itu angka biner. Gambar yang Anda lihat di layar, musik yang Anda dengarkan melalui earphone Anda, semuanya biner. Tapi telinga dan mata kita tidak akan mengerti binari, kan? Hanya otak yang dapat memahami itu, dan bahkan jika ia dapat memahami binari, ia tidak dapat menikmati binari. Jadi kami mengonversi binari ke format yang dapat dipahami manusia seperti mp3, jpg, dll. Mari kita sebut proses sebagai Encoding . Ini proses dua arah dan dapat dengan mudah diterjemahkan kembali ke bentuk aslinya.
Hashing
Hashing adalah teknik kriptografi lain di mana data yang pernah dikonversi ke bentuk lain tidak pernah dapat dipulihkan kembali. Dalam istilah Layman, tidak ada proses yang disebut de-hashing . Ada banyak fungsi hash untuk melakukan pekerjaan seperti sha-512, md5 dan sebagainya.
Jika nilai asli tidak dapat dipulihkan, lalu di mana kita menggunakan ini? Kata sandi! Ketika Anda mengatur kata sandi untuk ponsel atau PC Anda, hash kata sandi Anda dibuat dan disimpan di tempat yang aman. Ketika Anda membuat upaya login lain kali, string yang dimasukkan kembali hash dengan algoritma yang sama (fungsi hash) dan output dicocokkan dengan nilai yang disimpan. Jika sama, Anda login. Jika tidak, Anda akan diusir.
Kredit: wikimedia Dengan menerapkan hash pada kata sandi, kami dapat memastikan bahwa penyerang tidak akan pernah mendapatkan kata sandi kami meskipun ia mencuri file kata sandi yang disimpan. Penyerang akan memiliki hash kata sandi. Dia mungkin dapat menemukan daftar kata sandi yang paling umum digunakan dan menerapkan sha-512 untuk masing-masing dan membandingkannya dengan nilai di tangannya. Ini disebut serangan kamus . Tapi berapa lama dia akan melakukan ini? Jika kata sandi Anda cukup acak, apakah Anda pikir metode cracking ini akan berhasil? Semua kata sandi dalam database Facebook, Google dan Amazon adalah hash, atau setidaknya mereka seharusnya hash.
Lalu ada Enkripsi
Enkripsi terletak di antara hashing dan encoding. Pengkodean adalah proses dua arah dan tidak boleh digunakan untuk memberikan keamanan. Enkripsi juga merupakan proses dua arah, tetapi data asli dapat diambil jika dan hanya jika kunci enkripsi diketahui. Jika Anda tidak tahu cara kerja enkripsi, jangan khawatir, kami akan membahas dasar-dasarnya di sini. Itu akan cukup untuk memahami dasar-dasar SSL. Jadi, ada dua jenis Enkripsi yaitu enkripsi Symmetric dan Asymmetric.
Enkripsi Kunci Simetris
Saya mencoba untuk menjaga hal-hal sesederhana mungkin. Jadi, mari kita pahami enkripsi simetris dengan menggunakan algoritma shift. Algoritma ini digunakan untuk mengenkripsi huruf dengan menggeser huruf ke kiri atau kanan. Mari kita ambil string CRYPTO dan pertimbangkan nomor +3. Kemudian, format CRYPTO terenkripsi akan menjadi FUBSWR. Itu berarti setiap huruf digeser ke kanan oleh 3 tempat. Di sini, kata CRYPTO disebut Plaintext , output FUBSWR disebut Ciphertext , nilai +3 disebut kunci Enkripsi (kunci simetris) dan seluruh proses adalah a . Ini adalah salah satu algoritma enkripsi kunci simetris tertua dan dasar dan penggunaan pertamanya dilaporkan pada masa Julius Caesar. Jadi, itu dinamai menurut namanya dan itu yang terkenal cipher Caesar Cipher yang . Siapa pun yang mengetahui kunci enkripsi dan dapat menerapkan kebalikan dari algoritma Caesar dan mengambil Plaintext asli. Oleh karena itu disebut Enkripsi Simetris .
Enkripsi Kunci Asimetris
Kita tahu bahwa, dalam enkripsi Symmetric kunci yang sama digunakan untuk enkripsi dan dekripsi. Setelah kunci itu dicuri, semua data hilang. Itu risiko yang sangat besar dan kami membutuhkan teknik yang lebih kompleks. Pada tahun 1976, Whitfield Diffie dan Martin Hellman pertama kali menerbitkan konsep enkripsi Asymmetric dan algoritma ini dikenal sebagai pertukaran kunci Diffie-Hellman . Kemudian pada tahun 1978, Ron Rivest, Adi Shamir dan Leonard Adleman dari MIT menerbitkan algoritma RSA . Ini dapat dianggap sebagai dasar kriptografi Asimetris.
Dibandingkan dengan enkripsi Symmetric, dalam enkripsi Asymmetric , akan ada dua kunci, bukan satu. Satu disebut kunci Publik , dan yang lainnya adalah kunci Pribadi . Secara teoritis, selama inisiasi kita dapat menghasilkan Public-Privatepasangan kunci ke mesin kami. Kunci pribadi harus disimpan di tempat yang aman dan tidak boleh dibagikan dengan siapa pun. Kunci publik, seperti yang ditunjukkan namanya, dapat dibagikan dengan siapa saja yang ingin mengirim teks terenkripsi kepada Anda. Sekarang, mereka yang memiliki kunci publik Anda dapat mengenkripsi data rahasia bersamanya. Jika pasangan kunci dihasilkan menggunakan algoritma RSA, maka mereka harus menggunakan algoritma yang sama saat mengenkripsi data. Biasanya algoritma akan ditentukan dalam kunci publik. Data terenkripsi hanya dapat didekripsi dengan kunci pribadi yang Anda miliki.
Sumber: SSL / TLS untuk boneka bagian 1: Ciphersuite, Hashing, Enkripsi | WST ( https://www.wst.space/ssl-part1-ciphersuite-hashing-encryption/ )
sumber
sumber