Halo, Habr!
Kita semua cukup sering mendengar kata dan frasa seperti "enkripsi data", "sandi rahasia", "perlindungan kriptografi", "enkripsi", tetapi tidak semua orang mengerti apa yang dimaksud. Dalam posting ini kita akan memahami apa itu enkripsi dan mempertimbangkan cipher elementer sehingga bahkan orang yang jauh dari IT pun memahami esensi dari fenomena ini.
Pertama-tama, kita akan mengerti terminologinya.
Enkripsi adalah transformasi dari pesan asli yang tidak akan memungkinkan semua orang jahat untuk membaca data jika mereka mencegat pesan ini. Transformasi ini dilakukan dengan menggunakan algoritma matematika dan logika khusus, beberapa di antaranya akan kami pertimbangkan di bawah ini.
Pesan asli sebenarnya adalah apa yang ingin kita enkripsi. Contoh klasik adalah teks.
Pesan terenkripsi adalah pesan yang telah melewati proses enkripsi.
Sandi adalah algoritme itu sendiri yang digunakan untuk mengonversi pesan.
Kunci adalah komponen yang didasarkan pada enkripsi atau dekripsi yang dapat dilakukan.
Alfabet adalah daftar semua karakter yang mungkin ada dalam pesan asli dan terenkripsi. Termasuk angka, tanda baca, spasi, huruf kecil dan huruf kapital secara terpisah, dll.
Sekarang kita berbicara kurang lebih dengan bahasa yang sama, kita akan menganalisis sandi sederhana.
Cipher termudah. Esensinya adalah peningkatan alfabet.
Misalnya, kami memiliki alfabet yang sepenuhnya konsisten dengan alfabet Latin yang biasa.
abcdefghijklmnopqrstu vwxyz
Untuk mengimplementasikan cipher Atbash, kita cukup membalikkannya. "A" akan menjadi "Z", "B" akan berubah menjadi "Y" dan sebaliknya. Pada output kita mendapatkan gambar berikut:

Dan sekarang kita menulis pesan yang diperlukan pada alfabet sumber dan alfabet sandi
Posting asli: Saya suka habr
Dienkripsi: r olev szyi
Di sini satu parameter lagi ditambahkan - kunci primitif dalam bentuk angka dari 1 hingga 25 (untuk alfabet Latin). Dalam praktiknya, kuncinya adalah dari 4 hingga 10.
Sekali lagi, untuk kejelasan, ambil alfabet Latin
abcdefghijklmnopqrstu vwxyz
Dan sekarang pindahkan setiap huruf ke kanan atau kiri dengan sejumlah nilai kunci.
Misalnya, kuncinya adalah 4 dan bergeser ke kanan.
Alfabet asli: abcdefghijklmnopqrstu vwxyz
Dienkripsi: wxyzabcdefghijklmnopq rstuv
Kami mencoba menulis pesan:
hello world
Kami mengenkripsi dan mendapatkan teks yang tidak jelas berikut:
dahhk sknhz
Cipher berbasis biner paling sederhana yang memiliki kekuatan kriptografi
absolut . Tanpa mengetahui kunci, tidak mungkin untuk mendekripsi (dibuktikan oleh Claude Shannon).
Alfabet asli masih dalam bahasa Latin yang sama.
Pesan tersebut dibagi menjadi karakter yang terpisah dan setiap karakter disajikan dalam bentuk biner.
Klasik kriptografi menawarkan
kode bodo lima digit untuk setiap huruf. Kami akan mencoba mengubah sandi ini untuk penyandian pada 8 bit / karakter menggunakan contoh tabel ASCII. Kami mewakili setiap huruf dalam bentuk kode biner.

Sekarang ingat kursus elektronik dan elemen XOR, juga dikenal sebagai XOR.
XOR menerima sinyal (masing-masing 0 atau 1), melakukan operasi logis pada mereka dan memberikan satu sinyal berdasarkan nilai input.
Jika semua sinyal sama satu sama lain (0-0 atau 1-1 atau 0-0-0, dll), maka kita mendapatkan 0 pada output.
Jika sinyal tidak sama (0-1 atau 1-0 atau 1-0-0, dll.), Maka hasilnya adalah 1.
Sekarang untuk mengenkripsi pesan, kita akan memasukkan teks itu sendiri untuk enkripsi dan kunci dengan panjang yang sama. Kami menerjemahkan setiap huruf ke dalam kode binernya dan menjalankan
kunci XOR pesan formula
Sebagai contoh:
Posting: LONDON
kunci: SISTEM
Kami menerjemahkannya ke dalam kode biner dan menjalankan XOR:
01001100 01001111 01001110 01000100 01001111 01001110 01010011 01011001 01010011 01010100 01000101 01001101 _______________________________________________________ 00011111 00010110 00011101 00010000 00001010 00000011
Dalam contoh khusus ini, sebagai ganti karakter yang dihasilkan, kita hanya akan melihat tempat kosong, karena semua karakter berada dalam 32 karakter layanan pertama. Namun, jika kami menerjemahkan hasilnya menjadi angka, kami mendapatkan gambar berikut:
31 22 29 16 10 3.
Dalam penampilan - serangkaian angka yang benar-benar tidak koheren, tetapi kita tahu sesuatu.
Prinsip enkripsi hampir sama dengan sandi Caesar. Hanya dalam kasus ini kami menggeser alfabet bukan dengan sejumlah posisi, tetapi dengan kata kode.
Misalnya, ambil alfabet Cyrillic untuk perubahan.
Kami akan membuat kata kode. Misalnya, Lukomorye. Hapus semua karakter berulang dari itu. Pada output kita mendapatkan kata "Lukomrier".
Sekarang kita memasukkan kata ini di awal alfabet, dan membiarkan karakter yang tersisa tidak berubah.
Dan sekarang kami akan merekam pesan apa pun dan mengenkripsi pesan itu.
" "
Kami mendapatkan omong kosong yang tidak dapat dibaca sebagai berikut:
" "
Cipher Playfer klasik mengasumsikan matriks 5x5 berdasarkan karakter alfabet Latin (i dan j ditulis dalam satu sel), kata kode dan manipulasi lebih lanjut dari mereka.
Biarkan kata kode menjadi "HALO".
Pertama, kita bertindak seperti cipher sebelumnya, mis. hapus pengulangan dan tulis kata di awal alfabet.

Sekarang terima pesan apa pun. Misalnya, "I LOVE HABR AND GITHUB".
Kami memecahnya menjadi bigrams, yaitu menjadi pasangan karakter, tidak termasuk spasi.
IL OV EH AB RA ND GI TH UB.
Jika pesan berasal dari jumlah ganjil karakter, atau jika ada dua karakter identik dalam bigram (LL, misalnya), maka simbol X diganti dengan karakter yang hilang atau berulang.
Enkripsi dilakukan sesuai dengan beberapa aturan sederhana:
1) Jika karakter digram ada dalam matriks pada baris yang sama - kami menggesernya ke kanan dengan satu posisi. Jika simbol adalah yang terakhir berturut-turut - itu menjadi yang pertama.
Misalnya, EH menjadi LE.

2) Jika karakter digram berada di kolom yang sama, maka mereka digeser satu posisi ke bawah. Jika karakter berada di paling bawah kolom, maka ia mengambil nilai paling atas.
Sebagai contoh, jika kita memiliki LX bigram, maka itu akan menjadi DL.
3) Jika karakter tidak pada baris atau kolom apa pun, maka kami membuat kotak, di mana karakter kami adalah tepi diagonal. Dan bertukar sudut.
Misalnya, bigram RA.


Menurut aturan ini, kami mengenkripsi seluruh pesan.
IL OV EH AB RA ND GI TH UB. KO HY LE HG EU MF BP QO QG
Jika Anda menghapus spasi, kami mendapatkan pesan terenkripsi berikut:
KOHYLEHGEUMFBPQOQG
Selamat Setelah membaca artikel ini, Anda setidaknya secara kasar memahami apa itu enkripsi dan Anda tahu cara menggunakan beberapa cipher primitif, dan Anda dapat mulai mempelajari beberapa contoh cipher yang lebih kompleks, yang akan kita bicarakan nanti.
Terima kasih atas perhatian anda