Leifeng.com AI geliştiricisinin notu: Geçmişte, bilgisayarların kediler ve köpekler arasında ayrım yapmasına izin vermek en gelişmiş araştırma olarak görülüyordu; şimdi ise görüntü sınıflandırması, TensorFlow kullanılarak birkaç satır kodda uygulanabilen makine öğreniminin (ML) "Merhaba Dünyası" na benziyor. Yalnızca birkaç yıl içinde, makine öğrenimi alanında büyük ilerleme kaydedildi, öyle ki artık geliştiriciler potansiyel olarak "faydalı" veya "ölümcül" uygulamaları kolayca oluşturabilirler.
Bu nedenle, meraklı bir bilim adamı Tikeswar Naik, basit bir deneyle, bu teknolojinin olası bir kötüye kullanımını tartıştı - bu giriş yoluyla daha fazla insanın uyanık kalacağını ve bulabileceğini umarak, ML'yi kullanarak şifreyi kırmak Kötüye kullanımı azaltmanın veya önlemenin yolları. Leifeng.com AI geliştiricileri, özel araştırma içeriklerini aşağıdaki gibi derlediler.
Makalenin başında yazar cesur bir fikir ortaya attı: Birisinin ne yazdığını sadece klavyeyi dinleyerek bilebilir miyiz? Ve eğer bu işlem gerçekten başarılabilirse, hacker şifresinin çözülmesi gibi arkasındaki potansiyel uygulamalar çok ciddi bir güvenlik riski oluşturacak mı? (Şekil 1'de gösterildiği gibi)
Şekil 1: Tuş vuruşlarını dinleme (Resim kaynağı: rawpixel.com; eacs.com)
Bu nedenle yazar, bunun mümkün olup olmadığını araştırmak için kido (tuş vuruşu çözme) adlı bir projeye katıldı (https://github.com/tikeswar/kido).
Yazar, bu sorunu denetlenen bir makine öğrenimi sorunu olarak ele almayı ve ardından aşağıdaki tüm adımları tek tek tamamlamayı önermektedir:
Veri toplama ve hazırlama
Eğitim ve değerlendirme
Test ve hata analizi (model doğruluğunu iyileştirin)
Sonuç; GitHub bağlantısı
Not: Bu projede Python, Keras ve TensorFlow kullanılmaktadır.
1. Veri Toplama
Klavye vuruşlarının ses verilerini toplamanın birçok yolu vardır.Bu deneyde yazar, yazmak için günlük klavyeyi kullandı ve makine öğreniminin günlük hayatta şifreleri deşifre etmek için uygulanabilirliğini daha iyi kanıtlamak için yerleşik mikrofon QuickTime'ı kullandı. Oyuncu yazmanın sesini kaydetti (Şekil 2).
Şekil 2: Egzersiz verilerini oluşturmak için dizüstü bilgisayar klavyesini kullanma
Bu yöntemin iki avantajı vardır: Birincisi, verilerin değişkenliği küçüktür ve verilerin değişkenliği küçük olduğundan, daha fazla değişkeni düşünmek zorunda kalmadan bu fikri ispatlamaya (veya çürütmeye) odaklanmamıza yardımcı olacaktır.
2. Veri hazırlama
Verilerin kaynağını netleştirdikten sonraki adım, verileri eğitim için sinir ağına (NN) besleyebilmemiz için hazırlamaktır.
QuickTime, kaydedilen sesi MP4 olarak kaydeder. Öncelikle mp4'ü wav'a dönüştürmemiz gerekiyor, çünkü wav dosyalarını işleyebilen iyi bir Python kütüphanesi var. Şekil 3'ün sağ üst köşesindeki her tepe bir tuş vuruşuna karşılık gelir).
Şekil 3: mp4'ü wav'a dönüştürün ve ardından bölün
Ardından sesi ayrı bloklara ayırmak için sessizlik algılamasını kullanırız, böylece her blok yalnızca bir harf içerir. Bundan sonra, bu bireysel blokları sinir ağına girebiliriz.
Ancak yazar daha iyi bir yöntem düşündü, tek bir renk bloğunu bir spektrograma dönüştürmeyi seçti (Şekil 4). Şimdi, daha fazla bilgi sağlamak için Evrişimli Sinir Ağlarını (CNN) kullanan ve kullanımı daha kolay olan görsellerimiz var.
Şekil 4: Tek bir bloğu bir spektrograma dönüştürme
Ağı eğitmek için yazar, yukarıda açıklanan 16.000 örneği topladı ve her harf için en az 600 örnek olmasını sağladı (Şekil 5).
Şekil 5: Veri örneği
Daha sonra veriler yeniden düzenlenir ve eğitim seti ve doğrulama setine bölünür. Her mektup yaklaşık 500 eğitim örneğine ve 100 doğrulama örneğine sahiptir (Şekil 6).
Şekil 6: Eğitim-doğrulama bölümü
Kısaca bu karşılaştığımız maksimum olabilirlik oranı problemidir, bkz.Şekil 7.
Şekil 7: Makine öğrenimi problem temsili
3. Eğitim ve doğrulama
Yazar oldukça küçük, basit bir ağ mimarisi kullanıyor (Laurence Moroney'nin taş-kağıt-makas örneğine göre, https://www.coursera.org/learn/convolutional-neural-networks-tensorflow/), bkz. Şekil 8.
Bunlar arasında, giriş görüntüsü 150 x 150 piksel olarak ölçeklendirilmiştir ve 3 renk kanalına sahiptir. Daha sonra bir dizi evrişim + birleştirme katmanından geçer, düzleştirilir (aşırı uyum kaybını önlemek için), tamamen bağlı katmana ve son olarak çıktı katmanına beslenir. Çıktı katmanı, her harfe karşılık gelen 26 sınıfa sahiptir.
Şekil 8: Ağ mimarisi
TensorFlow'da model şuna benzer:
model = tf.keras.models.Sequential ()
Ve model özeti:
___________________________________________________________
Katman (tip) Çıktı Şekli Param #
==================================
conv2d_4 (Dönş2D) (Yok, 148, 148, 64) 1792
___________________________________________________________
max_pooling2d_4 (MaxPooling2 (Yok, 74, 74, 64) 0
___________________________________________________________
Conv2d_5 (Conv2D) (Yok, 72, 72, 64) 36928
___________________________________________________________
max_pooling2d_5 (MaxPooling2 (Yok, 36, 36, 64) 0
___________________________________________________________
conv2d_6 (Conv2D) (Yok, 34, 34, 128) 73856
___________________________________________________________
max_pooling2d_6 (MaxPooling2 (Yok, 17, 17, 128) 0
___________________________________________________________
conv2d_7 (Conv2D) (Yok, 15, 15, 128) 147584
___________________________________________________________
max_pooling2d_7 (MaxPooling2 (Yok, 7, 7, 128) 0
___________________________________________________________
flatten_1 (Düzleştir) (Yok, 6272) 0
___________________________________________________________
dropout_1 (Dropout) (Yok, 6272) 0
___________________________________________________________
yoğun_2 (Yoğun) (Yok, 512) 3211776
___________________________________________________________
yoğun_3 (Yoğun) (Yok, 26) 13338
================================= =
Toplam parametreler: 3,485,274
Eğitilebilir parametreler: 3.485.274
Eğitilemez parametreler: 0
Eğitim sonucu Şekil 9'da gösterilmektedir. Yaklaşık 13 dönemde,% 80 doğrulama doğruluğuna ve% 90 eğitim doğruluğuna yaklaşır. Problemin karmaşıklığı ve kullanılan basit ağ mimarisi göz önüne alındığında, elde edilen yüksek doğruluk gerçekten şaşırtıcıdır.
Şekil 9: Eğitim ve doğrulama doğruluğu
Mevcut sonuçlar umut verici görünüyor, ancak bu yalnızca karakter düzeyinde doğruluk, kelime düzeyinde doğruluk değil. Bir şifreyi tahmin etmek için, sadece çoğu karakteri değil, her karakteri doğru bir şekilde tahmin etmeliyiz! Şekil 10'a bakın.
Şekil 10: Bir şifreyi tahmin etmek, her karakteri tahmin etmeyi gerektirir
4. Test Etme
Yazar, bu modeli test etmek için rockyou.txt listesinden 200 farklı şifreyi daha sayısallaştırdı ve daha sonra eğittiğimiz modeli kullanarak kelimeleri tahmin etmeye çalıştı (Şekil 11).
Şekil 11: Test modeli
Şekil 12, test doğruluğunu gösterir; bunların arasında, çubuk grafik karakter düzeyinde doğruluğu gösterir (soldaki grafik düzeltme ve hata sayısını gösterir ve sağdaki grafik aynı yüzdeyi gösterir).
Karakter seviyesinde test doğruluk oranının% 49, kelime seviyesinde test doğruluk oranının ise% 1.5 olduğu (yani sinir ağının 200 test kelimesinden doğru 3 kelimeyi tamamen tahmin edebildiği) görülebilmektedir.
Şekil 12: Test doğruluğu
Bununla birlikte, görevin karmaşıklığı göz önüne alındığında,% 1,5 kelime düzeyinde doğruluk kötü değildir, ancak yazar, doğruluğu artırmak için bazı yöntemleri de değerlendirmiştir.
İlk olarak yazar, test sonuçlarındaki bireysel hataları analiz eder. Şekil 13, bazı örnek test sonuçlarını gösterir, burada:
İlk sütun gerçek test kelimelerini içerir;
İkinci sütun, karşılık gelen tahmin edilen kelimeleri içerir; burada her karakter, doğru (yeşil) ve yanlış (kırmızı) tahminleri göstermek için renk kodludur;
Üçüncü sütun yalnızca doğru tahmin edilen karakterleri gösterir ve yanlış tahmin edilen karakterler alt çizgilerle değiştirilir (görselleştirme için).
Şekil 13: Veri testi sonuçları
"Aaron" kelimesi için kullanılan model sadece bir doğru karaktere sahip, "kanada" kelimesi için tahmin edilen karakterlerin çoğu doğru ve "lokita" için tüm karakter tahminleri doğrudur. Şekil 12'de gösterildiği gibi, kelime düzeyinde doğruluk oranı yalnızca% 1.5'tir.
Ancak test örneğine (Şekil 14), özellikle de "kanada" ya baktığımızda, çoğu karakteri doğru bir şekilde işleyebildiğini ve gerçek kelimelere çok yakın olduğunu fark ettik. Öyleyse, CNN sonucunu yazım denetiminden geçirirsek ne olur?
Şekil 14: Test sonucu ekranı
Yazarın yaptığı tam olarak buydu (Şekil 15) Yazım denetleyicisini kullandıktan sonra, doğruluğu% 1.5'ten% 8'e çıkardı. Bu aynı zamanda oldukça basit bir model mimarisi + yazım denetleyicisi ile 100 şifreden 8'ini doğru bir şekilde tahmin edebileceğimiz anlamına gelir!
Şekil 15: Yazım denetleyiciyi kullandıktan sonra iyileştirilmiş doğruluk
Yazar, basit bir yazım denetleyicisi yerine bir dizi modeli (RNN? Transformer?) Kullanılırsa, kelime belirlemede daha yüksek doğruluk elde edebilir miyiz?
Ancak test sonuçlarına yakından bakarak (Şekil 16), "a" nın "s", "n" nin "b" olarak tahmin edildiğini vb. Fark edebilirsiniz.
Şekil 16: Test örneğinin ayrıntıları yakınlaştırma
Bu yardımcı olamaz, ancak klavyedeki haritalama hatalarımızı düşünün ve eşleme hatalarının çoğu (bkz. Şekil 17) yakınlıkla ilgilidir.
Şekil 17: Klavyede eşleme hatası
Daha sonra yazar, bu korelasyon ve yakınlığın hatasını ölçtü. Şekil 18, mikrofon ile klavye arasında belirli bir ölçekte çizilmiş tuşların konumunu göstermektedir.
Şekil 18: Mikrofonlu klavye ve ölçeklemek için çizilmiş düğme konumları
Şekil 19, sayısal tuş takımındaki bazı örnek harflerin yanlış benzetimini göstermektedir. Şekilde, sol üst köşedeki şekil "a" nın yanlış bir şekilde "z", "x", "y", "k", "s", "w" veya "q" olarak tahmin edildiğini göstermektedir. Diğer alt resimlerin açıklamaları benzerdir.
Şekil 19: Örnek harflerin hata grafiği
Şekil 19'dan, tahmin hatasının yakınlıkla ilgili olduğunu açıkça görebiliriz. Bununla birlikte, daha nicel bir ölçüm standardı elde edebilir miyiz?
Bu niceleme standardını elde etmek için yazar, d_ref'i referans harfi ile mikrofon arasındaki mesafe olarak ayarlar; d_predicted, tahmin edilen harf ile mikrofon arasındaki mesafedir ve d, d_ref ile d_predicted arasındaki farkın mutlak değeridir (bkz. Şekil 20).
Şekil 20: Bazı parametre tanımları
Şekil 21, ortaya çıkan hata histogramını göstermektedir. Çok bariz bir eğilim görüyoruz, yani hataların çoğu yakın yerlerden geliyor. Bu aynı zamanda, modelin doğruluğunu daha fazla veri, daha büyük bir ağ veya bu verileri daha iyi yakalayabilen bir ağ mimarisi aracılığıyla geliştirebileceğimiz anlamına gelir.
Şekil 21: Hatayla ilgili histogram
Ancak mikrofonun konumu da hata kaynaklarından biri mi? Hata, düğme ile mikrofon arasındaki mesafeyle mi ilgili?
Yazar, bunu incelemek için Şekil 12'deki hata grafiğini de çizdi, bu da X eksenindeki harf ile MIC arasındaki mesafeyi artırdı (bkz. Şekil 22).
Şekil 22: Mikrofon konumu ile hata arasındaki ilişkinin histogramı
Şekilde, hata ile düğmenin mikrofondan konumu arasında güçlü bir ilişki olmadığını görebiliriz, bu da hatanın temelde mikrofon konumundan bağımsız olduğunu kanıtlayabilir.
Bununla birlikte, Şekil 22'de gösterilen sonuçlarla, yazar aynı zamanda çok önemli bir mesaj buldu, yani bir kişi mikrofonu herhangi bir yere koyarak tuş vuruşlarını dinleyebilir ve ardından bilgisayar korsanlığı saldırıları gerçekleştirebilir. Bu keşif gerçekten de ürkütücü!
Bu çalışmada yazar, sadece klavyenin sesini dinleyerek bilgisayar korsanlığı yapıp yapamayacağını doğrulamak istedi, bu nedenle belirli deneyde birçok basitleştirme yaptı.
Daha karmaşık ve gerçek senaryoların üstesinden gelmek için modeli geliştirme konusunda yazardan bazı öneriler şunlardır:
Normal yazma hızı Zorlu sinyal işleme (tek bir tuş vuruşunu izole edin). Çünkü bu çalışmada yazar, veri içeriğini yazmak için daha yavaş bir hız kullandı.
Herhangi bir tuş zorlu sinyal işleme (büyük harf kullanımı? Shift işlev tuşu? ...). Çünkü bu çalışmada yazar sadece küçük harfler kullanmıştır (büyük harfler, sayılar, özel karakterler, özel tuş vuruşları vb. Hariç).
Arka plan gürültüsü Gürültü ekleyin. Çünkü bu çalışmada veri kaydederken, sadece bazı araçlarda geçerken bazı basit ve hafif arka plan gürültüsü olacaktır, ancak karmaşık arka plan gürültüsü yoktur (örneğin: restoran arka plan gürültüsü, vb.)
Farklı klavye ve mikrofon ayarları + farklı kişiler yazarak daha fazla veri + veri geliştirme + daha büyük ağ + farklı ağ mimarisi modeli iyileştirmeye yardımcı olabilir.
Son olarak, yazar ayrıca ilginç bir fikir ortaya attı: "Ses sinyalleri yerine başka titreşim sinyalleri kullanabilir miyiz".
Şekil 23: Diğer titreşim sinyalleri
Yazar, bu çalışmanın basitleştirilmesini dikkate alarak iki sonuç çıkarmaktadır:
Yazılı içeriği tuş vuruşu sesleriyle kırmak mümkündür;
Az miktarda veri ve basit bir CNN mimarisi + yazım denetimi ile iyi bir kelime düzeyinde doğruluk oranı elde edebiliriz (bu çalışmada% 8);
Hata kaynağı:
Basit bir yazım denetimi kelime düzeyinin doğruluğunu artırabilir (bu durumda% 1,5'ten% 8'e);
Hata, diğer tuşların yakınlığıyla ilgilidir;
Hata, mikrofon konumundan bağımsız görünüyor.
Orijinal bağlantı:
https://towardsdatascience.com/clear-and-creepy-danger-of-machine-learning-hacking-passwords-a01a7d6076d5
GitHub bağlantısı:
https://github.com/tikeswar/kido
Leifeng.com AI Geliştiricisi