ਬਲੌਗ

Baby Monitor Timmy ਤਕਨੀਕੀ ਤੌਰ 'ਤੇ ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ

WebRTC, Firebase ਅਤੇ ਐਂਡ-ਟੂ-ਐਂਡ ਸੁਰੱਖਿਆ—ਬਿਨਾਂ ਔਖੇ ਤਕਨੀਕੀ ਸ਼ਬਦਾਂ ਦੇ ਸਮਝਾਈ ਗਈ।

ਤਿੰਨ ਮੁੱਖ ਹਿੱਸੇ, ਇੱਕ ਮਕਸਦ

ਅੰਦਰੋਂ ਵੇਖੀਏ ਤਾਂ Timmy ਕਾਫ਼ੀ ਸਿੱਧੇ ਤੇ ਵਰਤੋਂਯੋਗ ਢੰਗ ਨਾਲ ਬਣਿਆ ਹੈ: Flutter ਐਪ ਲਈ, WebRTC ਰੀਅਲ-ਟਾਈਮ ਆਡੀਓ ਅਤੇ ਵੀਡੀਓ ਲਈ, ਅਤੇ Firebase ਤਾਲਮੇਲ ਲਈ। ਮੈਂ ਐਸਾ ਵੱਡਾ ਪਲੇਟਫਾਰਮ ਨਹੀਂ ਬਣਾਉਣਾ ਚਾਹੁੰਦਾ ਸੀ ਜੋ ਹਰ ਚੀਜ਼ ਕਲਾਊਡ ਰਾਹੀਂ ਭੇਜੇ। ਹਰ ਹਿੱਸੇ ਨੂੰ ਘੱਟ ਤੋਂ ਘੱਟ ਜਾਣਕਾਰੀ ਹੋਵੇ ਅਤੇ ਫਿਰ ਵੀ ਉਹ ਹੋਰ ਹਿੱਸਿਆਂ ਨਾਲ ਭਰੋਸੇਯੋਗ ਤਰੀਕੇ ਨਾਲ ਕੰਮ ਕਰੇ।

WebRTC: ਸਿੱਧਾ ਕਨੈਕਸ਼ਨ, ਮੂਲ ਰੂਪ ਵਿੱਚ ਇਨਕ੍ਰਿਪਟ ਕੀਤਾ ਹੋਇਆ

WebRTC (Web Real-Time Communication) ਬੱਚੇ ਵਾਲੇ ਅਤੇ ਮਾਪਿਆਂ ਵਾਲੇ ਡਿਵਾਈਸ ਵਿਚਕਾਰ ਆਡੀਓ ਅਤੇ ਵੀਡੀਓ ਭੇਜਦਾ ਹੈ। ਸਭ ਤੋਂ ਵਧੀਆ ਹਾਲਤ ਵਿੱਚ ਡਾਟਾ ਸਿੱਧਾ ਦੋਵੇਂ ਡਿਵਾਈਸਾਂ ਵਿਚਕਾਰ, ਪੀਅਰ-ਟੂ-ਪੀਅਰ ਤਰੀਕੇ ਨਾਲ, ਬਿਨਾਂ ਵਿਚਕਾਰ ਕਿਸੇ ਮੀਡੀਆ ਸਰਵਰ ਦੇ ਵਗਦਾ ਹੈ।

ਹਰ WebRTC ਕਨੈਕਸ਼ਨ ਮੂਲ ਰੂਪ ਵਿੱਚ DTLS-SRTP ਵਰਤਦਾ ਹੈ। ਜੇ ਕੋਈ ਨੈੱਟਵਰਕ ਪੈਕੇਟ ਕੈਪਚਰ ਵੀ ਕਰ ਲਵੇ, ਤਾਂ ਉਸ ਨੂੰ ਪੜ੍ਹਨਯੋਗ ਆਡੀਓ ਜਾਂ ਵੀਡੀਓ ਨਹੀਂ ਮਿਲਦੀ। ਇਹ ਇਨਕ੍ਰਿਪਸ਼ਨ ਪ੍ਰੋਟੋਕੋਲ ਦਾ ਹਿੱਸਾ ਹੈ ਅਤੇ WebRTC ਵਿੱਚ ਇਸਨੂੰ ਸਿਰਫ਼ ਬੰਦ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ।

ਮੇਰੇ ਲਈ ਇਹੀ ਸਭ ਤੋਂ ਮਹੱਤਵਪੂਰਨ ਗੱਲ ਸੀ: ਬੱਚੇ ਦੇ ਕਮਰੇ ਦਾ ਮੀਡੀਆ ਮੇਰੇ ਸਰਵਰ 'ਤੇ ਨਹੀਂ ਹੋਣਾ ਚਾਹੀਦਾ। ਇਹ ਤੁਹਾਡੇ ਡਿਵਾਈਸਾਂ ਦੇ ਵਿਚਕਾਰ ਹੀ ਰਹਿੰਦਾ ਹੈ।

Firebase Firestore ਰਾਹੀਂ ਸਿਗਨਲਿੰਗ

WebRTC ਸ਼ੁਰੂ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ, ਡਿਵਾਈਸਾਂ ਨੂੰ ਇੱਕ-ਦੂਜੇ ਨੂੰ ਲੱਭਣਾ ਹੁੰਦਾ ਹੈ ਅਤੇ ਇਹ ਤੈਅ ਕਰਨਾ ਹੁੰਦਾ ਹੈ ਕਿ ਉਹ ਕਿਵੇਂ ਜੁੜ ਸਕਦੇ ਹਨ। ਇਸ ਹਿੱਸੇ ਨੂੰ ਸਿਗਨਲਿੰਗ ਕਿਹਾ ਜਾਂਦਾ ਹੈ। Timmy ਇਸ ਲਈ Google ਦਾ ਕਲਾਊਡ ਡਾਟਾਬੇਸ Firebase Firestore ਵਰਤਦਾ ਹੈ।

ਸਿਰਫ਼ ਤਕਨੀਕੀ ਕਨੈਕਸ਼ਨ ਡਾਟੇ ਦੀ ਅਦਲਾ-ਬਦਲੀ ਹੁੰਦੀ ਹੈ:

ਆਡੀਓ ਅਤੇ ਵੀਡੀਓ Firebase ਵਿੱਚ ਨਹੀਂ ਜਾਂਦੇ। Firestore ਸਿਰਫ਼ ਤਕਨੀਕੀ ਕਨੈਕਸ਼ਨ ਡਾਟਾ ਭੇਜਦਾ ਹੈ। Timmy ਇਸ ਸਿਗਨਲਿੰਗ ਪਰਤ ਨੂੰ ਵੀ ਇਨਕ੍ਰਿਪਟ ਕਰਦਾ ਹੈ, ਤਾਂ ਜੋ Firestore SDP ਅਤੇ ICE ਲਈ ਸਾਫ਼-ਟੈਕਸਟ ਮਿਲਣ ਦੀ ਥਾਂ ਨਾ ਬਣੇ।

TURN ਸਰਵਰ: ਜਦੋਂ ਸਿੱਧਾ ਰਸਤਾ ਕੰਮ ਨਾ ਕਰੇ

ਕੁਝ ਨੈੱਟਵਰਕ ਸਿੱਧੇ ਕਨੈਕਸ਼ਨ ਰੋਕ ਦਿੰਦੇ ਹਨ, ਜਿਵੇਂ ਸਖ਼ਤ ਫਾਇਰਵਾਲ ਜਾਂ ਕੁਝ ਮੋਬਾਈਲ ਕੈਰੀਅਰ। ਫਿਰ WebRTC ਨੂੰ ਇੱਕ TURN ਰੀਲੇ (Traversal Using Relays around NAT) ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ।

Timmy ਪਹਿਲਾਂ ਲੋਕਲ TURN ਸਰਵਰ ਅਜ਼ਮਾਉਂਦਾ ਹੈ ਅਤੇ ਜਦੋਂ ਲੋਕਲ ਰੀਲੇ ਉਪਲਬਧ ਨਾ ਹੋਵੇ ਜਾਂ ਬਹੁਤ ਵਿਅਸਤ ਹੋਵੇ ਤਾਂ Cloudflare ਨੂੰ ਬੈਕਅੱਪ ਵਜੋਂ ਵਰਤਦਾ ਹੈ। ਰੀਲੇ ਇਨਕ੍ਰਿਪਟ ਕੀਤੇ ਪੈਕੇਟ ਅੱਗੇ ਭੇਜਦਾ ਹੈ। ਇਸ ਨੂੰ ਆਵਾਜ਼ ਜਾਂ ਵੀਡੀਓ ਦੀਆਂ ਕੁੰਜੀਆਂ ਨਹੀਂ ਮਿਲਦੀਆਂ; WebRTC ਦੀ ਇਨਕ੍ਰਿਪਸ਼ਨ ਬਣੀ ਰਹਿੰਦੀ ਹੈ।

TURN ਕ੍ਰੇਡੈਂਸ਼ਲ Firebase Cloud Function ਤੋਂ ਆਉਂਦੇ ਹਨ ਅਤੇ ਸਿਰਫ਼ 24 ਘੰਟਿਆਂ ਲਈ ਵੈਧ ਹੁੰਦੇ ਹਨ। ਮੇਰੇ ਵਿਚਾਰ ਵਿੱਚ ਬੇਬੀ ਮਾਨੀਟਰ ਐਪ ਵਿੱਚ ਸਥਾਈ ਕ੍ਰੇਡੈਂਸ਼ਲ ਬਹੁਤ ਜੋਖ਼ਿਮ ਵਾਲੇ ਹੋਣਗੇ।

ਨੇੜਲੇ ਕਨੈਕਸ਼ਨ: ਡਿਵਾਈਸ ਆਪਣੇ ਆਪ ਇੱਕ-ਦੂਜੇ ਨੂੰ ਲੱਭਦੇ ਹਨ

ਬੱਚੇ ਵਾਲੇ ਅਤੇ ਮਾਪਿਆਂ ਵਾਲੇ ਡਿਵਾਈਸ ਵਿਚਕਾਰ ਔਖੇ ਸੈਟਅੱਪ ਕਦਮਾਂ ਤੋਂ ਬਚਣ ਲਈ, Timmy Nearby Connections ਵਰਤਦਾ ਹੈ। Google Bluetooth ਅਤੇ WiFi ਰਾਹੀਂ ਇਹ ਖੋਜ ਪਰਤ ਦਿੰਦਾ ਹੈ।

Timmy ਵਿੱਚ ਆਟੋਮੈਟਿਕ ਪੇਅਰਿੰਗ ਵਿੱਚ ਹੱਥੋਂ ਕੋਡ ਦਾਖਲ ਕਰਨ ਦੀ ਲੋੜ ਨਹੀਂ ਹੁੰਦੀ: ਡਿਵਾਈਸ ਇੱਕ-ਦੂਜੇ ਨੂੰ ਲੱਭ ਲੈਂਦੇ ਹਨ ਅਤੇ ਕੁੰਜੀ ਅਦਲਾ-ਬਦਲੀ ਲਈ ਉਹੀ ਸਾਂਝਾ ਸਥਾਨ ਲੱਭ ਲੈਂਦੇ ਹਨ। ਜੇ ਇਹ ਨਾ ਹੋਵੇ, ਤਾਂ ਤੁਸੀਂ 4-ਅੱਖਰਾਂ ਵਾਲਾ ਕੋਡ ਟਾਈਪ ਕਰ ਸਕਦੇ ਹੋ। ਪੇਅਰਿੰਗ ਕੋਡ ਕਦੇ ਵੀ ਡਿਵਾਈਸ ਤੋਂ ਬਾਹਰ ਨਹੀਂ ਜਾਂਦਾ; Firestore ਨੂੰ ਦਸਤਾਵੇਜ਼ ਪਛਾਣਕਰਤਾ ਵਜੋਂ ਸਿਰਫ਼ ਇੱਕ ਕ੍ਰਿਪਟੋਗ੍ਰਾਫਿਕ ਹੈਸ਼ (SHA-256) ਦਿਖਾਈ ਦਿੰਦਾ ਹੈ।

ਗੁਮਨਾਮ ਪ੍ਰਮਾਣਿਕਤਾ

Timmy Firebase Anonymous Authentication ਵਰਤਦਾ ਹੈ। ਪਹਿਲੀ ਵਾਰ ਐਪ ਚਲਾਉਣ 'ਤੇ ਹਰ ਡਿਵਾਈਸ ਨੂੰ ਇੱਕ ਅਸਥਾਈ, ਗੁਮਨਾਮ ID ਮਿਲਦੀ ਹੈ। ਕੋਈ ਖਾਤਾ, ਈਮੇਲ ਪਤਾ ਜਾਂ ਪਾਸਵਰਡ ਨਹੀਂ ਹੈ। ਇਹ ID ਸਿਰਫ਼ Firestore ਦੇ ਨਿਯਮ ਲਾਗੂ ਕਰਨ ਲਈ ਹੈ: ਸਿਰਫ਼ ਪ੍ਰਮਾਣਿਤ ਡਿਵਾਈਸ ਹੀ ਸੈਸ਼ਨ ਡਾਟਾ ਪੜ੍ਹ ਜਾਂ ਲਿਖ ਸਕਦੇ ਹਨ।

ਆਰਕੀਟੈਕਚਰ: ਕੌਣ ਭੇਜਦਾ ਹੈ, ਕੌਣ ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ

Timmy ਦੇ ਦੋ ਮੋਡ ਹਨ:

ਪੁਸ਼-ਟੂ-ਟਾਕ ਅਤੇ ਕੈਮਰਾ ਚਾਲੂ/ਬੰਦ ਵਰਗੇ ਕੰਟਰੋਲ ਇੱਕ DataChannel, ਯਾਨੀ ਇੱਕ ਹੋਰ WebRTC ਚੈਨਲ, ਵਰਤਦੇ ਹਨ ਜੋ ਡਿਵਾਈਸਾਂ ਵਿਚਕਾਰ ਛੋਟੇ ਇਨਕ੍ਰਿਪਟ ਕੀਤੇ ਸੁਨੇਹੇ ਸਿੱਧੇ ਭੇਜਦਾ ਹੈ।

Flutter ਕਿਉਂ?

Flutter ਕਈ ਪਲੇਟਫਾਰਮਾਂ ਲਈ ਐਪਾਂ ਬਣਾਉਣ ਦਾ Google ਦਾ ਫਰੇਮਵਰਕ ਹੈ। Timmy ਲਈ ਇਸ ਦਾ ਮਤਲਬ ਹੈ ਕਿ ਮੈਂ ਕਾਫ਼ੀ ਲੌਜਿਕ ਇੱਕ ਵਾਰ ਲਿਖ ਕੇ Android ਅਤੇ iOS ਦੋਵੇਂ 'ਤੇ ਵਰਤ ਸਕਦਾ ਹਾਂ। Timmy Android 'ਤੇ ਉਪਲਬਧ ਹੈ ਅਤੇ iOS ਵਰਜਨ ਜਲਦੀ ਜਾਰੀ ਹੋਣ ਵਾਲਾ ਹੈ। ਘੱਟ ਦੁਹਰਾਇਆ ਕੋਡ ਮਤਲਬ ਘੱਟ ਥਾਵਾਂ ਜਿੱਥੇ ਬੱਗ ਆ ਸਕਦੇ ਹਨ।

ਸੰਖੇਪ

ਤਕਨੀਕੀ ਨਿਯਮ ਸਾਦਾ ਹੈ: Timmy ਨੂੰ ਸਿਰਫ਼ ਉਹੀ ਡਾਟਾ ਵਰਤਣਾ ਚਾਹੀਦਾ ਹੈ ਜਿਸ ਦੀ ਇਸਨੂੰ ਸੱਚਮੁੱਚ ਲੋੜ ਹੈ। WebRTC ਮੀਡੀਆ ਦੀ ਸੁਰੱਖਿਆ ਕਰਦਾ ਹੈ, Firebase ਕਨੈਕਸ਼ਨ ਸੈਟਅੱਪ ਦਾ ਤਾਲਮੇਲ ਕਰਦਾ ਹੈ, TURN ਨੂੰ ਸਿਰਫ਼ ਇਨਕ੍ਰਿਪਟ ਕੀਤੇ ਪੈਕੇਟ ਦਿਖਦੇ ਹਨ ਅਤੇ Nearby Connections ਪੇਅਰਿੰਗ ਦੀ ਝੰਜਟ ਘਟਾਉਂਦਾ ਹੈ।

ਚੰਗੀ ਤਕਨਾਲੋਜੀ ਰੋਜ਼ਾਨਾ ਦੀ ਜ਼ਿੰਦਗੀ ਵਿੱਚ ਥੋੜ੍ਹੀ ਅਦਿੱਖ ਹੋ ਜਾਂਦੀ ਹੈ। ਇਹ ਬੱਚੇ ਦੇ ਕਮਰੇ ਨੂੰ ਕਲਾਊਡ ਪ੍ਰੋਜੈਕਟ ਬਣਾਏ ਬਿਨਾਂ ਕੰਮ ਕਰਦੀ ਹੈ।


ਹੋਰ ਲੇਖ