Token TOTP di pergelangan tangan dengan jam tangan bodoh yang cerdas
(blog.singleton.io)- Ini adalah proyek hacking yang memasukkan papan pengganti Sensor Watch ke Casio F-91W yang umum, agar kode 2FA TOTP untuk Google dan Github bisa dilihat dari pergelangan tangan
- LCD, tombol, dan buzzer piezo yang ada tetap digunakan, hanya papan ARM Cortex M0+ yang diganti, sehingga watch face dan aplikasi utilitas yang dapat diprogram bisa berjalan tanpa Bluetooth
- Watch face TOTP bekerja dengan mengekstrak Base32 secret dari kode QR, mengubahnya menjadi byte heksadesimal, lalu memasukkannya ke
totp_face.cdan membangun ulangmovement - Watch face ratemeter yang dibuat bersamaan menghitung laju per menit dari interval input tombol ALARM; lebih dari 500/min ditampilkan sebagai
Hi, kurang dari 1/min sebagaiLo - Dengan masa pakai baterai berbulan-bulan, casing Casio yang ada, emulator wasm berbasis web, dan source tree yang dapat dimodifikasi, F-91W bisa diubah menjadi platform hacking kecil di pergelangan tangan
Mengubah Casio F-91W menjadi jam tangan yang dapat diprogram
- Sensor Watch adalah papan logika yang menggantikan movement kuarsa bawaan Casio F-91W
- F-91W adalah jam tangan kuarsa klasik yang diketahui telah terjual sekitar 90 juta unit
- Papan baru tetap memanfaatkan komponen yang ada
- Layar LCD asli
- Tombol
- Buzzer piezo
- Papan ini dapat diprogram berbasis ARM Cortex M0+
- Proyek Sensor Watch menyediakan kumpulan watch face yang mudah dimodifikasi dan aplikasi utilitas kecil yang disebut “complications”
- Meski tidak ada radio Bluetooth, keunggulannya adalah casing jam yang ringan, masa pakai baterai berbulan-bulan, dan struktur yang bisa dibangun ulang sendiri
Fitur yang dibuat dalam satu jam
- Penggantian papan, pengaturan secret 2FA, hingga penulisan watch face baru selesai dalam sekitar 1 jam
- Diatur agar kode OTP untuk akun Google dan Github bisa dilihat dari pergelangan tangan
- Menulis watch face ratemeter baru yang bisa digunakan sebagai stroke meter dayung atau cadence meter
- Ada emulator berbasis wasm sehingga mudah diuji di komputer, dan build pribadi bisa dijalankan langsung dari halaman web
Alur watch face yang disediakan di jam
- Menekan tombol MODE sekali akan berpindah ke watch face token 2FA
- Di watch face 2FA, tombol ALARM beralih antara token Google dan Github
- Menekan tombol MODE lagi akan berpindah ke watch face ratemeter yang baru dibuat
- Di ratemeter, tombol ALARM ditekan secara berkala untuk mengukur laju per menit dari objek yang dilacak
- Build ini juga menyertakan beberapa watch face bawaan
- Jam dunia
- Kalkulator matahari terbit/terbenam
- Penampil fase bulan
- Output real-time dari sensor suhu internal jam
- Pemilih pengaturan 24 jam
- Mode pengaturan waktu/tanggal
- Source tree
movementSensor Watch juga memiliki watch face lain seperti pulsometer dan orrery - Proses upgrade modul F-91W didokumentasikan di blog John Graham-Cumming
Cara mengatur watch face TOTP
- Watch face TOTP menghasilkan kata sandi sekali pakai berbasis waktu yang menggunakan waktu saat ini sebagai sumber keunikan
- Dapat digunakan untuk menghasilkan kode autentikasi dua faktor untuk login ke berbagai situs web seperti Google dan Github
- Tombol ALARM beralih antara situs web dan TOTP secret yang telah diatur
- Mendukung beberapa situs web dan secret, tetapi secret harus diekstrak dari kode QR dan dimasukkan langsung ke source code watch face
-
Prosedur menambahkan TOTP secret
- Dapatkan TOTP secret atau kode QR dari situs web tempat Anda ingin menghasilkan kode
- Jika hanya ada kode QR, secret dapat diekstrak di situs web Stefan Sundin
- Hasil ekstraksi adalah string alfanumerik sekitar 32 karakter, yaitu TOTP secret yang dienkode dalam Base32
- Untuk memasukkan secret ke kode watch face, Base32 harus dikonversi menjadi byte heksadesimal di cryptii.com
- TOTP secret harus dimasukkan dalam huruf besar
- Setelah menambahkan byte heksadesimal hasil konversi ke source code watch face TOTP, kompilasi ulang
movement
-
Titik modifikasi
totp_face.c- Kunci demo dapat dihapus, dan untuk menambahkan kunci baru di akhir daftar, naikkan nilai
num_keyssebesar 1 - Tambahkan byte heksadesimal hasil konversi di akhir array
keys[]- Tambahkan
0xdi depan setiap byte dan pisahkan dengan koma - Koma juga harus ditambahkan setelah byte terakhir yang sudah ada
- Tambahkan
- Di akhir array
key_sizes[], tambahkan ukuran secret yang ditambahkan, yaitu jumlah byte hex yang baru saja dimasukkan - Di akhir array
timesteps[], tambahkan entri30 - Tambahkan label tampilan ke array
labels[][2]- Untuk akun Google, label seperti
{ 'g', 'o' }bisa digunakan
- Untuk akun Google, label seperti
- Kunci demo dapat dihapus, dan untuk menambahkan kunci baru di akhir daftar, naikkan nilai
Implementasi watch face ratemeter
- Kode watch face ratemeter ada di pull request yang diajukan ke proyek utama
- Sebagian besar implementasinya berada di dalam fungsi loop utama bernama
ratemeter_face_loop - Fungsi ini menangani event input tombol dan event tick jam
- Watch face dapat meminta periode tick untuk pengukuran interval atau pemrosesan animasi
movementmenyediakan fungsi utilitaswatch_display_string- Fungsi ini mencoba menampilkan string alfanumerik pada elemen 7+ segmen yang terbatas di layar Casio
- Masalah pemetaan string arbitrer ke layar terbatas dan pengecualiannya dijelaskan dalam dokumentasi
-
Perilaku per event
EVENT_ACTIVATE- Saat watch face aktif, tampilkan
RAdi area tampilan hari
- Saat watch face aktif, tampilkan
EVENT_MODE_BUTTON_UP- Saat tombol MODE ditekan, berpindah ke watch face berikutnya
EVENT_LIGHT_BUTTON_DOWN- Saat tombol LIGHT ditekan, nyalakan lampu LED
EVENT_ALARM_BUTTON_DOWN- Saat tombol ALARM ditekan, hitung laju per menit dari interval antara input kali ini dan input sebelumnya
- Reset penghitung tick yang disimpan di status watch face
- Minta periode tick cepat dengan
RATEMETER_FACE_FREQUENCY - Konstanta ini didefinisikan sebagai 1/16 detik
EVENT_TICK- Tampilkan laju saat ini di layar
- Jika laju 0, tampilkan hanya
ra - Jika lebih cepat dari 500/min, tampilkan
ra Hi - Jika lebih lambat dari 1/min, tampilkan
ra Lo - Selain itu, tampilkan laju yang dihitung dalam format
ra %-3d pn - Terakhir, tingkatkan penghitung tick
Informasi pembelian dan afiliasi
- Sensor Watch tersedia dari Oddly Specific Objects
- Tidak ada hubungan afiliasi dengan Oddly Specific Objects
1 komentar
Komentar Hacker News
Memasukkan nilai rahasia TOTP ke halaman web sembarang itu merepotkan
Di Linux, tool
base32danodmungkin sudah terpasang, dan di Ubuntu keduanya ada dalam paketcoreutilsSelain itu, proyeknya bagus, tetapi desain jamnya agak jelek
https://gchq.github.io/CyberChef/
https://i.imgur.com/9MYqLvj.png
Agar bisa cepat mematikan XHR untuk memastikan tidak ada perilaku sisi server yang tak terduga
Kalau kadang terlihat simbol ⌍ yang aneh di demo, itu adalah “angka 7 kecil”
Ini karena pada jam ini segmen atas dan bawah digit pertama dan ketiga, yaitu segmen A dan D, saling terhubung
https://joeycastillo.github.io/Sensor-Watch-Documentation/wi...
Benar-benar mengagumkan betapa banyak efisiensi yang dijejalkan ke display ini
Dalam penggunaan umum, posisi digit ini hanya perlu menampilkan 0–5, dan digit pertama pada jam hanya perlu 0, 1, 2, tetapi kronometer bisa naik sampai 59:59.99
Angka-angka ini tidak perlu membedakan segmen A dan D, dan secara teori kronometer pun tidak akan bermasalah jika sampai 69:59.99, tetapi tampaknya mereka menganggap “satu jam” sudah cukup
Angka 8 dan 9 juga menyalakan segmen atas dan bawah, jadi yang benar-benar bermasalah hanya 7
Akhirnya ada konten yang membuat saya datang ke HN
F-91W sepertinya punya form factor yang sama dengan A158W[1], dan A158W adalah jam yang luar biasa bagus untuk harganya
Cocok dengan apa saja, stylish tapi tidak mencolok, sehingga saya sering memakainya ketimbang jam yang lebih mahal
Kalau khawatir band logamnya menarik bulu lengan, selama setahun itu hanya terjadi kira-kira dua kali, jauh lebih jarang daripada band logam murah lain
Kalau ingin alternatif yang lebih “smoky”, A168WGG[2] punya tint gunmetal gray pada band, dial yang digelapkan, dan illuminator yang hanya menerangi tulisannya
Namun A168 sedikit lebih besar daripada A158, jadi saya tidak tahu apakah modul internalnya akan pas sama persis, tetapi karena lebih besar berarti ruangnya juga lebih banyak, kemungkinan bisa
Sekalian membahas jam, untuk jam kerja dengan band hitam saya memakai GA-B2100-1AJF[3]
Untuk ukuran G-Shock, tampilannya cukup stylish, dan meski bukan smartwatch fiturnya banyak
Model Bluetooth punya warna dial dan kontras tone yang lebih bagus daripada model yang lebih murah, jadi lebih mudah dicocokkan dengan pakaian
[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/
Board Sensor Watch membutuhkan komponen donor dari modul Casio 593 asli
Daftar jam yang kompatibel bisa dilihat di sini
https://www.sensorwatch.net/docs/
Jam yang tidak berfungsi karena memakai movement berbeda meski susunan 3 tombolnya sama: A168W, A700W, LA680W, B650W
Secara umum, jika itu Casio digital 3 tombol dan punya backlight “illuminator” yang bagus, bukan lampu samping, maka itu bukan 593 sehingga tidak akan berfungsi
Saya sangat menyukai proyek ini, dan benar-benar memakainya setiap hari
Beberapa waktu lalu saya mengimplementasikan antarmuka baru untuk mendefinisikan kode TOTP di dalam source code, sehingga penjelasan di tulisan ini sekarang sudah tidak lagi tepat
Sekarang cara kerjanya seperti ini
static totp_t credentials[] = {CREDENTIAL(2F, "JBSWY3DPEHPK3PXP", SHA1, 30),CREDENTIAL(AC, "JBSWY3DPEHPK3PXP", SHA1, 30),};https://github.com/joeycastillo/Sensor-Watch/blob/main/movem...
Saya juga menambahkan kalibrasi pengguna agar monitor detak jantung bisa dipakai sebagai pengukur laju napas untuk asma, dan itu sudah membantu menyelamatkan nyawa
Ada juga fitur kalibrasi dan kompensasi suhu, yang meningkatkan akurasi jam hingga sekitar 10 detik per tahun
Komunitasnya juga makin besar, dan banyak orang masuk untuk mengutak-atik firmware
Baru-baru ini seseorang membuat game endless runner untuk jam ini
https://github.com/joeycastillo/Sensor-Watch/pull/419
Para maintainer-nya juga benar-benar orang baik
Kalau sedang mencari proyek open source yang bagus untuk dicurahi waktu, ini pilihan yang tepat
Saya tidak menemukannya di dokumentasi
Kalau harus mengompilasi ulang dan mem-flash ulang jam tangan, penggunaan untuk TOTP tampaknya cukup terbatas
Keren
Saya selalu berharap ada yang membuat hal seperti ini juga untuk jam kalkulator Casio
https://www.casio-intl.com/asia/en/calc/products/SL-760LC-BK...
Akan bagus kalau ini juga bisa berjalan di token SecurID
Benar-benar menarik
Saya bekerja di Nixon, dan ingin mencoba hal seperti ini juga pada jam digital Nixon; kalau penulis ingin menulis artikel serupa, saya mungkin bisa menyediakan beberapa jam gratis
Kenapa saya tidak bisa memakai ini di smartwatch saya yang paling pintar
Jadi ingin kembali ke Casio lama
https://github.com/ch1bo/garmin-otp-authenticator
Ini sangat bagus, dan saya juga sempat terpikir mencoba hal serupa dengan smartwatch bodoh, tetapi dari sisi keamanan operasional, saya penasaran apakah TOTP yang terlihat dan mudah diakses seperti ini baik-baik saja
Bagaimana kalau jamnya hilang atau dicuri
Saya memberi label agar layanan apa itu tidak langsung terlihat
Pebble praktis tidak punya kunci atau keamanan, tetapi bagaimanapun itu hanya faktor autentikasi kedua
Kalau seseorang sudah tahu kata sandi acak saya, sudah menyelidiki informasi bahwa saya mungkin punya TOTP di pergelangan tangan, dan benar-benar bisa mencuri jam saya, maka saya sudah kalah; bagi saya risiko sebesar itu sepadan dengan kenyamanannya