Kriptografi atau penelitian menarik tentang enkripsi reversibel dalam PHP

Salah satu kebenaran utama kriptografi adalah bahwa Anda tidak boleh menemukan apa pun di bidang ini jika Anda bukan seorang profesional. Ini sebagian benar, karena semua yang terbaik telah lama ditemukan, diderita dan digunakan selama beberapa dekade di bidang teknologi informasi. Sisi lain dari kebenaran adalah bahwa pengembangan bidang pengetahuan tertentu hanya terjadi dengan masuknya ide-ide segar dan solusi orisinal di dalamnya.

Untuk alasan yang jelas, kita tidak akan menipu raksasa kriptografi industri seperti AES, tetapi terjun ke dalam, dengan kata lain, survei kriptografi kita sendiri dengan blackjack dan kegembiraan.

Sebagian karena ini menarik, sebagian karena ketika memodelkan sesuatu milik Anda dan membandingkannya dengan standar yang diakui, Anda dapat dengan jelas melihat kontras, solusi efektif dan kelalaian yang jujur, Anda memahami apa yang dapat Anda perjuangkan untuk meningkatkan efisiensi.

Tapi sudah cukup air.

Katakanlah aplikasi web kami ditulis dalam php, membutuhkan enkripsi yang dapat dibalik, dan kami percaya bahwa kami dapat menulis sistem sandi kami sendiri.

Jadi, kami akan menulis sistem enkripsi reversibel kami sendiri dengan kunci privat dan publik, yang akan memiliki fitur berikut dari algoritma kriptografi yang sedikit lebih aman:

  1. Kehadiran karakter noise dalam cipher yang dihasilkan.
  2. Informasi dalam setiap saluran Pengirim-Tujuan akan dienkripsi menggunakan kunci pribadi, dan fungsi korespondensi akan unik untuk setiap kunci.
  3. Setiap pesan akan menerima kode intisari - kode unik yang merupakan fungsi dari kunci pribadi dan pesan asli. Ini diperlukan untuk mencapai keunikan fungsi korespondensi "karakter sumber <=> karakter yang disandikan" tidak hanya untuk saluran "Tujuan Pengirim", tetapi juga untuk setiap pesan individu.

    Jadi, bahkan jika kita membayangkan bahwa diketahui bahwa kode dan karakter asli cocok untuk pesan tertentu melalui penggunaan analisis kriptografi, misalnya, analisis frekuensi, ini tidak memberikan preferensi ketika memeriksa pesan lain.
  4. Untuk mempersulit analisis frekuensi, kami akan menyandikan setiap simbol pesan sumber dengan dua simbol sandi.

Jadi apa yang terjadi?

Sebenarnya, Anda bisa melihat hasil akhirnya di sini

Kelas SymCoder

Kelas SymCoder termasuk metode enkripsi dan dekripsi.

Enkripsi dilakukan oleh metode code (), yang menerima pesan asli pada input.

Di sini, pesan pada tabel korespondensi yang dihasilkan di tab_coded membuat pesan terenkripsi, diencerkan di sekitar tepi dan di dalam dengan simbol noise.

Omong-omong, simbol kebisingan unik untuk setiap saluran tujuan pengirim, karena dihasilkan menggunakan kunci saluran, tetapi tidak unik untuk pesan. Karakter yang digunakan untuk enkripsi dalam code_symbols adalah beberapa karakter tanda baca dan karakter seperti%, @, dll.

Untuk setiap karakter kode, ada dua karakter dari code_symbols untuk alasan yang jelas, bahwa ada beberapa kali lebih sedikit dari mereka daripada karakter kode.

Tabel pencocokan create_tab_coded dibangun menggunakan terjemahan hash kunci pesan ke dalam array dengan jumlah elemen yang sama dengan jumlah elemen dalam array karakter kode. Posisi awal bypass kode dua karakter juga selalu berbeda dan dikaitkan dengan kunci saluran. Ini memungkinkan untuk memastikan bahwa algoritma untuk mem-bypass karakter yang dikodekan dan korespondensinya dengan karakter kode akan selalu (baik, atau dijamin sering) berbeda.

Misalnya, pesan "hello world" yang disandikan terlihat seperti ini:

Digest-a00bf11d-&?==&!&?.@.@=!=-.?&1.#&?=:.:.1%!&-%@&@%~&1^#=?%%.!%+.?.~=?..&?%&&:%~.#%@&1&1&#.#=?.#.?.!&#&1==&=.-=!

Dan di sini adalah pesan yang sama dikodekan lagi:

Digest-a00bf11d-=:.?=:&!.?.1&-&#=:=?.?.=.?.!&=%!=-%@=!%~.=^#.1%%.!%+=:.~.@..==%&&1%~.1%@=?.@.!&=.!&@=:&1.==:=!.1&#&:

Dapat dilihat bahwa intisari dari pesan yang sama adalah sama, tetapi cipher menjadi berbeda - simbol noise ditambahkan oleh pencocokan acak dan dalam urutan acak untuk setiap enkripsi baru.

Pesan memiliki redundansi, yang berkurang ketika volume pesan bertambah, mencapai sebanyak 10% noise (untuk pesan terpendek, noise mencapai 90% dan di atas persen), panjang minimum pesan terenkripsi adalah 116 karakter. Salah satu dari beberapa kelemahan metode enkripsi ini adalah peningkatan dua kali lipat dalam pesan yang disandikan.

Decoding adalah terjemahan terbalik dari bentuk "simbol kode" - simbol asli dengan suara yang terpotong dari pesan. Apa yang bisa menjadi kuncinya? Pada prinsipnya, string apa pun yang unik untuk setiap pasangan tipe tujuan-penerima.

Misalnya, jika Anda membuat messenger dengan enkripsi pesan, dalam hal ini versi paling sederhana dari kunci pribadi dapat md5 ($ user_id_1. $ Salt. $ User_id_2), maka kunci tersebut akan unik untuk setiap saluran pesan.

Source: https://habr.com/ru/post/id425155/


All Articles