Merhaba arkadaşlar bu yazımda sizlere javanın authentication algoritmalarından bir tanesi olan digest Authorization algoritmasından ve bunun java tarafında nasıl  kodlanacağından bahsetmek istiyorum.

Bu algoritma herhangi bir sistemde iletişim yapan kişiler arasına, yabancı bir kişi girdiğinde o kişinin araya girip paketi ele geçirse dahi, paketi ele geçiren kişi için hiçbir anlam içermeyen sayı ve harflerden oluşan bir metin haline getirmemizi sağlar. Bunun için özel ve unique (özgün) bir değişken olan nonce değişkenini kullanacağız.  Bu değişken daha çok Replay Attack saldırılarında kullanılmaktadır.

Replay Attack nedir kısaca açıklayalım. Saldırganlar, servis ile istemci arasına girerek, gönderilen paketleri yakalar ve sahibine geri yollar. Bunu sıklıkla tekrar ederler. Bu durumda, paketin göndericisi paketi gönderemediğini düşünür ve yeniden göndermeye çalışır. Dolayısıyla paketin göndericisi sürekli meşgul durumda kalarak hizmet veremez hale gelir. Buna engel olmak içinde nonce değişkeni kullanıp onu da currenttype ve şifrelenmesini istediğimiz şifre ile sha1 algoritmasına göre hashleyerek sonuçda araya giren ve o şifreye sahip olmayan kişilerin çözmekte zorlanacakları güvenli bir bağlantı sağlamış oluruz.

Bu kadar ön bilgi verdikten sonra şimdi geliyoruz algoritmayı java koduna nasıl dönüştüreceğimiz

İlk olarak nonce dediğimiz ifadeyi yazıyoruz. Bunun özel bir algoritması var onu kullanıyoruz.

Yukarıda yer alan kodda nonce değerinin nasıl bulunduğunun java kodu vardır. Tavsiye edilen nonce stringi 128 byte yani 256 bit uzunluğunda bir tane karekter dizisi olmalıdır. Daha aşağısı nonce değerinin tahmin edilmesinin kolaylaşmasına, daha uzunu ise algoritmanın çok yavaş çalışmasına ve istenilen rastgeleliğin sağlanamamasına neden olmaktadır. Burada bir random olarak secure random kullandık. İsteğe bağlı olarak current time yada rastgele özelliği sağlayacak başka ifadelerde getirilebilir.

SHA1 e göre işlemi yapıyoruz. Kodun devamında 16 şar bytelik byte paketlerine ayrılarak onu da güvenliği daha da artırmak için Base64 ile encode ediyoruz.

Daha sonra ise generatePasswordDigest methodunda, ramda bu işlem için 1000 bytelık alan ayırıyoruz ve yazı formatını utf8 belirliyoruz. Bu işlemlerden sonra çıkan sonucu ise  SHA1 ile hashleyip, onu da tekrar hashleyerek güvenli bir token oluşturmuş oluyoruz.

Maven projesi oluşturmuşsanız

Burada yer alan jarları eklemeyi unutmayınız. Yalnızca maven için değil, gradle grapy yada normal jar eklemek içinde bu koldarı kullanmalısınız. Aksi takdirde jar bulunamadı şeklinde bir syntax hatası alırsınız.