1 पॉइंट द्वारा GN⁺ 2024-07-28 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • आम Casio F-91W में Sensor Watch replacement board लगाकर Google और Github के लिए 2FA TOTP कोड कलाई पर देखने वाला यह एक हैकिंग प्रोजेक्ट है
  • मौजूदा LCD, बटन और piezo buzzer को वैसे ही रखते हुए सिर्फ ARM Cortex M0+ बोर्ड बदला जाता है, जिससे Bluetooth के बिना भी programmable watchface और utility apps चलाए जा सकते हैं
  • TOTP watchface QR code से Base32 secret निकालकर उसे hexadecimal bytes में बदलने के बाद totp_face.c में डालकर movement को फिर से build करने के तरीके से काम करता है
  • साथ में बनाया गया ratemeter watchface ALARM बटन इनपुट के बीच के अंतराल से प्रति मिनट दर की गणना करता है, और 500/min से ऊपर होने पर Hi, 1/min से नीचे होने पर Lo दिखाता है
  • कई महीनों की battery life, मूल Casio case, web-आधारित wasm emulator और संशोधित किए जा सकने वाले source tree मिलकर F-91W को कलाई पर इस्तेमाल होने वाले छोटे hacking platform में बदल देते हैं

Casio F-91W को programmable घड़ी में बदलना

  • Sensor Watch Casio F-91W के मौजूदा quartz movement को बदलने वाला एक logic board है
  • F-91W एक क्लासिक quartz घड़ी है, जिसकी लगभग 9 करोड़ यूनिट बिक चुकी हैं
  • नया बोर्ड मौजूदा पुर्जों का ही इस्तेमाल करता है
    • मूल LCD display
    • बटन
    • piezo buzzer
  • यह बोर्ड ARM Cortex M0+ आधारित और programmable है
  • Sensor Watch प्रोजेक्ट आसानी से संशोधित किए जा सकने वाले watchface और “complications” कहलाने वाले छोटे utility apps का एक सेट देता है
  • इसमें Bluetooth radio नहीं है, लेकिन हल्का watch case, कई महीनों की battery life और खुद दोबारा build कर सकने वाली संरचना इसके फायदे हैं

एक घंटे के अंदर बनाए गए फीचर

  • बोर्ड बदलने, 2FA secret सेट करने और नया watchface लिखने तक का काम करीब 1 घंटे में पूरा किया गया
  • Google और Github अकाउंट के OTP code कलाई पर देखे जा सकें, ऐसा सेटअप किया गया
  • rowing stroke meter या cadence meter की तरह इस्तेमाल होने वाला ratemeter watchface नया लिखा गया
  • wasm-आधारित emulator होने से कंप्यूटर पर test करना आसान है, और अपना निजी build सीधे web page पर चलाकर देखा जा सकता है

घड़ी में दिए गए watchface का flow

  • MODE बटन एक बार दबाने पर 2FA token watchface पर जाया जाता है
  • 2FA watchface में ALARM बटन Google और Github token के बीच switch करता है
  • MODE बटन फिर दबाने पर नए बनाए गए ratemeter watchface पर जाया जाता है
  • ratemeter में ALARM बटन को समय-समय पर दबाकर ट्रैक की जा रही चीज़ की प्रति मिनट दर मापी जाती है
  • इस build में कई default watchface भी शामिल हैं
    • world clock
    • sunrise/sunset calculator
    • moon phase display
    • घड़ी के अंदर के temperature sensor का real-time output
    • 24-hour setting selector
    • time/date setting mode
  • Sensor Watch movement source tree में pulsometer और orrery जैसे दूसरे watchface भी हैं
  • F-91W module upgrade की प्रक्रिया John Graham-Cumming के ब्लॉग में दस्तावेज़ित है

TOTP watchface सेट करने का तरीका

  • TOTP watchface time-based one-time password बनाता है, जो uniqueness के स्रोत के रूप में वर्तमान समय का उपयोग करता है
  • इसे Google, Github जैसी कई websites के login के लिए 2-step authentication code बनाने में इस्तेमाल किया जा सकता है
  • ALARM बटन से सेट की गई website और TOTP secret के बीच switch किया जाता है
  • यह कई websites और secret को support करता है, लेकिन QR code से secret निकालकर watchface source code में सीधे डालना पड़ता है
  • TOTP secret जोड़ने की प्रक्रिया

    • जिस website के लिए code बनाना है, वहाँ से TOTP secret या QR code प्राप्त करें
    • अगर केवल QR code हो, तो Stefan Sundin की website से secret निकाला जा सकता है
    • निकला हुआ परिणाम लगभग 32 अक्षरों की alphanumeric string होता है, जो Base32-encoded TOTP secret है
    • watchface code में secret डालने के लिए cryptii.com पर Base32 को hexadecimal bytes में बदलना होगा
    • TOTP secret को UPPERCASE में दर्ज करना चाहिए
    • बदले हुए hexadecimal bytes को TOTP watchface source code में जोड़कर movement को फिर से compile करें
  • totp_face.c में बदलाव की जगहें

    • demo key हटाई जा सकती है, और सूची के अंत में नई key जोड़ने के लिए num_keys मान को 1 बढ़ाएँ
    • keys[] array के अंत में बदले हुए hexadecimal bytes जोड़ें
      • हर byte के आगे 0x लगाएँ और comma से अलग करें
      • मौजूदा आखिरी byte के बाद भी comma जोड़ना होगा
    • key_sizes[] array के अंत में जोड़े गए secret का आकार, यानी अभी डाले गए hex bytes की संख्या, जोड़ें
    • timesteps[] array के अंत में 30 item जोड़ें
    • labels[][2] array में display label जोड़ें
      • अगर यह Google अकाउंट है, तो { 'g', 'o' } जैसा label इस्तेमाल किया जा सकता है

ratemeter watchface का implementation

  • ratemeter watchface का code main project को भेजे गए pull request में है
  • implementation का अधिकांश हिस्सा ratemeter_face_loop नाम के main loop function के अंदर है
  • यह function button input event और घड़ी के tick event को process करता है
  • watchface interval measurement या animation processing के लिए tick frequency request कर सकता है
  • movement watch_display_string utility function प्रदान करता है
    • यह Casio display के सीमित 7+ segment elements पर alphanumeric string दिखाने की कोशिश करने वाला function है
    • किसी भी string को सीमित screen पर map करने की समस्या और exceptions documentation में संकलित हैं
  • event के अनुसार व्यवहार

    • EVENT_ACTIVATE
      • watchface activate होने पर weekday display area में RA दिखाया जाता है
    • EVENT_MODE_BUTTON_UP
      • MODE बटन दबाने पर अगले watchface पर जाया जाता है
    • EVENT_LIGHT_BUTTON_DOWN
      • LIGHT बटन दबाने पर LED light चालू होती है
    • EVENT_ALARM_BUTTON_DOWN
      • ALARM बटन दबाने पर इस input और पिछले input के बीच के अंतर से प्रति मिनट दर की गणना की जाती है
      • watchface state में saved tick count को reset किया जाता है
      • RATEMETER_FACE_FREQUENCY के साथ तेज tick frequency request की जाती है
      • यह constant 1/16 सेकंड के रूप में परिभाषित है
    • EVENT_TICK
      • वर्तमान दर display पर दिखाई जाती है
      • अगर दर 0 हो तो सिर्फ ra दिखाया जाता है
      • 500/min से तेज हो तो ra Hi दिखाया जाता है
      • 1/min से धीमा हो तो ra Lo दिखाया जाता है
      • अन्य मामलों में ra %-3d pn format में गणना की गई दर दिखाई जाती है
      • अंत में tick count बढ़ाया जाता है

खरीद जानकारी और संबद्धता

  • Sensor Watch Oddly Specific Objects से प्राप्त किया जा सकता है
  • Oddly Specific Objects के साथ कोई संबद्धता नहीं है

1 टिप्पणियां

 
GN⁺ 2024-07-28
Hacker News की रायें
  • TOTP secret value को किसी मनमाने वेबपेज में डालना असुविधाजनक है
    Linux पर base32 और od टूल पहले से इंस्टॉल हो सकते हैं, और Ubuntu के हिसाब से ये coreutils पैकेज में आते हैं
    बाकी प्रोजेक्ट शानदार है, लेकिन घड़ी का डिजाइन थोड़ा बदसूरत है

    • अगर वेब ऐप ही इस्तेमाल करना पड़े, तो कम-से-कम CyberChef इस्तेमाल करना बेहतर है, जो सिर्फ client-side पर चलता है और security testing में व्यापक रूप से इस्तेमाल होता है
      https://gchq.github.io/CyberChef/
    • इसलिए मैं अभी भी uMatrix संभालकर रखता हूं
      https://i.imgur.com/9MYqLvj.png
      ताकि अनपेक्षित server-side behavior न हो, यह जांचने के लिए XHR को जल्दी से बंद कर सकूं
    • यह बोर्ड A158W और A171W के साथ भी compatible है, और वे देखने में कहीं बेहतर हैं
    • base-32 decoding या TOTP generation जैसे सरल कामों के लिए किसी third party, वह भी वेबसाइट, पर भरोसा क्यों करें—ऐसा लगता है
  • डेमो में अगर कभी-कभी अजीब ⌍ symbol दिखे, तो यह “छोटा 7” है
    वजह यह है कि इस घड़ी में पहले और तीसरे digits के ऊपर-नीचे वाले segments, यानी A और D segments, आपस में जुड़े हुए हैं
    https://joeycastillo.github.io/Sensor-Watch-Documentation/wi...
    इस डिस्प्ले में जितनी efficiency ठूंसी गई है, वह सचमुच हैरान करने वाली है
    सामान्य इस्तेमाल में इन जगहों पर सिर्फ 0~5 दिखाने की जरूरत होती है, और पहला digit घड़ी में सिर्फ 0, 1, 2 चाहता है, लेकिन chronometer 59:59.99 तक जाता है
    इन digits में A और D segments को अलग करने की जरूरत नहीं होती, और सैद्धांतिक रूप से chronometer 69:59.99 तक भी जाता तो समस्या नहीं होती, लेकिन शायद उन्होंने “एक घंटा” काफी माना
    8 और 9 भी ऊपर-नीचे दोनों segments जलाते हैं, इसलिए असल में समस्या सिर्फ 7 के साथ है

    • oddly specific objects premium replacement LCD बना रहा है
  • आखिरकार ऐसा content आया जो मुझे HN पर ले आया
    F-91W शायद A158W[1] जैसा ही form factor लगता है, और A158W कीमत के हिसाब से अविश्वसनीय रूप से अच्छी दिखने वाली घड़ी है
    यह हर चीज़ के साथ अच्छी लगती है, stylish होते हुए भी बहुत ज्यादा attention नहीं खींचती, इसलिए मैं इसे अक्सर महंगी घड़ियों की जगह पहन लेता हूं
    अगर आपको चिंता है कि metal band बांह के बाल खींचेगा, तो 1 साल में ऐसा सिर्फ करीब दो बार हुआ, और दूसरे सस्ते metal bands की तुलना में बहुत कम
    अगर “smoky” alternative चाहिए, तो A168WGG[2] के band में gunmetal grey tint है, dial काला किया गया है, और illuminator सिर्फ अक्षरों को रोशन करता है
    हालांकि A168, A158 से थोड़ा-सा बड़ा है, इसलिए पता नहीं internal module उसी तरह फिट होगा या नहीं, लेकिन अगर बड़ा है तो जगह भी ज्यादा होगी, इसलिए शायद संभव होगा
    घड़ियों की बात और करूं तो, काम के लिए black-band watch के तौर पर GA-B2100-1AJF[3] इस्तेमाल करता हूं
    G-Shock के हिसाब से यह काफी stylish है, और smartwatch न होने के बावजूद इसमें काफी features हैं
    Bluetooth model में सस्ते models की तुलना में dial color और tone contrast बेहतर है, इसलिए कपड़ों के साथ match करना आसान है
    [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/

    • दुर्भाग्य से यह compatible नहीं है
      Sensor Watch board को असली Casio 593 module से दान किए गए parts की जरूरत होती है
      compatible watches की सूची यहां देख सकते हैं
      https://www.sensorwatch.net/docs/
      वही 3-button layout होने के बावजूद अलग movement इस्तेमाल करने की वजह से जो watches काम नहीं करतीं: A168W, A700W, LA680W, B650W
      आम तौर पर अगर 3-button digital Casio है और side light के बजाय अच्छा “illuminator” backlight है, तो वह 593 नहीं है, इसलिए काम नहीं करेगा
  • मुझे यह प्रोजेक्ट बहुत पसंद है, और सचमुच रोज इस्तेमाल करता हूं
    कुछ समय पहले source code के अंदर TOTP codes define करने के लिए नया interface implement किया था, और उस काम की वजह से इस लेख का विवरण अब सही नहीं रहा
    अब यह इस तरह काम करता है
    static totp_t credentials[] = {
    CREDENTIAL(2F, "JBSWY3DPEHPK3PXP", SHA1, 30),
    CREDENTIAL(AC, "JBSWY3DPEHPK3PXP", SHA1, 30),
    };
    https://github.com/joeycastillo/Sensor-Watch/blob/main/movem...
    pulse meter को asthma breathing rate meter की तरह भी इस्तेमाल किया जा सके, इसके लिए user calibration भी जोड़ा, और यह पहले ही जान बचाने में मददगार रहा है
    calibration और temperature compensation features भी हैं, जो घड़ी की accuracy को सालाना करीब 10 seconds तक सुधार देते हैं
    community भी बढ़ रही है, और बहुत लोग firmware hack करने आए हैं
    हाल में किसी ने इस घड़ी के लिए endless running game बनाया
    https://github.com/joeycastillo/Sensor-Watch/pull/419
    maintainers भी सचमुच अच्छे लोग हैं
    अगर आप समय देने लायक शानदार open source project ढूंढ रहे हैं, तो यही है

    • लगता है यह सामान्य watch battery पर चलेगा, लेकिन battery life कितनी है, यह जानने की उत्सुकता है
      docs में नहीं मिला
  • अगर wristwatch को फिर से compile और flash करना पड़े, तो TOTP इस्तेमाल करने का उपयोग काफी सीमित लगता है

  • कमाल है
    हमेशा चाहता था कि कोई Casio calculator watch के लिए भी ऐसा कुछ बना दे

  • अच्छा होगा अगर यह SecurID token पर भी काम करे

  • सचमुच दिलचस्प
    मैं Nixon में काम करता हूं, और ऐसा कुछ Nixon digital watches पर भी आजमाना चाहूंगा; अगर लेखक ऐसा ही लेख लिखना चाहें तो शायद मैं कुछ free watches दिलवा सकूं

  • मेरी सबसे smart smartwatch पर मैं यह क्यों नहीं चला सकता
    पुराने Casio पर लौटने का मन होने लगा

  • यह वाकई अच्छा है, और मैंने dumb smartwatch पर कुछ ऐसा करने के बारे में भी सोचा था, लेकिन operational security के लिहाज से सोचता हूं कि TOTP का इतना साफ दिखना और आसानी से accessible होना ठीक है या नहीं
    अगर घड़ी खो जाए या चोरी हो जाए तो क्या होगा

    • जब तक मालिक घूम-घूमकर यह न बताता रहे कि “यह मेरा second authentication factor है”, राह चलता इंसान इसे बस खराब घड़ी समझेगा
    • मैं Pebble में TOTP codes रखकर इस्तेमाल करता हूं और मुझे यह ठीक लगता है
      labels ऐसे रखता हूं कि service क्या है, तुरंत पता न चले
      Pebble में असल में कोई lock या security नहीं है, लेकिन आखिर यह सिर्फ second authentication factor ही है
      अगर कोई मेरा randomly generated password पहले से जानता है, यह जानकारी भी जुटा चुका है कि मेरी कलाई पर TOTP हो सकता है, और सच में मेरी घड़ी चुरा सकता है, तो मैं पहले ही हार चुका हूं; और मेरे हिसाब से इतनी सुविधा के बदले यह acceptable tradeoff है
    • फिर भी YubiKey से कम noticeable तो है, है न?