Baby Monitor Timmy ಆಡಿಯೋ ಮತ್ತು ವೀಡಿಯೊ ಕಳುಹಿಸುವ ಮೊದಲು, ಎರಡು ಸಾಧನಗಳು ಪರಸ್ಪರವನ್ನು ಹುಡುಕಿ ನಂಬಬೇಕಾಗುತ್ತದೆ. ಈ ಜೋಡಣೆ ಹಂತವು ಇಡೀ ಪ್ರಕ್ರಿಯೆಯಲ್ಲೇ ಅತ್ಯಂತ ಪ್ರಮುಖ ಕ್ಷಣವಾಗಿದೆ. ಇಲ್ಲಿ Timmy ಹೇಗೆ ಜೋಡಿಸುತ್ತದೆ, ಅದರ ಹಿಂದೆ ಯಾವ ಕ್ರಿಪ್ಟೋಗ್ರಫಿ ಇದೆ ಮತ್ತು ಹತ್ತಿರದ ದಾಳಿಕೋರನು ಗಮನಕ್ಕೆ ಬಾರದೆ ಸಂಪರ್ಕವನ್ನು ಏಕೆ ವಶಪಡಿಸಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ ಎಂಬುದನ್ನು ವಿವರಿಸುತ್ತೇನೆ.
ಸಮಸ್ಯೆ: ನನ್ನ ಸಾಧನವು ಅದು ಯಾರೊಂದಿಗೆ ಮಾತನಾಡುತ್ತಿದೆ ಎಂಬುದನ್ನು ಹೇಗೆ ತಿಳಿಯುತ್ತದೆ?
ಎರಡು ಸಾಧನಗಳು ಮೊದಲ ಬಾರಿ ಸಂಪರ್ಕಿಸಿದಾಗ, ಮುಖ್ಯ ಪ್ರಶ್ನೆ ಇದು: ಸಾಧನ A ನಿಜವಾಗಿಯೂ ಸಾಧನ B ಜೊತೆಯೇ ಮಾತನಾಡುತ್ತಿದೆಯೇ, ಅಥವಾ ಮಧ್ಯದಲ್ಲಿ ಯಾರಾದರೂ ಇದ್ದಾರೆಯೇ? ಕ್ರಿಪ್ಟೋಗ್ರಫಿಯಲ್ಲಿ ಇದನ್ನು ಮ್ಯಾನ್-ಇನ್-ದಿ-ಮಿಡಲ್ ದಾಳಿ (MITM) ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ.
Timmy ಇದನ್ನು Elliptic Curve Diffie-Hellman (ECDH) ಕೀ ವಿನಿಮಯ Firebase ಮೂಲಕ ಮಾಡಿ, ಜೊತೆಗೆ ಬಳಕೆದಾರರ ದೃಶ್ಯ ಪರಿಶೀಲನೆಯ ಮೂಲಕ ಪರಿಹರಿಸುತ್ತದೆ..
ಕೆಳಗಿನ ಚಿತ್ರಣವು ಸಂಪೂರ್ಣ ಜೋಡಣೆ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಒಮ್ಮೆಲೇ ತೋರಿಸುತ್ತದೆ:
sequenceDiagram
autonumber
participant A as 📱 Device A
participant F as ☁️ Firebase
participant B as 📱 Device B
Note over A,B: Phase 1 — Discovery
A->>A: Generate ECDH key pair (P-256)
B->>B: Generate ECDH key pair (P-256)
alt Auto-Pairing (Nearby BLE)
A-->>B: BLE broadcast: SBM:XKQM
B-->>A: BLE broadcast: SBM:R7NP
Note over A,B: Lower code wins → determines creator/joiner
else Manual Pairing
A->>A: Display 4-char code
Note right of A: User reads code
B->>B: User enters code
end
Note over A,B: Phase 2 — ECDH Key Exchange
A->>F: Write public key (PubA) to meeting doc
B->>F: Write public key (PubB) to meeting doc
F-->>B: Read PubA
F-->>A: Read PubB
Note over A,B: Phase 3 — Shared Secret
A->>A: sharedSecret = ECDH(privA, PubB)
B->>B: sharedSecret = ECDH(privB, PubA)
Note over A,B: Both compute identical 32-byte secret
A->>A: SAS = SHA-256("sas:" + sort(PubA,PubB) + secret) → 2-digit number
B->>B: SAS = SHA-256("sas:" + sort(PubA,PubB) + secret) → 2-digit number
Note over A,B: Phase 4 — Visual Verification
A->>A: Display SAS: 42
B->>B: Display SAS: 42
Note over A,B: 👤 User compares numbers on both screens
A->>A: User confirms ✓
B->>B: User confirms ✓
Note over A,B: Phase 5 — Key Derivation
A->>A: pairingKey = SHA-256("pair:" + secret)
B->>B: pairingKey = SHA-256("pair:" + secret)
A->>A: docKey = SHA-256("doc:" + pairingKey)
A->>A: encKey = SHA-256("enc:" + pairingKey)
Note over A,B: ✅ Paired — all future signaling encrypted with AES-256-GCM
ಸಂಪೂರ್ಣ ಜೋಡಣೆ ಪ್ರೋಟೋಕಾಲ್ ಕ್ರಮ — ಸಂಪಾದಿಸಬಹುದಾದ ಮೂಲ: docs/diagrams/pairing-sequence.mmd
ಹಂತ 1: ಪ್ರತಿ ಸಾಧನವು ಒಂದು ಕೀ ಜೋಡಿಯನ್ನು ರಚಿಸುತ್ತದೆ
ಜೋಡಣೆ ಪರದೆ ತೆರೆಯುವಾಗ, ಪ್ರತಿ ಸಾಧನವು ಒಂದು ತಾತ್ಕಾಲಿಕ ECDH ಕೀ ಜೋಡಿ ಯನ್ನು P-256 ಕರ್ವ್ನಲ್ಲಿ (secp256r1) ರಚಿಸುತ್ತದೆ:
- ಒಂದು ಖಾಸಗಿ ಕೀ — ಸಾಧನದಲ್ಲೇ ಮಾತ್ರ ಇರುತ್ತದೆ
- ಒಂದು ಸಾರ್ವಜನಿಕ ಕೀ — Firebase ಮೂಲಕ ವಿನಿಮಯವಾಗುತ್ತದೆ
ಕೀಗಳನ್ನು ಕ್ರಿಪ್ಟೋಗ್ರಾಫಿಯಾಗಿ ಸುರಕ್ಷಿತ ಯಾದೃಚ್ಛಿಕ ಸಂಖ್ಯೆ ಜನರೇಟರ್ ಬಳಸಿ (Random.secure())
ರಚಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಅವು ಈ ಒಂದೇ ಜೋಡಣೆ ಪ್ರಯತ್ನಕ್ಕೆ ಮಾತ್ರ ಮಾನ್ಯವಾಗಿರುತ್ತವೆ. ಪ್ರತಿ ಹೊಸ ಪ್ರಯತ್ನಕ್ಕೆ ಹೊಸ ಕೀಗಳನ್ನು
ರಚಿಸಲಾಗುತ್ತದೆ.
ಹಂತ 2: Firebase ಮೂಲಕ ಸಾರ್ವಜನಿಕ ಕೀಗಳ ವಿನಿಮಯ
ಎರಡು ಸಾಧನಗಳು ಪರಸ್ಪರವನ್ನು ಕಂಡುಕೊಳ್ಳಲು, Timmy ಒಂದು 4-ಅಕ್ಷರದ ಕೋಡ್ ಅನ್ನು ಭೇಟಿಯ ಬಿಂದುವಾಗಿ ಬಳಸುತ್ತದೆ. ಈ ಕೋಡ್ ಅನ್ನು Nearby Connections (Bluetooth Low Energy) ಮೂಲಕ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಕಂಡುಹಿಡಿಯಬಹುದು ಅಥವಾ ಕೈಯಾರೆ ನಮೂದಿಸಬಹುದು. ಇದಕ್ಕೆ ಯಾವುದೇ ಕ್ರಿಪ್ಟೋಗ್ರಾಫಿಕ್ ಮೌಲ್ಯವಿಲ್ಲ; ಇದು ಎರಡೂ ಸಾಧನಗಳು ಒಂದೇ Firebase Firestore ಡಾಕ್ಯುಮೆಂಟ್ ಅನ್ನು ಕಂಡುಕೊಳ್ಳಲು ಮಾತ್ರ ಸಹಾಯ ಮಾಡುತ್ತದೆ.
ಎರಡೂ ಸಾಧನಗಳಿಗೆ ಕೋಡ್ ತಿಳಿದ ಬಳಿಕ, ಪ್ರತಿಯೊಂದೂ ತನ್ನ ಸಾರ್ವಜನಿಕ ECDH ಕೀಯನ್ನು ಹಂಚಿಕೊಂಡ Firestore ಡಾಕ್ಯುಮೆಂಟ್ಗೆ ಬರೆಯುತ್ತದೆ. ನಂತರ ಪ್ರತಿ ಸಾಧನವು ಆ ಡಾಕ್ಯುಮೆಂಟ್ನಿಂದ ಇನ್ನೊಂದು ಸಾಧನದ ಸಾರ್ವಜನಿಕ ಕೀಯನ್ನು ಓದುತ್ತದೆ.
ಮುಖ್ಯವಾಗಿ: ಕೇವಲ ಸಾರ್ವಜನಿಕ ಕೀಯನ್ನೇ ಕಳುಹಿಸಲಾಗುತ್ತದೆ. ಖಾಸಗಿ ಕೀ ಎಂದಿಗೂ ಸಾಧನವನ್ನು ಬಿಟ್ಟು ಹೊರಹೋಗುವುದಿಲ್ಲ. Firebase ಟ್ರಾಫಿಕ್ ಗಮನಿಸುವ ಯಾರಿಗಾದರೂ ಸಾರ್ವಜನಿಕ ಕೀಗಳು ಕಾಣುತ್ತವೆ, ಆದರೆ ಅವುಗಳಿಂದ ಹಂಚಿಕೊಂಡ ರಹಸ್ಯವನ್ನು ಲೆಕ್ಕ ಹಾಕಲು ಸಾಧ್ಯವಿಲ್ಲ . ಇದು Elliptic Curve Discrete Logarithm Problem (ECDLP)ನ ಕಠಿಣತೆಯ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ.
ಹಂತ 3: ಹಂಚಿಕೊಂಡ ರಹಸ್ಯದ ಲೆಕ್ಕಾಚಾರ
ಎರಡೂ ಸಾಧನಗಳು ಪರಸ್ಪರದ ಸಾರ್ವಜನಿಕ ಕೀಯನ್ನು ಕಂಡುಕೊಂಡ ಬಳಿಕ, ಅವು ಸ್ವತಂತ್ರವಾಗಿ ಒಂದೇ ಹಂಚಿಕೊಂಡ ರಹಸ್ಯ:
sharedSecret = ECDH(myPrivateKey, remotePublicKey)
→ 32 bytes (identical on both devices)
ವನ್ನು ಲೆಕ್ಕ ಹಾಕುತ್ತವೆ. ಎಲಿಪ್ಟಿಕ್ ಕರ್ವ್ಗಳ ಗಣಿತವು, ಪ್ರತಿ ಸಾಧನಕ್ಕೆ ತನ್ನ ಖಾಸಗಿ ಕೀ ಮತ್ತು ಇನ್ನೊಂದರ ಸಾರ್ವಜನಿಕ ಕೀ ಮಾತ್ರ ತಿಳಿದಿದ್ದರೂ, ಎರಡೂ ಲೆಕ್ಕಾಚಾರಗಳು ಒಂದೇ ಫಲಿತಾಂಶ ನೀಡುತ್ತವೆ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ.
ಹಂತ 4: ಪರಿಶೀಲನಾ ಸಂಖ್ಯೆ (SAS)
ಹಂಚಿಕೊಂಡ ರಹಸ್ಯದಿಂದ ಒಂದು Short Authentication String (SAS) ಅನ್ನು ಪಡೆಯಲಾಗುತ್ತದೆ — ಎರಡೂ ಸಾಧನಗಳಲ್ಲಿ ತೋರಿಸುವ ಎರಡು-ಅಂಕಿಯ ಸಂಖ್ಯೆ:
hash = SHA-256("sas:" + sort(pubkeyA, pubkeyB) + sharedSecret)
number = (hash[0] × 256 + hash[1]) mod 100 → 00 to 99
ಎರಡೂ ಸಾಧನಗಳು ಒಂದೇ ಸಂಖ್ಯೆಯನ್ನು ತೋರಿಸುತ್ತವೆ — ಉದಾಹರಣೆಗೆ, 42. ಬಳಕೆದಾರರು ಎರಡೂ ಪರದೆಗಳಲ್ಲಿನ ಸಂಖ್ಯೆಗಳು ಹೊಂದಿಕೆಯಾಗುತ್ತಿವೆಯೇ ಎಂದು ನೋಡಿ, ನಂತರ ಪ್ರತಿ ಸಾಧನದಲ್ಲೂ ಪ್ರತ್ಯೇಕವಾಗಿ ದೃಢೀಕರಿಸುತ್ತಾರೆ.
ದಾಳಿಕೋರನು ಇದನ್ನು ಏಕೆ ನಕಲಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ
ಮ್ಯಾನ್-ಇನ್-ದಿ-ಮಿಡಲ್ ದಾಳಿಕೋರನು Firebaseನಲ್ಲಿ ನಡೆಯುವ ಕೀ ವಿನಿಮಯವನ್ನು ತಡೆಹಿಡಿಯಬೇಕಾಗುತ್ತದೆ. ನಿರ್ದಿಷ್ಟವಾಗಿ, ಅವರು ಹೀಗೆ ಮಾಡಬೇಕಾಗುತ್ತದೆ:
- Firestore ಡಾಕ್ಯುಮೆಂಟ್ನಲ್ಲಿ ಸಂಗ್ರಹವಾಗಿರುವ ನಿಜವಾದ ಸಾರ್ವಜನಿಕ ಕೀಗಳನ್ನು ತಮ್ಮದೇ ಕೀಗಳಿಂದ ಬದಲಾಯಿಸುವುದು
- ಪ್ರತಿ ಸಾಧನದೊಂದಿಗೆ ಪ್ರತ್ಯೇಕ ಹಂಚಿಕೊಂಡ ರಹಸ್ಯಗಳನ್ನು ಸ್ಥಾಪಿಸುವುದು
sequenceDiagram
autonumber
participant A as 📱 Device A
participant M as 🕵️ Attacker (MITM)
participant B as 📱 Device B
Note over A,B: Attacker intercepts the Firebase key exchange
A->>A: Generate key pair (privA, PubA)
B->>B: Generate key pair (privB, PubB)
M->>M: Generate TWO key pairs (privM1, PubM1) + (privM2, PubM2)
A->>M: Write PubA to Firebase
M->>M: Replace PubA with PubM1
M->>B: B reads PubM1 (thinks it is PubA)
B->>M: Write PubB to Firebase
M->>M: Replace PubB with PubM2
M->>A: A reads PubM2 (thinks it is PubB)
Note over A,B: Each device computes a DIFFERENT shared secret
A->>A: secret_A = ECDH(privA, PubM2)
M->>M: secret_A = ECDH(privM2, PubA)
M->>M: secret_B = ECDH(privM1, PubB)
B->>B: secret_B = ECDH(privB, PubM1)
Note over A,M: secret_A ≠ secret_B
A->>A: SAS_A = SHA-256("sas:" + sort(PubA,PubM2) + secret_A) → 73
B->>B: SAS_B = SHA-256("sas:" + sort(PubM1,PubB) + secret_B) → 18
rect rgb(255, 230, 230)
Note over A,B: ❌ User sees DIFFERENT numbers!
A->>A: Display: 73
B->>B: Display: 18
Note over A,B: 👤 User notices mismatch → cancels pairing
end
Note over A,B: 🛡️ Attack detected — MITM cannot force SAS match (P = 1/100)
SAS ಅಸಾಮರಸ್ಯದ ಮೂಲಕ ಮ್ಯಾನ್-ಇನ್-ದಿ-ಮಿಡಲ್ ಪತ್ತೆ — ಸಂಪಾದಿಸಬಹುದಾದ ಮೂಲ: docs/diagrams/mitm-detection.mmd
ಈ ಸಂದರ್ಭದಲ್ಲಿ, ದಾಳಿಕೋರನು ಸಾಧನ A ಜೊತೆಗೆ ಒಂದು ಹಂಚಿಕೊಂಡ ರಹಸ್ಯವನ್ನು S_A ಲೆಕ್ಕ ಹಾಕುತ್ತಾನೆ ಮತ್ತು ಸಾಧನ B ಜೊತೆಗೆ
ಬೇರೆ ಹಂಚಿಕೊಂಡ ರಹಸ್ಯವನ್ನು S_B ಲೆಕ್ಕ ಹಾಕುತ್ತಾನೆ. ಏಕೆಂದರೆ S_A ≠ S_B,
ಸಾಧನಗಳು ಬೇರೆ ಬೇರೆ ಪರಿಶೀಲನಾ ಸಂಖ್ಯೆಗಳನ್ನು.
ಲೆಕ್ಕ ಹಾಕುತ್ತವೆ. ದಾಳಿಕೋರನು ಸಂಖ್ಯೆಗಳನ್ನು ಹೊಂದಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ, ಏಕೆಂದರೆ:
- ಅವರಿಗೆ ಸಾಧನಗಳ ಖಾಸಗಿ ಕೀಗಳು ತಿಳಿದಿಲ್ಲ
- SHA-256 ಅನ್ನು ಹಿಮ್ಮುಖಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ
- ಯಾದೃಚ್ಛಿಕವಾಗಿ ಹೊಂದಿಕೆಯಾಗುವ ಸಾಧ್ಯತೆ ಕೇವಲ 100ರಲ್ಲಿ 1
ಬಳಕೆದಾರರಿಗೆ ಪರದೆಗಳಲ್ಲಿ ಬೇರೆ ಸಂಖ್ಯೆ ಕಾಣುತ್ತದೆ ಮತ್ತು ಅವರು ಜೋಡಣೆಯನ್ನು ರದ್ದುಗೊಳಿಸುತ್ತಾರೆ. ಆ ಕ್ಷಣದಲ್ಲಿ ದಾಳಿ ಗೋಚರವಾಗುತ್ತದೆ.
ಹಂತ 5: ಜೋಡಣೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸುವುದು
ಬಳಕೆದಾರರು ಎರಡೂ ಸಾಧನಗಳಲ್ಲಿ ಪರಿಶೀಲನೆಯನ್ನು ದೃಢೀಕರಿಸಿದ ನಂತರವೇ ಜೋಡಣೆ ಪೂರ್ಣಗೊಳ್ಳುತ್ತದೆ:
- ಒಂದು 64-ಅಕ್ಷರದ ಜೋಡಣೆ ಕೀ (256 ಬಿಟ್ಗಳು) ಯನ್ನು ಹಂಚಿಕೊಂಡ ರಹಸ್ಯದಿಂದ ಪಡೆಯಲಾಗುತ್ತದೆ:
SHA-256("pair:" + sharedSecret) → pairingKey - ಡಾಕ್ಯುಮೆಂಟ್ ಕೀಯನ್ನು ಹೀಗೆ ಪಡೆಯಲಾಗುತ್ತದೆ
SHA-256("doc:" + pairingKey)ಮತ್ತು ಅದು Firestore ಡಾಕ್ಯುಮೆಂಟ್ ಕೀಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ - ಎನ್ಕ್ರಿಪ್ಷನ್ ಕೀಯನ್ನು ಹೀಗೆ ಪಡೆಯಲಾಗುತ್ತದೆ
SHA-256("enc:" + pairingKey)ಮತ್ತು ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಿದ ಸಿಗ್ನಲಿಂಗ್ಗಾಗಿ AES-256-GCM ಕೀಯನ್ನು ಒದಗಿಸುತ್ತದೆ - ಎರಡೂ ಸಾಧನಗಳು ಒಂದೇ ಜೋಡಣೆ ಕೀಯನ್ನು ಸಂಗ್ರಹಿಸಿ ಮೋಡ್ ಆಯ್ಕೆಗೆ ಸಾಗುತ್ತವೆ
ಈ ಹಂತದಿಂದ, ಮುಂದಿನ ಎಲ್ಲ ಸಂಪರ್ಕ ಪ್ರಯತ್ನಗಳು (Firestore ಸಿಗ್ನಲಿಂಗ್, WebRTC ಸೆಟಪ್) ಹಂಚಿಕೊಂಡ AES-256-GCM ಕೀಯಿಂದ ಎನ್ಕ್ರಿಪ್ಟ್ ಆಗಿರುತ್ತವೆ. ಜೋಡಣೆ ಕೀಯನ್ನು ಎಂದಿಗೂ ಬ್ಯಾಕೆಂಡ್ಗೆ ಕಳುಹಿಸಲಾಗುವುದಿಲ್ಲ; ಅದರ SHA-256 ಹ್ಯಾಶ್ ಅನ್ನು ಮಾತ್ರ ಡಾಕ್ಯುಮೆಂಟ್ ಗುರುತಿನ ಚಿಹ್ನೆಯಾಗಿ ಬಳಸಲಾಗುತ್ತದೆ.
ಸಿಸ್ಟಂ ಆರ್ಕಿಟೆಕ್ಚರ್
ಕೆಳಗಿನ ಚಿತ್ರಣವು ಜೋಡಣೆ ಮತ್ತು ಸಂವಹನದಲ್ಲಿ ಒಳಗೊಂಡಿರುವ ಘಟಕಗಳನ್ನು ತೋರಿಸುತ್ತದೆ:
flowchart TB
BABY["📱 Baby Phone
Baby Mode"]
PARENT["📱 Parent Phone
Parent Mode"]
BABY <==>|"🔒 WebRTC Peer-to-Peer · DTLS-SRTP
Audio · Video · DataChannel"| PARENT
BABY -.-|"🔵 Bluetooth LE · Nearby
Auto-Discovery"| PARENT
subgraph FIREBASE["☁️ Firebase (Google Cloud)"]
direction LR
AUTH["🪪 Anonymous
Authentication"]
FS["📄 Firestore
Pairing + Signaling"]
CF["⚡ Cloud Functions
getTurnCredentials"]
end
BABY <-->|"🔐 AES-256-GCM encrypted
SDP · ICE · ECDH keys"| FS
FS <-->|"🔐 AES-256-GCM encrypted
SDP · ICE · ECDH keys"| PARENT
BABY -.->|Token| AUTH
PARENT -.->|Token| AUTH
STUN["📡 STUN server
stun.cloudflare.com:3478"]
TURN["🔄 TURN relay
local or Cloudflare"]
BABY & PARENT -->|Short-lived credentials| CF
CF -->|local first, Cloudflare fallback| TURN
BABY & PARENT -.->|NAT Traversal| STUN
BABY -.->|"Relay Fallback"| TURN
TURN -.->|"Relay Fallback"| PARENT
style BABY fill:#FBF6F0,stroke:#B5734A,stroke-width:2px
style PARENT fill:#FBF6F0,stroke:#B5734A,stroke-width:2px
style FIREBASE fill:#fff5f5,stroke:#E9B44C,stroke-width:2px
style AUTH fill:#E9B44C,stroke:#2B2D42
style FS fill:#E9B44C,stroke:#2B2D42
style CF fill:#E9B44C,stroke:#2B2D42
style STUN fill:#F6E3D2,stroke:#B5734A
style TURN fill:#7BC47F,stroke:#2B2D42
ಸಿಸ್ಟಂ ಆರ್ಕಿಟೆಕ್ಚರ್ ಅವಲೋಕನ — ಸಂಪಾದಿಸಬಹುದಾದ ಮೂಲ: docs/diagrams/pairing-architecture.mmd
ಸಂವಹನ ಮಾರ್ಗಗಳ ವಿವರ:
- WebRTC ಪಿಯರ್-ಟು-ಪಿಯರ್ (ದಪ್ಪ ರೇಖೆ): ಆಡಿಯೋ, ವೀಡಿಯೊ ಮತ್ತು DataChannel ನೇರವಾಗಿ ಸಾಧನಗಳ ನಡುವೆ ಹರಿಯುತ್ತವೆ — DTLS-SRTP ಮೂಲಕ ಎನ್ಕ್ರಿಪ್ಟ್ ಆಗಿರುತ್ತವೆ. ಯಾವ ಸರ್ವರ್ಗೂ ಈ ಡೇಟಾ ಕಾಣುವುದಿಲ್ಲ.
- Firebase Firestore (ಘನ ರೇಖೆ): ಜೋಡಣೆ ಡೇಟಾ (ECDH ಕೀಗಳು) ಮತ್ತು ಸಿಗ್ನಲಿಂಗ್ (SDP/ICE) Firestore ಮೂಲಕ ಸಾಗುತ್ತವೆ — AES-256-GCM ಬಳಸಿ ಎಂಡ್-ಟು-ಎಂಡ್ ಎನ್ಕ್ರಿಪ್ಟ್ ಆಗಿರುತ್ತವೆ. Firebase ಡೇಟಾವನ್ನು ಡೀಕ್ರಿಪ್ಟ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ.
- STUN ಸರ್ವರ್: ನೇರ ಪಿಯರ್-ಟು-ಪಿಯರ್ ಸಂಪರ್ಕವನ್ನು ಸ್ಥಾಪಿಸಲು ಎರಡೂ ಸಾಧನಗಳು ತಮ್ಮ ಸಾರ್ವಜನಿಕ IP ವಿಳಾಸವನ್ನು ಕಂಡುಹಿಡಿಯುತ್ತವೆ.
- TURN ರಿಲೇ: ನೇರ ಸಂಪರ್ಕ ಸಾಧ್ಯವಾಗದಿದ್ದರೆ (ಉದಾ., ಮೊಬೈಲ್ ಡೇಟಾದಲ್ಲಿ), ಆಯ್ಕೆ ಮಾಡಿದ ಸ್ಥಳೀಯ ಅಥವಾ Cloudflare TURN ಸರ್ವರ್ ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಿದ ಮೀಡಿಯಾವನ್ನು ರಿಲೇ ಮಾಡುತ್ತದೆ. 24 ಗಂಟೆಗಳ ಅವಧಿಯ ಅಲ್ಪಾವಧಿ ಕ್ರೆಡೆನ್ಷಿಯಲ್ಗಳನ್ನು Firebase Cloud Functions ಮೂಲಕ ಪಡೆಯಲಾಗುತ್ತದೆ.
- Bluetooth LE (ಚುಕ್ಕೆ ರೇಖೆ): Nearby Connections ಹತ್ತಿರದ ಸಾಧನಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಕಂಡುಹಿಡಿಯುತ್ತದೆ — ಭೇಟಿಯ ಕೋಡ್ ಮಾತ್ರ ಕಳುಹಿಸಲಾಗುತ್ತದೆ, ಕೀ ಸಾಮಗ್ರಿ ಇಲ್ಲ.
ಪರ್ಯಾಯ: ಕೋಡ್ ಅನ್ನು ಕೈಯಾರೆ ನಮೂದಿಸುವುದು
Bluetooth ಲಭ್ಯವಿಲ್ಲದಿದ್ದರೆ (ಉದಾ., ಹಳೆಯ ಸಾಧನಗಳಲ್ಲಿ), 4-ಅಕ್ಷರದ ಕೋಡ್ ಅನ್ನು ಕೈಯಾರೆ ಟೈಪ್ ಮಾಡಬಹುದು. ಕೈಯಾರೆ ನಮೂದಿಸುವುದೂ ಅದೇ ECDH ಕೀ ವಿನಿಮಯ ಮತ್ತು ಅದೇ SAS ಪರಿಶೀಲನೆ ಯನ್ನೇ ಸ್ವಯಂಚಾಲಿತ ಜೋಡಣೆಯಂತೆ ಬಳಸುತ್ತದೆ. ಒಂದೇ ವ್ಯತ್ಯಾಸವೆಂದರೆ BLE ಮೂಲಕ ಕಂಡುಹಿಡಿಯುವ ಬದಲು ಬಳಕೆದಾರರು ಕೋಡ್ ಓದಿ ಟೈಪ್ ಮಾಡುತ್ತಾರೆ.
ಎರಡೂ ಸಂದರ್ಭಗಳಲ್ಲೂ ECDH ಕೀ ವಿನಿಮಯ Firebase ಮೂಲಕ ನಡೆಯುವುದರಿಂದ, ಸುರಕ್ಷತೆ ಒಂದೇ ಆಗಿರುತ್ತದೆ. 4-ಅಕ್ಷರದ ಕೋಡ್ ಕೇವಲ ಭೇಟಿಯ ಬಿಂದು; ನಿಜವಾದ ಎನ್ಕ್ರಿಪ್ಷನ್ ECDHಯಿಂದ ಪಡೆದ 256-ಬಿಟ್ ಕೀ ಆಧಾರಿತವಾಗಿದೆ.
ಸಾರಾಂಶ
| ಸುರಕ್ಷತಾ ವಿಧಾನ | ಇದರಿಂದ ರಕ್ಷಣೆ |
|---|---|
| ECDH ಕೀ ವಿನಿಮಯ (P-256) | ಕೀ ವಿನಿಮಯ ಟ್ರಾಫಿಕ್ ಮೇಲೆ ಕದ್ದಾಲಿಕೆ |
| ತಾತ್ಕಾಲಿಕ ಕೀ ಜೋಡಿಗಳು | ಫಾರ್ವರ್ಡ್ ಸೀಕ್ರಸಿ — ಹಿಂದಿನ ಜೋಡಣೆಗಳು ಸುರಕ್ಷಿತವಾಗಿಯೇ ಇರುತ್ತವೆ |
| ದೃಶ್ಯ ಪರಿಶೀಲನಾ ಸಂಖ್ಯೆ (SAS) | ಕೀ ವಿನಿಮಯದ ಸಮಯದ ಮ್ಯಾನ್-ಇನ್-ದಿ-ಮಿಡಲ್ (MITM) |
| ಡಾಕ್ಯುಮೆಂಟ್ ಕೀಯಾಗಿ SHA-256 ಹ್ಯಾಶ್ | Firestoreನಿಂದ ಕೋಡ್ ಹೊರತೆಗೆದುಕೊಳ್ಳುವುದು |
| AES-256-GCM ಎನ್ಕ್ರಿಪ್ಷನ್ | ಸಿಗ್ನಲಿಂಗ್ ಡೇಟಾ ಮೇಲೆ ಕದ್ದಾಲಿಕೆ |
| ಎರಡೂ ಬದಿಯ ದೃಢೀಕರಣ | ಬಳಕೆದಾರರ ಅರಿವಿಲ್ಲದೆ ಒಂದೇ ಬದಿಯಿಂದ ಜೋಡಣೆ |
| DTLS-SRTP (WebRTC) | ಆಡಿಯೋ/ವೀಡಿಯೊ ಮೇಲೆ ಕದ್ದಾಲಿಕೆ |
ಈ ಪದರಗಳು ಒಂದಕ್ಕೊಂದು ಹೊಂದಿಕೆಯಾಗುತ್ತವೆ: ECDH ಕೀ ವಿನಿಮಯವನ್ನು ರಕ್ಷಿಸುತ್ತದೆ, ಪರಿಶೀಲನಾ ಸಂಖ್ಯೆ MITMನಿಂದ ರಕ್ಷಿಸುತ್ತದೆ, AES-256-GCM ಸಿಗ್ನಲಿಂಗ್ ಅನ್ನು ರಕ್ಷಿಸುತ್ತದೆ ಮತ್ತು WebRTC ಮೀಡಿಯಾವನ್ನು ರಕ್ಷಿಸುತ್ತದೆ. ಸಾಧನಗಳಿಗಾಗಲಿ ಪೋಷಕರಿಗಾಗಲಿ ತಿಳಿಯದಂತೆ ದಾಳಿಕೋರನು ಈ ಸರಪಳಿಯನ್ನು ಹಲವು ಕಡೆ ಮುರಿಯಬೇಕಾಗುತ್ತದೆ.