GTAMulti.com - Türkiye'nin Türkçe GTA Sitesi

Hash nedir? Pawno ile nasıl uygularız?

Başlatan mojo, 08 Şubat 2022, 02:44:53

« önceki - sonraki »

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

mojo

Hash nedir?

Belirli uygulamalara, sitelere veya oyunlara kayıt olurken parola kullanırız. Bu kullandığımız şifreler veritabanına olduğu gibi işlenmez. Tek yönlü bir algoritma yardımıyla şifrelenir ve gerçek parolamızla alakası olmayan karışık rakam ve harflere dönüşür. Dışarıdan sisteme erişen saldırgan şifrelenmiş verileri ele geçirse de bunlar bir işe yaramayacaktır zira bu çoğunlukla tek yönlü bir şifreleme biçimidir ve eski haline döndürülemez.

Bunun güvenliliği kullanıcının parolasıyla ve kullanılan algoritma ile orantılıdır. Şifrelemede düz metin, şifre ve şifre algoritması yardımıyla karıştırılır. Şifrelenen veri şifrenin tekrar girilmesiyle geri eski haline getirilebilir. Her daim iki yönlü bir dönüşüm vardır. Hashlenmiş veride ise böyle bir şey söz konusu değildir.


Örnekler

  • Orijinal metin: sifre123
  • SHA değeri: 669E1F382FB785A2D6205CD5252862F2F443694F67ABA3BC7BCF636747C79977

  • Orijinal metin: sfre123
  • SHA değeri: E20ED03587C9257DB0B75D1DE9067A391DC61A70DCF931B5F2CBF81711208A80

  • Orijinal metin: sifre124
  • SHA değeri: AFA8F873EB5820891ADE83B9D3D7E04BF85B1D9D0FE028E7585AD06A44875D1F

Örneklerden gördüğünüz üzere birbirine benzeyen üç farklı metin girdik. İkinci metnin ilk metinden farkı "i" harfinin çıkartılması ve üçüncü metnin farkı ise 3 yerine 4 yazılmasıydı fakat bizi apayrı sonuçlara götürdü.


Pawno ile nasıl uygularız?

Bunun birkaç farklı yolu var fakat ben bu anlatımda SA-MP'ın kendi fonksiyonu olan SHA256_PassHash fonksiyonunu kullanacağım.

SHA256_PassHash(password[], salt[], ret_hash[], ret_hash_len);
  • password[]            Hashlenecek metini temsil ediyor.
  • salt[]                      Hashlenecek verinin tuzunu temsil ediyor. (aşağıda tuzu anlattım)
  • ret_hash[]              Değişkene aktarıyoruz.
  • ret_hash_len         Değişkenin uzunluğunu belirliyoruz. (varsayılan: 64 + 1)

İlk parametre hashlenmesini istediğimiz metindir, örneğin kullanıcının girdiği şifre olabilir. İkinci parametremiz salt ise tuzlama işlemi içindir. Bunu şöyle düşünebilirsiniz, bir veritabanında aynı şifreye sahip birden çok kişi olabilir ve durumda aynı hashlenmiş çıktıyı alırız. Tuzlama işlemi ile aynı şifrelerde farklılaştırılabilir. Bu kullanıcıya özgü olmalıdır, dolayısıyla bunun üzerine biraz düşünmek gerekir. Örneğin burada random fonksiyonu oluşturarak rastgele bir tuz oluşturabiliriz fakat benim aklıma gelen başka bir yöntem var: Kullanıcı e-posta değişkenini tuz olarak kullanmak. Çünkü aslına bakarsanız bu kullanıcıya özeldir, aynı e-posta adresini kullanan başka bir kullanıcı olmaz çünkü niye olsun? Dolayısıyla bu algoritmamızı sağlam bir hale getiriyor diyebiliriz. Üçüncü parametremiz ise hashlenmiş veriyi bir değişkene aktarıyor ve son parametremiz ise hashlenmiş verinin uzunluğunu (opsiyonel olarak bu 64 olmalıdır fakat gerekli boş değeri hesaba katmak için bunu 65 yapmak sağlıklı bir karar olacaktır) belirliyor.


Salting nedir?

Peki ya zeki birisi en çok kullanılan parolalara karşılık gelen çok sayıda dizenin karmasını hesaplayıp işi kolay yoldan çözmek isterse? Hash değerlerini bu şekilde kırmak kolay olmaz mıydı? İşte bu nedenle hashlenmeden önce parolalara benzersiz ve rastgele bir veri ekleniyor. Bu işleme salting, yani tuzlama deniliyor. Bu işlemlerin sonunda elde edilen parolaya da tuzlanmış, yani salted password denilemekte. Tuzlanıp hashlenerek tutulan parolayı doğrulamak istersek yine salt değerine ve parolanın kendisine ihtiyaç duyarız. Bu tuzlamayı da kişiye özel yapmak güvenliği üst seviyeye çıkartmak oluyor, bu sayede MD-5 ile aralarında oluşan bir farkı kısmen kapatmış oluyoruz.


SHA yöntemi güvensiz mi?

SHA; parolalarda, veri bütünlüğünü doğrulamada, çeşitli protokollerde kullanılan bir hashleme algoritması. Google tarafından yapılan algoritmaya yönelik saldırı deneyinde aynı SHA değerine sahip iki farklı dosyanın var olabileceği gösterilmiş. Temelde ne olursa olsun hash algoritmalarının birbirine denk gelmemesi gerekir. Verilerde bir bit bile değişse hash değeri çok daha farklı olmalıdır fakat yukarıda bahsettiğim gibi tuzlama işlemini kullanıcıya özel yaptığınız takdirde bu sorun ortadan kalkıyor. Yani pawno adına konuşacak olursak benim şahsi cevabım hayır olacaktır fakat Y_Less'e hangisini kullanayım dediğimde Bcrypt kullanmamı önermişti. Muhtemelen veri okuma hızı açısından da Bcrypt kullanmak daha iyidir diye düşünüyorum, karar sizin.


Kaynakça ve ek bağlantılar

https://github.com/lassir/bcrypt-samp/
https://github.com/brbsh/samp-plugin-md5/
https://www.technopat.net/2020/12/28/hash-nedir/
https://open.mp/docs/scripting/functions/SHA256_PassHash/
Son düzenlenme: 08 Şubat 2022, 03:15:37 kaufman

squarepants

Sade, yalın ve güzel bir anlatım olmuş. Paylaşım için teşekkürler. Ek olarak salting işlemi için sadece e - posta adresi yerine, kullanıcı ismi gibi kişiye özel verilerin birlikte kombine edilmesi güvenliği çok daha üst düzeylere taşıyacaktır. Bu arada kullanmak isteyenler için WhirlPool eklentisini de önerebilirim.  :helal:


mojo

Alıntı yapılan: ThePosition - 08 Şubat 2022, 14:29:05
Sade, yalın ve güzel bir anlatım olmuş. Paylaşım için teşekkürler. Ek olarak salting işlemi için sadece e - posta adresi yerine, kullanıcı ismi gibi kişiye özel verilerin birlikte kombine edilmesi güvenliği çok daha üst düzeylere taşıyacaktır. Bu arada kullanmak isteyenler için WhirlPool eklentisini de önerebilirim.  :helal:
Yorumun için asıl ben teşekkür ederim. E-posta adresi de kişiye özel aslında, aynı e-posta adresini birden fazla kişinin kullanamayacağı şekilde ayarlandığı takdirde. Whirlpool eklentisinin sayfasına girdiğinizde artık bunu kullanmayın yazan bir metin karşılıyor bizi. Neden bilmiyorum fakat sanırım artık güvenli sayılmıyor.


sharax

mükemmel anlatım, ellerine sağlık.


squarepants

@kaufman Evet, e posta adresi de kişiye özel ancak tek bilinmeyenli bir denklem yerine çift veya çok bilinmeyenli bir denklemi çözmek çok daha zordur. Örneğin kullanıcı e posta adresinin sahip olduğu karakter ve dizilimleri belirlidir, sabit olduğu için değişmeyecektir. Ancak kişiye ait birden fazla verinin kullanılıp karmaşık (kombine) bir kilit elde etmeye çalışmak güvenlik açısından çok daha koruyucu olacaktır. Sahip olduğun kimlikten yeni bir kimlik elde etmek gibi, bu sayede kullanıcıya ait benzersiz bir kilit metin elde edilebilir ve bu metin salting işlemi için kullanıldığında verilere ait maksimum güvenlik önlemi sağlanılabilir.

Whirlpool eklentisi sahibi konu hakkında ek bir açıklama yapmamış, muhtemelen sizin de bahsettiğiniz gibi diğer hashing algoritmalarına göre çok daha kullanışlı ve efektif olduğu düşünüldüğü için bcrypt fonksiyonları kullanıma sunulmuş. Ancak yine de kullanmak isteyen arkadaşlar için alternatif bir çözüm önerisi olarak bulunuyor. Bu nedenle whirlpool eklentisini de konuya dahil etmek istemiştim.


Wendiassa