Stream cipher
Dalam kriptografi, stream cipher adalah sebuah cipher kunci simetris dimana bit plainteks digabungkan dengan aliran bit cipher pseudorandom (keystream) menggunakan operasi exclusive-or (xor). Dalam stream cipher, digit plainteks dienkripsi satu per satu, dan transformasi digit yang berurutan bervariasi selama keadaan enkripsi. Nama alternatifnya adalah state cipher, karena enkripsi setiap digit tergantung pada state saat ini. Dalam prakteknya, digit biasanya berupa bit tunggal atau byte.
Stream cipher mewakili pendekatan yang berbeda untuk enkripsi simetris dari block cipher. Block cipher beroperasi pada blok besar dengan panjang tetap. Stream cipher biasanya dijalankan pada kecepatan yang lebih tinggi daripada block cipher dan memiliki persyaratan perangkat keras yang lebih rendah. Akan tetapi, stream cipher dapat rentan terhadap masalah keamanan yang serius jika digunakan secara tidak benar; sebagai contoh, khususnya, keadaan awal yang sama tidak boleh digunakan dua kali.
Stream cipher menggunakan kunci kriptografi yang jauh lebih kecil dan lebih nyaman, misalnya kunci 128 bit. Berdasarkan kunci ini, ia menghasilkan keystream pseudorandom yang dapat digabungkan dengan digit plaintext dengan cara yang mirip dengan algoritma enkripsi one-time pad. Namun, karena keystream adalah pseudorandom, dan tidak benar-benar acak, keamanan yang terkait dengan pad satu kali tidak dapat diterapkan dan sangat mungkin untuk stream cipher menjadi benar-benar tidak aman.
Pengoperasian generator keystream di A5/1, sebuah stream cipher berbasis LFSR yang digunakan untuk mengenkripsi percakapan telepon seluler.
Jenis-jenis stream cipher
Sebuah stream cipher menghasilkan elemen-elemen keystream yang berurutan berdasarkan keadaan internal. Keadaan ini diperbarui dalam dua cara:
- Jika state berubah secara independen dari pesan plainteks atau cipherteks, cipher diklasifikasikan sebagai cipher aliran sinkron.
- Jika state diperbarui berdasarkan perubahan sebelumnya dari digit ciphertext, cipher diklasifikasikan sebagai cipher stream yang menyinkronkan diri.
Cipher aliran sinkron
Dalam cipher aliran sinkron, aliran digit pseudo-acak dihasilkan secara independen dari pesan plainteks dan cipherteks, dan kemudian digabungkan dengan plainteks (untuk mengenkripsi) atau dengan cipherteks (untuk mendekripsi). Dalam bentuk yang paling umum, digit biner (bit) digunakan, dan keystream digabungkan dengan plainteks menggunakan operasi eksklusif atau operasi (XOR). Ini disebut sebagai binary additive stream cipher.
Dalam cipher aliran sinkron, pengirim dan penerima harus sinkron agar dekripsi berhasil. Jika digit ditambahkan atau dihapus dari pesan selama transmisi, sinkronisasi akan hilang. Untuk mengembalikan sinkronisasi, berbagai offset dapat dicoba secara sistematis untuk mendapatkan dekripsi yang benar. Pendekatan lain adalah menandai ciphertext dengan penanda pada titik-titik reguler dalam output.
Namun, jika sebuah digit rusak dalam transmisi, bukannya ditambahkan atau hilang, hanya satu digit dalam plaintext yang terpengaruh dan kesalahan tidak merambat ke bagian lain dari pesan. Properti ini berguna ketika tingkat kesalahan transmisi tinggi; namun, hal ini membuat kecil kemungkinan bahwa kesalahan akan terdeteksi tanpa mekanisme lebih lanjut. Terlebih lagi, karena sifat ini, cipher stream sinkron sangat rentan terhadap serangan aktif - jika penyerang dapat merubah digit di ciphertext, dia mungkin dapat membuat perubahan yang dapat diprediksi ke bit plaintext yang sesuai; sebagai contoh, membalik bit di ciphertext menyebabkan bit yang sama dibalik (Toggled) di plaintext.
Swa-sinkronisasi cipher aliran
Self-synchronizing stream cipher adalah teknik lain yang menggunakan bagian dari N digit ciphertext sebelumnya untuk menghitung keystream. Skema seperti ini dikenal juga sebagai cipher aliran asinkron atau ciphertext autokey (CTAK). Ide sinkronisasi mandiri dipatenkan pada tahun 1946, dan memiliki keuntungan bahwa penerima akan secara otomatis melakukan sinkronisasi dengan generator keystream setelah menerima N digit ciphertext, sehingga lebih mudah untuk memulihkan jika digit dijatuhkan atau ditambahkan ke aliran pesan. Kesalahan satu digit terbatas dalam efeknya, hanya mempengaruhi hingga N digit plaintext. Agak lebih sulit untuk melakukan serangan aktif pada cipher stream yang menyinkronkan diri sendiri daripada cipher sinkron.
Contoh dari cipher stream yang menyinkronkan diri sendiri adalah cipher blok dalam mode cipher-feedback (CFB).
Cipher aliran berbasis register pergeseran umpan balik linier
Binary stream cipher sering dibangun dengan menggunakan linear feedback shift register (LFSRs) karena mereka dapat dengan mudah diimplementasikan dalam perangkat keras dan dapat dengan cepat dianalisis secara matematis. Akan tetapi, penggunaan LFSRs saja tidak cukup untuk memberikan keamanan yang baik. Berbagai skema telah didesain untuk meningkatkan keamanan LFSRs.
Fungsi penggabungan non-linear
Karena LFSR secara inheren linier, satu teknik untuk menghilangkan linieritas adalah dengan memasukkan output dari sekelompok LFSR paralel ke dalam fungsi Boolean non-linier untuk membentuk generator kombinasi. Berbagai sifat dari fungsi penggabungan seperti itu penting untuk memastikan keamanan skema yang dihasilkan, misalnya, untuk menghindari serangan korelasi.
Generator yang dikendalikan jam
Biasanya LFSR diinjak secara teratur. Salah satu teknik untuk memperkenalkan non-linearitas adalah dengan membuat LFSR clock secara tidak teratur, dikendalikan oleh output dari LFSR kedua. Generator seperti itu termasuk generator stop-and-go, generator langkah bolak-balik dan generator menyusut.
Generator stop-and-go (Beth dan Piper, 1984) terdiri dari dua LFSR. Satu LFSR di clock jika output dari LFSR kedua adalah "1", jika tidak, LFSR akan mengulangi output sebelumnya. Keluaran ini kemudian (dalam beberapa versi) digabungkan dengan keluaran dari LFSR ketiga yang di-clock pada tingkat yang teratur.
Generator penyusutan menggunakan teknik yang berbeda. Dua LFSR digunakan, keduanya clock secara teratur dengan cara berikut:
- Jika output dari LFSR pertama adalah "1", output dari LFSR kedua menjadi output dari generator.
- Jika output dari LFSR pertama "0", output dari LFSR kedua dibuang, dan tidak ada bit yang dikeluarkan oleh generator.
Teknik ini mengalami serangan waktu pada generator kedua, karena kecepatan output adalah variabel dengan cara yang bergantung pada keadaan generator kedua. Hal ini bisa diperbaiki dengan menyangga output.
Generator filter
Pendekatan lain untuk meningkatkan keamanan LFSR adalah dengan melewatkan seluruh keadaan LFSR tunggal ke dalam fungsi penyaringan non-linear.
Desain lainnya
Sebagai ganti perangkat penggerak linier, seseorang dapat menggunakan fungsi update nonlinier. Sebagai contoh, Klimov dan Shamir mengusulkan fungsi segitiga (Fungsi-T) dengan siklus tunggal pada n bit words.
Keamanan
Agar aman, periode dari keystream (jumlah digit yang dihasilkan sebelum stream berulang) harus cukup besar. Jika urutannya berulang, maka ciphertext yang tumpang tindih dapat disejajarkan satu sama lain "secara mendalam", dan ada teknik-teknik yang memungkinkan ekstraksi plaintext dari ciphertext yang dihasilkan dengan menggunakan metode-metode ini.
Penggunaan
Stream cipher sering digunakan dalam aplikasi di mana plainteks datang dalam jumlah yang panjangnya tidak dapat diketahui seperti dalam koneksi nirkabel yang aman. Jika sebuah block cipher digunakan dalam aplikasi jenis ini, perancang perlu memilih efisiensi transmisi atau kompleksitas implementasi, karena block cipher tidak dapat secara langsung bekerja pada blok yang lebih pendek dari ukuran bloknya. Sebagai contoh, jika block cipher 128-bit menerima semburan plaintext 32-bit yang terpisah, tiga perempat dari data yang ditransmisikan membutuhkan padding. Block cipher harus digunakan dalam mode ciphertext stealing atau penghentian blok sisa untuk menghindari padding, sementara stream cipher menghilangkan masalah ini dengan beroperasi pada unit terkecil yang ditransmisikan (biasanya byte).
Keuntungan lain dari stream cipher dalam kriptografi militer adalah bahwa stream cipher dapat dihasilkan oleh perangkat enkripsi yang tunduk pada langkah-langkah keamanan yang ketat kemudian diumpankan ke perangkat lain, misalnya pesawat radio, yang akan melakukan operasi xor sebagai bagian dari fungsi mereka. Perangkat lain dapat dirancang untuk digunakan dalam lingkungan yang kurang aman.
RC4 adalah stream cipher yang paling banyak digunakan dalam perangkat lunak; yang lainnya termasuk: A5/1, A5/2, Chameleon, FISH, Helix, ISAAC, MUGI, Panama, Phelix, Pike, SEAL, SOBER, SOBER-128 dan WAKE.
RC4 adalah salah satu desain stream cipher yang paling banyak digunakan.
Perbandingan Stream Cipher
StreamCipher | CreationDate | Kecepatan | (bit) | Serangan | |||
Efektif | Vektor inisialisasi | InternalState | Paling Dikenal | Kompleksitas Komputasi | |||
A5/1 | 1989 | Suara (W phone) | 54 | 114 | 64 | KPA Aktif atau | ~ 2 detik OR2 39.91 |
A5/2 | 1989 | Suara (W phone) | 54 | 114 | 64? | Aktif | 4,6 milidetik |
IKAN | 1993 | Cukup Cepat (W soft) | Besar | ? | ? | Serangan teks rahasia yang diketahui | 2 11 |
Biji-bijian | Sebelum tahun 2004 | Cepat | 80 | 64 | 160 | Pengalihan Kunci | 2 43 |
HC-256 | Sebelum tahun 2004 | 4 (W P4) | 256 | 256 | 65536 | ? | ? |
ISAAC | 1996 | 2.375 (W64-bit) -4 | 8-8288biasanya | N/A | 8288 | (2006) Putaran Pertama-Lemah-Internal-Negara-Derivasi | 4.67×101240 (2001) |
MUGI | 1998-2002 | ? | 128 | 128 | 1216 | N/A (2002) | ~ 2 82 |
PANAMA | 1998 | 2 | 256 | 128? | 1216? | Tabrakan Hash (2001) | 2 82 |
Phelix | Sebelum tahun 2004 | hingga 8 (W x86) | 256 + Nonce 128-bit | 128? | ? | Diferensial (2006) | 2 37 |
Pike | 1994 | 0,9 x FISH (W soft) | Besar | ? | ? | N/A (2004) | N/A (2004) |
Py | Sebelum tahun 2004 | 2.6 | 8-2048? | 64 | 8320 | Teori Kriptanalitik (2006) | 2 75 |
Kelinci | 2003-Feb | 3.7(WP3 )-9.7(WARM7 ) | 128 | 64 | 512 | N/A (2006) | N/A (2006) |
1987 | Mengesankan | 8-2048biasanya | 8 | 2064 | Shamir Pengalihan Kunci-Byte Awal atau KPA | 213 ATAU 2 33 | |
Salsa20 | Sebelum tahun 2004 | 4.24 (WG4 ) -11 | 128 + Nonce 64-bit | 512 | 512 + 384 (kunci + IV + indeks) | Diferensial (2005) | N/A (2005) |
Menjerit | 2002 | 4 - 5 (W soft) | 128 + Nonce 128-bit | 32? | Fungsi putaran 64-bit | ? | ? |
SEAL | 1997 | Sangat Cepat (W32-bit) | ? | 32? | ? | ? | ? |
SALJU | Pra-2003 | Sangat Baik (W32-bit) | 128 ATAU 256 | 32 | ? | ? | ? |
SOBER-128 | 2003 | ? | hingga 128 | ? | ? | Pesan Forge | 2 −6 |
SOSEMANUK | Sebelum tahun 2004 | Sangat Baik (W32-bit) | 128 | 128 | ? | ? | ? |
Trivium | Sebelum tahun 2004 | 4 (Wx86 ) - 8 (W LG) | 80 | 80 | 288 | Serangan paksa (2006) | 2 135 |
Turing | 2000-2003 | 5.5 (W x86) | ? | 160 | ? | ? | ? |
VEST | 2005 | 42 (WASIC ) -64 (W FPGA) | Variabel biasanya | Variabel biasanya | 256 - 800 | N/A (2006) | N/A (2006) |
WAKE | 1993 | Cepat | ? | ? | 8192 | CPA & CCA | Rentan |
StreamCipher | CreationDate | Kecepatan | (bit) | Serangan | |||
Efektif | Vektor inisialisasi | InternalState | Paling Dikenal | Kompleksitas Komputasi |
Halaman terkait
- eSTREAM
Pertanyaan dan Jawaban
T: Apa yang dimaksud dengan stream cipher?
A: Stream cipher adalah sebuah cipher kunci simetris di mana bit-bit plainteks digabungkan dengan aliran bit cipher pseudorandom (keystream) menggunakan operasi exclusive-or (xor).
T: Apa bedanya dengan cipher blok?
J: Stream cipher biasanya dieksekusi pada kecepatan yang lebih tinggi daripada block cipher dan memiliki persyaratan perangkat keras yang lebih rendah. Block cipher beroperasi pada blok besar dengan panjang tetap, sedangkan stream cipher mengenkripsi digit satu per satu dan transformasi digit yang berurutan bervariasi selama status enkripsi.
T: Jenis kunci apa yang digunakannya?
J: Stream cipher menggunakan kunci kriptografi yang jauh lebih kecil dan lebih nyaman, misalnya kunci 128 bit.
T: Bagaimana cara menghasilkan keystream?
J: Keystream dihasilkan berdasarkan kunci kriptografi yang digunakan, dengan cara yang mirip dengan algoritma enkripsi one-time pad. Namun, karena keystream bersifat pseudorandom dan tidak benar-benar acak, keamanan yang terkait dengan one-time pad tidak dapat diterapkan.
T: Mengapa Anda tidak boleh menggunakan keadaan awal yang sama dua kali?
J: Menggunakan status awal yang sama dua kali dapat menyebabkan masalah keamanan yang serius karena memudahkan penyerang untuk mendekripsi data tanpa mengetahui atau memiliki akses ke kunci kriptografi Anda.
T: Apakah ada risiko yang terkait dengan penggunaan stream cipher?
J: Ya, jika digunakan secara tidak benar atau tanpa melakukan tindakan pencegahan yang tepat, maka ada risiko yang terkait dengan penggunaan stream cipher karena mereka dapat benar-benar tidak aman jika tidak ditangani dengan benar.