Bu yazımda bir Android mobil uygulama geliştirirken, öğrendiğim ve projemde kullanmam gereken, aynı zamanda ilgimi de çeken ve en çok kullanılan kripto algoritmalarından biri kabul edilen SHA1 (Secure Hash Algorithm 1) yani Güvenli Özetleme Algoritması‘ndan bahsedeceğim.
SHA1 algoritmasının yanı sıra SHA0, SHA2, SHA3, MD5 algoritmalarının olduğunu da belirteyim.
Kısaca açıklayayım:
SHA2, yaygın olarak kullanılan bazı güvenlik uygulamalarında ve protokollerde kullanılmaktadır, örneğin TLS, SSL, PGP, SSH, S/MIME ve IPsec.
SHA3, Güvenli Özetleme Algoritma ailesinin en son üyesidir. Aynı standart serinin parçası olmasına rağmen SHA3, dahili olarak SHA1 ve SHA2’nin MD5 benzeri yapısından oldukça farklıdır.
MD5 (Message-Digest algorithm 5), yaygın olarak kullanılan bir kriptografik özet fonksiyonudur. Girilen verinin boyutundan bağımsız olarak, 128-bit özet değeri üretir.
Hash ise, verilen kelimenin veya kelime bütününün içinden anahtar kelimeler belirleyerek bir şifre ortaya atar. Girilen şifrenin doğruluğunu ise, bu hash metninin içindeki anahtar kelimeleri çıkartıp, aslıyla karşılaştırarak bulur. Bu hash değeri 128 bittir.
Çakışmalar (Collisions): Şifreleme algoritmalarında karşı karşıya gelinen problemlerden biri de çakışmalardır. Çakışma, iki farklı verinin şifreleme işlemi sonrasında, aynı özete sahip olmasından kaynaklanmaktadır. SHA1 ile birlikte en yaygın kullanılan şifreleme algoritması olarak tanımlayabileceğimiz MD5 algoritması ile 128 bitlik özetler oluşturulur. Bu durumda 264 deneme yapmak, çakışma bulmak için yeterli olacaktır. SHA1 algoritmasında bu durum 160 bitlik özetler oluşturularak ve çakışmaya karşı güvenlik derecesi 280 denemeye çıkarılarak daha güvenli hale getirilmiştir.
SHA-1 (Secure Hash Algorithm 1)
SHA1, en fazla 264 bitlik bir girdi kullanır ve 160 bit özetleme değeri üretir, çakışma olmaması için 80 bitlik güvenlik sağlayabilir. Bu algoritma yalnızca şifreleme için kullanılır. Şifre çözmeye dayalı bir algoritma değildir. Oluşturulan özetten orjinal veriye geri dönülemeyeceği varsayılır. SHA1 algoritması; e-posta şifreleme uygulamaları, güvenli uzaktan erişim uygulamaları, özel bilgisayar ağları ve daha bir çok alanda kullanılabilir. MD5 ile aynı şekilde çalışan ve aynı yerlerde kullanılmasıyla beraber en büyük farkı, veri tabanı yönetimi sağlayabilmesidir. Bit düzeyinde lojik işlemler kullanılarak bir hash metnini ortaya çıkartır.
Bu işlem sırasında 512 bitlik bloklar ayrılır ve bit yetmiyorsa son bit dizilerine ekleme yaparak 512 bite tamamlar. Bu 512 bitlik metin, 16 bitlik 16 adet mesaj parçacığına ayrılır ve her mesaj parçacığı için normal bir dört işlem uygulandıktan sonra, Sola Kaydırma işlemi uygulanır. Bu işlem art arda 4 kez uygulanarak 160 bitlik bir şifre dizisi oluşur.
Android için SHA1 Değerini Öğrenme
Projemde Google API KEY almak için SHA1 değerini öğrenmem gerekiyordu. Projeyi Android Studio kullanarak Linux dağıtımında geliştirmeyi düşünüyordum. Tabii o zamanlar konu hakkında pek fikrim olmadığı ve Windows’ta SHA1 değerine hızlı bir şekilde ulaştığım için önce Windows’ta devam etmiştim. Bu iş böyle olmaz deyip, Linux için araştırmaya başlamıştım, terminal ekranından çok daha hızlı şekilde bulunabildiğini fark ettim. Her ikisi için de örnekleri paylaşacağım.
SHA kısmı ise iki şekilde yapılır: APK olarak mı test edeceğimiz yoksa emülatör ortamında mı debug olarak test edeceğiz, Release ya da debug certificate olarak geçiyor. Kısaca Release için uygulamanın APK dosyasını oluşturup, SHA kısmına bakmam gerekiyor. Fakat bu aşama doğrudan bundan sonraki kısımlar Android Stduio ile ilgili olduğundan, oluşturduğum APK dosyasının detaylarına inmeyeceğim ve Java kurulumu ile ilgili ayrıca bahsetmeyeceğim. Linux dağıtımları için Android Studio ve Java kurulumu için buradan detaylara ulaşabilirsiniz.
Windows için:
APK dosyamızı oluşturduğumuzu ve Java JDK’mızın kurulu olduğunu varsayıp, bu klasörü açacağız. Örnek: C:\Program Files\Java\jdk1.8.0_31\bin
Burada mouse sağ tık ve Shift tuşuna birlikte bastığınızda, seçenekler arasında CMD çalıştır seçeneğini de göreceksiniz. İsteyene burada daha detaylı video anlatımı mevcut: Google Maps API Key Oluşturma
keytool -list -v -keystore “Key Yolu”
Burada “Key Yolu” APK için oluşturduğunuz .jks dosyasının yolu. Bunu yazdıktan sonra çalıştırdığınızda SHA1 bilgisini öğrenebilirsiniz.
Linux için:
Aynı şekilde Linux için de Java JDK ve Android Studio’nun kurulu olduğunu ve APK dosyasının var olduğunu varsayıp, terminal ekranına aşağıdaki kodu yapıştırarak
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
kodumuzu çalıştırıyoruz ve SHA1 değerini alıyoruz. Ardından gerekli işlemleri yaparak SHA1 değerini kaydediyoruz. Artık Google API kullanabilir ve uygulamamızı geliştirmeye devam edebiliriz.
Kaynaklar:
[1] Şifreleme Algoritmaları – SHA1, https://webmaster.kitchen/sifreleme-algoritmalari-sha1/
[2] Secure Hasing Algorithm (SHA), http://bilgisayarkavramlari.sadievrenseker.com/2009/11/02/secure-hasing-algorithm-sha/
[3] SHA-1, https://www.wikiwand.com/tr/SHA-1
[4] SHA1 Şifreleme Metodu, https://bidb.itu.edu.tr/seyirdefteri/blog/2013/09/08/sha1-şifreleme-metodu