Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Expose the ability to set DTLS ciphersuites in the API #1043

Closed
cohosh opened this issue Feb 21, 2020 · 4 comments
Closed

Expose the ability to set DTLS ciphersuites in the API #1043

cohosh opened this issue Feb 21, 2020 · 4 comments

Comments

Labels
None yet
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
2 participants
@cohosh
Copy link
Contributor

@cohosh cohosh commented Feb 21, 2020

Summary

Right now there is no ability to set the list of DTLS ciphersuites in the WebRTC API. This feature would allow users to the specify the list of ciphersuites in the creation of a DTLSTransport, perhaps as an argument to the NewDTLSTransport function.

Motivation

In our work for Snowflake, we desire the ability to choose ciphersuites that match the fingerprints of common WebRTC implementations. Fingerprinting of the ClientHello message by looking at the list of ciphersuites is a very effective technique by censors to detect circumvention tools like Snowflake.

For more information on TLS fingerprinting, see this recent paper by Frolov and Wustrow: https://sfrolov.io/papers/ndss19-frolov.pdf

uTLS is a Go project that modifies crypto/tls for use in circumvention tools and provides an example of the capabilities that would be great for us and other tools: https://sfrolov.io/projects/utls/

For an idea of the DTLS fingerprints of other WebRTC implementations, see our preliminary work on fingerprinting Snowflake (at the time when we were using the Chrome WebRTC library): https://trac.torproject.org/projects/tor/wiki/doc/Snowflake/Fingerprinting

Describe alternatives you've considered

I took a look at what's exposed in the API for the creation of DTLSTransport, and see no way to set the cipher suite. Another option for implementing this would be to specify it in the https://godoc.org/github.com/pion/webrtc#DTLSParameters.

Additional context

This would also help us out in a ticket on CPU profiling where we found that switching to GCM reduces the CPU load on our Snowflake proxies: https://trac.torproject.org/projects/tor/ticket/33211#comment:14

@Sean-Der
Copy link
Member

@Sean-Der Sean-Der commented Feb 21, 2020

@cohosh 👍 in support of this.

I brought up fingerprinting at the W3C, but didn't have much luck convincing people it matters. Does Tor have any membership in the W3C/people that can push for it there? I am all for adding it, I just don't want to diverge. Maybe I am being paranoid, but I know it has caused my frustration when other software adds 'extensions' to APIs/protocols they don't own.

For the time being the best thing to do is probably add a slice of allowed CipherSuites to SettingEngine I would be happy to merge that right away :)

@cohosh
Copy link
Contributor Author

@cohosh cohosh commented Feb 21, 2020

@cohosh +1 in support of this.

I brought up fingerprinting at the W3C, but didn't have much luck convincing people it matters. Does Tor have any membership in the W3C/people that can push for it there? I am all for adding it, I just don't want to diverge. Maybe I am being paranoid, but I know it has caused my frustration when other software adds 'extensions' to APIs/protocols they don't own.

Nice! That's a good question, I'll ask and try to get back to you next week.

For the time being the best thing to do is probably add a slice of allowed CipherSuites to SettingEngine I would be happy to merge that right away :)

I also filed pion/dtls#199 which would help with some more immediate issues we're having. I'm okay with this ticket being a longer-term goal. I didn't think about the SettingEngine. I'll take a look at that too, thanks!

@Sean-Der
Copy link
Member

@Sean-Der Sean-Der commented Jun 19, 2020

Hey @cohosh

I am resolving this since we don't have any concrete plans of working on it. Since we fixed CipherSuite selection it looks like this isn't that much of a problem.

If you disagree feel free to re-open! We keep a list of Big Ideas maybe this fits in there?

@Sean-Der Sean-Der closed this Jun 19, 2020
@cohosh
Copy link
Contributor Author

@cohosh cohosh commented Jun 20, 2020

Oh hey sorry I forgot about this. Yeah we have what we need at the Snowflake side :) Thanks for everything!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment