turn rest server api
play

TURN REST Server API draft-uberti-behave-turn-rest-00 Justin - PowerPoint PPT Presentation

TURN REST Server API draft-uberti-behave-turn-rest-00 Justin Uberti, Google 1 Typical TURN Auth: Config TURN Password Client Server DB WebRTC JavaScript code: var iceServer = { uris: ["turn:turn.bar.com:3478?proto=udp"],


  1. TURN REST Server API draft-uberti-behave-turn-rest-00 Justin Uberti, Google 1

  2. Typical TURN Auth: Config TURN Password Client Server DB WebRTC JavaScript code: var iceServer = { uris: ["turn:turn.bar.com:3478?proto=udp"], username: foo credential: mysecret }; var config = { iceServers: [iceServer] }; var pc = new PeerConnection(config, null); 2

  3. Typical TURN Auth: TURN Request TURN Password Client Server DB ALLOCATE REQUEST 3

  4. Typical TURN Auth: TURN Error Response TURN Password Client Server DB ALLOCATE ERROR RESPONSE ERROR-CODE: 401 (Unauthorized) REALM: bar.com NONCE: abcd1234 4

  5. Typical TURN Auth: TURN Request (2) TURN Password Client Server DB ALLOCATE REQUEST USERNAME: foo REALM: bar.com NONCE: abcd1234 MESSAGE-INTEGRITY: HMAC(M, MD5( "foo:bar.com:mysecret" ) ) 5

  6. Typical TURN Auth: HA1 Request TURN Password Client Server DB Give me HA1: user: foo 6

  7. Typical TURN Auth: HA1 Response TURN Password Client Server DB Here you go: ha1: MD5("foo:bar.com: mysecret") 7

  8. Typical TURN Auth: Verify TURN Password Client Server DB MESSAGE-INTEGRITY verify against HMAC(M, HA1) 8

  9. Typical TURN Auth: TURN Response TURN Password Client Server DB ALLOCATE RESPONSE XOR-RELAYED-ADDRESS=<ip> MESSAGE-INTEGRITY: HMAC(M, MD5( "foo:bar.com:mysecret" ) ) 9

  10. Inherent Problems The problems with the TURN long-term auth exchange are documented in draft-reddy-behave-turn-auth ● TURN password must be kept secret (hard for WebRTC apps) ● TURN password vulnerable to offline dictionary attacks on MESSAGE-INTEGRITY ● TURN server must consult a password database to verify MESSAGE-INTEGRITY ● TURN username value is passed in the clear, can be used for traffic analysis 10

  11. Proposed Solution Client makes a HTTP request to a web service to get ephemeral (time-limited) credentials: ● No long-term credentials to keep secret; even if discovered, credential usefulness is limited ● Username contains no externally-identifying information ● Password is machine-generated, to prevent dictionary attacks ● Response also includes location of TURN server, avoiding complex SRV lookups 11

  12. Credential Verification While the TURN server could verify credentials against the HTTP server, the draft suggests a stateless design that requires no backchannel. ● Username is credential expiration timestamp + any desired application data ● Password is HMAC(username, SS) , where SS is a shared secret key between HTTP and TURN servers ● To get HA1, TURN server simply does MD5(<username>:<realm>:<hmac>) 12

  13. Stateless TURN Auth: HTTP Cred Request HTTP Client Server GET /?service=turn 13

  14. Stateless TURN Auth: HTTP Cred Response HTTP Client Server 200 OK Content-Type: application/json { username: "1375043478:abcd1234", password: <HMAC("1375043487:abcd1234", SS)> ttl: 86400, uris: [ "turn:turn.bar.com:3478?proto=udp", "turn:turn.bar.com:3478?proto=tcp", "turns:turn.bar.com:443?proto=tcp" ] } 14

  15. Stateless TURN Auth: TURN Request (2) TURN Client Server ALLOCATE REQUEST USERNAME: 1375043478:abcd1234 REALM: bar.com NONCE: abcd1234 MESSAGE-INTEGRITY: HMAC(M, MD5( "1375043478:abcd1234:bar.com:<hmac-password>" ) ) 15

  16. Stateless TURN Auth: Verify TURN Client Server 1. Parse timestamp from USERNAME (1375043478) 2. Check that timestamp is in the future 3. Compute password: HMAC(1375043478:abcd1234, SS) 4. Compute HA1: MD5(1375043478:abcd1234:bar.com: <hmac-password>) 5. MESSAGE-INTEGRITY verify against HMAC(M, HA1) 6. If it's cool, return success response 7. No communication with HTTP server needed! 16

  17. Why not Short Term Credentials? ● STUN defines a short-term credential mechanism, but this mechanism doesn't support nonces, opening the door for trivial replay attacks 17

  18. Questions ● Adopt as WG draft? ● Propose generic HTTP mechanism + example stateless implementation, or focus exclusively on stateless design? 18

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend