स्मार्ट dumb watch के साथ कलाई पर TOTP token
(blog.singleton.io)- आम 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
movementsource 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 जोड़ना होगा
- हर byte के आगे
key_sizes[]array के अंत में जोड़े गए secret का आकार, यानी अभी डाले गए hex bytes की संख्या, जोड़ेंtimesteps[]array के अंत में30item जोड़ेंlabels[][2]array में display label जोड़ें- अगर यह Google अकाउंट है, तो
{ 'g', 'o' }जैसा label इस्तेमाल किया जा सकता है
- अगर यह Google अकाउंट है, तो
- demo key हटाई जा सकती है, और सूची के अंत में नई key जोड़ने के लिए
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 कर सकता है
movementwatch_display_stringutility function प्रदान करता है- यह Casio display के सीमित 7+ segment elements पर alphanumeric string दिखाने की कोशिश करने वाला function है
- किसी भी string को सीमित screen पर map करने की समस्या और exceptions documentation में संकलित हैं
-
event के अनुसार व्यवहार
EVENT_ACTIVATE- watchface activate होने पर weekday display area में
RAदिखाया जाता है
- watchface activate होने पर weekday display area में
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 pnformat में गणना की गई दर दिखाई जाती है - अंत में tick count बढ़ाया जाता है
खरीद जानकारी और संबद्धता
- Sensor Watch Oddly Specific Objects से प्राप्त किया जा सकता है
- Oddly Specific Objects के साथ कोई संबद्धता नहीं है
1 टिप्पणियां
Hacker News की रायें
TOTP secret value को किसी मनमाने वेबपेज में डालना असुविधाजनक है
Linux पर
base32औरodटूल पहले से इंस्टॉल हो सकते हैं, और Ubuntu के हिसाब से येcoreutilsपैकेज में आते हैंबाकी प्रोजेक्ट शानदार है, लेकिन घड़ी का डिजाइन थोड़ा बदसूरत है
https://gchq.github.io/CyberChef/
https://i.imgur.com/9MYqLvj.png
ताकि अनपेक्षित server-side behavior न हो, यह जांचने के लिए XHR को जल्दी से बंद कर सकूं
डेमो में अगर कभी-कभी अजीब ⌍ 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 के साथ है
आखिरकार ऐसा 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/
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 ढूंढ रहे हैं, तो यही है
docs में नहीं मिला
अगर wristwatch को फिर से compile और flash करना पड़े, तो TOTP इस्तेमाल करने का उपयोग काफी सीमित लगता है
कमाल है
हमेशा चाहता था कि कोई Casio calculator watch के लिए भी ऐसा कुछ बना दे
https://www.casio-intl.com/asia/en/calc/products/SL-760LC-BK...
अच्छा होगा अगर यह SecurID token पर भी काम करे
सचमुच दिलचस्प
मैं Nixon में काम करता हूं, और ऐसा कुछ Nixon digital watches पर भी आजमाना चाहूंगा; अगर लेखक ऐसा ही लेख लिखना चाहें तो शायद मैं कुछ free watches दिलवा सकूं
मेरी सबसे smart smartwatch पर मैं यह क्यों नहीं चला सकता
पुराने Casio पर लौटने का मन होने लगा
https://github.com/ch1bo/garmin-otp-authenticator
यह वाकई अच्छा है, और मैंने dumb smartwatch पर कुछ ऐसा करने के बारे में भी सोचा था, लेकिन operational security के लिहाज से सोचता हूं कि TOTP का इतना साफ दिखना और आसानी से accessible होना ठीक है या नहीं
अगर घड़ी खो जाए या चोरी हो जाए तो क्या होगा
labels ऐसे रखता हूं कि service क्या है, तुरंत पता न चले
Pebble में असल में कोई lock या security नहीं है, लेकिन आखिर यह सिर्फ second authentication factor ही है
अगर कोई मेरा randomly generated password पहले से जानता है, यह जानकारी भी जुटा चुका है कि मेरी कलाई पर TOTP हो सकता है, और सच में मेरी घड़ी चुरा सकता है, तो मैं पहले ही हार चुका हूं; और मेरे हिसाब से इतनी सुविधा के बदले यह acceptable tradeoff है