ÖZET
Salsa20 ve yakından ilişkili ChaCha, Daniel J. Bernstein tarafından geliştirilen akım şifreleridir. Temel işlevi 256 bitlik bir anahtar yardımı ile 64 bitlik tekliği buna ek olarak 64 bitlik sayaç anahtar akışında 512 bitlik bloğuna eşler (128 bit anahtarlı bir Salsa sürümü de mevcuttur). Salsa20 ve ChaCha'ya, kullanıcının değişmez zamanda anahtar akışındaki rastgele bir pozisyonu faydalı bir biçimde arayabileceği gizeme dışı bir avantaj sağlar. Salsa20, çağdaş x86 harekâtçılardaki yazılımlarda bayt başına takribî 4–14 döngü süratleri ve mantıklı ekipman performansı sunar. Tescilli değildir ve Bernstein, ortak mimari kavramlar için optimize edilmiş birkaç kamu mülkü uygulaması yazmıştır.
TARİHÇESİ
Salsa20 / r, Daniel J. Bernstein tarafından yazılım odaklı bir akış şifreleme ürünüdür. Algoritma, 128 ve 256 bitlik anahtarları destekleyecek şekilde tasarlanmıştır. 512 bitlik ilk gidişatı oluşturmak için anahtar, 64 bitlik bir nonce eşsiz ileti numarası, 64 bitlik bir sayaç ve dört 32 bitlik statik kullanılır. Salsa20 / r döngü işlevinin tekrar yinelemeleri sonucunda, güncellenmiş durum 512 bitlik bir anahtar akış çıkışı olarak kullanılır. Bu cins her çıkış bloğu, anahtar, nonce ve sayacın bağımsız bir kombinasyonudur.Bloklar arasında zincirleme olmadığından, Salsa20 / r'nin çalışması, sayaç modunda bir blok parolasının çalışmasına eş. Bu sebeple Salsa20 / r, aynı uygulama avantajlarını, özellikle de rastgele bir sırada ve paralel olarak çıktı blokları oluşturma maharetini paylaşır. Salsa20 / r anahtar dizisinin maksimum uzunluğu 270 bittir.
Salsa 20'nin yuvarlak dönüşümü üç farklı aşamanın kombinasyonunu kullanır: ekleme modulo 232, bit döndürme ve XOR (o zamandan beri ARX yapısı olarak bilinir). Bu aşamaların yazılımda verimli bir şekilde uygulanması sonucunda şifrenin iyi bir yazılım performansı ortaya çıkarılmasına imkan tanır.
ESTREAM içinde, dönme tur sayısına bağlı bir şekilde Salsa 20'nin üç çeşidi önerildi: Salsa20 / 8, Salsa20 / 12 ve Salsa20 / 20. Her biri ayrı bir güvenlik ve performans dönüşümü sağlar. Salsa20 / 20, tasarımcısı tarafından "basit kriptografik uygulamalarda şifreleme" yapılmak üzere önerilmekte. Salsa20 / 12 ve Salsa20 / 8 versiyonları sırasıyla 12 ve 8 tur atma kapasitesine sahiptir ve tasarımcısı bu turları "hıza güvenden daha fazla değer veren kullanıcılar" için özel olarak önermektedir. ESTREAM komitesi, farklı sürümler içerisinde en dengeli ve en performanslı olan bir güvenlik marjı ile birleştirilen Salsa20 / 12'nin kullanılmasını tavsiye etti.
ÇALIŞMASI
Salsa20'ye 64 baytlık giriş x, little-endian (İnsanların sol taraftan sağ tarafa veya sağ taraftan sol tarafa alfabelere sahip olmaları gibi işlemciler kısmında da baytları saklarken önemli olan byte'ın sol veya sağ tarafta olmasına göre sınıflandırılabilir. Buna endianness adı verilir. Arap rakamlarında da olduğu gibi önemli olan byte'ın sol tarafta olduğu sıralamaya big-endian adı verilir. Önemli olan byte'ın en sağda olduğu sıralama da little-endian adıyla anılır.) biçimindeki, {0,1, ..., 2 ^ 32-1} 'de 16 kelime ve x0, x1, x2, ..., x15 olarak söylenebilir. Bu 16 adet kelime her bir modifikasyonun ayrı bir kelimeyi değiştirdiği 320 derece ters çevrilebilir modifikasyondan beslenerek hareket eder. Ortaya çıkan yeni 16 kelime, sırasıyla modul 2 ^ 32 orijinal x0, x1, x2, ..., x15'e eklenir ve little-endian biçiminde 64 baytlık Salsa20 (x) çıktısı meydana gelir.
Her modifikasyon, modul 2^32 iki kelimenin toplamının döndürülmüş versiyonunu tek kelime haline getirir. Bunun sonucunda, 320 modifikasyon, genel olarak, 320 ekleme, 320 xor ve 320 döngü içerir. Rotasyonların tümü sabit bir mesafe etrafındadır.
Tüm değişiklik seti, 10 adet aynı çift tur ile oluşan bir seridir. Her bir tur 4 paralel çeyrek turdan oluşan bir setten oluşmaktadır. Her çeyrek tur ise 4 kelimeyi değiştirecek şekilde tasarlanmıştır.
TASARIM
Salsa20, 2005 yılında tasarlanmıştır. ENCRYPT Stream Cipher Project olan eSTREAM'e sunulan 256-bit akış şifreleme ailesine üyedir.
Salsa20, eSTREAM'in üçüncü tur kısmına herhangi bir değişiklik yapılmadan devam edildi. 20 turdan oluşan akış şifresi Salsa20 / 20, AES'den tutarlı, daha hızlı ve tasarımcı tarafından basit kriptografik uygulamalar için kullanılması önerilir. Azaltılmış sayıdaki yuvarlak şifreler Salsa20 / 12 ve Salsa20 / 8, mevcut ve en hızlı 256-bit akış şifreleri arasında yerini almaktadır. Hızın güvenden daha önemli olduğu uygulamalar için de ayrıca önerilir. Bilinen en hızlı saldırılar Salsa20 / 7'ye karşı ≈ 2153 basit, Salsa20 / 8'e karşı ≈ 2249 basit ve Salsa20 / 9, Salsa20 / 10 vb. İçin ≈ 2255 basit operasyonlar için kullanır.
YAPILAN ÇALIŞMALAR
Salsa 20'nin tasarımcısı kısa zaman önce, 192 bit nonce'yi destekleyen tüm algoritmaların (XSalsa20 - makalesi olarak adlandırılır) yeni bir versiyonunu önerdi. XSalsa20, Salsa20 ile aynı güvenlik kritelerine ve hıza sahip olmasıyla beraber, daha uzun nonce gerektiren uygulamaların kullanımı için daha uygun olduğu söylenir. 2008 yılında Bernstein tarafından önerilen ChaCha adı verilen bir akım şifreme ailesi, Salsa 20'nin tek bir dönüşünde difüzyonu iyileştirmeyi amaçlayan "tur başına süreyi korurken ve iyileştirirken " geliştirmeyi amaçlayan bir çeşit olarak bilinir. SHA-3 finalistlerinden olan karma işlevi BLAKE'in tasarımı, ChaCha akış şifresinin altyapısına dayanmaktadır. Tasarımcı, Salsa 20'nin tamamen ücretsiz olduğunu belirtmektedir.
KRİPTOANALİZ DETAY
Salsa20, yayınlanmasından sonraki yıllarda önemli kriptografik analizlerden ve değerlendirmelerden geçti. Şifrenin azaltılmış döngü sürümlerinde birkaç saldırı bulunmasına rağmen, Salsa20 / 12 veya Salsa20 / 20'de detaylı anahtar bulmadan daha iyi bir saldırı yoktur. SASC 2006'da Crowley, Salsa20 / 5'e bir anahtar elde etme saldırısı sundu. Saldırı, üç döngü için bölünmüş diferansiyelleri kullanarak, zaman karmaşıklığı 2165 ve veri karmaşıklığı 26 olacak şekilde tasarlanmıştır. Salsa 20'nin dört döngüsünden sonra bazı rastlantısal olmayan özellikleri görüldü ve bu gözlemi, zaman karmaşıklığı 2177, veri karmaşıklığı 216 ile Salsa20 / 6'ya bir anahtar bulma saldırısı oluşturmak için kullanıma sunuldu. Yazarlar bunlara ek olarak Salsa20 / 7'ye zaman ve veri karmaşıklığı sırasıyla 2217 ve 224 anahtar saldırısı bildirdi.
SASC 2007'de Tsunoo ve ark Salsa20 / 7'ye saldırı düzenlemek için dört döngü Salsa 20'den sonra önyargıdan yararlanıldı. Saldırının zamanı ve veri karmaşıklığı sırasıyla 2190 ve 211,37 olacak şekilde belirtildi. FSE 2008'de Aumasson ve ark Salsa20 / 7'deki saldırıyı iyileştirerek, Salsa20 / 8 deki ilk anahtar bulma saldırısını meydana çıkardı. Olasılıksal nötr bitler adı verilen tekniğe dayalı diferansiyel saldırı çeşididir. Yazarlar, dördüncü döngüden sonra çıktıda bir önyargı tespit eder. Bunun sonucunda zaman karmaşıklığı 2251 ve veri karmaşıklığı 231'de 8 döngü saldırmak için kullanır.
ALGORİTMA DEĞERLENDİRME
64 bayt veri bloğunda kullanılmak üzere algoritma Salsa20 genişletme işlevi seçilir. Fonksiyonun girdi değeri gizli anahtarıdır (32 veya 16 bayta sahip olabilir). Ek bir blok numarası ile birleştirilen 8 byte uzunluğunda, değerleri 0'dan 264-1'e kadar değişkenlik gösterir. Genişletme işlevine yapılan her bir çağrı, blok numarasını bir artıracak şekilde tasarlanmıştır.
Salsa20 şifreleme algoritmasının temeli, Salsa20 genişletme işlevinden 64 byte'lık uzun girdi verilerini alan, karıştıran ve sonucunda 64 byte'lık uzun bir çıktı döndüren karma bir işlevdir. Salsa20 hashleme işlevi, aşağıdakilerden oluşan ve alınan byte dizisi üzerinde çalışır:
- Gizli anahtar ile
- Sayı bloklarını bir kez kullanacak şekilde
- Değerleri gizli anahtarın boyut bilgisine bağlı olan bir genişletme işleminden alınan dört sabit yöndür
Karma işlevi kelimeler ile bölünmüş veriler üstünde çalışır. Her bir kelime 4 byte içerir ve 0 ile 232-1 arası değerlere sahip olacak şekildedir. Bu nedenle, girdi verileri 16 kelime uzunluğundadır. Bir anahtar 8 veya 4 kelime içerir. Nonce 2 kelimeye sahiptir.
Salsa20 genişletme işlevinin çıkış noktası, 64 baytlık veri bloğuna XOR eklenmesidir. Sonuç 64 byte'lık şifreli metin bloğudur.