GÜVENLİK

Şifreleme (Encryption)

--

Gönderilmek istenen bilginin içeriğine gönderen ve alıcı dışında kişi veya programların erişmemesi için bilginin belli anahtarlar ve algoritma ile şifrelenerek anlaşılmaz hale getirilmesi işlemine Şifreleme denir. Tabi şifrelenen bilginin alıcı tarafında açılabilmesi için aynı anahtarın alıcıda da olması gereklidir.

Şifremele yöntemleri çok eski zamanlardan beri savaşlarda, ya da önemli yazışmalarda kullanılmıştır. Yakın zamanda izlediğimiz The Imitation Game filminde; II Dünya Savaşında Enigma şifreleme aracının nasıl kırıldığı anlatılmaktadır.

Günümüzde web ve mobil uygulamalarda farklı şifreleme yöntemleri kullanılmaktadır. Aşağıda bu senaryoların üzerinden geçerek Algoritma ve şifreleme yöntemlerini anlatmaya çalışacağım.

1. Şifre, Parmak İzi, Retina Vb. Sistemde Tutulması

İnternetten veya mobilden kullandığınız bir çok uygulama size uygulamaya girebilmeniz için şifre tanımlatır. Sizde çoğunlukla aynı şifreyi bir çok sitede ve uygulamada kullanırsınız. Peki bu şifreler veritabanında açık olarak tutulursa başka kişiler tarafından çalınmaz mı?

Aynı olayı şunun içinde düşünebilirsiniz Artık biyometrik şifrelerin kullanımı giderek hayatımızda daha çok yer alıyor. Mesela iPhone içerisindeki uygulamalarda TouchID ile parmak izi kullanıyor iken, Şirket girişinde yüz okuması ile sisteme giriş yapıyoruz.

Peki tanımladığınız bu şifre, parmak izi, retina izi, yüz izi gibi bilgiler sistemde tutulan veritabanından başkaları tarafından kopyalanamaz mı, daha sonra kullanılamaz mı ?

Bu tür çalınmaları önlemek için bu tip veriler sistemde tek taraflı Hash algoritmaları şifrelenir. Yani bu veriler geri dönüştürülmeyecek şekilde izleri oluşturulur. Parmak izinin izi gibi :). Bu izi oluşturan algoritmalara SHA0,1,2,3 MD5 algoritmaları denir. Bu hash ile dönüştürülmüş veri veritabanında tutulur. Bu veriden sizin ana şifreniz elde edilemez, bundan dolayıdır ki, şifrenizi unuttuğunuzda sistem sizden yeni şifre oluşturmanızı ister önceki şifrenizi size söylemez daha doğrusu söyleyemez.

Sistem giriş yaptığınızda şifrenizi, parmak izinizden vb.. tekrar aynı algoritmaları kullanarak hash oluşturur ve veritabanında tuttuğu hash oluşan hash karşılaştırıp sizin sisteme giriş yapıp yapamayacağınıza karar verir.

Bu algoritmaların hash üretme karmaşıklığına, üretilen çıktının boyutuna göre kırılabilmesi çok zor hale gelmektedir. Aşağıda hash algoritmaları için yapılmış karşılaştırmayı görebilirsiniz.

Aşağıda java kodun da SHA-1 ile gelen bir şifreyi nasıl hashlediğimizi görebilirsiniz.

Basit Bir Encrypt İşlemi

2. Şifreleme Yöntemleri

Bunun için uygulayabileceğiniz iki şifreleme yöntemi mevcut.

  • Simetrik Şifreleme (DES, AES, Blowfish)
  • Asimetrik Şifreleme (DH, RSA)

Simetrik şifreleme: Alıcı ve verici arasında bir tane özel anahtar bulunur, şifreleme ve şifreyi açma bu anahtar üzerinden yapılır. Şifreleme işlemi asimetrik şifrelemeye göre çok hızlı yapılır, güvenlidir ama özel anahtarın dağıtımı oldukça problemlidir. Bu özel anahtarın istemci’de oluşturulup nasıl sunucuya güvenli bir şekilde ulaştırılacağı bir problemdir.

Asimetrik Şifreleme: Simetrik şifrelemede özel anahtarın paylaşım problemini aşabilmek için 2 anahtarlı bir yapı geliştirilmiştir. Özel(Private) ve Genel(Public) anahtar olmak üzere 2 tane anahtar üretilir. Genel bu anahtarlar çok büyük asal sayılardan oluşur. Veri özel anahtar ile şifrelenir ve genel anahtar ile açılır. Bu yöntem simetrik şifrelemeye göre daha karmaşık ve yavaştır. Ama gönderilen verinin bütünlüğü ve kimlik doğrulama işlemleri için oldukça uygun bir yöntemdir.

3. Kullanım Senaryoları

3.1 e-İmza

İmza gerçek bir belgenin üzerine ıslak imza atarak bu belgenin sizin onayınızdan geçtiğini ispatlayan bir kanıtsa, Elektronik imza da kişilerin elektronik belgeler üzerine attığı kanıttır.

Elektronik imza, imzalayan kişinin kimlik doğruluğunu ispatlar; imzalanan verinin içeriğinin başka bir şahıs tarafından değiştirilip değiştirilmediğini (bütünlüğünün bozulup bozulmadığını) ortaya çıkartır.

Peki arka planda bu e-Imza nasıl çalışıyor ?

Öncelikle sizin kim olduğunuzu belirleyen sertifika oluşturması için TurkTrust, E-Turgra, E-Guven, Tubitak-UEKAE vb.. sertifika sağlayılarına başvurmalısınız.

Sizin için bir sertifikasyon oluşturacaklar. Bu sertifikasyon içerisinde Kimlik bilgileriniz, Sertifikasyonu veren kurumun kimlik bilgileri, Şifreleme algoritma detayları ve özel anahtar bulunur. Bu sertifikasyonu size direk olarak vermez. Bunu güvenli halde kullanabilmemiz için size bir USB dongle içerisinde verir. Sizin sertifikanız, şifreleme işlemleri bu dongle içerisinde gerçekleştirilir.

İmzalamak istenen belge önce Hash’lenir örneğin SHA göre izi oluşturulur. Bu belgenin karşı tarafa ulaştığında metnin başındaki izi ile metin tekrar hash izi oluşturularak birbirine tutarlılığı karşılaştırılır. Bu sayede gönderilen metnin doğru metin olduğu anlaşılır. Fakat yolda gönderilen belgenin başka bir belge ile değiştirilmediğinin, hash izinin değiştirilmediğinin kanıtı yoktur.

Belgenin başka birisi tarafından yolda değiştirilmediğinin kanıtıda belge izi oluşturulduktan sonra Örneğin AB23CD şeklinde bir iz oluşsun. Bu izi Dongle sağladığı servisler şifrelenmesini sağlarız. Bu işlem Dongle içerisinde gerçekleşir, özel anahtar Dongle içerisindedir, localinize taşınmaz. Şifrelenmiş Iz bilgisi + Sertifikasyon bilgisini döner. Bu bilgiler alıp belgenin önüne konulup karşı tarafa gönderilir. Karşı taraf sertifikasyonda yer alan genel anahtar ile bu şifrelenmiş bilgiyi açar. Elinde belgenin hashlenmesi sonucunda oluşan iz bilgisi oluşur. Bir önceki parağrafta anlattığım gibi bunu dokümanın bütünlüğü için kontrolden geçirir.

3.2 SSL/TLS

SSL sertifikasıda aslında benzer bir yapıda işlemekte. Siz https:// portuna istekte bulunduğunuzda veya sunucu sizi https:// yönlendirdiğinde 443 portuna yönlendirilirsiniz.

İlk önce SSL el sıkışması(handshake) gerekir. Tarayıcı ile örneğin google.com.tr girdiğinizde size bir sertifika dosyası gönderir. Bu sertifikasyon dosyasınında GeoTrust Global CA yazmakta. Yani GeoTrust Sertifika otoritesi tarafından verilmiş Google sertifikasyonu aldık. Dünyada SSL sertifikasyonu veren belli başlı firmalar vardır CA(Certification Authority) RapidSSL, Verisign, GeoTrust vb..

Bu şekilde belli başlı sertifika otoritelerinin olmaması durumunda her bağlandığınız internet sitesi için public keyleri olan sertifikaları tarayıcınızda tutmanız anlamına gelirdi ki bu da milyonlarca sertifikasyonun tarayıcıda yönetilmesi anlamına gelirdi. Bunun yerine belli başlı otoritelerin sertifikasyonları hem güvenlik hemde yönetebilme açısından oldukça kolaydır. Örneğin Firefox Tools/Options/Advanced/Encryption/View Certificates/Authorities altından sertifikalarınızı görebilirsiniz.

Tarayıcı ile sunucu arasında bu el sıkışması gerçekleştikten sonra simetrik şifreleme için özel anahtar dağıtımı gerçekleştirilir. Sunucu tarafından her bir bağlantı için simetrik özel şifre oluşturulup tarayıcıya aktarması gerekir. Bunun için sunucu bu simetrik özel şifreyi RSA özel şifresi ile şifreler ve tarayıcıya gönderir. Tarayıcı bu simetrik şifreyi elde ettikten sonra bütün verilerini bu simetrik şifre ile şifreleyerek gönderir.

Simetrik şifreleme, asimetrik şifrelemeye göre çok hızlı olması sebebiyle ilk kimlik tespitinden sonra haberleşme simetrik şifrelemeye göre gerçekleştirilir.

3.3 Amazon EC2

Amazon’de EC2 SSH bağlantısı yapmanız için 2048-bit SSH-2 RSA şifreleme kullanır. Amazon EC2 için özel anahtarı sizin indirmenize izin verir. Genel anahtarı sadece EC2'nin üzerinde kendisinde tutar. Siz bağlanırken aşağıdaki gibi bir kod yazdığınızda sizi otomatik olarak login eder.

ssh -i "amazon.pem" ec2-user@51.155.206.171

3.4 iOS Uygulaması Geliştirme ve Uygulama İmzalama

iOS geliştirmeye başladığımız ilk andan itibaren her yerde bu şifreleme yöntemleri karşımıza çıkar. Aşağıdaki ekrandan aldığımız sertifikaları görebilirsiniz.

IOS’ta uygulama geliştirme, Push Notification servislerini kullanma, uygulamayı cihaza atma, uygulamayı beta testine veya appstore göndermek için bu sertifikasyon ve şifreleme yöntemleri kullanır.

3.5 Android Uygulaması Geliştirme

Android uygulaması geliştirme sırasında bu kadar sıkı şifreleme yöntemleri kullanılmıyor olsada uygulama Push Notification, Harita vb servisler kullanırken , uygulama PlayStore atılırken yukarıda bahsettiğim şifreleme yöntemleri kullanılır.

3.6 Apple Pay Nasıl Çalışıyor ?

Apple Pay bence mobil ödeme işlemleri için önemli bir başlangıç. iPhone5s+ iWatch, iPhone6/Plus ile birlikte gelen Apple Pay gelecekte oldukça kullanılacağını düşünüyorum. Peki bu sistem nasıl çalışıyor ?

NFC-Enabled POS cihazı üzerine iPhone uzattınız karşınıza çıkan ödeme ekranında TouchID’nizi girdiniz ödeme işlemi gerçekleştiniz. Ürünüzü aldınız ve çıktınız.

Arka plandaki ödeme sisteminde 4 Farklı Rol var.

  • Satıcı : Müşteriye alması için ürün veya servis sunan kişi.
  • Kartı Dağıtan Banka : Müşterilere kart dağıtan bankalar.
  • İşyeri Anlaşmalı Banka: İşyerlerine üye işyeri haline getirip kart okuyucu POS dağıtan bankalar.
  • Ödeme İşlemcisi: Ödeme işlem bilgisini doğru bankaya gönderip müşteri hesabından paranın satıcı hesabına geçmesini sağlayan sistem.

Visa ve MasterCard Kart/Ödeme ağıdır. Şemsiye organizasyon görevini gören bu kart ağları kural ve standartları belirleyerek para hareketinin kartı dağıtan banka hesabından üye işyeri hesabına olmasını sağlar. Banka kart dağıtarak müşterilerini, üye işyeri anlaşmalı banka satıcı sisteme dahil eder.

AKIŞ

  • Yetkilendirme Safhası: Terminal satıcı kimlik numarası ile kart bilgilerini ve ödeme miktarını kart işlemcisine gönderir. İşlemci bilgiyi okur ve ilgili kartın bankasına yetkilendirme isteği gönderir. Burada banka bir seri kontrol işlemi gerçekleştirir.(Fraud, Kart bilgilerini doğrulama, yeterli miktarda para mevcutmu). Bu doğrultuda üye işyeri POS cihazına kısa bir zaman içinde cevap döner.
  • Ödeme İşlem Temizleme Safhası: Kart yetkilendirmesi gerçekleştikten sonra üye işyeri bilgisini üye işyeri hesap sistemine gönderir. Satıcının banka hesabına, MAS gelen ödeme işlemini ayırarak Visa işlemlerini VISA ağına , MasterCard işlemlerini MasterCard ağına dağıtır. MAS satıcıdan kendisi ile ilgili oranı düşerek işlemi gerçekleştirir. Satıcılar iskonto oranı ve işlem ücretini VISA ve MasterCard için öderler.

GÜVENLİK

ApplePay kart bilgilerini cep telefonunda tutmuyor. Sadece kartlarınızı yönetebilmemiz için kart numaranızın bir kısmını tutuyor. Peki kart bilgilerini aktarmadan ödeme işlemini nasıl gerçekleştiriyor.

Kredi Kartını Apple Pay sistemine Tanıtma: Kartınızı ApplePay ilk tanıtırken kart bilgilerini encrypt bir şekilde Apple sunucularına gönderiyor. Apple sunucuları kart bilgilerini decrypt ediyor. Bu kartın hangi kart ağına ait olduğun karar veriliyor ve bu kart/ödeme ağının sadece açabileceği şekilde kart bilgileri tekrar re-encrypt ediyor.

Bu bilgilere ek olarak kullanıcının önceki iTunes hesap hareketleri ve cihaz bilgilerini de kart bilgilerine dahil edilerek gönderiyor. Kart ağı bu bilgileri kart dağıtan bankaya gönderiyor. Banka bu bilgilere bakarak senin kartının onaylayıp onaylamayacağına karar veriyor. Bu kredi kartı ödemesi için ilk yetkilendirmenin kurulması anlamına geliyor. Bu işlem bir kez yapılıyor. Bir daha gerçek kart bilgileri Apple ve Kart Sahibi Banka arasında geçirilmiyor.

Bu sırada kart/ödeme ağları tarafından(Master/Visa) DAN(Device Account Number) numarası üretiliyor. Bu DAN numarasını tekrar Apple gönderiyor. O kart ile yapılan her bir ödeme işlemi için ayrı dinamik güvenlik kodu üretiliyor. Bunun için Apple bu DAN numarasını kullanıyor.

Apple Pay ile Ödeme Gerçekleştirme Anı : iPhone6 ile NFC-Enabled bir POS cihazına yaklaştırdığınızda telefon üzerindeki NFC cihazı üye işyeri terminali ile etkileşime geçer. Telefonda Apple Pay logosu ve kullanabileceği kartlar gösterilir.

Kullanıcı devam ederse kullanıcıya görüntüsü kullanılan uygulama tarafından belirtilen Payment Sheet gösterilir. Kullanıcı Touch ID ile bu ödemeyi onaylar ise ve bu işlem doğrulanırsa SE(Secure Element) chipinde Cryptogram oluşturularak müşteri bilgileri şifrelenir. Cryptogram da sadece kart dağıtıcısı bankanın açabileceği bilgiler bulunur. (Transaction Güvenlik Anahtarı, Personal Account Number PAN , Device Account Number DAN vb..)

Bu sayede Apple gerçek kredi kartı kullanmak yerine proxy token üreterek işlemlerini SE üzerinden gerçekleştirebilmektedir. Kart dağıtıcısı banka kendisinde bulunan private key göre şifrelenmiş diğer bilgilerin sisteminde DAN ve PAN uyuşuyor mu, ödeme işlemi anahtarı tekrarlanmamış mı şeklinde kontroller yapar ve işlemi gerçekleşmesi onayını verir.

4. Kredi Kartı Numarası Nelerden Oluşur ?

Kredi Kartı Numarası 16 haneden oluşan bir sayıdır.

Issuer Number: İlk sayı kart ihraççısını belli eder. (Visa Card5. Master Card6. Disco)

Bank Number : BIN numarası dediğimiz 5 haneli numara. Bankayı belirten numaradır.

Account Number: Kart sahibinin bankadaki hesap numarasıdır. Zaten bu alan Kredi Kart Ekstrelerinde ve diğer belgelerde 4385 82** **** 0982 gibi yazılarak tutulur.

Check Diğits: Son 4 rakam kontrol rakamıdır. Luhn Algoritması denilen yöntem ile son 4 hane kontrol edilir ve Kredi Kartının geçerli olup olmadığı anlaşılır.

LUHN ALGORİTMASİ NEDİR ?

  1. adım: Elimizdeki sayıyı tersine çeviriyoruz.
  2. adım: Tek basamaklardaki sayıyı topluyoruz. = S1
  3. adım: Çift Basamaktaki sayıları 2 ile çarpıp mod 9 yapıyoruz ve bütün bunları topluyoruz. = S2
  4. S1+ S2 mod 10 = 0 ise valid bir kredi kartıdır.

Okumaya Devam Et 😃

Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.

--

--