Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sha256'dan Daha Güvenli Bir Hash Algoritması #15

Open
yusufyilmazfr opened this issue Jun 20, 2021 · 10 comments · May be fixed by #38
Open

Sha256'dan Daha Güvenli Bir Hash Algoritması #15

yusufyilmazfr opened this issue Jun 20, 2021 · 10 comments · May be fixed by #38
Labels
question Further information is requested

Comments

@yusufyilmazfr
Copy link
Member

Uygulama içerisinde örnek bir hash algoritması olsun ve süreç devam edilsin diye Sha256 kullanıldı.

Sha256'dan daha güvenli ya da çözülmesi daha uzun süren başka bir algoritma da kullanılabilir. Brute-force ve diğer atakların önüne geçmek için. Önerileri bekliyoruz. 👇

@yusufyilmazfr yusufyilmazfr added the question Further information is requested label Jun 20, 2021
@oguzkurtcuoglu
Copy link
Collaborator

Öncelikle aspnetcore identity neden kullanmadık ve neden kendimiz auth işlemlerini yaptık? Belirli bir sebebi mi var bilmediğim için soruyorum.
Gördüğüm kadarı ile register esnasında, kullanıcının şifresi 1 kez sha256 ile şifrelenip öyle saklanıyor. Aspnetcore Identity içerisinde 1000 iterasyon gerçekleşir ve direkt plain text hashlenmez. Salt ekleme gibi başka bir çok operasyonda yapılıyor. Bu tarz özellikle security ile ilgili işlemlerin tüm usecase'lerini kendimiz implemente etmemiz çok zor. Ayrıca ekstra bir sebep yok ise bu daha da zaman alıcı olacaktır. Öncelikle aspnetcore identity konusunu netleştirelim derim :)

Sorudaki Sha256'dan daha güvenli ve çözülmesi uzun konusuna gelirsek, Çözülme durumu tabi bildiğiniz üzere mümkün değil ama rainbow table'larda özellikle basit şifrelerin encrypt halleri bulunabiliyor. Zaten bu yüzden direkt plain text alınıp tek sefer sha256 hale getirmek yeterli değil. https://github.com/aspnet/Identity/blob/master/src/Core/PasswordHasher.cs buradan bir password hash'in nasıl yapıldığına bakabilirsin. V3'e bakarsan daha iyi olacaktır.

@yusufyilmazfr
Copy link
Member Author

ASPNET Core Identity kullanmamak için özel bir sebebimiz yok açıkçası. Kaynak kodların sade, bir o kadar da başka şeylere ihtiyacı olmamasını istedik. JWT + Hash temel olarak işimizi görür diye düşündük. Yetersiz geldiği durumlarda tabii değerlendirilebilir.

Hash algoritması kısmında ise proje başlangıcında "Hangi hash algoritmasını kullanalım?" sorusuna zaman kaybetmemek için SHA256 ile başladık. O işlemler zaten soyutlandı, implementasyon detaylarına çok odaklanmadık. Şimdi iyi bir tartışma konusu olabilir diye düşündük. Salt key ve yüksek iterasyon sayısı ile de olabilir, hangisi daha uygun ise.

Daha güvenli ya da çözülmesi uzun sürecek kısmını detaylandırmak gerekirse de, evet hash algoritmaları geri dönülebilir değil. Brute force atakları gibi yöntemler ile karşılaştırılarak bulunabilir. Buradaki algoritmanın çalışma hızına değinmek istemiştim, bazı algoritmalar yavaş çalıştığından dolayı bu saldırılar çok uzun sürmektedir. Bknz: Bcrypt | StackOverflow

@umutluoglu
Copy link
Member

umutluoglu commented Jun 22, 2021 via email

@oguzkurtcuoglu
Copy link
Collaborator

Şu an yapılmış değiştirelim diye demiyorum öncelikle :) Yalnız auth işlemlerinde sadece login/register olayları değil bildiğiniz üzere password Reset, email Verification gibi başka handle edilmesi gereken olaylarda var. Bu yüzden sonraki projelerde bunları da göz önünde bulundurarak var olan sistemleri kullanırsak daha az uğraştığımız ve daha iyi/güvenli olan bir yapımız olacaktır. Tabi abstraction uygulamak çok mantıklı auth sistemini tamamen kendimizin yazması gerektiği durumlarda olabilir bu yanlıştır demiyorum. Sadece yapılanı anlamak ve bildiğim kadarı ile fikir vermek için yazdım :).

@yusufyilmazfr aslında şifrelemede bir çok algoritmayı kombine ederek süreler tabiki uzatılabilir ama şöyle bir durum var bu sadece saldıranı değil bizim kendi sistemimizide yoracaktır. Günümüzde özellikle Cloud çözümlerde cpu işlem süreleri çok önemli bildiğiniz üzere. Biz bu algoritmayı çok çok zorlaştırıp uzun sürmesini sağlayabilir miyiz evet ama bu bizim sunucu maliyetimizide ciddi oranda etkileyecektir özellikle saldırı altında olduğumuz durumlarda. Şöyle düşünelim atıyorum login ekranında aldığımız şifreyi hashlememiz 2 saniye sürsün. Sonrasında bu hash'i db de olan hash ile karşılaştıracağız malum. Bir DDOS saldırısında belki binlerce client bu logine saldıracak. Bu durumda Cloud provider'lara iyi paralar ödememiz gerekecektir :) @umutluoglu hocam yanlış/eksik varsa sizin düşüncenizi de beklerim..

@yusufyilmazfr https://www.youtube.com/watch?v=gdI71QhJ1H0 buradan Gökhan Şengün'ün konumuz ile ilgili anlatımını izlemeni hatta Youtube'a Gökhan Şengün yazıp yaptığı tüm sunumların videolarını izlemeni tavsiye ederim. @umutluoglu hocam tanıyacaktır Gökhan çok güzel anlatımlar yapmakta.

@yusufyilmazfr
Copy link
Member Author

@oguzkurtcuoglu öncelikle güzel önerileriniz için teşekkür ediyorum, Gökhan Şengün'ü severek takip ediyorum ve o videosunu da izlemekten hoşnut olurum. :)

Şunu da söylemem gerekiyor ki söylediklerinizde sonuna kadar haklısınız burada karşı duracağım bir şey de yok, benim açıklamalarımda bu fikri yapmamızdaki düşüncelerimizi dile getirdim. :)

@umutluoglu
Copy link
Member

umutluoglu commented Jun 27, 2021 via email

@oguzkurtcuoglu
Copy link
Collaborator

oguzkurtcuoglu commented Jun 27, 2021 via email

@umutluoglu
Copy link
Member

umutluoglu commented Jun 27, 2021 via email

@yusufyilmazfr
Copy link
Member Author

Migration işlemleri için PR atmıştım şu an da açık, burada kullanımı var. database-migration

@umutluoglu
Copy link
Member

umutluoglu commented Jun 27, 2021 via email

@halilkocaoz halilkocaoz linked a pull request Sep 3, 2021 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants