Dizi şifresi

Kriptografide, bir **kesintisiz şifreleme**, **dizi şifresi** veya **akış şifresi** () bir simetrik anahtardır. Düz metin bitlerinin bir exclusive-or (XOR) işlemi kullanılarak bir sözde rastgele şifre bit akışı (anahtar dizisi) ile birleştirildiği şifrelemedir. Bir akış şifresinde düz metin sayısal basamakları her seferinde bir tane şifrelenir ve ardışık basamakların dönüşümü şifreleme **durumu** sırasında değişir. Her bir basamağın şifrelenmesi mevcut duruma bağlı olduğundan alternatif bir isim **durum şifresi**dir. Pratikte, basamaklar tipik olarak tek bitler veya baytlardır.

Kesintisiz şifreler, simetrik şifreleme için blok şifrelerden farklı bir yaklaşımı temsil eder. Blok şifreler, sabit uzunluktaki büyük bloklar üzerinde çalışır. Akış şifreleri tipik olarak blok şifrelerden daha yüksek hızda çalışır ve daha düşük donanım kaynağı gereksinimine sahiptir. Bununla birlikte, akış şifreleri yanlış kullanıldığında ciddi güvenlik sorunlarına neden olabilir; özellikle, aynı başlangıç durumu asla iki kez kullanılmamalıdır.

Bir akış şifresi, çok daha küçük ve kullanışlı bir kriptografik anahtar, örneğin 128 bit anahtar kullanır. Bu anahtara dayanarak, tek kullanımlık şifreleme algoritmasına benzer bir şekilde düz metin rakamlarıyla birleştirilebilen sözde rastgele bir anahtar dizisi oluşturur. Bununla birlikte, anahtar dizisi sözde rastgele olduğundan ve gerçekten rastgele olmadığından, tek kullanımlık şifre ile ilişkili güvenlik uygulanamaz ve bir akış şifresinin tamamen güvensiz olması oldukça mümkündür.

## Tek kullanımlık şifreden alınan yarım yamalak ilham
Akış şifreleri, kırılamazlığı kanıtlanmış bir şifre olan tek kullanımlık şifre (OTP:one-time pad) eylemine yaklaşıyor olarak görülebilir. Tek kullanımlık şifre, tamamen rastgele rakamlardan oluşan bir anahtar dizisi kullanır. Anahtar dizisi, şifreli metni oluşturmak için her seferinde bir tane olmak üzere düz metin rakamlarıyla birleştirilir. Bu sistemin güvenli olduğu 1949 yılında Claude E. Shannon tarafından kanıtlanmıştır. Bununla birlikte, anahtar dizisi en azından düz metinle aynı uzunlukta tamamen rastgele oluşturulmalıdır ve birden fazla kez kullanılamaz. Bu durum sistemi birçok pratik uygulamada kullanışsız hale getirmektedir ve sonuç olarak Tek kullanımlık şifre en kritik uygulamalar dışında yaygın olarak kullanılmamaktadır. Anahtar üretimi, dağıtımı ve yönetimi bu uygulamalar için kritik öneme sahiptir.

Bir akış şifresi, 128 bit gibi çok daha küçük ve kullanışlı bir anahtar kullanır. Bu anahtara dayanarak, tek kullanımlık şifreye benzer bir şekilde düz metin rakamlarıyla birleştirilebilen sözde rastgele bir anahtar dizisi oluşturur. Ancak bunun bir bedeli vardır. Anahtar dizisi artık sözde rastgeledir ve bu nedenle gerçekten rastgele değildir. Tek kullanımlık şifre ile ilişkili güvenlik kanıtı artık geçerli değildir. Bir akış şifresinin tamamen güvensiz olması oldukça mümkündür.

## Akış şifrelerinin türleri
Bir akış şifresi, dahili bir duruma dayalı olarak anahtar dizisinin ardışık öğelerini oluşturur. Bu durum iki şekilde güncellenir: 
# Eğer *durum*, düz metin veya şifreli metin mesajlarından bağımsız olarak değişiyorsa, şifre **eşzamanlı** bir akış şifresi ("synchronous stream cipher") olarak sınıflandırılır.
# Eğer *durum*, şifreli metin hanelerindeki önceki değişikliklere göre güncelleniyorsa, şifre **kendi kendini senkronize eden** akış şifreleri ("self-synchronising stream ciphers") olarak sınıflandırılır.

### Eşzamanlı akış şifreleri
Bir **eşzamanlı akış şifrelemesinde** sözde-rastgele rakamlardan oluşan bir akış düz metni ve şifreli metin mesajlarından bağımsız olarak oluşturulur ve ardından düz metin (şifrelemek için) veya şifreli metin (şifreyi çözmek için) ile birleştirilir. En yaygın biçimde, ikili rakamlar (bitler) kullanılır ve anahtar dizisi exclusive-or (XOR) işlemi kullanılarak düz metinle birleştirilir. Bu **ikili eklemeli akış şifresi** ("binary additive stream cipher") olarak adlandırılır.

Bir **eşzamanlı akış şifresinde**, şifre çözmenin başarılı olması için gönderici ve alıcının eşzamanlı olması gerekir. İletim sırasında mesaja rakamlar eklenir veya çıkarılırsa senkronizasyon kaybolur. Senkronizasyonu yeniden sağlamak için, doğru şifre çözmeyi elde etmek üzere çeşitli ofsetler sistematik olarak denenebilir. Diğer bir yaklaşım ise şifre metnini çıktının düzenli noktalarında işaretleyicilerle işaretlemektir.

Bununla birlikte, bir rakam eklenmek veya kaybolmak yerine iletim sırasında bozulursa, düz metindeki yalnızca tek bir rakam etkilenir ve hata mesajın diğer bölümlerine yayılmaz. Bu özellik, iletim hata oranı yüksek olduğunda kullanışlıdır; ancak, hatanın başka mekanizmalar olmadan tespit edilme olasılığını azaltır. Ayrıca, bu özellik nedeniyle, eşzamanlı akış şifreleri aktif saldırılara karşı çok hassastır - bir saldırgan şifreli metindeki bir rakamı değiştirebilirse, karşılık gelen düz metin bitinde öngörülebilir değişiklikler yapabilir; örneğin, çevirme (flipping) şifreli metindeki bir bit, aynı bitin düz metinde çevrilmesine (toggled) neden olur.

### Kendi kendini senkronize eden akış şifreleri
**Kendini senkronize eden akış şifreleri**, anahtar dizisini hesaplamak için önceki *N* şifreli metin basamağının bir kısmını kullanan başka bir tekniktir. Bu tür şemalar **asenkron akış şifreleri** veya **şifreli metin otomatik anahtarı** (CTAK - ciphertext autokey) olarak da bilinir. Kendi kendini senkronize etme fikri 1946'da patentlenmiştir ve alıcının *N* şifre metni basamağı aldıktan sonra otomatik olarak anahtar dizisi üreteci ile senkronize olması avantajına sahiptir, bu da basamaklar düşerse veya mesaj akışına eklenirse kurtarmayı kolaylaştırır. Tek basamaklı hataların etkisi sınırlıdır, yalnızca *N* düz metin basamağına kadar etkiler. Kendi kendini senkronize eden akış şifrelerine aktif saldırılar gerçekleştirmek senkronize benzerlerine göre biraz daha zordur.

Kendi kendini senkronize eden bir akış şifresine örnek olarak şifre geri besleme modunda blok şifre (CFB - cipher-feedback mode) verilebilir.

## Doğrusal geri beslemeli kaydırmalı kayıt tabanlı akış şifreleri
İkili akış şifreleri genellikle doğrusal geri beslemeli kaydırma kaydedicileri (LFSR-linear feedback shift register) kullanılarak oluşturulur çünkü donanım içinde kolayca uygulanabilir ve matematiksel olarak hızlı bir şekilde analiz edilebilirler. Ancak, sadece LFSR kullanımı iyi bir güvenlik sağlamak için yeterli değildir. LFSR'lerin güvenliğini artırmak için çeşitli şemalar tasarlanmıştır.

### Doğrusal olmayan birleştirme fonksiyonları

LFSR'ler doğası gereği doğrusal olduğundan, doğrusallığı ortadan kaldırmak için kullanılan bir teknik, bir grup paralel LFSR'nin çıkışlarını doğrusal olmayan bir Bool fonksiyonu ile besleyerek bir *kombinasyon üreteci* ("combination generator") oluşturmaktır. Böyle bir *birleştirme fonksiyonunun* ("combining function") çeşitli özellikleri, örneğin korelasyon saldırısından kaçınmak amacıyla, sonuç şemasının güvenliğini sağlamak için önemlidir.

### Saat kontrollü üreteçler
Normalde LFSR'ler düzenli olarak adımlanır. Doğrusal olmayan bir teknik, ikinci bir LFSR'nin çıkışı tarafından kontrol edilen LFSR'nin düzensiz olarak saatlenmesini sağlamaktır. Bu tür üreteçler arasında dur-kalk üreteci ("stop-and-go generator"), alternatif adım üreteci ("alternating step generator") ve küçülen üreteç ("shrinking generator") yer alır.

Dur-ve-geç üreteci (Beth ve Piper, 1984) iki LFSR'den oluşur. Bir LFSR, ikinci bir LFSR'nin çıktısı "1" ise saatlenir, aksi takdirde önceki çıktısını tekrarlar. Bu çıktı daha sonra (bazı versiyonlarda) düzenli bir hızda saatlenen üçüncü bir LFSR'nin çıktısı ile birleştirilir.

Küçülen üreteç, farklı bir yaklaşım benimser. Her ikisi de düzenli olarak saatlenen iki LFSR kullanılır. İlk LFSR'nin çıkışı 1 ise, ikinci LFSR'nin çıkışı üretecin çıkışı olur. Ancak ilk LFSR 0 çıktısı verirse, ikincinin çıktısı atılır ve üreteç tarafından hiçbir bit çıktısı verilmez. Bu mekanizma, çıkışın hızı ikinci üretecin durumuna bağlı bir şekilde değişken olduğundan, ikinci üretece yönelik zamanlama saldırılarından mustariptir. Bu durum çıkışın tamponlanmasıyla hafifletilebilir.

### Filtre üreteci
Bir LFSR'nin güvenliğini artırmaya yönelik bir başka yaklaşım da tek bir LFSR'nin tüm durumunu doğrusal olmayan bir *filtreleme fonksiyonuna* ("filtering function") aktarmaktır.

## Diğer tasarımlar
Doğrusal bir sürücü aygıt yerine, doğrusal olmayan bir güncelleme işlevi kullanılabilir. Örneğin, Klimov ve Shamir *n* bitlik kelimeler üzerinde tek bir döngüye sahip üçgensel fonksiyonlar (T-fonksiyonları) önermiştir.

## Güvenlik
Güvenli olması için, akış dizisi periyodunun (akış kendini tekrar etmeden önce çıkan basamak sayısı) yeterince büyük olması gerekir. Eğer dizi tekrarlanırsa, üst üste binen şifreli metinler birbirlerine karşı *"derinlemesine"* ("in depth") hizalanabilir ve bu yöntemler kullanılarak oluşturulan şifreli metinlerden düz metnin çıkarılmasını sağlayan teknikler vardır.

## Kullanım

Akış şifreleri, genellikle güvenli kablosuz bağlantılarda olduğu gibi düz metnin bilinmeyen uzunlukta miktarlarda geldiği uygulamalarda kullanılır. Bu tür bir uygulamada bir blok şifre kullanılacak olsaydı, blok şifreler blok boyutlarından daha kısa bloklar üzerinde doğrudan çalışamayacağından, tasarımcının iletim verimliliği veya uygulama karmaşıklığı arasında seçim yapması gerekirdi. Örneğin, 128 bitlik bir blok şifre ayrı 32 bitlik düz metin patlamaları alırsa, iletilen verinin dörtte üçü dolgu gerektirir. Dolgudan kaçınmak için blok şifreler, şifreli metin çalma veya artık blok sonlandırma modunda kullanılmalıdır, akış şifreleri ise iletilen en küçük birim (genellikle bayt) üzerinde çalışarak bu sorunu ortadan kaldırır.

Akış şifrelerinin askeri kriptografideki bir diğer avantajı, şifre akışının sıkı güvenlik önlemlerine tabi bir şifreleme cihazı tarafından üretilebilmesi ve daha sonra işlevlerinin bir parçası olarak XOR işlemini gerçekleştirecek olan radyo seti gibi diğer cihazlara beslenebilmesidir. Diğer cihaz daha az güvenli ortamlarda kullanılmak üzere tasarlanabilir.

ChaCha, yazılımda en yaygın kullanılan akış şifresi haline gelmektedir;, diğerleri şunlardır:
RC4,
A5/1,
A5/2,
Chameleon, 
FISH, 
Helix,
ISAAC, 
MUGI,
Panama,
Phelix, 
Pike,
SEAL, 
SOBER,
SOBER-128 ve
WAKE.

## Akış şifrelerinin karşılaştırılması

## Ek bilgiler
* Amerika Birleşik Devletleri Ulusal Güvenlik Ajansı belgelerinde bazen **birleştirici-tip algoritmalar** ("combiner-type algorithms") terimi kullanılmakta ve bir sözde rastgele sayı üreteci (PRNG) ile bir düz metin akışını birleştirmek için bazı işlevler kullanan algoritmalara atıfta bulunulmaktadır.

## Ayrıca bakınız
* eSTREAM
* Linear-feedback shift register (LFSR)
* Nonlinear-feedback shift register (NLFSR)

## Notlar

## Kaynakça
* .
* 
* Christof Paar, Jan Pelzl, "Stream Ciphers", Chapter 2 of "Understanding Cryptography, A Textbook for Students and Practitioners". (companion web site contains online cryptography course that covers stream ciphers and LFSR), Springer, 2009.

## Dış bağlantılar
* [ftp://ftp.rsasecurity.com/pub/pdfs/tr701.pdf RSA technical report on stream cipher operation.]
* Cryptanalysis and Design of Stream Ciphers (thesis by Hongjun Wu).
* Analysis of Lightweight Stream Ciphers (thesis by S. Fischer).