Kriptoloji ve GüvenlikProtokolleri
Yeni başlayanlar için ChaCha20
Hazırlayan: Özgür KUTUR - 927220110
Danışman : Öğr. Gör. Mehmet Fatih Zeyveli
2.
ChaCha20 Tarihçesi
Salsa20ve yakından ilişkili ChaCha algoritmaları, Daniel J.
Bernstein tarafından geliştirilen akış şifreleridir.
Salsa20, 2005 yılında tasarlanmış ve daha sonra Bernstein
tarafından eSTREAM Avrupa Birliği kriptografik doğrulama
sürecine sunulmuştur. ChaCha, Salsa20'nin 2008'de yayınlanan
bir modifikasyonudur.
2008'de Bernstein , Salsa’ya göre aynı ve biraz daha iyi
performans elde ederken tur başına difüzyonu artırmayı
amaçlayan yakından ilişkili ChaCha şifreleme ailesini yayınladı.
Günümüzde ise ChaCha20 performansından ve güvenirliğinden
dolayı Ipsec/Vpn protokollerinde de aktif olarak kullanılmaya
başlandı.
3.
ChaCha20 Tarihçesi
2013yılında Google, ChaCha20'yi uygulamaya başladı ve
Poly1305 şifreleri ürünlerinde RC4’un yerine kullanmaya
başlandı.
Google'ın uygulaması , Android telefonlardaki Chrome
tarayıcısı ile Google'ın web siteleri arasındaki HTTPS ( TLS /
SSL ) trafiğini ChaCha20 ile güvence altına aldı.
ChaCha20, genellikle CPU'nun AES hızlandırma özelliğine sahip
olmadığı sistemlerde ( x86 işlemcileri için AES komut seti gibi)
daha yaygın olan Gelişmiş Şifreleme Standardı (AES)
algoritmasından daha iyi performans sunar . Sonuç olarak,
çoğunlukla ARM tabanlı CPU'lar kullanan mobil cihazları içeren
belirli kullanım durumlarında ChaCha20 bazen AES yerine
tercih edilir .
4.
ChaCha20 İşlevselliği
ChaCha20’nintur sayısı 20’dir.
Bu 20 turun, bir turu ise 4 çeyrek turdan oluşmaktadır.
Temel işlevsel olarak 256 bit anahtar uzunluğundadır.
ChaCha20’de Nonce 96bitlik bir değer ile kullanılmaktadır.
ChaCha20 blok işlevi, düz metni döndüren şifreli metinle XOR
bir anahtar akışını genişletmek için kullanılır.
ChaCha20, modern x86 işlemcilerdeki yazılımlarda bayt
başına yaklaşık 4–14 döngü hızları ve makul donanım
performansı sunar.
5.
ChaCha20 Yapısı
ChaCha'nınbaşlangıç durumu Salsa20'nin başlangıç durumuna
benzer, ancak bazı farklılıklar vardır.
ChaCha Algoritması girişi 256 bit anahtar, 32 bit bir sayaç, 96
bit nonce ve düz metin içerir.
Başlangıç durumu, 32 bitlik sözcüklerden oluşan 4x4 bir
matristir. İlk satır, 4x32-bit sözcüklere bölünmüş sabit bir
"genişletme ile 32 bayt k" dizesidir. İkinci ve üçüncü 256 bit
anahtarla doldurulur.
Son satırdaki ilk kelime 32 bit sayıcı ve diğerleri 96 bit
nonce'dir. 512 bitlik bir düz metin yığınını şifrelemek için her
yinelemede 512 bit anahtar akışı oluşturur.
6.
ChaCha20 Akış Şeması
KSG: Key Stream Generator (Anahtar Şifre oluşturucu)
Nonce: Number Only Used Once (Yalnızca Bir Kez Kullanılan Sayı)
256 bit key : Şifreleme işleminde kullanılacak olan anahtar
Block Number : Blok sayımız veya sayacımız
Bir ChaCha20 round yapısında,
7.
ChaCha20 Yapısı
Oluşanbu şifreli blok Aes bloğuna benzer. Fakat boyut olarak
daha küçüktür.
Bu oluşan bloklar 4x4 her biri 32bitlik bloklardır.
Toplamda 512 bittir.
Fakat bu oluşan bloklar, blok şifreleme(block chiper) değildir.
Bunlar dizi şifrelemesidir(Stream chiper).
8.
ChaCha20 Round
Pekibu bir rounda neler oluyor ?
Bir rounda 3 işlem kullanılıyor
Ekleme (iki 32 bitin eklenmesi)
XOR işlemi (iki biti XORing)
Döndürme işlemi
Her bir eklemede 2 tam sayı birlikte alınıyor. Bu tam sayıları
bulmak için matematiksel mod 32 işlemi uygulanıyor.
Bu işlemler sonucu bir bloğumuz tamamen karışmış ve
şifrelenmiş oluyor.
9.
ChaCha20 Round
Aslındabu 3 işlem bir yapıldığında bir çeyrek tur oluşmuş
oluyor.
Bu oluşan çeyrek turların 4 defa tekrar etmesi ile tam bir
ChaCha20 turu oluşmuş olur.
Bu oluşan bir tam tur ise 20 defa daha yapınca Chacha20
algoritması tamamlanmış oluyor.
10.
ChaCha20 Şifre Çözme
Diğer şifreleme yöntemlerinde olduğu gibi ChaCha20
yönteminde de şifreleme ile şifre çözme işlemindeki tek fark,
son adımda gerçekleştirilen XOR işlemidir.
Şifreleme ile benzer olarak şifre çözme işlemlerinde de
“key_stream” değerleri elde edilmektedir. Elde edilen bu
“key_stream” değerleri “Ciphertext” ifadesi ile XOR işlemine
tâbi tutularak “Plaintext” ifadenin elde edilmesi sağlanır.
#7 -Bir dizi anahtar biti oluşturur. Bunlar K0 K1 K2 gibi
Peşinde Mesajımız gelir ve oluşan dizi anahtarı ile XOR’lanır ve şifreli bir metin oluşur.
Bu örnekte Şifrelenmiş metinimiz tekrardan 32 bitlik bir blok haline geliyor.
#8 -Çünkü bir önceki işlemde anahtar şifreleme yapmıştır yani key stream.