1 poin oleh GN⁺ 2024-07-28 | 1 komentar | Bagikan ke WhatsApp
  • 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.c dan membangun ulang movement
  • 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 sebagai Lo
  • 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 movement Sensor 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_keys sebesar 1
    • Tambahkan byte heksadesimal hasil konversi di akhir array keys[]
      • Tambahkan 0x di depan setiap byte dan pisahkan dengan koma
      • Koma juga harus ditambahkan setelah byte terakhir yang sudah ada
    • Di akhir array key_sizes[], tambahkan ukuran secret yang ditambahkan, yaitu jumlah byte hex yang baru saja dimasukkan
    • Di akhir array timesteps[], tambahkan entri 30
    • Tambahkan label tampilan ke array labels[][2]
      • Untuk akun Google, label seperti { 'g', 'o' } bisa digunakan

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
  • movement menyediakan fungsi utilitas watch_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 RA di area tampilan hari
    • 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

1 komentar

 
GN⁺ 2024-07-28
Komentar Hacker News
  • Memasukkan nilai rahasia TOTP ke halaman web sembarang itu merepotkan
    Di Linux, tool base32 dan od mungkin sudah terpasang, dan di Ubuntu keduanya ada dalam paket coreutils
    Selain itu, proyeknya bagus, tetapi desain jamnya agak jelek

    • Kalau memang harus memakai aplikasi web, setidaknya lebih baik memakai CyberChef, yang hanya berjalan di sisi klien dan banyak dipakai dalam pengujian keamanan
      https://gchq.github.io/CyberChef/
    • Karena itu saya masih tetap memelihara uMatrix
      https://i.imgur.com/9MYqLvj.png
      Agar bisa cepat mematikan XHR untuk memastikan tidak ada perilaku sisi server yang tak terduga
    • Board ini juga kompatibel dengan A158W dan A171W, yang tampilannya jauh lebih bagus
    • Saya jadi berpikir, kenapa harus memercayai pihak ketiga, apalagi situs web, untuk pekerjaan sederhana seperti decoding base-32 atau pembuatan TOTP
  • 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

    • oddly specific objects sedang membuat LCD pengganti kelas atas
  • 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/

    • Sayangnya tidak kompatibel
      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

    • Sepertinya berjalan dengan baterai jam biasa, jadi saya penasaran seperti apa daya tahan baterainya
      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

  • 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

  • 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

    • Selama pemiliknya tidak berkeliling berkata “ini adalah faktor autentikasi kedua saya”, orang lewat mungkin hanya akan mengira itu jam rusak
    • Saya menyimpan dan memakai kode TOTP di Pebble, dan menurut saya itu tidak masalah
      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
    • Tetap saja, bukankah ini lebih tidak mencolok daripada YubiKey?