TLS-N: Non-repudiation over TLS
tls-n.org
tls-n.org
It's awesome this extension has been built, but it probably won't be supported by the majority of the web anytime soon. There aren't many incentives for content providers to implement this; you can probably count the ability to decentralize their infrastructure as a disincentive.
[1] https://crypto.stackexchange.com/questions/5455/does-a-trace...
If that's the case then it makes it especially useless for the smart contract oracle use case. If you're going to have to change the server anyway, you may as well make it offer very tiny signed messages instead. You could even use secp256k1 and make it directly compatible with Bitcoin.
I'm think what you're saying with "offer very tiny signed messages instead" is that you think TLS is the wrong protocol layer to solve this problem at. Maybe so, but I feel like (a) that charge could be levied at TLS itself too (why not just do encryption at the application layer?) and (b) putting it into TLS means that perhaps eventually most of the web would support it.
I also wanted to draw attention to the rather clever way they allow the client to selectively redact sensitive information without losing the non-repudation property by computing a Merkle tree over the content. It's pretty neat:
> Our design is based on content extraction signatures and thereby allows the generation of non-interactive proofs based on the signed evidence provided by the generator (typically the server). During proof creation the requester can hide certain parts of the original conversation, but this will clearly visible in the proof. All the non-hidden parts are verifiable, no matter how many parts are hidden. To achieve these properties we generate commitments and aggregate them in Merkle trees for every TLS record. This allows efficient hiding of information. The hiding granularity is determined by the chunk size, which is negotiated during the TLS handshake. A smaller chunk size provides more precision while a bigger chunk size is more computationally efficient.
It's a modification to NSS, which isn't widely used for TLS at the server side, where OpenSSL dominates.
1. "signing" the contents of a TLS session (proving that they happened)
2. putting this on the blockchain
I can kind of see the utility of (1), but why (2)?
Not to mention that this is nowhere near proving that an exchange thought that whatever instrument closed at whatever price -- anyone who compromises the key can forge it. We all know that TLS keys are totally secure, though, so it's no big deal.
LIBOR was easily manipulated because you could report one level and trade at another. I don't see this applying here, do you?
anyone who compromises the key can forge it
You can mitigate that risk, though, for example by requiring signed rates from many providers.
Plus, it's not clear that they have any way of knowing that a certain API call fetching the rates is going to a particular smart contract, so they'd have to lie to everybody in a way that is immediately apparent.
Could the decision be made as part of the choosing the cipher suite part of the handshake?
Indeed! https://tonyarcieri.com/on-the-dangers-of-a-blockchain-monoc...
Not everything needs a blockchain. We already have Certificate Transparency, which is the closest to a blockchain-esque solution that adds value to the TLS/PKI infrastructure.
Adding non-repudiation to TLS just seems like a privacy foot-cannon. Using a "blockchain" to solve this just smells fishy.
Well, not everything needs to be private! :) e.g. the contents of news articles and such — the "Trustworthy Web Archive" use case sounds great: nytimes.com serves an article with TLS-N, web.archive.org downloads it and stores the proof, you can access the archived copy and verify that it's authentic. Actually, Certificate Transparency might help with checking that the TLS certificate the proof was made with actually belonged to nytimes.com.
Putting this into TLS is absolutely a privacy foot-cannon, simply because it is used so widely in one-to-one communication that (most parties) agree should be completely private. That said, it seems like it would be relatively easy to guard against abuse of the feature, as long as clients implementations err on the side of only adding non-repudiation to an exchange when absolutely required.
I think I'm still not clear on how non-repudiation harms privacy even in 1-1 communications. Clients in such situations can already elect to disclose the contents of the communication later; this just gives them the ability to do so in a way that makes it harder for the other party to claim it never happened (and if this is your goal, why aren't you using something that explicitly provides deniability like OTR?).
Consider a spectrum between "secure but trivial to repudiate" and "secure but nigh-impossible to repudiate with OTR and TLS-N on each end. Most secure messages are passed in situations somewhere in the murky middle. A privacy purist might argue that OTR-like behavior should be the default full-stop.
The question of "harming privacy" in any situation is more like spacecraft engineering than software engineering. We really do need to care about the very low probability events, because the cost of failure can be catastrophic to the individuals involved. Just pragmatically speaking, 1-1 communication in the context of TLS frequently means individual humans interacting with individual business/legal entities. Sure, the intent of anyone publishing a post on reddit is one-to-many communication.
But privacy in reading such a thing is a relatively new problem. It used to be a 1-1 relationship between you and the kid selling newspapers on the corner of town square. Even in the age of television, it was still a reasonable expectation that CBS didn't know and couldn't prove you were watching Walter Kronkite.
Do not give Bob $50 under any circumstances.
Do [X] give bob $50 under any circumstances.Is it the first? X.509 client authentication provides a mutually authenticated TLS connection.