Bilekte TOTP token’ları için akıllı bir dumb watch
(blog.singleton.io)- Yaygın Casio F-91W’ye Sensor Watch yedek kartı takarak Google ve Github için 2FA TOTP kodlarını bilekten görmeyi sağlayan bir hacking projesi
- Mevcut LCD, düğmeler ve piezo buzzer aynı kalıyor; yalnızca ARM Cortex M0+ kartı değiştirilerek Bluetooth olmadan da programlanabilir saat yüzleri ve yardımcı uygulamalar çalıştırılıyor
- TOTP saat yüzü, QR koddan Base32 secret’ı çıkarıp onaltılık byte’lara dönüştürdükten sonra
totp_face.ciçine koyupmovement’ı yeniden build ederek çalışıyor - Birlikte geliştirilen ratemeter saat yüzü, ALARM düğmesine basma aralıklarından dakika başına hızı hesaplıyor; 500/min üstünü
Hi, 1/min altınıLoolarak gösteriyor - Aylarca pil ömrü, mevcut Casio kasası, web tabanlı wasm emülatörü ve değiştirilebilir kaynak ağacı bir araya gelerek F-91W’yi küçük bir bilek hacking platformuna dönüştürebiliyor
Casio F-91W’yi programlanabilir bir saate dönüştürmek
- Sensor Watch, Casio F-91W’nin mevcut quartz movement’ını değiştiren bir logic board’dur
- F-91W, yaklaşık 90 milyon adet satıldığı bilinen klasik bir quartz saattir
- Yeni kart mevcut parçaları aynen kullanır
- Orijinal LCD ekran
- Düğmeler
- Piezo buzzer
- Kart, ARM Cortex M0+ tabanlıdır ve programlanabilir
- Sensor Watch projesi, kolayca değiştirilebilen saat yüzleri ve “complications” adı verilen küçük yardımcı uygulama paketleri sunar
- Bluetooth radyosu yoktur; ancak hafif saat kasası, aylarca pil ömrü ve doğrudan yeniden build edilebilen yapısı avantaj sağlar
Bir saat içinde yapılan özellikler
- Kart değişimi, 2FA secret ayarı ve yeni saat yüzü yazımı yaklaşık 1 saat içinde tamamlandı
- Google ve Github hesaplarının OTP kodları bilekten görülebilecek şekilde ayarlandı
- Kürek çekme strokmetresi veya cadence metre olarak kullanılabilecek yeni bir ratemeter saat yüzü yazıldı
- wasm tabanlı emülatör sayesinde bilgisayarda test etmek kolay; kişisel build’ler web sayfasında doğrudan çalıştırılabiliyor
Saatin sunduğu saat yüzü akışı
- MODE düğmesine bir kez basınca 2FA token saat yüzüne geçiliyor
- 2FA saat yüzünde ALARM düğmesi Google ve Github token’ları arasında geçiş yapıyor
- MODE düğmesine tekrar basınca yeni yapılan ratemeter saat yüzüne geçiliyor
- ratemeter’da, takip edilen hedefin dakika başına hızını ölçmek için ALARM düğmesine periyodik olarak basılıyor
- Bu build’de birkaç varsayılan saat yüzü de bulunuyor
- Dünya saati
- Gün doğumu/gün batımı hesaplayıcı
- Ay evresi göstergesi
- Saatin iç sıcaklık sensöründen gerçek zamanlı çıktı
- 24 saat ayarı seçici
- Saat/tarih ayarlama modu
- Sensor Watch
movementkaynak ağacında pulsometer ve orrery gibi başka saat yüzleri de var - F-91W modül yükseltme süreci John Graham-Cumming’in blogunda belgelenmiş
TOTP saat yüzünü ayarlama yöntemi
- TOTP saat yüzü, benzersizlik kaynağı olarak geçerli zamanı kullanan zamana dayalı tek kullanımlık parolalar üretir
- Google, Github gibi çeşitli web sitelerine giriş için iki aşamalı doğrulama kodu üretiminde kullanılabilir
- ALARM düğmesiyle ayarlanmış web siteleri ve TOTP secret’ları arasında geçiş yapılır
- Birden fazla web sitesi ve secret desteklenir; ancak QR koddan secret’ı çıkarıp saat yüzü kaynak koduna doğrudan eklemek gerekir
-
TOTP secret ekleme adımları
- Kod üretmek istediğiniz web sitesinden TOTP secret veya QR kod alın
- Yalnızca QR kod varsa, secret Stefan Sundin’in web sitesinden çıkarılabilir
- Çıktı yaklaşık 32 karakter uzunluğunda alfanümerik bir dizedir ve Base32 ile kodlanmış TOTP secret’tır
- Secret’ı saat yüzü koduna koymak için cryptii.com üzerinde Base32’yi onaltılık byte’lara dönüştürmek gerekir
- TOTP secret büyük harflerle girilmelidir
- Dönüştürülen onaltılık byte’ları TOTP saat yüzü kaynak koduna ekledikten sonra
movement’ı yeniden derleyin
-
totp_face.ciçinde değiştirilecek yerler- Demo anahtar kaldırılabilir; listenin sonuna yeni anahtar eklemek için
num_keysdeğeri 1 artırılır keys[]dizisinin sonuna dönüştürülen onaltılık byte’lar eklenir- Her byte’ın önüne
0xeklenir ve virgülle ayrılır - Mevcut son byte’tan sonra da virgül eklenmelidir
- Her byte’ın önüne
key_sizes[]dizisinin sonuna eklenen secret’ın boyutu, yani az önce koyulan hex byte sayısı eklenirtimesteps[]dizisinin sonuna30öğesi eklenirlabels[][2]dizisine gösterilecek etiket eklenir- Google hesabıysa
{ 'g', 'o' }gibi bir etiket kullanılabilir
- Google hesabıysa
- Demo anahtar kaldırılabilir; listenin sonuna yeni anahtar eklemek için
ratemeter saat yüzü implementasyonu
- ratemeter saat yüzü kodu, ana projeye gönderilen pull request içinde yer alıyor
- Implementasyonun büyük bölümü
ratemeter_face_loopadlı ana döngü fonksiyonu içinde - Bu fonksiyon düğme giriş olaylarını ve saat tick olaylarını işler
- Saat yüzü, aralık ölçümü veya animasyon işleme için tick periyodu isteyebilir
movement,watch_display_stringyardımcı fonksiyonunu sağlar- Casio ekranının sınırlı 7+ segment öğelerinde alfanümerik dizeleri göstermeye çalışan bir fonksiyondur
- Rastgele dizeleri sınırlı ekrana eşleme sorunu ve istisnalar dokümanda açıklanmıştır
-
Olaylara göre davranış
EVENT_ACTIVATE- Saat yüzü etkinleştiğinde haftanın günü gösterim alanında
RAgösterilir
- Saat yüzü etkinleştiğinde haftanın günü gösterim alanında
EVENT_MODE_BUTTON_UP- MODE düğmesine basılınca sonraki saat yüzüne geçilir
EVENT_LIGHT_BUTTON_DOWN- LIGHT düğmesine basılınca LED aydınlatma açılır
EVENT_ALARM_BUTTON_DOWN- ALARM düğmesine basılınca bu giriş ile önceki giriş arasındaki aralıktan dakika başına hız hesaplanır
- Saat yüzü durumunda saklanan tick sayacı sıfırlanır
RATEMETER_FACE_FREQUENCYile hızlı tick periyodu istenir- Bu sabit 1/16 saniye olarak tanımlıdır
EVENT_TICK- Geçerli hız ekranda gösterilir
- Hız 0 ise yalnızca
ragösterilir - 500/min’den hızlıysa
ra Higösterilir - 1/min’den yavaşsa
ra Logösterilir - Diğer durumlarda hesaplanan hız
ra %-3d pnbiçiminde gösterilir - Sonunda tick sayacı artırılır
Satın alma bilgisi ve bağlılık durumu
- Sensor Watch, Oddly Specific Objects üzerinden edinilebilir
- Oddly Specific Objects ile herhangi bir bağlılık ilişkisi yoktur
1 yorum
Hacker News yorumları
TOTP gizli değerini rastgele bir web sayfasına girmek rahatsız edici
Linux’ta
base32veodaraçları zaten kurulu olabilir; Ubuntu’dacoreutilspaketinin içinde yer alıyorBunun dışında proje harika ama saat tasarımı biraz çirkin
https://gchq.github.io/CyberChef/
https://i.imgur.com/9MYqLvj.png
Beklenmedik bir sunucu tarafı davranışı olmadığından emin olmak için XHR’ı hızlıca kapatabiliyorum
Demoda ara sıra garip bir ⌍ simgesi görüyorsanız, bu “küçük 7”dir
Çünkü bu saatte birinci ve üçüncü rakamların üst ve alt segmentleri, yani A ve D segmentleri birbirine bağlı
https://joeycastillo.github.io/Sensor-Watch-Documentation/wi...
Bu ekrana ne kadar çok verimlilik sığdırıldığını görmek gerçekten şaşırtıcı
Normal kullanımda bu hanelerin yalnızca 0~5 göstermesi yeterli; ilk rakam saatte yalnızca 0, 1, 2’ye ihtiyaç duyuyor ama kronometre 59:59.99’a kadar çıkıyor
Bu rakamlarda A ve D segmentlerini ayırmaya gerek yok; teoride kronometre 69:59.99’a kadar gitse de sorun olmazdı ama “bir saat” yeterli görülmüş gibi
8 ve 9 da hem üst hem alt segmentleri yaktığı için pratikte sorunlu olan tek rakam 7
Sonunda HN’ye gelmemi sağlayan bir içerik çıktı
F-91W muhtemelen A158W[1] ile aynı form faktörüne sahip gibi; A158W ise fiyatına göre inanılmaz derecede yakışıklı bir saat
Her şeyle uyuyor, şık ama göze batmıyor; bu yüzden daha pahalı saatler yerine sık sık onu takıyorum
Metal kayışın kol kıllarını çekmesinden endişeleniyorsanız, bir yılda ancak iki kez falan oldu ve diğer ucuz metal kayışlara göre çok daha az
“Smoky” bir alternatif istiyorsanız A168WGG[2]’de kayışta gunmetal gri tonu var, kadran siyaha yakın işlenmiş ve illuminator yalnızca yazıları aydınlatıyor
Ancak A168, A158’den çok az daha büyük; iç modülün aynı şekilde oturup oturmadığını bilmiyorum ama daha büyükse daha fazla alan da vardır, muhtemelen olur
Saatlerden devam edecek olursam, iş için siyah kayışlı saat olarak GA-B2100-1AJF[3] kullanıyorum
Bir G-Shock’a göre oldukça şık ve akıllı saat olmamasına rağmen birçok özelliği var
Bluetooth’lu model, daha ucuz modellere göre kadran rengi ve ton kontrastı açısından daha iyi; bu yüzden kıyafetle eşleştirmesi daha kolay
[1] https://www.amazon.com/Casio-A158WA-1-Water-Resistant-Digita... [2] https://www.amazon.com/dp/B08195YQLQ/ [3] https://www.amazon.com/dp/B09YG8F41Y/
Sensor Watch kartı, orijinal Casio 593 modülünden alınan parçalara ihtiyaç duyuyor
Uyumlu saatlerin listesini burada görebilirsiniz
https://www.sensorwatch.net/docs/
Aynı 3 düğmeli yerleşime sahip olsa da farklı mekanizma kullandığı için çalışmayan saatler: A168W, A700W, LA680W, B650W
Genel olarak, 3 düğmeli dijital Casio olup yan aydınlatma yerine düzgün bir “illuminator” arka ışığı varsa 593 değildir, dolayısıyla çalışmaz
Bu projeyi gerçekten seviyorum ve kelimenin tam anlamıyla her gün kullanıyorum
Kısa süre önce kaynak kod içinde TOTP kodlarını tanımlamak için yeni bir arayüz uyguladım; bu yüzden bu yazıdaki açıklama artık doğru değil
Şu anda şöyle çalışıyor
static totp_t credentials[] = {CREDENTIAL(2F, "JBSWY3DPEHPK3PXP", SHA1, 30),CREDENTIAL(AC, "JBSWY3DPEHPK3PXP", SHA1, 30),};https://github.com/joeycastillo/Sensor-Watch/blob/main/movem...
Nabız ölçeri astım solunum hızı ölçeri olarak da kullanabilmek için kullanıcı kalibrasyonu ekledim ve şimdiden hayat kurtarmaya yardımcı oldu
Kalibrasyon ve sıcaklık telafisi de var; saatin doğruluğunu yılda yaklaşık 10 saniye seviyesine çıkarıyor
Topluluk da büyüyor ve birçok kişi firmware’i kurcalamak için katıldı
Yakın zamanda biri bu saat için sonsuz koşu oyunu yaptı
https://github.com/joeycastillo/Sensor-Watch/pull/419
Bakımcılar da gerçekten iyi insanlar
Zaman ayırmaya değecek harika bir açık kaynak proje arıyorsanız, tam olarak bu
Belgelerde bulamadım
TOTP kullanmak için kol saatinizi yeniden derleyip yeniden flash etmeniz gerekiyorsa, kullanım alanı epey sınırlı olur gibi
Harika
Casio hesap makineli saat için de birinin böyle bir şey yapmasını hep istemişimdir
https://www.casio-intl.com/asia/en/calc/products/SL-760LC-BK...
SecurID token’larda da bunun çalışması güzel olurdu
Gerçekten ilginç
Nixon’da çalışıyorum; böyle bir şeyi Nixon dijital saatlerinde de denemek isterim ve yazar benzer bir yazı yazmak isterse birkaç ücretsiz saat ayarlayabilirim gibi geliyor
Neden bunu en akıllı akıllı saatimde kullanamıyorum ki
Eski Casio’ya dönmek istiyorum
https://github.com/ch1bo/garmin-otp-authenticator
Bu gerçekten iyi; ben de aptal akıllı saatle benzer bir şey yapmayı düşünmüştüm ama operasyonel güvenlik açısından TOTP’nin bu kadar görünür ve kolay erişilebilir olmasının uygun olup olmadığını merak ediyorum
Saat kaybolursa ya da çalınırsa ne olur?
Hangi servis olduğu hemen anlaşılmasın diye etiketliyorum
Pebble’da fiilen bir kilit ya da güvenlik yok ama sonuçta bu sadece ikinci kimlik doğrulama faktörü
Rastgele üretilmiş parolayı zaten biliyor, bileğimde TOTP olabileceği bilgisini araştırmış ve gerçekten saatimi çalabiliyorsanız zaten kaybetmişimdir; bence bu kadarı rahatlıkla takas edilebilir