Tokens TOTP en la muñeca con un reloj tonto inteligente
(blog.singleton.io)- Es un proyecto de hackeo que mete una placa de reemplazo Sensor Watch en un común Casio F-91W para ver códigos 2FA TOTP de Google y Github desde la muñeca
- Mantiene el LCD, los botones y el zumbador piezoeléctrico originales, y solo cambia la placa ARM Cortex M0+ para ejecutar carátulas programables y apps utilitarias sin Bluetooth
- La carátula TOTP funciona extrayendo el Base32 secret de un código QR, convirtiéndolo a bytes hexadecimales, poniéndolo en
totp_face.cy volviendo a compilarmovement - La carátula ratemeter creada junto con el proyecto calcula una velocidad por minuto según el intervalo entre pulsaciones del botón ALARM; por encima de 500/min muestra
Hiy por debajo de 1/min muestraLo - La combinación de batería de varios meses, carcasa Casio original, emulador wasm basado en web y árbol de código modificable permite convertir el F-91W en una pequeña plataforma de hackeo de muñeca
Convertir un Casio F-91W en un reloj programable
- Sensor Watch es una placa lógica que reemplaza el movimiento de cuarzo original del Casio F-91W
- El F-91W es un reloj de cuarzo clásico del que se dice que se vendieron alrededor de 90 millones de unidades
- La nueva placa reutiliza los componentes existentes
- La pantalla LCD original
- Los botones
- El zumbador piezoeléctrico
- La placa es programable y está basada en ARM Cortex M0+
- El proyecto Sensor Watch ofrece un conjunto de carátulas fáciles de modificar y pequeñas apps utilitarias llamadas “complications”
- No tiene radio Bluetooth, pero sus ventajas son la carcasa ligera del reloj, una batería que dura varios meses y una estructura que se puede recompilar directamente
Funciones creadas en menos de una hora
- El reemplazo de la placa, la configuración del secret 2FA y la escritura de una nueva carátula se completaron en alrededor de 1 hora
- Se configuró para poder ver en la muñeca los códigos OTP de cuentas de Google y Github
- Se escribió una nueva carátula ratemeter que puede usarse como medidor de paladas de remo o medidor de cadencia
- Hay un emulador basado en wasm, lo que facilita probar en la computadora, y permite ejecutar una compilación personal directamente desde una página web
Flujo de carátulas ofrecido en el reloj
- Al presionar una vez el botón MODE, se pasa a la carátula de token 2FA
- En la carátula 2FA, el botón ALARM alterna entre los tokens de Google y Github
- Al volver a presionar el botón MODE, se pasa a la nueva carátula ratemeter
- En ratemeter, se presiona periódicamente el botón ALARM para medir la velocidad por minuto del objeto que se está siguiendo
- Esta compilación también incluye varias carátulas básicas
- Reloj mundial
- Calculadora de salida y puesta del sol
- Indicador de fase lunar
- Salida en tiempo real del sensor de temperatura interno del reloj
- Selector de configuración de 24 horas
- Modo de configuración de hora/fecha
- El árbol de código fuente de
movementde Sensor Watch también contiene otras carátulas como pulsometer y orrery - El proceso de actualización del módulo F-91W está documentado en el blog de John Graham-Cumming
Cómo configurar la carátula TOTP
- La carátula TOTP genera contraseñas de un solo uso basadas en tiempo que usan la hora actual como fuente de unicidad
- Puede usarse para generar códigos de autenticación de dos factores al iniciar sesión en varios sitios web como Google y Github
- Con el botón ALARM se alterna entre los sitios web configurados y sus TOTP secrets
- Soporta varios sitios web y secrets, pero hay que extraer el secret del código QR e insertarlo directamente en el código fuente de la carátula
-
Procedimiento para agregar un TOTP secret
- Obtener el TOTP secret o el código QR desde el sitio web para el que se quiere generar el código
- Si solo se tiene el código QR, se puede extraer el secret en el sitio web de Stefan Sundin
- El resultado extraído es una cadena alfanumérica de alrededor de 32 caracteres, y es el TOTP secret codificado en Base32
- Para poner el secret en el código de la carátula, hay que convertir Base32 a bytes hexadecimales en cryptii.com
- El TOTP secret debe ingresarse en mayúsculas
- Después de agregar los bytes hexadecimales convertidos al código fuente de la carátula TOTP, se recompila
movement
-
Puntos de modificación en
totp_face.c- Se pueden eliminar las claves de demostración; para agregar una nueva clave al final de la lista, se incrementa en 1 el valor de
num_keys - Se agregan al final del arreglo
keys[]los bytes hexadecimales convertidos- Cada byte debe llevar
0xdelante y separarse con comas - También hay que agregar una coma después del último byte existente
- Cada byte debe llevar
- Al final del arreglo
key_sizes[], se agrega el tamaño del secret añadido, es decir, la cantidad de bytes hexadecimales recién insertados - Al final del arreglo
timesteps[], se agrega una entrada30 - En el arreglo
labels[][2], se agrega una etiqueta para mostrar- Para una cuenta de Google, se puede usar una etiqueta como
{ 'g', 'o' }
- Para una cuenta de Google, se puede usar una etiqueta como
- Se pueden eliminar las claves de demostración; para agregar una nueva clave al final de la lista, se incrementa en 1 el valor de
Implementación de la carátula ratemeter
- El código de la carátula ratemeter está en el pull request enviado al proyecto principal
- La mayor parte de la implementación está dentro de la función de bucle principal llamada
ratemeter_face_loop - Esta función procesa eventos de entrada de botones y eventos tick del reloj
- La carátula puede solicitar una frecuencia de tick para manejar mediciones de intervalos o animaciones
movementofrece la función utilitariawatch_display_string- Es una función que intenta mostrar cadenas alfanuméricas en los limitados elementos de 7+ segmentos de la pantalla Casio
- El problema de mapear cadenas arbitrarias a la pantalla limitada y sus excepciones están documentados en la documentación
-
Comportamiento por evento
EVENT_ACTIVATE- Cuando se activa la carátula, muestra
RAen el área de visualización del día de la semana
- Cuando se activa la carátula, muestra
EVENT_MODE_BUTTON_UP- Al presionar el botón MODE, pasa a la siguiente carátula
EVENT_LIGHT_BUTTON_DOWN- Al presionar el botón LIGHT, enciende la iluminación LED
EVENT_ALARM_BUTTON_DOWN- Al presionar el botón ALARM, calcula la velocidad por minuto a partir del intervalo entre esta entrada y la entrada anterior
- Reinicia el contador de ticks guardado en el estado de la carátula
- Solicita una frecuencia de tick rápida con
RATEMETER_FACE_FREQUENCY - Esta constante está definida como 1/16 de segundo
EVENT_TICK- Muestra la velocidad actual en la pantalla
- Si la velocidad es 0, solo muestra
ra - Si es más rápida que 500/min, muestra
ra Hi - Si es más lenta que 1/min, muestra
ra Lo - En los demás casos, muestra la velocidad calculada con el formato
ra %-3d pn - Al final incrementa el contador de ticks
Información de compra y afiliación
- Sensor Watch se puede conseguir en Oddly Specific Objects
- No hay relación de afiliación con Oddly Specific Objects
1 comentarios
Opiniones en Hacker News
Es incómodo ingresar el secreto TOTP en una página web cualquiera.
En Linux, puede que ya tengas instaladas las herramientas
base32yod; en Ubuntu vienen en el paquetecoreutils.Fuera de eso, el proyecto está excelente, pero el diseño del reloj es medio feo.
https://gchq.github.io/CyberChef/
https://i.imgur.com/9MYqLvj.png
Para poder desactivar rápidamente XHR y comprobar que no haya comportamiento inesperado del lado del servidor.
Si en la demo a veces ves un símbolo ⌍ raro, es un “7 pequeño”.
Esto pasa porque en este reloj los segmentos superior e inferior del primer y tercer dígito, es decir los segmentos A y D, están unidos.
https://joeycastillo.github.io/Sensor-Watch-Documentation/wi...
Es realmente sorprendente cuánta eficiencia lograron meter en esta pantalla.
En el uso normal, esas posiciones solo necesitan mostrar del 0 al 5, y el primer dígito en el reloj solo necesita 0, 1 y 2, aunque el cronómetro llega hasta 59:59.99.
Esos dígitos no necesitan distinguir entre los segmentos A y D, y en teoría el cronómetro podría haber llegado a 69:59.99 sin problema, pero parece que consideraron que “una hora” era suficiente.
Como el 8 y el 9 también encienden ambos segmentos superior e inferior, en la práctica el único problemático es el 7.
Por fin contenido que hace que valga la pena entrar a HN.
El F-91W probablemente tenga el mismo factor de forma que el A158W[1], y el A158W es un reloj absurdamente atractivo para lo que cuesta.
Combina con todo, es estiloso sin llamar demasiado la atención, y termino usándolo seguido en vez de relojes más caros.
Si te preocupa que la correa metálica te jale los vellos del brazo, en un año me pasó unas dos veces como mucho, bastante menos que con otras correas metálicas baratas.
Si quieres una alternativa más “smoky”, el A168WGG[2] tiene una tonalidad gris gunmetal en la correa, la carátula en negro, y el illuminator solo ilumina los caracteres.
Eso sí, el A168 es apenas más grande que el A158, así que no sé si el módulo interno encaja igual, aunque si es más grande probablemente haya más espacio y quizá funcione.
Ya que hablamos de relojes, como reloj de trabajo con correa negra uso el GA-B2100-1AJF[3].
Para ser un G-Shock es bastante estiloso, y tiene muchas funciones aunque no sea un smartwatch.
El modelo con Bluetooth tiene mejor contraste de color y tono en la carátula que los modelos más baratos, así que es más fácil combinarlo con la ropa.
[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/
La placa Sensor Watch necesita piezas donadas por un módulo Casio 593 original.
La lista de relojes compatibles se puede ver aquí:
https://www.sensorwatch.net/docs/
Relojes que no funcionan porque usan otro movimiento aunque tengan la misma disposición de 3 botones: A168W, A700W, LA680W, B650W.
En general, si es un Casio digital de 3 botones y tiene una retroiluminación “illuminator” decente en lugar de luz lateral, no es un 593 y no va a funcionar.
Me encanta este proyecto y lo uso literalmente todos los días.
Hace poco implementé una nueva interfaz para definir códigos TOTP dentro del código fuente, así que la explicación de este artículo ya quedó desactualizada.
Ahora funciona así:
static totp_t credentials[] = {CREDENTIAL(2F, "JBSWY3DPEHPK3PXP", SHA1, 30),CREDENTIAL(AC, "JBSWY3DPEHPK3PXP", SHA1, 30),};https://github.com/joeycastillo/Sensor-Watch/blob/main/movem...
También agregué calibración de usuario para que el medidor de pulso pueda usarse como medidor de frecuencia respiratoria para asma, y ya ayudó a salvar vidas.
También tiene calibración y compensación de temperatura, lo que mejora la precisión del reloj a alrededor de 10 segundos por año.
La comunidad está creciendo y mucha gente se sumó para hackear el firmware.
Hace poco alguien creó un endless runner para este reloj.
https://github.com/joeycastillo/Sensor-Watch/pull/419
Los mantenedores también son gente buenísima.
Si estás buscando un gran proyecto open source al que valga la pena dedicarle tiempo, este es el indicado.
No lo encontré en la documentación.
Si tienes que recompilar y volver a flashear tu reloj de pulsera, me parece que el uso de TOTP queda bastante limitado.
Genial.
Siempre quise que alguien hiciera algo así para los relojes calculadora de Casio.
https://www.casio-intl.com/asia/en/calc/products/SL-760LC-BK...
Sería bueno que esto también funcionara en un token SecurID.
Muy interesante.
Trabajo en Nixon, y me gustaría probar algo así en relojes digitales Nixon; si el autor quisiera escribir un artículo parecido, creo que podría conseguirle algunos relojes gratis.
¿Por qué no puedo usar esto en mi smartwatch más inteligente?
Me dan ganas de volver a mi viejo Casio.
https://github.com/ch1bo/garmin-otp-authenticator
Esto está muy bueno, y también había pensado en hacer algo parecido con un smartwatch tonto, pero desde el punto de vista de la seguridad operativa me pregunto si está bien que el TOTP sea tan visible y fácil de acceder.
¿Qué pasa si pierdes el reloj o te lo roban?
Les puse etiquetas para que no sea obvio de qué servicio se trata.
El Pebble prácticamente no tiene bloqueo ni seguridad, pero al final no deja de ser un segundo factor.
Si alguien ya conoce mi contraseña generada aleatoriamente, además investigó lo suficiente para saber que podría tener TOTP en la muñeca y realmente puede robarme el reloj, entonces ya perdí; y para mí ese riesgo vale la conveniencia.