Cep Anahtar vb Nasıl Çalışır (Olası)
İş bankasının Cep Anahtar’ını duymuşsunuzdur. Telefonunuza bir Java uygulaması yüklüyorsunuz ve o size internet şubesine girerken tek kullanımlık şifreler veriyor. Neredeyse diğer tüm bankalar farklı isimlerle aynı çözümü sunuyorlar. İki gündür kafayı ciddi anlamda Cep Anahtarın nasıl çalıştığına takmıştım. İşleri karmaşıklaştıran sadece ilk seferinde online çalışması, siz şifre üretirken bankayla herhangi bir irtibat kurmuyor. Yani siz şifreyi oluşturduğunuzda bankaya bu şifre iletilmiyor, ya da bu şifre direkt bankadan gelmiyor. Peki banka bunun doğru şifre olduğunu nerden biliyor. Google’da arama yaptığımda başkalarının da aynı soruyu sorduğunu gördüm. Ama verilen cevaplar beni tatmin etmedi. Kendim de tam olarak net bir cevap veremeyince biraz daha araştırmaya karar verdim. Ve çok basit bir mantıkla çalıştıklarını gördüm. Tabii kesin olarak bu mantık diyemem ama büyük ihtimalle birazdan bahsedeceğim şekilde çalışıyorlar.
Bu işlemin yani tek seferlik şifre verme işleminin gerçekleşmesini sağlayan algoritma Leslie Lamport‘a ait. Buna göre öncelikle bir değer belirliyorsunuz. Bu sizin ilk, çekirdek değeriniz. Ve bu değeri bir fonksiyona sokuyorsunuz. Daha sonra bu fonksiyonun sonucunu da aynı fonksiyona sokuyorsunuz ve bu şekilde belirlediğiniz bir üst sınıra kadar devam ediyorsunuz. Bu fonksiyonların çıktıları sizin olası değerleriniz. Matematik diliyle şöyle ifade edebiliriz.
Ç1=çekirdek, Ç2=F(Ç1), Ç3=F(Ç2), Ç4=F(Ç3), ...Ç[n]=F(Ç[n-1])
Bir örnek ile açıklamak gerekirse bizim fonksiyonumuz F(x) = 2x olsun. İlk değer olarak 2 verelim. Bu durumda
Ç1=2, Ç2=f(Ç1)=4, Ç3=f(Ç2)=8 …
şeklinde değerlerimiz ilerler. Bu algoritmada değerleri kullanırken hep en son değerden başlayarak kullanılır. Yani yukarıdaki örnekte üst sınır 8 belirlemiş isek, uygulamanın size vereceği ilk şifre 8 olacaktır.
Hala bankanın nasıl doğru şifreyi bildiğini açıklamadık. Uygulamayı ilk yüklediğinizde bir kereye mahsus sizden ilk üretilen şifreyi internet şubesi üzerinden girmenizi ister. İşte işin can alıcı noktası burası siz üretilen ilk şifreyi bankaya tanıttığınızda, artık banka fonksiyonu(f=2x) ve dolayısıyla tersini(f^−1=x/2) bildiği için bir sonraki gelecek değeri yani yukarıdaki örnekte 4 bilecektir. Bu fonksiyonlar gerçek hayatta çok karmaşık olduğu için fonksiyonun tersini ve dolayısı ile bir sonraki şifreyi bulmak çok zorlaşıyor. Uygulamada çok fazla şifre üretip kullanmazsanız bir süre sonra tekrar senkronizasyon yapmanız yani, hali hazırdaki son şifreyi bankaya tekrar bildirmeniz gerekiyor. Çünkü oluşturduğunuz şifreleri kullanmadığınız için banka son şifreyi bir süre sonra takip edemiyor ve ipin ucunu kaçırıyor.
Şimdi örneğimizi netleştirebiliriz. Uygulamanızın fonksiyonu bu kez f(x)=3x-1 olsun. Başlangıç değeri de 3 olsun. Üst değerimiz ise 1823 olsun
Uygulamanız fonksiyonumuza göre değerleri oluşturuyor.
3 8 23 68 203 608 1823
Elimizde uygulamamız var, bankada fonksiyon. Banka fonksiyonu bilmesine rağmen son değeri bilmiyor. O yüzden ilk kullanımda bizden 1823 değerini istiyor. Bunu son değer olarak kaydediyor.
Daha sonra biz internet şubesine giriyoruz. Ve tek kullanımlık yeni şifremizi uygulamamız aracılığı ile oluşturuyoruz. 608 Bu değeri bankaya gönderdiğimizde banka hemen fonksiyonun tersinde [(x+1)/3] ilke kendisine verdiğimiz 1823 değerini koyuyor ve (1823+1)/3 işlemi ile 608 i buluyor. İki değer aynı o zaman şifremiz doğru.
Gerçekten güzel bir yöntem, offline olarak nasıl yaptığı sorusu kafamı ciddi anlamda yemişti. Şimdi gönül rahatlığı ile uyuyabilirim. 🙂